From 2621703f1f04984fcc719939ff01c5836c71978e Mon Sep 17 00:00:00 2001 From: zhuoda Date: Sat, 22 Oct 2022 20:49:25 +0800 Subject: [PATCH] =?UTF-8?q?2.0=E7=9A=84js=E7=89=88=E6=9C=AC=E5=92=8C?= =?UTF-8?q?=E5=90=8E=E7=AB=AF=20=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- smart-admin-api/sa-admin/pom.xml | 36 + .../sa/admin}/SmartAdminApplication.java | 23 +- .../sa/admin/common/AdminBaseController.java | 13 + .../admin/config/OperateLogAspectConfig.java | 34 + .../sa/admin/config/SecurityConfig.java | 40 + .../sa/admin/config/SecurityMethodConfig.java | 50 + .../sa/admin/constant/AdminCacheConst.java | 57 + .../sa/admin/constant/AdminRedisKeyConst.java | 17 + .../admin/constant/AdminSwaggerTagConst.java | 55 + .../sa/admin/listener/AdminStartupRunner.java | 40 + .../category/constant/CategoryTypeEnum.java | 36 + .../controller/CategoryController.java | 68 + .../business/category/dao/CategoryDao.java | 72 + .../category/domain/dto/CategoryBaseDTO.java | 44 + .../domain/dto/CategorySimpleDTO.java | 26 + .../domain/entity/CategoryEntity.java | 67 + .../category/domain/form/CategoryAddForm.java | 49 + .../domain/form/CategoryTreeQueryForm.java | 25 + .../domain/form/CategoryUpdateForm.java | 24 + .../category/domain/vo/CategoryTreeVO.java | 40 + .../category/domain/vo/CategoryVO.java | 51 + .../manager/CategoryCacheManager.java | 120 + .../service/CategoryQueryService.java | 214 + .../category/service/CategoryService.java | 220 + .../goods/constant/GoodsStatusEnum.java | 42 + .../goods/controller/GoodsController.java | 75 + .../module/business/goods/dao/GoodsDao.java | 41 + .../goods/domain/entity/GoodsEntity.java | 75 + .../goods/domain/form/GoodsAddForm.java | 57 + .../goods/domain/form/GoodsQueryForm.java | 46 + .../goods/domain/form/GoodsUpdateForm.java | 23 + .../business/goods/domain/vo/GoodsVO.java | 56 + .../business/goods/manager/GoodsManager.java | 20 + .../business/goods/service/GoodsService.java | 167 + .../business/oa/bank/BankController.java | 74 + .../module/business/oa/bank/BankDao.java | 61 + .../module/business/oa/bank/BankService.java | 162 + .../oa/bank/domain/BankCreateForm.java | 58 + .../business/oa/bank/domain/BankEntity.java | 95 + .../oa/bank/domain/BankQueryForm.java | 40 + .../oa/bank/domain/BankUpdateForm.java | 23 + .../business/oa/bank/domain/BankVO.java | 58 + .../oa/enterprise/EnterpriseController.java | 115 + .../enterprise/EnterpriseEmployeeManager.java | 19 + .../oa/enterprise/EnterpriseService.java | 252 + .../constant/EnterpriseTypeEnum.java | 40 + .../oa/enterprise/dao/EnterpriseDao.java | 72 + .../enterprise/dao/EnterpriseEmployeeDao.java | 88 + .../entity/EnterpriseEmployeeEntity.java | 51 + .../domain/entity/EnterpriseEntity.java | 153 + .../domain/form/EnterpriseCreateForm.java | 101 + .../domain/form/EnterpriseEmployeeForm.java | 29 + .../form/EnterpriseEmployeeQueryForm.java | 35 + .../domain/form/EnterpriseQueryForm.java | 38 + .../domain/form/EnterpriseUpdateForm.java | 23 + .../domain/vo/EnterpriseEmployeeVO.java | 47 + .../domain/vo/EnterpriseListVO.java | 20 + .../oa/enterprise/domain/vo/EnterpriseVO.java | 89 + .../oa/invoice/InvoiceController.java | 80 + .../business/oa/invoice/InvoiceDao.java | 61 + .../business/oa/invoice/InvoiceService.java | 158 + .../oa/invoice/domain/InvoiceAddForm.java | 59 + .../oa/invoice/domain/InvoiceEntity.java | 98 + .../oa/invoice/domain/InvoiceQueryForm.java | 40 + .../oa/invoice/domain/InvoiceUpdateForm.java | 23 + .../business/oa/invoice/domain/InvoiceVO.java | 58 + .../NoticeVisibleRangeDataTypeEnum.java | 30 + .../notice/controller/NoticeController.java | 138 + .../business/oa/notice/dao/NoticeDao.java | 144 + .../business/oa/notice/dao/NoticeTypeDao.java | 21 + .../oa/notice/domain/entity/NoticeEntity.java | 99 + .../domain/entity/NoticeTypeEntity.java | 41 + .../oa/notice/domain/form/NoticeAddForm.java | 78 + .../domain/form/NoticeEmployeeQueryForm.java | 35 + .../notice/domain/form/NoticeQueryForm.java | 48 + .../notice/domain/form/NoticeUpdateForm.java | 24 + .../form/NoticeViewRecordQueryForm.java | 32 + .../domain/form/NoticeVisibleRangeForm.java | 34 + .../oa/notice/domain/vo/NoticeDetailVO.java | 84 + .../oa/notice/domain/vo/NoticeEmployeeVO.java | 26 + .../oa/notice/domain/vo/NoticeTypeVO.java | 24 + .../notice/domain/vo/NoticeUpdateFormVO.java | 35 + .../oa/notice/domain/vo/NoticeVO.java | 75 + .../notice/domain/vo/NoticeViewRecordVO.java | 49 + .../domain/vo/NoticeVisibleRangeVO.java | 29 + .../oa/notice/manager/NoticeManager.java | 67 + .../notice/service/NoticeEmployeeService.java | 159 + .../oa/notice/service/NoticeService.java | 250 + .../oa/notice/service/NoticeTypeService.java | 87 + .../module/system/datascope}/DataScope.java | 29 +- .../system/datascope/DataScopeController.java | 41 + .../system/datascope/MyBatisPlugin.java | 80 +- .../datascope/constant/DataScopeTypeEnum.java | 29 +- .../constant/DataScopeViewTypeEnum.java | 53 + .../constant/DataScopeWhereInTypeEnum.java | 42 + .../domain}/DataScopeAndViewTypeVO.java | 15 +- .../datascope/domain}/DataScopeDTO.java | 15 +- .../datascope/domain/DataScopeSqlConfig.java | 41 + .../domain}/DataScopeViewTypeVO.java | 16 +- .../datascope/service/DataScopeService.java | 75 + .../service/DataScopeSqlConfigService.java | 83 +- .../service/DataScopeViewService.java | 79 +- .../strategy/DataScopePowerStrategy.java | 27 + .../controller/DepartmentController.java | 71 + .../system/department/dao/DepartmentDao.java | 40 + .../domain/entity/DepartmentEntity.java | 62 + .../domain/form/DepartmentAddForm.java | 26 +- .../domain/form/DepartmentUpdateForm.java | 24 + .../domain/vo/DepartmentEmployeeTreeVO.java | 27 + .../domain/vo/DepartmentTreeVO.java | 32 + .../department/domain/vo/DepartmentVO.java | 36 + .../manager/DepartmentCacheManager.java | 249 + .../department/manager/DepartmentManager.java | 21 + .../department/service/DepartmentService.java | 210 + .../controller/EmployeeController.java | 105 + .../system/employee/dao/EmployeeDao.java | 171 + .../domain/entity/EmployeeEntity.java | 81 + .../employee/domain/form/EmployeeAddForm.java | 56 + .../EmployeeBatchUpdateDepartmentForm.java | 31 + .../domain/form/EmployeeQueryForm.java | 40 + .../domain/form/EmployeeUpdateForm.java | 23 + .../form/EmployeeUpdatePasswordForm.java | 34 + .../domain/form/EmployeeUpdateRoleForm.java | 30 + .../system/employee/domain/vo/EmployeeVO.java | 58 + .../employee/manager/EmployeeManager.java | 82 + .../service/EmployeePermissionService.java | 81 + .../employee/service/EmployeeService.java | 383 + .../login/controller/LoginController.java | 90 + .../login/domain/LoginEmployeeDetail.java | 165 + .../module/system/login/domain/LoginForm.java | 41 + .../system/login/service/LoginService.java | 272 + .../menu/constant/MenuPermsTypeEnum.java | 46 + .../system/menu/constant/MenuTypeEnum.java | 48 + .../menu/controller/MenuController.java | 86 + .../admin/module/system/menu/dao/MenuDao.java | 105 + .../system/menu/domain/entity/MenuEntity.java | 139 + .../system/menu/domain/form/MenuAddForm.java | 20 + .../system/menu/domain/form/MenuBaseForm.java | 86 + .../domain/form/MenuPointsOperateForm.java | 43 + .../menu/domain/form/MenuUpdateForm.java | 26 + .../menu/domain/vo/MenuSimpleTreeVO.java | 37 + .../system/menu/domain/vo/MenuTreeVO.java | 22 + .../module/system/menu/domain/vo/MenuVO.java | 35 + .../system/menu/manager/MenuManager.java | 70 + .../system/menu/service/MenuService.java | 290 + .../role/controller/RoleController.java | 70 + .../controller/RoleDataScopeController.java | 50 + .../controller/RoleEmployeeController.java | 77 + .../role/controller/RoleMenuController.java | 47 + .../admin/module/system/role/dao/RoleDao.java | 29 + .../system/role/dao/RoleDataScopeDao.java | 46 + .../system/role/dao}/RoleEmployeeDao.java | 59 +- .../module/system/role/dao/RoleMenuDao.java | 54 + .../domain/entity/RoleDataScopeEntity.java | 53 + .../domain/entity/RoleEmployeeEntity.java | 41 + .../system/role/domain/entity/RoleEntity.java | 41 + .../role/domain/entity/RoleMenuEntity.java | 49 + .../system/role/domain/form/RoleAddForm.java | 13 +- .../domain/form/RoleDataScopeUpdateForm.java | 43 + .../domain/form/RoleEmployeeQueryForm.java | 24 + .../domain/form/RoleEmployeeUpdateForm.java | 18 +- .../role/domain/form/RoleMenuUpdateForm.java | 35 + .../role/domain/form/RoleQueryForm.java | 24 + .../role/domain/form/RoleUpdateForm.java | 27 + .../role/domain/vo/RoleDataScopeVO.java | 23 + .../system/role/domain/vo/RoleEmployeeVO.java | 22 + .../system/role/domain/vo/RoleMenuTreeVO.java | 29 + .../system/role/domain/vo/RoleSelectedVO.java | 20 + .../module/system/role/domain/vo}/RoleVO.java | 17 +- .../role/manager/RoleDataScopeManager.java | 20 + .../role/manager/RoleEmployeeManager.java | 37 + .../system/role/manager/RoleMenuManager.java | 40 + .../role/service/RoleDataScopeService.java | 67 + .../role/service/RoleEmployeeService.java | 153 + .../system/role/service/RoleMenuService.java | 130 + .../system/role/service/RoleService.java | 119 + .../system/support/AdminCacheController.java | 56 + .../support/AdminChangeLogController.java | 59 + .../system/support/AdminConfigController.java | 59 + .../system/support/AdminDictController.java | 79 + .../system/support/AdminFileController.java | 51 + .../support/AdminHeartBeatController.java | 41 + .../support/AdminHelpDocController.java | 108 + .../support/AdminLoginLogController.java | 42 + .../support/AdminOperateLogController.java | 46 + .../system/support/AdminReloadController.java | 54 + .../support/AdminSerialNumberController.java | 74 + .../src/main/resources/dev/application.yaml | 15 + .../src/main/resources/dev/log4j2.xml | 4 +- .../src/main/resources/dev/spy.properties | 18 + .../business/category/CategoryMapper.xml | 61 + .../mapper/business/goods/GoodsMapper.xml | 41 + .../mapper/business/notice/NoticeMapper.xml | 69 + .../mapper/business/oa/bank/BankMapper.xml | 58 + .../enterprise/EnterpriseEmployeeMapper.xml | 94 + .../oa/enterprise/EnterpriseMapper.xml | 59 + .../business/oa/invoice/InvoiceMapper.xml | 56 + .../mapper/business/oa/notice/NoticeDao.xml | 244 + .../system/department/DepartmentMapper.xml | 23 + .../mapper/system/employee/EmployeeMapper.xml | 200 + .../mapper/system/menu/MenuMapper.xml | 78 + .../system/role/RoleDataScopeMapper.xml | 16 +- .../mapper/system/role/RoleEmployeeMapper.xml | 134 + .../mapper/system/role/RoleMapper.xml | 15 + .../mapper/system/role/RoleMenuMapper.xml | 42 + .../src/main/resources/pre/application.yaml | 18 + .../src/main/resources/pre}/log4j2.xml | 4 +- .../src/main/resources/pre/spy.properties | 18 + .../src/main/resources/prod/application.yaml | 18 + .../src/main/resources/prod}/log4j2.xml | 4 +- .../src/main/resources/prod/spy.properties | 18 + .../src/main/resources/test/application.yaml | 18 + .../src/main/resources/test}/log4j2.xml | 6 +- .../src/main/resources/test/spy.properties | 18 + .../sa/admin/SmartAdminApplicationTest.java | 25 + .../sa-common}/pom.xml | 398 +- .../common/common/annoation}/NoNeedLogin.java | 16 +- .../sa/common/common/annoation/SaAuth.java | 22 + .../sa/common/common/code/ErrorCode.java | 52 + .../common/code/ErrorCodeRangeContainer.java | 119 + .../common/common/code/ErrorCodeRegister.java | 41 + .../common/common/code/SystemErrorCode.java | 36 + .../common/code/UnexpectedErrorCode.java | 36 + .../sa/common/common/code/UserErrorCode.java | 48 + .../common/constant/RequestHeaderConst.java | 18 + .../common/common/constant/StringConst.java | 44 + .../controller/SupportBaseController.java | 16 + .../common/common/domain/DataScopePlugin.java | 15 + .../sa/common/common/domain/PageParam.java | 58 + .../sa/common/common/domain/PageResult.java | 16 +- .../sa/common/common/domain/RequestUrlVO.java | 26 + .../sa/common/common/domain/RequestUser.java | 49 + .../sa/common/common/domain/ResponseDTO.java | 101 + .../common/domain/SystemEnvironment.java | 35 + .../sa/common/common/domain/ValidateData.java | 21 + .../common}/common/domain/ValidateList.java | 13 +- .../common/common/enumeration}/BaseEnum.java | 24 +- .../common/common/enumeration/GenderEnum.java | 37 + .../enumeration/SystemEnvironmentEnum.java | 50 + .../common/enumeration/UserTypeEnum.java | 37 + .../sa/common/common/excel/ExcelStyle.java | 185 + .../common/exception/BusinessException.java | 38 + .../interceptor/AbstractInterceptor.java | 148 + .../deserializer/DictValueVoDeserializer.java | 52 + .../deserializer/FileKeyVoDeserializer.java | 53 + .../deserializer}/LongJsonDeserializer.java | 11 +- .../BigDecimalNullZeroSerializer.java | 29 + .../serializer/DictValueVoSerializer.java | 52 + .../json/serializer/FileKeySerializer.java | 45 + .../json/serializer/FileKeyVoSerializer.java | 46 + .../json/serializer}/LongJsonSerializer.java | 13 +- .../security/AbstractSecurityConfig.java | 91 + .../SecurityAuthenticationFailHandler.java | 43 + .../common/security/SecurityMethodSource.java | 66 + .../SecurityPermissionCheckService.java | 74 + .../common/security/SecurityTokenFilter.java | 64 + .../common/swagger}/ApiModelPropertyEnum.java | 25 +- .../swagger/Swagger2MapperImplExtension.java | 91 + .../SwaggerApiModelPropertyEnumPlugin.java | 55 +- .../sa/common/common}/util/SmartBeanUtil.java | 41 +- .../common}/util/SmartBigDecimalUtil.java | 174 +- .../common}/util/SmartEasyPoiExcelUtil.java | 41 +- .../sa/common/common/util/SmartEnumUtil.java | 165 + .../sa/common/common/util/SmartPageUtil.java | 111 + .../common/common/util/SmartRequestUtil.java | 38 + .../common/common}/util/SmartStringUtil.java | 103 +- .../common}/util/SmartVerificationUtil.java | 27 +- .../validator/enumeration}/CheckEnum.java | 18 +- .../validator/enumeration}/EnumValidator.java | 14 +- .../lab1024/sa/common/config/AsyncConfig.java | 71 + .../sa/common/config/CorsFilterConfig.java | 45 + .../sa/common/config/DataSourceConfig.java | 81 +- .../lab1024/sa/common/config/DateConfig.java | 88 + .../sa/common/config/FileCloudConfig.java | 85 + .../sa/common/config/HeartBeatConfig.java | 37 + .../lab1024/sa/common/config/MvcConfig.java | 50 + .../sa/common/config/MybatisPlusConfig.java | 33 + .../sa/common/config/PostProcessorConfig.java | 56 + .../lab1024/sa/common/config/RedisConfig.java | 18 +- .../sa/common/config/ReloadConfig.java | 38 + .../sa/common/config/RepeatSubmitConfig.java | 40 + .../sa/common/config/RestTemplateConfig.java | 130 + .../sa/common/config/ScheduleConfig.java | 47 + .../sa/common/config/SwaggerConfig.java | 206 + .../config/SystemEnvironmentConfig.java | 49 + .../lab1024/sa/common/config/UrlConfig.java | 147 + .../sa/common/constant/CacheKeyConst.java | 14 + .../sa/common/constant/RedisKeyConst.java | 31 + .../sa/common/constant/ReloadConst.java | 18 + .../sa/common/constant/SwaggerTagConst.java | 49 + .../sa/common/constant/UrlPrefixConst.java | 18 + .../handler/GlobalExceptionHandler.java | 126 + .../listener/SmartApplicationListener.java | 54 + .../module/support/cache/CacheService.java | 67 + .../support/captcha/CaptchaController.java | 36 + .../support/captcha/CaptchaService.java | 115 + .../support/captcha/config/CaptchaColor.java | 17 +- .../support/captcha/config/CaptchaConfig.java | 33 +- .../support/captcha/config/CaptchaNoise.java | 28 +- .../captcha/config/CaptchaWordRenderer.java | 29 +- .../support/captcha/domain/CaptchaForm.java | 28 + .../support/captcha/domain/CaptchaVO.java | 29 + .../changelog/constant/ChangeLogTypeEnum.java | 28 + .../controller/ChangeLogController.java | 38 + .../support/changelog/dao/ChangeLogDao.java | 44 + .../domain/entity/ChangeLogEntity.java | 68 + .../domain/form/ChangeLogAddForm.java | 46 + .../domain/form/ChangeLogQueryForm.java | 42 + .../domain/form/ChangeLogUpdateForm.java | 50 + .../changelog/domain/vo/ChangeLogVO.java | 49 + .../changelog/manager/ChangeLogManager.java | 20 + .../changelog/service/ChangeLogService.java | 103 + .../constant/CodeDeleteEnum.java | 38 + .../constant/CodeFrontComponentEnum.java | 52 + .../constant/CodeGeneratorConstant.java | 30 + .../constant/CodeGeneratorPageTypeEnum.java | 38 + .../constant/CodeQueryFieldQueryTypeEnum.java | 43 + .../controller/CodeGeneratorController.java | 106 + .../dao/CodeGeneratorConfigDao.java | 20 + .../codegenerator/dao/CodeGeneratorDao.java | 45 + .../entity/CodeGeneratorConfigEntity.java | 74 + .../domain/form/CodeGeneratorConfigForm.java | 64 + .../domain/form/CodeGeneratorPreviewForm.java | 28 + .../domain/form/TableQueryForm.java | 23 + .../codegenerator/domain/model/CodeBasic.java | 55 + .../domain/model/CodeDelete.java | 40 + .../codegenerator/domain/model/CodeField.java | 59 + .../domain/model/CodeInsertAndUpdate.java | 42 + .../model/CodeInsertAndUpdateField.java | 46 + .../domain/model/CodeQueryField.java | 47 + .../domain/model/CodeTableField.java | 46 + .../domain/vo/TableColumnVO.java | 44 + .../domain/vo/TableConfigVO.java | 40 + .../codegenerator/domain/vo/TableVO.java | 37 + .../service/CodeGeneratorService.java | 223 + .../service/CodeGeneratorTemplateService.java | 238 + .../CodeGenerateBaseVariableService.java | 162 + .../backend/ControllerVariableService.java | 78 + .../variable/backend/DaoVariableService.java | 59 + .../backend/ManagerVariableService.java | 55 + .../backend/ServiceVariableService.java | 62 + .../domain/AddFormVariableService.java | 131 + .../domain/DeleteFormVariableService.java | 130 + .../backend/domain/EntityVariableService.java | 73 + .../backend/domain/MapperVariableService.java | 93 + .../domain/QueryFormVariableService.java | 128 + .../domain/UpdateFormVariableService.java | 145 + .../backend/domain/VOVariableService.java | 115 + .../variable/front/ApiVariableService.java | 29 + .../variable/front/ConstVariableService.java | 45 + .../variable/front/FormVariableService.java | 82 + .../variable/front/ListVariableService.java | 57 + .../codegenerator/util/CodeGeneratorTool.java | 59 + .../support/config/ConfigController.java | 36 + .../module/support/config/ConfigDao.java | 41 + .../module/support/config/ConfigKeyEnum.java | 35 + .../module/support/config/ConfigService.java | 205 + .../support/config/domain/ConfigAddForm.java | 24 +- .../support/config/domain/ConfigEntity.java | 49 + .../config/domain/ConfigQueryForm.java | 23 + .../config/domain/ConfigUpdateForm.java | 23 + .../support/config/domain/ConfigVO.java | 39 + .../annoation/DataTracerFieldBigDecimal.java | 21 + .../annoation/DataTracerFieldDict.java | 22 + .../annoation/DataTracerFieldEnum.java | 25 + .../annoation/DataTracerFieldLabel.java | 26 + .../annoation/DataTracerFieldSql.java | 40 + .../datatracer/constant/DataTracerConst.java | 27 + .../constant/DataTracerTypeEnum.java | 32 + .../controller/DataTracerController.java | 40 + .../support/datatracer/dao/DataTracerDao.java | 42 + .../domain/bo/DataTracerContentBO.java | 39 + .../domain/entity/DataTracerEntity.java | 90 + .../domain/form/DataTracerForm.java | 54 + .../domain/form/DataTracerQueryForm.java | 32 + .../datatracer/domain/vo/DataTracerVO.java | 62 + .../datatracer/manager/DataTracerManger.java | 19 + .../DataTracerChangeContentService.java | 486 + .../datatracer/service/DataTracerService.java | 224 + .../dict/controller/DictController.java | 63 + .../module/support/dict/dao/DictKeyDao.java | 58 + .../module/support/dict/dao/DictValueDao.java | 69 + .../dict/domain/entity/DictKeyEntity.java | 54 + .../dict/domain/entity/DictValueEntity.java | 58 + .../dict/domain/form/DictKeyAddForm.java | 34 + .../dict/domain/form/DictKeyQueryForm.java | 24 + .../dict/domain/form/DictKeyUpdateForm.java | 23 + .../dict/domain/form/DictValueAddForm.java | 44 + .../dict/domain/form/DictValueQueryForm.java | 30 + .../dict/domain/form/DictValueUpdateForm.java | 23 + .../support/dict/domain/vo/DictKeyVO.java | 29 + .../support/dict/domain/vo/DictValueVO.java | 35 + .../dict/service/DictCacheService.java | 133 + .../support/dict/service/DictService.java | 196 + .../controller/FeedbackController.java | 53 + .../support/feedback/dao/FeedbackDao.java | 31 + .../feedback/domain/FeedbackAddForm.java | 33 + .../feedback/domain/FeedbackEntity.java | 62 + .../feedback/domain/FeedbackQueryForm.java | 31 + .../support/feedback/domain/FeedbackVO.java | 51 + .../feedback/service/FeedbackService.java | 62 + .../file/constant/FileFolderTypeEnum.java | 49 + .../file/controller/FileController.java | 72 + .../module/support/file/dao/FileDao.java | 44 + .../file/domain/entity/FileEntity.java | 73 + .../file/domain/form/FileQueryForm.java | 47 + .../file/domain/form/FileUrlUploadForm.java | 31 + .../file/domain/vo/FileDownloadVO.java | 28 + .../file/domain/vo/FileMetadataVO.java | 31 + .../support/file/domain/vo/FileUploadVO.java | 35 + .../module/support/file/domain/vo/FileVO.java | 56 + .../support/file/service/FileService.java | 272 + .../service/FileStorageCloudServiceImpl.java | 215 + .../service/FileStorageLocalServiceImpl.java | 149 + .../file/service/IFileStorageService.java | 209 + .../support/heartbeat/HeartBeatRecordDao.java | 51 + .../heartbeat/HeartBeatRecordHandler.java | 42 + .../support/heartbeat/HeartBeatService.java | 38 + .../heartbeat/core/HeartBeatManager.java | 59 + .../heartbeat/core/HeartBeatRecord.java | 41 + .../heartbeat/core/HeartBeatRunnable.java | 71 + .../core/IHeartBeatRecordHandler.java | 20 + .../domain/HeartBeatRecordEntity.java | 53 + .../domain/HeartBeatRecordQueryForm.java | 30 + .../heartbeat/domain}/HeartBeatRecordVO.java | 20 +- .../helpdoc/controller/HelpDocController.java | 77 + .../helpdoc/dao/HelpDocCatalogDao.java | 21 + .../support/helpdoc/dao/HelpDocDao.java | 137 + .../domain/entity/HelpDocCatalogEntity.java | 53 + .../helpdoc/domain/entity/HelpDocEntity.java | 77 + .../helpdoc/domain/form/HelpDocAddForm.java | 57 + .../domain/form/HelpDocCatalogAddForm.java | 31 + .../domain/form/HelpDocCatalogUpdateForm.java | 23 + .../helpdoc/domain/form/HelpDocQueryForm.java | 33 + .../domain/form/HelpDocRelationForm.java | 28 + .../domain/form/HelpDocUpdateForm.java | 24 + .../form/HelpDocViewRecordQueryForm.java | 32 + .../helpdoc/domain/vo/HelpDocCatalogVO.java | 30 + .../helpdoc/domain/vo/HelpDocDetailVO.java | 65 + .../helpdoc/domain/vo/HelpDocRecordVO.java | 49 + .../helpdoc/domain/vo/HelpDocRelationVO.java | 23 + .../support/helpdoc/domain/vo/HelpDocVO.java | 50 + .../domain/vo/HelpDocViewRecordVO.java | 46 + .../helpdoc/manager/HelpDocManager.java | 60 + .../service/HelpDocCatalogService.java | 115 + .../helpdoc/service/HelpDocService.java | 117 + .../helpdoc/service/HelpDocUserService.java | 85 + .../module/support/jwe/DecryptData.java | 18 + .../common/module/support/jwe/JweAspect.java | 128 + .../common/module/support/jwe/JweDecrypt.java | 20 + .../common/module/support/jwe/JweEncrypt.java | 20 + .../common/module/support/jwe/JweUserKey.java | 32 + .../module/support/loginlog/LoginLogDao.java | 46 + .../support/loginlog/LoginLogResultEnum.java | 37 + .../support/loginlog/LoginLogService.java | 67 + .../loginlog/domain/LoginLogEntity.java | 67 + .../loginlog/domain/LoginLogQueryForm.java | 31 + .../support/loginlog/domain/LoginLogVO.java | 48 + .../support/operatelog/OperateLogDao.java | 49 + .../support/operatelog/OperateLogService.java | 57 + .../operatelog/annoation/OperateLog.java | 19 + .../operatelog/core/OperateLogAspect.java | 276 + .../operatelog/core/OperateLogConfig.java | 38 + .../operatelog/domain/OperateLogEntity.java | 106 + .../domain/OperateLogQueryForm.java | 33 + .../operatelog/domain/OperateLogVO.java | 47 +- .../module/support/redis/RedisService.java | 222 + .../module/support/reload/ReloadCommand.java | 56 + .../module/support/reload/ReloadService.java | 68 + .../core/AbstractSmartReloadCommand.java | 96 + .../reload/core/SmartReloadManager.java | 97 + .../reload/core/annoation}/SmartReload.java | 8 +- .../reload/core/domain/SmartReloadItem.java | 32 + .../reload/core/domain/SmartReloadObject.java | 32 + .../reload/core/domain/SmartReloadResult.java | 43 + .../core/thread/SmartReloadRunnable.java | 114 + .../support/reload/dao/ReloadItemDao.java | 25 + .../support/reload/dao/ReloadResultDao.java | 26 + .../support/reload/domain/ReloadForm.java | 20 +- .../reload/domain}/ReloadItemEntity.java | 16 +- .../support/reload/domain/ReloadItemVO.java | 36 + .../reload/domain}/ReloadResultEntity.java | 15 +- .../support/reload/domain/ReloadResultVO.java | 34 + .../repeatsubmit/RepeatSubmitAspect.java | 82 + .../repeatsubmit/annoation/RepeatSubmit.java | 33 + .../ticket/AbstractRepeatSubmitTicket.java | 56 + .../ticket/RepeatSubmitCaffeineTicket.java | 50 + .../ticket/RepeatSubmitRedisTicket.java | 48 + .../constant/SerialNumberIdEnum.java | 42 + .../constant/SerialNumberRuleTypeEnum.java | 44 + .../serialnumber/dao/SerialNumberDao.java | 41 + .../dao/SerialNumberRecordDao.java | 55 + .../domain/SerialNumberEntity.java | 79 + .../domain/SerialNumberGenerateForm.java | 28 + .../domain/SerialNumberGenerateResultBO.java | 52 + .../domain/SerialNumberInfoBO.java | 97 + .../domain/SerialNumberLastGenerateBO.java | 41 + .../domain/SerialNumberRecordEntity.java | 57 + .../domain/SerialNumberRecordQueryForm.java | 24 + .../service/SerialNumberBaseService.java | 252 + .../service/SerialNumberRecordService.java | 39 + .../service/SerialNumberService.java | 36 + .../impl/SerialNumberInternService.java | 78 + .../impl/SerialNumberMysqlService.java | 61 + .../impl/SerialNumberRedisService.java | 105 + .../support/table/TableColumnController.java | 51 + .../module/support/table/TableColumnDao.java | 23 + .../support/table/TableColumnService.java | 72 + .../table/domain/TableColumnEntity.java | 49 + .../table/domain/TableColumnItemForm.java | 37 + .../table/domain/TableColumnUpdateForm.java | 27 + .../common/module/support/token/JwtConst.java | 38 + .../module/support/token/LoginDeviceEnum.java | 43 + .../module/support/token/TokenService.java | 220 + .../main/resources/META-INF/spring.factories | 2 + .../sa-common}/src/main/resources/banner.txt | 13 +- .../java/constant/enum.java.vm | 24 + .../java/controller/Controller.java.vm | 68 + .../java/dao/Dao.java.vm | 51 + .../java/domain/entity/Entity.java.vm | 32 + .../java/domain/form/AddForm.java.vm | 30 + .../java/domain/form/QueryForm.java.vm | 38 + .../java/domain/form/UpdateForm.java.vm | 30 + .../java/domain/vo/VO.java.vm | 32 + .../java/manager/Manager.java.vm | 21 + .../java/mapper/Mapper.xml.vm | 74 + .../java/service/Service.java.vm | 108 + .../code-generator-template/js/api.js.vm | 78 + .../code-generator-template/js/const.js.vm | 23 + .../code-generator-template/js/form.vue.vm | 181 + .../code-generator-template/js/list.vue.vm | 317 + .../code-generator-template/tools.xml | 7 + .../src/main/resources/dev/sa-common.yaml | 129 + .../mapper/support/ChangeLogMapper.xml | 47 + .../mapper/support/CodeGeneratorMapper.xml | 36 + .../resources/mapper/support/ConfigMapper.xml | 22 + .../mapper/support/DataTracerMapper.xml | 31 + .../mapper/support/DictKeyMapper.xml | 37 + .../mapper/support/DictValueMapper.xml | 44 + .../mapper/support/FeedbackMapper.xml | 26 + .../resources/mapper/support/FileMapper.xml | 49 + .../mapper/support/HeartBeatRecordMapper.xml | 37 + .../resources/mapper/support/HelpDocDao.xml | 130 + .../mapper/support/LoginLogMapper.xml | 37 + .../mapper/support/OperateLogMapper.xml | 37 + .../mapper/support/ReloadItemMapper.xml | 10 + .../mapper/support/ReloadResultMapper.xml | 10 + .../mapper/support/SerialNumberMapper.xml | 21 + .../support/SerialNumberRecordMapper.xml | 32 + .../mapper/support/TableColumnMapper.xml | 18 + .../src/main/resources/pre/sa-common.yaml | 129 + .../src/main/resources/prod/sa-common.yaml | 129 + .../src/main/resources/test/sa-common.yaml | 129 + smart-admin-api/sa-parent/pom.xml | 352 + smart-admin-h5/.browserslistrc | 2 - smart-admin-h5/.editorconfig | 15 - smart-admin-h5/.env.development | 3 - smart-admin-h5/.env.local | 3 - smart-admin-h5/.env.pre | 3 - smart-admin-h5/.env.prod | 3 - smart-admin-h5/.env.sit | 3 - smart-admin-h5/.eslintignore | 7 - smart-admin-h5/.eslintrc.js | 232 - smart-admin-h5/.gitignore | 22 - smart-admin-h5/.postcssrc.js | 11 - smart-admin-h5/.prettierrc.js | 31 - smart-admin-h5/.sentryclirc | 7 - smart-admin-h5/README.md | 4 - smart-admin-h5/babel.config.js | 16 - smart-admin-h5/package.json | 58 - smart-admin-h5/public/index.html | 47 - smart-admin-h5/src/App.vue | 16 - smart-admin-h5/src/api/employee.js | 43 - smart-admin-h5/src/api/file.js | 14 - smart-admin-h5/src/api/login.js | 10 - smart-admin-h5/src/api/system-config.js | 31 - smart-admin-h5/src/api/user.js | 7 - smart-admin-h5/src/assets/css/index.scss | 5 - smart-admin-h5/src/assets/logo.png | Bin 6849 -> 0 bytes .../employee/department-employee-selector.vue | 121 - .../select-picker/SmartEnumSelectPicker.vue | 61 - .../form/select-picker/SmartSelectPicker | 59 - .../src/components/mixin/session-mixin.js | 25 - .../src/components/van-bar/BackNavBar.vue | 24 - .../src/components/van-bar/RouterNavBar.vue | 27 - smart-admin-h5/src/config/index.js | 46 - smart-admin-h5/src/constants/area.js | 4047 ---- .../src/constants/erp/contact-company.js | 165 - smart-admin-h5/src/constants/erp/index.js | 6 - smart-admin-h5/src/constants/file.js | 92 - smart-admin-h5/src/constants/index.js | 7 - smart-admin-h5/src/constants/school.js | 71 - smart-admin-h5/src/filters/filter.js | 298 - smart-admin-h5/src/filters/index.js | 5 - smart-admin-h5/src/lib/cookie.js | 21 - smart-admin-h5/src/lib/erp-http.js | 65 - smart-admin-h5/src/lib/http.js | 65 - smart-admin-h5/src/lib/local.js | 8 - smart-admin-h5/src/lib/menu-func.js | 276 - smart-admin-h5/src/lib/printPlugs.js | 133 - smart-admin-h5/src/lib/render-dom.js | 10 - smart-admin-h5/src/lib/smart-sentry.js | 21 - smart-admin-h5/src/lib/util.js | 515 - smart-admin-h5/src/lib/watermark.js | 49 - smart-admin-h5/src/main.js | 62 - smart-admin-h5/src/plugins/smart-sentry.js | 17 - smart-admin-h5/src/plugins/smart.js | 24 - smart-admin-h5/src/plugins/vant.js | 8 - smart-admin-h5/src/router/dashboard/index.js | 42 - smart-admin-h5/src/router/develop/develop.js | 21 - smart-admin-h5/src/router/error/error.js | 26 - smart-admin-h5/src/router/index.js | 150 - smart-admin-h5/src/router/login/login.js | 15 - smart-admin-h5/src/router/router-const.js | 23 - smart-admin-h5/src/router/routers.js | 32 - smart-admin-h5/src/router/user/user.js | 21 - smart-admin-h5/src/store/index.js | 23 - smart-admin-h5/src/store/module/app.js | 32 - smart-admin-h5/src/store/module/user.js | 41 - smart-admin-h5/src/themes/index.scss | 6 - smart-admin-h5/src/utils/index.js | 110 - smart-admin-h5/src/utils/request.js | 58 - smart-admin-h5/src/utils/validate.js | 20 - .../src/views/dashboard/dashboard.vue | 99 - smart-admin-h5/src/views/develop/config.vue | 47 - smart-admin-h5/src/views/error/404.vue | 23 - smart-admin-h5/src/views/login/login.vue | 68 - .../src/views/user/change-password.vue | 76 - smart-admin-h5/src/views/user/index.vue | 79 - smart-admin-h5/vue.config.js | 200 - smart-admin-service/.gitignore | 31 - smart-admin-service/README.md | 17 - smart-admin-service/pom.xml | 349 - .../smart-admin-api/doc/readme.txt | 15 - .../common/anno/NoValidPrivilege.java | 20 - .../smartadmin/common/anno/OperateLog.java | 20 - .../common/constant/CommentSortTypeEnum.java | 57 - .../smartadmin/common/constant/JudgeEnum.java | 52 - .../common/constant/ResponseCodeConst.java | 181 - .../common/controller/BaseController.java | 42 - .../smartadmin/common/domain/BaseEntity.java | 39 - .../smartadmin/common/domain/ITask.java | 16 - .../common/domain/OrderItemDTO.java | 16 - .../common/domain/PageParamDTO.java | 33 - .../smartadmin/common/domain/ResponseDTO.java | 132 - .../exception/SmartBusinessException.java | 33 - .../exception/SmartResponseCodeException.java | 24 - .../heartbeat/AbstractHeartBeatCommand.java | 90 - .../common/heartbeat/HeartBeatConfig.java | 29 - .../common/heartbeat/HeartBeatLogger.java | 20 - .../HeartBeatRecordCommendInterface.java | 17 - .../common/heartbeat/HeartBeatRecordDTO.java | 37 - .../heartbeat/HeatBeatRecordHelper.java | 45 - .../smartadmin/common/heartbeat/IpUtil.java | 81 - .../common/heartbeat/StringUtil.java | 60 - .../common/reload/SmartReloadManager.java | 134 - .../common/reload/SmartReloadScheduler.java | 87 - .../abstracts/AbstractSmartReloadCommand.java | 66 - .../AbstractSmartReloadCommand4Spring.java | 67 - .../domain/AbstractSmartReloadObject.java | 31 - .../reload/domain/AnnotationReloadObject.java | 44 - .../reload/domain/InterfaceReloadObject.java | 37 - .../reload/domain/entity/ReloadItem.java | 55 - .../domain/entity/SmartReloadResult.java | 102 - .../SmartReloadCommandInterface.java | 38 - .../interfaces/SmartReloadThreadLogger.java | 12 - .../reload/interfaces/SmartReloadable.java | 19 - .../bigdecimal/BigDecimalValidator.java | 73 - .../validator/bigdecimal/CheckBigDecimal.java | 53 - .../bigdecimal/ComparisonSymbolEnum.java | 40 - .../config/SmartAdminWebAppConfig.java | 25 - .../config/SmartHeartBeatConfig.java | 33 - .../config/SmartMybatisPlusConfig.java | 27 - .../smartadmin/config/SmartReloadConfig.java | 45 - .../config/SmartRestTemplateConfig.java | 109 - .../SmartSwaggerApiModelEnumConfig.java | 29 - .../SmartSwaggerDynamicGroupConfig.java | 236 - .../config/SmartWebSocketConfig.java | 25 - .../config/SystemEnvironmentCondition.java | 22 - .../smartadmin/constant/CommonConst.java | 51 - .../constant/SmartReloadTagConst.java | 16 - .../smartadmin/constant/SwaggerTagConst.java | 69 - .../constant/SystemEnvironmentEnum.java | 67 - .../handler/SmartGlobalExceptionHandler.java | 73 - .../handler/SmartOperateLogAspect.java | 167 - .../SmartAuthenticationInterceptor.java | 158 - .../listener/SmartAdminStartupRunner.java | 22 - .../business/email/EmailController.java | 81 - .../module/business/email/EmailDao.java | 47 - .../business/email/EmailSendStatusEnum.java | 37 - .../module/business/email/EmailService.java | 122 - .../email/domain/dto/EmailConfigDTO.java | 30 - .../business/email/domain/dto/EmailDTO.java | 44 - .../email/domain/dto/EmailQueryDTO.java | 35 - .../business/email/domain/dto/EmailVO.java | 45 - .../email/domain/entity/EmailEntity.java | 40 - .../module/business/log/LogService.java | 75 - .../OrderOperateLogController.java | 44 - .../orderoperatelog/OrderOperateLogDao.java | 30 - .../OrderOperateLogService.java | 64 - .../OrderOperateLogDefaultEmpEnum.java | 37 - .../OrderOperateLogOperateTypeConst.java | 30 - .../OrderOperateLogOrderTypeEnum.java | 51 - .../domain/dto/OrderOperateLogSaveDTO.java | 80 - .../domain/dto/SupplierOrderOperateVO.java | 44 - .../domain/entity/OrderOperateLogEntity.java | 58 - .../domain/vo/OrderOperateLogVO.java | 69 - .../userloginlog/UserLoginLogController.java | 54 - .../log/userloginlog/UserLoginLogDao.java | 47 - .../log/userloginlog/UserLoginLogService.java | 82 - .../userloginlog/domain/UserLoginLogDTO.java | 53 - .../domain/UserLoginLogEntity.java | 60 - .../domain/UserLoginLogQueryDTO.java | 31 - .../UserOperateLogController.java | 50 - .../log/useroperatelog/UserOperateLogDao.java | 47 - .../useroperatelog/UserOperateLogService.java | 91 - .../domain/UserOperateLogEntity.java | 74 - .../domain/UserOperateLogQueryDTO.java | 34 - .../business/notice/NoticeController.java | 96 - .../module/business/notice/NoticeManage.java | 97 - .../module/business/notice/NoticeService.java | 235 - .../module/business/notice/dao/NoticeDao.java | 103 - .../notice/dao/NoticeReceiveRecordDao.java | 48 - .../notice/domain/dto/NoticeAddDTO.java | 28 - .../notice/domain/dto/NoticeDetailVO.java | 30 - .../notice/domain/dto/NoticeQueryDTO.java | 34 - .../notice/domain/dto/NoticeReadCountDTO.java | 26 - .../notice/domain/dto/NoticeReceiveDTO.java | 43 - .../domain/dto/NoticeReceiveQueryDTO.java | 25 - .../notice/domain/dto/NoticeUpdateDTO.java | 21 - .../business/notice/domain/dto/NoticeVO.java | 42 - .../notice/domain/entity/NoticeEntity.java | 45 - .../entity/NoticeReceiveRecordEntity.java | 33 - .../peony/controller/PeonyController.java | 88 - .../module/business/peony/dao/PeonyDao.java | 64 - .../peony/domain/dto/PeonyAddDTO.java | 41 - .../peony/domain/dto/PeonyQueryDTO.java | 44 - .../peony/domain/dto/PeonyUpdateDTO.java | 20 - .../peony/domain/entity/PeonyEntity.java | 44 - .../peony/domain/vo/PeonyExcelVO.java | 42 - .../business/peony/domain/vo/PeonyVO.java | 45 - .../business/peony/service/PeonyService.java | 108 - .../constant/SqlOperateTypeEnum.java | 34 - .../support/codegenerator/dao/TableDao.java | 40 - .../domain/CodeGeneratorDTO.java | 56 - .../domain/CodeGeneratorQueryColumnDTO.java | 30 - .../codegenerator/domain/ColumnVO.java | 36 - .../codegenerator/domain/QueryFieldVO.java | 30 - .../service/CodeGeneratorComponent.java | 92 - .../service/CodeGeneratorService.java | 336 - .../module/support/file/FileController.java | 93 - .../module/support/file/FileDao.java | 72 - .../file/constant/FileModuleTypeEnum.java | 47 - .../file/constant/FileResponseCodeConst.java | 37 - .../file/constant/FileServiceNameConst.java | 24 - .../file/constant/FileServiceTypeEnum.java | 52 - .../support/file/domain/dto/FileAddDTO.java | 39 - .../support/file/domain/dto/FileDTO.java | 58 - .../support/file/domain/dto/FileQueryDTO.java | 33 - .../support/file/domain/dto/OSSConfig.java | 35 - .../file/domain/entity/FileEntity.java | 58 - .../module/support/file/domain/vo/FileVO.java | 58 - .../support/file/domain/vo/UploadVO.java | 27 - .../support/file/service/FileService.java | 198 - .../file/service/FileServiceAliYun.java | 182 - .../file/service/FileServiceLocal.java | 123 - .../file/service/FileServiceQiNiuYun.java | 175 - .../support/file/service/IFileService.java | 152 - .../heartbeat/HeartBeatController.java | 32 - .../support/heartbeat/HeartBeatRecordDao.java | 52 - .../heartbeat/HeartBeatRecordEntity.java | 42 - .../support/heartbeat/HeartBeatService.java | 90 - .../support/idgenerator/IdGeneratorDao.java | 36 - .../idgenerator/IdGeneratorManager.java | 66 - .../idgenerator/IdGeneratorService.java | 140 - .../idgenerator/constant/IdGeneratorEnum.java | 45 - .../constant/IdGeneratorRuleTypeEnum.java | 40 - .../idgenerator/domain/IdGeneratorEntity.java | 45 - .../domain/IdGeneratorLastNumberDTO.java | 38 - .../idgenerator/domain/IdGeneratorPOJO.java | 71 - .../domain/IdGeneratorRecordDTO.java | 22 - .../support/quartz/constant/QuartzConst.java | 17 - .../quartz/constant/TaskResultEnum.java | 47 - .../quartz/constant/TaskStatusEnum.java | 47 - .../quartz/controller/QuartzController.java | 81 - .../support/quartz/dao/QuartzTaskDao.java | 42 - .../support/quartz/dao/QuartzTaskLogDao.java | 35 - .../quartz/domain/dto/QuartzLogQueryDTO.java | 25 - .../quartz/domain/dto/QuartzQueryDTO.java | 16 - .../quartz/domain/dto/QuartzTaskDTO.java | 45 - .../quartz/domain/dto/QuartzTaskLogVO.java | 49 - .../quartz/domain/dto/QuartzTaskVO.java | 45 - .../domain/entity/QuartzTaskEntity.java | 50 - .../domain/entity/QuartzTaskLogEntity.java | 50 - .../support/quartz/service/QuartzTask.java | 85 - .../quartz/service/QuartzTaskLogService.java | 28 - .../quartz/service/QuartzTaskService.java | 349 - .../support/quartz/task/test/Example.java | 28 - .../smartreload/SmartReloadCommand.java | 52 - .../smartreload/SmartReloadController.java | 52 - .../smartreload/SmartReloadService.java | 103 - .../smartreload/dao/ReloadItemDao.java | 15 - .../smartreload/dao/ReloadResultDao.java | 23 - .../smartreload/domain/dto/ReloadItemVO.java | 46 - .../domain/dto/ReloadResultVO.java | 45 - .../support/websocket/MessageTypeEnum.java | 44 - .../support/websocket/WebSocketServer.java | 199 - .../websocket/domain/MessageCommonDTO.java | 29 - .../support/websocket/domain/MessageDTO.java | 41 - .../domain/WebSocketHeartBeatDTO.java | 23 - .../system/datascope/DataScopeController.java | 59 - .../system/datascope/DataScopeRoleDao.java | 52 - .../constant/DataScopeViewTypeEnum.java | 54 - .../constant/DataScopeWhereInTypeEnum.java | 42 - .../domain/dto/DataScopeBatchSetDTO.java | 28 - .../domain/dto/DataScopeBatchSetRoleDTO.java | 30 - .../domain/dto/DataScopeSelectVO.java | 24 - .../domain/dto/DataScopeSqlConfigDTO.java | 40 - .../domain/entity/DataScopeRoleEntity.java | 33 - .../datascope/service/DataScopeService.java | 118 - .../strategy/DataScopePowerStrategy.java | 24 - .../department/DepartmentController.java | 99 - .../system/department/DepartmentDao.java | 47 - .../DepartmentResponseCodeConst.java | 39 - .../system/department/DepartmentService.java | 285 - .../department/DepartmentTreeService.java | 99 - .../domain/dto/DepartmentUpdateDTO.java | 25 - .../department/domain/dto/DepartmentVO.java | 58 - .../domain/entity/DepartmentEntity.java | 48 - .../system/employee/EmployeeController.java | 103 - .../module/system/employee/EmployeeDao.java | 138 - .../system/employee/EmployeeService.java | 369 - .../constant/EmployeeResponseCodeConst.java | 61 - .../employee/constant/EmployeeStatusEnum.java | 56 - .../system/employee/domain/bo/EmployeeBO.java | 73 - .../employee/domain/dto/EmployeeAddDTO.java | 63 - .../employee/domain/dto/EmployeeBaseDTO.java | 52 - .../dto/EmployeeBatchUpdateStatusDTO.java | 26 - .../employee/domain/dto/EmployeeDTO.java | 73 - .../domain/dto/EmployeeLoginFormDTO.java | 31 - .../employee/domain/dto/EmployeeQueryDTO.java | 39 - .../domain/dto/EmployeeQueryExportDTO.java | 42 - .../domain/dto/EmployeeUpdateDTO.java | 28 - .../domain/dto/EmployeeUpdatePwdDTO.java | 25 - .../domain/dto/EmployeeUpdateRolesDTO.java | 29 - .../domain/entity/EmployeeEntity.java | 91 - .../system/employee/domain/vo/EmployeeVO.java | 72 - .../module/system/login/LoginController.java | 71 - .../system/login/LoginResponseCodeConst.java | 21 - .../module/system/login/LoginService.java | 215 - .../system/login/LoginTokenService.java | 118 - .../module/system/login/domain/KaptchaVO.java | 28 - .../system/login/domain/LoginCacheDTO.java | 28 - .../system/login/domain/LoginDetailVO.java | 68 - .../login/domain/LoginPrivilegeDTO.java | 33 - .../system/login/domain/RequestTokenBO.java | 26 - .../system/position/PositionController.java | 59 - .../module/system/position/PositionDao.java | 63 - .../position/PositionResponseCodeConst.java | 16 - .../system/position/PositionService.java | 124 - .../position/domain/dto/PositionAddDTO.java | 28 - .../position/domain/dto/PositionQueryDTO.java | 18 - .../domain/dto/PositionRelationAddDTO.java | 32 - .../domain/dto/PositionRelationQueryDTO.java | 20 - .../domain/dto/PositionRelationResultDTO.java | 40 - .../position/domain/dto/PositionResultVO.java | 41 - .../domain/dto/PositionUpdateDTO.java | 16 - .../domain/entity/PositionEntity.java | 26 - .../domain/entity/PositionRelationEntity.java | 26 - .../constant/PrivilegeResponseCodeConst.java | 29 - .../privilege/constant/PrivilegeTypeEnum.java | 49 - .../controller/PrivilegeController.java | 75 - .../system/privilege/dao/PrivilegeDao.java | 94 - .../domain/dto/PrivilegeFunctionDTO.java | 40 - .../domain/dto/PrivilegeFunctionVO.java | 40 - .../domain/dto/PrivilegeMenuDTO.java | 45 - .../privilege/domain/dto/PrivilegeMenuVO.java | 35 - .../domain/dto/PrivilegeRequestUrlVO.java | 27 - .../domain/entity/PrivilegeEntity.java | 57 - .../service/PrivilegeEmployeeService.java | 199 - .../service/PrivilegeRequestUrlService.java | 117 - .../privilege/service/PrivilegeService.java | 285 - .../system/role/basic/RoleController.java | 60 - .../module/system/role/basic/RoleDao.java | 26 - .../role/basic/RoleResponseCodeConst.java | 24 - .../module/system/role/basic/RoleService.java | 114 - .../role/basic/domain/dto/RoleQueryDTO.java | 25 - .../role/basic/domain/dto/RoleSelectedVO.java | 21 - .../role/basic/domain/dto/RoleUpdateDTO.java | 24 - .../role/basic/domain/entity/RoleEntity.java | 25 - .../roleemployee/RoleEmployeeController.java | 73 - .../roleemployee/RoleEmployeeService.java | 132 - .../roleemployee/domain/RoleEmployeeDTO.java | 21 - .../domain/RoleEmployeeEntity.java | 24 - .../RolePrivilegeController.java | 45 - .../role/roleprivilege/RolePrivilegeDao.java | 58 - .../roleprivilege/RolePrivilegeService.java | 129 - .../domain/dto/RolePrivilegeDTO.java | 35 - .../domain/dto/RolePrivilegeSimpleDTO.java | 43 - .../domain/dto/RolePrivilegeTreeVO.java | 19 - .../domain/entity/RolePrivilegeEntity.java | 32 - .../systemconfig/SystemConfigController.java | 70 - .../system/systemconfig/SystemConfigDao.java | 62 - .../systemconfig/SystemConfigService.java | 262 - .../constant/SystemConfigDataType.java | 67 - .../constant/SystemConfigEnum.java | 68 - .../SystemConfigResponseCodeConst.java | 29 - .../domain/dto/SystemConfigDTO.java | 50 - .../domain/dto/SystemConfigQueryDTO.java | 29 - .../domain/dto/SystemConfigUpdateDTO.java | 25 - .../domain/dto/SystemConfigVO.java | 48 - .../domain/entity/SystemConfigEntity.java | 51 - .../third/SmartApplicationContext.java | 80 - .../smartadmin/third/SmartRedisService.java | 622 - .../smartadmin/util/SmartBaseEnumUtil.java | 85 - .../smartadmin/util/SmartDateUtil.java | 521 - .../smartadmin/util/SmartDigestUtil.java | 17 - .../smartadmin/util/SmartFileUtil.java | 91 - .../smartadmin/util/SmartHttpUtil.java | 151 - .../lab1024/smartadmin/util/SmartIPUtil.java | 159 - .../smartadmin/util/SmartPageUtil.java | 97 - .../smartadmin/util/SmartQuartzUtil.java | 43 - .../util/SmartRequestTokenUtil.java | 51 - .../smartadmin/util/SmartSendMailUtil.java | 243 - .../smartadmin/util/SmartThreadFactory.java | 44 - .../smartadmin/util/excel/SmartExcel.java | 83 - .../util/excel/SmartExcelFileType.java | 10 - .../util/excel/SmartExcelReader.java | 32 - .../smartadmin/util/excel/SmartSheet.java | 113 - .../main/resources/dev/application.properties | 123 - .../src/main/resources/dev/spy.properties | 20 - .../mapper/business/email/EmailMapper.xml | 44 - .../business/log/OrderOperateLogMapper.xml | 50 - .../business/log/UserLoginLogMapper.xml | 46 - .../business/log/UserOperateLogMapper.xml | 51 - .../mapper/business/notice/NoticeMapper.xml | 155 - .../notice/NoticeReceiveRecordMapper.xml | 39 - .../mapper/business/peony/PeonyMapper.xml | 116 - .../support/codegenerator/TableMapper.xml | 27 - .../mapper/support/file/FileMapper.xml | 100 - .../heartbeat/HeartBeatRecordMapper.xml | 41 - .../support/idgenerator/IdGeneratorMapper.xml | 48 - .../support/quartz/QuartzTaskLogMapper.xml | 38 - .../support/quartz/QuartzTaskMapper.xml | 36 - .../support/smartreload/ReloadItemMapper.xml | 6 - .../smartreload/ReloadResultMapper.xml | 18 - .../system/department/DepartmentMapper.xml | 54 - .../mapper/system/employee/EmployeeMapper.xml | 186 - .../mapper/system/position/PositionMapper.xml | 77 - .../system/privilege/PrivilegeMapper.xml | 124 - .../mapper/system/role/RoleEmployeeMapper.xml | 124 - .../mapper/system/role/RoleMapper.xml | 27 - .../system/role/RolePrivilegeMapper.xml | 72 - .../systemconfig/SystemConfigMapper.xml | 102 - .../main/resources/pre/application.properties | 121 - .../resources/prod/application.properties | 120 - .../main/resources/sit/application.properties | 121 - .../src/main/resources/sit/spy.properties | 20 - .../main/resources/sql/quartz_mysql_2.3.0.sql | 179 - .../src/main/resources/sql/smart-admin.sql | 1588 -- .../codegenerator/java/AddDTO.java.vm | 36 - .../codegenerator/java/Controller.java.vm | 88 - .../templates/codegenerator/java/Dao.java.vm | 64 - .../templates/codegenerator/java/Dao.xml.vm | 144 - .../codegenerator/java/Entity.java.vm | 33 - .../codegenerator/java/ExcelVO.java.vm | 33 - .../codegenerator/java/QueryDTO.java.vm | 45 - .../codegenerator/java/Service.java.vm | 108 - .../codegenerator/java/UpdateDTO.java.vm | 20 - .../templates/codegenerator/java/VO.java.vm | 35 - .../templates/codegenerator/web/Api.js.vm | 28 - .../templates/codegenerator/web/List.vue.vm | 439 - .../codegenerator/web/ListForm.vue.vm | 132 - .../templates/codegenerator/web/Router.js.vm | 32 - .../java/net/lab1024/smartadmin/BaseTest.java | 28 - .../SmartAdminApplicationTests.java | 11 - .../CodeGeneratorServiceTest.java | 66 - smart-admin-web/.babelrc | 5 - smart-admin-web/.editorconfig | 9 - smart-admin-web/.env.development | 4 - smart-admin-web/.env.local | 4 - smart-admin-web/.env.prod | 8 - smart-admin-web/.env.sit | 3 - smart-admin-web/.eslintrc.js | 34 - smart-admin-web/.gitignore | 22 - smart-admin-web/.travis.yml | 5 - smart-admin-web/README.md | 13 - smart-admin-web/cypress.json | 3 - smart-admin-web/doc/notice.txt | 2 - .../javascript-ant-design-vue3/.env | 2 + .../.env.development | 8 + .../javascript-ant-design-vue3/.env.localhost | 8 + .../javascript-ant-design-vue3/.env.pre | 8 + .../.env.production | 8 + .../javascript-ant-design-vue3/.env.test | 8 + .../javascript-ant-design-vue3/.eslintignore | 18 + .../javascript-ant-design-vue3/.eslintrc.js | 66 + .../javascript-ant-design-vue3/.gitignore | 6 + .../javascript-ant-design-vue3/.prettierrc.js | 30 + .../.stylelintignore | 3 + .../.stylelintrc.js | 70 + .../README.en.md} | 0 .../README.md} | 0 .../javascript-ant-design-vue3/index.html | 24 + .../javascript-ant-design-vue3/jsconfig.json | 17 + .../javascript-ant-design-vue3/package.json | 73 + .../postcss.config.js} | 5 +- .../public/favicon.ico | Bin .../javascript-ant-design-vue3/src/App.vue | 34 + .../src/api/business/category/category-api.js | 34 + .../src/api/business/goods/goods-api.js | 31 + .../src/api/business/oa/bank-api.js | 42 + .../src/api/business/oa/enterprise-api.js | 64 + .../src/api/business/oa/invoice-api.js | 44 + .../src/api/business/oa/notice-api.js | 74 + .../src/api/support/cache/cache-api.js | 25 + .../api/support/change-log/change-log-api.js | 45 + .../code-generator/code-generator-api.js | 46 + .../src/api/support/config/config-api.js | 29 + .../support/data-tracer/data-tracer-api.js | 18 + .../src/api/support/dict/dict-api.js | 59 + .../src/api/support/feedback/feedback-api.js | 21 + .../src/api/support/file/file-api.js | 38 + .../api/support/heart-beat/heart-beat-api.js | 17 + .../src/api/support/help-doc/help-doc-api.js | 59 + .../support/help-doc/help-doc-catalog-api.js | 32 + .../api/support/login-log/login-log-api.js | 17 + .../support/operate-log/operate-log-api.js | 21 + .../src/api/support/reload/reload-api.js | 25 + .../serial-number/serial-number-api.js | 25 + .../src/api/support/table/table-column-api.js | 26 + .../api/system/department/department-api.js | 55 + .../src/api/system/employee/employee-api.js | 98 + .../src/api/system/home/home-api.js | 29 + .../src/api/system/login/login-api.js | 51 + .../src/api/system/menu/menu-api.js | 54 + .../src/api/system/role-menu/role-menu-api.js | 28 + .../src/api/system/role/role-api.js | 110 + .../src/assets/images/1024lab/1024lab-gzh.jpg | Bin 0 -> 27898 bytes .../assets/images/1024lab/xiaozhen-gzh.jpg | Bin 0 -> 8786 bytes .../assets/images/1024lab/zhuoda-wechat.jpg | Bin 0 -> 42080 bytes .../src/assets/images/login/ali-icon.png | Bin 0 -> 7011 bytes .../src/assets/images/login/google-icon.png | Bin 0 -> 6228 bytes .../src/assets/images/login/login-bg.jpg | Bin 0 -> 3517917 bytes .../login/login-form-open-eyes-close.png | Bin 0 -> 4914 bytes .../images/login/login-form-open-eyes.png | Bin 0 -> 6557 bytes .../src/assets/images/login/login-qr.png | Bin 0 -> 11297 bytes .../src/assets/images/login/qq-icon.png | Bin 0 -> 5353 bytes .../src/assets/images/login/wechat-icon.png | Bin 0 -> 6657 bytes .../src/assets/images/login/weibo-icon.png | Bin 0 -> 7799 bytes .../src/assets/images/logo}/logo-min.png | Bin .../src/assets/images/logo/logo.png | Bin 0 -> 6053 bytes .../images/logo/smart-admin-logo-white.png | Bin 0 -> 8106 bytes .../assets/images/logo/smart-admin-logo.png | Bin 0 -> 14325 bytes .../src/assets/images/notice/edit_icon.png | Bin 0 -> 700 bytes .../src/assets/images/notice/file_icon.png | Bin 0 -> 488 bytes .../business/category-tree-select/index.vue | 85 + .../oa/enterprise-bank-select/index.vue | 109 + .../oa/enterprise-invoice-select/index.vue | 108 + .../business/oa/enterprise-select/index.vue | 85 + .../framework/area-cascader/index.vue | 91 + .../area-cascader/province-city-district.js | 17546 ++++++++++++++++ .../framework/area-cascader/province-city.js | 1727 ++ .../framework/boolean-select/index.vue | 81 + .../framework/icon-select/index.vue | 133 + .../framework/iframe/iframe-index.vue | 18 + .../iframe/route-default-component.vue | 3 + .../framework/smart-enum-checkbox/index.vue | 55 + .../framework/smart-enum-radio/index.vue | 63 + .../framework/smart-enum-select/index.vue | 68 + .../framework/smart-loading/index.js | 20 + .../components/framework/wangeditor/index.vue | 109 + .../components/support/data-tracer/index.vue | 239 + .../support/dict-key-select/index.vue | 78 + .../components/support/dict-select/index.vue | 116 + .../support/file-preview-modal/index.vue | 87 + .../components/support/file-preview/index.vue | 78 + .../components/support/file-upload/index.vue | 199 + .../support/table-operator/index.vue | 163 + .../smart-table-column-merge.js | 54 + .../smart-table-column-modal.vue | 280 + .../system/department-tree-select/index.vue | 58 + .../system/employee-select/index.vue | 97 + .../employee-table-select-modal/index.vue | 182 + .../system/menu-tree-select/index.vue | 76 + .../src/config/app-config.js | 29 + .../constants/business/erp/category-const.js | 23 + .../src/constants/business/erp/goods-const.js | 26 + .../constants/business/oa/enterprise-const.js | 24 + .../src/constants/business/oa/notice-const.js | 36 + .../src/constants/common-const.js | 58 + .../src/constants/index.js | 38 + .../src/constants/layout-const.js | 19 + .../src/constants/local-storage-key-const.js | 31 + .../src/constants/regular-const.js | 28 + .../src/constants/support/change-log-const.js | 29 + .../constants/support/code-generator-const.js | 118 + .../constants/support/data-tracer-const.js | 29 + .../src/constants/support/file-const.js | 31 + .../src/constants/support/login-log-const.js | 27 + .../src/constants/support/table-id-const.js | 57 + .../src/constants/system/employee-const.js | 27 + .../src/constants/system/home-const.js | 15 + .../constants/system/login-device-const.js | 31 + .../src/constants/system/menu-const.js | 47 + .../src/directives/privilege.js | 31 + .../src/i18n/index.js | 41 + .../src/i18n/lang/en-US/index.js | 17 + .../src/i18n/lang/zh-CN/index.js | 17 + .../header-user-space/header-avatar.vue | 126 + .../header-user-space/header-message.vue | 116 + .../header-reset-password-modal/index.vue | 85 + .../header-user-space/header-setting.vue | 201 + .../components/header-user-space/index.vue | 108 + .../menu-location-breadcrumb/index.vue | 35 + .../src/layout/components/page-tag/index.vue | 214 + .../components/side-expand-menu/index.vue | 51 + .../side-expand-menu/recursion-menu.vue | 101 + .../components/side-expand-menu/sub-menu.vue | 46 + .../components/side-expand-menu/top-menu.vue | 125 + .../components/contact-modal.vue | 102 + .../components/feedback-modal.vue | 85 + .../layout/components/side-help-doc/index.vue | 227 + .../src/layout/components/side-menu/index.vue | 118 + .../components/side-menu/recursion-menu.vue | 104 + .../layout/components/side-menu/sub-menu.vue | 45 + .../layout/components/smart-footer/index.vue | 34 + .../src/layout/smart-help-doc-layout.vue | 302 + .../src/layout/smart-keep-alive.js | 39 + .../src/layout/smart-layout.vue | 24 + .../src/layout/smart-side-expand-layout.vue | 237 + .../src/layout/smart-side-layout.vue | 240 + .../src/lib/axios.js | 129 + .../src/lib/default-time-ranges.js | 29 + .../src/lib/highlight-line-number.js | 226 + .../src/lib/smart-sentry.js | 12 + .../src/lib/smart-wartermark.js | 103 + .../javascript-ant-design-vue3/src/main.js | 88 + .../src/plugins/privilege-plugin.js | 29 + .../src/plugins/smart-enums-plugin.js | 78 + .../src/router/index.js | 151 + .../src/router/routers.js | 14 + .../src/router/support/help-doc.js | 28 + .../src/router/system/home.js | 39 + .../src/router/system/login.js | 21 + .../src/store/index.js | 12 + .../src/store/modules/system/app-config.js | 55 + .../src/store/modules/system/role.js | 95 + .../src/store/modules/system/spin.js | 30 + .../src/store/modules/system/user.js | 306 + .../src/theme/index.less | 152 + .../src/theme/smart-admin.less | 112 + .../src/utils/cookie-util.js | 29 + .../src/utils/local-util.js | 20 + .../src/utils/str-util.js | 46 + .../components/category-form-modal.vue | 96 + .../components/category-tree-table.vue | 163 + .../business/erp/catalog/custom-catalog.vue | 18 + .../business/erp/catalog/goods-catalog.vue | 18 + .../erp/goods/components/goods-form-modal.vue | 150 + .../views/business/erp/goods/goods-list.vue | 309 + .../components/enterprise-bank-list.vue | 239 + .../enterprise-bank-operate-modal.vue | 133 + .../components/enterprise-employee-list.vue | 275 + .../components/enterprise-invoice-list.vue | 243 + .../enterprise-invoice-operate-modal.vue | 127 + .../components/enterprise-operate-modal.vue | 243 + .../oa/enterprise/enterprise-detail.vue | 130 + .../oa/enterprise/enterprise-list.vue | 264 + .../notice/components/notice-form-drawer.vue | 307 + .../components/notice-form-visible-modal.vue | 71 + ...otice-form-visible-transfer-department.vue | 204 + .../notice-form-visible-transfer-employee.vue | 252 + .../components/notice-view-record-list.vue | 161 + .../business/oa/notice/notice-detail.vue | 144 + .../oa/notice/notice-employee-detail.vue | 153 + .../oa/notice/notice-employee-list.vue | 239 + .../views/business/oa/notice/notice-list.vue | 352 + .../src/views/support/cache/cache-list.vue | 112 + .../support/change-log/change-log-form.vue | 138 + .../support/change-log/change-log-list.vue | 317 + .../support/change-log/change-log-modal.vue | 44 + .../code-generator/code-generator-list.vue | 178 + .../code-generator/code-generator-util.js | 171 + ...code-generator-table-config-form-basic.vue | 275 + ...ode-generator-table-config-form-delete.vue | 128 + ...code-generator-table-config-form-field.vue | 222 + ...or-table-config-form-insert-and-update.vue | 293 + ...enerator-table-config-form-query-field.vue | 257 + ...enerator-table-config-form-table-field.vue | 150 + .../form/code-generator-table-config-form.vue | 225 + .../preview/code-generator-preview-modal.vue | 202 + .../support/config/config-form-modal.vue | 99 + .../src/views/support/config/config-list.vue | 170 + .../components/dict-key-operate-modal.vue | 95 + .../dict/components/dict-value-modal.vue | 221 + .../components/dict-value-operate-modal.vue | 101 + .../src/views/support/dict/index.vue | 237 + .../views/support/feedback/feedback-list.vue | 166 + .../src/views/support/file/file-list.vue | 280 + .../support/heart-beat/heart-beat-list.vue | 166 + .../help-doc-catalog-form-modal.vue | 132 + .../help-doc-catalog-tree-select.vue | 89 + .../components/help-doc-catalog-tree.vue | 354 + .../components/help-doc-form-drawer.vue | 204 + .../management/components/help-doc-list.vue | 267 + .../management/help-doc-manage-list.vue | 55 + .../help-doc/management/help-doc-mitt.ts | 11 + .../components/help-doc-view-record-list.vue | 168 + .../help-doc/user-view/help-doc-user-view.vue | 150 + .../support/login-log/login-log-list.vue | 194 + .../operate-log/operate-log-detail-modal.vue | 139 + .../support/operate-log/operate-log-list.vue | 220 + .../support/reload/do-reload-form-modal.vue | 90 + .../src/views/support/reload/reload-list.vue | 133 + .../support/reload/reload-result-list.vue | 100 + .../serial-number-generate-form-modal.vue | 107 + .../serial-number/serial-number-list.vue | 143 + .../serial-number-record-list.vue | 115 + .../src/views/system/40X/403.vue | 24 + .../src/views/system/40X/404.vue | 24 + .../components/department-children/index.vue | 58 + .../department-form-modal/index.vue | 138 + .../components/department-tree/index.vue | 339 + .../employee-department-form-modal/index.vue | 94 + .../components/employee-form-modal/index.vue | 224 + .../components/employee-list/index.vue | 390 + .../employee-password-dialog/index.vue | 79 + .../employee/department/department-mitt.ts | 11 + .../system/employee/department/index.vue | 72 + .../role/components/role-data-scope/index.vue | 157 + .../components/role-employee-list/index.vue | 263 + .../role/components/role-form-modal/index.vue | 111 + .../role/components/role-list/index.vue | 116 + .../role/components/role-setting/index.vue | 44 + .../role/components/role-tree/index.less | 78 + .../role/components/role-tree/index.vue | 74 + .../role-tree/role-tree-checkbox.vue | 49 + .../components/role-tree/role-tree-menu.vue | 64 + .../components/role-tree/role-tree-point.vue | 33 + .../src/views/system/employee/role/index.vue | 45 + .../system/home/components/changelog-card.vue | 107 + .../home/components/default-home-card.vue | 60 + .../home/components/echarts/category.vue | 92 + .../system/home/components/echarts/gauge.vue | 119 + .../home/components/echarts/gradient.vue | 210 + .../system/home/components/echarts/pie.vue | 78 + .../home/components/official-account-card.vue | 86 + .../quick-entry/home-quick-entry-modal.vue | 81 + .../quick-entry/home-quick-entry.vue | 149 + .../quick-entry/init-quick-entry-list.js | 27 + .../home/components/to-be-done-card.vue | 158 + .../src/views/system/home/home-header.vue | 159 + .../src/views/system/home/home-notice.vue | 129 + .../src/views/system/home/index.less | 65 + .../src/views/system/home/index.vue | 87 + .../src/views/system/login/login.less | 174 + .../src/views/system/login/login.vue | 205 + .../menu/components/menu-operate-modal.vue | 309 + .../menu/components/menu-tree-select.vue | 49 + .../views/system/menu/menu-data-handler.js | 151 + .../system/menu/menu-list-table-columns.js | 83 + .../src/views/system/menu/menu-list.vue | 256 + .../javascript-ant-design-vue3/vite.config.js | 68 + smart-admin-web/package-lock.json | 15500 -------------- smart-admin-web/package.json | 89 - smart-admin-web/public/favicon.ico | Bin 16958 -> 0 bytes smart-admin-web/public/index.html | 19 - smart-admin-web/src/App.vue | 31 - smart-admin-web/src/api/data-scope.js | 15 - smart-admin-web/src/api/department.js | 47 - smart-admin-web/src/api/email.js | 27 - smart-admin-web/src/api/employee.js | 43 - smart-admin-web/src/api/file.js | 28 - smart-admin-web/src/api/heart-beat.js | 7 - smart-admin-web/src/api/login.js | 19 - smart-admin-web/src/api/notice.js | 43 - smart-admin-web/src/api/online-user.js | 12 - smart-admin-web/src/api/peony.js | 28 - smart-admin-web/src/api/position.js | 19 - smart-admin-web/src/api/privilege.js | 36 - smart-admin-web/src/api/role.js | 58 - smart-admin-web/src/api/smart-reload.js | 20 - smart-admin-web/src/api/system-config.js | 31 - smart-admin-web/src/api/task-manage.js | 35 - smart-admin-web/src/api/user-log.js | 28 - smart-admin-web/src/api/user.js | 20 - smart-admin-web/src/assets/icons/demo.css | 539 - .../src/assets/icons/demo_index.html | 722 - .../font_1299963_2zqwx2axi0j/demo.css | 539 - .../font_1299963_2zqwx2axi0j/demo_index.html | 722 - .../font_1299963_2zqwx2axi0j/iconfont.css | 113 - .../font_1299963_2zqwx2axi0j/iconfont.eot | Bin 8812 -> 0 bytes .../font_1299963_2zqwx2axi0j/iconfont.js | 1 - .../font_1299963_2zqwx2axi0j/iconfont.svg | 98 - .../font_1299963_2zqwx2axi0j/iconfont.ttf | Bin 8644 -> 0 bytes .../font_1299963_2zqwx2axi0j/iconfont.woff | Bin 5436 -> 0 bytes .../font_1299963_2zqwx2axi0j/iconfont.woff2 | Bin 4584 -> 0 bytes smart-admin-web/src/assets/icons/iconfont.css | 113 - smart-admin-web/src/assets/icons/iconfont.eot | Bin 8812 -> 0 bytes smart-admin-web/src/assets/icons/iconfont.js | 1 - smart-admin-web/src/assets/icons/iconfont.svg | 98 - smart-admin-web/src/assets/icons/iconfont.ttf | Bin 8644 -> 0 bytes .../src/assets/icons/iconfont.woff | Bin 5436 -> 0 bytes .../src/assets/icons/iconfont.woff2 | Bin 4584 -> 0 bytes .../src/assets/images/default_icon.png | Bin 2364 -> 0 bytes .../assets/images/error-page/error-401.svg | 1 - .../assets/images/error-page/error-404.svg | 1 - .../assets/images/error-page/error-500.svg | 1 - .../src/assets/images/icon-qr-qq-wechat.png | Bin 43541 -> 0 bytes .../assets/images/icon-social-bilibili.svg | 1 - .../src/assets/images/icon-social-juejin.svg | 1 - .../src/assets/images/icon-social-twitter.svg | 1 - .../src/assets/images/icon-social-zhihu.svg | 1 - .../src/assets/images/login-alipay.png | Bin 1881 -> 0 bytes .../src/assets/images/login-bg.jpg | Bin 547587 -> 0 bytes .../src/assets/images/login-logo.png | Bin 4900 -> 0 bytes .../src/assets/images/login-sina.png | Bin 1851 -> 0 bytes .../src/assets/images/login-taobao.png | Bin 1898 -> 0 bytes .../src/assets/images/login_desc_bg.png | Bin 272693 -> 0 bytes .../src/assets/images/login_logo.png | Bin 3523 -> 0 bytes smart-admin-web/src/assets/images/logo.png | Bin 3839 -> 0 bytes smart-admin-web/src/assets/images/logo1.png | Bin 3259 -> 0 bytes smart-admin-web/src/assets/images/message.png | Bin 1873 -> 0 bytes smart-admin-web/src/assets/images/shadow.png | Bin 224307 -> 0 bytes .../images/slider/sub_slider_active.png | Bin 3103 -> 0 bytes .../images/slider/sub_slider_default.png | Bin 3105 -> 0 bytes .../src/assets/style/lib/animate.css | 3625 ---- .../components/active-plate/active-plate.vue | 67 - smart-admin-web/src/components/charts/bar.vue | 73 - .../src/components/charts/index.js | 3 - smart-admin-web/src/components/charts/pie.vue | 85 - .../src/components/charts/theme.json | 490 - .../components/common-icon/common-icon.vue | 52 - .../src/components/common-icon/index.js | 2 - .../src/components/count-to/count-to.vue | 198 - .../src/components/count-to/index.js | 2 - .../src/components/count-to/index.less | 10 - .../src/components/editor/editor.vue | 77 - .../src/components/editor/index.js | 2 - .../components/employee/employee-selector.vue | 54 - .../src/components/icons/icons.vue | 38 - smart-admin-web/src/components/icons/index.js | 2 - .../main/components/a-back-top/index.js | 2 - .../main/components/a-back-top/index.vue | 130 - .../main/components/fullscreen/fullscreen.vue | 92 - .../main/components/fullscreen/index.js | 2 - .../custom-bread-crumb.less | 4 - .../custom-bread-crumb/custom-bread-crumb.vue | 44 - .../header-bar/custom-bread-crumb/index.js | 2 - .../components/header-bar/header-bar.less | 19 - .../main/components/header-bar/header-bar.vue | 106 - .../main/components/header-bar/index.js | 2 - .../header-bar/sider-trigger/index.js | 2 - .../sider-trigger/sider-trigger.less | 21 - .../sider-trigger/sider-trigger.vue | 35 - .../main/components/language/index.js | 2 - .../main/components/language/language.vue | 54 - .../main/components/notice/notice.vue | 371 - .../components/side-menu/collapsed-menu.vue | 84 - .../main/components/side-menu/index.js | 2 - .../main/components/side-menu/item-mixin.js | 30 - .../main/components/side-menu/mixin.js | 18 - .../components/side-menu/side-menu-item.vue | 35 - .../main/components/side-menu/side-menu.less | 39 - .../main/components/side-menu/side-menu.vue | 197 - .../main/components/tags-nav/index.js | 2 - .../main/components/tags-nav/tags-nav.less | 136 - .../main/components/tags-nav/tags-nav.vue | 256 - .../components/main/components/user/index.js | 2 - .../components/main/components/user/user.less | 25 - .../components/main/components/user/user.vue | 131 - smart-admin-web/src/components/main/index.js | 2 - smart-admin-web/src/components/main/main.less | 129 - smart-admin-web/src/components/main/main.vue | 533 - .../src/components/smart-admin-ad/ad.vue | 34 - .../src/components/smart-admin-ad/index.js | 2 - .../src/components/tables/edit.vue | 102 - .../src/components/tables/handle-btns.js | 70 - .../src/components/tables/index.js | 2 - .../src/components/tables/index.less | 17 - .../src/components/tables/tables.vue | 342 - smart-admin-web/src/config/index.js | 38 - smart-admin-web/src/constants/file.js | 24 - smart-admin-web/src/constants/index.js | 10 - smart-admin-web/src/constants/login.js | 13 - smart-admin-web/src/constants/notice.js | 13 - smart-admin-web/src/constants/privilege.js | 14 - smart-admin-web/src/constants/table-page.js | 6 - smart-admin-web/src/directives/directives.js | 11 - smart-admin-web/src/directives/index.js | 31 - .../src/directives/module/clipboard.js | 30 - .../src/directives/module/draggable.js | 42 - .../src/directives/module/privilege.js | 23 - smart-admin-web/src/lib/cookie.js | 21 - smart-admin-web/src/lib/http.js | 161 - smart-admin-web/src/lib/local.js | 8 - smart-admin-web/src/lib/menu-func.js | 276 - smart-admin-web/src/lib/printPlugs.js | 133 - smart-admin-web/src/lib/render-dom.js | 10 - smart-admin-web/src/lib/table-action.js | 84 - smart-admin-web/src/lib/util.js | 515 - smart-admin-web/src/locale/index.js | 37 - smart-admin-web/src/locale/lang/en-US.js | 46 - smart-admin-web/src/locale/lang/zh-CN.js | 46 - smart-admin-web/src/locale/lang/zh-TW.js | 46 - smart-admin-web/src/main.js | 80 - smart-admin-web/src/main.less | 37 - .../src/plugins/error-store/index.js | 4 - smart-admin-web/src/plugins/index.js | 12 - smart-admin-web/src/router/before-close.js | 17 - smart-admin-web/src/router/index.js | 218 - .../src/router/module/business/email.js | 40 - .../src/router/module/business/index.js | 29 - .../src/router/module/business/keep-alive.js | 31 - .../src/router/module/business/notice.js | 52 - .../src/router/module/business/peony.js | 49 - .../router/module/business/three-router.js | 63 - smart-admin-web/src/router/module/error.js | 33 - smart-admin-web/src/router/module/home.js | 29 - .../src/router/module/support/api-doc.js | 25 - .../src/router/module/support/heart-beat.js | 31 - .../src/router/module/support/index.js | 30 - .../src/router/module/support/monitor.js | 34 - .../src/router/module/support/reload.js | 40 - .../src/router/module/support/task.js | 63 - .../src/router/module/system/employee.js | 149 - .../src/router/module/system/file.js | 29 - .../src/router/module/system/index.js | 28 - .../router/module/system/system-setting.js | 65 - .../src/router/module/system/user-log.js | 42 - smart-admin-web/src/router/routers.js | 43 - smart-admin-web/src/store/index.js | 25 - smart-admin-web/src/store/module/app.js | 129 - smart-admin-web/src/store/module/notice.js | 19 - smart-admin-web/src/store/module/user.js | 122 - smart-admin-web/src/themes/ReadMe.md | 1 - smart-admin-web/src/themes/index.less | 328 - .../src/views/business/email/email-list.vue | 214 - .../src/views/business/email/send-mail.vue | 215 - .../views/business/keep-alive/add-content.vue | 94 - .../business/keep-alive/content-list.vue | 80 - .../views/business/notice/notice-detail.vue | 49 - .../src/views/business/notice/notice-list.vue | 369 - .../views/business/notice/person-notice.vue | 221 - .../peony/components/peony-list-form.vue | 133 - .../src/views/business/peony/peony-list.vue | 495 - .../three-level-router-view.vue | 58 - smart-admin-web/src/views/error-page/401.vue | 19 - smart-admin-web/src/views/error-page/404.vue | 19 - smart-admin-web/src/views/error-page/500.vue | 19 - .../src/views/error-page/back-btn-group.vue | 40 - .../src/views/error-page/error-content.vue | 28 - .../src/views/error-page/error.less | 46 - .../src/views/home/components/card.vue | 43 - .../src/views/home/components/chart-bar.vue | 140 - .../views/home/components/chart-funnel.vue | 106 - .../src/views/home/components/chart-gauge.vue | 87 - .../src/views/home/components/chart-line.vue | 123 - .../src/views/home/components/chart-pie.vue | 110 - .../src/views/home/components/home-circle.vue | 41 - .../views/home/components/home-progress.vue | 59 - .../src/views/home/components/theme.json | 490 - smart-admin-web/src/views/home/home.vue | 154 - smart-admin-web/src/views/home/index.js | 2 - smart-admin-web/src/views/login/canvas.js | 289 - .../src/views/login/components/login-form.vue | 134 - smart-admin-web/src/views/login/login.less | 128 - smart-admin-web/src/views/login/login.vue | 52 - .../src/views/support/api-doc/swagger.vue | 33 - .../support/heart-beat/heart-beat-list.vue | 115 - .../src/views/support/monitor/online-user.vue | 152 - .../src/views/support/monitor/sql.vue | 33 - .../reload/smart-reload/smart-reload-list.vue | 273 - .../src/views/support/task/task-list.vue | 556 - .../department-employee-tree-item.vue | 124 - .../department-employee-tree.vue | 251 - .../employee/position/position-list.vue | 366 - .../employee-table-add/employee-table-add.vue | 527 - .../employee-table-detail.vue | 72 - .../employee-table/employee-table.vue | 572 - .../role-employee/role-employee-manage.vue | 831 - .../role-data-scope/role-data-scope.vue | 144 - .../role/components/role-list/role-list.vue | 407 - .../role/components/role-tree/role-tree.vue | 431 - .../system/employee/role/role-manage.vue | 339 - .../src/views/system/file/file-list.vue | 279 - .../system-config/system-config.vue | 397 - .../components/privilege-form.vue | 144 - .../system-privilege/system-privilege.vue | 410 - .../views/system/user-log/user-login-log.vue | 185 - .../system/user-log/user-operate-log.vue | 252 - .../src/views/three-router/three-content.vue | 26 - smart-admin-web/tests/e2e/.eslintrc | 12 - smart-admin-web/tests/e2e/plugins/index.js | 9 - smart-admin-web/tests/e2e/specs/test.js | 8 - smart-admin-web/tests/e2e/support/commands.js | 25 - smart-admin-web/tests/e2e/support/index.js | 20 - smart-admin-web/tests/unit/.eslintrc.js | 8 - smart-admin-web/tests/unit/HelloWorld.spec.js | 13 - smart-admin-web/vscode/settings.json | 43 - smart-admin-web/vue.config.js | 77 - smart_admin_v2.sql | 2071 ++ {快速部署 => 快速启动}/README.md | 0 1504 files changed, 81667 insertions(+), 76100 deletions(-) create mode 100644 smart-admin-api/sa-admin/pom.xml rename {smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin => smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin}/SmartAdminApplication.java (51%) create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/common/AdminBaseController.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/config/OperateLogAspectConfig.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/config/SecurityConfig.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/config/SecurityMethodConfig.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminCacheConst.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminRedisKeyConst.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminSwaggerTagConst.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/listener/AdminStartupRunner.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/constant/CategoryTypeEnum.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/controller/CategoryController.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/dao/CategoryDao.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/dto/CategoryBaseDTO.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/dto/CategorySimpleDTO.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/entity/CategoryEntity.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/form/CategoryAddForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/form/CategoryTreeQueryForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/form/CategoryUpdateForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/vo/CategoryTreeVO.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/vo/CategoryVO.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/manager/CategoryCacheManager.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/service/CategoryQueryService.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/service/CategoryService.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/constant/GoodsStatusEnum.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/controller/GoodsController.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/dao/GoodsDao.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/entity/GoodsEntity.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/form/GoodsAddForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/form/GoodsQueryForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/form/GoodsUpdateForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/vo/GoodsVO.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/manager/GoodsManager.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/service/GoodsService.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/BankController.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/BankDao.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/BankService.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankCreateForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankEntity.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankQueryForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankUpdateForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankVO.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseController.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseEmployeeManager.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseService.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/constant/EnterpriseTypeEnum.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/dao/EnterpriseDao.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/dao/EnterpriseEmployeeDao.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/entity/EnterpriseEmployeeEntity.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/entity/EnterpriseEntity.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseCreateForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseEmployeeForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseEmployeeQueryForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseQueryForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseUpdateForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/vo/EnterpriseEmployeeVO.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/vo/EnterpriseListVO.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/vo/EnterpriseVO.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/InvoiceController.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/InvoiceDao.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/InvoiceService.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceAddForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceEntity.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceQueryForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceUpdateForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceVO.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/constant/NoticeVisibleRangeDataTypeEnum.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/controller/NoticeController.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/dao/NoticeDao.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/dao/NoticeTypeDao.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/entity/NoticeEntity.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/entity/NoticeTypeEntity.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeAddForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeEmployeeQueryForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeQueryForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeUpdateForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeViewRecordQueryForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeVisibleRangeForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeDetailVO.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeEmployeeVO.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeTypeVO.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeUpdateFormVO.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeVO.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeViewRecordVO.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeVisibleRangeVO.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/manager/NoticeManager.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/service/NoticeEmployeeService.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/service/NoticeService.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/service/NoticeTypeService.java rename {smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno => smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope}/DataScope.java (51%) create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/DataScopeController.java rename {smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin => smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin}/module/system/datascope/MyBatisPlugin.java (68%) rename {smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin => smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin}/module/system/datascope/constant/DataScopeTypeEnum.java (52%) create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/constant/DataScopeViewTypeEnum.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/constant/DataScopeWhereInTypeEnum.java rename {smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto => smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain}/DataScopeAndViewTypeVO.java (68%) rename {smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto => smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain}/DataScopeDTO.java (64%) create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain/DataScopeSqlConfig.java rename {smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto => smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain}/DataScopeViewTypeVO.java (60%) create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/service/DataScopeService.java rename {smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin => smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin}/module/system/datascope/service/DataScopeSqlConfigService.java (67%) rename {smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin => smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin}/module/system/datascope/service/DataScopeViewService.java (56%) create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/strategy/DataScopePowerStrategy.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/controller/DepartmentController.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/dao/DepartmentDao.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/entity/DepartmentEntity.java rename smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/domain/dto/DepartmentCreateDTO.java => smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/form/DepartmentAddForm.java (58%) create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/form/DepartmentUpdateForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentEmployeeTreeVO.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentTreeVO.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentVO.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/manager/DepartmentCacheManager.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/manager/DepartmentManager.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/service/DepartmentService.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/controller/EmployeeController.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/dao/EmployeeDao.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/entity/EmployeeEntity.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeAddForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeBatchUpdateDepartmentForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeQueryForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeUpdateForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeUpdatePasswordForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeUpdateRoleForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/vo/EmployeeVO.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/manager/EmployeeManager.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/service/EmployeePermissionService.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/service/EmployeeService.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/controller/LoginController.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/domain/LoginEmployeeDetail.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/domain/LoginForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/service/LoginService.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/constant/MenuPermsTypeEnum.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/constant/MenuTypeEnum.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/controller/MenuController.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/dao/MenuDao.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/entity/MenuEntity.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuAddForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuBaseForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuPointsOperateForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuUpdateForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/vo/MenuSimpleTreeVO.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/vo/MenuTreeVO.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/vo/MenuVO.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/manager/MenuManager.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/service/MenuService.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleController.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleDataScopeController.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleEmployeeController.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleMenuController.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleDao.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleDataScopeDao.java rename {smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee => smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao}/RoleEmployeeDao.java (50%) create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleMenuDao.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleDataScopeEntity.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleEmployeeEntity.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleEntity.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleMenuEntity.java rename smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleAddDTO.java => smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleAddForm.java (66%) create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleDataScopeUpdateForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleEmployeeQueryForm.java rename smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleBatchDTO.java => smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleEmployeeUpdateForm.java (54%) create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleMenuUpdateForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleQueryForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleUpdateForm.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleDataScopeVO.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleEmployeeVO.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleMenuTreeVO.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleSelectedVO.java rename {smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto => smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo}/RoleVO.java (50%) create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/manager/RoleDataScopeManager.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/manager/RoleEmployeeManager.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/manager/RoleMenuManager.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleDataScopeService.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleEmployeeService.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleMenuService.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleService.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminCacheController.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminChangeLogController.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminConfigController.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminDictController.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminFileController.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminHeartBeatController.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminHelpDocController.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminLoginLogController.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminOperateLogController.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminReloadController.java create mode 100644 smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminSerialNumberController.java create mode 100644 smart-admin-api/sa-admin/src/main/resources/dev/application.yaml rename {smart-admin-service/smart-admin-api => smart-admin-api/sa-admin}/src/main/resources/dev/log4j2.xml (98%) create mode 100644 smart-admin-api/sa-admin/src/main/resources/dev/spy.properties create mode 100644 smart-admin-api/sa-admin/src/main/resources/mapper/business/category/CategoryMapper.xml create mode 100644 smart-admin-api/sa-admin/src/main/resources/mapper/business/goods/GoodsMapper.xml create mode 100644 smart-admin-api/sa-admin/src/main/resources/mapper/business/notice/NoticeMapper.xml create mode 100644 smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/bank/BankMapper.xml create mode 100644 smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/enterprise/EnterpriseEmployeeMapper.xml create mode 100644 smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/enterprise/EnterpriseMapper.xml create mode 100644 smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/invoice/InvoiceMapper.xml create mode 100644 smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/notice/NoticeDao.xml create mode 100644 smart-admin-api/sa-admin/src/main/resources/mapper/system/department/DepartmentMapper.xml create mode 100644 smart-admin-api/sa-admin/src/main/resources/mapper/system/employee/EmployeeMapper.xml create mode 100644 smart-admin-api/sa-admin/src/main/resources/mapper/system/menu/MenuMapper.xml rename smart-admin-service/smart-admin-api/src/main/resources/mapper/system/datascope/DataScopeRoleMapper.xml => smart-admin-api/sa-admin/src/main/resources/mapper/system/role/RoleDataScopeMapper.xml (54%) create mode 100644 smart-admin-api/sa-admin/src/main/resources/mapper/system/role/RoleEmployeeMapper.xml create mode 100644 smart-admin-api/sa-admin/src/main/resources/mapper/system/role/RoleMapper.xml create mode 100644 smart-admin-api/sa-admin/src/main/resources/mapper/system/role/RoleMenuMapper.xml create mode 100644 smart-admin-api/sa-admin/src/main/resources/pre/application.yaml rename {smart-admin-service/smart-admin-api/src/main/resources/sit => smart-admin-api/sa-admin/src/main/resources/pre}/log4j2.xml (98%) create mode 100644 smart-admin-api/sa-admin/src/main/resources/pre/spy.properties create mode 100644 smart-admin-api/sa-admin/src/main/resources/prod/application.yaml rename {smart-admin-service/smart-admin-api/src/main/resources/pre => smart-admin-api/sa-admin/src/main/resources/prod}/log4j2.xml (97%) create mode 100644 smart-admin-api/sa-admin/src/main/resources/prod/spy.properties create mode 100644 smart-admin-api/sa-admin/src/main/resources/test/application.yaml rename {smart-admin-service/smart-admin-api/src/main/resources/prod => smart-admin-api/sa-admin/src/main/resources/test}/log4j2.xml (97%) create mode 100644 smart-admin-api/sa-admin/src/main/resources/test/spy.properties create mode 100644 smart-admin-api/sa-admin/src/test/java/net/lab1024/sa/admin/SmartAdminApplicationTest.java rename {smart-admin-service/smart-admin-api => smart-admin-api/sa-common}/pom.xml (52%) rename {smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno => smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/annoation}/NoNeedLogin.java (52%) create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/annoation/SaAuth.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/ErrorCode.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/ErrorCodeRangeContainer.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/ErrorCodeRegister.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/SystemErrorCode.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/UnexpectedErrorCode.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/UserErrorCode.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/constant/RequestHeaderConst.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/constant/StringConst.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/controller/SupportBaseController.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/DataScopePlugin.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/PageParam.java rename smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/PageResultDTO.java => smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/PageResult.java (64%) create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/RequestUrlVO.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/RequestUser.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/ResponseDTO.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/SystemEnvironment.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/ValidateData.java rename {smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin => smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common}/common/domain/ValidateList.java (89%) rename {smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain => smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration}/BaseEnum.java (83%) create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/GenderEnum.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/SystemEnvironmentEnum.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/UserTypeEnum.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/excel/ExcelStyle.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/exception/BusinessException.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/interceptor/AbstractInterceptor.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/deserializer/DictValueVoDeserializer.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/deserializer/FileKeyVoDeserializer.java rename {smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/json => smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/deserializer}/LongJsonDeserializer.java (71%) create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/BigDecimalNullZeroSerializer.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/DictValueVoSerializer.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/FileKeySerializer.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/FileKeyVoSerializer.java rename {smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/json => smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer}/LongJsonSerializer.java (70%) create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/AbstractSecurityConfig.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityAuthenticationFailHandler.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityMethodSource.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityPermissionCheckService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityTokenFilter.java rename {smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno => smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/swagger}/ApiModelPropertyEnum.java (59%) create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/swagger/Swagger2MapperImplExtension.java rename smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/swagger/SmartSwaggerApiModelEnumPlugin.java => smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/swagger/SwaggerApiModelPropertyEnumPlugin.java (51%) rename {smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin => smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common}/util/SmartBeanUtil.java (52%) rename {smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin => smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common}/util/SmartBigDecimalUtil.java (55%) rename {smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin => smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common}/util/SmartEasyPoiExcelUtil.java (77%) create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartEnumUtil.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartPageUtil.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartRequestUtil.java rename {smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin => smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common}/util/SmartStringUtil.java (73%) rename {smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin => smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common}/util/SmartVerificationUtil.java (51%) rename {smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/en => smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/validator/enumeration}/CheckEnum.java (65%) rename {smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/en => smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/validator/enumeration}/EnumValidator.java (85%) create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/AsyncConfig.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/CorsFilterConfig.java rename smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartDruidDataSourceConfig.java => smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/DataSourceConfig.java (64%) create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/DateConfig.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/FileCloudConfig.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/HeartBeatConfig.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/MvcConfig.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/MybatisPlusConfig.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/PostProcessorConfig.java rename smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartRedisConfig.java => smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/RedisConfig.java (90%) create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/ReloadConfig.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/RepeatSubmitConfig.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/RestTemplateConfig.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/ScheduleConfig.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/SwaggerConfig.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/SystemEnvironmentConfig.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/UrlConfig.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/CacheKeyConst.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/RedisKeyConst.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/ReloadConst.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/SwaggerTagConst.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/UrlPrefixConst.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/handler/GlobalExceptionHandler.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/listener/SmartApplicationListener.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/cache/CacheService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/CaptchaController.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/CaptchaService.java rename smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/kaptcha/KaptchaColor.java => smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaColor.java (73%) rename smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartKaptchaConfig.java => smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaConfig.java (60%) rename smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/kaptcha/KaptchaNoise.java => smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaNoise.java (62%) rename smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/kaptcha/KaptchaWordRenderer.java => smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaWordRenderer.java (75%) create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/domain/CaptchaForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/domain/CaptchaVO.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/constant/ChangeLogTypeEnum.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/controller/ChangeLogController.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/dao/ChangeLogDao.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/entity/ChangeLogEntity.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/form/ChangeLogAddForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/form/ChangeLogQueryForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/form/ChangeLogUpdateForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/vo/ChangeLogVO.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/manager/ChangeLogManager.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/service/ChangeLogService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeDeleteEnum.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeFrontComponentEnum.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeGeneratorConstant.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeGeneratorPageTypeEnum.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeQueryFieldQueryTypeEnum.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/controller/CodeGeneratorController.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/dao/CodeGeneratorConfigDao.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/dao/CodeGeneratorDao.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/entity/CodeGeneratorConfigEntity.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/form/CodeGeneratorConfigForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/form/CodeGeneratorPreviewForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/form/TableQueryForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeBasic.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeDelete.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeField.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeInsertAndUpdate.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeInsertAndUpdateField.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeQueryField.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeTableField.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/vo/TableColumnVO.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/vo/TableConfigVO.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/vo/TableVO.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/CodeGeneratorService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/CodeGeneratorTemplateService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/CodeGenerateBaseVariableService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/ControllerVariableService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/DaoVariableService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/ManagerVariableService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/ServiceVariableService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/AddFormVariableService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/DeleteFormVariableService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/EntityVariableService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/MapperVariableService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/QueryFormVariableService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/UpdateFormVariableService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/VOVariableService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/ApiVariableService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/ConstVariableService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/FormVariableService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/ListVariableService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/util/CodeGeneratorTool.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigController.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigDao.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigKeyEnum.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigService.java rename smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigAddDTO.java => smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigAddForm.java (61%) create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigEntity.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigQueryForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigUpdateForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigVO.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldBigDecimal.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldDict.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldEnum.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldLabel.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldSql.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/constant/DataTracerConst.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/constant/DataTracerTypeEnum.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/controller/DataTracerController.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/dao/DataTracerDao.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/bo/DataTracerContentBO.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/entity/DataTracerEntity.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/form/DataTracerForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/form/DataTracerQueryForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/vo/DataTracerVO.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/manager/DataTracerManger.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/service/DataTracerChangeContentService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/service/DataTracerService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/controller/DictController.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/dao/DictKeyDao.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/dao/DictValueDao.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/entity/DictKeyEntity.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/entity/DictValueEntity.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictKeyAddForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictKeyQueryForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictKeyUpdateForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictValueAddForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictValueQueryForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictValueUpdateForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/vo/DictKeyVO.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/vo/DictValueVO.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/service/DictCacheService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/service/DictService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/controller/FeedbackController.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/dao/FeedbackDao.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackAddForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackEntity.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackQueryForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackVO.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/service/FeedbackService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/constant/FileFolderTypeEnum.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/controller/FileController.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/dao/FileDao.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/entity/FileEntity.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/form/FileQueryForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/form/FileUrlUploadForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileDownloadVO.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileMetadataVO.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileUploadVO.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileVO.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/FileService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/FileStorageCloudServiceImpl.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/FileStorageLocalServiceImpl.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/IFileStorageService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/HeartBeatRecordDao.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/HeartBeatRecordHandler.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/HeartBeatService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/HeartBeatManager.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/HeartBeatRecord.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/HeartBeatRunnable.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/IHeartBeatRecordHandler.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/domain/HeartBeatRecordEntity.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/domain/HeartBeatRecordQueryForm.java rename {smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat => smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/domain}/HeartBeatRecordVO.java (53%) create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/controller/HelpDocController.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/dao/HelpDocCatalogDao.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/dao/HelpDocDao.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/entity/HelpDocCatalogEntity.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/entity/HelpDocEntity.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocAddForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocCatalogAddForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocCatalogUpdateForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocQueryForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocRelationForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocUpdateForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocViewRecordQueryForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocCatalogVO.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocDetailVO.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocRecordVO.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocRelationVO.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocVO.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocViewRecordVO.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/manager/HelpDocManager.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/service/HelpDocCatalogService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/service/HelpDocService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/service/HelpDocUserService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/DecryptData.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweAspect.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweDecrypt.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweEncrypt.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweUserKey.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/LoginLogDao.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/LoginLogResultEnum.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/LoginLogService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/domain/LoginLogEntity.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/domain/LoginLogQueryForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/domain/LoginLogVO.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/OperateLogDao.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/OperateLogService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/annoation/OperateLog.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/core/OperateLogAspect.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/core/OperateLogConfig.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/domain/OperateLogEntity.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/domain/OperateLogQueryForm.java rename smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/domain/UserOperateLogDTO.java => smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/domain/OperateLogVO.java (51%) create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/redis/RedisService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/ReloadCommand.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/ReloadService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/AbstractSmartReloadCommand.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/SmartReloadManager.java rename {smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/annotation => smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/annoation}/SmartReload.java (56%) create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/domain/SmartReloadItem.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/domain/SmartReloadObject.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/domain/SmartReloadResult.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/thread/SmartReloadRunnable.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/dao/ReloadItemDao.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/dao/ReloadResultDao.java rename smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/dto/ReloadItemUpdateDTO.java => smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadForm.java (53%) rename {smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/entity => smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain}/ReloadItemEntity.java (62%) create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadItemVO.java rename {smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/entity => smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain}/ReloadResultEntity.java (62%) create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadResultVO.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/RepeatSubmitAspect.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/annoation/RepeatSubmit.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/ticket/AbstractRepeatSubmitTicket.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/ticket/RepeatSubmitCaffeineTicket.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/ticket/RepeatSubmitRedisTicket.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/constant/SerialNumberIdEnum.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/constant/SerialNumberRuleTypeEnum.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/dao/SerialNumberDao.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/dao/SerialNumberRecordDao.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberEntity.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberGenerateForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberGenerateResultBO.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberInfoBO.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberLastGenerateBO.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberRecordEntity.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberRecordQueryForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/SerialNumberBaseService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/SerialNumberRecordService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/SerialNumberService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/impl/SerialNumberInternService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/impl/SerialNumberMysqlService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/impl/SerialNumberRedisService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/TableColumnController.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/TableColumnDao.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/TableColumnService.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/domain/TableColumnEntity.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/domain/TableColumnItemForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/domain/TableColumnUpdateForm.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/token/JwtConst.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/token/LoginDeviceEnum.java create mode 100644 smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/token/TokenService.java create mode 100644 smart-admin-api/sa-common/src/main/resources/META-INF/spring.factories rename {smart-admin-service/smart-admin-api => smart-admin-api/sa-common}/src/main/resources/banner.txt (50%) create mode 100644 smart-admin-api/sa-common/src/main/resources/code-generator-template/java/constant/enum.java.vm create mode 100644 smart-admin-api/sa-common/src/main/resources/code-generator-template/java/controller/Controller.java.vm create mode 100644 smart-admin-api/sa-common/src/main/resources/code-generator-template/java/dao/Dao.java.vm create mode 100644 smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/entity/Entity.java.vm create mode 100644 smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/form/AddForm.java.vm create mode 100644 smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/form/QueryForm.java.vm create mode 100644 smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/form/UpdateForm.java.vm create mode 100644 smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/vo/VO.java.vm create mode 100644 smart-admin-api/sa-common/src/main/resources/code-generator-template/java/manager/Manager.java.vm create mode 100644 smart-admin-api/sa-common/src/main/resources/code-generator-template/java/mapper/Mapper.xml.vm create mode 100644 smart-admin-api/sa-common/src/main/resources/code-generator-template/java/service/Service.java.vm create mode 100644 smart-admin-api/sa-common/src/main/resources/code-generator-template/js/api.js.vm create mode 100644 smart-admin-api/sa-common/src/main/resources/code-generator-template/js/const.js.vm create mode 100644 smart-admin-api/sa-common/src/main/resources/code-generator-template/js/form.vue.vm create mode 100644 smart-admin-api/sa-common/src/main/resources/code-generator-template/js/list.vue.vm create mode 100644 smart-admin-api/sa-common/src/main/resources/code-generator-template/tools.xml create mode 100644 smart-admin-api/sa-common/src/main/resources/dev/sa-common.yaml create mode 100644 smart-admin-api/sa-common/src/main/resources/mapper/support/ChangeLogMapper.xml create mode 100644 smart-admin-api/sa-common/src/main/resources/mapper/support/CodeGeneratorMapper.xml create mode 100644 smart-admin-api/sa-common/src/main/resources/mapper/support/ConfigMapper.xml create mode 100644 smart-admin-api/sa-common/src/main/resources/mapper/support/DataTracerMapper.xml create mode 100644 smart-admin-api/sa-common/src/main/resources/mapper/support/DictKeyMapper.xml create mode 100644 smart-admin-api/sa-common/src/main/resources/mapper/support/DictValueMapper.xml create mode 100644 smart-admin-api/sa-common/src/main/resources/mapper/support/FeedbackMapper.xml create mode 100644 smart-admin-api/sa-common/src/main/resources/mapper/support/FileMapper.xml create mode 100644 smart-admin-api/sa-common/src/main/resources/mapper/support/HeartBeatRecordMapper.xml create mode 100644 smart-admin-api/sa-common/src/main/resources/mapper/support/HelpDocDao.xml create mode 100644 smart-admin-api/sa-common/src/main/resources/mapper/support/LoginLogMapper.xml create mode 100644 smart-admin-api/sa-common/src/main/resources/mapper/support/OperateLogMapper.xml create mode 100644 smart-admin-api/sa-common/src/main/resources/mapper/support/ReloadItemMapper.xml create mode 100644 smart-admin-api/sa-common/src/main/resources/mapper/support/ReloadResultMapper.xml create mode 100644 smart-admin-api/sa-common/src/main/resources/mapper/support/SerialNumberMapper.xml create mode 100644 smart-admin-api/sa-common/src/main/resources/mapper/support/SerialNumberRecordMapper.xml create mode 100644 smart-admin-api/sa-common/src/main/resources/mapper/support/TableColumnMapper.xml create mode 100644 smart-admin-api/sa-common/src/main/resources/pre/sa-common.yaml create mode 100644 smart-admin-api/sa-common/src/main/resources/prod/sa-common.yaml create mode 100644 smart-admin-api/sa-common/src/main/resources/test/sa-common.yaml create mode 100644 smart-admin-api/sa-parent/pom.xml delete mode 100644 smart-admin-h5/.browserslistrc delete mode 100644 smart-admin-h5/.editorconfig delete mode 100644 smart-admin-h5/.env.development delete mode 100644 smart-admin-h5/.env.local delete mode 100644 smart-admin-h5/.env.pre delete mode 100644 smart-admin-h5/.env.prod delete mode 100644 smart-admin-h5/.env.sit delete mode 100644 smart-admin-h5/.eslintignore delete mode 100644 smart-admin-h5/.eslintrc.js delete mode 100644 smart-admin-h5/.gitignore delete mode 100644 smart-admin-h5/.postcssrc.js delete mode 100644 smart-admin-h5/.prettierrc.js delete mode 100644 smart-admin-h5/.sentryclirc delete mode 100644 smart-admin-h5/README.md delete mode 100644 smart-admin-h5/babel.config.js delete mode 100644 smart-admin-h5/package.json delete mode 100644 smart-admin-h5/public/index.html delete mode 100644 smart-admin-h5/src/App.vue delete mode 100644 smart-admin-h5/src/api/employee.js delete mode 100644 smart-admin-h5/src/api/file.js delete mode 100644 smart-admin-h5/src/api/login.js delete mode 100644 smart-admin-h5/src/api/system-config.js delete mode 100644 smart-admin-h5/src/api/user.js delete mode 100644 smart-admin-h5/src/assets/css/index.scss delete mode 100644 smart-admin-h5/src/assets/logo.png delete mode 100644 smart-admin-h5/src/components/employee/department-employee-selector.vue delete mode 100644 smart-admin-h5/src/components/form/select-picker/SmartEnumSelectPicker.vue delete mode 100644 smart-admin-h5/src/components/form/select-picker/SmartSelectPicker delete mode 100644 smart-admin-h5/src/components/mixin/session-mixin.js delete mode 100644 smart-admin-h5/src/components/van-bar/BackNavBar.vue delete mode 100644 smart-admin-h5/src/components/van-bar/RouterNavBar.vue delete mode 100644 smart-admin-h5/src/config/index.js delete mode 100644 smart-admin-h5/src/constants/area.js delete mode 100644 smart-admin-h5/src/constants/erp/contact-company.js delete mode 100644 smart-admin-h5/src/constants/erp/index.js delete mode 100644 smart-admin-h5/src/constants/file.js delete mode 100644 smart-admin-h5/src/constants/index.js delete mode 100644 smart-admin-h5/src/constants/school.js delete mode 100644 smart-admin-h5/src/filters/filter.js delete mode 100644 smart-admin-h5/src/filters/index.js delete mode 100644 smart-admin-h5/src/lib/cookie.js delete mode 100644 smart-admin-h5/src/lib/erp-http.js delete mode 100644 smart-admin-h5/src/lib/http.js delete mode 100644 smart-admin-h5/src/lib/local.js delete mode 100644 smart-admin-h5/src/lib/menu-func.js delete mode 100644 smart-admin-h5/src/lib/printPlugs.js delete mode 100644 smart-admin-h5/src/lib/render-dom.js delete mode 100644 smart-admin-h5/src/lib/smart-sentry.js delete mode 100644 smart-admin-h5/src/lib/util.js delete mode 100644 smart-admin-h5/src/lib/watermark.js delete mode 100644 smart-admin-h5/src/main.js delete mode 100644 smart-admin-h5/src/plugins/smart-sentry.js delete mode 100644 smart-admin-h5/src/plugins/smart.js delete mode 100644 smart-admin-h5/src/plugins/vant.js delete mode 100644 smart-admin-h5/src/router/dashboard/index.js delete mode 100644 smart-admin-h5/src/router/develop/develop.js delete mode 100644 smart-admin-h5/src/router/error/error.js delete mode 100644 smart-admin-h5/src/router/index.js delete mode 100644 smart-admin-h5/src/router/login/login.js delete mode 100644 smart-admin-h5/src/router/router-const.js delete mode 100644 smart-admin-h5/src/router/routers.js delete mode 100644 smart-admin-h5/src/router/user/user.js delete mode 100644 smart-admin-h5/src/store/index.js delete mode 100644 smart-admin-h5/src/store/module/app.js delete mode 100644 smart-admin-h5/src/store/module/user.js delete mode 100644 smart-admin-h5/src/themes/index.scss delete mode 100644 smart-admin-h5/src/utils/index.js delete mode 100644 smart-admin-h5/src/utils/request.js delete mode 100644 smart-admin-h5/src/utils/validate.js delete mode 100644 smart-admin-h5/src/views/dashboard/dashboard.vue delete mode 100644 smart-admin-h5/src/views/develop/config.vue delete mode 100644 smart-admin-h5/src/views/error/404.vue delete mode 100644 smart-admin-h5/src/views/login/login.vue delete mode 100644 smart-admin-h5/src/views/user/change-password.vue delete mode 100644 smart-admin-h5/src/views/user/index.vue delete mode 100644 smart-admin-h5/vue.config.js delete mode 100644 smart-admin-service/.gitignore delete mode 100644 smart-admin-service/README.md delete mode 100644 smart-admin-service/pom.xml delete mode 100644 smart-admin-service/smart-admin-api/doc/readme.txt delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/NoValidPrivilege.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/OperateLog.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/constant/CommentSortTypeEnum.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/constant/JudgeEnum.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/constant/ResponseCodeConst.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/controller/BaseController.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/BaseEntity.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/ITask.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/OrderItemDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/PageParamDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/ResponseDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/exception/SmartBusinessException.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/exception/SmartResponseCodeException.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/AbstractHeartBeatCommand.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeartBeatConfig.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeartBeatLogger.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeartBeatRecordCommendInterface.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeartBeatRecordDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeatBeatRecordHelper.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/IpUtil.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/StringUtil.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/SmartReloadManager.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/SmartReloadScheduler.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/abstracts/AbstractSmartReloadCommand.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/abstracts/AbstractSmartReloadCommand4Spring.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/AbstractSmartReloadObject.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/AnnotationReloadObject.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/InterfaceReloadObject.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/entity/ReloadItem.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/entity/SmartReloadResult.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/interfaces/SmartReloadCommandInterface.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/interfaces/SmartReloadThreadLogger.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/interfaces/SmartReloadable.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/bigdecimal/BigDecimalValidator.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/bigdecimal/CheckBigDecimal.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/bigdecimal/ComparisonSymbolEnum.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartAdminWebAppConfig.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartHeartBeatConfig.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartMybatisPlusConfig.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartReloadConfig.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartRestTemplateConfig.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartSwaggerApiModelEnumConfig.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartSwaggerDynamicGroupConfig.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartWebSocketConfig.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SystemEnvironmentCondition.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/constant/CommonConst.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/constant/SmartReloadTagConst.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/constant/SwaggerTagConst.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/constant/SystemEnvironmentEnum.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/handler/SmartGlobalExceptionHandler.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/handler/SmartOperateLogAspect.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/interceptor/SmartAuthenticationInterceptor.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/listener/SmartAdminStartupRunner.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/EmailController.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/EmailDao.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/EmailSendStatusEnum.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/EmailService.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/dto/EmailConfigDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/dto/EmailDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/dto/EmailQueryDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/dto/EmailVO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/entity/EmailEntity.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/LogService.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/OrderOperateLogController.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/OrderOperateLogDao.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/OrderOperateLogService.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/constant/OrderOperateLogDefaultEmpEnum.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/constant/OrderOperateLogOperateTypeConst.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/constant/OrderOperateLogOrderTypeEnum.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/domain/dto/OrderOperateLogSaveDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/domain/dto/SupplierOrderOperateVO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/domain/entity/OrderOperateLogEntity.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/domain/vo/OrderOperateLogVO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/UserLoginLogController.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/UserLoginLogDao.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/UserLoginLogService.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/domain/UserLoginLogDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/domain/UserLoginLogEntity.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/domain/UserLoginLogQueryDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/UserOperateLogController.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/UserOperateLogDao.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/UserOperateLogService.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/domain/UserOperateLogEntity.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/domain/UserOperateLogQueryDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/NoticeController.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/NoticeManage.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/NoticeService.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/dao/NoticeDao.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/dao/NoticeReceiveRecordDao.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeAddDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeDetailVO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeQueryDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeReadCountDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeReceiveDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeReceiveQueryDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeUpdateDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeVO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/entity/NoticeEntity.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/entity/NoticeReceiveRecordEntity.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/controller/PeonyController.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/dao/PeonyDao.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/dto/PeonyAddDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/dto/PeonyQueryDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/dto/PeonyUpdateDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/entity/PeonyEntity.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/vo/PeonyExcelVO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/vo/PeonyVO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/service/PeonyService.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/constant/SqlOperateTypeEnum.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/dao/TableDao.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/domain/CodeGeneratorDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/domain/CodeGeneratorQueryColumnDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/domain/ColumnVO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/domain/QueryFieldVO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/service/CodeGeneratorComponent.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/service/CodeGeneratorService.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/FileController.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/FileDao.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/constant/FileModuleTypeEnum.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/constant/FileResponseCodeConst.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/constant/FileServiceNameConst.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/constant/FileServiceTypeEnum.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/dto/FileAddDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/dto/FileDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/dto/FileQueryDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/dto/OSSConfig.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/entity/FileEntity.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/vo/FileVO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/vo/UploadVO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/FileService.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/FileServiceAliYun.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/FileServiceLocal.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/FileServiceQiNiuYun.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/IFileService.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatController.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatRecordDao.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatRecordEntity.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatService.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/IdGeneratorDao.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/IdGeneratorManager.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/IdGeneratorService.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/constant/IdGeneratorEnum.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/constant/IdGeneratorRuleTypeEnum.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/domain/IdGeneratorEntity.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/domain/IdGeneratorLastNumberDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/domain/IdGeneratorPOJO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/domain/IdGeneratorRecordDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/constant/QuartzConst.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/constant/TaskResultEnum.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/constant/TaskStatusEnum.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/controller/QuartzController.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/dao/QuartzTaskDao.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/dao/QuartzTaskLogDao.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzLogQueryDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzQueryDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzTaskDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzTaskLogVO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzTaskVO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/entity/QuartzTaskEntity.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/entity/QuartzTaskLogEntity.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/service/QuartzTask.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/service/QuartzTaskLogService.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/service/QuartzTaskService.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/task/test/Example.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/SmartReloadCommand.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/SmartReloadController.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/SmartReloadService.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/dao/ReloadItemDao.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/dao/ReloadResultDao.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/dto/ReloadItemVO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/dto/ReloadResultVO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/MessageTypeEnum.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/WebSocketServer.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/domain/MessageCommonDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/domain/MessageDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/domain/WebSocketHeartBeatDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/DataScopeController.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/DataScopeRoleDao.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/constant/DataScopeViewTypeEnum.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/constant/DataScopeWhereInTypeEnum.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeBatchSetDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeBatchSetRoleDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeSelectVO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeSqlConfigDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/entity/DataScopeRoleEntity.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/service/DataScopeService.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/strategy/DataScopePowerStrategy.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentController.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentDao.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentResponseCodeConst.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentService.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentTreeService.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/domain/dto/DepartmentUpdateDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/domain/dto/DepartmentVO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/domain/entity/DepartmentEntity.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/EmployeeController.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/EmployeeDao.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/EmployeeService.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/constant/EmployeeResponseCodeConst.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/constant/EmployeeStatusEnum.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/bo/EmployeeBO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeAddDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeBaseDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeBatchUpdateStatusDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeLoginFormDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeQueryDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeQueryExportDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeUpdateDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeUpdatePwdDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeUpdateRolesDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/entity/EmployeeEntity.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/vo/EmployeeVO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/LoginController.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/LoginResponseCodeConst.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/LoginService.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/LoginTokenService.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/KaptchaVO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/LoginCacheDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/LoginDetailVO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/LoginPrivilegeDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/RequestTokenBO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/PositionController.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/PositionDao.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/PositionResponseCodeConst.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/PositionService.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionAddDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionQueryDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionRelationAddDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionRelationQueryDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionRelationResultDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionResultVO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionUpdateDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/entity/PositionEntity.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/entity/PositionRelationEntity.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/constant/PrivilegeResponseCodeConst.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/constant/PrivilegeTypeEnum.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/controller/PrivilegeController.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/dao/PrivilegeDao.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeFunctionDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeFunctionVO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeMenuDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeMenuVO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeRequestUrlVO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/entity/PrivilegeEntity.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/service/PrivilegeEmployeeService.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/service/PrivilegeRequestUrlService.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/service/PrivilegeService.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/RoleController.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/RoleDao.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/RoleResponseCodeConst.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/RoleService.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleQueryDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleSelectedVO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleUpdateDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/entity/RoleEntity.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/RoleEmployeeController.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/RoleEmployeeService.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/domain/RoleEmployeeDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/domain/RoleEmployeeEntity.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/RolePrivilegeController.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/RolePrivilegeDao.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/RolePrivilegeService.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/domain/dto/RolePrivilegeDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/domain/dto/RolePrivilegeSimpleDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/domain/dto/RolePrivilegeTreeVO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/domain/entity/RolePrivilegeEntity.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/SystemConfigController.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/SystemConfigDao.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/SystemConfigService.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/constant/SystemConfigDataType.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/constant/SystemConfigEnum.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/constant/SystemConfigResponseCodeConst.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigQueryDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigUpdateDTO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigVO.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/entity/SystemConfigEntity.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/third/SmartApplicationContext.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/third/SmartRedisService.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartBaseEnumUtil.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartDateUtil.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartDigestUtil.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartFileUtil.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartHttpUtil.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartIPUtil.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartPageUtil.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartQuartzUtil.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartRequestTokenUtil.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartSendMailUtil.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartThreadFactory.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/excel/SmartExcel.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/excel/SmartExcelFileType.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/excel/SmartExcelReader.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/excel/SmartSheet.java delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/dev/application.properties delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/dev/spy.properties delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/mapper/business/email/EmailMapper.xml delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/mapper/business/log/OrderOperateLogMapper.xml delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/mapper/business/log/UserLoginLogMapper.xml delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/mapper/business/log/UserOperateLogMapper.xml delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/mapper/business/notice/NoticeMapper.xml delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/mapper/business/notice/NoticeReceiveRecordMapper.xml delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/mapper/business/peony/PeonyMapper.xml delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/mapper/support/codegenerator/TableMapper.xml delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/mapper/support/file/FileMapper.xml delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/mapper/support/heartbeat/HeartBeatRecordMapper.xml delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/mapper/support/idgenerator/IdGeneratorMapper.xml delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/mapper/support/quartz/QuartzTaskLogMapper.xml delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/mapper/support/quartz/QuartzTaskMapper.xml delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/mapper/support/smartreload/ReloadItemMapper.xml delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/mapper/support/smartreload/ReloadResultMapper.xml delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/mapper/system/department/DepartmentMapper.xml delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/mapper/system/employee/EmployeeMapper.xml delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/mapper/system/position/PositionMapper.xml delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/mapper/system/privilege/PrivilegeMapper.xml delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/mapper/system/role/RoleEmployeeMapper.xml delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/mapper/system/role/RoleMapper.xml delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/mapper/system/role/RolePrivilegeMapper.xml delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/mapper/system/systemconfig/SystemConfigMapper.xml delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/pre/application.properties delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/prod/application.properties delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/sit/application.properties delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/sit/spy.properties delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/sql/quartz_mysql_2.3.0.sql delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/sql/smart-admin.sql delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/AddDTO.java.vm delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/Controller.java.vm delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/Dao.java.vm delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/Dao.xml.vm delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/Entity.java.vm delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/ExcelVO.java.vm delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/QueryDTO.java.vm delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/Service.java.vm delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/UpdateDTO.java.vm delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/VO.java.vm delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/web/Api.js.vm delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/web/List.vue.vm delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/web/ListForm.vue.vm delete mode 100644 smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/web/Router.js.vm delete mode 100644 smart-admin-service/smart-admin-api/src/test/java/net/lab1024/smartadmin/BaseTest.java delete mode 100644 smart-admin-service/smart-admin-api/src/test/java/net/lab1024/smartadmin/SmartAdminApplicationTests.java delete mode 100644 smart-admin-service/smart-admin-api/src/test/java/net/lab1024/smartadmin/module/support/codegenerator/CodeGeneratorServiceTest.java delete mode 100644 smart-admin-web/.babelrc delete mode 100644 smart-admin-web/.editorconfig delete mode 100644 smart-admin-web/.env.development delete mode 100644 smart-admin-web/.env.local delete mode 100644 smart-admin-web/.env.prod delete mode 100644 smart-admin-web/.env.sit delete mode 100644 smart-admin-web/.eslintrc.js delete mode 100644 smart-admin-web/.gitignore delete mode 100644 smart-admin-web/.travis.yml delete mode 100644 smart-admin-web/README.md delete mode 100644 smart-admin-web/cypress.json delete mode 100644 smart-admin-web/doc/notice.txt create mode 100644 smart-admin-web/javascript-ant-design-vue3/.env create mode 100644 smart-admin-web/javascript-ant-design-vue3/.env.development create mode 100644 smart-admin-web/javascript-ant-design-vue3/.env.localhost create mode 100644 smart-admin-web/javascript-ant-design-vue3/.env.pre create mode 100644 smart-admin-web/javascript-ant-design-vue3/.env.production create mode 100644 smart-admin-web/javascript-ant-design-vue3/.env.test create mode 100644 smart-admin-web/javascript-ant-design-vue3/.eslintignore create mode 100644 smart-admin-web/javascript-ant-design-vue3/.eslintrc.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/.gitignore create mode 100644 smart-admin-web/javascript-ant-design-vue3/.prettierrc.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/.stylelintignore create mode 100644 smart-admin-web/javascript-ant-design-vue3/.stylelintrc.js rename smart-admin-web/{.eslintignore => javascript-ant-design-vue3/README.en.md} (100%) rename smart-admin-web/{src/filters/index.js => javascript-ant-design-vue3/README.md} (100%) create mode 100644 smart-admin-web/javascript-ant-design-vue3/index.html create mode 100644 smart-admin-web/javascript-ant-design-vue3/jsconfig.json create mode 100644 smart-admin-web/javascript-ant-design-vue3/package.json rename smart-admin-web/{.postcssrc.js => javascript-ant-design-vue3/postcss.config.js} (54%) rename {smart-admin-h5 => smart-admin-web/javascript-ant-design-vue3}/public/favicon.ico (100%) create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/App.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/api/business/category/category-api.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/api/business/goods/goods-api.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/bank-api.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/enterprise-api.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/invoice-api.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/notice-api.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/api/support/cache/cache-api.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/api/support/change-log/change-log-api.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/api/support/code-generator/code-generator-api.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/api/support/config/config-api.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/api/support/data-tracer/data-tracer-api.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/api/support/dict/dict-api.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/api/support/feedback/feedback-api.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/api/support/file/file-api.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/api/support/heart-beat/heart-beat-api.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/api/support/help-doc/help-doc-api.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/api/support/help-doc/help-doc-catalog-api.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/api/support/login-log/login-log-api.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/api/support/operate-log/operate-log-api.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/api/support/reload/reload-api.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/api/support/serial-number/serial-number-api.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/api/support/table/table-column-api.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/api/system/department/department-api.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/api/system/employee/employee-api.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/api/system/home/home-api.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/api/system/login/login-api.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/api/system/menu/menu-api.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/api/system/role-menu/role-menu-api.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/api/system/role/role-api.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/assets/images/1024lab/1024lab-gzh.jpg create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/assets/images/1024lab/xiaozhen-gzh.jpg create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/assets/images/1024lab/zhuoda-wechat.jpg create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/ali-icon.png create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/google-icon.png create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/login-bg.jpg create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/login-form-open-eyes-close.png create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/login-form-open-eyes.png create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/login-qr.png create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/qq-icon.png create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/wechat-icon.png create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/weibo-icon.png rename smart-admin-web/{src/assets/images => javascript-ant-design-vue3/src/assets/images/logo}/logo-min.png (100%) create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/assets/images/logo/logo.png create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/assets/images/logo/smart-admin-logo-white.png create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/assets/images/logo/smart-admin-logo.png create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/assets/images/notice/edit_icon.png create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/assets/images/notice/file_icon.png create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/components/business/category-tree-select/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/components/business/oa/enterprise-bank-select/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/components/business/oa/enterprise-invoice-select/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/components/business/oa/enterprise-select/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/components/framework/area-cascader/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/components/framework/area-cascader/province-city-district.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/components/framework/area-cascader/province-city.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/components/framework/boolean-select/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/components/framework/icon-select/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/components/framework/iframe/iframe-index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/components/framework/iframe/route-default-component.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/components/framework/smart-enum-checkbox/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/components/framework/smart-enum-radio/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/components/framework/smart-enum-select/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/components/framework/smart-loading/index.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/components/framework/wangeditor/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/components/support/data-tracer/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/components/support/dict-key-select/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/components/support/dict-select/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/components/support/file-preview-modal/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/components/support/file-preview/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/components/support/file-upload/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/components/support/table-operator/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/components/support/table-operator/smart-table-column-merge.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/components/support/table-operator/smart-table-column-modal.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/components/system/department-tree-select/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/components/system/employee-select/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/components/system/employee-table-select-modal/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/components/system/menu-tree-select/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/config/app-config.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/constants/business/erp/category-const.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/constants/business/erp/goods-const.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/constants/business/oa/enterprise-const.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/constants/business/oa/notice-const.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/constants/common-const.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/constants/index.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/constants/layout-const.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/constants/local-storage-key-const.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/constants/regular-const.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/constants/support/change-log-const.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/constants/support/code-generator-const.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/constants/support/data-tracer-const.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/constants/support/file-const.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/constants/support/login-log-const.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/constants/support/table-id-const.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/constants/system/employee-const.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/constants/system/home-const.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/constants/system/login-device-const.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/constants/system/menu-const.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/directives/privilege.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/i18n/index.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/i18n/lang/en-US/index.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/i18n/lang/zh-CN/index.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/layout/components/header-user-space/header-avatar.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/layout/components/header-user-space/header-message.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/layout/components/header-user-space/header-reset-password-modal/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/layout/components/header-user-space/header-setting.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/layout/components/header-user-space/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/layout/components/menu-location-breadcrumb/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/layout/components/page-tag/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-expand-menu/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-expand-menu/recursion-menu.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-expand-menu/sub-menu.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-expand-menu/top-menu.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-help-doc/components/contact-modal.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-help-doc/components/feedback-modal.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-help-doc/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-menu/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-menu/recursion-menu.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-menu/sub-menu.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/layout/components/smart-footer/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/layout/smart-help-doc-layout.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/layout/smart-keep-alive.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/layout/smart-layout.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/layout/smart-side-expand-layout.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/layout/smart-side-layout.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/lib/axios.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/lib/default-time-ranges.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/lib/highlight-line-number.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/lib/smart-sentry.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/lib/smart-wartermark.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/main.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/plugins/privilege-plugin.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/plugins/smart-enums-plugin.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/router/index.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/router/routers.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/router/support/help-doc.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/router/system/home.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/router/system/login.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/store/index.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/store/modules/system/app-config.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/store/modules/system/role.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/store/modules/system/spin.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/store/modules/system/user.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/theme/index.less create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/theme/smart-admin.less create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/utils/cookie-util.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/utils/local-util.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/utils/str-util.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/business/erp/catalog/components/category-form-modal.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/business/erp/catalog/components/category-tree-table.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/business/erp/catalog/custom-catalog.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/business/erp/catalog/goods-catalog.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/business/erp/goods/components/goods-form-modal.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/business/erp/goods/goods-list.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-bank-list.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-bank-operate-modal.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-employee-list.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-invoice-list.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-invoice-operate-modal.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-operate-modal.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/enterprise-detail.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/enterprise-list.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/components/notice-form-drawer.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/components/notice-form-visible-modal.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/components/notice-form-visible-transfer-department.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/components/notice-form-visible-transfer-employee.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/components/notice-view-record-list.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/notice-detail.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/notice-employee-detail.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/notice-employee-list.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/notice-list.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/cache/cache-list.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/change-log/change-log-form.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/change-log/change-log-list.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/change-log/change-log-modal.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/code-generator-list.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/code-generator-util.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-basic.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-delete.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-field.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-insert-and-update.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-query-field.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-table-field.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/preview/code-generator-preview-modal.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/config/config-form-modal.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/config/config-list.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/dict/components/dict-key-operate-modal.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/dict/components/dict-value-modal.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/dict/components/dict-value-operate-modal.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/dict/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/feedback/feedback-list.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/file/file-list.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/heart-beat/heart-beat-list.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/components/help-doc-catalog-form-modal.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/components/help-doc-catalog-tree-select.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/components/help-doc-catalog-tree.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/components/help-doc-form-drawer.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/components/help-doc-list.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/help-doc-manage-list.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/help-doc-mitt.ts create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/user-view/components/help-doc-view-record-list.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/user-view/help-doc-user-view.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/login-log/login-log-list.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/operate-log/operate-log-detail-modal.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/operate-log/operate-log-list.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/reload/do-reload-form-modal.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/reload/reload-list.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/reload/reload-result-list.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/serial-number/serial-number-generate-form-modal.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/serial-number/serial-number-list.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/support/serial-number/serial-number-record-list.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/40X/403.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/40X/404.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/department-children/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/department-form-modal/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/department-tree/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/employee-department-form-modal/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/employee-form-modal/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/employee-list/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/employee-password-dialog/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/department-mitt.ts create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-data-scope/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-employee-list/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-form-modal/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-list/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-setting/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-tree/index.less create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-tree/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-tree/role-tree-checkbox.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-tree/role-tree-menu.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-tree/role-tree-point.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/changelog-card.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/default-home-card.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/echarts/category.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/echarts/gauge.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/echarts/gradient.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/echarts/pie.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/official-account-card.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/quick-entry/home-quick-entry-modal.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/quick-entry/home-quick-entry.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/quick-entry/init-quick-entry-list.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/to-be-done-card.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/home/home-header.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/home/home-notice.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/home/index.less create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/home/index.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/login/login.less create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/login/login.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/menu/components/menu-operate-modal.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/menu/components/menu-tree-select.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/menu/menu-data-handler.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/menu/menu-list-table-columns.js create mode 100644 smart-admin-web/javascript-ant-design-vue3/src/views/system/menu/menu-list.vue create mode 100644 smart-admin-web/javascript-ant-design-vue3/vite.config.js delete mode 100644 smart-admin-web/package-lock.json delete mode 100644 smart-admin-web/package.json delete mode 100644 smart-admin-web/public/favicon.ico delete mode 100644 smart-admin-web/public/index.html delete mode 100644 smart-admin-web/src/App.vue delete mode 100644 smart-admin-web/src/api/data-scope.js delete mode 100644 smart-admin-web/src/api/department.js delete mode 100644 smart-admin-web/src/api/email.js delete mode 100644 smart-admin-web/src/api/employee.js delete mode 100644 smart-admin-web/src/api/file.js delete mode 100644 smart-admin-web/src/api/heart-beat.js delete mode 100644 smart-admin-web/src/api/login.js delete mode 100644 smart-admin-web/src/api/notice.js delete mode 100644 smart-admin-web/src/api/online-user.js delete mode 100644 smart-admin-web/src/api/peony.js delete mode 100644 smart-admin-web/src/api/position.js delete mode 100644 smart-admin-web/src/api/privilege.js delete mode 100644 smart-admin-web/src/api/role.js delete mode 100644 smart-admin-web/src/api/smart-reload.js delete mode 100644 smart-admin-web/src/api/system-config.js delete mode 100644 smart-admin-web/src/api/task-manage.js delete mode 100644 smart-admin-web/src/api/user-log.js delete mode 100644 smart-admin-web/src/api/user.js delete mode 100644 smart-admin-web/src/assets/icons/demo.css delete mode 100644 smart-admin-web/src/assets/icons/demo_index.html delete mode 100644 smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/demo.css delete mode 100644 smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/demo_index.html delete mode 100644 smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.css delete mode 100644 smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.eot delete mode 100644 smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.js delete mode 100644 smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.svg delete mode 100644 smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.ttf delete mode 100644 smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.woff delete mode 100644 smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.woff2 delete mode 100644 smart-admin-web/src/assets/icons/iconfont.css delete mode 100644 smart-admin-web/src/assets/icons/iconfont.eot delete mode 100644 smart-admin-web/src/assets/icons/iconfont.js delete mode 100644 smart-admin-web/src/assets/icons/iconfont.svg delete mode 100644 smart-admin-web/src/assets/icons/iconfont.ttf delete mode 100644 smart-admin-web/src/assets/icons/iconfont.woff delete mode 100644 smart-admin-web/src/assets/icons/iconfont.woff2 delete mode 100644 smart-admin-web/src/assets/images/default_icon.png delete mode 100644 smart-admin-web/src/assets/images/error-page/error-401.svg delete mode 100644 smart-admin-web/src/assets/images/error-page/error-404.svg delete mode 100644 smart-admin-web/src/assets/images/error-page/error-500.svg delete mode 100644 smart-admin-web/src/assets/images/icon-qr-qq-wechat.png delete mode 100644 smart-admin-web/src/assets/images/icon-social-bilibili.svg delete mode 100644 smart-admin-web/src/assets/images/icon-social-juejin.svg delete mode 100644 smart-admin-web/src/assets/images/icon-social-twitter.svg delete mode 100644 smart-admin-web/src/assets/images/icon-social-zhihu.svg delete mode 100644 smart-admin-web/src/assets/images/login-alipay.png delete mode 100644 smart-admin-web/src/assets/images/login-bg.jpg delete mode 100644 smart-admin-web/src/assets/images/login-logo.png delete mode 100644 smart-admin-web/src/assets/images/login-sina.png delete mode 100644 smart-admin-web/src/assets/images/login-taobao.png delete mode 100644 smart-admin-web/src/assets/images/login_desc_bg.png delete mode 100644 smart-admin-web/src/assets/images/login_logo.png delete mode 100644 smart-admin-web/src/assets/images/logo.png delete mode 100644 smart-admin-web/src/assets/images/logo1.png delete mode 100644 smart-admin-web/src/assets/images/message.png delete mode 100644 smart-admin-web/src/assets/images/shadow.png delete mode 100644 smart-admin-web/src/assets/images/slider/sub_slider_active.png delete mode 100644 smart-admin-web/src/assets/images/slider/sub_slider_default.png delete mode 100644 smart-admin-web/src/assets/style/lib/animate.css delete mode 100644 smart-admin-web/src/components/active-plate/active-plate.vue delete mode 100644 smart-admin-web/src/components/charts/bar.vue delete mode 100644 smart-admin-web/src/components/charts/index.js delete mode 100644 smart-admin-web/src/components/charts/pie.vue delete mode 100644 smart-admin-web/src/components/charts/theme.json delete mode 100644 smart-admin-web/src/components/common-icon/common-icon.vue delete mode 100644 smart-admin-web/src/components/common-icon/index.js delete mode 100644 smart-admin-web/src/components/count-to/count-to.vue delete mode 100644 smart-admin-web/src/components/count-to/index.js delete mode 100644 smart-admin-web/src/components/count-to/index.less delete mode 100644 smart-admin-web/src/components/editor/editor.vue delete mode 100644 smart-admin-web/src/components/editor/index.js delete mode 100644 smart-admin-web/src/components/employee/employee-selector.vue delete mode 100644 smart-admin-web/src/components/icons/icons.vue delete mode 100644 smart-admin-web/src/components/icons/index.js delete mode 100644 smart-admin-web/src/components/main/components/a-back-top/index.js delete mode 100644 smart-admin-web/src/components/main/components/a-back-top/index.vue delete mode 100644 smart-admin-web/src/components/main/components/fullscreen/fullscreen.vue delete mode 100644 smart-admin-web/src/components/main/components/fullscreen/index.js delete mode 100644 smart-admin-web/src/components/main/components/header-bar/custom-bread-crumb/custom-bread-crumb.less delete mode 100644 smart-admin-web/src/components/main/components/header-bar/custom-bread-crumb/custom-bread-crumb.vue delete mode 100644 smart-admin-web/src/components/main/components/header-bar/custom-bread-crumb/index.js delete mode 100644 smart-admin-web/src/components/main/components/header-bar/header-bar.less delete mode 100644 smart-admin-web/src/components/main/components/header-bar/header-bar.vue delete mode 100644 smart-admin-web/src/components/main/components/header-bar/index.js delete mode 100644 smart-admin-web/src/components/main/components/header-bar/sider-trigger/index.js delete mode 100644 smart-admin-web/src/components/main/components/header-bar/sider-trigger/sider-trigger.less delete mode 100644 smart-admin-web/src/components/main/components/header-bar/sider-trigger/sider-trigger.vue delete mode 100644 smart-admin-web/src/components/main/components/language/index.js delete mode 100644 smart-admin-web/src/components/main/components/language/language.vue delete mode 100644 smart-admin-web/src/components/main/components/notice/notice.vue delete mode 100644 smart-admin-web/src/components/main/components/side-menu/collapsed-menu.vue delete mode 100644 smart-admin-web/src/components/main/components/side-menu/index.js delete mode 100644 smart-admin-web/src/components/main/components/side-menu/item-mixin.js delete mode 100644 smart-admin-web/src/components/main/components/side-menu/mixin.js delete mode 100644 smart-admin-web/src/components/main/components/side-menu/side-menu-item.vue delete mode 100644 smart-admin-web/src/components/main/components/side-menu/side-menu.less delete mode 100644 smart-admin-web/src/components/main/components/side-menu/side-menu.vue delete mode 100644 smart-admin-web/src/components/main/components/tags-nav/index.js delete mode 100644 smart-admin-web/src/components/main/components/tags-nav/tags-nav.less delete mode 100644 smart-admin-web/src/components/main/components/tags-nav/tags-nav.vue delete mode 100644 smart-admin-web/src/components/main/components/user/index.js delete mode 100644 smart-admin-web/src/components/main/components/user/user.less delete mode 100644 smart-admin-web/src/components/main/components/user/user.vue delete mode 100644 smart-admin-web/src/components/main/index.js delete mode 100644 smart-admin-web/src/components/main/main.less delete mode 100644 smart-admin-web/src/components/main/main.vue delete mode 100644 smart-admin-web/src/components/smart-admin-ad/ad.vue delete mode 100644 smart-admin-web/src/components/smart-admin-ad/index.js delete mode 100644 smart-admin-web/src/components/tables/edit.vue delete mode 100644 smart-admin-web/src/components/tables/handle-btns.js delete mode 100644 smart-admin-web/src/components/tables/index.js delete mode 100644 smart-admin-web/src/components/tables/index.less delete mode 100644 smart-admin-web/src/components/tables/tables.vue delete mode 100644 smart-admin-web/src/config/index.js delete mode 100644 smart-admin-web/src/constants/file.js delete mode 100644 smart-admin-web/src/constants/index.js delete mode 100644 smart-admin-web/src/constants/login.js delete mode 100644 smart-admin-web/src/constants/notice.js delete mode 100644 smart-admin-web/src/constants/privilege.js delete mode 100644 smart-admin-web/src/constants/table-page.js delete mode 100644 smart-admin-web/src/directives/directives.js delete mode 100644 smart-admin-web/src/directives/index.js delete mode 100644 smart-admin-web/src/directives/module/clipboard.js delete mode 100644 smart-admin-web/src/directives/module/draggable.js delete mode 100644 smart-admin-web/src/directives/module/privilege.js delete mode 100644 smart-admin-web/src/lib/cookie.js delete mode 100644 smart-admin-web/src/lib/http.js delete mode 100644 smart-admin-web/src/lib/local.js delete mode 100644 smart-admin-web/src/lib/menu-func.js delete mode 100644 smart-admin-web/src/lib/printPlugs.js delete mode 100644 smart-admin-web/src/lib/render-dom.js delete mode 100644 smart-admin-web/src/lib/table-action.js delete mode 100644 smart-admin-web/src/lib/util.js delete mode 100644 smart-admin-web/src/locale/index.js delete mode 100644 smart-admin-web/src/locale/lang/en-US.js delete mode 100644 smart-admin-web/src/locale/lang/zh-CN.js delete mode 100644 smart-admin-web/src/locale/lang/zh-TW.js delete mode 100644 smart-admin-web/src/main.js delete mode 100644 smart-admin-web/src/main.less delete mode 100644 smart-admin-web/src/plugins/error-store/index.js delete mode 100644 smart-admin-web/src/plugins/index.js delete mode 100644 smart-admin-web/src/router/before-close.js delete mode 100644 smart-admin-web/src/router/index.js delete mode 100644 smart-admin-web/src/router/module/business/email.js delete mode 100644 smart-admin-web/src/router/module/business/index.js delete mode 100644 smart-admin-web/src/router/module/business/keep-alive.js delete mode 100644 smart-admin-web/src/router/module/business/notice.js delete mode 100644 smart-admin-web/src/router/module/business/peony.js delete mode 100644 smart-admin-web/src/router/module/business/three-router.js delete mode 100644 smart-admin-web/src/router/module/error.js delete mode 100644 smart-admin-web/src/router/module/home.js delete mode 100644 smart-admin-web/src/router/module/support/api-doc.js delete mode 100644 smart-admin-web/src/router/module/support/heart-beat.js delete mode 100644 smart-admin-web/src/router/module/support/index.js delete mode 100644 smart-admin-web/src/router/module/support/monitor.js delete mode 100644 smart-admin-web/src/router/module/support/reload.js delete mode 100644 smart-admin-web/src/router/module/support/task.js delete mode 100644 smart-admin-web/src/router/module/system/employee.js delete mode 100644 smart-admin-web/src/router/module/system/file.js delete mode 100644 smart-admin-web/src/router/module/system/index.js delete mode 100644 smart-admin-web/src/router/module/system/system-setting.js delete mode 100644 smart-admin-web/src/router/module/system/user-log.js delete mode 100644 smart-admin-web/src/router/routers.js delete mode 100644 smart-admin-web/src/store/index.js delete mode 100644 smart-admin-web/src/store/module/app.js delete mode 100644 smart-admin-web/src/store/module/notice.js delete mode 100644 smart-admin-web/src/store/module/user.js delete mode 100644 smart-admin-web/src/themes/ReadMe.md delete mode 100644 smart-admin-web/src/themes/index.less delete mode 100644 smart-admin-web/src/views/business/email/email-list.vue delete mode 100644 smart-admin-web/src/views/business/email/send-mail.vue delete mode 100644 smart-admin-web/src/views/business/keep-alive/add-content.vue delete mode 100644 smart-admin-web/src/views/business/keep-alive/content-list.vue delete mode 100644 smart-admin-web/src/views/business/notice/notice-detail.vue delete mode 100644 smart-admin-web/src/views/business/notice/notice-list.vue delete mode 100644 smart-admin-web/src/views/business/notice/person-notice.vue delete mode 100644 smart-admin-web/src/views/business/peony/components/peony-list-form.vue delete mode 100644 smart-admin-web/src/views/business/peony/peony-list.vue delete mode 100644 smart-admin-web/src/views/business/three-level-router/three-level-router-view.vue delete mode 100644 smart-admin-web/src/views/error-page/401.vue delete mode 100644 smart-admin-web/src/views/error-page/404.vue delete mode 100644 smart-admin-web/src/views/error-page/500.vue delete mode 100644 smart-admin-web/src/views/error-page/back-btn-group.vue delete mode 100644 smart-admin-web/src/views/error-page/error-content.vue delete mode 100644 smart-admin-web/src/views/error-page/error.less delete mode 100644 smart-admin-web/src/views/home/components/card.vue delete mode 100644 smart-admin-web/src/views/home/components/chart-bar.vue delete mode 100644 smart-admin-web/src/views/home/components/chart-funnel.vue delete mode 100644 smart-admin-web/src/views/home/components/chart-gauge.vue delete mode 100644 smart-admin-web/src/views/home/components/chart-line.vue delete mode 100644 smart-admin-web/src/views/home/components/chart-pie.vue delete mode 100644 smart-admin-web/src/views/home/components/home-circle.vue delete mode 100644 smart-admin-web/src/views/home/components/home-progress.vue delete mode 100644 smart-admin-web/src/views/home/components/theme.json delete mode 100644 smart-admin-web/src/views/home/home.vue delete mode 100644 smart-admin-web/src/views/home/index.js delete mode 100644 smart-admin-web/src/views/login/canvas.js delete mode 100644 smart-admin-web/src/views/login/components/login-form.vue delete mode 100644 smart-admin-web/src/views/login/login.less delete mode 100644 smart-admin-web/src/views/login/login.vue delete mode 100644 smart-admin-web/src/views/support/api-doc/swagger.vue delete mode 100644 smart-admin-web/src/views/support/heart-beat/heart-beat-list.vue delete mode 100644 smart-admin-web/src/views/support/monitor/online-user.vue delete mode 100644 smart-admin-web/src/views/support/monitor/sql.vue delete mode 100644 smart-admin-web/src/views/support/reload/smart-reload/smart-reload-list.vue delete mode 100644 smart-admin-web/src/views/support/task/task-list.vue delete mode 100644 smart-admin-web/src/views/system/employee/components/department-employee-tree-item/department-employee-tree-item.vue delete mode 100644 smart-admin-web/src/views/system/employee/components/department-employee-tree/department-employee-tree.vue delete mode 100644 smart-admin-web/src/views/system/employee/position/position-list.vue delete mode 100644 smart-admin-web/src/views/system/employee/role-employee/components/employee-table-add/employee-table-add.vue delete mode 100644 smart-admin-web/src/views/system/employee/role-employee/components/employee-table-detail/employee-table-detail.vue delete mode 100644 smart-admin-web/src/views/system/employee/role-employee/components/employee-table/employee-table.vue delete mode 100644 smart-admin-web/src/views/system/employee/role-employee/role-employee-manage.vue delete mode 100644 smart-admin-web/src/views/system/employee/role/components/role-data-scope/role-data-scope.vue delete mode 100644 smart-admin-web/src/views/system/employee/role/components/role-list/role-list.vue delete mode 100644 smart-admin-web/src/views/system/employee/role/components/role-tree/role-tree.vue delete mode 100644 smart-admin-web/src/views/system/employee/role/role-manage.vue delete mode 100644 smart-admin-web/src/views/system/file/file-list.vue delete mode 100644 smart-admin-web/src/views/system/system-setting/system-config/system-config.vue delete mode 100644 smart-admin-web/src/views/system/system-setting/system-privilege/components/privilege-form.vue delete mode 100644 smart-admin-web/src/views/system/system-setting/system-privilege/system-privilege.vue delete mode 100644 smart-admin-web/src/views/system/user-log/user-login-log.vue delete mode 100644 smart-admin-web/src/views/system/user-log/user-operate-log.vue delete mode 100644 smart-admin-web/src/views/three-router/three-content.vue delete mode 100644 smart-admin-web/tests/e2e/.eslintrc delete mode 100644 smart-admin-web/tests/e2e/plugins/index.js delete mode 100644 smart-admin-web/tests/e2e/specs/test.js delete mode 100644 smart-admin-web/tests/e2e/support/commands.js delete mode 100644 smart-admin-web/tests/e2e/support/index.js delete mode 100644 smart-admin-web/tests/unit/.eslintrc.js delete mode 100644 smart-admin-web/tests/unit/HelloWorld.spec.js delete mode 100644 smart-admin-web/vscode/settings.json delete mode 100644 smart-admin-web/vue.config.js create mode 100644 smart_admin_v2.sql rename {快速部署 => 快速启动}/README.md (100%) diff --git a/smart-admin-api/sa-admin/pom.xml b/smart-admin-api/sa-admin/pom.xml new file mode 100644 index 00000000..65a66035 --- /dev/null +++ b/smart-admin-api/sa-admin/pom.xml @@ -0,0 +1,36 @@ + + 4.0.0 + + net.1024lab + sa-parent + 1.0.0 + + + sa-admin + 1.0.0 + jar + + sa-admin + sa-admin project + + + + + net.1024lab + sa-common + ${project.version} + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/SmartAdminApplication.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/SmartAdminApplication.java similarity index 51% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/SmartAdminApplication.java rename to smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/SmartAdminApplication.java index b22d0670..744b6357 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/SmartAdminApplication.java +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/SmartAdminApplication.java @@ -1,26 +1,29 @@ -package net.lab1024.smartadmin; +package net.lab1024.sa.admin; +import org.apache.ibatis.annotations.Mapper; +import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.scheduling.annotation.EnableScheduling; /** - * [ admin 项目启动类 ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 + * SmartAdmin 项目启动类 * + * @Author 1024创新实验室-主任:卓大 + * @Date 2022-08-29 21:00:58 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 */ -@SpringBootApplication(scanBasePackages = {"net.lab1024.smartadmin", "cn.afterturn.easypoi"}) +@SpringBootApplication @EnableCaching @EnableScheduling @EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true) +@ComponentScan(basePackages = {"net.lab1024.sa"}) +@MapperScan(value = "net.lab1024.sa", annotationClass = Mapper.class) public class SmartAdminApplication { public static void main(String[] args) { diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/common/AdminBaseController.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/common/AdminBaseController.java new file mode 100644 index 00000000..f54bbd51 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/common/AdminBaseController.java @@ -0,0 +1,13 @@ +package net.lab1024.sa.admin.common; + +/** + * admin 相关的父类 + * + * @Author 1024创新实验室-主任:卓大 + * @Date 2022-06-10 21:00:58 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +public class AdminBaseController { +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/config/OperateLogAspectConfig.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/config/OperateLogAspectConfig.java new file mode 100644 index 00000000..214502e0 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/config/OperateLogAspectConfig.java @@ -0,0 +1,34 @@ +package net.lab1024.sa.admin.config; + +import net.lab1024.sa.common.common.domain.RequestUser; +import net.lab1024.sa.common.common.util.SmartRequestUtil; +import net.lab1024.sa.common.module.support.operatelog.core.OperateLogAspect; +import net.lab1024.sa.common.module.support.operatelog.core.OperateLogConfig; +import org.springframework.context.annotation.Configuration; + +import javax.servlet.http.HttpServletRequest; + +/** + * 操作日志切面 配置 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022-05-30 21:22:12 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Configuration +public class OperateLogAspectConfig extends OperateLogAspect{ + + /** + * 配置信息 + * @return + */ + @Override + public OperateLogConfig getOperateLogConfig() { + OperateLogConfig config = OperateLogConfig.builder().corePoolSize(4).queueCapacity(1000).build(); + return config; + } + + +} \ No newline at end of file diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/config/SecurityConfig.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/config/SecurityConfig.java new file mode 100644 index 00000000..8f12ba27 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/config/SecurityConfig.java @@ -0,0 +1,40 @@ +package net.lab1024.sa.admin.config; + +import net.lab1024.sa.admin.module.system.login.service.LoginService; +import net.lab1024.sa.common.common.security.AbstractSecurityConfig; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.core.userdetails.UserDetails; + +import javax.servlet.http.HttpServletRequest; +import java.util.function.BiFunction; + +/** + * 权限配置 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022-05-30 21:22:12 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Configuration +public class SecurityConfig extends AbstractSecurityConfig { + /** + * 获取TOKEN 解析类 + */ + @Autowired + private LoginService loginService; + + @Override + protected BiFunction userFunction() { + return (token, request) -> loginService.getLoginUserDetail(token, request); + } + + @Override + protected String[] getAuthenticatedUrlPatterns() { + return new String[]{"/**"}; + } + + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/config/SecurityMethodConfig.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/config/SecurityMethodConfig.java new file mode 100644 index 00000000..772b2d5d --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/config/SecurityMethodConfig.java @@ -0,0 +1,50 @@ +package net.lab1024.sa.admin.config; + +import net.lab1024.sa.admin.module.system.login.domain.LoginEmployeeDetail; +import net.lab1024.sa.common.common.annoation.SaAuth; +import net.lab1024.sa.common.common.security.SecurityMethodSource; +import net.lab1024.sa.common.common.security.SecurityPermissionCheckService; +import org.springframework.context.annotation.Bean; +import org.springframework.security.access.expression.method.ExpressionBasedAnnotationAttributeFactory; +import org.springframework.security.access.method.MethodSecurityMetadataSource; +import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +import org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration; +import org.springframework.security.core.Authentication; + +/** + * 1、以类名加方法名为权限字符串的校验模式
+ * 2、重写MethodSecurityMetadataSource将优化security配置,只需在方法上加上@saAuth注解,方法上就会存在权限(权限字符串为类名加方法名),而无需另外手动设置,减轻后端开发成本
+ * 3、security将不再依据权限字符串进行权限控制,
+ * 4、security将依据对应权限字符串下的接口权限进行控制
+ * 5、采用此配置原@PreAuthorize依然有效
+ * 6、如若无需此配置,需将@EnableGlobalMethodSecurity注解添加至SecurityConfig类上 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2021-08-31 0:01 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@EnableGlobalMethodSecurity(prePostEnabled = true) +public class SecurityMethodConfig extends GlobalMethodSecurityConfiguration { + + @Bean(SaAuth.saAuth) + public SecurityPermissionCheckService securityPermissionCheckService() { + return new SecurityPermissionCheckService() { + @Override + public boolean checkPermission(Authentication authentication, String permission) { + LoginEmployeeDetail loginEmployeeDetail = (LoginEmployeeDetail) authentication.getPrincipal(); + if (loginEmployeeDetail.getAdministratorFlag()) { + return true; + } + return super.permissionJudge(loginEmployeeDetail, permission); + } + }; + } + + @Override + public MethodSecurityMetadataSource customMethodSecurityMetadataSource() { + ExpressionBasedAnnotationAttributeFactory attributeFactory = new ExpressionBasedAnnotationAttributeFactory(this.getExpressionHandler()); + return new SecurityMethodSource(attributeFactory, SaAuth.saAuth); + } +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminCacheConst.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminCacheConst.java new file mode 100644 index 00000000..ebacfdf0 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminCacheConst.java @@ -0,0 +1,57 @@ +package net.lab1024.sa.admin.constant; + +import net.lab1024.sa.common.constant.CacheKeyConst; + +/** + * 缓存 key + * + * @Author 1024创新实验室-主任:卓大 + * @Date 2022-01-07 18:59:22 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +public class AdminCacheConst extends CacheKeyConst { + + public static class Department { + + /** + * 部门列表 + */ + public static final String DEPARTMENT_LIST_CACHE = "department_list_cache"; + + /** + * 部门map + */ + public static final String DEPARTMENT_MAP_CACHE = "department_map_cache"; + + /** + * 部门树 + */ + public static final String DEPARTMENT_TREE_CACHE = "department_tree_cache"; + + /** + * 某个部门以及下级的id列表 + */ + public static final String DEPARTMENT_SELF_CHILDREN_CACHE = "department_self_children_cache"; + + /** + * 部门路径 缓存 + */ + public static final String DEPARTMENT_PATH_CACHE = "department_path_cache"; + + } + + /** + * 分类相关缓存 + */ + public static class CATEGORY { + + public static final String CATEGORY_ENTITY = "category_cache"; + + public static final String CATEGORY_SUB = "category_sub_cache"; + + public static final String CATEGORY_TREE = "category_tree_cache"; + } + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminRedisKeyConst.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminRedisKeyConst.java new file mode 100644 index 00000000..301c73a8 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminRedisKeyConst.java @@ -0,0 +1,17 @@ +package net.lab1024.sa.admin.constant; + +import net.lab1024.sa.common.constant.RedisKeyConst; + +/** + * redis key 常量类 + * + * @Author 1024创新实验室-主任:卓大 + * @Date 2022-01-07 18:59:22 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +public class AdminRedisKeyConst extends RedisKeyConst { + + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminSwaggerTagConst.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminSwaggerTagConst.java new file mode 100644 index 00000000..a037fa66 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminSwaggerTagConst.java @@ -0,0 +1,55 @@ +package net.lab1024.sa.admin.constant; + +import net.lab1024.sa.common.constant.SwaggerTagConst; + +/** + * swagger + * + * @Author 1024创新实验室:罗伊 + * @Date 2022-01-07 18:59:22 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +public class AdminSwaggerTagConst extends SwaggerTagConst { + + public static class Business { + public static final String MANAGER_CATEGORY = "ERP进销存-分类管理"; + + public static final String MANAGER_GOODS = "ERP进销存-商品管理"; + + public static final String OA_BANK = "OA办公-银行卡信息"; + + public static final String OA_ENTERPRISE = "OA办公-企业"; + + public static final String OA_INVOICE = "OA办公-发票信息"; + + public static final String OA_NOTICE = "OA办公-通知公告"; + } + + + public static class System { + + public static final String SYSTEM_LOGIN = "系统-员工登录"; + + public static final String SYSTEM_EMPLOYEE = "系统-员工管理"; + + public static final String SYSTEM_DEPARTMENT = "系统-部门管理"; + + public static final String SYSTEM_MENU = "系统-菜单"; + + public static final String SYSTEM_DATA_SCOPE = "系统-系统-数据范围"; + + public static final String SYSTEM_ROLE = "系统-角色"; + + public static final String SYSTEM_ROLE_DATA_SCOPE = "系统-角色-数据范围"; + + public static final String SYSTEM_ROLE_EMPLOYEE = "系统-角色-员工"; + + public static final String SYSTEM_ROLE_MENU = "系统-角色-菜单"; + + public static final String SYSTEM_DATA_TRACER = "系统-"; + } + + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/listener/AdminStartupRunner.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/listener/AdminStartupRunner.java new file mode 100644 index 00000000..cf8d0490 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/listener/AdminStartupRunner.java @@ -0,0 +1,40 @@ +package net.lab1024.sa.admin.listener; + +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.common.code.ErrorCodeRegister; +import net.lab1024.sa.common.config.ScheduleConfig; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.CommandLineRunner; +import org.springframework.stereotype.Component; + +/** + * admin 应用启动加载 + * + * @Author 1024创新实验室-主任:卓大 + * @Date 2021-08-26 18:46:32 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Slf4j +@Component +public class AdminStartupRunner implements CommandLineRunner { + + @Autowired + private ScheduleConfig scheduleConfig; + + @Override + public void run(String... args) { + + // 初始化状态码 + int codeCount = ErrorCodeRegister.initialize(); + + //TODO <卓大> :根据实际情况来决定是否开启定时任务 + String destroySchedules = "Spring 定时任务 @Schedule 已启动"; +// destroySchedules = scheduleConfig.destroy(); + + log.info("\n ---------------【1024创新实验室 温馨提示:】 ErrorCode 共计完成初始化: {}个!---------------" + + "\n ---------------【1024创新实验室 温馨提示:】 {}---------------\n", codeCount, destroySchedules); + + } +} \ No newline at end of file diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/constant/CategoryTypeEnum.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/constant/CategoryTypeEnum.java new file mode 100644 index 00000000..2df51fe3 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/constant/CategoryTypeEnum.java @@ -0,0 +1,36 @@ +package net.lab1024.sa.admin.module.business.category.constant; + + +import lombok.AllArgsConstructor; +import lombok.Getter; +import net.lab1024.sa.common.common.enumeration.BaseEnum; + +/** + * 分类类型 枚举 + * + * @Author 1024创新实验室: 胡克 + * @Date 2021/08/05 21:26:58 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@AllArgsConstructor +@Getter +public enum CategoryTypeEnum implements BaseEnum { + + /** + * 1 商品 + */ + GOODS(1, "商品"), + + /** + * 2 自定义 + */ + CUSTOM(2, "自定义"), + + ; + + private final Integer value; + + private final String desc; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/controller/CategoryController.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/controller/CategoryController.java new file mode 100644 index 00000000..682132af --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/controller/CategoryController.java @@ -0,0 +1,68 @@ +package net.lab1024.sa.admin.module.business.category.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.admin.common.AdminBaseController; +import net.lab1024.sa.admin.constant.AdminSwaggerTagConst; +import net.lab1024.sa.admin.module.business.category.service.CategoryService; +import net.lab1024.sa.admin.module.business.category.domain.form.CategoryAddForm; +import net.lab1024.sa.admin.module.business.category.domain.form.CategoryTreeQueryForm; +import net.lab1024.sa.admin.module.business.category.domain.form.CategoryUpdateForm; +import net.lab1024.sa.admin.module.business.category.domain.vo.CategoryTreeVO; +import net.lab1024.sa.admin.module.business.category.domain.vo.CategoryVO; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.module.support.operatelog.annoation.OperateLog; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 类目 + * + * @Author 1024创新实验室: 胡克 + * @Date 2021/08/05 21:26:58 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@OperateLog +@RestController +@Api(tags = AdminSwaggerTagConst.Business.MANAGER_CATEGORY) +public class CategoryController extends AdminBaseController { + + @Autowired + private CategoryService categoryService; + + @ApiOperation("添加类目 @author 胡克") + @PostMapping("/category/add") + public ResponseDTO add(@RequestBody @Valid CategoryAddForm addForm) { + return categoryService.add(addForm); + } + + @ApiOperation("更新类目 @author 胡克") + @PostMapping("/category/update") + public ResponseDTO update(@RequestBody @Valid CategoryUpdateForm updateForm) { + return categoryService.update(updateForm); + } + + @ApiOperation("查询类目详情 @author 胡克") + @GetMapping("/category/{categoryId}") + public ResponseDTO queryDetail(@PathVariable Long categoryId) { + return categoryService.queryDetail(categoryId); + } + + @ApiOperation("查询类目层级树 @author 胡克") + @PostMapping("/category/tree") + public ResponseDTO> queryTree(@RequestBody @Valid CategoryTreeQueryForm queryForm) { + return categoryService.queryTree(queryForm); + } + + @ApiOperation("删除类目 @author 胡克") + @GetMapping("/category/delete/{categoryId}") + public ResponseDTO delete(@PathVariable Long categoryId) { + return categoryService.delete(categoryId); + } +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/dao/CategoryDao.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/dao/CategoryDao.java new file mode 100644 index 00000000..c9ac00fd --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/dao/CategoryDao.java @@ -0,0 +1,72 @@ +package net.lab1024.sa.admin.module.business.category.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import net.lab1024.sa.admin.module.business.category.constant.CategoryTypeEnum; +import net.lab1024.sa.admin.module.business.category.domain.entity.CategoryEntity; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 类目 dao + * + * @Author 1024创新实验室: 胡克 + * @Date 2021/08/05 21:26:58 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Component +@Mapper +public interface CategoryDao extends BaseMapper { + + /** + * 根据父级id 类型 查询子类 + * + * @param parentIdList + * @param deletedFlag + * @return + */ + List queryByParentId(@Param("parentIdList") List parentIdList, + @Param("deletedFlag") Boolean deletedFlag); + + /** + * 根据父级id 类型 查询子类 + * + * @param parentIdList + * @param categoryType {@link CategoryTypeEnum} + * @param deletedFlag + * @return + */ + List queryByParentIdAndType(@Param("parentIdList") List parentIdList, + @Param("categoryType") Integer categoryType, + @Param("deletedFlag") Boolean deletedFlag); + + /** + * 某个类型的所有 + * @param categoryType + * @param deletedFlag + * @return + */ + List queryByType(@Param("categoryType") Integer categoryType, + @Param("deletedFlag") Boolean deletedFlag); + + /** + * 根据类型和id查询 + * @param categoryType + * @param categoryId + * @return + */ + CategoryEntity selectByTypeAndId(@Param("categoryType") Integer categoryType, @Param("categoryId") Long categoryId); + + /** + * 查看类目 具体条件 看sql + * + * @param entity + * @return + */ + CategoryEntity selectOne(CategoryEntity entity); + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/dto/CategoryBaseDTO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/dto/CategoryBaseDTO.java new file mode 100644 index 00000000..5381ab9c --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/dto/CategoryBaseDTO.java @@ -0,0 +1,44 @@ +package net.lab1024.sa.admin.module.business.category.domain.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.admin.module.business.category.constant.CategoryTypeEnum; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; +import net.lab1024.sa.common.common.validator.enumeration.CheckEnum; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 类目 基础属性 DTO 类 + * + * @author 胡克 + * @date 2021/1/20 16:17 + */ +@Data +public class CategoryBaseDTO { + + @ApiModelProperty(value = "类目名称", required = true) + @NotBlank(message = "类目名称不能为空") + @Length(max = 20, message = "类目名称最多20字符") + private String categoryName; + + @ApiModelPropertyEnum(desc = "分类类型", value = CategoryTypeEnum.class) + @CheckEnum(value = CategoryTypeEnum.class, required = true, message = "分类错误") + private Integer categoryType; + + @ApiModelProperty("父级类目id|可选") + private Long parentId; + + @ApiModelProperty("排序|可选") + private Integer sort; + + @ApiModelProperty("备注|可选") + @Length(max = 200, message = "备注最多200字符") + private String remark; + + @ApiModelProperty("禁用状态") + @NotNull(message = "禁用状态不能为空") + private Boolean disabledFlag; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/dto/CategorySimpleDTO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/dto/CategorySimpleDTO.java new file mode 100644 index 00000000..7f25e7b2 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/dto/CategorySimpleDTO.java @@ -0,0 +1,26 @@ +package net.lab1024.sa.admin.module.business.category.domain.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 类目 基础属性 DTO 类 + * + * @author 胡克 + * @date 2021/1/20 16:17 + */ +@Data +public class CategorySimpleDTO { + + @ApiModelProperty("类目id") + private Long categoryId; + + @ApiModelProperty("类目名称") + private String categoryName; + + @ApiModelProperty("类目层级全称") + private String categoryFullName; + + @ApiModelProperty("父级id") + private Long parentId; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/entity/CategoryEntity.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/entity/CategoryEntity.java new file mode 100644 index 00000000..f8ee74af --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/entity/CategoryEntity.java @@ -0,0 +1,67 @@ +package net.lab1024.sa.admin.module.business.category.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import net.lab1024.sa.admin.module.business.category.constant.CategoryTypeEnum; + +import java.time.LocalDateTime; + +/** + * 类目 实体类 + * + * @Author 1024创新实验室: 胡克 + * @Date 2021/08/05 21:26:58 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +@TableName("t_category") +public class CategoryEntity { + + @TableId(type = IdType.AUTO) + private Long categoryId; + + /** + * 类目名称 + */ + private String categoryName; + + /** + * 类目 类型 + * + * @see CategoryTypeEnum + */ + private Integer categoryType; + + /** + * 父级类目id + */ + private Long parentId; + + /** + * 是否禁用 + */ + private Boolean disabledFlag; + + /** + * 排序 + */ + private Integer sort; + + /** + * 删除状态 + */ + private Boolean deletedFlag; + + /** + * 备注 + */ + private String remark; + + private LocalDateTime updateTime; + + private LocalDateTime createTime; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/form/CategoryAddForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/form/CategoryAddForm.java new file mode 100644 index 00000000..29a37810 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/form/CategoryAddForm.java @@ -0,0 +1,49 @@ +package net.lab1024.sa.admin.module.business.category.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.admin.module.business.category.constant.CategoryTypeEnum; +import net.lab1024.sa.admin.module.business.category.domain.dto.CategoryBaseDTO; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; +import net.lab1024.sa.common.common.validator.enumeration.CheckEnum; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 类目 添加 + * + * @Author 1024创新实验室: 胡克 + * @Date 2021/08/05 21:26:58 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class CategoryAddForm { + + @ApiModelProperty(value = "类目名称", required = true) + @NotBlank(message = "类目名称不能为空") + @Length(max = 20, message = "类目名称最多20字符") + private String categoryName; + + @ApiModelPropertyEnum(desc = "分类类型", value = CategoryTypeEnum.class) + @CheckEnum(value = CategoryTypeEnum.class, required = true, message = "分类错误") + private Integer categoryType; + + @ApiModelProperty("父级类目id|可选") + private Long parentId; + + @ApiModelProperty("排序|可选") + private Integer sort; + + @ApiModelProperty("备注|可选") + @Length(max = 200, message = "备注最多200字符") + private String remark; + + @ApiModelProperty("禁用状态") + @NotNull(message = "禁用状态不能为空") + private Boolean disabledFlag; + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/form/CategoryTreeQueryForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/form/CategoryTreeQueryForm.java new file mode 100644 index 00000000..907bca77 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/form/CategoryTreeQueryForm.java @@ -0,0 +1,25 @@ +package net.lab1024.sa.admin.module.business.category.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.admin.module.business.category.constant.CategoryTypeEnum; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; + +/** + * 类目 层级树查询 + * + * @Author 1024创新实验室: 胡克 + * @Date 2021/08/05 21:26:58 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class CategoryTreeQueryForm { + + @ApiModelPropertyEnum(desc = "分类类型|可选", value = CategoryTypeEnum.class) + private Integer categoryType; + + @ApiModelProperty("父级类目id|可选") + private Long parentId; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/form/CategoryUpdateForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/form/CategoryUpdateForm.java new file mode 100644 index 00000000..959c7027 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/form/CategoryUpdateForm.java @@ -0,0 +1,24 @@ +package net.lab1024.sa.admin.module.business.category.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.admin.module.business.category.domain.dto.CategoryBaseDTO; + +import javax.validation.constraints.NotNull; + +/** + * 类目 更新 + * + * @Author 1024创新实验室: 胡克 + * @Date 2021/08/05 21:26:58 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class CategoryUpdateForm extends CategoryAddForm { + + @ApiModelProperty("类目id") + @NotNull(message = "类目id不能为空") + private Long categoryId; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/vo/CategoryTreeVO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/vo/CategoryTreeVO.java new file mode 100644 index 00000000..db3ecda3 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/vo/CategoryTreeVO.java @@ -0,0 +1,40 @@ +package net.lab1024.sa.admin.module.business.category.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * 类目 层级树 vo + * + * @Author 1024创新实验室: 胡克 + * @Date 2021/08/05 21:26:58 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class CategoryTreeVO { + + @ApiModelProperty("类目id") + private Long categoryId; + + @ApiModelProperty("类目名称") + private String categoryName; + + @ApiModelProperty("类目层级全称") + private String categoryFullName; + + @ApiModelProperty("父级id") + private Long parentId; + + @ApiModelProperty("类目id") + private Long value; + + @ApiModelProperty("类目名称") + private String label; + + @ApiModelProperty("子类") + private List children; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/vo/CategoryVO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/vo/CategoryVO.java new file mode 100644 index 00000000..23b71962 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/vo/CategoryVO.java @@ -0,0 +1,51 @@ +package net.lab1024.sa.admin.module.business.category.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.admin.module.business.category.constant.CategoryTypeEnum; +import net.lab1024.sa.admin.module.business.category.domain.dto.CategoryBaseDTO; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; +import net.lab1024.sa.common.common.validator.enumeration.CheckEnum; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.time.LocalDateTime; + +/** + * 类目 + * + * @Author 1024创新实验室: 胡克 + * @Date 2021/08/05 21:26:58 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class CategoryVO { + + @ApiModelProperty(value = "类目名称", required = true) + private String categoryName; + + @ApiModelPropertyEnum(desc = "分类类型", value = CategoryTypeEnum.class) + private Integer categoryType; + + @ApiModelProperty("父级类目id|可选") + private Long parentId; + + @ApiModelProperty("排序|可选") + private Integer sort; + + @ApiModelProperty("备注|可选") + private String remark; + + @ApiModelProperty("禁用状态") + private Boolean disabledFlag; + + @ApiModelProperty("类目id") + private Long categoryId; + + private LocalDateTime updateTime; + + private LocalDateTime createTime; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/manager/CategoryCacheManager.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/manager/CategoryCacheManager.java new file mode 100644 index 00000000..819d99dc --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/manager/CategoryCacheManager.java @@ -0,0 +1,120 @@ +package net.lab1024.sa.admin.module.business.category.manager; + +import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.admin.constant.AdminCacheConst; +import net.lab1024.sa.admin.module.business.category.dao.CategoryDao; +import net.lab1024.sa.admin.module.business.category.domain.entity.CategoryEntity; +import net.lab1024.sa.admin.module.business.category.domain.vo.CategoryTreeVO; +import net.lab1024.sa.common.common.constant.StringConst; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 类目 查询 缓存 + * + * @Author 1024创新实验室: 胡克 + * @Date 2021/08/05 21:26:58 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Service +@Slf4j +public class CategoryCacheManager { + + + @Autowired + private CategoryDao categoryDao; + + + /** + * 根据类目id 移除缓存 + */ + @CacheEvict(value = {AdminCacheConst.CATEGORY.CATEGORY_ENTITY, AdminCacheConst.CATEGORY.CATEGORY_SUB, AdminCacheConst.CATEGORY.CATEGORY_TREE}, allEntries = true) + public void removeCache() { + log.info("clear CATEGORY ,CATEGORY_SUB ,CATEGORY_TREE"); + } + + /** + * 查詢类目 + * + * @param categoryId + * @return + */ + @Cacheable(AdminCacheConst.CATEGORY.CATEGORY_ENTITY) + public CategoryEntity queryCategory(Long categoryId) { + return categoryDao.selectById(categoryId); + } + + /** + * 查询类目 子级 + * + * @param categoryId + * @return + */ + @Cacheable(AdminCacheConst.CATEGORY.CATEGORY_SUB) + public List querySubCategory(Long categoryId) { + return categoryDao.queryByParentId(Lists.newArrayList(categoryId), false); + } + + + /** + * 查询类目 层级树 + * 优先查询缓存 + * + * @return + */ + @Cacheable(AdminCacheConst.CATEGORY.CATEGORY_TREE) + public List queryCategoryTree(Long parentId, Integer categoryType) { + List allCategoryEntityList = categoryDao.queryByType(categoryType, false); + + List categoryEntityList = allCategoryEntityList.stream().filter(e -> e.getParentId().equals(parentId)).collect(Collectors.toList()); + List treeList = SmartBeanUtil.copyList(categoryEntityList, CategoryTreeVO.class); + treeList.forEach(e -> { + e.setLabel(e.getCategoryName()); + e.setValue(e.getCategoryId()); + e.setCategoryFullName(e.getCategoryName()); + }); + // 递归设置子类 + this.queryAndSetSubCategory(treeList, allCategoryEntityList); + return treeList; + } + + /** + * 递归查询设置类目子类 + * 从缓存查询子类 + * + * @param treeList + */ + private void queryAndSetSubCategory(List treeList, List allCategoryEntityList) { + if (CollectionUtils.isEmpty(treeList)) { + return; + } + List parentIdList = treeList.stream().map(CategoryTreeVO::getValue).collect(Collectors.toList()); + List categoryEntityList = allCategoryEntityList.stream().filter(e -> parentIdList.contains(e.getParentId())).collect(Collectors.toList()); + Map> categorySubMap = categoryEntityList.stream().collect(Collectors.groupingBy(CategoryEntity::getParentId)); + treeList.forEach(e -> { + List childrenEntityList = categorySubMap.getOrDefault(e.getValue(), Lists.newArrayList()); + List childrenVOList = SmartBeanUtil.copyList(childrenEntityList, CategoryTreeVO.class); + childrenVOList.forEach(item -> { + item.setLabel(item.getCategoryName()); + item.setValue(item.getCategoryId()); + item.setCategoryFullName(e.getCategoryFullName() + StringConst.SEPARATOR_SLASH + item.getCategoryName()); + }); + // 递归查询 + this.queryAndSetSubCategory(childrenVOList, allCategoryEntityList); + e.setChildren(childrenVOList); + }); + } + + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/service/CategoryQueryService.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/service/CategoryQueryService.java new file mode 100644 index 00000000..4f643e66 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/service/CategoryQueryService.java @@ -0,0 +1,214 @@ +package net.lab1024.sa.admin.module.business.category.service; + +import cn.hutool.core.util.StrUtil; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.admin.module.business.category.dao.CategoryDao; +import net.lab1024.sa.admin.module.business.category.domain.entity.CategoryEntity; +import net.lab1024.sa.admin.module.business.category.domain.dto.CategorySimpleDTO; +import net.lab1024.sa.admin.module.business.category.manager.CategoryCacheManager; +import net.lab1024.sa.common.common.constant.StringConst; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 类目 查询 业务类 + * + * @Author 1024创新实验室: 胡克 + * @Date 2021/08/05 21:26:58 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Service +@Slf4j +public class CategoryQueryService { + + private static final Long DEFAULT_CATEGORY_PARENT_ID = 0L; + + @Autowired + private CategoryDao categoryDao; + + @Autowired + private CategoryCacheManager categoryCacheManager; + + /** + * 根据 id 查询未删除的类目 + * + * @param categoryId + * @return 可能 null + */ + public Optional queryCategory(Long categoryId) { + if (null == categoryId) { + return Optional.empty(); + } + CategoryEntity entity = categoryCacheManager.queryCategory(categoryId); + if (null == entity || entity.getDeletedFlag()) { + return Optional.empty(); + } + return Optional.of(entity); + } + + + /** + * 根据 类目id集合 查询未删除的类目集合 + * + * @param categoryIdList + * @return + */ + public Map queryCategoryList(List categoryIdList) { + if (CollectionUtils.isEmpty(categoryIdList)) { + return Collections.emptyMap(); + } + categoryIdList = categoryIdList.stream().distinct().collect(Collectors.toList()); + Map categoryEntityMap = Maps.newHashMap(); + for (Long categoryId : categoryIdList) { + CategoryEntity categoryEntity = categoryCacheManager.queryCategory(categoryId); + if(categoryEntity != null){ + categoryEntityMap.put(categoryId, categoryEntity); + } + } + return categoryEntityMap; + } + + + /** + * 根据类目id 递归查询该id的所有子类id 递归查询 + * 同时存入缓存 + * 注意:查询出来的集合 不包含传递的父类参数 + * + * @param categoryIdList + */ + public List queryCategorySubId(List categoryIdList) { + if (CollectionUtils.isEmpty(categoryIdList)) { + return Collections.emptyList(); + } + //所有子类 + List categoryEntityList = Lists.newArrayList(); + categoryIdList.forEach(e -> { + categoryEntityList.addAll(categoryCacheManager.querySubCategory(e)); + }); + Map> subTypeMap = categoryEntityList.stream().collect(Collectors.groupingBy(CategoryEntity::getCategoryId)); + // 递归查询子类 + categoryIdList = subTypeMap.values().stream().flatMap(Collection::stream).map(CategoryEntity::getCategoryId).distinct().collect(Collectors.toList()); + if (CollectionUtils.isEmpty(categoryIdList)) { + return Lists.newArrayList(); + } + categoryIdList.addAll(this.queryCategorySubId(categoryIdList)); + return categoryIdList; + } + + + /** + * 处理类目名称 + * + * @param categoryIdList + */ + public List queryCategoryName(List categoryIdList) { + if (CollectionUtils.isEmpty(categoryIdList)) { + return null; + } + Map categoryMap = this.queryCategoryList(categoryIdList); + List categoryNameList = Lists.newArrayList(); + categoryIdList.forEach(e -> { + CategoryEntity categoryEntity = categoryMap.get(e); + if (categoryEntity != null) { + categoryNameList.add(categoryMap.get(e).getCategoryName()); + } + }); + return categoryNameList; + } + + /** + * 根据类目id 查询类目名称 + * + * @param categoryId + * @return + */ + public String queryCategoryName(Long categoryId) { + CategoryEntity categoryEntity = categoryCacheManager.queryCategory(categoryId); + if (null == categoryEntity || categoryEntity.getDeletedFlag()) { + return null; + } + return categoryEntity.getCategoryName(); + } + + /** + * 根据类目id 查询类目详情 包含类目全称 如:医考/医师资格/临床执业 + * + * @param categoryId + * @return + */ + public CategorySimpleDTO queryCategoryInfo(Long categoryId) { + CategoryEntity categoryEntity = categoryCacheManager.queryCategory(categoryId); + if (null == categoryEntity || categoryEntity.getDeletedFlag()) { + return null; + } + String fullName = this.queryFullName(categoryId); + // 返回DTO + CategorySimpleDTO categoryDTO = new CategorySimpleDTO(); + categoryDTO.setCategoryId(categoryId); + categoryDTO.setCategoryName(categoryEntity.getCategoryName()); + categoryDTO.setCategoryFullName(fullName); + categoryDTO.setParentId(categoryEntity.getParentId()); + return categoryDTO; + } + + /** + * 递归查询分类和所有父级类目 + * ps:特别注意返回的集合中 包含自己 + * + * @param categoryId + * @return + */ + public List queryCategoryAndParent(Long categoryId) { + List parentCategoryList = Lists.newArrayList(); + CategoryEntity categoryEntity = categoryCacheManager.queryCategory(categoryId); + if (null == categoryEntity || categoryEntity.getDeletedFlag()) { + return parentCategoryList; + } + + // 父级始终放在第一位 + parentCategoryList.add(0, categoryEntity); + Long parentId = categoryEntity.getParentId(); + if (Objects.equals(DEFAULT_CATEGORY_PARENT_ID, parentId)) { + return parentCategoryList; + } + parentCategoryList.addAll(0, this.queryCategoryAndParent(parentId)); + return parentCategoryList; + } + + /** + * 查询 分类全称 如:医考/医师资格/临床执业 + * + * @param categoryId + * @return + */ + public String queryFullName(Long categoryId) { + List parentCategoryList = this.queryCategoryAndParent(categoryId); + // 拼接父级类目名称 斜杠分隔返回 + List nameList = parentCategoryList.stream().map(CategoryEntity::getCategoryName).collect(Collectors.toList()); + return StrUtil.join(StringConst.SEPARATOR_SLASH, nameList); + } + + /** + * 查询 分类全称 如:医考/医师资格/临床执业 + * + * @param categoryIdList + * @return + */ + public Map queryFullName(List categoryIdList) { + if (CollectionUtils.isEmpty(categoryIdList)) { + return Collections.EMPTY_MAP; + } + // 循环内查询的缓存 还ok + return categoryIdList.stream().collect(Collectors.toMap(Function.identity(), this::queryFullName)); + } + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/service/CategoryService.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/service/CategoryService.java new file mode 100644 index 00000000..2dd1ae44 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/service/CategoryService.java @@ -0,0 +1,220 @@ +package net.lab1024.sa.admin.module.business.category.service; + +import com.google.common.collect.Lists; +import net.lab1024.sa.admin.module.business.category.dao.CategoryDao; +import net.lab1024.sa.admin.module.business.category.domain.entity.CategoryEntity; +import net.lab1024.sa.admin.module.business.category.domain.form.CategoryAddForm; +import net.lab1024.sa.admin.module.business.category.domain.form.CategoryTreeQueryForm; +import net.lab1024.sa.admin.module.business.category.domain.form.CategoryUpdateForm; +import net.lab1024.sa.admin.module.business.category.domain.vo.CategoryTreeVO; +import net.lab1024.sa.admin.module.business.category.domain.vo.CategoryVO; +import net.lab1024.sa.admin.module.business.category.manager.CategoryCacheManager; +import net.lab1024.sa.common.common.code.UserErrorCode; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.math.NumberUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Objects; +import java.util.Optional; + +/** + * 类目 + * + * @Author 1024创新实验室: 胡克 + * @Date 2021/08/05 21:26:58 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Service +public class CategoryService { + + @Autowired + private CategoryDao categoryDao; + + @Autowired + private CategoryQueryService categoryQueryService; + + @Autowired + private CategoryCacheManager categoryCacheManager; + + /** + * 添加类目 + * + * @author 胡克 + * @date 2021/1/20 17:17 + */ + public ResponseDTO add(CategoryAddForm addForm) { + // 校验类目 + CategoryEntity categoryEntity = SmartBeanUtil.copy(addForm, CategoryEntity.class); + ResponseDTO res = this.checkCategory(categoryEntity, false); + if (!res.getOk()) { + return res; + } + // 没有父类则使用默认父类 + Long parentId = null == addForm.getParentId() ? NumberUtils.LONG_ZERO : addForm.getParentId(); + categoryEntity.setParentId(parentId); + categoryEntity.setSort(null == addForm.getSort() ? 0 : addForm.getSort()); + categoryEntity.setDeletedFlag(false); + + // 保存数据 + categoryDao.insert(categoryEntity); + + // 更新缓存 + categoryCacheManager.removeCache(); + return ResponseDTO.ok(); + } + + /** + * 更新类目 + * 不能更新父级类目 + * + * @author 胡克 + * @date 2021/1/20 17:17 + */ + public ResponseDTO update(CategoryUpdateForm updateForm) { + // 校验类目 + Long categoryId = updateForm.getCategoryId(); + Optional optional = categoryQueryService.queryCategory(categoryId); + if (!optional.isPresent()) { + return ResponseDTO.error(UserErrorCode.DATA_NOT_EXIST); + } + CategoryEntity categoryEntity = SmartBeanUtil.copy(updateForm, CategoryEntity.class); + + /** + * 不更新类目类型 + * 不更新父类id + */ + Integer categoryType = optional.get().getCategoryType(); + categoryEntity.setCategoryType(categoryType); + categoryEntity.setParentId(optional.get().getParentId()); + + ResponseDTO responseDTO = this.checkCategory(categoryEntity, true); + if (!responseDTO.getOk()) { + return responseDTO; + } + categoryDao.updateById(categoryEntity); + + // 更新缓存 + categoryCacheManager.removeCache(); + return ResponseDTO.ok(); + } + + /** + * 新增/更新 类目时的 校验 + * + * @param categoryEntity + * @param isUpdate + * @return + */ + private ResponseDTO checkCategory(CategoryEntity categoryEntity, boolean isUpdate) { + // 校验父级是否存在 + Long parentId = categoryEntity.getParentId(); + Integer categoryType = categoryEntity.getCategoryType(); + if (null != parentId) { + if (Objects.equals(categoryEntity.getCategoryId(), parentId)) { + return ResponseDTO.userErrorParam("父级类目怎么和自己相同了"); + } + if (!Objects.equals(parentId, NumberUtils.LONG_ZERO)) { + Optional optional = categoryQueryService.queryCategory(parentId); + if (!optional.isPresent()) { + return ResponseDTO.error(UserErrorCode.DATA_NOT_EXIST, "父级类目不存在~"); + } + + CategoryEntity parent = optional.get(); + if (!Objects.equals(categoryType, parent.getCategoryType())) { + return ResponseDTO.userErrorParam("与父级类目类型不一致"); + } + } + + } else { + // 如果没有父类 使用默认父类 + parentId = NumberUtils.LONG_ZERO; + } + + // 校验同父类下 名称是否重复 + CategoryEntity queryEntity = new CategoryEntity(); + queryEntity.setParentId(parentId); + queryEntity.setCategoryType(categoryType); + queryEntity.setCategoryName(categoryEntity.getCategoryName()); + queryEntity.setDeletedFlag(false); + queryEntity = categoryDao.selectOne(queryEntity); + if (null != queryEntity) { + if (isUpdate) { + if (!Objects.equals(queryEntity.getCategoryId(), categoryEntity.getCategoryId())) { + return ResponseDTO.userErrorParam("同级下已存在相同类目~"); + } + } else { + return ResponseDTO.userErrorParam("同级下已存在相同类目~"); + } + } + return ResponseDTO.ok(); + } + + /** + * 查询 类目详情 + * + * @param categoryId + * @return + */ + public ResponseDTO queryDetail(Long categoryId) { + Optional optional = categoryQueryService.queryCategory(categoryId); + if (!optional.isPresent()) { + return ResponseDTO.error(UserErrorCode.DATA_NOT_EXIST); + } + CategoryVO adminVO = SmartBeanUtil.copy(optional.get(), CategoryVO.class); + return ResponseDTO.ok(adminVO); + } + + /** + * 根据父级id 查询所有子类 返回层级树 + * 如果父类id 为空 返回所有类目层级 + * + * @param queryForm + * @return + */ + public ResponseDTO> queryTree(CategoryTreeQueryForm queryForm) { + if (null == queryForm.getParentId()) { + if (null == queryForm.getCategoryType()) { + return ResponseDTO.userErrorParam("类目类型不能为空"); + } + queryForm.setParentId(NumberUtils.LONG_ZERO); + } + List treeList = categoryCacheManager.queryCategoryTree(queryForm.getParentId(), queryForm.getCategoryType()); + return ResponseDTO.ok(treeList); + } + + /** + * 删除类目 + * 如果有未删除的子类 则无法删除 + * + * @param categoryId + * @return + */ + public ResponseDTO delete(Long categoryId) { + Optional optional = categoryQueryService.queryCategory(categoryId); + if (!optional.isPresent()) { + return ResponseDTO.error(UserErrorCode.DATA_NOT_EXIST); + } + + List categorySubId = categoryQueryService.queryCategorySubId(Lists.newArrayList(categoryId)); + if (CollectionUtils.isNotEmpty(categorySubId)) { + return ResponseDTO.userErrorParam("请先删除子级类目"); + } + + // 更新数据 + CategoryEntity categoryEntity = new CategoryEntity(); + categoryEntity.setCategoryId(categoryId); + categoryEntity.setDeletedFlag(true); + categoryDao.updateById(categoryEntity); + + // 更新缓存 + categoryCacheManager.removeCache(); + return ResponseDTO.ok(); + } + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/constant/GoodsStatusEnum.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/constant/GoodsStatusEnum.java new file mode 100644 index 00000000..8638da70 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/constant/GoodsStatusEnum.java @@ -0,0 +1,42 @@ +package net.lab1024.sa.admin.module.business.goods.constant; + + +import lombok.AllArgsConstructor; +import lombok.Getter; +import net.lab1024.sa.common.common.enumeration.BaseEnum; + +/** + * 商品状态 + * + * @Author 1024创新实验室: 胡克 + * @Date 2021-10-25 20:26:54 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@AllArgsConstructor +@Getter +public enum GoodsStatusEnum implements BaseEnum { + + /** + * 1 预约中 + */ + APPOINTMENT(1, "预约中"), + + /** + * 2 售卖 + */ + SELL(2, "售卖中"), + + /** + * 3 售罄 + */ + SELL_OUT(3, "售罄"), + + + ; + + private final Integer value; + + private final String desc; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/controller/GoodsController.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/controller/GoodsController.java new file mode 100644 index 00000000..b1a31ccf --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/controller/GoodsController.java @@ -0,0 +1,75 @@ +package net.lab1024.sa.admin.module.business.goods.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.admin.common.AdminBaseController; +import net.lab1024.sa.admin.constant.AdminSwaggerTagConst; +import net.lab1024.sa.admin.module.business.goods.domain.form.GoodsAddForm; +import net.lab1024.sa.admin.module.business.goods.domain.form.GoodsQueryForm; +import net.lab1024.sa.admin.module.business.goods.domain.form.GoodsUpdateForm; +import net.lab1024.sa.admin.module.business.goods.domain.vo.GoodsVO; +import net.lab1024.sa.admin.module.business.goods.service.GoodsService; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.domain.ValidateList; +import net.lab1024.sa.common.module.support.operatelog.annoation.OperateLog; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +/** + * 商品业务 + * + * @Author 1024创新实验室: 胡克 + * @Date 2021-10-25 20:26:54 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@OperateLog +@RestController +@Api(tags = AdminSwaggerTagConst.Business.MANAGER_GOODS) +public class GoodsController extends AdminBaseController { + + @Autowired + private GoodsService goodsService; + + @ApiOperation("分页查询 @author 胡克") + @PostMapping("/goods/query") + @PreAuthorize("@saAuth.checkPermission('goods:query ')") + public ResponseDTO> query(@RequestBody @Valid GoodsQueryForm queryForm) { + return goodsService.query(queryForm); + } + + @ApiOperation("添加商品 @author 胡克") + @PostMapping("/goods/add") + @PreAuthorize("@saAuth.checkPermission('goods:add')") + public ResponseDTO add(@RequestBody @Valid GoodsAddForm addForm) { + return goodsService.add(addForm); + } + + @ApiOperation("更新商品 @author 胡克") + @PostMapping("/goods/update") + @PreAuthorize("@saAuth.checkPermission('goods:update')") + public ResponseDTO update(@RequestBody @Valid GoodsUpdateForm updateForm) { + return goodsService.update(updateForm); + } + + @ApiOperation("删除 @author 卓大") + @GetMapping("/goods/delete/{goodsId}") + @PreAuthorize("@saAuth.checkPermission('goods:delete')") + public ResponseDTO delete(@PathVariable Long goodsId) { + return goodsService.delete(goodsId); + } + + @ApiOperation("批量 @author 卓大") + @PostMapping("/goods/batchDelete") + @PreAuthorize("@saAuth.checkPermission('goods:batchDelete')") + public ResponseDTO batchDelete(@RequestBody @Valid ValidateList idList) { + return goodsService.batchDelete(idList); + } + + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/dao/GoodsDao.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/dao/GoodsDao.java new file mode 100644 index 00000000..0493f2e3 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/dao/GoodsDao.java @@ -0,0 +1,41 @@ +package net.lab1024.sa.admin.module.business.goods.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.lab1024.sa.admin.module.business.goods.domain.entity.GoodsEntity; +import net.lab1024.sa.admin.module.business.goods.domain.form.GoodsQueryForm; +import net.lab1024.sa.admin.module.business.goods.domain.vo.GoodsVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 商品 + * + * @Author 1024创新实验室: 胡克 + * @Date 2021-10-25 20:26:54 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Mapper +@Component +public interface GoodsDao extends BaseMapper { + + /** + * 分页 查询商品 + * + * @param page + * @param query + * @return + */ + List query(Page page, @Param("query") GoodsQueryForm query); + + /** + * 批量更新删除状态 + */ + + void batchUpdateDeleted(@Param("goodsIdList")List goodsIdList,@Param("deletedFlag")Boolean deletedFlag); +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/entity/GoodsEntity.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/entity/GoodsEntity.java new file mode 100644 index 00000000..a2878a66 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/entity/GoodsEntity.java @@ -0,0 +1,75 @@ +package net.lab1024.sa.admin.module.business.goods.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import net.lab1024.sa.admin.module.business.category.dao.CategoryDao; +import net.lab1024.sa.common.module.support.datatracer.annoation.DataTracerFieldBigDecimal; +import net.lab1024.sa.common.module.support.datatracer.annoation.DataTracerFieldLabel; +import net.lab1024.sa.common.module.support.datatracer.annoation.DataTracerFieldSql; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 商品 实体类 + * + * @Author 1024创新实验室: 胡克 + * @Date 2021-10-25 20:26:54 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +@TableName("t_goods") +public class GoodsEntity { + + @TableId(type = IdType.AUTO) + private Long goodsId; + + /** + * 商品状态:[1:预约中,2:售卖中,3:售罄] + */ + private Integer goodsStatus; + + /** + * 商品分类 + */ + private Long categoryId; + + /** + * 商品名称 + */ + private String goodsName; + + /** + * 产地 + */ + private String place; + + /** + * 商品价格 + */ + private BigDecimal price; + + + /** + * 上架状态 + */ + private Boolean shelvesFlag; + + /** + * 删除状态 + */ + private Boolean deletedFlag; + + /** + * 备注 + */ + private String remark; + + private LocalDateTime updateTime; + + private LocalDateTime createTime; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/form/GoodsAddForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/form/GoodsAddForm.java new file mode 100644 index 00000000..27474272 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/form/GoodsAddForm.java @@ -0,0 +1,57 @@ +package net.lab1024.sa.admin.module.business.goods.domain.form; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.admin.module.business.goods.constant.GoodsStatusEnum; +import net.lab1024.sa.common.common.json.deserializer.DictValueVoDeserializer; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; +import net.lab1024.sa.common.common.validator.enumeration.CheckEnum; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.DecimalMin; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; + +/** + * 商品 添加表单 + * + * @Author 1024创新实验室: 胡克 + * @Date 2021-10-25 20:26:54 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class GoodsAddForm { + + @ApiModelProperty("商品分类") + @NotNull(message = "商品分类不能为空") + private Long categoryId; + + @ApiModelProperty("商品名称") + @NotBlank(message = "商品名称不能为空") + private String goodsName; + + @ApiModelPropertyEnum(GoodsStatusEnum.class) + @CheckEnum(message = "商品状态错误", value = GoodsStatusEnum.class, required = true) + private Integer goodsStatus; + + @ApiModelProperty("产地") + @NotBlank(message = "产地 不能为空 ") + @JsonDeserialize(using = DictValueVoDeserializer.class) + private String place; + + @ApiModelProperty("商品价格") + @NotNull(message = "商品价格不能为空") + @DecimalMin(value = "0", message = "商品价格最低0") + private BigDecimal price; + + @ApiModelProperty("上架状态") + @NotNull(message = "上架状态不能为空") + private Boolean shelvesFlag; + + @ApiModelProperty("备注|可选") + private String remark; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/form/GoodsQueryForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/form/GoodsQueryForm.java new file mode 100644 index 00000000..e25e3520 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/form/GoodsQueryForm.java @@ -0,0 +1,46 @@ +package net.lab1024.sa.admin.module.business.goods.domain.form; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.admin.module.business.goods.constant.GoodsStatusEnum; +import net.lab1024.sa.common.common.domain.PageParam; +import net.lab1024.sa.common.common.json.deserializer.DictValueVoDeserializer; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; +import net.lab1024.sa.common.common.validator.enumeration.CheckEnum; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; + +/** + * 商品 分页查询 + * + * @Author 1024创新实验室: 胡克 + * @Date 2021-10-25 20:26:54 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class GoodsQueryForm extends PageParam { + + @ApiModelProperty("商品分类") + private Integer categoryId; + + @ApiModelProperty("搜索词") + @Length(max = 30, message = "搜索词最多30字符") + private String searchWord; + + @ApiModelPropertyEnum(GoodsStatusEnum.class) + @CheckEnum(message = "商品状态错误", value = GoodsStatusEnum.class, required = false) + private Integer goodsStatus; + + @ApiModelProperty("产地") + private String place; + + @ApiModelProperty("上架状态") + private Boolean shelvesFlag; + + @ApiModelProperty(hidden = true) + private Boolean deletedFlag; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/form/GoodsUpdateForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/form/GoodsUpdateForm.java new file mode 100644 index 00000000..f72656ec --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/form/GoodsUpdateForm.java @@ -0,0 +1,23 @@ +package net.lab1024.sa.admin.module.business.goods.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * 商品 更新表单 + * + * @Author 1024创新实验室: 胡克 + * @Date 2021-10-25 20:26:54 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class GoodsUpdateForm extends GoodsAddForm { + + @ApiModelProperty("商品id") + @NotNull(message = "商品id不能为空") + private Long goodsId; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/vo/GoodsVO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/vo/GoodsVO.java new file mode 100644 index 00000000..fe7eaaf6 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/vo/GoodsVO.java @@ -0,0 +1,56 @@ +package net.lab1024.sa.admin.module.business.goods.domain.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.admin.module.business.goods.constant.GoodsStatusEnum; +import net.lab1024.sa.common.common.json.serializer.DictValueVoSerializer; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 商品 + * + * @Author 1024创新实验室: 胡克 + * @Date 2021-10-25 20:26:54 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class GoodsVO { + + @ApiModelProperty("商品分类") + private Long categoryId; + + @ApiModelProperty("商品名称") + private String goodsName; + + @ApiModelPropertyEnum(GoodsStatusEnum.class) + private Integer goodsStatus; + + @ApiModelProperty("产地") + @JsonSerialize(using = DictValueVoSerializer.class) + private String place; + + @ApiModelProperty("商品价格") + private BigDecimal price; + + @ApiModelProperty("上架状态") + private Boolean shelvesFlag; + + @ApiModelProperty("备注|可选") + private String remark; + + @ApiModelProperty("商品id") + private Long goodsId; + + @ApiModelProperty("商品分类") + private String categoryName; + + private LocalDateTime updateTime; + + private LocalDateTime createTime; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/manager/GoodsManager.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/manager/GoodsManager.java new file mode 100644 index 00000000..898b6aab --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/manager/GoodsManager.java @@ -0,0 +1,20 @@ +package net.lab1024.sa.admin.module.business.goods.manager; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import net.lab1024.sa.admin.module.business.goods.dao.GoodsDao; +import net.lab1024.sa.admin.module.business.goods.domain.entity.GoodsEntity; +import org.springframework.stereotype.Service; + +/** + * 商品 manager + * + * @Author 1024创新实验室: 胡克 + * @Date 2021-10-25 20:26:54 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Service +public class GoodsManager extends ServiceImpl { + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/service/GoodsService.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/service/GoodsService.java new file mode 100644 index 00000000..b5cbe38a --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/service/GoodsService.java @@ -0,0 +1,167 @@ +package net.lab1024.sa.admin.module.business.goods.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.lab1024.sa.admin.module.business.category.constant.CategoryTypeEnum; +import net.lab1024.sa.admin.module.business.category.domain.entity.CategoryEntity; +import net.lab1024.sa.admin.module.business.category.service.CategoryQueryService; +import net.lab1024.sa.admin.module.business.goods.constant.GoodsStatusEnum; +import net.lab1024.sa.admin.module.business.goods.dao.GoodsDao; +import net.lab1024.sa.admin.module.business.goods.domain.entity.GoodsEntity; +import net.lab1024.sa.admin.module.business.goods.domain.form.GoodsAddForm; +import net.lab1024.sa.admin.module.business.goods.domain.form.GoodsQueryForm; +import net.lab1024.sa.admin.module.business.goods.domain.form.GoodsUpdateForm; +import net.lab1024.sa.admin.module.business.goods.domain.vo.GoodsVO; +import net.lab1024.sa.admin.module.business.goods.manager.GoodsManager; +import net.lab1024.sa.common.common.code.UserErrorCode; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import net.lab1024.sa.common.common.util.SmartPageUtil; +import net.lab1024.sa.common.module.support.datatracer.constant.DataTracerTypeEnum; +import net.lab1024.sa.common.module.support.datatracer.service.DataTracerService; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; + +/** + * 商品 + * + * @Author 1024创新实验室: 胡克 + * @Date 2021-10-25 20:26:54 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Service +public class GoodsService { + @Autowired + private GoodsDao goodsDao; + + @Autowired + private CategoryQueryService categoryQueryService; + + @Autowired + private DataTracerService dataTracerService; + + /** + * 添加商品 + * + * @param addForm + * @return + */ + @Transactional(rollbackFor = Exception.class) + public ResponseDTO add(GoodsAddForm addForm) { + // 商品校验 + ResponseDTO res = this.checkGoods(addForm, null); + if (!res.getOk()) { + return res; + } + GoodsEntity goodsEntity = SmartBeanUtil.copy(addForm, GoodsEntity.class); + goodsDao.insert(goodsEntity); + dataTracerService.insert(goodsEntity.getGoodsId(), DataTracerTypeEnum.GOODS); + return ResponseDTO.ok(); + } + + /** + * 更新商品 + * + * @param updateForm + * @return + */ + @Transactional(rollbackFor = Exception.class) + public ResponseDTO update(GoodsUpdateForm updateForm) { + // 商品校验 + ResponseDTO res = this.checkGoods(updateForm, updateForm.getGoodsId()); + if (!res.getOk()) { + return res; + } + GoodsEntity originEntity = goodsDao.selectById(updateForm.getGoodsId()); + GoodsEntity goodsEntity = SmartBeanUtil.copy(updateForm, GoodsEntity.class); + goodsDao.updateById(goodsEntity); + dataTracerService.update(updateForm.getGoodsId(), DataTracerTypeEnum.GOODS, originEntity, goodsEntity); + return ResponseDTO.ok(); + } + + /** + * 添加/更新 商品校验 + * + * @param addForm + * @param goodsId 不为空 代表更新商品 + * @return + */ + private ResponseDTO checkGoods(GoodsAddForm addForm, Long goodsId) { + // 校验类目id + Long categoryId = addForm.getCategoryId(); + Optional optional = categoryQueryService.queryCategory(categoryId); + if (!optional.isPresent() || !CategoryTypeEnum.GOODS.equalsValue(optional.get().getCategoryType())) { + return ResponseDTO.error(UserErrorCode.DATA_NOT_EXIST, "商品类目不存在~"); + } + + return ResponseDTO.ok(); + } + + /** + * 删除 + */ + @Transactional(rollbackFor = Exception.class) + public ResponseDTO delete(Long goodsId) { + GoodsEntity goodsEntity = goodsDao.selectById(goodsId); + if (goodsEntity == null) { + return ResponseDTO.userErrorParam("商品不存在"); + } + + if (!goodsEntity.getGoodsStatus().equals(GoodsStatusEnum.SELL_OUT.getValue())) { + return ResponseDTO.userErrorParam("只有售罄的商品才可以删除"); + } + + batchDelete(Arrays.asList(goodsId)); + dataTracerService.batchDelete(Arrays.asList(goodsId), DataTracerTypeEnum.GOODS); + return ResponseDTO.ok(); + } + + /** + * 批量删除 + */ + public ResponseDTO batchDelete(List goodsIdList) { + if (CollectionUtils.isEmpty(goodsIdList)) { + return ResponseDTO.ok(); + } + + goodsDao.batchUpdateDeleted(goodsIdList, Boolean.TRUE); + return ResponseDTO.ok(); + } + + + /** + * 分页查询 + * + * @param queryForm + * @return + */ + public ResponseDTO> query(GoodsQueryForm queryForm) { + queryForm.setDeletedFlag(false); + Page page = SmartPageUtil.convert2PageQuery(queryForm); + List list = goodsDao.query(page, queryForm); + PageResult pageResult = SmartPageUtil.convert2PageResult(page, list); + if (pageResult.getEmptyFlag()) { + return ResponseDTO.ok(pageResult); + } + // 查询分类名称 + List categoryIdList = list.stream().map(GoodsVO::getCategoryId).distinct().collect(Collectors.toList()); + Map categoryMap = categoryQueryService.queryCategoryList(categoryIdList); + list.forEach(e -> { + CategoryEntity categoryEntity = categoryMap.get(e.getCategoryId()); + if (categoryEntity != null) { + e.setCategoryName(categoryEntity.getCategoryName()); + } + }); + return ResponseDTO.ok(pageResult); + } +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/BankController.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/BankController.java new file mode 100644 index 00000000..96fbea31 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/BankController.java @@ -0,0 +1,74 @@ +package net.lab1024.sa.admin.module.business.oa.bank; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.admin.constant.AdminSwaggerTagConst; +import net.lab1024.sa.admin.module.business.oa.bank.domain.BankCreateForm; +import net.lab1024.sa.admin.module.business.oa.bank.domain.BankQueryForm; +import net.lab1024.sa.admin.module.business.oa.bank.domain.BankUpdateForm; +import net.lab1024.sa.admin.module.business.oa.bank.domain.BankVO; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.RequestUser; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartRequestUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * OA办公-OA银行信息 + * + * @Author 1024创新实验室:善逸 + * @Date 2022/6/23 21:59:22 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@RestController +@Api(tags = {AdminSwaggerTagConst.Business.OA_BANK}) +public class BankController { + + @Autowired + private BankService bankService; + + @ApiOperation(value = "分页查询银行信息 @author 善逸") + @PostMapping("/oa/bank/page/query") + public ResponseDTO> queryByPage(@RequestBody @Valid BankQueryForm queryDTO) { + return bankService.queryByPage(queryDTO); + } + + @ApiOperation(value = "根据企业ID查询银行信息列表 @author 善逸") + @GetMapping("/oa/bank/query/list/{enterpriseId}") + public ResponseDTO> queryList(@PathVariable Long enterpriseId) { + return bankService.queryList(enterpriseId); + } + + @ApiOperation(value = "查询银行信息详情 @author 善逸") + @GetMapping("/oa/bank/get/{bankId}") + public ResponseDTO getDetail(@PathVariable Long bankId) { + return bankService.getDetail(bankId); + } + + @ApiOperation(value = "新建银行信息 @author 善逸") + @PostMapping("/oa/bank/create") + public ResponseDTO createBank(@RequestBody @Valid BankCreateForm createVO) { + RequestUser requestUser = SmartRequestUtil.getRequestUser(); + createVO.setCreateUserId(requestUser.getUserId()); + createVO.setCreateUserName(requestUser.getUserName()); + return bankService.createBank(createVO); + } + + @ApiOperation(value = "编辑银行信息 @author 善逸") + @PostMapping("/oa/bank/update") + public ResponseDTO updateBank(@RequestBody @Valid BankUpdateForm updateVO) { + return bankService.updateBank(updateVO); + } + + @ApiOperation(value = "删除银行信息 @author 善逸") + @GetMapping("/oa/bank/delete/{bankId}") + public ResponseDTO deleteBank(@PathVariable Long bankId) { + return bankService.deleteBank(bankId); + } +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/BankDao.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/BankDao.java new file mode 100644 index 00000000..a45d406a --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/BankDao.java @@ -0,0 +1,61 @@ +package net.lab1024.sa.admin.module.business.oa.bank; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.lab1024.sa.admin.module.business.oa.bank.domain.BankEntity; +import net.lab1024.sa.admin.module.business.oa.bank.domain.BankQueryForm; +import net.lab1024.sa.admin.module.business.oa.bank.domain.BankVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * OA办公-OA银行信息 + * + * @Author 1024创新实验室:善逸 + * @Date 2022/6/23 21:59:22 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Mapper +@Component +public interface BankDao extends BaseMapper { + + /** + * 根据账号查询 + * @param enterpriseId + * @param accountNumber + * @param excludeBankId + * @param deletedFlag + * @return + */ + BankEntity queryByAccountNumber(@Param("enterpriseId") Long enterpriseId, @Param("accountNumber") String accountNumber, @Param("excludeBankId") Long excludeBankId, @Param("deletedFlag") Boolean deletedFlag); + + /** + * 删除银行信息 + * + * @param bankId + * @param deletedFlag + */ + void deleteBank(@Param("bankId") Long bankId, @Param("deletedFlag") Boolean deletedFlag); + + /** + * 银行信息分页查询 + * + * @param page + * @param queryForm + * @return + */ + List queryPage(Page page, @Param("queryForm") BankQueryForm queryForm); + + /** + * 查询银行信息详情 + * @param bankId + * @param deletedFlag + * @return + */ + BankVO getDetail(@Param("bankId") Long bankId, @Param("deletedFlag") Boolean deletedFlag); +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/BankService.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/BankService.java new file mode 100644 index 00000000..48c120bc --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/BankService.java @@ -0,0 +1,162 @@ +package net.lab1024.sa.admin.module.business.oa.bank; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.admin.module.business.oa.bank.domain.*; +import net.lab1024.sa.admin.module.business.oa.enterprise.dao.EnterpriseDao; +import net.lab1024.sa.admin.module.business.oa.enterprise.domain.entity.EnterpriseEntity; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import net.lab1024.sa.common.common.util.SmartPageUtil; +import net.lab1024.sa.common.module.support.datatracer.constant.DataTracerConst; +import net.lab1024.sa.common.module.support.datatracer.constant.DataTracerTypeEnum; +import net.lab1024.sa.common.module.support.datatracer.service.DataTracerService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Objects; + +/** + * OA办公-OA银行信息 + * + * @Author 1024创新实验室:善逸 + * @Date 2022/6/23 21:59:22 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Service +@Slf4j +public class BankService { + + @Autowired + private BankDao bankDao; + @Autowired + private EnterpriseDao enterpriseDao; + + @Autowired + private DataTracerService dataTracerService; + + /** + * 分页查询银行信息 + * + * @param queryDTO + * @return + */ + public ResponseDTO> queryByPage(BankQueryForm queryDTO) { + queryDTO.setDeletedFlag(Boolean.FALSE); + Page page = SmartPageUtil.convert2PageQuery(queryDTO); + List bankVOS = bankDao.queryPage(page, queryDTO); + PageResult pageResult = SmartPageUtil.convert2PageResult(page, bankVOS); + return ResponseDTO.ok(pageResult); + } + + /** + * 根据企业ID查询不分页的银行列表 + * + * @param enterpriseId + * @return + */ + public ResponseDTO> queryList(Long enterpriseId) { + BankQueryForm queryDTO = new BankQueryForm(); + queryDTO.setEnterpriseId(enterpriseId); + queryDTO.setDeletedFlag(Boolean.FALSE); + List bankVOS = bankDao.queryPage(null, queryDTO); + return ResponseDTO.ok(bankVOS); + } + + /** + * 查询银行信息详情 + * + * @param bankId + * @return + */ + public ResponseDTO getDetail(Long bankId) { + // 校验银行信息是否存在 + BankVO bankVO = bankDao.getDetail(bankId, Boolean.FALSE); + if (Objects.isNull(bankVO)) { + return ResponseDTO.userErrorParam("银行信息不存在"); + } + return ResponseDTO.ok(bankVO); + } + + /** + * 新建银行信息 + * + * @param createVO + * @return + */ + @Transactional(rollbackFor = Exception.class) + public ResponseDTO createBank(BankCreateForm createVO) { + Long enterpriseId = createVO.getEnterpriseId(); + // 校验企业是否存在 + EnterpriseEntity enterpriseDetail = enterpriseDao.selectById(enterpriseId); + if (Objects.isNull(enterpriseDetail) || enterpriseDetail.getDeletedFlag()) { + return ResponseDTO.userErrorParam("企业不存在"); + } + // 验证银行信息账号是否重复 + BankEntity validateBank = bankDao.queryByAccountNumber(enterpriseId, createVO.getAccountNumber(), null, Boolean.FALSE); + if (Objects.nonNull(validateBank)) { + return ResponseDTO.userErrorParam("银行信息账号重复"); + } + // 数据插入 + BankEntity insertBank = SmartBeanUtil.copy(createVO, BankEntity.class); + bankDao.insert(insertBank); + dataTracerService.addTrace(enterpriseId, DataTracerTypeEnum.OA_ENTERPRISE, "新增银行:" + DataTracerConst.HTML_BR + dataTracerService.getChangeContent(insertBank)); + return ResponseDTO.ok(); + } + + /** + * 编辑银行信息 + * + * @param updateVO + * @return + */ + @Transactional(rollbackFor = Exception.class) + public ResponseDTO updateBank(BankUpdateForm updateVO) { + Long enterpriseId = updateVO.getEnterpriseId(); + // 校验企业是否存在 + EnterpriseEntity enterpriseDetail = enterpriseDao.selectById(enterpriseId); + if (Objects.isNull(enterpriseDetail) || enterpriseDetail.getDeletedFlag()) { + return ResponseDTO.userErrorParam("企业不存在"); + } + Long bankId = updateVO.getBankId(); + // 校验银行信息是否存在 + BankEntity bankDetail = bankDao.selectById(bankId); + if (Objects.isNull(bankDetail) || bankDetail.getDeletedFlag()) { + return ResponseDTO.userErrorParam("银行信息不存在"); + } + // 验证银行信息账号是否重复 + BankEntity validateBank = bankDao.queryByAccountNumber(updateVO.getEnterpriseId(), updateVO.getAccountNumber(), bankId, Boolean.FALSE); + if (Objects.nonNull(validateBank)) { + return ResponseDTO.userErrorParam("银行信息账号重复"); + } + // 数据编辑 + BankEntity updateBank = SmartBeanUtil.copy(updateVO, BankEntity.class); + bankDao.updateById(updateBank); + dataTracerService.addTrace(enterpriseId, DataTracerTypeEnum.OA_ENTERPRISE, "更新银行:" + DataTracerConst.HTML_BR + dataTracerService.getChangeContent(bankDetail, updateBank)); + return ResponseDTO.ok(); + } + + + /** + * 删除银行信息 + * + * @param bankId + * @return + */ + @Transactional(rollbackFor = Exception.class) + public ResponseDTO deleteBank(Long bankId) { + // 校验银行信息是否存在 + BankEntity bankDetail = bankDao.selectById(bankId); + if (Objects.isNull(bankDetail) || bankDetail.getDeletedFlag()) { + return ResponseDTO.userErrorParam("银行信息不存在"); + } + bankDao.deleteBank(bankId, Boolean.TRUE); + dataTracerService.addTrace(bankDetail.getEnterpriseId(), DataTracerTypeEnum.OA_ENTERPRISE, "删除银行:" + DataTracerConst.HTML_BR + dataTracerService.getChangeContent(bankDetail)); + return ResponseDTO.ok(); + } +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankCreateForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankCreateForm.java new file mode 100644 index 00000000..031ceb75 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankCreateForm.java @@ -0,0 +1,58 @@ +package net.lab1024.sa.admin.module.business.oa.bank.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * OA办公-银行信息新建 + * + * @Author 1024创新实验室:善逸 + * @Date 2022/6/23 21:59:22 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class BankCreateForm { + + @ApiModelProperty("开户银行") + @NotBlank(message = "开户银行不能为空") + @Length(max = 200, message = "开户银行最多200字符") + private String bankName; + + @ApiModelProperty("账户名称") + @NotBlank(message = "账户名称不能为空") + @Length(max = 200, message = "账户名称最多200字符") + private String accountName; + + @ApiModelProperty("账号") + @NotBlank(message = "账号不能为空") + @Length(max = 200, message = "账号最多200字符") + private String accountNumber; + + @ApiModelProperty("备注") + @Length(max = 500, message = "备注最多500字符") + private String remark; + + @ApiModelProperty("是否对公") + @NotNull(message = "是否对公不能为空") + private Boolean businessFlag; + + @ApiModelProperty("企业") + @NotNull(message = "企业不能为空") + private Long enterpriseId; + + @ApiModelProperty("禁用状态") + @NotNull(message = "禁用状态不能为空") + private Boolean disabledFlag; + + @ApiModelProperty(value = "创建人", hidden = true) + private Long createUserId; + + @ApiModelProperty(value = "创建人", hidden = true) + private String createUserName; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankEntity.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankEntity.java new file mode 100644 index 00000000..0b3ec08d --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankEntity.java @@ -0,0 +1,95 @@ +package net.lab1024.sa.admin.module.business.oa.bank.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import net.lab1024.sa.common.module.support.datatracer.annoation.DataTracerFieldLabel; + +import java.time.LocalDateTime; + +/** + * OA办公-OA银行信息 + * + * @Author 1024创新实验室:善逸 + * @Date 2022/6/23 21:59:22 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +@TableName("t_oa_bank") +public class BankEntity { + + /** + * 银行信息ID + */ + @TableId(type = IdType.AUTO) + @DataTracerFieldLabel("银行信息ID") + private Long bankId; + + /** + * 开户银行 + */ + @DataTracerFieldLabel("开户银行") + private String bankName; + + /** + * 账户名称 + */ + @DataTracerFieldLabel("账户名称") + private String accountName; + + /** + * 账号 + */ + @DataTracerFieldLabel("账号") + private String accountNumber; + + /** + * 备注 + */ + @DataTracerFieldLabel("备注") + private String remark; + + /** + * 是否对公 + */ + @DataTracerFieldLabel("是否对公") + private Boolean businessFlag; + + /** + * 企业ID + */ + private Long enterpriseId; + + /** + * 禁用状态 + */ + @DataTracerFieldLabel("禁用状态") + private Boolean disabledFlag; + + /** + * 删除状态 + */ + private Boolean deletedFlag; + + /** + * 创建人ID + */ + private Long createUserId; + + /** + * 创建人ID + */ + private String createUserName; + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankQueryForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankQueryForm.java new file mode 100644 index 00000000..839b02f6 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankQueryForm.java @@ -0,0 +1,40 @@ +package net.lab1024.sa.admin.module.business.oa.bank.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.domain.PageParam; +import org.hibernate.validator.constraints.Length; + +import java.time.LocalDate; + +/** + * OA办公-OA银行信息查询 + * + * @Author 1024创新实验室:善逸 + * @Date 2022/6/23 21:59:22 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class BankQueryForm extends PageParam { + + @ApiModelProperty("企业ID") + private Long enterpriseId; + + @ApiModelProperty("关键字") + @Length(max = 200, message = "关键字最多200字符") + private String keywords; + + @ApiModelProperty("开始时间") + private LocalDate startTime; + + @ApiModelProperty("结束时间") + private LocalDate endTime; + + @ApiModelProperty("禁用状态") + private Boolean disabledFlag; + + @ApiModelProperty(value = "删除状态", hidden = true) + private Boolean deletedFlag; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankUpdateForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankUpdateForm.java new file mode 100644 index 00000000..db8a2c71 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankUpdateForm.java @@ -0,0 +1,23 @@ +package net.lab1024.sa.admin.module.business.oa.bank.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * OA办公-银行信息更新 + * + * @Author 1024创新实验室:善逸 + * @Date 2022/6/23 21:59:22 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class BankUpdateForm extends BankCreateForm { + + @ApiModelProperty("银行信息ID") + @NotNull(message = "银行信息ID不能为空") + private Long bankId; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankVO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankVO.java new file mode 100644 index 00000000..5cfcb5b6 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankVO.java @@ -0,0 +1,58 @@ +package net.lab1024.sa.admin.module.business.oa.bank.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * OA办公-OA银行信息 + * + * @Author 1024创新实验室:善逸 + * @Date 2022/6/23 21:59:22 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class BankVO { + + @ApiModelProperty("银行信息ID") + private Long bankId; + + @ApiModelProperty("开户银行") + private String bankName; + + @ApiModelProperty("账户名称") + private String accountName; + + @ApiModelProperty("账号") + private String accountNumber; + + @ApiModelProperty("备注") + private String remark; + + @ApiModelProperty("是否对公") + private Boolean businessFlag; + + @ApiModelProperty("企业ID") + private Long enterpriseId; + + @ApiModelProperty("企业名称") + private String enterpriseName; + + @ApiModelProperty("禁用状态") + private Boolean disabledFlag; + + @ApiModelProperty("创建人ID") + private Long createUserId; + + @ApiModelProperty("创建人名称") + private String createUserName; + + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + + @ApiModelProperty("更新时间") + private LocalDateTime updateTime; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseController.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseController.java new file mode 100644 index 00000000..efc0143b --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseController.java @@ -0,0 +1,115 @@ +package net.lab1024.sa.admin.module.business.oa.enterprise; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.admin.constant.AdminSwaggerTagConst; +import net.lab1024.sa.admin.module.business.oa.enterprise.domain.form.*; +import net.lab1024.sa.admin.module.business.oa.enterprise.domain.vo.EnterpriseEmployeeVO; +import net.lab1024.sa.admin.module.business.oa.enterprise.domain.vo.EnterpriseListVO; +import net.lab1024.sa.admin.module.business.oa.enterprise.domain.vo.EnterpriseVO; +import net.lab1024.sa.common.common.annoation.SaAuth; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.RequestUser; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartRequestUtil; +import net.lab1024.sa.common.module.support.operatelog.annoation.OperateLog; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 企业 + * + * @Author 1024创新实验室: 开云 + * @Date 2022/7/28 20:37:15 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Slf4j +@RestController +@OperateLog +@Api(tags = {AdminSwaggerTagConst.Business.OA_ENTERPRISE}) +public class EnterpriseController { + + @Autowired + private EnterpriseService enterpriseService; + + @ApiOperation(value = "分页查询企业模块 @author 开云") + @PostMapping("/oa/enterprise/page/query") + @SaAuth + public ResponseDTO> queryByPage(@RequestBody @Valid EnterpriseQueryForm queryDTO) { + return enterpriseService.queryByPage(queryDTO); + } + + @ApiOperation(value = "查询企业详情 @author 开云") + @GetMapping("/oa/enterprise/get/{enterpriseId}") + @SaAuth + public ResponseDTO getDetail(@PathVariable Long enterpriseId) { + return ResponseDTO.ok(enterpriseService.getDetail(enterpriseId)); + } + + @ApiOperation(value = "新建企业 @author 开云") + @PostMapping("/oa/enterprise/create") + @SaAuth + public ResponseDTO createEnterprise(@RequestBody @Valid EnterpriseCreateForm createVO) { + RequestUser requestUser = SmartRequestUtil.getRequestUser(); + createVO.setCreateUserId(requestUser.getUserId()); + createVO.setCreateUserName(requestUser.getUserName()); + return enterpriseService.createEnterprise(createVO); + } + + @ApiOperation(value = "编辑企业 @author 开云") + @PostMapping("/oa/enterprise/update") + @SaAuth + public ResponseDTO updateEnterprise(@RequestBody @Valid EnterpriseUpdateForm updateVO) { + return enterpriseService.updateEnterprise(updateVO); + } + + @ApiOperation(value = "删除企业 @author 开云") + @GetMapping("/oa/enterprise/delete/{enterpriseId}") + @SaAuth + public ResponseDTO deleteEnterprise(@PathVariable Long enterpriseId) { + return enterpriseService.deleteEnterprise(enterpriseId); + } + + @ApiOperation(value = "企业列表查询 @author 开云") + @GetMapping("/oa/enterprise/query/list") + @SaAuth + public ResponseDTO> queryList(@RequestParam(value = "type", required = false) Integer type) { + return enterpriseService.queryList(type); + } + + + @ApiOperation(value = "企业添加员工 @author 罗伊") + @PostMapping("/oa/enterprise/employee/add") + @SaAuth + public ResponseDTO addEmployee(@RequestBody @Valid EnterpriseEmployeeForm enterpriseEmployeeForm) { + return enterpriseService.addEmployee(enterpriseEmployeeForm); + } + + @ApiOperation(value = "查询企业全部员工 @author 罗伊") + @PostMapping("/oa/enterprise/employee/list") + @SaAuth + public ResponseDTO> employeeList(@RequestBody @Valid List enterpriseIdList) { + return ResponseDTO.ok(enterpriseService.employeeList(enterpriseIdList)); + } + + @ApiOperation(value = "分页查询企业员工 @author 卓大") + @PostMapping("/oa/enterprise/employee/queryPage") + @SaAuth + public ResponseDTO> queryPageEmployeeList(@RequestBody @Valid EnterpriseEmployeeQueryForm queryForm) { + return ResponseDTO.ok(enterpriseService.queryPageEmployeeList(queryForm)); + } + + + @ApiOperation(value = "企业删除员工 @author 罗伊") + @PostMapping("/oa/enterprise/employee/delete") + @SaAuth + public ResponseDTO deleteEmployee(@RequestBody @Valid EnterpriseEmployeeForm enterpriseEmployeeForm) { + return enterpriseService.deleteEmployee(enterpriseEmployeeForm); + } +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseEmployeeManager.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseEmployeeManager.java new file mode 100644 index 00000000..1ac3fd5e --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseEmployeeManager.java @@ -0,0 +1,19 @@ +package net.lab1024.sa.admin.module.business.oa.enterprise; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import net.lab1024.sa.admin.module.business.oa.enterprise.dao.EnterpriseEmployeeDao; +import net.lab1024.sa.admin.module.business.oa.enterprise.domain.entity.EnterpriseEmployeeEntity; +import org.springframework.stereotype.Service; + +/** + * 企业员工关系 manager + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022/7/28 20:37:15 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Service +public class EnterpriseEmployeeManager extends ServiceImpl { +} \ No newline at end of file diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseService.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseService.java new file mode 100644 index 00000000..b065d3b8 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseService.java @@ -0,0 +1,252 @@ +package net.lab1024.sa.admin.module.business.oa.enterprise; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.admin.module.business.oa.enterprise.dao.EnterpriseDao; +import net.lab1024.sa.admin.module.business.oa.enterprise.dao.EnterpriseEmployeeDao; +import net.lab1024.sa.admin.module.business.oa.enterprise.domain.entity.EnterpriseEmployeeEntity; +import net.lab1024.sa.admin.module.business.oa.enterprise.domain.entity.EnterpriseEntity; +import net.lab1024.sa.admin.module.business.oa.enterprise.domain.form.*; +import net.lab1024.sa.admin.module.business.oa.enterprise.domain.vo.EnterpriseEmployeeVO; +import net.lab1024.sa.admin.module.business.oa.enterprise.domain.vo.EnterpriseListVO; +import net.lab1024.sa.admin.module.business.oa.enterprise.domain.vo.EnterpriseVO; +import net.lab1024.sa.admin.module.system.department.service.DepartmentService; +import net.lab1024.sa.common.common.code.UserErrorCode; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import net.lab1024.sa.common.common.util.SmartPageUtil; +import net.lab1024.sa.common.module.support.datatracer.constant.DataTracerTypeEnum; +import net.lab1024.sa.common.module.support.datatracer.domain.form.DataTracerForm; +import net.lab1024.sa.common.module.support.datatracer.service.DataTracerService; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * 企业 + * + * @Author 1024创新实验室: 开云 + * @Date 2022/7/28 20:37:15 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Service +@Slf4j +public class EnterpriseService { + + @Autowired + private EnterpriseDao enterpriseDao; + + @Autowired + private EnterpriseEmployeeDao enterpriseEmployeeDao; + + @Autowired + private EnterpriseEmployeeManager enterpriseEmployeeManager; + + @Autowired + private DataTracerService dataTracerService; + + @Autowired + private DepartmentService departmentService; + + /** + * 分页查询企业模块 + * + * @param queryDTO + * @return + */ + public ResponseDTO> queryByPage(EnterpriseQueryForm queryDTO) { + queryDTO.setDeletedFlag(Boolean.FALSE); + Page page = SmartPageUtil.convert2PageQuery(queryDTO); + List enterpriseVOS = enterpriseDao.queryPage(page, queryDTO); + PageResult pageResult = SmartPageUtil.convert2PageResult(page, enterpriseVOS); + return ResponseDTO.ok(pageResult); + } + + /** + * 查询企业详情 + * + * @param enterpriseId + * @return + */ + public EnterpriseVO getDetail(Long enterpriseId) { + EnterpriseVO enterpriseDetail = enterpriseDao.getDetail(enterpriseId, Boolean.FALSE); + return enterpriseDetail; + } + + /** + * 新建企业 + * + * @param createVO + * @return + */ + @Transactional(rollbackFor = Exception.class) + public ResponseDTO createEnterprise(EnterpriseCreateForm createVO) { + // 验证企业名称是否重复 + EnterpriseEntity validateEnterprise = enterpriseDao.queryByEnterpriseName(createVO.getEnterpriseName(), null, Boolean.FALSE); + if (Objects.nonNull(validateEnterprise)) { + return ResponseDTO.userErrorParam("企业名称重复"); + } + // 数据插入 + EnterpriseEntity insertEnterprise = SmartBeanUtil.copy(createVO, EnterpriseEntity.class); + enterpriseDao.insert(insertEnterprise); + dataTracerService.insert(insertEnterprise.getEnterpriseId(), DataTracerTypeEnum.OA_ENTERPRISE); + return ResponseDTO.ok(); + } + + /** + * 编辑企业 + * + * @param updateVO + * @return + */ + @Transactional(rollbackFor = Exception.class) + public ResponseDTO updateEnterprise(EnterpriseUpdateForm updateVO) { + Long enterpriseId = updateVO.getEnterpriseId(); + // 校验企业是否存在 + EnterpriseEntity enterpriseDetail = enterpriseDao.selectById(enterpriseId); + if (Objects.isNull(enterpriseDetail) || enterpriseDetail.getDeletedFlag()) { + return ResponseDTO.userErrorParam("企业不存在"); + } + // 验证企业名称是否重复 + EnterpriseEntity validateEnterprise = enterpriseDao.queryByEnterpriseName(updateVO.getEnterpriseName(), enterpriseId, Boolean.FALSE); + if (Objects.nonNull(validateEnterprise)) { + return ResponseDTO.userErrorParam("企业名称重复"); + } + // 数据编辑 + EnterpriseEntity updateEntity = SmartBeanUtil.copy(enterpriseDetail, EnterpriseEntity.class); + SmartBeanUtil.copyProperties(updateVO, updateEntity); + enterpriseDao.updateById(updateEntity); + + //变更记录 + DataTracerForm dataTracerForm = DataTracerForm.builder() + .dataId(updateVO.getEnterpriseId()) + .type(DataTracerTypeEnum.OA_ENTERPRISE) + .content("修改企业信息") + .diffOld(dataTracerService.getChangeContent(enterpriseDetail)) + .diffNew(dataTracerService.getChangeContent(updateEntity)) + .build(); + + dataTracerService.addTrace(dataTracerForm); + return ResponseDTO.ok(); + } + + + /** + * 删除企业 + * + * @param enterpriseId + * @return + */ + @Transactional(rollbackFor = Exception.class) + public ResponseDTO deleteEnterprise(Long enterpriseId) { + // 校验企业是否存在 + EnterpriseEntity enterpriseDetail = enterpriseDao.selectById(enterpriseId); + if (Objects.isNull(enterpriseDetail) || enterpriseDetail.getDeletedFlag()) { + return ResponseDTO.userErrorParam("企业不存在"); + } + enterpriseDao.deleteEnterprise(enterpriseId, Boolean.TRUE); + dataTracerService.delete(enterpriseId, DataTracerTypeEnum.OA_ENTERPRISE); + return ResponseDTO.ok(); + } + + /** + * 企业列表查询 + * + * @return + */ + public ResponseDTO> queryList(Integer type) { + List enterpriseListVOS = enterpriseDao.queryList(type, Boolean.FALSE, Boolean.FALSE); + return ResponseDTO.ok(enterpriseListVOS); + } + + //----------------------------------------- 以下为员工相关-------------------------------------------- + + /** + * 企业添加员工 + * + * @param enterpriseEmployeeForm + * @return + */ + public synchronized ResponseDTO addEmployee(EnterpriseEmployeeForm enterpriseEmployeeForm) { + Long enterpriseId = enterpriseEmployeeForm.getEnterpriseId(); + EnterpriseEntity enterpriseEntity = enterpriseDao.selectById(enterpriseId); + if (enterpriseEntity == null || enterpriseEntity.getDeletedFlag()) { + return ResponseDTO.error(UserErrorCode.DATA_NOT_EXIST); + } + //过滤掉已存在的员工 + List waitAddEmployeeIdList = enterpriseEmployeeForm.getEmployeeIdList(); + List enterpriseEmployeeEntityList = enterpriseEmployeeDao.selectByEnterpriseAndEmployeeIdList(enterpriseId, waitAddEmployeeIdList); + if (CollectionUtils.isNotEmpty(enterpriseEmployeeEntityList)) { + List existEmployeeIdList = enterpriseEmployeeEntityList.stream().map(EnterpriseEmployeeEntity::getEmployeeId).collect(Collectors.toList()); + waitAddEmployeeIdList = waitAddEmployeeIdList.stream().filter(e -> !existEmployeeIdList.contains(e)).collect(Collectors.toList()); + } + if (CollectionUtils.isEmpty(waitAddEmployeeIdList)) { + return ResponseDTO.ok(); + } + List batchAddList = Lists.newArrayList(); + for (Long employeeId : waitAddEmployeeIdList) { + EnterpriseEmployeeEntity enterpriseEmployeeEntity = new EnterpriseEmployeeEntity(); + enterpriseEmployeeEntity.setEnterpriseId(enterpriseId); + enterpriseEmployeeEntity.setEmployeeId(employeeId); + batchAddList.add(enterpriseEmployeeEntity); + } + enterpriseEmployeeManager.saveBatch(batchAddList); + return ResponseDTO.ok(); + } + + /** + * 企业删除员工 + * + * @param enterpriseEmployeeForm + * @return + */ + public synchronized ResponseDTO deleteEmployee(EnterpriseEmployeeForm enterpriseEmployeeForm) { + Long enterpriseId = enterpriseEmployeeForm.getEnterpriseId(); + EnterpriseEntity enterpriseEntity = enterpriseDao.selectById(enterpriseId); + if (enterpriseEntity == null || enterpriseEntity.getDeletedFlag()) { + return ResponseDTO.error(UserErrorCode.DATA_NOT_EXIST); + } + List waitDeleteEmployeeIdList = enterpriseEmployeeForm.getEmployeeIdList(); + enterpriseEmployeeDao.deleteByEnterpriseAndEmployeeIdList(enterpriseId, waitDeleteEmployeeIdList); + return ResponseDTO.ok(); + } + + /** + * 企业下员工列表 + * + * @param enterpriseIdList + * @return + */ + public List employeeList(List enterpriseIdList) { + if (CollectionUtils.isEmpty(enterpriseIdList)) { + return Lists.newArrayList(); + } + List enterpriseEmployeeVOList = enterpriseEmployeeDao.selectByEnterpriseIdList(enterpriseIdList); + return enterpriseEmployeeVOList; + } + + /** + * 分页查询企业员工 + * + * @param queryForm + * @return + */ + public PageResult queryPageEmployeeList(EnterpriseEmployeeQueryForm queryForm) { + Page page = SmartPageUtil.convert2PageQuery(queryForm); + List enterpriseEmployeeVOList = enterpriseEmployeeDao.queryPageEmployeeList(page, queryForm); + for (EnterpriseEmployeeVO enterpriseEmployeeVO : enterpriseEmployeeVOList) { + enterpriseEmployeeVO.setDepartmentName(departmentService.getDepartmentPath(enterpriseEmployeeVO.getDepartmentId())); + } + return SmartPageUtil.convert2PageResult(page, enterpriseEmployeeVOList); + } +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/constant/EnterpriseTypeEnum.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/constant/EnterpriseTypeEnum.java new file mode 100644 index 00000000..ddbf5f79 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/constant/EnterpriseTypeEnum.java @@ -0,0 +1,40 @@ +package net.lab1024.sa.admin.module.business.oa.enterprise.constant; + + +import net.lab1024.sa.common.common.enumeration.BaseEnum; + +/** + * 企业类型 + * + * @Author 1024创新实验室: 开云 + * @Date 2022/7/28 20:37:15 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +public enum EnterpriseTypeEnum implements BaseEnum { + + NORMAL(1, "有限企业"), + + FOREIGN(2, "外资企业"), + ; + + private Integer value; + private String desc; + + EnterpriseTypeEnum(Integer value, String desc) { + this.value = value; + this.desc = desc; + } + + + @Override + public Integer getValue() { + return value; + } + + @Override + public String getDesc() { + return desc; + } +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/dao/EnterpriseDao.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/dao/EnterpriseDao.java new file mode 100644 index 00000000..5b58609a --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/dao/EnterpriseDao.java @@ -0,0 +1,72 @@ +package net.lab1024.sa.admin.module.business.oa.enterprise.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.lab1024.sa.admin.module.business.oa.enterprise.domain.entity.EnterpriseEntity; +import net.lab1024.sa.admin.module.business.oa.enterprise.domain.form.EnterpriseQueryForm; +import net.lab1024.sa.admin.module.business.oa.enterprise.domain.vo.EnterpriseListVO; +import net.lab1024.sa.admin.module.business.oa.enterprise.domain.vo.EnterpriseVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 企业 + * + * @Author 1024创新实验室: 开云 + * @Date 2022/7/28 20:37:15 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Mapper +@Component +public interface EnterpriseDao extends BaseMapper { + + /** + * 根据企业名称查询 + * + * @param enterpriseName + * @param excludeEnterpriseId + * @param deletedFlag + * @return + */ + EnterpriseEntity queryByEnterpriseName(@Param("enterpriseName") String enterpriseName, @Param("excludeEnterpriseId") Long excludeEnterpriseId, @Param("deletedFlag") Boolean deletedFlag); + + /** + * 删除企业 + * + * @param enterpriseId + * @param deletedFlag + */ + void deleteEnterprise(@Param("enterpriseId") Long enterpriseId, @Param("deletedFlag") Boolean deletedFlag); + + /** + * 企业分页查询 + * + * @param page + * @param queryForm + * @return + */ + List queryPage(Page page, @Param("queryForm") EnterpriseQueryForm queryForm); + + /** + * 查询企业详情 + * + * @param enterpriseId + * @return + */ + EnterpriseVO getDetail(@Param("enterpriseId") Long enterpriseId, @Param("deletedFlag") Boolean deletedFlag); + + /** + * 查询列表 + * + * @param type + * @param disabledFlag + * @param deletedFlag + * @return + */ + List queryList(@Param("type") Integer type, @Param("disabledFlag") Boolean disabledFlag, @Param("deletedFlag") Boolean deletedFlag); +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/dao/EnterpriseEmployeeDao.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/dao/EnterpriseEmployeeDao.java new file mode 100644 index 00000000..93808710 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/dao/EnterpriseEmployeeDao.java @@ -0,0 +1,88 @@ +package net.lab1024.sa.admin.module.business.oa.enterprise.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.lab1024.sa.admin.module.business.oa.enterprise.domain.entity.EnterpriseEmployeeEntity; +import net.lab1024.sa.admin.module.business.oa.enterprise.domain.form.EnterpriseEmployeeQueryForm; +import net.lab1024.sa.admin.module.business.oa.enterprise.domain.vo.EnterpriseEmployeeVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +import java.util.Collection; +import java.util.List; + +/** + * 企业员工 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022/7/28 20:37:15 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Mapper +@Component +public interface EnterpriseEmployeeDao extends BaseMapper { + + + /** + * 根据员工查询 + * @param employeeIdList + * @return + */ + List selectByEmployeeIdList(@Param("employeeIdList")Collection employeeIdList); + + /** + * 查询员工关联的企业 + * @param employeeId + * @return + */ + List selectEnterpriseIdByEmployeeId(@Param("employeeId")Long employeeId); + /** + * 根据企业查询 + * @param enterpriseIdList + * @return + */ + List selectByEnterpriseIdList(@Param("enterpriseIdList")Collection enterpriseIdList); + /** + * 根据企业查询 + * @param enterpriseId + * @return + */ + List selectByEnterpriseId(@Param("enterpriseId")Long enterpriseId); + + /** + * 查询企业下的所有员工id + * @param enterpriseIdList + * @return + */ + List selectEmployeeIdByEnterpriseIdList(@Param("enterpriseIdList")Collection enterpriseIdList); + /** + * 根据员工删除 + * @param enterpriseId + * @param employeeIdList + */ + void deleteByEnterpriseAndEmployeeIdList(@Param("enterpriseId")Long enterpriseId, @Param("employeeIdList")Collection employeeIdList); + + /** + * 根据员工查询 + * @param enterpriseId + * @param employeeIdList + */ + List selectByEnterpriseAndEmployeeIdList(@Param("enterpriseId")Long enterpriseId, @Param("employeeIdList")Collection employeeIdList); + + /** + * 删除某员工关联的所有企业 + * @param employeeId + */ + void deleteByEmployeeId(@Param("employeeId")Long employeeId); + + /** + * 分页查询企业员工 + * @param page + * @param queryForm + * @return + */ + List queryPageEmployeeList(Page page,@Param("queryForm") EnterpriseEmployeeQueryForm queryForm); +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/entity/EnterpriseEmployeeEntity.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/entity/EnterpriseEmployeeEntity.java new file mode 100644 index 00000000..a4c9b8ea --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/entity/EnterpriseEmployeeEntity.java @@ -0,0 +1,51 @@ +package net.lab1024.sa.admin.module.business.oa.enterprise.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * 企业员工 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022/7/28 20:37:15 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +@TableName("t_oa_enterprise_employee") +@NoArgsConstructor +public class EnterpriseEmployeeEntity { + + @TableId(type = IdType.AUTO) + private Long enterpriseEmployeeId; + + /** + * 企业ID + */ + private Long enterpriseId; + /** + * 员工 + */ + private Long employeeId; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; + + public EnterpriseEmployeeEntity(Long enterpriseId, Long employeeId) { + this.enterpriseId = enterpriseId; + this.employeeId = employeeId; + } +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/entity/EnterpriseEntity.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/entity/EnterpriseEntity.java new file mode 100644 index 00000000..67b4c48e --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/entity/EnterpriseEntity.java @@ -0,0 +1,153 @@ +package net.lab1024.sa.admin.module.business.oa.enterprise.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import net.lab1024.sa.admin.module.business.oa.enterprise.constant.EnterpriseTypeEnum; +import net.lab1024.sa.common.module.support.datatracer.annoation.DataTracerFieldEnum; +import net.lab1024.sa.common.module.support.datatracer.annoation.DataTracerFieldLabel; + +import java.time.LocalDateTime; + +/** + * 企业 + * + * @Author 1024创新实验室: 开云 + * @Date 2022/7/28 20:37:15 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +@TableName("t_oa_enterprise") +public class EnterpriseEntity { + + /** + * 企业ID + */ + @TableId(type = IdType.AUTO) + private Long enterpriseId; + + /** + * 企业名称 + */ + @DataTracerFieldLabel("企业名称") + private String enterpriseName; + + /** + * 企业logo + */ + @DataTracerFieldLabel("企业logo") + private String enterpriseLogo; + + /** + * 统一社会信用代码 + */ + @DataTracerFieldLabel("统一社会信用代码") + private String unifiedSocialCreditCode; + + /** + * 类型 + * + * @see EnterpriseTypeEnum + */ + @DataTracerFieldLabel("类型") + @DataTracerFieldEnum(enumClass = EnterpriseTypeEnum.class) + private Integer type; + + /** + * 联系人 + */ + @DataTracerFieldLabel("联系人") + private String contact; + + /** + * 联系人电话 + */ + @DataTracerFieldLabel("联系人电话") + private String contactPhone; + + /** + * 邮箱 + */ + @DataTracerFieldLabel("邮箱") + private String email; + + /** + * 省份 + */ + private Integer province; + + /** + * 省份名称 + */ + @DataTracerFieldLabel("省份名称") + private String provinceName; + + /** + * 城市 + */ + private Integer city; + + /** + * 城市名称 + */ + @DataTracerFieldLabel("城市名称") + private String cityName; + + /** + * 区县 + */ + private Integer district; + + /** + * 区县名称 + */ + @DataTracerFieldLabel("区县名称") + private String districtName; + + /** + * 详细地址 + */ + @DataTracerFieldLabel("详细地址") + private String address; + + /** + * 营业执照 + */ + @DataTracerFieldLabel("营业执照") + private String businessLicense; + + /** + * 禁用状态 + */ + @DataTracerFieldLabel("禁用状态") + private Boolean disabledFlag; + + /** + * 删除状态 + */ + @DataTracerFieldLabel("删除状态") + private Boolean deletedFlag; + + /** + * 创建人ID + */ + private Long createUserId; + + /** + * 创建人ID + */ + private String createUserName; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseCreateForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseCreateForm.java new file mode 100644 index 00000000..4db85d21 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseCreateForm.java @@ -0,0 +1,101 @@ +package net.lab1024.sa.admin.module.business.oa.enterprise.domain.form; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.admin.module.business.oa.enterprise.constant.EnterpriseTypeEnum; +import net.lab1024.sa.common.common.json.deserializer.FileKeyVoDeserializer; +import net.lab1024.sa.common.common.json.serializer.FileKeyVoSerializer; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; +import net.lab1024.sa.common.common.util.SmartVerificationUtil; +import net.lab1024.sa.common.common.validator.enumeration.CheckEnum; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; + +/** + * OA企业模块创建 + * + * @Author 1024创新实验室: 开云 + * @Date 2022/7/28 20:37:15 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class EnterpriseCreateForm { + + @ApiModelProperty("企业名称") + @NotBlank(message = "企业名称不能为空") + @Length(max = 200, message = "企业名称最多200字符") + private String enterpriseName; + + @ApiModelProperty("企业logo") + @JsonSerialize(using = FileKeyVoSerializer.class) + @JsonDeserialize(using = FileKeyVoDeserializer.class) + private String enterpriseLogo; + + @ApiModelProperty("统一社会信用代码") + @NotBlank(message = "统一社会信用代码不能为空") + @Length(max = 200, message = "统一社会信用代码最多200字符") + private String unifiedSocialCreditCode; + + @ApiModelProperty("联系人") + @NotBlank(message = "联系人不能为空") + @Length(max = 100, message = "联系人最多100字符") + private String contact; + + @ApiModelProperty("联系人电话") + @NotBlank(message = "联系人电话不能为空") + @Pattern(regexp = SmartVerificationUtil.PHONE_REGEXP, message = "手机号格式不正确") + private String contactPhone; + + @ApiModelPropertyEnum(desc = "类型", value = EnterpriseTypeEnum.class) + @CheckEnum(message = "类型不正确", value = EnterpriseTypeEnum.class) + private Integer type; + + @ApiModelProperty("邮箱") + @Pattern(regexp = SmartVerificationUtil.EMAIL, message = "邮箱格式不正确") + private String email; + + @ApiModelProperty("省份") + private Integer province; + + @ApiModelProperty("省份名称") + private String provinceName; + + @ApiModelProperty("城市") + private Integer city; + + @ApiModelProperty("城市名称") + private String cityName; + + @ApiModelProperty("区县") + private Integer district; + + @ApiModelProperty("区县名称") + private String districtName; + + @ApiModelProperty("详细地址") + @Length(max = 500, message = "详细地址最多500字符") + private String address; + + @ApiModelProperty("营业执照") + @JsonSerialize(using = FileKeyVoSerializer.class) + @JsonDeserialize(using = FileKeyVoDeserializer.class) + private String businessLicense; + + @ApiModelProperty("禁用状态") + @NotNull(message = "禁用状态不能为空") + private Boolean disabledFlag; + + @ApiModelProperty(value = "创建人", hidden = true) + private Long createUserId; + + @ApiModelProperty(value = "创建人", hidden = true) + private String createUserName; + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseEmployeeForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseEmployeeForm.java new file mode 100644 index 00000000..84897956 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseEmployeeForm.java @@ -0,0 +1,29 @@ +package net.lab1024.sa.admin.module.business.oa.enterprise.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * 企业员工 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022/7/28 20:37:15 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class EnterpriseEmployeeForm { + + @ApiModelProperty("企业id") + @NotNull(message = "企业id不能为空") + private Long enterpriseId; + + @ApiModelProperty("员工信息id") + @NotEmpty(message = "员工信息id不能为空") + private List employeeIdList; +} \ No newline at end of file diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseEmployeeQueryForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseEmployeeQueryForm.java new file mode 100644 index 00000000..33b6a738 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseEmployeeQueryForm.java @@ -0,0 +1,35 @@ +package net.lab1024.sa.admin.module.business.oa.enterprise.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.domain.PageParam; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.util.List; + +/** + * 查询企业员工 + * + * @Author 1024创新实验室: 开云 + * @Date 2021-12-20 21:06:49 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class EnterpriseEmployeeQueryForm extends PageParam { + + @ApiModelProperty("搜索词") + @Length(max = 20, message = "搜索词最多20字符") + private String keyword; + + @ApiModelProperty("公司Id") + @NotNull(message = "公司id 不能为空") + private Long enterpriseId; + + @ApiModelProperty(value = "删除标识", hidden = true) + private Boolean deletedFlag; + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseQueryForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseQueryForm.java new file mode 100644 index 00000000..06fd5783 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseQueryForm.java @@ -0,0 +1,38 @@ +package net.lab1024.sa.admin.module.business.oa.enterprise.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.domain.PageParam; +import org.hibernate.validator.constraints.Length; + +import java.time.LocalDate; + +/** + * OA企业模块分页查询 + * + * @Author 1024创新实验室: 开云 + * @Date 2022/7/28 20:37:15 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class EnterpriseQueryForm extends PageParam { + + @ApiModelProperty("关键字") + @Length(max = 200, message = "关键字最多200字符") + private String keywords; + + @ApiModelProperty("开始时间") + private LocalDate startTime; + + @ApiModelProperty("结束时间") + private LocalDate endTime; + + @ApiModelProperty("禁用状态") + private Boolean disabledFlag; + + @ApiModelProperty(value = "删除状态", hidden = true) + private Boolean deletedFlag; + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseUpdateForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseUpdateForm.java new file mode 100644 index 00000000..200e15e7 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseUpdateForm.java @@ -0,0 +1,23 @@ +package net.lab1024.sa.admin.module.business.oa.enterprise.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * OA企业模块编辑 + * + * @Author 1024创新实验室: 开云 + * @Date 2022/7/28 20:37:15 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class EnterpriseUpdateForm extends EnterpriseCreateForm { + + @ApiModelProperty("企业ID") + @NotNull(message = "企业ID不能为空") + private Long enterpriseId; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/vo/EnterpriseEmployeeVO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/vo/EnterpriseEmployeeVO.java new file mode 100644 index 00000000..0e37ee59 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/vo/EnterpriseEmployeeVO.java @@ -0,0 +1,47 @@ +package net.lab1024.sa.admin.module.business.oa.enterprise.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 企业员工信息 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022/7/28 20:37:15 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class EnterpriseEmployeeVO { + + private Long enterpriseEmployeeId; + + @ApiModelProperty("企业ID") + private Long enterpriseId; + + @ApiModelProperty("企业名称") + private String enterpriseName; + + @ApiModelProperty("员工") + private Long employeeId; + + @ApiModelProperty("登录账号") + private String loginName; + + @ApiModelProperty("员工名称") + private String actualName; + + @ApiModelProperty("手机号码") + private String phone; + + @ApiModelProperty("部门id") + private Long departmentId; + + @ApiModelProperty("是否被禁用") + private Boolean disabledFlag; + + @ApiModelProperty("部门名称") + private String departmentName; + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/vo/EnterpriseListVO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/vo/EnterpriseListVO.java new file mode 100644 index 00000000..806ff89d --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/vo/EnterpriseListVO.java @@ -0,0 +1,20 @@ +package net.lab1024.sa.admin.module.business.oa.enterprise.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * OA企业模块列表 + * + * @author lihaifan + * @date 2022/6/23 14:31 + */ +@Data +public class EnterpriseListVO { + + @ApiModelProperty("企业ID") + private Long enterpriseId; + + @ApiModelProperty("企业名称") + private String enterpriseName; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/vo/EnterpriseVO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/vo/EnterpriseVO.java new file mode 100644 index 00000000..828424e5 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/vo/EnterpriseVO.java @@ -0,0 +1,89 @@ +package net.lab1024.sa.admin.module.business.oa.enterprise.domain.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.admin.module.business.oa.enterprise.constant.EnterpriseTypeEnum; +import net.lab1024.sa.common.common.json.serializer.FileKeyVoSerializer; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; + +import java.time.LocalDateTime; + +/** + * 企业信息 + * + * @Author 1024创新实验室: 开云 + * @Date 2022/7/28 20:37:15 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class EnterpriseVO { + + @ApiModelProperty("企业ID") + private Long enterpriseId; + + @ApiModelProperty("企业名称") + private String enterpriseName; + + @ApiModelProperty("企业logo") + @JsonSerialize(using = FileKeyVoSerializer.class) + private String enterpriseLogo; + + @ApiModelProperty("统一社会信用代码") + private String unifiedSocialCreditCode; + + @ApiModelPropertyEnum(desc = "类型", value = EnterpriseTypeEnum.class) + private Integer type; + + @ApiModelProperty("联系人") + private String contact; + + @ApiModelProperty("联系人电话") + private String contactPhone; + + @ApiModelProperty("邮箱") + private String email; + + @ApiModelProperty("省份") + private Integer province; + + @ApiModelProperty("省份名称") + private String provinceName; + + @ApiModelProperty("城市") + private Integer city; + + @ApiModelProperty("城市名称") + private String cityName; + + @ApiModelProperty("区县") + private Integer district; + + @ApiModelProperty("区县名称") + private String districtName; + + @ApiModelProperty("详细地址") + private String address; + + @ApiModelProperty("营业执照") + @JsonSerialize(using = FileKeyVoSerializer.class) + private String businessLicense; + + @ApiModelProperty("禁用状态") + private Boolean disabledFlag; + + @ApiModelProperty("创建人ID") + private Long createUserId; + + @ApiModelProperty("创建人名称") + private String createUserName; + + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + + @ApiModelProperty("更新时间") + private LocalDateTime updateTime; + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/InvoiceController.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/InvoiceController.java new file mode 100644 index 00000000..40909dc9 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/InvoiceController.java @@ -0,0 +1,80 @@ +package net.lab1024.sa.admin.module.business.oa.invoice; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.admin.constant.AdminSwaggerTagConst; +import net.lab1024.sa.admin.module.business.oa.invoice.domain.InvoiceAddForm; +import net.lab1024.sa.admin.module.business.oa.invoice.domain.InvoiceQueryForm; +import net.lab1024.sa.admin.module.business.oa.invoice.domain.InvoiceUpdateForm; +import net.lab1024.sa.admin.module.business.oa.invoice.domain.InvoiceVO; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.RequestUser; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartRequestUtil; +import net.lab1024.sa.common.module.support.operatelog.annoation.OperateLog; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * OA发票信息 + * + * @Author 1024创新实验室: 善逸 + * @Date 2022-06-23 19:32:59 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Slf4j +@RestController +@OperateLog +@Api(tags = {AdminSwaggerTagConst.Business.OA_INVOICE}) +public class InvoiceController { + + @Autowired + private InvoiceService invoiceService; + + @ApiOperation(value = "分页查询发票信息 @author 善逸") + @PostMapping("/oa/invoice/page/query") + public ResponseDTO> queryByPage(@RequestBody @Valid InvoiceQueryForm queryDTO) { + return invoiceService.queryByPage(queryDTO); + } + + @ApiOperation(value = "查询发票信息详情 @author 善逸") + @GetMapping("/oa/invoice/get/{invoiceId}") + public ResponseDTO getDetail(@PathVariable Long invoiceId) { + return invoiceService.getDetail(invoiceId); + } + + @ApiOperation(value = "新建发票信息 @author 善逸") + @PostMapping("/oa/invoice/create") + public ResponseDTO createInvoice(@RequestBody @Valid InvoiceAddForm createVO) { + RequestUser requestUser = SmartRequestUtil.getRequestUser(); + createVO.setCreateUserId(requestUser.getUserId()); + createVO.setCreateUserName(requestUser.getUserName()); + return invoiceService.createInvoice(createVO); + } + + @ApiOperation(value = "编辑发票信息 @author 善逸") + @PostMapping("/oa/invoice/update") + public ResponseDTO updateInvoice(@RequestBody @Valid InvoiceUpdateForm updateVO) { + return invoiceService.updateInvoice(updateVO); + } + + @ApiOperation(value = "删除发票信息 @author 善逸") + @GetMapping("/invoice/delete/{invoiceId}") + public ResponseDTO deleteInvoice(@PathVariable Long invoiceId) { + return invoiceService.deleteInvoice(invoiceId); + } + + @ApiOperation(value = "查询列表 @author lidoudou") + @GetMapping("/oa/invoice/query/list/{enterpriseId}") + public ResponseDTO> queryList(@PathVariable Long enterpriseId) { + return invoiceService.queryList(enterpriseId); + } + + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/InvoiceDao.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/InvoiceDao.java new file mode 100644 index 00000000..371a4edb --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/InvoiceDao.java @@ -0,0 +1,61 @@ +package net.lab1024.sa.admin.module.business.oa.invoice; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.lab1024.sa.admin.module.business.oa.invoice.domain.InvoiceEntity; +import net.lab1024.sa.admin.module.business.oa.invoice.domain.InvoiceQueryForm; +import net.lab1024.sa.admin.module.business.oa.invoice.domain.InvoiceVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * OA发票信息 + * + * @Author 1024创新实验室: 善逸 + * @Date 2022-06-23 19:32:59 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Mapper +@Component +public interface InvoiceDao extends BaseMapper { + + /** + * 根据账号查询 + * @param enterpriseId + * @param accountNumber + * @param excludeInvoiceId + * @param deletedFlag + * @return + */ + InvoiceEntity queryByAccountNumber(@Param("enterpriseId") Long enterpriseId, @Param("accountNumber") String accountNumber, @Param("excludeInvoiceId") Long excludeInvoiceId, @Param("deletedFlag") Boolean deletedFlag); + + /** + * 删除发票信息 + * + * @param invoiceId + * @param deletedFlag + */ + void deleteInvoice(@Param("invoiceId") Long invoiceId, @Param("deletedFlag") Boolean deletedFlag); + + /** + * 发票信息分页查询 + * + * @param page + * @param queryForm + * @return + */ + List queryPage(Page page, @Param("queryForm") InvoiceQueryForm queryForm); + + /** + * 查询发票信息详情 + * @param invoiceId + * @param deletedFlag + * @return + */ + InvoiceVO getDetail(@Param("invoiceId") Long invoiceId, @Param("deletedFlag") Boolean deletedFlag); +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/InvoiceService.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/InvoiceService.java new file mode 100644 index 00000000..70afe51d --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/InvoiceService.java @@ -0,0 +1,158 @@ +package net.lab1024.sa.admin.module.business.oa.invoice; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseService; +import net.lab1024.sa.admin.module.business.oa.enterprise.domain.vo.EnterpriseVO; +import net.lab1024.sa.admin.module.business.oa.invoice.domain.*; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import net.lab1024.sa.common.common.util.SmartPageUtil; +import net.lab1024.sa.common.module.support.datatracer.constant.DataTracerConst; +import net.lab1024.sa.common.module.support.datatracer.constant.DataTracerTypeEnum; +import net.lab1024.sa.common.module.support.datatracer.service.DataTracerService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Objects; + +/** + * OA发票信息 + * + * @Author 1024创新实验室: 善逸 + * @Date 2022-06-23 19:32:59 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Service +@Slf4j +public class InvoiceService { + + @Autowired + private InvoiceDao invoiceDao; + + @Autowired + private EnterpriseService enterpriseService; + + @Autowired + private DataTracerService dataTracerService; + + /** + * 分页查询发票信息 + * + * @param queryDTO + * @return + */ + public ResponseDTO> queryByPage(InvoiceQueryForm queryDTO) { + queryDTO.setDeletedFlag(Boolean.FALSE); + Page page = SmartPageUtil.convert2PageQuery(queryDTO); + List invoiceVOS = invoiceDao.queryPage(page, queryDTO); + PageResult pageResult = SmartPageUtil.convert2PageResult(page, invoiceVOS); + return ResponseDTO.ok(pageResult); + } + + public ResponseDTO> queryList(Long enterpriseId) { + InvoiceQueryForm queryForm = new InvoiceQueryForm(); + queryForm.setDeletedFlag(Boolean.FALSE); + queryForm.setDisabledFlag(Boolean.FALSE); + queryForm.setEnterpriseId(enterpriseId); + List invoiceList = invoiceDao.queryPage(null, queryForm); + return ResponseDTO.ok(invoiceList); + } + + /** + * 查询发票信息详情 + * + * @param invoiceId + * @return + */ + public ResponseDTO getDetail(Long invoiceId) { + // 校验发票信息是否存在 + InvoiceVO invoiceVO = invoiceDao.getDetail(invoiceId, Boolean.FALSE); + if (Objects.isNull(invoiceVO)) { + return ResponseDTO.userErrorParam("发票信息不存在"); + } + return ResponseDTO.ok(invoiceVO); + } + + /** + * 新建发票信息 + * + * @param createVO + * @return + */ + @Transactional(rollbackFor = Exception.class) + public ResponseDTO createInvoice(InvoiceAddForm createVO) { + Long enterpriseId = createVO.getEnterpriseId(); + // 校验企业是否存在 + EnterpriseVO enterpriseVO = enterpriseService.getDetail(enterpriseId); + if (Objects.isNull(enterpriseVO)) { + return ResponseDTO.userErrorParam("企业不存在"); + } + // 验证发票信息账号是否重复 + InvoiceEntity validateInvoice = invoiceDao.queryByAccountNumber(enterpriseId, createVO.getAccountNumber(), null, Boolean.FALSE); + if (Objects.nonNull(validateInvoice)) { + return ResponseDTO.userErrorParam("发票信息账号重复"); + } + // 数据插入 + InvoiceEntity insertInvoice = SmartBeanUtil.copy(createVO, InvoiceEntity.class); + invoiceDao.insert(insertInvoice); + dataTracerService.addTrace(enterpriseId, DataTracerTypeEnum.OA_ENTERPRISE, "新增发票:" + DataTracerConst.HTML_BR + dataTracerService.getChangeContent(insertInvoice)); + return ResponseDTO.ok(); + } + + /** + * 编辑发票信息 + * + * @param updateVO + * @return + */ + @Transactional(rollbackFor = Exception.class) + public ResponseDTO updateInvoice(InvoiceUpdateForm updateVO) { + Long enterpriseId = updateVO.getEnterpriseId(); + // 校验企业是否存在 + EnterpriseVO enterpriseVO = enterpriseService.getDetail(enterpriseId); + if (Objects.isNull(enterpriseVO)) { + return ResponseDTO.userErrorParam("企业不存在"); + } + Long invoiceId = updateVO.getInvoiceId(); + // 校验发票信息是否存在 + InvoiceEntity invoiceDetail = invoiceDao.selectById(invoiceId); + if (Objects.isNull(invoiceDetail) || invoiceDetail.getDeletedFlag()) { + return ResponseDTO.userErrorParam("发票信息不存在"); + } + // 验证发票信息账号是否重复 + InvoiceEntity validateInvoice = invoiceDao.queryByAccountNumber(updateVO.getEnterpriseId(), updateVO.getAccountNumber(), invoiceId, Boolean.FALSE); + if (Objects.nonNull(validateInvoice)) { + return ResponseDTO.userErrorParam("发票信息账号重复"); + } + // 数据编辑 + InvoiceEntity updateInvoice = SmartBeanUtil.copy(updateVO, InvoiceEntity.class); + invoiceDao.updateById(updateInvoice); + dataTracerService.addTrace(enterpriseId, DataTracerTypeEnum.OA_ENTERPRISE, "更新发票:" + DataTracerConst.HTML_BR + dataTracerService.getChangeContent(invoiceDetail, updateInvoice)); + return ResponseDTO.ok(); + } + + + /** + * 删除发票信息 + + * @param invoiceId + * @return + */ + @Transactional(rollbackFor = Exception.class) + public ResponseDTO deleteInvoice(Long invoiceId) { + // 校验发票信息是否存在 + InvoiceEntity invoiceDetail = invoiceDao.selectById(invoiceId); + if (Objects.isNull(invoiceDetail) || invoiceDetail.getDeletedFlag()) { + return ResponseDTO.userErrorParam("发票信息不存在"); + } + invoiceDao.deleteInvoice(invoiceId, Boolean.TRUE); + dataTracerService.addTrace(invoiceDetail.getEnterpriseId(), DataTracerTypeEnum.OA_ENTERPRISE, "删除发票:" + DataTracerConst.HTML_BR + dataTracerService.getChangeContent(invoiceDetail)); + return ResponseDTO.ok(); + } +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceAddForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceAddForm.java new file mode 100644 index 00000000..0a87edee --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceAddForm.java @@ -0,0 +1,59 @@ +package net.lab1024.sa.admin.module.business.oa.invoice.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * OA发票信息新建 + * + * @Author 1024创新实验室: 善逸 + * @Date 2022-06-23 19:32:59 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class InvoiceAddForm { + + @ApiModelProperty("开票抬头") + @NotBlank(message = "开票抬头不能为空") + @Length(max = 200, message = "开票抬头最多200字符") + private String invoiceHeads; + + @ApiModelProperty("纳税人识别号") + @NotBlank(message = "纳税人识别号不能为空") + @Length(max = 200, message = "纳税人识别号最多200字符") + private String taxpayerIdentificationNumber; + + @ApiModelProperty("银行账户") + @NotBlank(message = "银行账户不能为空") + @Length(max = 200, message = "银行账户最多200字符") + private String accountNumber; + + @ApiModelProperty("开户行") + @NotBlank(message = "开户行不能为空") + @Length(max = 200, message = "开户行最多200字符") + private String bankName; + + @ApiModelProperty("启用状态") + @NotNull(message = "启用状态不能为空") + private Boolean disabledFlag; + + @ApiModelProperty("备注") + @Length(max = 500, message = "备注最多500字符") + private String remark; + + @ApiModelProperty("企业") + @NotNull(message = "企业不能为空") + private Long enterpriseId; + + @ApiModelProperty(value = "创建人", hidden = true) + private Long createUserId; + + @ApiModelProperty(value = "创建人名称", hidden = true) + private String createUserName; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceEntity.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceEntity.java new file mode 100644 index 00000000..bc7d563a --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceEntity.java @@ -0,0 +1,98 @@ +package net.lab1024.sa.admin.module.business.oa.invoice.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import net.lab1024.sa.common.module.support.datatracer.annoation.DataTracerFieldLabel; + +import java.time.LocalDateTime; + +/** + * OA发票信息 + * + * @Author 1024创新实验室: 善逸 + * @Date 2022-06-23 19:32:59 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +@TableName("t_oa_invoice") +public class InvoiceEntity { + + /** + * 发票信息ID + */ + @TableId(type = IdType.AUTO) + private Long invoiceId; + + /** + * 开票抬头 + */ + @DataTracerFieldLabel("开票抬头") + private String invoiceHeads; + + /** + * 纳税人识别号 + */ + @DataTracerFieldLabel("纳税人识别号") + private String taxpayerIdentificationNumber; + + /** + * 银行账户 + */ + @DataTracerFieldLabel("银行账户") + private String accountNumber; + + /** + * 开户行 + */ + @DataTracerFieldLabel("开户行") + private String bankName; + + /** + * 备注 + */ + @DataTracerFieldLabel("备注") + private String remark; + + /** + * 企业ID + */ + private Long enterpriseId; + + /** + * 禁用状态 + */ + @DataTracerFieldLabel("禁用状态") + private Boolean disabledFlag; + + /** + * 删除状态 + */ + @DataTracerFieldLabel("删除状态") + private Boolean deletedFlag; + + /** + * 创建人ID + */ + private Long createUserId; + + /** + * 创建人ID + */ + private String createUserName; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; + + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceQueryForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceQueryForm.java new file mode 100644 index 00000000..0883bd3f --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceQueryForm.java @@ -0,0 +1,40 @@ +package net.lab1024.sa.admin.module.business.oa.invoice.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.domain.PageParam; +import org.hibernate.validator.constraints.Length; + +import java.time.LocalDate; + +/** + * OA发票信息查询 + * + * @Author 1024创新实验室: 善逸 + * @Date 2022-06-23 19:32:59 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class InvoiceQueryForm extends PageParam { + + @ApiModelProperty("企业ID") + private Long enterpriseId; + + @ApiModelProperty("关键字") + @Length(max = 200, message = "关键字最多200字符") + private String keywords; + + @ApiModelProperty("开始时间") + private LocalDate startTime; + + @ApiModelProperty("结束时间") + private LocalDate endTime; + + @ApiModelProperty("禁用状态") + private Boolean disabledFlag; + + @ApiModelProperty(value = "删除状态", hidden = true) + private Boolean deletedFlag; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceUpdateForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceUpdateForm.java new file mode 100644 index 00000000..053d4934 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceUpdateForm.java @@ -0,0 +1,23 @@ +package net.lab1024.sa.admin.module.business.oa.invoice.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * OA发票信息编辑 + * + * @Author 1024创新实验室: 善逸 + * @Date 2022-06-23 19:32:59 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class InvoiceUpdateForm extends InvoiceAddForm { + + @ApiModelProperty("发票信息ID") + @NotNull(message = "发票信息ID不能为空") + private Long invoiceId; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceVO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceVO.java new file mode 100644 index 00000000..2c8fb0e9 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceVO.java @@ -0,0 +1,58 @@ +package net.lab1024.sa.admin.module.business.oa.invoice.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * OA发票信息 + * + * @Author 1024创新实验室: 善逸 + * @Date 2022-06-23 19:32:59 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class InvoiceVO { + + @ApiModelProperty("发票信息ID") + private Long invoiceId; + + @ApiModelProperty("开票抬头") + private String invoiceHeads; + + @ApiModelProperty("纳税人识别号") + private String taxpayerIdentificationNumber; + + @ApiModelProperty("银行账户") + private String accountNumber; + + @ApiModelProperty("开户行") + private String bankName; + + @ApiModelProperty("备注") + private String remark; + + @ApiModelProperty("企业") + private Long enterpriseId; + + @ApiModelProperty("企业名称") + private String enterpriseName; + + @ApiModelProperty("禁用状态") + private Boolean disabledFlag; + + @ApiModelProperty("创建人ID") + private Long createUserId; + + @ApiModelProperty("创建人名称") + private String createUserName; + + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + + @ApiModelProperty("更新时间") + private LocalDateTime updateTime; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/constant/NoticeVisibleRangeDataTypeEnum.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/constant/NoticeVisibleRangeDataTypeEnum.java new file mode 100644 index 00000000..27f4d163 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/constant/NoticeVisibleRangeDataTypeEnum.java @@ -0,0 +1,30 @@ +package net.lab1024.sa.admin.module.business.oa.notice.constant; + + +import lombok.AllArgsConstructor; +import lombok.Getter; +import net.lab1024.sa.common.common.enumeration.BaseEnum; + +/** + * 公告、通知 可见范围类型 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-12 21:40:39 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Getter +@AllArgsConstructor +public enum NoticeVisibleRangeDataTypeEnum implements BaseEnum { + + EMPLOYEE(1, "员工"), + + DEPARTMENT(2, "部门"), + + ; + + private final Integer value; + + private final String desc; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/controller/NoticeController.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/controller/NoticeController.java new file mode 100644 index 00000000..a06bcf12 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/controller/NoticeController.java @@ -0,0 +1,138 @@ +package net.lab1024.sa.admin.module.business.oa.notice.controller; + +import cn.hutool.extra.servlet.ServletUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.admin.constant.AdminSwaggerTagConst; +import net.lab1024.sa.admin.module.business.oa.notice.domain.form.*; +import net.lab1024.sa.admin.module.business.oa.notice.domain.vo.*; +import net.lab1024.sa.admin.module.business.oa.notice.service.NoticeEmployeeService; +import net.lab1024.sa.admin.module.business.oa.notice.service.NoticeService; +import net.lab1024.sa.admin.module.business.oa.notice.service.NoticeTypeService; +import net.lab1024.sa.common.common.annoation.SaAuth; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartRequestUtil; +import net.lab1024.sa.common.module.support.repeatsubmit.annoation.RepeatSubmit; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import javax.validation.Valid; +import java.util.List; + +/** + * 公告、通知、新闻等等 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-12 21:40:39 + * @Wechat 卓大1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Api(tags = AdminSwaggerTagConst.Business.OA_NOTICE) +@RestController +public class NoticeController { + + @Autowired + private NoticeService noticeService; + + @Autowired + private NoticeTypeService noticeTypeService; + + @Autowired + private NoticeEmployeeService noticeEmployeeService; + + // --------------------- 通知公告类型 ------------------------- + + @ApiOperation("通知公告类型-获取全部 @author 卓大") + @GetMapping("/oa/noticeType/getAll") + public ResponseDTO> getAll() { + return ResponseDTO.ok(noticeTypeService.getAll()); + } + + @ApiOperation("通知公告类型-添加 @author 卓大") + @GetMapping("/oa/noticeType/add/{name}") + public ResponseDTO add(@PathVariable String name) { + return noticeTypeService.add(name); + } + + @ApiOperation("通知公告类型-修改 @author 卓大") + @GetMapping("/oa/noticeType/update/{noticeTypeId}/{name}") + public ResponseDTO update(@PathVariable Long noticeTypeId, @PathVariable String name) { + return noticeTypeService.update(noticeTypeId, name); + } + + @ApiOperation("通知公告类型-删除 @author 卓大") + @GetMapping("/oa/noticeType/delete/{noticeTypeId}") + public ResponseDTO deleteNoticeType(@PathVariable Long noticeTypeId) { + return noticeTypeService.delete(noticeTypeId); + } + + // --------------------- 【管理】通知公告------------------------- + + @ApiOperation("【管理】通知公告-分页查询 @author 卓大") + @PostMapping("/oa/notice/query") + @SaAuth + public ResponseDTO> query(@RequestBody @Valid NoticeQueryForm queryForm) { + return ResponseDTO.ok(noticeService.query(queryForm)); + } + + @ApiOperation("【管理】通知公告-添加 @author 卓大") + @PostMapping("/oa/notice/add") + @RepeatSubmit + @SaAuth + public ResponseDTO add(@RequestBody @Valid NoticeAddForm addForm) { + addForm.setCreateUserId(SmartRequestUtil.getRequestUserId()); + return noticeService.add(addForm); + } + + @ApiOperation("【管理】通知公告-更新 @author 卓大") + @PostMapping("/oa/notice/update") + @RepeatSubmit + @SaAuth + public ResponseDTO update(@RequestBody @Valid NoticeUpdateForm updateForm) { + return noticeService.update(updateForm); + } + + @ApiOperation("【管理】通知公告-更新详情 @author 卓大") + @GetMapping("/oa/notice/getUpdateVO/{noticeId}") + @SaAuth + public ResponseDTO getUpdateFormVO(@PathVariable Long noticeId) { + return ResponseDTO.ok(noticeService.getUpdateFormVO(noticeId)); + } + + @ApiOperation("【管理】通知公告-删除 @author 卓大") + @GetMapping("/oa/notice/delete/{noticeId}") + @SaAuth + public ResponseDTO delete(@PathVariable Long noticeId) { + return noticeService.delete(noticeId); + } + + // --------------------- 【员工】查看 通知公告 ------------------------- + @ApiOperation("【员工】通知公告-查看详情 @author 卓大") + @GetMapping("/oa/notice/employee/view/{noticeId}") + @RepeatSubmit + public ResponseDTO view(@PathVariable Long noticeId, HttpServletRequest request) { + return noticeEmployeeService.view( + SmartRequestUtil.getRequestUserId(), + noticeId, + ServletUtil.getClientIP(request), + request.getHeader("User-Agent") + ); + } + + @ApiOperation("【员工】通知公告-查询全部 @author 卓大") + @PostMapping("/oa/notice/employee/query") + @RepeatSubmit + public ResponseDTO> queryEmployeeNotice(@RequestBody @Valid NoticeEmployeeQueryForm noticeEmployeeQueryForm) { + return noticeEmployeeService.queryList(SmartRequestUtil.getRequestUserId(), noticeEmployeeQueryForm); + } + + @ApiOperation("【员工】通知公告-查询 查看记录 @author 卓大") + @PostMapping("/oa/notice/employee/queryViewRecord") + @RepeatSubmit + public ResponseDTO> queryViewRecord(@RequestBody @Valid NoticeViewRecordQueryForm noticeViewRecordQueryForm) { + return ResponseDTO.ok(noticeEmployeeService.queryViewRecord(noticeViewRecordQueryForm)); + } +} \ No newline at end of file diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/dao/NoticeDao.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/dao/NoticeDao.java new file mode 100644 index 00000000..aba10192 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/dao/NoticeDao.java @@ -0,0 +1,144 @@ +package net.lab1024.sa.admin.module.business.oa.notice.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.lab1024.sa.admin.module.business.oa.notice.domain.entity.NoticeEntity; +import net.lab1024.sa.admin.module.business.oa.notice.domain.form.NoticeEmployeeQueryForm; +import net.lab1024.sa.admin.module.business.oa.notice.domain.form.NoticeQueryForm; +import net.lab1024.sa.admin.module.business.oa.notice.domain.form.NoticeViewRecordQueryForm; +import net.lab1024.sa.admin.module.business.oa.notice.domain.form.NoticeVisibleRangeForm; +import net.lab1024.sa.admin.module.business.oa.notice.domain.vo.NoticeEmployeeVO; +import net.lab1024.sa.admin.module.business.oa.notice.domain.vo.NoticeVO; +import net.lab1024.sa.admin.module.business.oa.notice.domain.vo.NoticeViewRecordVO; +import net.lab1024.sa.admin.module.business.oa.notice.domain.vo.NoticeVisibleRangeVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 公告、通知、新闻等等 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-12 21:40:39 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Mapper +@Component +public interface NoticeDao extends BaseMapper { + + // ================================= 数据范围相关 【子表】 ================================= + + /** + * 保存可见范围 + * + * @param noticeId + * @param visibleRangeFormList + */ + void insertVisibleRange(@Param("noticeId") Long noticeId, @Param("visibleRangeFormList") List visibleRangeFormList); + + /** + * 删除可见范围 + * + * @param noticeId + */ + void deleteVisibleRange(@Param("noticeId") Long noticeId); + + /** + * 相关可见范围 + * + * @param noticeId + */ + List queryVisibleRange(@Param("noticeId") Long noticeId); + + // ================================= 通知公告【主表】 相关 ================================= + + /** + * 后管分页查询资讯 + * + * @param page + * @param queryForm + * @return + */ + List query(Page page, @Param("query") NoticeQueryForm queryForm); + + + /** + * 更新删除状态 + * + * @param noticeId + */ + void updateDeletedFlag(@Param("noticeId") Long noticeId); + + // ================================= 通知公告【员工查看】 相关 ================================= + + /** + * 查询 员工 查看到的通知公告 + * + * @param page + * @param requestEmployeeId + * @param noticeEmployeeQueryForm + * @return + */ + List queryEmployeeNotice(Page page, + @Param("requestEmployeeId") Long requestEmployeeId, + @Param("query") NoticeEmployeeQueryForm noticeEmployeeQueryForm, + @Param("requestEmployeeDepartmentIdList") List requestEmployeeDepartmentIdList, + @Param("deletedFlag") boolean deletedFlag, + @Param("administratorFlag") boolean administratorFlag, + @Param("departmentDataType") Integer departmentDataType, + @Param("employeeDataType") Integer employeeDataType + + ); + + /** + * 查询 员工 未读的通知公告 + * + * @param page + * @param requestEmployeeId + * @param noticeEmployeeQueryForm + * @return + */ + List queryEmployeeNotViewNotice(Page page, + @Param("requestEmployeeId") Long requestEmployeeId, + @Param("query") NoticeEmployeeQueryForm noticeEmployeeQueryForm, + @Param("requestEmployeeDepartmentIdList") List requestEmployeeDepartmentIdList, + @Param("deletedFlag") boolean deletedFlag, + @Param("administratorFlag") boolean administratorFlag, + @Param("departmentDataType") Integer departmentDataType, + @Param("employeeDataType") Integer employeeDataType + + ); + + long viewRecordCount(@Param("noticeId")Long noticeId, @Param("employeeId")Long employeeId); + + /** + * 查询通知、公告的 查看记录 + * @param page + * @param noticeViewRecordQueryForm + * @return + */ + List queryNoticeViewRecordList(Page page,@Param("queryForm") NoticeViewRecordQueryForm noticeViewRecordQueryForm); + + /** + * 保存查看记录 + * @param noticeId + * @param employeeId + * @param ip + * @param userAgent + */ + void insertViewRecord(@Param("noticeId") Long noticeId, @Param("employeeId") Long employeeId, @Param("ip") String ip, @Param("userAgent") String userAgent,@Param("pageViewCount") Integer pageViewCount); + + /** + * 更新查看记录 + * @param noticeId + * @param requestEmployeeId + * @param ip + * @param userAgent + */ + void updateViewRecord(@Param("noticeId")Long noticeId, @Param("employeeId")Long requestEmployeeId,@Param("ip") String ip, @Param("userAgent")String userAgent); + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/dao/NoticeTypeDao.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/dao/NoticeTypeDao.java new file mode 100644 index 00000000..456fe4dd --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/dao/NoticeTypeDao.java @@ -0,0 +1,21 @@ +package net.lab1024.sa.admin.module.business.oa.notice.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import net.lab1024.sa.admin.module.business.oa.notice.domain.entity.NoticeTypeEntity; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Component; + +/** + * 通知公告类型 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-12 21:40:39 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Mapper +@Component +public interface NoticeTypeDao extends BaseMapper { + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/entity/NoticeEntity.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/entity/NoticeEntity.java new file mode 100644 index 00000000..7dfaa513 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/entity/NoticeEntity.java @@ -0,0 +1,99 @@ +package net.lab1024.sa.admin.module.business.oa.notice.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 通知公告 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-12 21:40:39 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +@TableName("t_notice") +public class NoticeEntity { + + @TableId(type = IdType.AUTO) + private Long noticeId; + + /** + * 类型 + */ + private Long noticeTypeId; + + /** + * 标题 + */ + private String title; + + /** + * 是否全部可见 + */ + private Boolean allVisibleFlag; + + /** + * 是否定时发布 + */ + private Boolean scheduledPublishFlag; + + /** + * 发布时间 + */ + private LocalDateTime publishTime; + + /** + * 内容 纯文本 + */ + private String contentText; + + /** + * 内容 html + */ + private String contentHtml; + + /** + * 附件 + * 多个英文逗号分隔 + */ + private String attachment; + + /** + * 页面浏览量 + */ + private Integer pageViewCount; + + /** + * 用户浏览量 + */ + private Integer userViewCount; + + /** + * 来源 + */ + private String source; + + /** + * 作者 + */ + private String author; + + /** + * 文号 + */ + private String documentNumber; + + private Boolean deletedFlag; + + private Long createUserId; + + private LocalDateTime updateTime; + + private LocalDateTime createTime; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/entity/NoticeTypeEntity.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/entity/NoticeTypeEntity.java new file mode 100644 index 00000000..c749dced --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/entity/NoticeTypeEntity.java @@ -0,0 +1,41 @@ +package net.lab1024.sa.admin.module.business.oa.notice.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * 通知公告类型 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-12 21:40:39 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +@TableName("t_notice_type") +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class NoticeTypeEntity { + + @TableId(type = IdType.AUTO) + private Long noticeTypeId; + + /** + * 名称 + */ + private String noticeTypeName; + + + private LocalDateTime updateTime; + + private LocalDateTime createTime; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeAddForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeAddForm.java new file mode 100644 index 00000000..b83ba79a --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeAddForm.java @@ -0,0 +1,78 @@ +package net.lab1024.sa.admin.module.business.oa.notice.domain.form; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.json.deserializer.FileKeyVoDeserializer; +import org.hibernate.validator.constraints.Length; + +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.time.LocalDateTime; +import java.util.List; + +/** + * 通知公告 添加表单 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-12 21:40:39 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class NoticeAddForm { + + @ApiModelProperty("标题") + @NotBlank(message = "标题不能为空") + @Length(max = 200, message = "标题最多200字符") + private String title; + + @ApiModelProperty("分类") + @NotNull(message = "分类不能为空") + private Long noticeTypeId; + + @ApiModelProperty("是否全部可见") + @NotNull(message = "是否全部可见不能为空") + private Boolean allVisibleFlag; + + @ApiModelProperty("是否定时发布") + @NotNull(message = "是否定时发布不能为空") + private Boolean scheduledPublishFlag; + + @ApiModelProperty("发布时间") + @NotNull(message = "发布时间不能为空") + private LocalDateTime publishTime; + + @ApiModelProperty("纯文本内容") + @NotNull(message = "文本内容不能为空") + private String contentText; + + @ApiModelProperty("html内容") + @NotNull(message = "html内容不能为空") + private String contentHtml; + + @ApiModelProperty("附件,多个英文逗号分隔|可选") + @Length(max = 1000, message = "最多1000字符") + @JsonDeserialize(using = FileKeyVoDeserializer.class) + private String attachment; + + @ApiModelProperty("作者") + @NotBlank(message = "作者不能为空") + private String author; + + @ApiModelProperty("来源") + @NotBlank(message = "标题不能为空") + private String source; + + @ApiModelProperty("文号") + private String documentNumber; + + @ApiModelProperty(hidden = true) + private Long createUserId; + + @ApiModelProperty("可见范围设置|可选") + @Valid + private List visibleRangeList; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeEmployeeQueryForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeEmployeeQueryForm.java new file mode 100644 index 00000000..0374861c --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeEmployeeQueryForm.java @@ -0,0 +1,35 @@ +package net.lab1024.sa.admin.module.business.oa.notice.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.domain.PageParam; + +import java.time.LocalDate; + +/** + * 通知公告 员工查询表单 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-12 21:40:39 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class NoticeEmployeeQueryForm extends PageParam { + + @ApiModelProperty("标题、作者、来源、文号") + private String keywords; + + @ApiModelProperty("分类") + private Long noticeTypeId; + + @ApiModelProperty("发布-开始时间") + private LocalDate publishTimeBegin; + + @ApiModelProperty("未读标识") + private Boolean notViewFlag; + + @ApiModelProperty("发布-截止时间") + private LocalDate publishTimeEnd; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeQueryForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeQueryForm.java new file mode 100644 index 00000000..c319b2b6 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeQueryForm.java @@ -0,0 +1,48 @@ +package net.lab1024.sa.admin.module.business.oa.notice.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.domain.PageParam; + +import java.time.LocalDate; + +/** + * 通知公告 管理查询表单 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-12 21:40:39 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class NoticeQueryForm extends PageParam { + + @ApiModelProperty("分类") + private Long noticeTypeId; + + @ApiModelProperty("标题、作者、来源") + private String keywords; + + @ApiModelProperty("文号") + private String documentNumber; + + @ApiModelProperty("创建人") + private Long createUserId; + + @ApiModelProperty("删除标识") + private Boolean deletedFlag; + + @ApiModelProperty("创建-开始时间") + private LocalDate createTimeBegin; + + @ApiModelProperty("创建-截止时间") + private LocalDate createTimeEnd; + + @ApiModelProperty("发布-开始时间") + private LocalDate publishTimeBegin; + + @ApiModelProperty("发布-截止时间") + private LocalDate publishTimeEnd; + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeUpdateForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeUpdateForm.java new file mode 100644 index 00000000..c2ecb57d --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeUpdateForm.java @@ -0,0 +1,24 @@ +package net.lab1024.sa.admin.module.business.oa.notice.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * 通知公告 更新表单 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-12 21:40:39 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class NoticeUpdateForm extends NoticeAddForm { + + @ApiModelProperty("id") + @NotNull(message = "通知id不能为空") + private Long noticeId; + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeViewRecordQueryForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeViewRecordQueryForm.java new file mode 100644 index 00000000..7ac41f27 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeViewRecordQueryForm.java @@ -0,0 +1,32 @@ +package net.lab1024.sa.admin.module.business.oa.notice.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.domain.PageParam; + +import javax.validation.constraints.NotNull; + +/** + * 通知公告 阅读记录查询 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-12 21:40:39 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class NoticeViewRecordQueryForm extends PageParam { + + @ApiModelProperty("通知公告id") + @NotNull(message = "通知公告id不能为空") + private Long noticeId; + + @ApiModelProperty("部门id") + private Long departmentId; + + @ApiModelProperty("关键字") + private String keywords; + + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeVisibleRangeForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeVisibleRangeForm.java new file mode 100644 index 00000000..7a3b061b --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeVisibleRangeForm.java @@ -0,0 +1,34 @@ +package net.lab1024.sa.admin.module.business.oa.notice.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import net.lab1024.sa.admin.module.business.oa.notice.constant.NoticeVisibleRangeDataTypeEnum; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; +import net.lab1024.sa.common.common.validator.enumeration.CheckEnum; + +import javax.validation.constraints.NotNull; + +/** + * 通知公告 可见范围数据 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-12 21:40:39 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class NoticeVisibleRangeForm { + + @ApiModelPropertyEnum(NoticeVisibleRangeDataTypeEnum.class) + @CheckEnum(value = NoticeVisibleRangeDataTypeEnum.class, required = true, message = "数据类型错误") + private Integer dataType; + + @ApiModelProperty("员工/部门id") + @NotNull(message = "员工/部门id不能为空") + private Long dataId; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeDetailVO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeDetailVO.java new file mode 100644 index 00000000..72927bee --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeDetailVO.java @@ -0,0 +1,84 @@ +package net.lab1024.sa.admin.module.business.oa.notice.domain.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.json.serializer.FileKeyVoSerializer; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.time.LocalDateTime; + +/** + * 通知公告 详情 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-12 21:40:39 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class NoticeDetailVO { + + @ApiModelProperty("id") + private Long noticeId; + + @ApiModelProperty("标题") + private String title; + + @ApiModelProperty("分类") + private Long noticeTypeId; + + @ApiModelProperty("分类名称") + private Long noticeTypeName; + + @ApiModelProperty("是否全部可见") + @NotNull(message = "是否全部可见不能为空") + private Boolean allVisibleFlag; + + @ApiModelProperty("是否定时发布") + @NotNull(message = "是否定时发布不能为空") + private Boolean scheduledPublishFlag; + + @ApiModelProperty("纯文本内容") + private String contentText; + + @ApiModelProperty("html内容") + private String contentHtml; + + @ApiModelProperty("附件") + @JsonSerialize(using = FileKeyVoSerializer.class) + private String attachment; + + @ApiModelProperty("发布时间") + @NotNull(message = "发布时间不能为空") + private LocalDateTime publishTime; + + @ApiModelProperty("作者") + @NotBlank(message = "作者不能为空") + private String author; + + @ApiModelProperty("来源") + @NotBlank(message = "标题不能为空") + private String source; + + @ApiModelProperty("文号") + private String documentNumber; + + @ApiModelProperty("页面浏览量") + private Integer pageViewCount; + + @ApiModelProperty("用户浏览量") + private Integer userViewCount; + + @ApiModelProperty("创建人名称") + private Long createUserName; + + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + + @ApiModelProperty("更新时间") + private LocalDateTime updateTime; + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeEmployeeVO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeEmployeeVO.java new file mode 100644 index 00000000..b86044a1 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeEmployeeVO.java @@ -0,0 +1,26 @@ +package net.lab1024.sa.admin.module.business.oa.notice.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDate; + +/** + * 通知公告 员工查看 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-12 21:40:39 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class NoticeEmployeeVO extends NoticeVO { + + @ApiModelProperty("是否查看") + private Boolean viewFlag; + + @ApiModelProperty("发布日期") + private LocalDate publishDate; + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeTypeVO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeTypeVO.java new file mode 100644 index 00000000..6aa9ee15 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeTypeVO.java @@ -0,0 +1,24 @@ +package net.lab1024.sa.admin.module.business.oa.notice.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 通知公告 类型 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-12 21:40:39 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class NoticeTypeVO { + + @ApiModelProperty("通知类型id") + private Long noticeTypeId; + + @ApiModelProperty("通知类型-名称") + private String noticeTypeName; + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeUpdateFormVO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeUpdateFormVO.java new file mode 100644 index 00000000..2d82624b --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeUpdateFormVO.java @@ -0,0 +1,35 @@ +package net.lab1024.sa.admin.module.business.oa.notice.domain.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.json.serializer.FileKeyVoSerializer; + +import java.util.List; + +/** + * 用于更新 【通知、公告】 的 VO 对象 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-12 21:40:39 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class NoticeUpdateFormVO extends NoticeVO { + + @ApiModelProperty("纯文本内容") + private String contentText; + + @ApiModelProperty("html内容") + private String contentHtml; + + @ApiModelProperty("附件") + @JsonSerialize(using = FileKeyVoSerializer.class) + private String attachment; + + @ApiModelProperty("可见范围") + private List visibleRangeList; + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeVO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeVO.java new file mode 100644 index 00000000..570fa925 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeVO.java @@ -0,0 +1,75 @@ +package net.lab1024.sa.admin.module.business.oa.notice.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.time.LocalDateTime; + + +/** + * 新闻、公告 VO + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-12 21:40:39 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class NoticeVO { + + @ApiModelProperty("id") + private Long noticeId; + + @ApiModelProperty("标题") + private String title; + + @ApiModelProperty("分类") + private Long noticeTypeId; + + @ApiModelProperty("分类名称") + private String noticeTypeName; + + @ApiModelProperty("是否全部可见") + private Boolean allVisibleFlag; + + @ApiModelProperty("是否定时发布") + private Boolean scheduledPublishFlag; + + @ApiModelProperty("发布状态") + private Boolean publishFlag; + + @ApiModelProperty("发布时间") + private LocalDateTime publishTime; + + @ApiModelProperty("作者") + @NotBlank(message = "作者不能为空") + private String author; + + @ApiModelProperty("来源") + @NotBlank(message = "标题不能为空") + private String source; + + @ApiModelProperty("文号") + private String documentNumber; + + @ApiModelProperty("页面浏览量") + private Integer pageViewCount; + + @ApiModelProperty("用户浏览量") + private Integer userViewCount; + + @ApiModelProperty("删除标识") + private Boolean deletedFlag; + + @ApiModelProperty("创建人名称") + private String createUserName; + + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + + @ApiModelProperty("更新时间") + private LocalDateTime updateTime; + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeViewRecordVO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeViewRecordVO.java new file mode 100644 index 00000000..5b761259 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeViewRecordVO.java @@ -0,0 +1,49 @@ +package net.lab1024.sa.admin.module.business.oa.notice.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 浏览记录 VO + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-12 21:40:39 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class NoticeViewRecordVO { + + @ApiModelProperty("员工ID") + private Long employeeId; + + @ApiModelProperty("员工姓名") + private String employeeName; + + @ApiModelProperty("员工部门名称") + private String departmentName; + + @ApiModelProperty("查看次数") + private Integer pageViewCount; + + @ApiModelProperty("首次ip") + private String firstIp; + + @ApiModelProperty("首次用户设备等标识") + private String firstUserAgent; + + @ApiModelProperty("首次查看时间") + private LocalDateTime createTime; + + @ApiModelProperty("最后一次 ip") + private String lastIp; + + @ApiModelProperty("最后一次 用户设备等标识") + private String lastUserAgent; + + @ApiModelProperty("最后一次查看时间") + private LocalDateTime updateTime; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeVisibleRangeVO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeVisibleRangeVO.java new file mode 100644 index 00000000..cd3ad235 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeVisibleRangeVO.java @@ -0,0 +1,29 @@ +package net.lab1024.sa.admin.module.business.oa.notice.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.admin.module.business.oa.notice.constant.NoticeVisibleRangeDataTypeEnum; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; + +/** + * 新闻、公告 可见范围数据 VO + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-12 21:40:39 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class NoticeVisibleRangeVO { + + @ApiModelPropertyEnum(NoticeVisibleRangeDataTypeEnum.class) + private Integer dataType; + + @ApiModelProperty("员工/部门id") + private Long dataId; + + @ApiModelProperty("员工/部门 名称") + private String dataName; + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/manager/NoticeManager.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/manager/NoticeManager.java new file mode 100644 index 00000000..662dca05 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/manager/NoticeManager.java @@ -0,0 +1,67 @@ +package net.lab1024.sa.admin.module.business.oa.notice.manager; + +import net.lab1024.sa.admin.module.business.oa.notice.dao.NoticeDao; +import net.lab1024.sa.admin.module.business.oa.notice.domain.entity.NoticeEntity; +import net.lab1024.sa.admin.module.business.oa.notice.domain.form.NoticeVisibleRangeForm; +import net.lab1024.sa.common.module.support.datatracer.constant.DataTracerTypeEnum; +import net.lab1024.sa.common.module.support.datatracer.service.DataTracerService; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 通知、公告 manager + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-12 21:40:39 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Service +public class NoticeManager { + + @Autowired + private NoticeDao noticeDao; + + @Autowired + private DataTracerService dataTracerService; + + /** + * 保存 + * + * @param noticeEntity + * @param visibleRangeFormList + */ + @Transactional(rollbackFor = Throwable.class) + public void save(NoticeEntity noticeEntity, List visibleRangeFormList) { + noticeDao.insert(noticeEntity); + Long noticeId = noticeEntity.getNoticeId(); + // 保存可见范围 + if (CollectionUtils.isNotEmpty(visibleRangeFormList)) { + noticeDao.insertVisibleRange(noticeId, visibleRangeFormList); + } + dataTracerService.insert(noticeId, DataTracerTypeEnum.OA_NOTICE); + } + + /** + * 更新 + * + * @param noticeEntity + * @param visibleRangeList + */ + @Transactional(rollbackFor = Throwable.class) + public void update(NoticeEntity old, NoticeEntity noticeEntity, List visibleRangeList) { + noticeDao.updateById(noticeEntity); + Long noticeId = noticeEntity.getNoticeId(); + // 保存可见范围 + if (CollectionUtils.isNotEmpty(visibleRangeList)) { + noticeDao.deleteVisibleRange(noticeId); + noticeDao.insertVisibleRange(noticeId, visibleRangeList); + } + dataTracerService.update(noticeId, DataTracerTypeEnum.OA_NOTICE, old, noticeEntity); + } +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/service/NoticeEmployeeService.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/service/NoticeEmployeeService.java new file mode 100644 index 00000000..b3456b7d --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/service/NoticeEmployeeService.java @@ -0,0 +1,159 @@ +package net.lab1024.sa.admin.module.business.oa.notice.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.google.common.collect.Lists; +import net.lab1024.sa.admin.module.business.oa.notice.constant.NoticeVisibleRangeDataTypeEnum; +import net.lab1024.sa.admin.module.business.oa.notice.dao.NoticeDao; +import net.lab1024.sa.admin.module.business.oa.notice.domain.form.NoticeEmployeeQueryForm; +import net.lab1024.sa.admin.module.business.oa.notice.domain.form.NoticeViewRecordQueryForm; +import net.lab1024.sa.admin.module.business.oa.notice.domain.vo.*; +import net.lab1024.sa.admin.module.system.department.service.DepartmentService; +import net.lab1024.sa.admin.module.system.employee.domain.entity.EmployeeEntity; +import net.lab1024.sa.admin.module.system.employee.service.EmployeeService; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import net.lab1024.sa.common.common.util.SmartPageUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + + +/** + * 员工查看 通知。公告 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-12 21:40:39 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Service +public class NoticeEmployeeService { + + @Autowired + private NoticeDao noticeDao; + + @Autowired + private NoticeService noticeService; + + @Autowired + private DepartmentService departmentService; + + @Autowired + private EmployeeService employeeService; + + /** + * 查询我的 通知、公告清单 + * + * @return + */ + public ResponseDTO> queryList(Long requestEmployeeId, NoticeEmployeeQueryForm noticeEmployeeQueryForm) { + Page page = SmartPageUtil.convert2PageQuery(noticeEmployeeQueryForm); + + //获取请求人的 部门及其子部门 + List employeeDepartmentIdList = Lists.newArrayList(); + EmployeeEntity employeeEntity = employeeService.getById(requestEmployeeId); + if (employeeEntity.getDepartmentId() != null) { + employeeDepartmentIdList = departmentService.selfAndChildrenIdList(employeeEntity.getDepartmentId()); + } + + List noticeList = null; + //只查询未读的 + if (noticeEmployeeQueryForm.getNotViewFlag() != null && noticeEmployeeQueryForm.getNotViewFlag()) { + noticeList = noticeDao.queryEmployeeNotViewNotice(page, + requestEmployeeId, + noticeEmployeeQueryForm, + employeeDepartmentIdList, + false, + employeeEntity.getAdministratorFlag(), + NoticeVisibleRangeDataTypeEnum.DEPARTMENT.getValue(), + NoticeVisibleRangeDataTypeEnum.EMPLOYEE.getValue()); + } else { + // 查询全部 + noticeList = noticeDao.queryEmployeeNotice(page, + requestEmployeeId, + noticeEmployeeQueryForm, + employeeDepartmentIdList, + false, + employeeEntity.getAdministratorFlag(), + NoticeVisibleRangeDataTypeEnum.DEPARTMENT.getValue(), + NoticeVisibleRangeDataTypeEnum.EMPLOYEE.getValue()); + } + // 设置发布日期 + noticeList.forEach(notice -> notice.setPublishDate(notice.getPublishTime().toLocalDate())); + + return ResponseDTO.ok(SmartPageUtil.convert2PageResult(page, noticeList)); + } + + + /** + * 查询我的 待查看的 通知、公告清单 + * + * @return + */ + public ResponseDTO view(Long requestEmployeeId, Long noticeId, String ip, String userAgent) { + NoticeUpdateFormVO updateFormVO = noticeService.getUpdateFormVO(noticeId); + if (updateFormVO == null || Boolean.TRUE.equals(updateFormVO.getDeletedFlag())) { + return ResponseDTO.userErrorParam("通知公告不存在"); + } + + EmployeeEntity employeeEntity = employeeService.getById(requestEmployeeId); + if (!updateFormVO.getAllVisibleFlag() && checkVisibleRange(updateFormVO.getVisibleRangeList(), requestEmployeeId, employeeEntity.getDepartmentId())) { + return ResponseDTO.userErrorParam("对不起,您没有权限查看内容"); + } + + NoticeDetailVO noticeDetailVO = SmartBeanUtil.copy(updateFormVO, NoticeDetailVO.class); + long viewCount = noticeDao.viewRecordCount(noticeId, requestEmployeeId); + if (viewCount == 0) { + noticeDao.insertViewRecord(noticeId, requestEmployeeId, ip, userAgent, 1); + } else { + noticeDao.updateViewRecord(noticeId, requestEmployeeId, ip, userAgent); + } + + return ResponseDTO.ok(noticeDetailVO); + } + + /** + * 校验是否有查看权限的范围 + * + * @param visibleRangeList + * @param employeeId + * @param departmentId + * @return + */ + public boolean checkVisibleRange(List visibleRangeList, Long employeeId, Long departmentId) { + // 员工范围 + boolean anyMatch = visibleRangeList.stream().anyMatch(e -> NoticeVisibleRangeDataTypeEnum.EMPLOYEE.equalsValue(e.getDataType()) && Objects.equals(e.getDataId(), employeeId)); + if (anyMatch) { + return true; + } + + //部门范围 + List visibleDepartmentIdList = visibleRangeList.stream().filter(e -> NoticeVisibleRangeDataTypeEnum.DEPARTMENT.equalsValue(e.getDataType())) + .map(NoticeVisibleRangeVO::getDataId).collect(Collectors.toList()); + + for (Long visibleDepartmentId : visibleDepartmentIdList) { + List departmentIdList = departmentService.selfAndChildrenIdList(visibleDepartmentId); + if (departmentIdList.contains(departmentId)) { + return true; + } + } + return false; + } + + /** + * 分页查询 查看记录 + * + * @param noticeViewRecordQueryForm + * @return + */ + public PageResult queryViewRecord(NoticeViewRecordQueryForm noticeViewRecordQueryForm) { + Page page = SmartPageUtil.convert2PageQuery(noticeViewRecordQueryForm); + List noticeViewRecordVOS = noticeDao.queryNoticeViewRecordList(page, noticeViewRecordQueryForm); + return SmartPageUtil.convert2PageResult(page, noticeViewRecordVOS); + } +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/service/NoticeService.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/service/NoticeService.java new file mode 100644 index 00000000..dbe3b311 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/service/NoticeService.java @@ -0,0 +1,250 @@ +package net.lab1024.sa.admin.module.business.oa.notice.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.lab1024.sa.admin.module.business.oa.notice.constant.NoticeVisibleRangeDataTypeEnum; +import net.lab1024.sa.admin.module.business.oa.notice.dao.NoticeDao; +import net.lab1024.sa.admin.module.business.oa.notice.domain.entity.NoticeEntity; +import net.lab1024.sa.admin.module.business.oa.notice.domain.form.NoticeAddForm; +import net.lab1024.sa.admin.module.business.oa.notice.domain.form.NoticeQueryForm; +import net.lab1024.sa.admin.module.business.oa.notice.domain.form.NoticeUpdateForm; +import net.lab1024.sa.admin.module.business.oa.notice.domain.form.NoticeVisibleRangeForm; +import net.lab1024.sa.admin.module.business.oa.notice.domain.vo.NoticeTypeVO; +import net.lab1024.sa.admin.module.business.oa.notice.domain.vo.NoticeUpdateFormVO; +import net.lab1024.sa.admin.module.business.oa.notice.domain.vo.NoticeVO; +import net.lab1024.sa.admin.module.business.oa.notice.domain.vo.NoticeVisibleRangeVO; +import net.lab1024.sa.admin.module.business.oa.notice.manager.NoticeManager; +import net.lab1024.sa.admin.module.system.department.dao.DepartmentDao; +import net.lab1024.sa.admin.module.system.department.domain.entity.DepartmentEntity; +import net.lab1024.sa.admin.module.system.department.domain.vo.DepartmentVO; +import net.lab1024.sa.admin.module.system.department.service.DepartmentService; +import net.lab1024.sa.admin.module.system.employee.dao.EmployeeDao; +import net.lab1024.sa.admin.module.system.employee.domain.entity.EmployeeEntity; +import net.lab1024.sa.common.common.constant.StringConst; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import net.lab1024.sa.common.common.util.SmartPageUtil; +import net.lab1024.sa.common.module.support.datatracer.constant.DataTracerTypeEnum; +import net.lab1024.sa.common.module.support.datatracer.service.DataTracerService; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 通知。公告 后台管理业务 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-12 21:40:39 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Service +public class NoticeService { + + @Autowired + private NoticeDao noticeDao; + + @Autowired + private NoticeManager noticeManager; + + @Autowired + private EmployeeDao employeeDao; + + @Autowired + private DepartmentDao departmentDao; + + @Autowired + private DepartmentService departmentService; + + @Autowired + private NoticeTypeService noticeTypeService; + + @Autowired + private DataTracerService dataTracerService; + + /** + * 查询 通知、公告 + * + * @param queryForm + * @return + */ + public PageResult query(NoticeQueryForm queryForm) { + Page page = SmartPageUtil.convert2PageQuery(queryForm); + List list = noticeDao.query(page, queryForm); + LocalDateTime now = LocalDateTime.now(); + list.forEach(e -> e.setPublishFlag(e.getPublishTime().isBefore(now))); + return SmartPageUtil.convert2PageResult(page, list); + } + + /** + * 添加 + * + * @param addForm + * @return + */ + public ResponseDTO add(NoticeAddForm addForm) { + // 校验并获取可见范围 + ResponseDTO validate = this.checkAndBuildVisibleRange(addForm); + if (!validate.getOk()) { + return ResponseDTO.error(validate); + } + + // build 资讯 + NoticeEntity noticeEntity = SmartBeanUtil.copy(addForm, NoticeEntity.class); + // 发布时间:不是定时发布时 默认为 当前 + if (!addForm.getScheduledPublishFlag()) { + noticeEntity.setPublishTime(LocalDateTime.now()); + } + // 保存数据 + noticeManager.save(noticeEntity, addForm.getVisibleRangeList()); + return ResponseDTO.ok(); + } + + /** + * 校验并返回可见范围 + * + * @param form + * @return + */ + private ResponseDTO checkAndBuildVisibleRange(NoticeAddForm form) { + // 校验资讯分类 + NoticeTypeVO noticeType = noticeTypeService.getByNoticeTypeId(form.getNoticeTypeId()); + if (noticeType == null) { + return ResponseDTO.userErrorParam("分类不存在"); + } + + if (form.getAllVisibleFlag()) { + return ResponseDTO.ok(); + } + + /** + * 校验可见范围 + * 非全部可见时 校验选择的员工|部门 + */ + List visibleRangeUpdateList = form.getVisibleRangeList(); + if (CollectionUtils.isEmpty(visibleRangeUpdateList)) { + return ResponseDTO.userErrorParam("未设置可见范围"); + } + + // 校验可见范围-> 员工 + List employeeIdList = visibleRangeUpdateList.stream() + .filter(e -> NoticeVisibleRangeDataTypeEnum.EMPLOYEE.equalsValue(e.getDataType())) + .map(NoticeVisibleRangeForm::getDataId) + .distinct().collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(employeeIdList)) { + employeeIdList = employeeIdList.stream().distinct().collect(Collectors.toList()); + List dbEmployeeIdList = employeeDao.selectBatchIds(employeeIdList).stream().map(EmployeeEntity::getEmployeeId).collect(Collectors.toList()); + Collection subtract = CollectionUtils.subtract(employeeIdList, dbEmployeeIdList); + if (subtract.size() > 0) { + return ResponseDTO.userErrorParam("员工id不存在:" + subtract); + } + } + + // 校验可见范围-> 部门 + List deptIdList = visibleRangeUpdateList.stream() + .filter(e -> NoticeVisibleRangeDataTypeEnum.DEPARTMENT.equalsValue(e.getDataType())) + .map(NoticeVisibleRangeForm::getDataId) + .distinct().collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(deptIdList)) { + deptIdList = deptIdList.stream().distinct().collect(Collectors.toList()); + List dbDeptIdList = departmentDao.selectBatchIds(deptIdList).stream().map(DepartmentEntity::getDepartmentId).collect(Collectors.toList()); + Collection subtract = CollectionUtils.subtract(deptIdList, dbDeptIdList); + if (subtract.size() > 0) { + return ResponseDTO.userErrorParam("部门id不存在:" + subtract); + } + } + return ResponseDTO.ok(); + } + + + /** + * 更新 + * + * @param updateForm + * @return + */ + public ResponseDTO update(NoticeUpdateForm updateForm) { + + NoticeEntity oldNoticeEntity = noticeDao.selectById(updateForm.getNoticeId()); + if (oldNoticeEntity == null) { + return ResponseDTO.userErrorParam("通知不存在"); + } + + // 校验并获取可见范围 + ResponseDTO res = this.checkAndBuildVisibleRange(updateForm); + if (!res.getOk()) { + return ResponseDTO.error(res); + } + + // 更新 + NoticeEntity noticeEntity = SmartBeanUtil.copy(updateForm, NoticeEntity.class); + noticeManager.update(oldNoticeEntity, noticeEntity, updateForm.getVisibleRangeList()); + return ResponseDTO.ok(); + } + + + /** + * 删除 + * + * @param noticeId + * @return + */ + public ResponseDTO delete(Long noticeId) { + NoticeEntity noticeEntity = noticeDao.selectById(noticeId); + if (null == noticeEntity || noticeEntity.getDeletedFlag()) { + return ResponseDTO.userErrorParam("通知公告不存在"); + } + // 更新删除状态 + noticeDao.updateDeletedFlag(noticeId); + dataTracerService.delete(noticeId, DataTracerTypeEnum.OA_NOTICE); + return ResponseDTO.ok(); + } + + /** + * 获取更新表单用的详情 + * + * @param noticeId + * @return + */ + public NoticeUpdateFormVO getUpdateFormVO(Long noticeId) { + NoticeEntity noticeEntity = noticeDao.selectById(noticeId); + if (null == noticeEntity) { + return null; + } + + NoticeUpdateFormVO updateFormVO = SmartBeanUtil.copy(noticeEntity, NoticeUpdateFormVO.class); + if (!updateFormVO.getAllVisibleFlag()) { + List noticeVisibleRangeList = noticeDao.queryVisibleRange(noticeId); + List employeeIdList = noticeVisibleRangeList.stream().filter(e -> NoticeVisibleRangeDataTypeEnum.EMPLOYEE.getValue().equals(e.getDataType())) + .map(NoticeVisibleRangeVO::getDataId) + .collect(Collectors.toList()); + + Map employeeMap = null; + if (CollectionUtils.isNotEmpty(employeeIdList)) { + employeeMap = employeeDao.selectBatchIds(employeeIdList).stream().collect(Collectors.toMap(EmployeeEntity::getEmployeeId, Function.identity())); + } else { + employeeMap = new HashMap<>(); + } + for (NoticeVisibleRangeVO noticeVisibleRange : noticeVisibleRangeList) { + if (noticeVisibleRange.getDataType().equals(NoticeVisibleRangeDataTypeEnum.EMPLOYEE.getValue())) { + EmployeeEntity employeeEntity = employeeMap.get(noticeVisibleRange.getDataId()); + noticeVisibleRange.setDataName(employeeEntity == null ? StringConst.EMPTY : employeeEntity.getActualName()); + } else { + DepartmentVO departmentVO = departmentService.getDepartmentById(noticeVisibleRange.getDataId()); + noticeVisibleRange.setDataName(departmentVO == null ? StringConst.EMPTY : departmentVO.getName()); + } + } + updateFormVO.setVisibleRangeList(noticeVisibleRangeList); + } + return updateFormVO; + } +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/service/NoticeTypeService.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/service/NoticeTypeService.java new file mode 100644 index 00000000..23da7364 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/service/NoticeTypeService.java @@ -0,0 +1,87 @@ +package net.lab1024.sa.admin.module.business.oa.notice.service; + +import cn.hutool.core.util.StrUtil; +import net.lab1024.sa.admin.module.business.oa.notice.dao.NoticeTypeDao; +import net.lab1024.sa.admin.module.business.oa.notice.domain.entity.NoticeTypeEntity; +import net.lab1024.sa.admin.module.business.oa.notice.domain.vo.NoticeTypeVO; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +/** + * 通知。公告 类型 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-12 21:40:39 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Service +public class NoticeTypeService { + + @Autowired + private NoticeTypeDao noticeTypeDao; + + /** + * 查询全部 + * @return + */ + public List getAll() { + return SmartBeanUtil.copyList(noticeTypeDao.selectList(null), NoticeTypeVO.class); + } + + public NoticeTypeVO getByNoticeTypeId(Long noticceTypeId) { + return SmartBeanUtil.copy(noticeTypeDao.selectById(noticceTypeId), NoticeTypeVO.class); + } + + public synchronized ResponseDTO add(String name) { + if (StrUtil.isBlank(name)) { + return ResponseDTO.userErrorParam("类型名称不能为空"); + } + + List noticeTypeEntityList = noticeTypeDao.selectList(null); + if (!CollectionUtils.isEmpty(noticeTypeEntityList)) { + boolean exist = noticeTypeEntityList.stream().map(NoticeTypeEntity::getNoticeTypeName).collect(Collectors.toSet()).contains(name); + if (exist) { + return ResponseDTO.userErrorParam("类型名称已经存在"); + } + } + noticeTypeDao.insert(NoticeTypeEntity.builder().noticeTypeName(name).build()); + return ResponseDTO.ok(); + } + + public synchronized ResponseDTO update(Long noticeTypeId, String name) { + if (StrUtil.isBlank(name)) { + return ResponseDTO.userErrorParam("类型名称不能为空"); + } + + NoticeTypeEntity noticeTypeEntity = noticeTypeDao.selectById(noticeTypeId); + if (noticeTypeEntity == null) { + return ResponseDTO.userErrorParam("类型名称不存在"); + } + + List noticeTypeEntityList = noticeTypeDao.selectList(null); + if (!CollectionUtils.isEmpty(noticeTypeEntityList)) { + Optional optionalNoticeTypeEntity = noticeTypeEntityList.stream().filter(e -> e.getNoticeTypeName().equals(name)).findFirst(); + if (optionalNoticeTypeEntity.isPresent() && !optionalNoticeTypeEntity.get().getNoticeTypeId().equals(noticeTypeId)) { + return ResponseDTO.userErrorParam("类型名称已经存在"); + } + } + noticeTypeEntity.setNoticeTypeName(name); + noticeTypeDao.updateById(noticeTypeEntity); + return ResponseDTO.ok(); + } + + public synchronized ResponseDTO delete(Long noticeTypeId) { + noticeTypeDao.deleteById(noticeTypeId); + return ResponseDTO.ok(); + } + +} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/DataScope.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/DataScope.java similarity index 51% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/DataScope.java rename to smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/DataScope.java index 1ab8061a..7ba28705 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/DataScope.java +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/DataScope.java @@ -1,8 +1,9 @@ -package net.lab1024.smartadmin.common.anno; +package net.lab1024.sa.admin.module.system.datascope; -import net.lab1024.smartadmin.module.system.datascope.constant.DataScopeTypeEnum; -import net.lab1024.smartadmin.module.system.datascope.constant.DataScopeWhereInTypeEnum; -import net.lab1024.smartadmin.module.system.datascope.strategy.DataScopePowerStrategy; + +import net.lab1024.sa.admin.module.system.datascope.constant.DataScopeTypeEnum; +import net.lab1024.sa.admin.module.system.datascope.constant.DataScopeWhereInTypeEnum; +import net.lab1024.sa.admin.module.system.datascope.strategy.DataScopePowerStrategy; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; @@ -10,20 +11,19 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** - * [ 数据范围 ] + * 数据范围 * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 + * @Author 1024创新实验室: 罗伊 + * @Date 2022-03-18 20:59:17 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface DataScope { - DataScopeTypeEnum dataScopeType() default DataScopeTypeEnum.DEFAULT; + DataScopeTypeEnum dataScopeType() ; DataScopeWhereInTypeEnum whereInType() default DataScopeWhereInTypeEnum.EMPLOYEE; @@ -33,6 +33,11 @@ public @interface DataScope { */ Class joinSqlImplClazz() default DataScopePowerStrategy.class; + /** + * 多个参数已逗号分隔,本属性主要用于joinSqlImplClazz 实现类跟进参数进行不同的范围控制,如不使用CUSTOM_STRATEGY,可不做配置 + * @return + */ + String paramName() default ""; /** * * 第几个where 条件 从0开始 diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/DataScopeController.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/DataScopeController.java new file mode 100644 index 00000000..4e143889 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/DataScopeController.java @@ -0,0 +1,41 @@ +package net.lab1024.sa.admin.module.system.datascope; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.admin.common.AdminBaseController; +import net.lab1024.sa.admin.constant.AdminSwaggerTagConst; +import net.lab1024.sa.admin.module.system.datascope.domain.DataScopeAndViewTypeVO; +import net.lab1024.sa.admin.module.system.datascope.service.DataScopeService; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.module.support.operatelog.annoation.OperateLog; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 查询支持的数据范围类型 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022-03-18 20:59:17 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@OperateLog +@RestController +@Api(tags = {AdminSwaggerTagConst.System.SYSTEM_DATA_SCOPE}) +public class DataScopeController extends AdminBaseController { + + @Autowired + private DataScopeService dataScopeService; + + @ApiOperation(value = "获取当前系统所配置的所有数据范围 @author 罗伊") + @GetMapping("/dataScope/list") + public ResponseDTO> dataScopeList() { + return dataScopeService.dataScopeList(); + } + + +} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/MyBatisPlugin.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/MyBatisPlugin.java similarity index 68% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/MyBatisPlugin.java rename to smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/MyBatisPlugin.java index f9270b62..2c2f39d1 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/MyBatisPlugin.java +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/MyBatisPlugin.java @@ -1,49 +1,61 @@ -package net.lab1024.smartadmin.module.system.datascope; +package net.lab1024.sa.admin.module.system.datascope; -import net.lab1024.smartadmin.module.system.datascope.domain.dto.DataScopeSqlConfigDTO; -import net.lab1024.smartadmin.module.system.datascope.service.DataScopeSqlConfigService; -import net.lab1024.smartadmin.third.SmartApplicationContext; -import net.lab1024.smartadmin.util.SmartStringUtil; +import cn.hutool.core.util.StrUtil; +import com.google.common.collect.Maps; +import net.lab1024.sa.admin.module.system.datascope.domain.DataScopeSqlConfig; +import net.lab1024.sa.admin.module.system.datascope.service.DataScopeSqlConfigService; +import net.lab1024.sa.common.common.domain.DataScopePlugin; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.mapping.*; -import org.apache.ibatis.plugin.*; +import org.apache.ibatis.plugin.Intercepts; +import org.apache.ibatis.plugin.Invocation; +import org.apache.ibatis.plugin.Plugin; +import org.apache.ibatis.plugin.Signature; import org.apache.ibatis.session.ResultHandler; import org.apache.ibatis.session.RowBounds; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; import java.util.List; +import java.util.Map; import java.util.Properties; /** - * [ mybaits sql 拦截 ] + * mybaits sql 拦截 * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 + * @Author 1024创新实验室: 罗伊 + * @Date 2022-03-18 20:59:17 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ @Intercepts({@Signature(type = org.apache.ibatis.executor.Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})}) @Component -public class MyBatisPlugin implements Interceptor { +public class MyBatisPlugin extends DataScopePlugin { + + @Autowired + private ApplicationContext applicationContext; @Override public Object intercept(Invocation invocation) throws Throwable { + MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0]; Object parameter = invocation.getArgs()[1]; + BoundSql boundSql = mappedStatement.getBoundSql(parameter); String originalSql = boundSql.getSql().trim(); String id = mappedStatement.getId(); - List methodStrList = SmartStringUtil.splitConvertToList(id, "\\."); + List methodStrList = StrUtil.split(id, "."); String path = methodStrList.get(methodStrList.size() - 2) + "." + methodStrList.get(methodStrList.size() - 1); DataScopeSqlConfigService dataScopeSqlConfigService = this.dataScopeSqlConfigService(); if (dataScopeSqlConfigService == null) { return invocation.proceed(); } - DataScopeSqlConfigDTO sqlConfigDTO = dataScopeSqlConfigService.getSqlConfig(path); + DataScopeSqlConfig sqlConfigDTO = dataScopeSqlConfigService.getSqlConfig(path); if (sqlConfigDTO != null) { - BoundSql newBoundSql = copyFromBoundSql(mappedStatement, boundSql, this.joinSql(originalSql, sqlConfigDTO)); + Map paramMap = this.getParamList(sqlConfigDTO.getParamName(), parameter); + BoundSql newBoundSql = copyFromBoundSql(mappedStatement, boundSql, this.joinSql(originalSql, paramMap, sqlConfigDTO)); ParameterMap map = mappedStatement.getParameterMap(); MappedStatement newMs = copyFromMappedStatement(mappedStatement, new BoundSqlSqlSource(newBoundSql), map); invocation.getArgs()[0] = newMs; @@ -53,11 +65,32 @@ public class MyBatisPlugin implements Interceptor { return obj; } - private String joinSql(String sql, DataScopeSqlConfigDTO sqlConfigDTO) { + + private Map getParamList(String paramName, Object parameter) { + Map paramMap = Maps.newHashMap(); + if (StringUtils.isEmpty(paramName)) { + return paramMap; + } + if (parameter == null) { + return paramMap; + } + if (parameter instanceof Map) { + String[] paramNameArray = paramName.split(","); + Map parameterMap = (Map) parameter; + for (String param : paramNameArray) { + if(parameterMap.containsKey(param)){ + paramMap.put(param, parameterMap.get(param)); + } + } + } + return paramMap; + } + + private String joinSql(String sql, Map paramMap, DataScopeSqlConfig sqlConfigDTO) { if (null == sqlConfigDTO) { return sql; } - String appendSql = this.dataScopeSqlConfigService().getJoinSql(sqlConfigDTO); + String appendSql = this.dataScopeSqlConfigService().getJoinSql(paramMap, sqlConfigDTO); if (StringUtils.isEmpty(appendSql)) { return sql; } @@ -68,18 +101,18 @@ public class MyBatisPlugin implements Interceptor { int whereIndex = StringUtils.ordinalIndexOf(sql.toLowerCase(), where, appendSqlWhereIndex + 1); int orderIndex = sql.toLowerCase().indexOf(order); int groupIndex = sql.toLowerCase().indexOf(group); - if (whereIndex > - 1) { + if (whereIndex > -1) { String subSql = sql.substring(0, whereIndex + where.length() + 1); subSql = subSql + " " + appendSql + " AND " + sql.substring(whereIndex + where.length() + 1); return subSql; } - if (groupIndex > - 1) { + if (groupIndex > -1) { String subSql = sql.substring(0, groupIndex); subSql = subSql + " where " + appendSql + " " + sql.substring(groupIndex); return subSql; } - if (orderIndex > - 1) { + if (orderIndex > -1) { String subSql = sql.substring(0, orderIndex); subSql = subSql + " where " + appendSql + " " + sql.substring(orderIndex); return subSql; @@ -89,7 +122,7 @@ public class MyBatisPlugin implements Interceptor { } public DataScopeSqlConfigService dataScopeSqlConfigService() { - return (DataScopeSqlConfigService) SmartApplicationContext.getBean("dataScopeSqlConfigService"); + return (DataScopeSqlConfigService) applicationContext.getBean("dataScopeSqlConfigService"); } public class BoundSqlSqlSource implements SqlSource { @@ -99,6 +132,7 @@ public class MyBatisPlugin implements Interceptor { public BoundSqlSqlSource(BoundSql boundSql) { this.boundSql = boundSql; } + @Override public BoundSql getBoundSql(Object parameterObject) { return boundSql; diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/constant/DataScopeTypeEnum.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/constant/DataScopeTypeEnum.java similarity index 52% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/constant/DataScopeTypeEnum.java rename to smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/constant/DataScopeTypeEnum.java index 66ebb8f9..9130631a 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/constant/DataScopeTypeEnum.java +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/constant/DataScopeTypeEnum.java @@ -1,28 +1,33 @@ -package net.lab1024.smartadmin.module.system.datascope.constant; +package net.lab1024.sa.admin.module.system.datascope.constant; - -import net.lab1024.smartadmin.common.domain.BaseEnum; +import net.lab1024.sa.common.common.enumeration.BaseEnum; /** - * [ ] + * 数据范围 类型 * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/28 0028 下午 15:37 - * @since JDK1.8 + * @Author 1024创新实验室: 罗伊 + * @Date 2020/11/28 20:59:17 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ public enum DataScopeTypeEnum implements BaseEnum { - DEFAULT(0,0,"默认类型","数据范围样例"); + /** + * 系统通知 + */ + NOTICE(1, 20, "系统通知", "系统通知数据范围"), + ; private Integer value; + private Integer sort; + private String name; + private String desc; - DataScopeTypeEnum(Integer value,Integer sort,String name,String desc) { + DataScopeTypeEnum(Integer value, Integer sort, String name, String desc) { this.value = value; this.sort = sort; this.name = name; diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/constant/DataScopeViewTypeEnum.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/constant/DataScopeViewTypeEnum.java new file mode 100644 index 00000000..1ef69302 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/constant/DataScopeViewTypeEnum.java @@ -0,0 +1,53 @@ +package net.lab1024.sa.admin.module.system.datascope.constant; + + +import net.lab1024.sa.common.common.enumeration.BaseEnum; + + +/** + * 数据范围 种类 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2020/11/28 20:59:17 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public enum DataScopeViewTypeEnum implements BaseEnum { + + ME(0, 0, "本人"), + + DEPARTMENT(1, 5, "本部门"), + + DEPARTMENT_AND_SUB(2, 10, "本部门及下属子部门"), + + ALL(10, 100, "全部"); + + + + private Integer value; + private Integer level; + private String desc; + + DataScopeViewTypeEnum(Integer value, Integer level, String desc) { + this.value = value; + this.level = level; + this.desc = desc; + } + + @Override + public Integer getValue() { + return value; + } + + public Integer getLevel() { + return level; + } + + @Override + public String getDesc() { + return desc; + } + + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/constant/DataScopeWhereInTypeEnum.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/constant/DataScopeWhereInTypeEnum.java new file mode 100644 index 00000000..dd9293d5 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/constant/DataScopeWhereInTypeEnum.java @@ -0,0 +1,42 @@ +package net.lab1024.sa.admin.module.system.datascope.constant; + + +import net.lab1024.sa.common.common.enumeration.BaseEnum; + +/** + * 数据范围 sql where + * + * @Author 1024创新实验室: 罗伊 + * @Date 2020/11/28 20:59:17 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public enum DataScopeWhereInTypeEnum implements BaseEnum { + + EMPLOYEE(0, "以员工IN"), + + DEPARTMENT(1, "以部门IN"), + + CUSTOM_STRATEGY(2, "自定义策略"); + + private Integer value; + private String desc; + + DataScopeWhereInTypeEnum(Integer value, String desc) { + this.value = value; + this.desc = desc; + } + + @Override + public Integer getValue() { + return value; + } + + @Override + public String getDesc() { + return desc; + } + + +} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeAndViewTypeVO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain/DataScopeAndViewTypeVO.java similarity index 68% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeAndViewTypeVO.java rename to smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain/DataScopeAndViewTypeVO.java index 1412be57..51bd3f57 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeAndViewTypeVO.java +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain/DataScopeAndViewTypeVO.java @@ -1,4 +1,4 @@ -package net.lab1024.smartadmin.module.system.datascope.domain.dto; +package net.lab1024.sa.admin.module.system.datascope.domain; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -6,14 +6,13 @@ import lombok.Data; import java.util.List; /** - * [ ] + * 数据范围 * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/27 0027 下午 16:37 - * @since JDK1.8 + * @Author 1024创新实验室: 罗伊 + * @Date 2020/11/28 20:59:17 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ @Data public class DataScopeAndViewTypeVO { diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeDTO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain/DataScopeDTO.java similarity index 64% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeDTO.java rename to smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain/DataScopeDTO.java index 629679bf..01919e95 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeDTO.java +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain/DataScopeDTO.java @@ -1,18 +1,17 @@ -package net.lab1024.smartadmin.module.system.datascope.domain.dto; +package net.lab1024.sa.admin.module.system.datascope.domain; import io.swagger.annotations.ApiModelProperty; import lombok.Builder; import lombok.Data; /** - * [ ] + * 数据范围 * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/27 0027 下午 16:37 - * @since JDK1.8 + * @Author 1024创新实验室: 罗伊 + * @Date 2020/11/28 20:59:17 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ @Data @Builder diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain/DataScopeSqlConfig.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain/DataScopeSqlConfig.java new file mode 100644 index 00000000..63686b3b --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain/DataScopeSqlConfig.java @@ -0,0 +1,41 @@ +package net.lab1024.sa.admin.module.system.datascope.domain; + +import lombok.Data; +import net.lab1024.sa.admin.module.system.datascope.constant.DataScopeTypeEnum; +import net.lab1024.sa.admin.module.system.datascope.constant.DataScopeWhereInTypeEnum; + +/** + * 数据范围 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2020/11/28 20:59:17 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class DataScopeSqlConfig { + + /** + * 数据范围类型 + * {@link DataScopeTypeEnum} + */ + private DataScopeTypeEnum dataScopeType; + + /** + * join sql 具体实现类 + */ + private Class joinSqlImplClazz; + + private String joinSql; + + private Integer whereIndex; + + private String paramName; + + /** + * whereIn类型 + * {@link DataScopeWhereInTypeEnum} + */ + private DataScopeWhereInTypeEnum dataScopeWhereInType; +} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeViewTypeVO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain/DataScopeViewTypeVO.java similarity index 60% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeViewTypeVO.java rename to smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain/DataScopeViewTypeVO.java index 853a514f..22231d22 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeViewTypeVO.java +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain/DataScopeViewTypeVO.java @@ -1,18 +1,17 @@ -package net.lab1024.smartadmin.module.system.datascope.domain.dto; +package net.lab1024.sa.admin.module.system.datascope.domain; import io.swagger.annotations.ApiModelProperty; import lombok.Builder; import lombok.Data; /** - * [ ] + * 数据范围 * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/28 0028 下午 15:41 - * @since JDK1.8 + * @Author 1024创新实验室: 罗伊 + * @Date 2020/11/28 20:59:17 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ @Data @Builder @@ -20,6 +19,7 @@ public class DataScopeViewTypeVO { @ApiModelProperty("可见范围") private Integer viewType; + @ApiModelProperty("可见范围名称") private String viewTypeName; diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/service/DataScopeService.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/service/DataScopeService.java new file mode 100644 index 00000000..7353706e --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/service/DataScopeService.java @@ -0,0 +1,75 @@ +package net.lab1024.sa.admin.module.system.datascope.service; + +import com.google.common.collect.Lists; +import net.lab1024.sa.admin.module.system.datascope.constant.DataScopeTypeEnum; +import net.lab1024.sa.admin.module.system.datascope.constant.DataScopeViewTypeEnum; +import net.lab1024.sa.admin.module.system.datascope.domain.DataScopeAndViewTypeVO; +import net.lab1024.sa.admin.module.system.datascope.domain.DataScopeDTO; +import net.lab1024.sa.admin.module.system.datascope.domain.DataScopeViewTypeVO; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import org.springframework.stereotype.Service; + +import java.util.Comparator; +import java.util.List; + +/** + * 数据范围 保存 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2020/11/28 20:59:17 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Service +public class DataScopeService { + + /** + * 获取所有可以进行数据范围配置的信息 + * + * @return + */ + public ResponseDTO> dataScopeList() { + List dataScopeList = this.getDataScopeType(); + List dataScopeAndTypeList = SmartBeanUtil.copyList(dataScopeList, DataScopeAndViewTypeVO.class); + List typeList = this.getViewType(); + dataScopeAndTypeList.forEach(e -> { + e.setViewTypeList(typeList); + }); + return ResponseDTO.ok(dataScopeAndTypeList); + } + + /** + * 获取当前系统存在的数据可见范围 + * + * @return + */ + public List getViewType() { + List viewTypeList = Lists.newArrayList(); + DataScopeViewTypeEnum[] enums = DataScopeViewTypeEnum.class.getEnumConstants(); + DataScopeViewTypeVO dataScopeViewTypeDTO; + for (DataScopeViewTypeEnum viewTypeEnum : enums) { + dataScopeViewTypeDTO = DataScopeViewTypeVO.builder().viewType(viewTypeEnum.getValue()).viewTypeLevel(viewTypeEnum.getLevel()).viewTypeName(viewTypeEnum.getDesc()).build(); + viewTypeList.add(dataScopeViewTypeDTO); + } + Comparator comparator = (h1, h2) -> h1.getViewTypeLevel().compareTo(h2.getViewTypeLevel()); + viewTypeList.sort(comparator); + return viewTypeList; + } + + public List getDataScopeType() { + List dataScopeTypeList = Lists.newArrayList(); + DataScopeTypeEnum[] enums = DataScopeTypeEnum.class.getEnumConstants(); + DataScopeDTO dataScopeDTO; + for (DataScopeTypeEnum typeEnum : enums) { + dataScopeDTO = + DataScopeDTO.builder().dataScopeType(typeEnum.getValue()).dataScopeTypeDesc(typeEnum.getDesc()).dataScopeTypeName(typeEnum.getName()).dataScopeTypeSort(typeEnum.getSort()).build(); + dataScopeTypeList.add(dataScopeDTO); + } + Comparator comparator = (h1, h2) -> h1.getDataScopeTypeSort().compareTo(h2.getDataScopeTypeSort()); + dataScopeTypeList.sort(comparator); + return dataScopeTypeList; + } + +} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/service/DataScopeSqlConfigService.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/service/DataScopeSqlConfigService.java similarity index 67% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/service/DataScopeSqlConfigService.java rename to smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/service/DataScopeSqlConfigService.java index 30381384..fc98e24b 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/service/DataScopeSqlConfigService.java +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/service/DataScopeSqlConfigService.java @@ -1,16 +1,14 @@ -package net.lab1024.smartadmin.module.system.datascope.service; +package net.lab1024.sa.admin.module.system.datascope.service; import lombok.extern.slf4j.Slf4j; -import net.lab1024.smartadmin.common.anno.DataScope; -import net.lab1024.smartadmin.module.system.datascope.constant.DataScopeTypeEnum; -import net.lab1024.smartadmin.module.system.datascope.constant.DataScopeViewTypeEnum; -import net.lab1024.smartadmin.module.system.datascope.constant.DataScopeWhereInTypeEnum; -import net.lab1024.smartadmin.module.system.datascope.domain.dto.DataScopeSqlConfigDTO; -import net.lab1024.smartadmin.module.system.datascope.strategy.DataScopePowerStrategy; -import net.lab1024.smartadmin.module.system.login.domain.RequestTokenBO; -import net.lab1024.smartadmin.third.SmartApplicationContext; -import net.lab1024.smartadmin.util.SmartRequestTokenUtil; -import org.apache.commons.collections.CollectionUtils; +import net.lab1024.sa.admin.module.system.datascope.constant.DataScopeTypeEnum; +import net.lab1024.sa.admin.module.system.datascope.constant.DataScopeViewTypeEnum; +import net.lab1024.sa.admin.module.system.datascope.constant.DataScopeWhereInTypeEnum; +import net.lab1024.sa.admin.module.system.datascope.domain.DataScopeSqlConfig; +import net.lab1024.sa.admin.module.system.datascope.DataScope; +import net.lab1024.sa.admin.module.system.datascope.strategy.DataScopePowerStrategy; +import net.lab1024.sa.common.common.util.SmartRequestUtil; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.reflections.Reflections; import org.reflections.scanners.MethodAnnotationsScanner; @@ -18,6 +16,7 @@ import org.reflections.util.ClasspathHelper; import org.reflections.util.ConfigurationBuilder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; @@ -28,27 +27,18 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; /** - * [ ] + * sql配置 * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/29 0029 上午 10:12 - * @since JDK1.8 + * @Author 1024创新实验室: 罗伊 + * @Date 2020/11/28 20:59:17 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ @Slf4j @Service public class DataScopeSqlConfigService { - private ConcurrentHashMap dataScopeMethodMap = new ConcurrentHashMap<>(); - - @Autowired - private DataScopeViewService dataScopeViewService; - - @Value("${swagger.packAge}") - private String scanPackage; - /** * 注解joinsql 参数 */ @@ -56,6 +46,19 @@ public class DataScopeSqlConfigService { private static final String DEPARTMENT_PARAM = "#departmentIds"; + private ConcurrentHashMap dataScopeMethodMap = new ConcurrentHashMap<>(); + + @Autowired + private DataScopeViewService dataScopeViewService; + + @Value("${swagger.package}") + private String scanPackage; + + + @Autowired + private ApplicationContext applicationContext; + + @PostConstruct private void initDataScopeMethodMap() { this.refreshDataScopeMethodMap(); @@ -66,17 +69,19 @@ public class DataScopeSqlConfigService { * * @return */ - private Map refreshDataScopeMethodMap() { + private Map refreshDataScopeMethodMap() { Reflections reflections = new Reflections(new ConfigurationBuilder().setUrls(ClasspathHelper.forPackage(scanPackage)).setScanners(new MethodAnnotationsScanner())); Set methods = reflections.getMethodsAnnotatedWith(DataScope.class); for (Method method : methods) { DataScope dataScopeAnnotation = method.getAnnotation(DataScope.class); if (dataScopeAnnotation != null) { - DataScopeSqlConfigDTO configDTO = new DataScopeSqlConfigDTO(); + DataScopeSqlConfig configDTO = new DataScopeSqlConfig(); configDTO.setDataScopeType(dataScopeAnnotation.dataScopeType()); configDTO.setJoinSql(dataScopeAnnotation.joinSql()); configDTO.setWhereIndex(dataScopeAnnotation.whereIndex()); configDTO.setDataScopeWhereInType(dataScopeAnnotation.whereInType()); + configDTO.setParamName(dataScopeAnnotation.paramName()); + configDTO.setJoinSqlImplClazz(dataScopeAnnotation.joinSqlImplClazz()); dataScopeMethodMap.put(method.getDeclaringClass().getSimpleName() + "." + method.getName(), configDTO); } } @@ -89,35 +94,37 @@ public class DataScopeSqlConfigService { * @param method * @return */ - public DataScopeSqlConfigDTO getSqlConfig(String method) { - DataScopeSqlConfigDTO sqlConfigDTO = this.dataScopeMethodMap.get(method); + public DataScopeSqlConfig getSqlConfig(String method) { + DataScopeSqlConfig sqlConfigDTO = this.dataScopeMethodMap.get(method); return sqlConfigDTO; } /** * 组装需要拼接的sql - * + * @param paramMap * @param sqlConfigDTO * @return */ - public String getJoinSql(DataScopeSqlConfigDTO sqlConfigDTO) { + public String getJoinSql(Map paramMap, DataScopeSqlConfig sqlConfigDTO) { DataScopeTypeEnum dataScopeTypeEnum = sqlConfigDTO.getDataScopeType(); String joinSql = sqlConfigDTO.getJoinSql(); - RequestTokenBO requestToken = SmartRequestTokenUtil.getThreadLocalUser(); - Long employeeId = requestToken.getRequestUserId(); + Long employeeId = SmartRequestUtil.getRequestUserId(); + if (employeeId == null) { + return ""; + } if (DataScopeWhereInTypeEnum.CUSTOM_STRATEGY == sqlConfigDTO.getDataScopeWhereInType()) { Class strategyClass = sqlConfigDTO.getJoinSqlImplClazz(); - if(strategyClass == null){ + if (strategyClass == null) { log.warn("data scope custom strategy class is null"); return ""; } - DataScopePowerStrategy powerStrategy = (DataScopePowerStrategy)SmartApplicationContext.getBean(sqlConfigDTO.getJoinSqlImplClazz()); + DataScopePowerStrategy powerStrategy = (DataScopePowerStrategy) applicationContext.getBean(sqlConfigDTO.getJoinSqlImplClazz()); if (powerStrategy == null) { - log.warn("data scope custom strategy class:{} ,bean is null",sqlConfigDTO.getJoinSqlImplClazz()); + log.warn("data scope custom strategy class:{} ,bean is null", sqlConfigDTO.getJoinSqlImplClazz()); return ""; } DataScopeViewTypeEnum viewTypeEnum = dataScopeViewService.getEmployeeDataScopeViewType(dataScopeTypeEnum, employeeId); - return powerStrategy.getCondition(viewTypeEnum,sqlConfigDTO); + return powerStrategy.getCondition(viewTypeEnum,paramMap, sqlConfigDTO); } if (DataScopeWhereInTypeEnum.EMPLOYEE == sqlConfigDTO.getDataScopeWhereInType()) { List canViewEmployeeIds = dataScopeViewService.getCanViewEmployeeId(dataScopeTypeEnum, employeeId); diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/service/DataScopeViewService.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/service/DataScopeViewService.java similarity index 56% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/service/DataScopeViewService.java rename to smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/service/DataScopeViewService.java index 11ec5bc7..6ec1c408 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/service/DataScopeViewService.java +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/service/DataScopeViewService.java @@ -1,19 +1,16 @@ -package net.lab1024.smartadmin.module.system.datascope.service; +package net.lab1024.sa.admin.module.system.datascope.service; import com.google.common.collect.Lists; -import net.lab1024.smartadmin.module.system.datascope.DataScopeRoleDao; -import net.lab1024.smartadmin.module.system.datascope.constant.DataScopeTypeEnum; -import net.lab1024.smartadmin.module.system.datascope.constant.DataScopeViewTypeEnum; -import net.lab1024.smartadmin.module.system.datascope.domain.entity.DataScopeRoleEntity; -import net.lab1024.smartadmin.module.system.department.DepartmentTreeService; -import net.lab1024.smartadmin.module.system.employee.EmployeeDao; -import net.lab1024.smartadmin.module.system.employee.domain.dto.EmployeeDTO; -import net.lab1024.smartadmin.module.system.employee.domain.entity.EmployeeEntity; -import net.lab1024.smartadmin.module.system.employee.domain.vo.EmployeeVO; -import net.lab1024.smartadmin.module.system.privilege.service.PrivilegeEmployeeService; -import net.lab1024.smartadmin.module.system.role.roleemployee.RoleEmployeeDao; -import net.lab1024.smartadmin.util.SmartBaseEnumUtil; -import org.apache.commons.collections.CollectionUtils; +import net.lab1024.sa.admin.module.system.datascope.constant.DataScopeTypeEnum; +import net.lab1024.sa.admin.module.system.department.service.DepartmentService; +import net.lab1024.sa.admin.module.system.employee.dao.EmployeeDao; +import net.lab1024.sa.admin.module.system.employee.domain.entity.EmployeeEntity; +import net.lab1024.sa.admin.module.system.role.dao.RoleDataScopeDao; +import net.lab1024.sa.admin.module.system.role.dao.RoleEmployeeDao; +import net.lab1024.sa.admin.module.system.role.domain.entity.RoleDataScopeEntity; +import net.lab1024.sa.admin.module.system.datascope.constant.DataScopeViewTypeEnum; +import net.lab1024.sa.common.common.util.SmartEnumUtil; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -23,14 +20,13 @@ import java.util.Map; import java.util.stream.Collectors; /** - * [ ] + * 数据范围 * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/28 0028 下午 15:56 - * @since JDK1.8 + * @Author 1024创新实验室: 罗伊 + * @Date 2020/11/28 20:59:17 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ @Service public class DataScopeViewService { @@ -39,16 +35,13 @@ public class DataScopeViewService { private RoleEmployeeDao roleEmployeeDao; @Autowired - private DataScopeRoleDao dataScopeRoleDao; - - @Autowired - private DepartmentTreeService departmentTreeService; + private RoleDataScopeDao roleDataScopeDao; @Autowired private EmployeeDao employeeDao; @Autowired - private PrivilegeEmployeeService privilegeEmployeeService; + private DepartmentService departmentService; /** * 获取某人可以查看的所有人员信息 @@ -92,15 +85,14 @@ public class DataScopeViewService { return Lists.newArrayList(); } - private List getMeDepartmentIdList(Long employeeId) { + public List getMeDepartmentIdList(Long employeeId) { EmployeeEntity employeeEntity = employeeDao.selectById(employeeId); return Lists.newArrayList(employeeEntity.getDepartmentId()); } - private List getDepartmentAndSubIdList(Long employeeId) { + public List getDepartmentAndSubIdList(Long employeeId) { EmployeeEntity employeeEntity = employeeDao.selectById(employeeId); - List allDepartmentIds = Lists.newArrayList(); - departmentTreeService.buildIdList(employeeEntity.getDepartmentId(), allDepartmentIds); + List allDepartmentIds = departmentService.selfAndChildrenIdList(employeeEntity.getDepartmentId()); return allDepartmentIds; } @@ -115,23 +107,23 @@ public class DataScopeViewService { return DataScopeViewTypeEnum.ME; } - if (privilegeEmployeeService.isSuperman(employeeId)) { - return DataScopeViewTypeEnum.ALL; - } List roleIdList = roleEmployeeDao.selectRoleIdByEmployeeId(employeeId); //未设置角色 默认本人 if (CollectionUtils.isEmpty(roleIdList)) { return DataScopeViewTypeEnum.ME; } //未设置角色数据范围 默认本人 - List dataScopeRoleList = dataScopeRoleDao.listByRoleIdList(roleIdList); + List dataScopeRoleList = roleDataScopeDao.listByRoleIdList(roleIdList); if (CollectionUtils.isEmpty(dataScopeRoleList)) { return DataScopeViewTypeEnum.ME; } - Map> listMap = dataScopeRoleList.stream().collect(Collectors.groupingBy(DataScopeRoleEntity::getDataScopeType)); - List viewLevelList = listMap.get(dataScopeTypeEnum.getValue()); - DataScopeRoleEntity maxLevel = viewLevelList.stream().max(Comparator.comparing(e -> SmartBaseEnumUtil.getEnumByValue(e.getViewType(), DataScopeViewTypeEnum.class).getLevel())).get(); - return SmartBaseEnumUtil.getEnumByValue(maxLevel.getViewType(), DataScopeViewTypeEnum.class); + Map> listMap = dataScopeRoleList.stream().collect(Collectors.groupingBy(RoleDataScopeEntity::getDataScopeType)); + List viewLevelList = listMap.getOrDefault(dataScopeTypeEnum.getValue(), Lists.newArrayList()); + if (CollectionUtils.isEmpty(viewLevelList)) { + return DataScopeViewTypeEnum.ME; + } + RoleDataScopeEntity maxLevel = viewLevelList.stream().max(Comparator.comparing(e -> SmartEnumUtil.getEnumByValue(e.getViewType(), DataScopeViewTypeEnum.class).getLevel())).get(); + return SmartEnumUtil.getEnumByValue(maxLevel.getViewType(), DataScopeViewTypeEnum.class); } /** @@ -152,8 +144,7 @@ public class DataScopeViewService { */ private List getDepartmentEmployeeIdList(Long employeeId) { EmployeeEntity employeeEntity = employeeDao.selectById(employeeId); - List employeeList = employeeDao.getEmployeeIdByDeptId(employeeEntity.getDepartmentId()); - List employeeIdList = employeeList.stream().map(e -> e.getId()).collect(Collectors.toList()); + List employeeIdList = employeeDao.getEmployeeIdByDepartmentId(employeeEntity.getDepartmentId(), false); return employeeIdList; } @@ -164,12 +155,8 @@ public class DataScopeViewService { * @return */ private List getDepartmentAndSubEmployeeIdList(Long employeeId) { - EmployeeEntity employeeEntity = employeeDao.selectById(employeeId); - List allDepartmentIds = Lists.newArrayList(); - departmentTreeService.buildIdList(employeeEntity.getDepartmentId(), allDepartmentIds); - List employeeList = employeeDao.getEmployeeIdByDeptIds(allDepartmentIds); - List employeeIdList = employeeList.stream().map(e -> e.getId()).collect(Collectors.toList()); + List allDepartmentIds = getDepartmentAndSubIdList(employeeId); + List employeeIdList = employeeDao.getEmployeeIdByDepartmentIdList(allDepartmentIds, false); return employeeIdList; } - } diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/strategy/DataScopePowerStrategy.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/strategy/DataScopePowerStrategy.java new file mode 100644 index 00000000..4611fd57 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/strategy/DataScopePowerStrategy.java @@ -0,0 +1,27 @@ +package net.lab1024.sa.admin.module.system.datascope.strategy; + +import net.lab1024.sa.admin.module.system.datascope.constant.DataScopeViewTypeEnum; +import net.lab1024.sa.admin.module.system.datascope.domain.DataScopeSqlConfig; + +import java.util.Map; + +/** + * 数据范围策略 ,使用DataScopeWhereInTypeEnum.CUSTOM_STRATEGY类型,DataScope注解的joinSql属性无用 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2020/11/28 20:59:17 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public abstract class DataScopePowerStrategy { + + /** + * 获取joinsql 字符串 + * @param viewTypeEnum + * @param paramMap + * @param sqlConfigDTO + * @return + */ + public abstract String getCondition(DataScopeViewTypeEnum viewTypeEnum, Map paramMap, DataScopeSqlConfig sqlConfigDTO); +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/controller/DepartmentController.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/controller/DepartmentController.java new file mode 100644 index 00000000..62e2fe33 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/controller/DepartmentController.java @@ -0,0 +1,71 @@ +package net.lab1024.sa.admin.module.system.department.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.admin.common.AdminBaseController; +import net.lab1024.sa.admin.constant.AdminSwaggerTagConst; +import net.lab1024.sa.admin.module.system.department.domain.form.DepartmentAddForm; +import net.lab1024.sa.admin.module.system.department.domain.form.DepartmentUpdateForm; +import net.lab1024.sa.admin.module.system.department.domain.vo.DepartmentTreeVO; +import net.lab1024.sa.admin.module.system.department.domain.vo.DepartmentVO; +import net.lab1024.sa.admin.module.system.department.service.DepartmentService; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.module.support.operatelog.annoation.OperateLog; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 部门 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-01-12 20:37:48 + * @Wechat 卓大1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@OperateLog +@RestController +@Api(tags = {AdminSwaggerTagConst.System.SYSTEM_DEPARTMENT}) +public class DepartmentController extends AdminBaseController { + + @Autowired + private DepartmentService departmentService; + + @ApiOperation(value = "查询部门树形列表 @author 卓大") + @GetMapping("/department/treeList") + public ResponseDTO> departmentTree() { + return departmentService.departmentTree(); + } + + @ApiOperation(value = "添加部门 @author 卓大") + @PostMapping("/department/add") + @PreAuthorize("@saAuth.checkPermission('system:department:add')") + public ResponseDTO addDepartment(@Valid @RequestBody DepartmentAddForm createDTO) { + return departmentService.addDepartment(createDTO); + } + + @ApiOperation(value = "更新部门 @author 卓大") + @PostMapping("/department/update") + @PreAuthorize("@saAuth.checkPermission('system:department:update')") + public ResponseDTO updateDepartment(@Valid @RequestBody DepartmentUpdateForm updateDTO) { + return departmentService.updateDepartment(updateDTO); + } + + @ApiOperation(value = "删除部门 @author 卓大") + @GetMapping("/department/delete/{departmentId}") + @PreAuthorize("@saAuth.checkPermission('system:department:delete')") + public ResponseDTO deleteDepartment(@PathVariable Long departmentId) { + return departmentService.deleteDepartment(departmentId); + } + + @ApiOperation(value = "查询部门列表 @author 卓大") + @GetMapping("/department/listAll") + public ResponseDTO> listAll() { + return ResponseDTO.ok(departmentService.listAll()); + } + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/dao/DepartmentDao.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/dao/DepartmentDao.java new file mode 100644 index 00000000..25c395ca --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/dao/DepartmentDao.java @@ -0,0 +1,40 @@ +package net.lab1024.sa.admin.module.system.department.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import net.lab1024.sa.admin.module.system.department.domain.entity.DepartmentEntity; +import net.lab1024.sa.admin.module.system.department.domain.vo.DepartmentVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 部门 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-01-12 20:37:48 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Component +@Mapper +public interface DepartmentDao extends BaseMapper { + + /** + * 根据部门id,查询此部门直接子部门的数量 + * + * @param departmentId + * @return int 子部门的数量 + */ + Integer countSubDepartment(@Param("departmentId") Long departmentId); + + /** + * 获取全部部门列表 + * + * @return + */ + List listAll(); + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/entity/DepartmentEntity.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/entity/DepartmentEntity.java new file mode 100644 index 00000000..28f9431b --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/entity/DepartmentEntity.java @@ -0,0 +1,62 @@ +package net.lab1024.sa.admin.module.system.department.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 部门实体类 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-01-12 20:37:48 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +@TableName(value = "t_department") +public class DepartmentEntity { + + /** + * 主键id + */ + @TableId(type = IdType.AUTO) + private Long departmentId; + + /** + * 部门名称 + */ + private String name; + + /** + * 负责人员工 id + */ + private Long managerId; + + /** + * 部门父级id + */ + private Long parentId; + + /** + * 排序 + */ + private Integer sort; + + + /** + * 更新时间 + */ + private LocalDateTime updateTime; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + + +} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/domain/dto/DepartmentCreateDTO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/form/DepartmentAddForm.java similarity index 58% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/domain/dto/DepartmentCreateDTO.java rename to smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/form/DepartmentAddForm.java index 3e80003c..4a10c4c5 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/domain/dto/DepartmentCreateDTO.java +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/form/DepartmentAddForm.java @@ -1,4 +1,4 @@ -package net.lab1024.smartadmin.module.system.department.domain.dto; +package net.lab1024.sa.admin.module.system.department.domain.form; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -7,27 +7,25 @@ import org.hibernate.validator.constraints.Length; import javax.validation.constraints.NotNull; /** - * - * [ ] - * - * @version 1.0 - * @since JDK1.8 - * @author yandanyang - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date + * 部门 添加表单 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-01-12 20:37:48 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ @Data -public class DepartmentCreateDTO { - +public class DepartmentAddForm { @ApiModelProperty("部门名称") @Length(min = 1, max = 50, message = "请输入正确的部门名称(1-50个字符)") @NotNull(message = "请输入正确的部门名称(1-50个字符)") private String name; - @ApiModelProperty("部门简称") - private String shortName; + @ApiModelProperty("排序") + @NotNull(message = "排序值") + private Integer sort; @ApiModelProperty("部门负责人id") private Long managerId; diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/form/DepartmentUpdateForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/form/DepartmentUpdateForm.java new file mode 100644 index 00000000..a9516819 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/form/DepartmentUpdateForm.java @@ -0,0 +1,24 @@ +package net.lab1024.sa.admin.module.system.department.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * 部门 更新表单 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-01-12 20:37:48 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class DepartmentUpdateForm extends DepartmentAddForm { + + @ApiModelProperty("部门id") + @NotNull(message = "部门id不能为空") + private Long departmentId; + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentEmployeeTreeVO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentEmployeeTreeVO.java new file mode 100644 index 00000000..aba7b263 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentEmployeeTreeVO.java @@ -0,0 +1,27 @@ +package net.lab1024.sa.admin.module.system.department.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.admin.module.system.employee.domain.vo.EmployeeVO; + +import java.util.List; + +/** + * 部门 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-01-12 20:37:48 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class DepartmentEmployeeTreeVO extends DepartmentVO { + + @ApiModelProperty("部门员工列表") + private List employees; + + @ApiModelProperty("子部门") + private List children; + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentTreeVO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentTreeVO.java new file mode 100644 index 00000000..4efef78d --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentTreeVO.java @@ -0,0 +1,32 @@ +package net.lab1024.sa.admin.module.system.department.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * 部门 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-01-12 20:37:48 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class DepartmentTreeVO extends DepartmentVO { + + @ApiModelProperty("同级上一个元素id") + private Long preId; + + @ApiModelProperty("同级下一个元素id") + private Long nextId; + + @ApiModelProperty("子部门") + private List children; + + @ApiModelProperty("自己和所有递归子部门的id集合") + private List selfAndAllChildrenIdList; + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentVO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentVO.java new file mode 100644 index 00000000..5f546fc9 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentVO.java @@ -0,0 +1,36 @@ +package net.lab1024.sa.admin.module.system.department.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 部门 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-01-12 20:37:48 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class DepartmentVO { + + @ApiModelProperty("部门id") + private Long departmentId; + + @ApiModelProperty("部门名称") + private String name; + + @ApiModelProperty("部门负责人姓名") + private String managerName; + + @ApiModelProperty("部门负责人id") + private Long managerId; + + @ApiModelProperty("父级部门id") + private Long parentId; + + @ApiModelProperty("排序") + private Integer sort; + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/manager/DepartmentCacheManager.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/manager/DepartmentCacheManager.java new file mode 100644 index 00000000..f1fc0930 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/manager/DepartmentCacheManager.java @@ -0,0 +1,249 @@ +package net.lab1024.sa.admin.module.system.department.manager; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.admin.constant.AdminCacheConst; +import net.lab1024.sa.admin.module.system.department.dao.DepartmentDao; +import net.lab1024.sa.admin.module.system.department.domain.vo.DepartmentTreeVO; +import net.lab1024.sa.admin.module.system.department.domain.vo.DepartmentVO; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.math.NumberUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 部门 缓存相关 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-01-12 20:37:48 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Slf4j +@Service +public class DepartmentCacheManager { + + @Autowired + private DepartmentDao departmentDao; + + private void logClearInfo(String cache) { + log.info("clear " + cache); + } + + // ----------------------- 清空缓存 ----------------------- + @CacheEvict(value = {AdminCacheConst.Department.DEPARTMENT_LIST_CACHE, AdminCacheConst.Department.DEPARTMENT_MAP_CACHE, AdminCacheConst.Department.DEPARTMENT_SELF_CHILDREN_CACHE, AdminCacheConst.Department.DEPARTMENT_TREE_CACHE, AdminCacheConst.Department.DEPARTMENT_PATH_CACHE,}, allEntries = true) + public void clearCache() { + logClearInfo(AdminCacheConst.Department.DEPARTMENT_LIST_CACHE); + } + + // ----------------------- 查询 ----------------------- + + /** + * 部门列表 + * + * @return + */ + @Cacheable(AdminCacheConst.Department.DEPARTMENT_LIST_CACHE) + public List getDepartmentList() { + List departmentVOList = departmentDao.listAll(); + return departmentVOList; + } + + /** + * 部门map + * + * @return + */ + @Cacheable(AdminCacheConst.Department.DEPARTMENT_MAP_CACHE) + public Map getDepartmentMap() { + return departmentDao.listAll().stream().collect(Collectors.toMap(DepartmentVO::getDepartmentId, Function.identity())); + } + + + /** + * 缓存部门树结构 + * + * @return + */ + @Cacheable(AdminCacheConst.Department.DEPARTMENT_TREE_CACHE) + public List getDepartmentTree() { + List departmentVOList = departmentDao.listAll(); + return this.buildTree(departmentVOList); + } + + /** + * 缓存某个部门的下级id列表 + * + * @param departmentId + * @return + */ + @Cacheable(AdminCacheConst.Department.DEPARTMENT_SELF_CHILDREN_CACHE) + public List getDepartmentSelfAndChildren(Long departmentId) { + List departmentVOList = departmentDao.listAll(); + List idList = this.selfAndChildrenIdList(departmentId, departmentVOList); + return idList; + } + + + /** + * 部门的路径名称 + * + * @return + */ + @Cacheable(AdminCacheConst.Department.DEPARTMENT_PATH_CACHE) + public Map getDepartmentPathMap() { + List departmentVOList = departmentDao.listAll(); + Map departmentMap = departmentVOList.stream().collect(Collectors.toMap(DepartmentVO::getDepartmentId, Function.identity())); + + Map pathNameMap = Maps.newHashMap(); + for (DepartmentVO departmentVO : departmentVOList) { + String pathName = this.buildDepartmentPath(departmentVO, departmentMap); + pathNameMap.put(departmentVO.getDepartmentId(), pathName); + } + + return pathNameMap; + } + + /** + * 构建父级考点路径 + * + * @param departmentVO + * @param departmentMap + */ + private String buildDepartmentPath(DepartmentVO departmentVO, Map departmentMap) { + if (Objects.equals(departmentVO.getParentId(), NumberUtils.LONG_ZERO)) { + return departmentVO.getName(); + } + //父节点 + DepartmentVO parentDepartment = departmentMap.get(departmentVO.getParentId()); + if (parentDepartment == null) { + return departmentVO.getName(); + } + String pathName = buildDepartmentPath(parentDepartment, departmentMap); + return pathName + "/" + departmentVO.getName(); + + } + // ---------------------- 构造树的一些方法 ------------------------------ + + /** + * 构建部门树结构 + * + * @param voList + * @return + */ + public List buildTree(List voList) { + if (CollectionUtils.isEmpty(voList)) { + return Lists.newArrayList(); + } + List rootList = voList.stream().filter(e -> e.getParentId() == null || Objects.equals(e.getParentId(), NumberUtils.LONG_ZERO)).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(rootList)) { + return Lists.newArrayList(); + } + List treeVOList = SmartBeanUtil.copyList(rootList, DepartmentTreeVO.class); + this.recursiveBuildTree(treeVOList, voList); + return treeVOList; + } + + /** + * 构建所有根节点的下级树形结构 + * + * @param nodeList + * @param + */ + private void recursiveBuildTree(List nodeList, List allDepartmentList) { + int nodeSize = nodeList.size(); + for (int i = 0; i < nodeSize; i++) { + int preIndex = i - 1; + int nextIndex = i + 1; + DepartmentTreeVO node = nodeList.get(i); + if (preIndex > -1) { + node.setPreId(nodeList.get(preIndex).getDepartmentId()); + } + if (nextIndex < nodeSize) { + node.setNextId(nodeList.get(nextIndex).getDepartmentId()); + } + + ArrayList selfAndAllChildrenIdList = Lists.newArrayList(); + selfAndAllChildrenIdList.add(node.getDepartmentId()); + node.setSelfAndAllChildrenIdList(selfAndAllChildrenIdList); + + List children = getChildren(node.getDepartmentId(), allDepartmentList); + if (CollectionUtils.isNotEmpty(children)) { + node.setChildren(children); + this.recursiveBuildTree(children, allDepartmentList); + } + } + } + + + /** + * 获取子元素 + * + * @param departmentId + * @param voList + * @return + */ + private List getChildren(Long departmentId, List voList) { + List childrenEntityList = voList.stream().filter(e -> departmentId.equals(e.getParentId())).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(childrenEntityList)) { + return Lists.newArrayList(); + } + return SmartBeanUtil.copyList(childrenEntityList, DepartmentTreeVO.class); + } + + + /** + * 通过部门id,获取当前以及下属部门 + * + * @param departmentId + * @param voList + */ + public List selfAndChildrenIdList(Long departmentId, List voList) { + List selfAndChildrenIdList = Lists.newArrayList(); + if (CollectionUtils.isEmpty(voList)) { + return selfAndChildrenIdList; + } + selfAndChildrenIdList.add(departmentId); + List children = this.getChildren(departmentId, voList); + if (CollectionUtils.isEmpty(children)) { + return selfAndChildrenIdList; + } + List childrenIdList = children.stream().map(DepartmentTreeVO::getDepartmentId).collect(Collectors.toList()); + selfAndChildrenIdList.addAll(childrenIdList); + for (Long childId : childrenIdList) { + this.selfAndChildrenRecursion(selfAndChildrenIdList, childId, voList); + } + return selfAndChildrenIdList; + } + + /** + * 递归查询 + * + * @param selfAndChildrenIdList + * @param departmentId + * @param voList + */ + public void selfAndChildrenRecursion(List selfAndChildrenIdList, Long departmentId, List voList) { + List children = this.getChildren(departmentId, voList); + if (CollectionUtils.isEmpty(children)) { + return; + } + List childrenIdList = children.stream().map(DepartmentTreeVO::getDepartmentId).collect(Collectors.toList()); + selfAndChildrenIdList.addAll(childrenIdList); + for (Long childId : childrenIdList) { + this.selfAndChildrenRecursion(selfAndChildrenIdList, childId, voList); + } + } +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/manager/DepartmentManager.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/manager/DepartmentManager.java new file mode 100644 index 00000000..8bc49a91 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/manager/DepartmentManager.java @@ -0,0 +1,21 @@ +package net.lab1024.sa.admin.module.system.department.manager; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import net.lab1024.sa.admin.module.system.department.dao.DepartmentDao; +import org.springframework.stereotype.Service; +import net.lab1024.sa.admin.module.system.department.domain.entity.DepartmentEntity; + +/** + * 部门 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-01-12 20:37:48 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Service +public class DepartmentManager extends ServiceImpl { + + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/service/DepartmentService.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/service/DepartmentService.java new file mode 100644 index 00000000..c82c98db --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/service/DepartmentService.java @@ -0,0 +1,210 @@ +package net.lab1024.sa.admin.module.system.department.service; + +import net.lab1024.sa.admin.module.system.department.dao.DepartmentDao; +import net.lab1024.sa.admin.module.system.department.domain.entity.DepartmentEntity; +import net.lab1024.sa.admin.module.system.department.domain.form.DepartmentAddForm; +import net.lab1024.sa.admin.module.system.department.domain.form.DepartmentUpdateForm; +import net.lab1024.sa.admin.module.system.department.domain.vo.DepartmentTreeVO; +import net.lab1024.sa.admin.module.system.department.domain.vo.DepartmentVO; +import net.lab1024.sa.admin.module.system.department.manager.DepartmentCacheManager; +import net.lab1024.sa.admin.module.system.employee.dao.EmployeeDao; +import net.lab1024.sa.common.common.code.UserErrorCode; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +/** + * 部门 service + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-01-12 20:37:48 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Service +public class DepartmentService { + + @Autowired + private DepartmentDao departmentDao; + + @Autowired + private EmployeeDao employeeDao; + + @Autowired + private DepartmentCacheManager departmentCacheManager; + + // ---------------------------- 增加、修改、删除 ---------------------------- + + /** + * 新增添加部门 + * + * @param departmentAddForm + * @return AjaxResult + */ + + public ResponseDTO addDepartment(DepartmentAddForm departmentAddForm) { + DepartmentEntity departmentEntity = SmartBeanUtil.copy(departmentAddForm, DepartmentEntity.class); + departmentDao.insert(departmentEntity); + this.clearCache(); + return ResponseDTO.ok(); + } + + + /** + * 更新部门信息 + * + * @param updateDTO + * @return + */ + public ResponseDTO updateDepartment(DepartmentUpdateForm updateDTO) { + if (updateDTO.getParentId() == null) { + return ResponseDTO.userErrorParam("父级部门id不能为空"); + } + DepartmentEntity entity = departmentDao.selectById(updateDTO.getDepartmentId()); + if (entity == null) { + return ResponseDTO.error(UserErrorCode.DATA_NOT_EXIST); + } + DepartmentEntity departmentEntity = SmartBeanUtil.copy(updateDTO, DepartmentEntity.class); + departmentEntity.setSort(updateDTO.getSort()); + departmentDao.updateById(departmentEntity); + this.clearCache(); + return ResponseDTO.ok(); + } + + /** + * 根据id删除部门 + * 1、需要判断当前部门是否有子部门,有子部门则不允许删除 + * 2、需要判断当前部门是否有员工,有员工则不能删除 + * + * @param departmentId + * @return + */ + public ResponseDTO deleteDepartment(Long departmentId) { + DepartmentEntity departmentEntity = departmentDao.selectById(departmentId); + if (null == departmentEntity) { + return ResponseDTO.error(UserErrorCode.DATA_NOT_EXIST); + } + // 是否有子级部门 + int subDepartmentNum = departmentDao.countSubDepartment(departmentId); + if (subDepartmentNum > 0) { + return ResponseDTO.userErrorParam("请先删除子级部门"); + } + + // 是否有未删除员工 + int employeeNum = employeeDao.countByDepartmentId(departmentId); + if (employeeNum > 0) { + return ResponseDTO.userErrorParam("请先删除部门员工"); + } + departmentDao.deleteById(departmentId); + // 清除缓存 + this.clearCache(); + return ResponseDTO.ok(); + } + + /** + * 清除自身以及下级的id列表缓存 + */ + private void clearCache() { + departmentCacheManager.clearCache(); + } + + // ---------------------------- 查询 ---------------------------- + + /** + * 获取部门树形结构 + * + * @return + */ + public ResponseDTO> departmentTree() { + List treeVOList = departmentCacheManager.getDepartmentTree(); + return ResponseDTO.ok(treeVOList); + } + + + /** + * 自身以及所有下级的部门id列表 + * + * @param departmentId + * @return + */ + public List selfAndChildrenIdList(Long departmentId) { + return departmentCacheManager.getDepartmentSelfAndChildren(departmentId); + } + + + /** + * 获取所有部门 + * + * @return + */ + public List listAll() { + return departmentCacheManager.getDepartmentList(); + } + + + /** + * 获取部门 + * + * @param departmentId + */ + public DepartmentVO getDepartmentById(Long departmentId) { + return departmentCacheManager.getDepartmentMap().get(departmentId); + } + + /** + * 获取部门路径:/公司/研发部/产品组 + * + * @param departmentId + */ + public String getDepartmentPath(Long departmentId) { + return departmentCacheManager.getDepartmentPathMap().get(departmentId); + } + + /** + * 查询全部父级部门(不包含自己) + * + * @param departmentId + * @return + * @author listen + */ + public List queryAllParentDepartment(Long departmentId) { + List list = new ArrayList<>(); + + Map departmentMap = departmentCacheManager.getDepartmentMap(); + DepartmentVO departmentVO = departmentMap.get(departmentId); + while (departmentVO != null) { + list.add(departmentVO); + departmentVO = departmentMap.get(departmentVO.getParentId()); + } + Collections.reverse(list); + return list; + } + + /** + * 查询全部父级部门(不包含自己) + * + * @param departmentId + * @return + * @author listen + */ + public List queryAllParentDepartmentIdList(Long departmentId) { + List list = new ArrayList<>(); + + Map departmentMap = departmentCacheManager.getDepartmentMap(); + DepartmentVO departmentVO = departmentMap.get(departmentId); + while (departmentVO != null) { + list.add(departmentVO.getDepartmentId()); + departmentVO = departmentMap.get(departmentVO.getParentId()); + } + Collections.reverse(list); + return list; + } + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/controller/EmployeeController.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/controller/EmployeeController.java new file mode 100644 index 00000000..c5f0f325 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/controller/EmployeeController.java @@ -0,0 +1,105 @@ +package net.lab1024.sa.admin.module.system.employee.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.admin.common.AdminBaseController; +import net.lab1024.sa.admin.constant.AdminSwaggerTagConst; +import net.lab1024.sa.admin.module.system.employee.domain.form.*; +import net.lab1024.sa.admin.module.system.employee.domain.vo.EmployeeVO; +import net.lab1024.sa.admin.module.system.employee.service.EmployeeService; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartRequestUtil; +import net.lab1024.sa.common.module.support.operatelog.annoation.OperateLog; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 员工 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021-12-09 22:57:49 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@RestController +@OperateLog +@Api(tags = {AdminSwaggerTagConst.System.SYSTEM_EMPLOYEE}) +public class EmployeeController extends AdminBaseController { + + @Autowired + private EmployeeService employeeService; + + @PostMapping("/employee/query") + @ApiOperation(value = "员工管理查询 @author 卓大") + public ResponseDTO> query(@Valid @RequestBody EmployeeQueryForm query) { + return employeeService.queryEmployee(query); + } + + @ApiOperation(value = "添加员工(返回添加员工的密码) @author 卓大") + @PostMapping("/employee/add") + @PreAuthorize("@saAuth.checkPermission('system:employee:add')") + public ResponseDTO addEmployee(@Valid @RequestBody EmployeeAddForm employeeAddForm) { + return employeeService.addEmployee(employeeAddForm); + } + + @ApiOperation(value = "更新员工 @author 卓大") + @PostMapping("/employee/update") + @PreAuthorize("@saAuth.checkPermission('system:employee:update')") + public ResponseDTO updateEmployee(@Valid @RequestBody EmployeeUpdateForm employeeUpdateForm) { + return employeeService.updateEmployee(employeeUpdateForm); + } + + @ApiOperation(value = "更新员工禁用/启用状态 @author 卓大") + @GetMapping("/employee/update/disabled/{employeeId}") + @PreAuthorize("@saAuth.checkPermission('system:employee:disabled')") + public ResponseDTO updateDisableFlag(@PathVariable Long employeeId) { + return employeeService.updateDisableFlag(employeeId); + } + + @ApiOperation(value = "批量删除员工 @author 卓大") + @PostMapping("/employee/update/batch/delete") + @PreAuthorize("@saAuth.checkPermission('system:employee:delete')") + public ResponseDTO batchUpdateDeleteFlag(@RequestBody List employeeIdList) { + return employeeService.batchUpdateDeleteFlag(employeeIdList); + } + + @ApiOperation(value = "批量调整员工部门 @author 卓大") + @PostMapping("/employee/update/batch/department") + @PreAuthorize("@saAuth.checkPermission('system:employee:department:update')") + public ResponseDTO batchUpdateDepartment(@Valid @RequestBody EmployeeBatchUpdateDepartmentForm batchUpdateDepartmentForm) { + return employeeService.batchUpdateDepartment(batchUpdateDepartmentForm); + } + + @ApiOperation(value = "修改密码 @author 卓大") + @PostMapping("/employee/update/password") + public ResponseDTO updatePassword(@Valid @RequestBody EmployeeUpdatePasswordForm updatePasswordForm) { + updatePasswordForm.setEmployeeId(SmartRequestUtil.getRequestUserId()); + return employeeService.updatePassword(updatePasswordForm); + } + + @ApiOperation(value = "重置员工密码 @author 卓大") + @GetMapping("/employee/update/password/reset/{employeeId}") + @PreAuthorize("@saAuth.checkPermission('system:employee:password:reset')") + public ResponseDTO resetPassword(@PathVariable Integer employeeId) { + return employeeService.resetPassword(employeeId); + } + + @ApiOperation(value = "查询员工-根据部门id @author 卓大") + @GetMapping("/employee/getAllEmployeeByDepartmentId/{departmentId}") + public ResponseDTO> getAllEmployeeByDepartmentId(@PathVariable Long departmentId) { + return employeeService.getAllEmployeeByDepartmentId(departmentId, Boolean.FALSE); + } + + @ApiOperation("查询所有员工 @author 卓大") + @GetMapping("/employee/queryAll") + public ResponseDTO> queryAllEmployee(@RequestParam(value = "disabledFlag", required = false) Boolean disabledFlag) { + return employeeService.queryAllEmployee(disabledFlag); + } + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/dao/EmployeeDao.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/dao/EmployeeDao.java new file mode 100644 index 00000000..b5bc89dd --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/dao/EmployeeDao.java @@ -0,0 +1,171 @@ +package net.lab1024.sa.admin.module.system.employee.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.lab1024.sa.admin.module.system.employee.domain.entity.EmployeeEntity; +import net.lab1024.sa.admin.module.system.employee.domain.form.EmployeeQueryForm; +import net.lab1024.sa.admin.module.system.employee.domain.vo.EmployeeVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +import java.util.Collection; +import java.util.List; + +/** + * 员工 dao + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021-12-09 22:57:49 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Mapper +@Component +public interface EmployeeDao extends BaseMapper { + /** + * 查询员工列表 + * + * @param page + * @param queryForm + * @return + */ + List queryEmployee(Page page, @Param("queryForm") EmployeeQueryForm queryForm, @Param("departmentIdList") List departmentIdList); + + /** + * 查询员工 + */ + List selectEmployeeByDisabledAndDeleted(@Param("disabledFlag") Boolean disabledFlag, @Param("deletedFlag") Boolean deletedFlag); + + + /** + * 更新单个 + * + * @param employeeId + * @param disabledFlag + */ + void updateDisableFlag(@Param("employeeId") Long employeeId, @Param("disabledFlag") Boolean disabledFlag); + + + /** + * 通过登录名查询 + * + * @param loginName + * @param disabledFlag + * @return + */ + EmployeeEntity getByLoginName(@Param("loginName") String loginName, + @Param("disabledFlag") Boolean disabledFlag); + + + /** + * 通过姓名查询 + * + * @param actualName + * @param disabledFlag + * @return + */ + EmployeeEntity getByActualName(@Param("actualName") String actualName, + @Param("disabledFlag") Boolean disabledFlag + ); + + /** + * 通过手机号查询 + * + * @param phone + * @param disabledFlag + * @return + */ + EmployeeEntity getByPhone(@Param("phone") String phone, @Param("disabledFlag") Boolean disabledFlag); + + /** + * 获取所有员工 + * + * @return + */ + List listAll(); + + /** + * 获取某个部门员工数 + * + * @param departmentId + * @return + */ + Integer countByDepartmentId(@Param("departmentId") Long departmentId); + + /** + * 获取一批员工 + * + * @param employeeIds + * @return + */ + List getEmployeeByIds(@Param("employeeIds") Collection employeeIds); + + + /** + * 查询单个员工信息 + * + * @param employeeId + * @return + */ + EmployeeVO getEmployeeById(@Param("employeeId") Long employeeId); + + + /** + * 获取某个部门的员工 + * + * @param departmentId + * @param disabledFlag + * @return + */ + List selectByDepartmentId(@Param("departmentId") Long departmentId, @Param("disabledFlag") Boolean disabledFlag); + + + /** + * 查询某些部门下用户名是xxx的员工 + * + * @param departmentIdList + * @param actualName + * @param disabledFlag + * @return + */ + List selectByActualName(@Param("departmentIdList") List departmentIdList, @Param("actualName") String actualName, @Param("disabledFlag") Boolean disabledFlag); + + + /** + * 获取某批部门的员工Id + * + * @param departmentIds + * @return + */ + List getEmployeeIdByDepartmentIdList(@Param("departmentIds") List departmentIds, @Param("disabledFlag") Boolean disabledFlag); + + /** + * 获取所有 + * + * @param leaveFlag + * @param disabledFlag + * @return + */ + List getEmployeeId(@Param("leaveFlag") Boolean leaveFlag, @Param("disabledFlag") Boolean disabledFlag); + + /** + * 获取某个部门的员工Id + * + * @param departmentId + * @param disabledFlag + * @return + */ + List getEmployeeIdByDepartmentId(@Param("departmentId") Long departmentId, @Param("disabledFlag") Boolean disabledFlag); + + /** + * 员工重置密码 + * + * @param employeeId + * @param password + * @return + */ + Integer updatePassword(@Param("employeeId") Integer employeeId, @Param("password") String password); + +} \ No newline at end of file diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/entity/EmployeeEntity.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/entity/EmployeeEntity.java new file mode 100644 index 00000000..b66b5961 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/entity/EmployeeEntity.java @@ -0,0 +1,81 @@ +package net.lab1024.sa.admin.module.system.employee.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 员工 实体表 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021-12-09 22:57:49 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +@TableName("t_employee") +public class EmployeeEntity { + + @TableId(type = IdType.AUTO) + private Long employeeId; + + /** + * 登录账号 + */ + private String loginName; + + /** + * 登录密码 + */ + private String loginPwd; + + /** + * 员工名称 + */ + private String actualName; + + /** + * 性别 + */ + private Integer gender; + + /** + * 手机号码 + */ + private String phone; + + /** + * 部门id + */ + private Long departmentId; + + /** + * 是否为超级管理员: 0 不是,1是 + */ + private Boolean administratorFlag; + + /** + * 是否被禁用 0否1是 + */ + private Boolean disabledFlag; + + /** + * 是否删除0否 1是 + */ + private Boolean deletedFlag; + + /** + * 备注 + */ + private String remark; + + private LocalDateTime updateTime; + + private LocalDateTime createTime; + + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeAddForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeAddForm.java new file mode 100644 index 00000000..09bf252d --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeAddForm.java @@ -0,0 +1,56 @@ +package net.lab1024.sa.admin.module.system.employee.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.enumeration.GenderEnum; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; +import net.lab1024.sa.common.common.validator.enumeration.CheckEnum; +import org.hibernate.validator.constraints.Length; +import net.lab1024.sa.common.common.util.SmartVerificationUtil; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; +import java.util.List; + +/** + * 添加员工 + * + * @Author 1024创新实验室: 开云 + * @Date 2021-12-20 21:06:49 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class EmployeeAddForm { + + @ApiModelProperty("姓名") + @NotNull(message = "姓名不能为空") + @Length(max = 30, message = "姓名最多30字符") + private String actualName; + + @ApiModelProperty("登录账号") + @NotNull(message = "登录账号不能为空") + @Length(max = 30, message = "登录账号最多30字符") + private String loginName; + + @ApiModelPropertyEnum(GenderEnum.class) + @CheckEnum(value = GenderEnum.class, message = "性别错误") + private Integer gender; + + @ApiModelProperty("部门id") + @NotNull(message = "部门id不能为空") + private Long departmentId; + + @ApiModelProperty("是否启用") + @NotNull(message = "是否被禁用不能为空") + private Boolean disabledFlag; + + @ApiModelProperty("手机号") + @NotNull(message = "手机号不能为空") + @Pattern(regexp = SmartVerificationUtil.PHONE_REGEXP, message = "手机号格式不正确") + private String phone; + + @ApiModelProperty("角色列表") + private List roleIdList; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeBatchUpdateDepartmentForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeBatchUpdateDepartmentForm.java new file mode 100644 index 00000000..4a9de07a --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeBatchUpdateDepartmentForm.java @@ -0,0 +1,31 @@ +package net.lab1024.sa.admin.module.system.employee.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.util.List; + +/** + * 员工更新部门 + * + * @Author 1024创新实验室: 开云 + * @Date 2021-12-20 21:06:49 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class EmployeeBatchUpdateDepartmentForm { + + @ApiModelProperty("员工id") + @NotEmpty(message = "员工id不能为空") + @Size(max = 99, message = "一次最多调整99个员工") + private List employeeIdList; + + @ApiModelProperty("部门ID") + @NotNull(message = "部门ID不能为空") + private Long departmentId; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeQueryForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeQueryForm.java new file mode 100644 index 00000000..8315f206 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeQueryForm.java @@ -0,0 +1,40 @@ +package net.lab1024.sa.admin.module.system.employee.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.domain.PageParam; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.Size; +import java.util.List; + +/** + * 员工列表 + * + * @Author 1024创新实验室: 开云 + * @Date 2021-12-20 21:06:49 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class EmployeeQueryForm extends PageParam { + + @ApiModelProperty("搜索词") + @Length(max = 20, message = "搜索词最多20字符") + private String keyword; + + @ApiModelProperty("部门id") + private Long departmentId; + + @ApiModelProperty("是否禁用") + private Boolean disabledFlag; + + @ApiModelProperty("员工id集合") + @Size(max = 99, message = "最多查询99个员工") + private List employeeIdList; + + @ApiModelProperty(value = "删除标识", hidden = true) + private Boolean deletedFlag; + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeUpdateForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeUpdateForm.java new file mode 100644 index 00000000..860a66d4 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeUpdateForm.java @@ -0,0 +1,23 @@ +package net.lab1024.sa.admin.module.system.employee.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * 更新员工 + * + * @Author 1024创新实验室: 开云 + * @Date 2021-12-20 21:06:49 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class EmployeeUpdateForm extends EmployeeAddForm { + + @ApiModelProperty("员工id") + @NotNull(message = "员工id不能为空") + private Long employeeId; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeUpdatePasswordForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeUpdatePasswordForm.java new file mode 100644 index 00000000..d4e4758e --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeUpdatePasswordForm.java @@ -0,0 +1,34 @@ +package net.lab1024.sa.admin.module.system.employee.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.util.SmartVerificationUtil; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Pattern; + +/** + * 修改密码所需参数 + * + * @Author 1024创新实验室: 开云 + * @Date 2021-12-20 21:06:49 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class EmployeeUpdatePasswordForm { + + @ApiModelProperty(hidden = true) + private Long employeeId; + + @ApiModelProperty("原密码") + @NotBlank(message = "原密码不能为空哦") + @Pattern(regexp = SmartVerificationUtil.PWD_REGEXP, message = "原密码请输入6-15位(数字|大小写字母|小数点)") + private String oldPassword; + + @ApiModelProperty("新密码") + @NotBlank(message = "新密码不能为空哦") + @Pattern(regexp = SmartVerificationUtil.PWD_REGEXP, message = "新密码请输入6-15位(数字|大小写字母|小数点)") + private String newPassword; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeUpdateRoleForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeUpdateRoleForm.java new file mode 100644 index 00000000..4672565f --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeUpdateRoleForm.java @@ -0,0 +1,30 @@ +package net.lab1024.sa.admin.module.system.employee.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.util.List; + +/** + * 员工更新角色 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2021-12-20 20:55:13 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class EmployeeUpdateRoleForm { + + @ApiModelProperty("员工id") + @NotNull(message = "员工id不能为空") + private Long employeeId; + + @ApiModelProperty("角色ids") + @Size(max = 99, message = "角色最多99") + private List roleIdList; + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/vo/EmployeeVO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/vo/EmployeeVO.java new file mode 100644 index 00000000..108a81d7 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/vo/EmployeeVO.java @@ -0,0 +1,58 @@ +package net.lab1024.sa.admin.module.system.employee.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.enumeration.GenderEnum; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * 员工信息 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2021-12-21 23:05:56 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class EmployeeVO { + + @ApiModelProperty("主键id") + private Long employeeId; + + @ApiModelProperty("登录账号") + private String loginName; + + @ApiModelPropertyEnum(GenderEnum.class) + private Integer gender; + + @ApiModelProperty("员工名称") + private String actualName; + + @ApiModelProperty("手机号码") + private String phone; + + @ApiModelProperty("部门id") + private Long departmentId; + + @ApiModelProperty("是否被禁用") + private Boolean disabledFlag; + + @ApiModelProperty("是否 超级管理员") + private Boolean administratorFlag; + + @ApiModelProperty("部门名称") + private String departmentName; + + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + + @ApiModelProperty("角色列表") + private List roleIdList; + + @ApiModelProperty("角色名称列表") + private List roleNameList; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/manager/EmployeeManager.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/manager/EmployeeManager.java new file mode 100644 index 00000000..f31a3317 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/manager/EmployeeManager.java @@ -0,0 +1,82 @@ +package net.lab1024.sa.admin.module.system.employee.manager; + + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import net.lab1024.sa.admin.module.system.employee.dao.EmployeeDao; +import net.lab1024.sa.admin.module.system.role.domain.entity.RoleEmployeeEntity; +import net.lab1024.sa.admin.module.system.role.manager.RoleEmployeeManager; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import net.lab1024.sa.admin.module.system.employee.domain.entity.EmployeeEntity; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * 员工 manager + * + * @Author 1024创新实验室: 胡克 + * @Date 2021-12-29 21:52:46 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Service +public class EmployeeManager extends ServiceImpl { + + @Autowired + private EmployeeDao employeeDao; + + @Autowired + private RoleEmployeeManager roleEmployeeManager; + + /** + * 保存员工 + * + * @param employee + */ + @Transactional(rollbackFor = Throwable.class) + public void saveEmployee(EmployeeEntity employee, List roleIdList) { + // 保存员工 获得id + employeeDao.insert(employee); + + if (CollectionUtils.isNotEmpty(roleIdList)) { + List roleEmployeeList = roleIdList.stream().map(e -> new RoleEmployeeEntity(e, employee.getEmployeeId())).collect(Collectors.toList()); + roleEmployeeManager.saveBatch(roleEmployeeList); + } + } + + /** + * 更新员工 + * + * @param employee + */ + @Transactional(rollbackFor = Throwable.class) + public void updateEmployee(EmployeeEntity employee, List roleIdList) { + // 保存员工 获得id + employeeDao.updateById(employee); + + if (CollectionUtils.isNotEmpty(roleIdList)) { + List roleEmployeeList = roleIdList.stream().map(e -> new RoleEmployeeEntity(e, employee.getEmployeeId())).collect(Collectors.toList()); + this.updateEmployeeRole(employee.getEmployeeId(), roleEmployeeList); + } + } + + /** + * 更新员工角色 + * + * @param employeeId + * @param roleEmployeeList + */ + @Transactional(rollbackFor = Throwable.class) + public void updateEmployeeRole(Long employeeId, List roleEmployeeList) { + roleEmployeeManager.getBaseMapper().deleteByEmployeeId(employeeId); + + if (CollectionUtils.isNotEmpty(roleEmployeeList)) { + roleEmployeeManager.saveBatch(roleEmployeeList); + } + } + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/service/EmployeePermissionService.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/service/EmployeePermissionService.java new file mode 100644 index 00000000..3e6a0297 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/service/EmployeePermissionService.java @@ -0,0 +1,81 @@ +package net.lab1024.sa.admin.module.system.employee.service; + +import net.lab1024.sa.admin.module.system.menu.constant.MenuPermsTypeEnum; +import net.lab1024.sa.admin.module.system.menu.domain.vo.MenuVO; +import net.lab1024.sa.admin.module.system.role.service.RoleEmployeeService; +import net.lab1024.sa.admin.module.system.role.service.RoleMenuService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.stereotype.Service; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * 员工权限校验 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021-12-29 21:52:46 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Service +public class EmployeePermissionService { + + @Autowired + private RoleEmployeeService roleEmployeeService; + + @Autowired + private RoleMenuService roleMenuService; + + /** + * 构建权限集合 + * + * @param menuAndPointsList + */ + public Set buildAuthorities(List menuAndPointsList) { + HashSet permissionList = new HashSet<>(); + for (MenuVO menu : menuAndPointsList) { + if(menu.getPermsType() == null){ + continue; + } + + String perms = null; + if(menu.getPermsType().equals(MenuPermsTypeEnum.SPRING_SECURITY.getValue())){ + perms = menu.getWebPerms(); + }else{ + perms = menu.getApiPerms(); + } + + if (StringUtils.isEmpty(perms)) { + continue; + } + //接口权限 + String[] split = perms.split(","); + for (String perm : split) { + permissionList.add(perm); + } + } + + Set authorities = new HashSet<>(); + authorities.addAll(permissionList.stream().map(SimpleGrantedAuthority::new).collect(Collectors.toSet())); + return authorities; + } + + /** + * 查询用户拥有的前端菜单项 用于登陆返回 前端动态路由配置 + * + * @param employeeId + * @return + */ + public List getEmployeeMenuAndPointsList(Long employeeId, Boolean administratorFlag) { + List roleIdList = roleEmployeeService.getRoleIdList(employeeId); + return roleMenuService.getMenuList(roleIdList, administratorFlag); + } + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/service/EmployeeService.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/service/EmployeeService.java new file mode 100644 index 00000000..63104603 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/service/EmployeeService.java @@ -0,0 +1,383 @@ +package net.lab1024.sa.admin.module.system.employee.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.google.common.collect.Lists; +import net.lab1024.sa.admin.module.system.department.dao.DepartmentDao; +import net.lab1024.sa.admin.module.system.department.domain.entity.DepartmentEntity; +import net.lab1024.sa.admin.module.system.department.domain.vo.DepartmentVO; +import net.lab1024.sa.admin.module.system.department.service.DepartmentService; +import net.lab1024.sa.admin.module.system.employee.dao.EmployeeDao; +import net.lab1024.sa.admin.module.system.employee.domain.entity.EmployeeEntity; +import net.lab1024.sa.admin.module.system.employee.domain.form.*; +import net.lab1024.sa.admin.module.system.employee.domain.vo.EmployeeVO; +import net.lab1024.sa.admin.module.system.employee.manager.EmployeeManager; +import net.lab1024.sa.admin.module.system.role.dao.RoleEmployeeDao; +import net.lab1024.sa.admin.module.system.role.domain.vo.RoleEmployeeVO; +import net.lab1024.sa.common.common.code.UserErrorCode; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.enumeration.UserTypeEnum; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import net.lab1024.sa.common.common.util.SmartPageUtil; +import net.lab1024.sa.common.module.support.token.TokenService; +import org.apache.commons.codec.digest.DigestUtils; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.RandomStringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 员工 service + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021-12-29 21:52:46 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Service +public class EmployeeService { + + private static final String PASSWORD_SALT_FORMAT = "smart_%s_admin_$^&*"; + + @Autowired + private EmployeeDao employeeDao; + + @Autowired + private DepartmentDao departmentDao; + + @Autowired + private EmployeeManager employeeManager; + + @Autowired + private RoleEmployeeDao roleEmployeeDao; + + @Autowired + private DepartmentService departmentService; + + @Autowired + private TokenService tokenService; + + + public EmployeeEntity getById(Long employeeId) { + return employeeDao.selectById(employeeId); + } + + + /** + * 查询员工列表 + * + * @param employeeQueryForm + * @return + */ + public ResponseDTO> queryEmployee(EmployeeQueryForm employeeQueryForm) { + employeeQueryForm.setDeletedFlag(false); + Page pageParam = SmartPageUtil.convert2PageQuery(employeeQueryForm); + + List departmentIdList = new ArrayList<>(); + if (employeeQueryForm.getDepartmentId() != null) { + departmentIdList.addAll(departmentService.selfAndChildrenIdList(employeeQueryForm.getDepartmentId())); + } + + List employeeList = employeeDao.queryEmployee(pageParam, employeeQueryForm, departmentIdList); + if (CollectionUtils.isEmpty(employeeList)) { + PageResult PageResult = SmartPageUtil.convert2PageResult(pageParam, employeeList); + return ResponseDTO.ok(PageResult); + } + + List employeeIdList = employeeList.stream().map(EmployeeVO::getEmployeeId).collect(Collectors.toList()); + // 查询员工角色 + List roleEmployeeEntityList = roleEmployeeDao.selectRoleByEmployeeIdList(employeeIdList); + Map> employeeRoleIdListMap = roleEmployeeEntityList.stream().collect(Collectors.groupingBy(RoleEmployeeVO::getEmployeeId, Collectors.mapping(RoleEmployeeVO::getRoleId, Collectors.toList()))); + Map> employeeRoleNameListMap = roleEmployeeEntityList.stream().collect(Collectors.groupingBy(RoleEmployeeVO::getEmployeeId, Collectors.mapping(RoleEmployeeVO::getRoleName, Collectors.toList()))); + + employeeList.forEach(e -> { + e.setRoleIdList(employeeRoleIdListMap.getOrDefault(e.getEmployeeId(), Lists.newArrayList())); + e.setRoleNameList(employeeRoleNameListMap.getOrDefault(e.getEmployeeId(), Lists.newArrayList())); + e.setDepartmentName(departmentService.getDepartmentPath(e.getDepartmentId())); + }); + PageResult PageResult = SmartPageUtil.convert2PageResult(pageParam, employeeList); + return ResponseDTO.ok(PageResult); + } + + /** + * 新增员工 + * + * @param employeeAddForm + * @return + */ + public synchronized ResponseDTO addEmployee(EmployeeAddForm employeeAddForm) { + // 校验名称是否重复 + EmployeeEntity employeeEntity = employeeDao.getByLoginName(employeeAddForm.getLoginName(), false); + if (null != employeeEntity) { + return ResponseDTO.userErrorParam("登录名重复"); + } + // 校验姓名是否重复 + employeeEntity = employeeDao.getByActualName(employeeAddForm.getActualName(), false); + if (null != employeeEntity) { + return ResponseDTO.userErrorParam("姓名重复"); + } + // 校验电话是否存在 + employeeEntity = employeeDao.getByPhone(employeeAddForm.getPhone(), false); + if (null != employeeEntity) { + return ResponseDTO.userErrorParam("手机号已存在"); + } + // 部门是否存在 + Long departmentId = employeeAddForm.getDepartmentId(); + DepartmentEntity department = departmentDao.selectById(departmentId); + if (department == null) { + return ResponseDTO.userErrorParam("部门不存在"); + } + + EmployeeEntity entity = SmartBeanUtil.copy(employeeAddForm, EmployeeEntity.class); + // 设置密码 默认密码 + String password = randomPassword(); + entity.setLoginPwd(getEncryptPwd(password)); + + // 保存数据 + employeeManager.saveEmployee(entity, employeeAddForm.getRoleIdList()); + + return ResponseDTO.ok(password); + } + + /** + * 更新员工 + * + * @param employeeUpdateForm + * @return + */ + public synchronized ResponseDTO updateEmployee(EmployeeUpdateForm employeeUpdateForm) { + + Long employeeId = employeeUpdateForm.getEmployeeId(); + EmployeeEntity employeeEntity = employeeDao.selectById(employeeId); + if (null == employeeEntity) { + return ResponseDTO.error(UserErrorCode.DATA_NOT_EXIST); + } + + // 部门是否存在 + Long departmentId = employeeUpdateForm.getDepartmentId(); + DepartmentEntity departmentEntity = departmentDao.selectById(departmentId); + if (departmentEntity == null) { + return ResponseDTO.userErrorParam("部门不存在"); + } + + + EmployeeEntity existEntity = employeeDao.getByLoginName(employeeUpdateForm.getLoginName(), false); + if (null != existEntity && !Objects.equals(existEntity.getEmployeeId(), employeeId)) { + return ResponseDTO.userErrorParam("登录名重复"); + } + + existEntity = employeeDao.getByPhone(employeeUpdateForm.getPhone(), false); + if (null != existEntity && !Objects.equals(existEntity.getEmployeeId(), employeeId)) { + return ResponseDTO.userErrorParam("手机号已存在"); + } + + existEntity = employeeDao.getByActualName(employeeUpdateForm.getActualName(), false); + if (null != existEntity && !Objects.equals(existEntity.getEmployeeId(), employeeId)) { + return ResponseDTO.userErrorParam("姓名重复"); + } + + // 不更新密码 + EmployeeEntity entity = SmartBeanUtil.copy(employeeUpdateForm, EmployeeEntity.class); + entity.setLoginPwd(null); + + // 更新数据 + employeeManager.updateEmployee(entity, employeeUpdateForm.getRoleIdList()); + + return ResponseDTO.ok(); + } + + /** + * 更新禁用/启用状态 + * + * @param employeeId + * @return + */ + public ResponseDTO updateDisableFlag(Long employeeId) { + if (null == employeeId) { + return ResponseDTO.error(UserErrorCode.DATA_NOT_EXIST); + } + EmployeeEntity employeeEntity = employeeDao.selectById(employeeId); + if (null == employeeEntity) { + return ResponseDTO.error(UserErrorCode.DATA_NOT_EXIST); + } + employeeDao.updateDisableFlag(employeeId, !employeeEntity.getDisabledFlag()); + + if (employeeEntity.getDisabledFlag()) { + tokenService.batchRemoveRedisToken(employeeId, UserTypeEnum.ADMIN_EMPLOYEE); + } + + return ResponseDTO.ok(); + } + + /** + * 批量删除员工 + * + * @param employeeIdList 员工ID列表 + * @return + */ + public ResponseDTO batchUpdateDeleteFlag(List employeeIdList) { + if (CollectionUtils.isEmpty(employeeIdList)) { + return ResponseDTO.ok(); + } + List employeeEntityList = employeeManager.listByIds(employeeIdList); + if (CollectionUtils.isEmpty(employeeEntityList)) { + return ResponseDTO.ok(); + } + // 更新删除 + List deleteList = employeeIdList.stream().map(e -> { + EmployeeEntity updateEmployee = new EmployeeEntity(); + updateEmployee.setEmployeeId(e); + updateEmployee.setDeletedFlag(true); + return updateEmployee; + }).collect(Collectors.toList()); + employeeManager.updateBatchById(deleteList); + + for (Long employeeId : employeeIdList) { + tokenService.batchRemoveRedisToken(employeeId, UserTypeEnum.ADMIN_EMPLOYEE); + } + return ResponseDTO.ok(); + } + + + /** + * 批量更新部门 + * + * @param batchUpdateDepartmentForm + * @return + */ + public ResponseDTO batchUpdateDepartment(EmployeeBatchUpdateDepartmentForm batchUpdateDepartmentForm) { + List employeeIdList = batchUpdateDepartmentForm.getEmployeeIdList(); + List employeeEntityList = employeeDao.selectBatchIds(employeeIdList); + if (employeeIdList.size() != employeeEntityList.size()) { + return ResponseDTO.error(UserErrorCode.DATA_NOT_EXIST); + } + // 更新 + List updateList = employeeIdList.stream().map(e -> { + EmployeeEntity updateEmployee = new EmployeeEntity(); + updateEmployee.setEmployeeId(e); + updateEmployee.setDepartmentId(batchUpdateDepartmentForm.getDepartmentId()); + return updateEmployee; + }).collect(Collectors.toList()); + employeeManager.updateBatchById(updateList); + + return ResponseDTO.ok(); + } + + + /** + * 更新密码 + * + * @param updatePasswordForm + * @return + */ + public ResponseDTO updatePassword(EmployeeUpdatePasswordForm updatePasswordForm) { + Long employeeId = updatePasswordForm.getEmployeeId(); + EmployeeEntity employeeEntity = employeeDao.selectById(employeeId); + if (employeeEntity == null) { + return ResponseDTO.error(UserErrorCode.DATA_NOT_EXIST); + } + // 校验原始密码 + String encryptPwd = getEncryptPwd(updatePasswordForm.getOldPassword()); + if (!Objects.equals(encryptPwd, employeeEntity.getLoginPwd())) { + return ResponseDTO.userErrorParam("原密码有误,请重新输入"); + } + + // 新旧密码相同 + String newPassword = updatePasswordForm.getNewPassword(); + if (Objects.equals(updatePasswordForm.getOldPassword(), newPassword)) { + return ResponseDTO.ok(); + } + + // 更新密码 + EmployeeEntity updateEntity = new EmployeeEntity(); + updateEntity.setEmployeeId(employeeId); + updateEntity.setLoginPwd(getEncryptPwd(newPassword)); + employeeDao.updateById(updateEntity); + + return ResponseDTO.ok(); + } + + /** + * 获取某个部门的员工信息 + * + * @param departmentId + * @return + */ + public ResponseDTO> getAllEmployeeByDepartmentId(Long departmentId, Boolean disabledFlag) { + List employeeEntityList = employeeDao.selectByDepartmentId(departmentId, disabledFlag); + if (disabledFlag != null) { + employeeEntityList = employeeEntityList.stream().filter(e -> e.getDisabledFlag().equals(disabledFlag)).collect(Collectors.toList()); + } + + if (CollectionUtils.isEmpty(employeeEntityList)) { + return ResponseDTO.ok(Collections.emptyList()); + } + + DepartmentVO department = departmentService.getDepartmentById(departmentId); + + List voList = employeeEntityList.stream().map(e -> { + EmployeeVO employeeVO = SmartBeanUtil.copy(e, EmployeeVO.class); + if (department != null) { + employeeVO.setDepartmentName(department.getName()); + } + return employeeVO; + }).collect(Collectors.toList()); + return ResponseDTO.ok(voList); + } + + + /** + * 重置密码 + * + * @param employeeId + * @return + */ + public ResponseDTO resetPassword(Integer employeeId) { + String password = randomPassword(); + employeeDao.updatePassword(employeeId, getEncryptPwd(password)); + return ResponseDTO.ok(password); + } + + private String randomPassword() { + return RandomStringUtils.randomNumeric(6) + RandomStringUtils.randomAlphabetic(2).toLowerCase(); + } + + /** + * 获取 加密后 的密码 + * + * @param password + * @return + */ + public static String getEncryptPwd(String password) { + return DigestUtils.md5Hex(String.format(PASSWORD_SALT_FORMAT, password)); + } + + + /** + * 查询全部员工 + * + * @return + */ + public ResponseDTO> queryAllEmployee(Boolean disabledFlag) { + List employeeList = employeeDao.selectEmployeeByDisabledAndDeleted(disabledFlag, Boolean.FALSE); + return ResponseDTO.ok(employeeList); + } + + /** + * 根据登录名获取员工 + * + * @param loginName + * @return + */ + public EmployeeEntity getByLoginName(String loginName) { + return employeeDao.getByLoginName(loginName, null); + } + + public static void main(String[] args) { + System.out.println(getEncryptPwd("123456")); + } +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/controller/LoginController.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/controller/LoginController.java new file mode 100644 index 00000000..1d28888d --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/controller/LoginController.java @@ -0,0 +1,90 @@ +package net.lab1024.sa.admin.module.system.login.controller; + +import cn.hutool.extra.servlet.ServletUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.admin.constant.AdminSwaggerTagConst; +import net.lab1024.sa.admin.module.system.login.domain.LoginEmployeeDetail; +import net.lab1024.sa.admin.module.system.login.domain.LoginForm; +import net.lab1024.sa.admin.module.system.login.service.LoginService; +import net.lab1024.sa.common.common.annoation.NoNeedLogin; +import net.lab1024.sa.common.common.code.UserErrorCode; +import net.lab1024.sa.common.common.constant.RequestHeaderConst; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartRequestUtil; +import net.lab1024.sa.common.module.support.captcha.domain.CaptchaVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import javax.validation.Valid; + +/** + * 员工登录 + * + * @Author 1024创新实验室-主任:卓大 + * @Date 2021-12-15 21:05:46 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@RestController +@Api(tags = {AdminSwaggerTagConst.System.SYSTEM_LOGIN}) +public class LoginController { + + @Autowired + private LoginService loginService; + + @NoNeedLogin + @PostMapping("/login") + @ApiOperation("登录 @author 卓大") + public ResponseDTO login(@Valid @RequestBody LoginForm loginForm) { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String ip = ServletUtil.getClientIP(request); + String userAgent = ServletUtil.getHeaderIgnoreCase(request, RequestHeaderConst.USER_AGENT); + return loginService.login(loginForm, ip, userAgent); + } + + @GetMapping("/login/refresh") + @ApiOperation("刷新用户信息(包含用户基础信息、权限信息等等) @author 卓大") + public ResponseDTO refresh() { + loginService.removeLoginUserDetailCache(SmartRequestUtil.getRequestUserId()); + return ResponseDTO.ok(); + } + + @GetMapping("/login/getLoginInfo") + @ApiOperation("获取登录结果信息 @author 卓大") + public ResponseDTO getLoginInfo() { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + if (authentication == null) { + return ResponseDTO.error(UserErrorCode.LOGIN_STATE_INVALID); + } + + Object principal = authentication.getPrincipal(); + if (!(principal instanceof LoginEmployeeDetail)) { + return ResponseDTO.error(UserErrorCode.LOGIN_STATE_INVALID); + } + + LoginEmployeeDetail loginEmployeeDetail = (LoginEmployeeDetail) authentication.getPrincipal(); + loginEmployeeDetail.setLoginPassword(null); + return ResponseDTO.ok(loginEmployeeDetail); + } + + @ApiOperation("退出登陆 @author 卓大") + @GetMapping("/login/logout") + public ResponseDTO logout(@RequestHeader(value = RequestHeaderConst.TOKEN, required = false) String token) { + return loginService.logout(token, SmartRequestUtil.getRequestUser()); + } + + @ApiOperation("获取验证码 @author 卓大") + @GetMapping("/login/getCaptcha") + @NoNeedLogin + public ResponseDTO getCaptcha() { + return loginService.getCaptcha(); + } + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/domain/LoginEmployeeDetail.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/domain/LoginEmployeeDetail.java new file mode 100644 index 00000000..a8be6eef --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/domain/LoginEmployeeDetail.java @@ -0,0 +1,165 @@ +package net.lab1024.sa.admin.module.system.login.domain; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.admin.module.system.menu.domain.vo.MenuVO; +import net.lab1024.sa.common.common.domain.RequestUser; +import net.lab1024.sa.common.common.enumeration.GenderEnum; +import net.lab1024.sa.common.common.enumeration.UserTypeEnum; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import java.time.LocalDateTime; +import java.util.Collection; +import java.util.List; +import java.util.Set; + +/** + * 员工登录 + * + * @Author 1024创新实验室: 善逸 + * @Date 2021/8/4 21:15 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class LoginEmployeeDetail implements UserDetails, RequestUser { + + @ApiModelProperty("token") + private String token; + + @ApiModelProperty("员工id") + private Long employeeId; + + @ApiModelPropertyEnum(UserTypeEnum.class) + private UserTypeEnum userType; + + @ApiModelProperty("登录账号") + private String loginName; + + @ApiModelProperty("员工名称") + private String actualName; + + @ApiModelPropertyEnum(GenderEnum.class) + private Integer gender; + + @ApiModelProperty("手机号码") + private String phone; + + @ApiModelProperty("部门id") + private Long departmentId; + + @ApiModelProperty("部门名称") + private String departmentName; + + @ApiModelProperty("是否为超管") + private Boolean administratorFlag; + + @ApiModelProperty("菜单列表") + private List menuList; + + @JsonIgnore + private String loginPassword; + + @ApiModelProperty("上次登录id") + private String lastLoginIp; + + @ApiModelProperty("上次登录user-agent") + private String lastLoginUserAgent; + + @ApiModelProperty("上次登录时间") + private LocalDateTime lastLoginTime; + + @ApiModelProperty("请求ip") + private String ip; + + @ApiModelProperty("请求user-agent") + private String userAgent; + + /** + * security 权限串 + */ + private Set authorities; + + @Override + public Collection getAuthorities() { + return authorities; + } + + @Override + @JsonIgnore + public String getPassword() { + return this.loginPassword; + } + + @Override + public String getUsername() { + return this.getLoginName(); + } + + /** + * 账户是否未过期,过期无法验证 + */ + @Override + public boolean isAccountNonExpired() { + return true; + } + + /** + * 指定用户是否解锁,锁定的用户无法进行身份验证 + * + * @return + */ + @Override + public boolean isAccountNonLocked() { + return true; + } + + /** + * 指示是否已过期的用户的凭据(密码),过期的凭据防止认证 + * + * @return + */ + @Override + public boolean isCredentialsNonExpired() { + return true; + } + + /** + * 是否可用 ,禁用的用户不能身份验证 + * + * @return + */ + @Override + public boolean isEnabled() { + return true; + } + + @Override + public Long getUserId() { + return employeeId; + } + + @Override + public String getUserName() { + return actualName; + } + + @Override + public UserTypeEnum getUserType() { + return userType; + } + + @Override + public String getIp() { + return this.ip; + } + + @Override + public String getUserAgent() { + return this.userAgent; + } +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/domain/LoginForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/domain/LoginForm.java new file mode 100644 index 00000000..85ffacd3 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/domain/LoginForm.java @@ -0,0 +1,41 @@ +package net.lab1024.sa.admin.module.system.login.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; +import net.lab1024.sa.common.common.util.SmartVerificationUtil; +import net.lab1024.sa.common.common.validator.enumeration.CheckEnum; +import net.lab1024.sa.common.module.support.captcha.domain.CaptchaForm; +import net.lab1024.sa.common.module.support.token.LoginDeviceEnum; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Pattern; + +/** + * 员工登录 + * + * @Author 1024创新实验室: 开云 + * @Date 2021-12-19 11:49:45 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class LoginForm extends CaptchaForm { + + @ApiModelProperty("登录名") + @NotBlank(message = "登录名不能为空") + @Length(max = 30, message = "登录账号最多30字符") + private String loginName; + + @ApiModelProperty("密码") + @NotBlank(message = "密码不能为空") + @Pattern(regexp = SmartVerificationUtil.PWD_REGEXP, message = "请输入8-15位密码(数字|大小写字母|小数点)") + private String password; + + @ApiModelProperty(value = "登录终端") + @ApiModelPropertyEnum(LoginDeviceEnum.class) + @CheckEnum(value = LoginDeviceEnum.class, required = true, message = "此终端不允许登录") + private Integer loginDevice; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/service/LoginService.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/service/LoginService.java new file mode 100644 index 00000000..d50f2120 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/service/LoginService.java @@ -0,0 +1,272 @@ +package net.lab1024.sa.admin.module.system.login.service; + +import cn.hutool.extra.servlet.ServletUtil; +import com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.admin.module.system.department.domain.vo.DepartmentVO; +import net.lab1024.sa.admin.module.system.department.service.DepartmentService; +import net.lab1024.sa.admin.module.system.employee.domain.entity.EmployeeEntity; +import net.lab1024.sa.admin.module.system.employee.service.EmployeePermissionService; +import net.lab1024.sa.admin.module.system.employee.service.EmployeeService; +import net.lab1024.sa.admin.module.system.login.domain.LoginEmployeeDetail; +import net.lab1024.sa.admin.module.system.login.domain.LoginForm; +import net.lab1024.sa.admin.module.system.menu.domain.vo.MenuVO; +import net.lab1024.sa.common.common.constant.RequestHeaderConst; +import net.lab1024.sa.common.common.constant.StringConst; +import net.lab1024.sa.common.common.domain.RequestUser; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.enumeration.UserTypeEnum; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import net.lab1024.sa.common.common.util.SmartEnumUtil; +import net.lab1024.sa.common.module.support.captcha.CaptchaService; +import net.lab1024.sa.common.module.support.captcha.domain.CaptchaVO; +import net.lab1024.sa.common.module.support.config.ConfigKeyEnum; +import net.lab1024.sa.common.module.support.config.ConfigService; +import net.lab1024.sa.common.module.support.loginlog.LoginLogResultEnum; +import net.lab1024.sa.common.module.support.loginlog.LoginLogService; +import net.lab1024.sa.common.module.support.loginlog.domain.LoginLogEntity; +import net.lab1024.sa.common.module.support.loginlog.domain.LoginLogVO; +import net.lab1024.sa.common.module.support.token.LoginDeviceEnum; +import net.lab1024.sa.common.module.support.token.TokenService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import java.time.LocalDateTime; +import java.util.List; +import java.util.concurrent.ConcurrentMap; + +/** + * 员工 登录服务 + * + * @Author 1024创新实验室: 开云 + * @Date 2021-12-01 22:56:34 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Slf4j +@Service +public class LoginService { + + @Autowired + private EmployeeService employeeService; + + @Autowired + private DepartmentService departmentService; + + @Autowired + private TokenService tokenService; + + @Autowired + private CaptchaService captchaService; + + @Autowired + private EmployeePermissionService employeePermissionService; + + @Autowired + private ConfigService configService; + + @Autowired + private LoginLogService loginLogService; + + /** + * 登录信息二级缓存 + */ + private ConcurrentMap loginUserDetailCache = new ConcurrentLinkedHashMap.Builder().maximumWeightedCapacity(1000).build(); + + /** + * 获取验证码 + * + * @return + */ + public ResponseDTO getCaptcha() { + return ResponseDTO.ok(captchaService.generateCaptcha()); + } + + /** + * 员工登陆 + * + * @param loginForm + * @return 返回用户登录信息 + */ + public ResponseDTO login(LoginForm loginForm, String ip, String userAgent) { + LoginDeviceEnum loginDeviceEnum = SmartEnumUtil.getEnumByValue(loginForm.getLoginDevice(), LoginDeviceEnum.class); + if (loginDeviceEnum == null) { + return ResponseDTO.userErrorParam("登录设备暂不支持!"); + } + // 校验 图形验证码 + ResponseDTO checkCaptcha = captchaService.checkCaptcha(loginForm); + if (!checkCaptcha.getOk()) { + return ResponseDTO.error(checkCaptcha); + } + + /** + * 验证账号和账号状态 + */ + EmployeeEntity employeeEntity = employeeService.getByLoginName(loginForm.getLoginName()); + if (null == employeeEntity) { + return ResponseDTO.userErrorParam("登录名不存在!"); + } + + if (employeeEntity.getDisabledFlag()) { + saveLoginLog(employeeEntity, ip, userAgent, "账号已禁用", LoginLogResultEnum.LOGIN_FAIL); + return ResponseDTO.userErrorParam("您的账号已被禁用,请联系工作人员!"); + } + /** + * 验证密码: + * 1、万能密码 + * 2、真实密码 + */ + String superPassword = EmployeeService.getEncryptPwd(configService.getConfigValue(ConfigKeyEnum.SUPER_PASSWORD)); + String requestPassword = EmployeeService.getEncryptPwd(loginForm.getPassword()); + if (!(superPassword.equals(requestPassword) || employeeEntity.getLoginPwd().equals(requestPassword))) { + saveLoginLog(employeeEntity, ip, userAgent, "密码错误", LoginLogResultEnum.LOGIN_FAIL); + return ResponseDTO.userErrorParam("登录名或密码错误!"); + } + + // 生成 登录token,保存token + Boolean superPasswordFlag = superPassword.equals(requestPassword); + String token = tokenService.generateToken(employeeEntity.getEmployeeId(), employeeEntity.getActualName(), UserTypeEnum.ADMIN_EMPLOYEE, loginDeviceEnum, superPasswordFlag); + + //保存登录记录 + saveLoginLog(employeeEntity, ip, userAgent, superPasswordFlag ? "万能密码登录" : loginDeviceEnum.getDesc(), LoginLogResultEnum.LOGIN_SUCCESS); + + //获取员工登录信息 + LoginEmployeeDetail loginEmployeeDetail = loadLoginInfo(employeeEntity); + loginEmployeeDetail.setToken(token); + + // 放入缓存 + loginUserDetailCache.put(employeeEntity.getEmployeeId(), loginEmployeeDetail); + + return ResponseDTO.ok(loginEmployeeDetail); + } + + + /** + * 获取登录的用户信息 + * + * @return + */ + private LoginEmployeeDetail loadLoginInfo(EmployeeEntity employeeEntity) { + LoginEmployeeDetail loginEmployeeDetail = SmartBeanUtil.copy(employeeEntity, LoginEmployeeDetail.class); + loginEmployeeDetail.setUserType(UserTypeEnum.ADMIN_EMPLOYEE); + + //部门信息 + DepartmentVO department = departmentService.getDepartmentById(employeeEntity.getDepartmentId()); + loginEmployeeDetail.setDepartmentName(null == department ? StringConst.EMPTY : department.getName()); + + /** + * 获取前端菜单和后端权限 + * 1、从数据库获取所有的权限 + * 2、拼凑成菜单和后端权限 + */ + List menuAndPointsList = employeePermissionService.getEmployeeMenuAndPointsList(employeeEntity.getEmployeeId(), employeeEntity.getAdministratorFlag()); + //前端菜单 + loginEmployeeDetail.setMenuList(menuAndPointsList); + //后端权限 + loginEmployeeDetail.setAuthorities(employeePermissionService.buildAuthorities(menuAndPointsList)); + + //上次登录信息 + LoginLogVO loginLogVO = loginLogService.queryLastByUserId(employeeEntity.getEmployeeId(), UserTypeEnum.ADMIN_EMPLOYEE); + if (loginLogVO != null) { + loginEmployeeDetail.setLastLoginIp(loginLogVO.getLoginIp()); + loginEmployeeDetail.setLastLoginTime(loginLogVO.getCreateTime()); + loginEmployeeDetail.setLastLoginUserAgent(loginLogVO.getUserAgent()); + } + + return loginEmployeeDetail; + } + + /** + * 保存登录日志 + * + * @param employeeEntity + * @param ip + * @param userAgent + */ + private void saveLoginLog(EmployeeEntity employeeEntity, String ip, String userAgent, String remark, LoginLogResultEnum result) { + LoginLogEntity loginEntity = LoginLogEntity.builder() + .userId(employeeEntity.getEmployeeId()) + .userType(UserTypeEnum.ADMIN_EMPLOYEE.getValue()) + .userName(employeeEntity.getActualName()) + .userAgent(userAgent) + .loginIp(ip) + .remark(remark) + .loginResult(result.getValue()) + .createTime(LocalDateTime.now()) + .build(); + loginLogService.log(loginEntity); + } + + + /** + * 移除用户信息缓存 + * + * @param requestUserId + */ + public void removeLoginUserDetailCache(Long requestUserId) { + loginUserDetailCache.remove(requestUserId); + } + + /** + * 根据登陆token 获取员请求工信息 + * + * @param + * @return + */ + public LoginEmployeeDetail getLoginUserDetail(String token, HttpServletRequest request) { + Long requestUserId = tokenService.getUserIdAndValidateToken(token); + if (requestUserId == null) { + return null; + } + // 查询用户信息 + LoginEmployeeDetail loginEmployeeDetail = loginUserDetailCache.get(requestUserId); + if (loginEmployeeDetail == null) { + // 员工基本信息 + EmployeeEntity employeeEntity = employeeService.getById(requestUserId); + if (employeeEntity == null) { + return null; + } + + loginEmployeeDetail = this.loadLoginInfo(employeeEntity); + loginEmployeeDetail.setToken(token); + loginUserDetailCache.put(requestUserId, loginEmployeeDetail); + } + + //更新请求ip和user agent + loginEmployeeDetail.setUserAgent(ServletUtil.getHeaderIgnoreCase(request, RequestHeaderConst.USER_AGENT)); + loginEmployeeDetail.setIp(ServletUtil.getClientIP(request)); + + return loginEmployeeDetail; + } + + + /** + * 退出登陆,清除token缓存 + * + * @return + */ + public ResponseDTO logout(String token, RequestUser requestUser) { + loginUserDetailCache.remove(requestUser.getUserId()); + tokenService.removeToken(token); + //保存登出日志 + saveLogoutLog(requestUser, requestUser.getIp(), requestUser.getUserAgent()); + return ResponseDTO.ok(); + } + + /** + * 保存登出日志 + */ + private void saveLogoutLog(RequestUser requestUser, String ip, String userAgent) { + LoginLogEntity loginEntity = LoginLogEntity.builder() + .userId(requestUser.getUserId()) + .userName(requestUser.getUserName()) + .userAgent(userAgent) + .loginIp(ip) + .loginResult(LoginLogResultEnum.LOGIN_OUT.getValue()) + .createTime(LocalDateTime.now()) + .build(); + loginLogService.log(loginEntity); + } +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/constant/MenuPermsTypeEnum.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/constant/MenuPermsTypeEnum.java new file mode 100644 index 00000000..c277026b --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/constant/MenuPermsTypeEnum.java @@ -0,0 +1,46 @@ +package net.lab1024.sa.admin.module.system.menu.constant; + + +import net.lab1024.sa.common.common.enumeration.BaseEnum; + +/** + * 权限类型 + * + * @Author 1024创新实验室: 善逸 + * @Date 2022-03-06 22:04:37 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public enum MenuPermsTypeEnum implements BaseEnum { + /** + * SpringSecurity模式 + */ + SPRING_SECURITY(1, "SpringSecurity模式"), + /** + * URL模式 + */ + URL(2, "URL模式"), + + ; + + private Integer value; + + private String desc; + + + MenuPermsTypeEnum(Integer value, String desc) { + this.value = value; + this.desc = desc; + } + + @Override + public Integer getValue() { + return value; + } + + @Override + public String getDesc() { + return desc; + } +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/constant/MenuTypeEnum.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/constant/MenuTypeEnum.java new file mode 100644 index 00000000..06c21540 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/constant/MenuTypeEnum.java @@ -0,0 +1,48 @@ +package net.lab1024.sa.admin.module.system.menu.constant; + + +import net.lab1024.sa.common.common.enumeration.BaseEnum; + +/** + * 菜单类型枚举 + * + * @Author 1024创新实验室: 善逸 + * @Date 2022-03-06 22:04:37 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public enum MenuTypeEnum implements BaseEnum { + /** + * 目录 + */ + CATALOG(1, "目录"), + /** + * 菜单 + */ + MENU(2, "菜单"), + /** + * 功能点 + */ + POINTS(3, "功能点"); + + private Integer value; + + private String desc; + + + MenuTypeEnum(Integer value, String desc) { + this.value = value; + this.desc = desc; + } + + @Override + public Integer getValue() { + return value; + } + + @Override + public String getDesc() { + return desc; + } +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/controller/MenuController.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/controller/MenuController.java new file mode 100644 index 00000000..d0b921e7 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/controller/MenuController.java @@ -0,0 +1,86 @@ +package net.lab1024.sa.admin.module.system.menu.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.admin.common.AdminBaseController; +import net.lab1024.sa.admin.constant.AdminSwaggerTagConst; +import net.lab1024.sa.admin.module.system.menu.domain.form.MenuAddForm; +import net.lab1024.sa.admin.module.system.menu.domain.form.MenuUpdateForm; +import net.lab1024.sa.admin.module.system.menu.domain.vo.MenuTreeVO; +import net.lab1024.sa.admin.module.system.menu.domain.vo.MenuVO; +import net.lab1024.sa.admin.module.system.menu.service.MenuService; +import net.lab1024.sa.common.common.domain.RequestUrlVO; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartRequestUtil; +import net.lab1024.sa.common.module.support.operatelog.annoation.OperateLog; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 菜单 + * + * @Author 1024创新实验室: 善逸 + * @Date 2022-03-06 22:04:37 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@OperateLog +@RestController +@Api(tags = {AdminSwaggerTagConst.System.SYSTEM_MENU}) +public class MenuController extends AdminBaseController { + + @Autowired + private MenuService menuService; + + @ApiOperation(value = "添加菜单 @author 卓大") + @PostMapping("/menu/add") + @PreAuthorize("@saAuth.checkPermission('system:menu:add')") + public ResponseDTO addMenu(@RequestBody @Valid MenuAddForm menuAddForm) { + menuAddForm.setCreateUserId(SmartRequestUtil.getRequestUserId()); + return menuService.addMenu(menuAddForm); + } + + @ApiOperation(value = "更新菜单 @author 卓大") + @PostMapping("/menu/update") + @PreAuthorize("@saAuth.checkPermission('system:menu:update')") + public ResponseDTO updateMenu(@RequestBody @Valid MenuUpdateForm menuUpdateForm) { + menuUpdateForm.setUpdateUserId(SmartRequestUtil.getRequestUserId()); + return menuService.updateMenu(menuUpdateForm); + } + + @ApiOperation(value = "批量删除菜单 @author 卓大") + @GetMapping("/menu/batchDelete") + @PreAuthorize("@saAuth.checkPermission('system:menu:delete,system:menu:batch:delete')") + public ResponseDTO batchDeleteMenu(@RequestParam("menuIdList") List menuIdList) { + return menuService.batchDeleteMenu(menuIdList, SmartRequestUtil.getRequestUserId()); + } + + @ApiOperation(value = "查询菜单列表 @author 卓大") + @GetMapping("/menu/query") + public ResponseDTO> queryMenuList() { + return ResponseDTO.ok(menuService.queryMenuList(null)); + } + + @ApiOperation(value = "查询菜单详情 @author 卓大") + @GetMapping("/menu/detail/{menuId}") + public ResponseDTO getMenuDetail(@PathVariable Long menuId) { + return menuService.getMenuDetail(menuId); + } + + @ApiOperation(value = "查询菜单树 @author 卓大") + @GetMapping("/menu/tree") + public ResponseDTO> queryMenuTree(@RequestParam("onlyMenu") Boolean onlyMenu) { + return menuService.queryMenuTree(onlyMenu); + } + + @ApiOperation(value = "获取所有请求路径 @author 卓大") + @GetMapping("/menu/auth/url") + public ResponseDTO> getAuthUrl() { + return menuService.getAuthUrl(); + } +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/dao/MenuDao.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/dao/MenuDao.java new file mode 100644 index 00000000..468046bd --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/dao/MenuDao.java @@ -0,0 +1,105 @@ +package net.lab1024.sa.admin.module.system.menu.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; +import net.lab1024.sa.admin.module.system.menu.domain.entity.MenuEntity; +import net.lab1024.sa.admin.module.system.menu.domain.vo.MenuVO; + +import java.util.List; + +/** + * 菜单 dao + * + * @Author 1024创新实验室: 善逸 + * @Date 2022-03-06 22:04:37 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Mapper +@Component +public interface MenuDao extends BaseMapper { + + /** + * 根据名称查询同一级下的菜单 + * + * @param menuName 菜单名 + * @param parentId 父级id + * @param deletedFlag 是否删除 + * @return + */ + MenuEntity getByMenuName(@Param("menuName") String menuName, @Param("parentId") Long parentId, @Param("deletedFlag") Boolean deletedFlag); + + /** + * 根据前端权限字符串查询菜单 + * + * @param webPerms 前端权限字符串 + * @param deletedFlag 是否删除 + * @return + */ + MenuEntity getByWebPerms(@Param("webPerms") String webPerms, @Param("deletedFlag") Boolean deletedFlag); + + /** + * 根据菜单ID删除菜单(逻辑删除) + * + * @param menuIdList 菜单id集合 + * @param updateUserId 操作人id + * @param deletedFlag 是否删除 + */ + void deleteByMenuIdList(@Param("menuIdList") List menuIdList, @Param("updateUserId") Long updateUserId, @Param("deletedFlag") Boolean deletedFlag); + + /** + * 查询菜单列表 + * + * @param deletedFlag 是否删除 + * @param disabledFlag 是否禁用 + * @param menuTypeList 菜单类型集合 + * @return + */ + List queryMenuList(@Param("deletedFlag") Boolean deletedFlag, @Param("disabledFlag") Boolean disabledFlag, @Param("menuTypeList") List menuTypeList); + + + /** + * 根据菜单ID 查询功能点列表 + * + * @param menuId 菜单id + * @param menuType 菜单类型 + * @param deletedFlag 删除标记 + * @return + */ + List getPointListByMenuId(@Param("menuId") Long menuId, @Param("menuType") Integer menuType, @Param("deletedFlag") Boolean deletedFlag); + + /** + * 根据员工ID查询菜单列表 + * + * @param deletedFlag 是否删除 + * @param disabledFlag 禁用标识 + * @param employeeId 员工id + * @return + */ + List queryMenuByEmployeeId(@Param("deletedFlag") Boolean deletedFlag, + @Param("disabledFlag") Boolean disabledFlag, + @Param("employeeId") Long employeeId); + + /** + * 根据菜单类型查询 + * + * @param menuType 菜单类型 + * @param deletedFlag 删除 + * @param disabledFlag 禁用 + * @return + */ + List queryMenuByType(@Param("menuType") Integer menuType, + @Param("deletedFlag") Boolean deletedFlag, + @Param("disabledFlag") Boolean disabledFlag); + + /** + * 查询孩子id + * + * @param menuIdList + * @return + */ + List selectMenuIdByParentIdList(@Param("menuIdList") List menuIdList); +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/entity/MenuEntity.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/entity/MenuEntity.java new file mode 100644 index 00000000..41fd3061 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/entity/MenuEntity.java @@ -0,0 +1,139 @@ +package net.lab1024.sa.admin.module.system.menu.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import net.lab1024.sa.admin.module.system.menu.constant.MenuPermsTypeEnum; +import net.lab1024.sa.admin.module.system.menu.constant.MenuTypeEnum; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; +import net.lab1024.sa.common.common.validator.enumeration.CheckEnum; + +import java.time.LocalDateTime; + +/** + * 菜单 表 + * + * @Author 1024创新实验室: 善逸 + * @Date 2022-03-06 22:04:37 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +@TableName(value = "t_menu") +public class MenuEntity { + + /** + * 菜单ID + */ + @TableId(type = IdType.AUTO) + private Long menuId; + + /** + * 菜单名称 + */ + private String menuName; + + /** + * 类型 + * + * @see MenuTypeEnum + */ + private Integer menuType; + + /** + * 父菜单ID + */ + private Long parentId; + + /** + * 显示顺序 + */ + private Integer sort; + + /** + * 路由地址 + */ + private String path; + + /** + * 组件路径 + */ + private String component; + + /** + * 是否为外链 + */ + private Boolean frameFlag; + + /** + * 外链地址 + */ + private String frameUrl; + + /** + * 是否缓存 + */ + private Boolean cacheFlag; + + /** + * 显示状态 + */ + private Boolean visibleFlag; + + /** + * 禁用状态 + */ + private Boolean disabledFlag; + + /** + * 后端权限字符串 + */ + private String apiPerms; + + /** + * 权限类型 + */ + private Integer permsType; + + /** + * 前端权限字符串 + */ + private String webPerms; + + /** + * 菜单图标 + */ + private String icon; + + /** + * 功能点关联菜单ID + */ + private Long contextMenuId; + + /** + * 删除状态 + */ + private Boolean deletedFlag; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 创建人 + */ + private Long createUserId; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; + + /** + * 更新人 + */ + private Long updateUserId; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuAddForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuAddForm.java new file mode 100644 index 00000000..afc8e250 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuAddForm.java @@ -0,0 +1,20 @@ +package net.lab1024.sa.admin.module.system.menu.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 菜单 添加表单 + * + * @Author 1024创新实验室: 善逸 + * @Date 2022-03-06 22:04:37 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class MenuAddForm extends MenuBaseForm { + + @ApiModelProperty(hidden = true) + private Long createUserId; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuBaseForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuBaseForm.java new file mode 100644 index 00000000..f404535f --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuBaseForm.java @@ -0,0 +1,86 @@ +package net.lab1024.sa.admin.module.system.menu.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.admin.module.system.menu.constant.MenuPermsTypeEnum; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; +import net.lab1024.sa.common.common.validator.enumeration.CheckEnum; +import org.hibernate.validator.constraints.Length; +import net.lab1024.sa.admin.module.system.menu.constant.MenuTypeEnum; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * 菜单基础 + * + * @Author 1024创新实验室: 善逸 + * @Date 2022-03-06 22:04:37 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class MenuBaseForm { + + @ApiModelProperty("菜单名称") + @NotBlank(message = "菜单名称不能为空") + @Length(max = 30, message = "菜单名称最多30个字符") + private String menuName; + + @ApiModelPropertyEnum(value = MenuTypeEnum.class, desc = "类型") + @CheckEnum(value = MenuTypeEnum.class, message = "类型错误") + private Integer menuType; + + @ApiModelProperty("父菜单ID 无上级可传0") + @NotNull(message = "父菜单ID不能为空") + private Long parentId; + + @ApiModelProperty("显示顺序") + private Integer sort; + + @ApiModelProperty("路由地址") + private String path; + + @ApiModelProperty("组件路径") + private String component; + + @ApiModelProperty("是否为外链") + @NotNull(message = "是否为外链不能为空") + private Boolean frameFlag; + + @ApiModelProperty("外链地址") + private String frameUrl; + + @ApiModelProperty("是否缓存") + @NotNull(message = "是否缓存不能为空") + private Boolean cacheFlag; + + @ApiModelProperty("显示状态") + @NotNull(message = "显示状态不能为空") + private Boolean visibleFlag; + + @ApiModelProperty("禁用状态") + @NotNull(message = "禁用状态不能为空") + private Boolean disabledFlag; + + @ApiModelPropertyEnum(value = MenuPermsTypeEnum.class, desc = "权限类型 ") + @CheckEnum(value = MenuPermsTypeEnum.class, message = "权限类型") + private Integer permsType; + + @ApiModelProperty("前端权限字符串") + private String webPerms; + + @ApiModelProperty("后端端权限字符串") + private String apiPerms; + + @ApiModelProperty("后端接口权限集合(拆分)") + private List apiPermsList; + + @ApiModelProperty("菜单图标") + private String icon; + + @ApiModelProperty("功能点关联菜单ID") + private Long contextMenuId; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuPointsOperateForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuPointsOperateForm.java new file mode 100644 index 00000000..edf28ae7 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuPointsOperateForm.java @@ -0,0 +1,43 @@ +package net.lab1024.sa.admin.module.system.menu.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * 菜单功能点操作Form + * + * @Author 1024创新实验室: 善逸 + * @Date 2022-03-06 22:04:37 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class MenuPointsOperateForm { + + @ApiModelProperty("菜单ID") + private Long menuId; + + @ApiModelProperty("功能点名称") + @NotBlank(message = "功能点不能为空") + @Length(max = 30, message = "功能点最多30个字符") + private String menuName; + + @ApiModelProperty("禁用状态") + @NotNull(message = "禁用状态不能为空") + private Boolean disabledFlag; + + @ApiModelProperty("后端接口权限集合") + private List apiPermsList; + + @ApiModelProperty("权限字符串") + private String webPerms; + + @ApiModelProperty("功能点关联菜单ID") + private Long contextMenuId; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuUpdateForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuUpdateForm.java new file mode 100644 index 00000000..c0a39f1e --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuUpdateForm.java @@ -0,0 +1,26 @@ +package net.lab1024.sa.admin.module.system.menu.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * 菜单 更新Form + * + * @Author 1024创新实验室: 善逸 + * @Date 2022-03-06 22:04:37 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class MenuUpdateForm extends MenuBaseForm { + + @ApiModelProperty("菜单ID") + @NotNull(message = "菜单ID不能为空") + private Long menuId; + + @ApiModelProperty(hidden = true) + private Long updateUserId; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/vo/MenuSimpleTreeVO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/vo/MenuSimpleTreeVO.java new file mode 100644 index 00000000..560aca3e --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/vo/MenuSimpleTreeVO.java @@ -0,0 +1,37 @@ +package net.lab1024.sa.admin.module.system.menu.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * 简易的菜单VO + * + * @Author 1024创新实验室: 善逸 + * @Date 2022-03-06 22:04:37 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class MenuSimpleTreeVO { + + @ApiModelProperty("菜单ID") + private Long menuId; + + @ApiModelProperty("菜单名称") + private String menuName; + + @ApiModelProperty("功能点关联菜单ID") + private Long contextMenuId; + + @ApiModelProperty("父级菜单ID") + private Long parentId; + + @ApiModelProperty("菜单类型") + private Integer menuType; + + @ApiModelProperty("子菜单") + private List children; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/vo/MenuTreeVO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/vo/MenuTreeVO.java new file mode 100644 index 00000000..0930c968 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/vo/MenuTreeVO.java @@ -0,0 +1,22 @@ +package net.lab1024.sa.admin.module.system.menu.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * 菜单 + * + * @Author 1024创新实验室: 善逸 + * @Date 2022-03-06 22:04:37 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class MenuTreeVO extends MenuVO{ + + @ApiModelProperty("菜单子集") + private List children; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/vo/MenuVO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/vo/MenuVO.java new file mode 100644 index 00000000..d8e68ad9 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/vo/MenuVO.java @@ -0,0 +1,35 @@ +package net.lab1024.sa.admin.module.system.menu.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.admin.module.system.menu.domain.form.MenuBaseForm; + +import java.time.LocalDateTime; + +/** + * 菜单 + * + * @Author 1024创新实验室: 善逸 + * @Date 2022-03-06 22:04:37 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class MenuVO extends MenuBaseForm { + + @ApiModelProperty("菜单ID") + private Long menuId; + + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + + @ApiModelProperty("创建人") + private Long createUserId; + + @ApiModelProperty("更新时间") + private LocalDateTime updateTime; + + @ApiModelProperty("更新人") + private Long updateUserId; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/manager/MenuManager.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/manager/MenuManager.java new file mode 100644 index 00000000..d57c81d3 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/manager/MenuManager.java @@ -0,0 +1,70 @@ +package net.lab1024.sa.admin.module.system.menu.manager; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import net.lab1024.sa.admin.module.system.menu.constant.MenuTypeEnum; +import net.lab1024.sa.admin.module.system.menu.dao.MenuDao; +import net.lab1024.sa.admin.module.system.menu.domain.entity.MenuEntity; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 菜单Manager层 + * + * @Author 1024创新实验室: 善逸 + * @Date 2022-03-06 23:45:04 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Service +public class MenuManager extends ServiceImpl { + + /** + * 添加菜单 + * + * @param menuEntity + * @param pointEntityList + */ + @Transactional(rollbackFor = Exception.class) + public void addMenu(MenuEntity menuEntity, List pointEntityList) { + //添加菜单 + save(menuEntity); + //构建功能点 + pointEntityList.forEach(e -> { + e.setParentId(menuEntity.getMenuId()); + e.setMenuType(MenuTypeEnum.POINTS.getValue()); + e.setCreateUserId(menuEntity.getCreateUserId()); + }); + //批量添加功能点 + saveBatch(pointEntityList); + } + + /** + * 更新菜单 + * + * @param menuEntity + * @param savePointList + * @param deletePointList + * @param updatePointList + */ + @Transactional(rollbackFor = Exception.class) + public void updateMenu(MenuEntity menuEntity, List savePointList, List deletePointList, List updatePointList) { + //更新菜单 + updateById(menuEntity); + //构建新增功能点 + savePointList.forEach(e -> { + e.setParentId(menuEntity.getMenuId()); + e.setMenuType(MenuTypeEnum.POINTS.getValue()); + //因为更新操作人在menuEntity的UpdateUserId字段 + e.setCreateUserId(menuEntity.getUpdateUserId()); + }); + //批量添加功能点 + saveBatch(savePointList); + //批量删除功能点 + updateBatchById(deletePointList); + //批量更新功能点 + updateBatchById(updatePointList); + } +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/service/MenuService.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/service/MenuService.java new file mode 100644 index 00000000..4b3fa693 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/service/MenuService.java @@ -0,0 +1,290 @@ +package net.lab1024.sa.admin.module.system.menu.service; + +import cn.hutool.core.collection.CollectionUtil; +import com.google.common.collect.Lists; +import net.lab1024.sa.admin.module.system.menu.constant.MenuTypeEnum; +import net.lab1024.sa.admin.module.system.menu.dao.MenuDao; +import net.lab1024.sa.admin.module.system.menu.domain.entity.MenuEntity; +import net.lab1024.sa.admin.module.system.menu.domain.form.MenuAddForm; +import net.lab1024.sa.admin.module.system.menu.domain.form.MenuBaseForm; +import net.lab1024.sa.admin.module.system.menu.domain.form.MenuUpdateForm; +import net.lab1024.sa.admin.module.system.menu.domain.vo.MenuTreeVO; +import net.lab1024.sa.admin.module.system.menu.domain.vo.MenuVO; +import net.lab1024.sa.common.common.code.SystemErrorCode; +import net.lab1024.sa.common.common.domain.RequestUrlVO; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 菜单 + * + * @Author 1024创新实验室: 善逸 + * @Date 2022-03-08 22:15:09 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Service +public class MenuService { + + @Autowired + private MenuDao menuDao; + + @Autowired + private List authUrl; + + /** + * 添加菜单 + * + * @param menuAddForm + * @return + */ + public synchronized ResponseDTO addMenu(MenuAddForm menuAddForm) { + // 校验菜单名称 + if (this.validateMenuName(menuAddForm)) { + return ResponseDTO.userErrorParam("菜单名称已存在"); + } + // 校验前端权限字符串 + if (this.validateWebPerms(menuAddForm)) { + return ResponseDTO.userErrorParam("权限字符串已存在"); + } + MenuEntity menuEntity = SmartBeanUtil.copy(menuAddForm, MenuEntity.class); + // 处理接口权限 + List permsList = menuAddForm.getApiPermsList(); + if (!CollectionUtils.isEmpty(permsList)) { + String perms = StringUtils.join(permsList, ","); + menuEntity.setApiPerms(perms); + } + menuDao.insert(menuEntity); + return ResponseDTO.ok(); + } + + /** + * 更新菜单 + * + * @param menuUpdateForm + * @return + */ + public synchronized ResponseDTO updateMenu(MenuUpdateForm menuUpdateForm) { + //校验菜单是否存在 + MenuEntity selectMenu = menuDao.selectById(menuUpdateForm.getMenuId()); + if (selectMenu == null) { + return ResponseDTO.userErrorParam("菜单不存在"); + } + if (selectMenu.getDeletedFlag()) { + return ResponseDTO.userErrorParam("菜单已被删除"); + } + //校验菜单名称 + if (this.validateMenuName(menuUpdateForm)) { + return ResponseDTO.userErrorParam("菜单名称已存在"); + } + // 校验前端权限字符串 + if (this.validateWebPerms(menuUpdateForm)) { + return ResponseDTO.userErrorParam("权限字符串已存在"); + } + if (menuUpdateForm.getMenuId().equals(menuUpdateForm.getParentId())) { + return ResponseDTO.userErrorParam("上级菜单不能为自己"); + } + MenuEntity menuEntity = SmartBeanUtil.copy(menuUpdateForm, MenuEntity.class); + // 处理接口权限 + List permsList = menuUpdateForm.getApiPermsList(); + if (!CollectionUtils.isEmpty(permsList)) { + String perms = StringUtils.join(permsList, ","); + menuEntity.setApiPerms(perms); + } + menuDao.updateById(menuEntity); + return ResponseDTO.ok(); + } + + + /** + * 批量删除菜单 + * + * @param menuIdList + * @param employeeId + * @return + */ + public synchronized ResponseDTO batchDeleteMenu(List menuIdList, Long employeeId) { + if (CollectionUtils.isEmpty(menuIdList)) { + return ResponseDTO.userErrorParam("所选菜单不能为空"); + } + menuDao.deleteByMenuIdList(menuIdList, employeeId, Boolean.TRUE); + //孩子节点也需要删除 + this.recursiveDeleteChildren(menuIdList, employeeId); + return ResponseDTO.ok(); + } + + private void recursiveDeleteChildren(List menuIdList, Long employeeId) { + List childrenMenuIdList = menuDao.selectMenuIdByParentIdList(menuIdList); + if (CollectionUtil.isEmpty(childrenMenuIdList)) { + return; + } + menuDao.deleteByMenuIdList(childrenMenuIdList, employeeId, Boolean.TRUE); + recursiveDeleteChildren(childrenMenuIdList, employeeId); + } + + /** + * 校验菜单名称 + * + * @param menuDTO + * @param + * @return true 重复 false 未重复 + */ + public Boolean validateMenuName(T menuDTO) { + MenuEntity menu = menuDao.getByMenuName(menuDTO.getMenuName(), menuDTO.getParentId(), Boolean.FALSE); + if (menuDTO instanceof MenuAddForm) { + return menu != null; + } + if (menuDTO instanceof MenuUpdateForm) { + Long menuId = ((MenuUpdateForm) menuDTO).getMenuId(); + return menu != null && menu.getMenuId().longValue() != menuId.longValue(); + } + return true; + } + + /** + * 校验前端权限字符串 + * + * @param menuDTO + * @param + * @return true 重复 false 未重复 + */ + public Boolean validateWebPerms(T menuDTO) { + MenuEntity menu = menuDao.getByWebPerms(menuDTO.getWebPerms(), Boolean.FALSE); + if (menuDTO instanceof MenuAddForm) { + return menu != null; + } + if (menuDTO instanceof MenuUpdateForm) { + Long menuId = ((MenuUpdateForm) menuDTO).getMenuId(); + return menu != null && menu.getMenuId().longValue() != menuId.longValue(); + } + return true; + } + + /** + * 查询菜单列表 + * + * @return + */ + public List queryMenuList(Boolean disabledFlag) { + List menuVOList = menuDao.queryMenuList(Boolean.FALSE, disabledFlag, null); + //根据ParentId进行分组 + Map> parentMap = menuVOList.stream().collect(Collectors.groupingBy(MenuVO::getParentId, Collectors.toList())); + List filterMenuVOList = this.filterNoParentMenu(parentMap, NumberUtils.LONG_ZERO); + return filterMenuVOList; + } + + /** + * 过滤没有上级菜单的菜单列表 + * + * @param parentMap + * @param parentId + * @return + */ + private List filterNoParentMenu(Map> parentMap, Long parentId) { + // 获取本级菜单树List + List res = parentMap.getOrDefault(parentId, Lists.newArrayList()); + List childMenu = Lists.newArrayList(); + // 循环遍历下级菜单 + res.forEach(e -> { + //处理接口权限 + String perms = e.getApiPerms(); + if (StringUtils.isBlank(perms)) { + e.setApiPermsList(Lists.newArrayList()); + } else { + List permsList = Lists.newArrayList(StringUtils.split(perms, ",")); + e.setApiPermsList(permsList); + } + List menuList = this.filterNoParentMenu(parentMap, e.getMenuId()); + childMenu.addAll(menuList); + }); + res.addAll(childMenu); + return res; + } + + /** + * 查询菜单树 + * + * @param onlyMenu 不查询功能点 + * @return + */ + public ResponseDTO> queryMenuTree(Boolean onlyMenu) { + List menuTypeList = Lists.newArrayList(); + if (onlyMenu) { + menuTypeList = Lists.newArrayList(MenuTypeEnum.CATALOG.getValue(), MenuTypeEnum.MENU.getValue()); + } + List menuVOList = menuDao.queryMenuList(Boolean.FALSE, null, menuTypeList); + //根据ParentId进行分组 + Map> parentMap = menuVOList.stream().collect(Collectors.groupingBy(MenuVO::getParentId, Collectors.toList())); + List menuTreeVOList = this.buildMenuTree(parentMap, NumberUtils.LONG_ZERO); + return ResponseDTO.ok(menuTreeVOList); + } + + /** + * 构建菜单树 + * + * @return + */ + List buildMenuTree(Map> parentMap, Long parentId) { + // 获取本级菜单树List + List res = parentMap.getOrDefault(parentId, Lists.newArrayList()).stream() + .map(e -> SmartBeanUtil.copy(e, MenuTreeVO.class)).collect(Collectors.toList()); + // 循环遍历下级菜单 + res.forEach(e -> { + //处理接口权限 + String perms = e.getApiPerms(); + if (StringUtils.isBlank(perms)) { + e.setApiPermsList(Lists.newArrayList()); + } else { + List permsList = Lists.newArrayList(StringUtils.split(perms, ",")); + e.setApiPermsList(permsList); + } + e.setChildren(this.buildMenuTree(parentMap, e.getMenuId())); + }); + return res; + } + + /** + * 查询菜单详情 + * + * @param menuId + * @return + */ + public ResponseDTO getMenuDetail(Long menuId) { + //校验菜单是否存在 + MenuEntity selectMenu = menuDao.selectById(menuId); + if (selectMenu == null) { + return ResponseDTO.error(SystemErrorCode.SYSTEM_ERROR, "菜单不存在"); + } + if (selectMenu.getDeletedFlag()) { + return ResponseDTO.error(SystemErrorCode.SYSTEM_ERROR, "菜单已被删除"); + } + MenuVO menuVO = SmartBeanUtil.copy(selectMenu, MenuVO.class); + //处理接口权限 + String perms = menuVO.getApiPerms(); + if (!StringUtils.isBlank(perms)) { + List permsList = Lists.newArrayList(StringUtils.split(perms, ",")); + menuVO.setApiPermsList(permsList); + } + return ResponseDTO.ok(menuVO); + } + + /** + * 获取系统所有请求路径 + * + * @return + */ + public ResponseDTO> getAuthUrl() { + return ResponseDTO.ok(authUrl); + } + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleController.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleController.java new file mode 100644 index 00000000..4fcdc2d2 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleController.java @@ -0,0 +1,70 @@ +package net.lab1024.sa.admin.module.system.role.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.admin.common.AdminBaseController; +import net.lab1024.sa.admin.constant.AdminSwaggerTagConst; +import net.lab1024.sa.admin.module.system.role.domain.form.RoleAddForm; +import net.lab1024.sa.admin.module.system.role.domain.form.RoleUpdateForm; +import net.lab1024.sa.admin.module.system.role.domain.vo.RoleVO; +import net.lab1024.sa.admin.module.system.role.service.RoleService; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.module.support.operatelog.annoation.OperateLog; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 角色 + * + * @Author 1024创新实验室: 胡克 + * @Date 2021-12-14 19:40:28 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@OperateLog +@RestController +@Api(tags = {AdminSwaggerTagConst.System.SYSTEM_ROLE}) +public class RoleController extends AdminBaseController { + + @Autowired + private RoleService roleService; + + @ApiOperation("添加角色 @author 卓大") + @PostMapping("/role/add") + @PreAuthorize("@saAuth.checkPermission('system:role:add')") + public ResponseDTO addRole(@Valid @RequestBody RoleAddForm roleAddForm) { + return roleService.addRole(roleAddForm); + } + + @ApiOperation("删除角色 @author 卓大") + @GetMapping("/role/delete/{roleId}") + @PreAuthorize("@saAuth.checkPermission('system:role:delete')") + public ResponseDTO deleteRole(@PathVariable Long roleId) { + return roleService.deleteRole(roleId); + } + + @ApiOperation("更新角色 @author 卓大") + @PostMapping("/role/update") + @PreAuthorize("@saAuth.checkPermission('system:role:update')") + public ResponseDTO updateRole(@Valid @RequestBody RoleUpdateForm roleUpdateDTO) { + return roleService.updateRole(roleUpdateDTO); + } + + @ApiOperation("获取角色数据 @author 卓大") + @GetMapping("/role/get/{roleId}") + public ResponseDTO getRole(@PathVariable("roleId") Long roleId) { + return roleService.getRoleById(roleId); + } + + @ApiOperation("获取所有角色 @author 卓大") + @GetMapping("/role/getAll") + public ResponseDTO> getAllRole() { + return roleService.getAllRole(); + } + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleDataScopeController.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleDataScopeController.java new file mode 100644 index 00000000..a2814595 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleDataScopeController.java @@ -0,0 +1,50 @@ +package net.lab1024.sa.admin.module.system.role.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.admin.common.AdminBaseController; +import net.lab1024.sa.admin.constant.AdminSwaggerTagConst; +import net.lab1024.sa.admin.module.system.role.domain.form.RoleDataScopeUpdateForm; +import net.lab1024.sa.admin.module.system.role.domain.vo.RoleDataScopeVO; +import net.lab1024.sa.admin.module.system.role.service.RoleDataScopeService; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.module.support.operatelog.annoation.OperateLog; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 角色的数据权限配置 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-02-26 22:09:59 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@OperateLog +@RestController +@Api(tags = {AdminSwaggerTagConst.System.SYSTEM_ROLE_DATA_SCOPE}) +public class RoleDataScopeController extends AdminBaseController { + + @Autowired + private RoleDataScopeService roleDataScopeService; + + @ApiOperation(value = "获取某角色所设置的数据范围 @author 卓大") + @GetMapping("/role/dataScope/getRoleDataScopeList/{roleId}") + public ResponseDTO> dataScopeListByRole(@PathVariable Long roleId) { + return roleDataScopeService.getRoleDataScopeList(roleId); + } + + @ApiOperation(value = "批量设置某角色数据范围 @author 卓大") + @PostMapping("/role/dataScope/updateRoleDataScopeList") + @PreAuthorize("@saAuth.checkPermission('system:role:dataScope:update')") + public ResponseDTO updateRoleDataScopeList(@RequestBody @Valid RoleDataScopeUpdateForm roleDataScopeUpdateForm) { + return roleDataScopeService.updateRoleDataScopeList(roleDataScopeUpdateForm); + } + + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleEmployeeController.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleEmployeeController.java new file mode 100644 index 00000000..19ad623c --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleEmployeeController.java @@ -0,0 +1,77 @@ +package net.lab1024.sa.admin.module.system.role.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.admin.common.AdminBaseController; +import net.lab1024.sa.admin.constant.AdminSwaggerTagConst; +import net.lab1024.sa.admin.module.system.employee.domain.vo.EmployeeVO; +import net.lab1024.sa.admin.module.system.role.domain.form.RoleEmployeeQueryForm; +import net.lab1024.sa.admin.module.system.role.domain.form.RoleEmployeeUpdateForm; +import net.lab1024.sa.admin.module.system.role.domain.vo.RoleSelectedVO; +import net.lab1024.sa.admin.module.system.role.service.RoleEmployeeService; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.module.support.operatelog.annoation.OperateLog; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 角色的员工 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-02-26 22:09:59 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@OperateLog +@RestController +@Api(tags = {AdminSwaggerTagConst.System.SYSTEM_ROLE_EMPLOYEE}) +public class RoleEmployeeController extends AdminBaseController { + + @Autowired + private RoleEmployeeService roleEmployeeService; + + @ApiOperation(value = "查询某个角色下的员工列表 @author 卓大") + @PostMapping("/role/employee/queryEmployee") + public ResponseDTO> queryEmployee(@Valid @RequestBody RoleEmployeeQueryForm roleEmployeeQueryForm) { + return roleEmployeeService.queryEmployee(roleEmployeeQueryForm); + } + + @ApiOperation(value = "获取某个角色下的所有员工列表(无分页) @author 卓大") + @GetMapping("/role/employee/getAllEmployeeByRoleId/{roleId}") + public ResponseDTO> listAllEmployeeRoleId(@PathVariable Long roleId) { + return ResponseDTO.ok(roleEmployeeService.getAllEmployeeByRoleId(roleId)); + } + + @ApiOperation(value = "从角色成员列表中移除员工 @author 卓大") + @GetMapping("/role/employee/removeEmployee") + @PreAuthorize("@saAuth.checkPermission('system:role:employee:delete')") + public ResponseDTO removeEmployee(Long employeeId, Long roleId) { + return roleEmployeeService.removeRoleEmployee(employeeId, roleId); + } + + @ApiOperation(value = "从角色成员列表中批量移除员工 @author 卓大") + @PostMapping("/role/employee/batchRemoveRoleEmployee") + @PreAuthorize("@saAuth.checkPermission('system:role:employee:batch:delete')") + public ResponseDTO batchRemoveEmployee(@Valid @RequestBody RoleEmployeeUpdateForm updateForm) { + return roleEmployeeService.batchRemoveRoleEmployee(updateForm); + } + + @ApiOperation(value = "角色成员列表中批量添加员工 @author 卓大") + @PostMapping("/role/employee/batchAddRoleEmployee") + @PreAuthorize("@saAuth.checkPermission('system:role:employee:add')") + public ResponseDTO addEmployeeList(@Valid @RequestBody RoleEmployeeUpdateForm addForm) { + return roleEmployeeService.batchAddRoleEmployee(addForm); + } + + @ApiOperation(value = "获取员工所有选中的角色和所有角色 @author 卓大") + @GetMapping("/role/employee/getRoles/{employeeId}") + public ResponseDTO> getRoleByEmployeeId(@PathVariable Long employeeId) { + return ResponseDTO.ok(roleEmployeeService.getRoleInfoListByEmployeeId(employeeId)); + } +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleMenuController.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleMenuController.java new file mode 100644 index 00000000..02e7b8c3 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleMenuController.java @@ -0,0 +1,47 @@ +package net.lab1024.sa.admin.module.system.role.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.admin.common.AdminBaseController; +import net.lab1024.sa.admin.constant.AdminSwaggerTagConst; +import net.lab1024.sa.admin.module.system.role.domain.form.RoleMenuUpdateForm; +import net.lab1024.sa.admin.module.system.role.domain.vo.RoleMenuTreeVO; +import net.lab1024.sa.admin.module.system.role.service.RoleMenuService; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.module.support.operatelog.annoation.OperateLog; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +/** + * 角色的菜单 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-02-26 21:34:01 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@OperateLog +@RestController +@Api(tags = {AdminSwaggerTagConst.System.SYSTEM_ROLE_MENU}) +public class RoleMenuController extends AdminBaseController { + + @Autowired + private RoleMenuService roleMenuService; + + @ApiOperation("更新角色权限 @author 卓大") + @PostMapping("/role/menu/updateRoleMenu") + @PreAuthorize("@saAuth.checkPermission('system:role:menu:update')") + public ResponseDTO updateRoleMenu(@Valid @RequestBody RoleMenuUpdateForm updateDTO) { + return roleMenuService.updateRoleMenu(updateDTO); + } + + @ApiOperation("获取角色关联菜单权限 @author 卓大") + @GetMapping("/role/menu/getRoleSelectedMenu/{roleId}") + public ResponseDTO getRoleSelectedMenu(@PathVariable Long roleId) { + return roleMenuService.getRoleSelectedMenu(roleId); + } +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleDao.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleDao.java new file mode 100644 index 00000000..24ad753a --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleDao.java @@ -0,0 +1,29 @@ +package net.lab1024.sa.admin.module.system.role.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; +import net.lab1024.sa.admin.module.system.role.domain.entity.RoleEntity; + +/** + * 角色 dao + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022-02-26 21:34:01 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Mapper +@Component +public interface RoleDao extends BaseMapper { + + /** + * 根据角色名称查询 + * @param roleName + * @return + */ + RoleEntity getByRoleName(@Param("roleName") String roleName); + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleDataScopeDao.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleDataScopeDao.java new file mode 100644 index 00000000..281694ec --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleDataScopeDao.java @@ -0,0 +1,46 @@ +package net.lab1024.sa.admin.module.system.role.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; +import net.lab1024.sa.admin.module.system.role.domain.entity.RoleDataScopeEntity; + +import java.util.List; + + +/** + * 角色 数据权限 dao + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022-02-26 21:34:01 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Mapper +@Component +public interface RoleDataScopeDao extends BaseMapper { + + /** + * 获取某个角色的设置信息 + * @param roleId + * @return + */ + List listByRoleId(@Param("roleId") Long roleId); + + /** + * 获取某批角色的所有数据范围配置信息 + * @param roleIdList + * @return + */ + List listByRoleIdList(@Param("roleIdList") List roleIdList); + + /** + * 删除某个角色的设置信息 + * @param roleId + * @return + */ + void deleteByRoleId(@Param("roleId") Long roleId); + +} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/RoleEmployeeDao.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleEmployeeDao.java similarity index 50% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/RoleEmployeeDao.java rename to smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleEmployeeDao.java index 08a484e7..a2eaf954 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/RoleEmployeeDao.java +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleEmployeeDao.java @@ -1,25 +1,26 @@ -package net.lab1024.smartadmin.module.system.role.roleemployee; +package net.lab1024.sa.admin.module.system.role.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import net.lab1024.smartadmin.module.system.employee.domain.dto.EmployeeDTO; -import net.lab1024.smartadmin.module.system.role.basic.domain.dto.RoleQueryDTO; -import net.lab1024.smartadmin.module.system.role.roleemployee.domain.RoleEmployeeEntity; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Component; +import net.lab1024.sa.admin.module.system.employee.domain.vo.EmployeeVO; +import net.lab1024.sa.admin.module.system.role.domain.entity.RoleEmployeeEntity; +import net.lab1024.sa.admin.module.system.role.domain.form.RoleEmployeeQueryForm; +import net.lab1024.sa.admin.module.system.role.domain.vo.RoleEmployeeVO; import java.util.List; + /** - * [ ] + * 角色 员工 dao * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/3/27 0027 下午 13:00 - * @since JDK1.8 + * @Author 1024创新实验室: 罗伊 + * @Date 2022-03-07 18:54:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ @Mapper @Component @@ -33,19 +34,39 @@ public interface RoleEmployeeDao extends BaseMapper { List selectRoleIdByEmployeeId(@Param("employeeId") Long employeeId); /** - * - * @param page - * @param queryDTO + * 根据员工id 查询所有的角色 + * @param employeeIdList * @return */ - List selectEmployeeByNamePage(Page page, @Param("queryDTO") RoleQueryDTO queryDTO); + List selectRoleIdByEmployeeIdList(@Param("employeeIdList") List employeeIdList); + + /** + * 根据员工id 查询所有的角色 + * @param employeeIdList + * @return + */ + List selectRoleByEmployeeIdList(@Param("employeeIdList") List employeeIdList); + + /** + * 查询角色下的人员id + * @param roleIdList + * @return + */ + List selectEmployeeIdByRoleIdList(@Param("roleIdList") List roleIdList); + /** + * + * @param page + * @param roleEmployeeQueryForm + * @return + */ + List selectRoleEmployeeByName(Page page, @Param("queryForm") RoleEmployeeQueryForm roleEmployeeQueryForm); /** * * @param roleId * @return */ - List selectEmployeeByRoleId(@Param("roleId") Long roleId); + List selectEmployeeByRoleId(@Param("roleId") Long roleId); /** * 根据员工信息删除 * @param employeeId @@ -71,10 +92,4 @@ public interface RoleEmployeeDao extends BaseMapper { * @param employeeIds */ void batchDeleteEmployeeRole(@Param("roleId") Long roleId,@Param("employeeIds")List employeeIds); - - /** - * 批量新增 - * @param roleRelationList - */ - void batchInsert(List roleRelationList); } diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleMenuDao.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleMenuDao.java new file mode 100644 index 00000000..aed7cdd2 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleMenuDao.java @@ -0,0 +1,54 @@ +package net.lab1024.sa.admin.module.system.role.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import net.lab1024.sa.admin.module.system.menu.domain.entity.MenuEntity; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; +import net.lab1024.sa.admin.module.system.role.domain.entity.RoleMenuEntity; + +import java.util.List; + +/** + * 角色 菜单 dao + * + * @Author 1024创新实验室: 善逸 + * @Date 2022-03-07 18:54:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Mapper +@Component +public interface RoleMenuDao extends BaseMapper { + + /** + * 根据角色ID删除菜单权限 + * + * @param roleId + */ + void deleteByRoleId(@Param("roleId") Long roleId); + + /** + * 根据角色ID查询选择的菜单权限 + * + * @param roleId + * @return + */ + List queryMenuIdByRoleId(@Param("roleId") Long roleId); + + /** + * 根据角色ID集合查询选择的菜单权限 + * + * @param roleIdList + * @return + */ + List selectMenuListByRoleIdList(@Param("roleIdList") List roleIdList, @Param("deletedFlag") Boolean deletedFlag); + + /** + * 查询所有的菜单角色 + * + * @return + */ + List queryAllRoleMenu(); +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleDataScopeEntity.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleDataScopeEntity.java new file mode 100644 index 00000000..1f2514e0 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleDataScopeEntity.java @@ -0,0 +1,53 @@ +package net.lab1024.sa.admin.module.system.role.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import net.lab1024.sa.admin.module.system.datascope.constant.DataScopeTypeEnum; +import net.lab1024.sa.admin.module.system.datascope.constant.DataScopeViewTypeEnum; + +import java.time.LocalDateTime; + +/** + * 数据范围与角色关系 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022-03-07 18:54:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +@TableName("t_role_data_scope") +public class RoleDataScopeEntity { + /** + * 主键id + */ + @TableId(type = IdType.AUTO) + private Long id; + /** + * 数据范围id + * {@link DataScopeTypeEnum} + */ + private Integer dataScopeType; + /** + * 数据范围类型 + * {@link DataScopeViewTypeEnum} + */ + private Integer viewType; + /** + * 角色id + */ + private Long roleId; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; + + /** + * 创建时间 + */ + private LocalDateTime createTime; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleEmployeeEntity.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleEmployeeEntity.java new file mode 100644 index 00000000..4a8b9c46 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleEmployeeEntity.java @@ -0,0 +1,41 @@ +package net.lab1024.sa.admin.module.system.role.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 角色 员工关系 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022-03-07 18:54:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +@TableName("t_role_employee") +public class RoleEmployeeEntity { + + @TableId(type = IdType.AUTO) + private Long id; + + private Long roleId; + + private Long employeeId; + + private LocalDateTime updateTime; + + private LocalDateTime createTime; + + public RoleEmployeeEntity() { + } + + public RoleEmployeeEntity(Long roleId, Long employeeId) { + this.roleId = roleId; + this.employeeId = employeeId; + } +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleEntity.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleEntity.java new file mode 100644 index 00000000..7d963f7b --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleEntity.java @@ -0,0 +1,41 @@ +package net.lab1024.sa.admin.module.system.role.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 角色 + * + * @Author 1024创新实验室: 胡克 + * @Date 2022-03-07 18:54:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +@TableName("t_role") +public class RoleEntity { + /** + * 主键id + */ + @TableId(type = IdType.AUTO) + private Long roleId; + + private String roleName; + + private String remark; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; + + /** + * 创建时间 + */ + private LocalDateTime createTime; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleMenuEntity.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleMenuEntity.java new file mode 100644 index 00000000..36b0d80f --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleMenuEntity.java @@ -0,0 +1,49 @@ +package net.lab1024.sa.admin.module.system.role.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 角色 菜单 + * + * @Author 1024创新实验室: 善逸 + * @Date 2022-03-16 23:00:57 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +@TableName("t_role_menu") +public class RoleMenuEntity { + + /** + * 主键id + */ + @TableId(type = IdType.AUTO) + private Long roleMenuId; + + /** + * 角色 id + */ + private Long roleId; + + /** + * 菜单 id + */ + private Long menuId; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + +} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleAddDTO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleAddForm.java similarity index 66% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleAddDTO.java rename to smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleAddForm.java index ba66b68e..f34113ea 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleAddDTO.java +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleAddForm.java @@ -1,4 +1,4 @@ -package net.lab1024.smartadmin.module.system.role.basic.domain.dto; +package net.lab1024.sa.admin.module.system.role.domain.form; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.hibernate.validator.constraints.Length; @@ -6,13 +6,16 @@ import org.hibernate.validator.constraints.Length; import javax.validation.constraints.NotNull; /** - * 角色添加DTO + * 角色 添加表单 * - * @author listen - * @date 2017/12/28 09:40 + * @Author 1024创新实验室: 胡克 + * @Date 2022-02-26 19:09:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ @Data -public class RoleAddDTO { +public class RoleAddForm { /** * 角色名称 diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleDataScopeUpdateForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleDataScopeUpdateForm.java new file mode 100644 index 00000000..6dbff70d --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleDataScopeUpdateForm.java @@ -0,0 +1,43 @@ +package net.lab1024.sa.admin.module.system.role.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * 角色的数据范围更新 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022-04-08 21:53:04 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class RoleDataScopeUpdateForm { + + @ApiModelProperty("角色id") + @NotNull(message = "角色id不能为空") + private Long roleId; + + @ApiModelProperty("设置信息") + @Valid + private List dataScopeItemList; + + + @Data + public static class RoleUpdateDataScopeListFormItem { + + @ApiModelProperty("数据范围类型") + @NotNull(message = "数据范围类型不能为空") + private Integer dataScopeType; + + @ApiModelProperty("可见范围") + @NotNull(message = "可见范围不能为空") + private Integer viewType; + } + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleEmployeeQueryForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleEmployeeQueryForm.java new file mode 100644 index 00000000..c517d1fb --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleEmployeeQueryForm.java @@ -0,0 +1,24 @@ +package net.lab1024.sa.admin.module.system.role.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.domain.PageParam; + +/** + * 角色的员工查询 + * + * @Author 1024创新实验室: 善逸 + * @Date 2022-04-08 21:53:04 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class RoleEmployeeQueryForm extends PageParam { + + @ApiModelProperty("关键字") + private String keywords; + + @ApiModelProperty("角色id") + private String roleId; +} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleBatchDTO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleEmployeeUpdateForm.java similarity index 54% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleBatchDTO.java rename to smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleEmployeeUpdateForm.java index af01cf8c..3b5f9655 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleBatchDTO.java +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleEmployeeUpdateForm.java @@ -1,4 +1,4 @@ -package net.lab1024.smartadmin.module.system.role.basic.domain.dto; +package net.lab1024.sa.admin.module.system.role.domain.form; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -8,23 +8,23 @@ import javax.validation.constraints.NotNull; import java.util.List; /** - * 批量添加角色员工DTO + * 角色的员工更新 * - * @author listen - * @date 2017/12/29 15:38 + * @Author 1024创新实验室: 善逸 + * @Date 2022-04-08 21:53:04 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ @Data -public class RoleBatchDTO { +public class RoleEmployeeUpdateForm { @ApiModelProperty("角色id") @NotNull(message = "角色id不能为空") protected Long roleId; - /** - * 员工id集合 - */ @ApiModelProperty(value = "员工id集合") @NotEmpty(message = "员工id不能为空") - protected List employeeIds; + protected List employeeIdList; } diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleMenuUpdateForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleMenuUpdateForm.java new file mode 100644 index 00000000..559f67af --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleMenuUpdateForm.java @@ -0,0 +1,35 @@ +package net.lab1024.sa.admin.module.system.role.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * 角色的菜单更新 + * + * @Author 1024创新实验室: 善逸 + * @Date 2022-04-08 21:53:04 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class RoleMenuUpdateForm { + + /** + * 角色id + */ + @ApiModelProperty("角色id") + @NotNull(message = "角色id不能为空") + private Long roleId; + + /** + * 菜单ID 集合 + */ + @ApiModelProperty("菜单ID集合") + @NotNull(message = "菜单ID不能为空") + private List menuIdList; + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleQueryForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleQueryForm.java new file mode 100644 index 00000000..a1f935fb --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleQueryForm.java @@ -0,0 +1,24 @@ +package net.lab1024.sa.admin.module.system.role.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.domain.PageParam; + +/** + * 角色 查询 + * + * @Author 1024创新实验室: 胡克 + * @Date 2022-02-26 19:09:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class RoleQueryForm extends PageParam { + + @ApiModelProperty("角色名称") + private String roleName; + + @ApiModelProperty("角色id") + private String roleId; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleUpdateForm.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleUpdateForm.java new file mode 100644 index 00000000..0b937f26 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleUpdateForm.java @@ -0,0 +1,27 @@ +package net.lab1024.sa.admin.module.system.role.domain.form; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * 角色更新修改 + * + * @Author 1024创新实验室: 胡克 + * @Date 2022-02-26 19:09:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class RoleUpdateForm extends RoleAddForm { + + /** + * 角色id + */ + @ApiModelProperty("角色id") + @NotNull(message = "角色id不能为空") + protected Long roleId; + + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleDataScopeVO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleDataScopeVO.java new file mode 100644 index 00000000..dd11deb9 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleDataScopeVO.java @@ -0,0 +1,23 @@ +package net.lab1024.sa.admin.module.system.role.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 角色的数据范围 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022-04-08 21:53:04 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class RoleDataScopeVO { + + @ApiModelProperty("数据范围id") + private Integer dataScopeType; + + @ApiModelProperty("可见范围") + private Integer viewType; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleEmployeeVO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleEmployeeVO.java new file mode 100644 index 00000000..04e63e33 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleEmployeeVO.java @@ -0,0 +1,22 @@ +package net.lab1024.sa.admin.module.system.role.domain.vo; + +import lombok.Data; + +/** + * 角色的员工 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022-04-08 21:53:04 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class RoleEmployeeVO { + + private Long roleId; + + private Long employeeId; + + private String roleName; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleMenuTreeVO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleMenuTreeVO.java new file mode 100644 index 00000000..04013481 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleMenuTreeVO.java @@ -0,0 +1,29 @@ +package net.lab1024.sa.admin.module.system.role.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.admin.module.system.menu.domain.vo.MenuSimpleTreeVO; + +import java.util.List; + +/** + * 角色菜单树 + * + * @Author 1024创新实验室: 善逸 + * @Date 2022-04-08 21:53:04 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class RoleMenuTreeVO { + + @ApiModelProperty("角色ID") + private Long roleId; + + @ApiModelProperty("菜单列表") + private List menuTreeList; + + @ApiModelProperty("选中的菜单ID") + private List selectedMenuId; +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleSelectedVO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleSelectedVO.java new file mode 100644 index 00000000..e8204845 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleSelectedVO.java @@ -0,0 +1,20 @@ +package net.lab1024.sa.admin.module.system.role.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 选择角色 + * + * @Author 1024创新实验室: 善逸 + * @Date 2022-04-08 21:53:04 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class RoleSelectedVO extends RoleVO { + + @ApiModelProperty("角色名称") + private Boolean selected; +} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleVO.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleVO.java similarity index 50% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleVO.java rename to smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleVO.java index 9f3eed90..7edd1ada 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleVO.java +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleVO.java @@ -1,23 +1,22 @@ -package net.lab1024.smartadmin.module.system.role.basic.domain.dto; +package net.lab1024.sa.admin.module.system.role.domain.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** - * [ ] + * 角色 * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/3/27 0027 下午 15:27 - * @since JDK1.8 + * @Author 1024创新实验室: 善逸 + * @Date 2022-04-08 21:53:04 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ @Data public class RoleVO { @ApiModelProperty("角色ID") - private Long id; + private Long roleId; @ApiModelProperty("角色名称") private String roleName; diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/manager/RoleDataScopeManager.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/manager/RoleDataScopeManager.java new file mode 100644 index 00000000..1b2aab9d --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/manager/RoleDataScopeManager.java @@ -0,0 +1,20 @@ +package net.lab1024.sa.admin.module.system.role.manager; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import net.lab1024.sa.admin.module.system.role.dao.RoleDataScopeDao; +import net.lab1024.sa.admin.module.system.role.domain.entity.RoleDataScopeEntity; +import org.springframework.stereotype.Service; + +/** + * 角色 数据范围 manager + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-04-08 21:53:04 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Service +public class RoleDataScopeManager extends ServiceImpl { + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/manager/RoleEmployeeManager.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/manager/RoleEmployeeManager.java new file mode 100644 index 00000000..c470c878 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/manager/RoleEmployeeManager.java @@ -0,0 +1,37 @@ +package net.lab1024.sa.admin.module.system.role.manager; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import net.lab1024.sa.admin.module.system.role.dao.RoleEmployeeDao; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import net.lab1024.sa.admin.module.system.role.domain.entity.RoleEmployeeEntity; + +import java.util.List; + +/** + * 角色员工 manager + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-04-08 21:53:04 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Service +public class RoleEmployeeManager extends ServiceImpl { + + /** + * 保存 角色员工 + * + * @param roleId + * @param roleEmployeeList + */ + @Transactional(rollbackFor = Throwable.class) + public void saveRoleEmployee(Long roleId, List roleEmployeeList) { + this.getBaseMapper().deleteByRoleId(roleId); + if (CollectionUtils.isNotEmpty(roleEmployeeList)) { + this.saveBatch(roleEmployeeList); + } + } +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/manager/RoleMenuManager.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/manager/RoleMenuManager.java new file mode 100644 index 00000000..32fbe646 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/manager/RoleMenuManager.java @@ -0,0 +1,40 @@ +package net.lab1024.sa.admin.module.system.role.manager; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import net.lab1024.sa.admin.module.system.role.dao.RoleMenuDao; +import net.lab1024.sa.admin.module.system.role.domain.entity.RoleMenuEntity; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 角色-菜单 manager + * + * @Author 1024创新实验室: 善逸 + * @Date 2022-04-09 19:05:49 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Service +public class RoleMenuManager extends ServiceImpl { + + @Autowired + private RoleMenuDao roleMenuDao; + + /** + * 更新角色权限 + * + * @param roleId + * @param roleMenuEntityList + */ + @Transactional(rollbackFor = Exception.class) + public void updateRoleMenu(Long roleId, List roleMenuEntityList) { + // 根据角色ID删除菜单权限 + roleMenuDao.deleteByRoleId(roleId); + // 批量添加菜单权限 + saveBatch(roleMenuEntityList); + } +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleDataScopeService.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleDataScopeService.java new file mode 100644 index 00000000..3cc655bc --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleDataScopeService.java @@ -0,0 +1,67 @@ +package net.lab1024.sa.admin.module.system.role.service; + +import com.google.common.collect.Lists; +import net.lab1024.sa.admin.module.system.role.domain.form.RoleDataScopeUpdateForm; +import net.lab1024.sa.admin.module.system.role.domain.vo.RoleDataScopeVO; +import net.lab1024.sa.common.common.code.UserErrorCode; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import net.lab1024.sa.admin.module.system.role.domain.entity.RoleDataScopeEntity; +import net.lab1024.sa.admin.module.system.role.manager.RoleDataScopeManager; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.util.List; + +/** + * 角色-数据范围 + * + * @Author 1024创新实验室: 善逸 + * @Date 2021-10-22 23:17:47 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Service +public class RoleDataScopeService { + + @Autowired + private RoleDataScopeManager roleDataScopeManager; + + + /** + * 获取某个角色的数据范围设置信息 + * + * @param roleId + * @return + */ + public ResponseDTO> getRoleDataScopeList(Long roleId) { + List roleDataScopeEntityList = roleDataScopeManager.getBaseMapper().listByRoleId(roleId); + if (CollectionUtils.isEmpty(roleDataScopeEntityList)) { + return ResponseDTO.ok(Lists.newArrayList()); + } + List roleDataScopeList = SmartBeanUtil.copyList(roleDataScopeEntityList, RoleDataScopeVO.class); + return ResponseDTO.ok(roleDataScopeList); + } + + /** + * 批量设置某个角色的数据范围设置信息 + * + * @param roleDataScopeUpdateForm + * @return + */ + @Transactional(rollbackFor = Exception.class) + public ResponseDTO updateRoleDataScopeList(RoleDataScopeUpdateForm roleDataScopeUpdateForm) { + List batchSetList = roleDataScopeUpdateForm.getDataScopeItemList(); + if (CollectionUtils.isEmpty(batchSetList)) { + return ResponseDTO.error(UserErrorCode.PARAM_ERROR, "缺少配置信息"); + } + List roleDataScopeEntityList = SmartBeanUtil.copyList(batchSetList, RoleDataScopeEntity.class); + roleDataScopeEntityList.forEach(e -> e.setRoleId(roleDataScopeUpdateForm.getRoleId())); + roleDataScopeManager.getBaseMapper().deleteByRoleId(roleDataScopeUpdateForm.getRoleId()); + roleDataScopeManager.saveBatch(roleDataScopeEntityList); + return ResponseDTO.ok(); + } +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleEmployeeService.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleEmployeeService.java new file mode 100644 index 00000000..51bf64d4 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleEmployeeService.java @@ -0,0 +1,153 @@ +package net.lab1024.sa.admin.module.system.role.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.lab1024.sa.admin.module.system.role.dao.RoleDao; +import net.lab1024.sa.admin.module.system.role.dao.RoleEmployeeDao; +import net.lab1024.sa.admin.module.system.role.domain.entity.RoleEntity; +import net.lab1024.sa.admin.module.system.role.domain.form.RoleEmployeeQueryForm; +import net.lab1024.sa.admin.module.system.role.domain.form.RoleEmployeeUpdateForm; +import net.lab1024.sa.admin.module.system.role.domain.vo.RoleSelectedVO; +import net.lab1024.sa.common.common.code.UserErrorCode; +import net.lab1024.sa.common.common.constant.StringConst; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import net.lab1024.sa.common.common.util.SmartPageUtil; +import net.lab1024.sa.admin.module.system.department.dao.DepartmentDao; +import net.lab1024.sa.admin.module.system.department.domain.entity.DepartmentEntity; +import net.lab1024.sa.admin.module.system.employee.domain.vo.EmployeeVO; +import net.lab1024.sa.admin.module.system.role.domain.entity.RoleEmployeeEntity; +import net.lab1024.sa.admin.module.system.role.manager.RoleEmployeeManager; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * 角色-员工 + * + * @Author 1024创新实验室: 善逸 + * @Date 2021-10-22 23:17:47 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Service +public class RoleEmployeeService { + + @Autowired + private RoleEmployeeDao roleEmployeeDao; + @Autowired + private RoleDao roleDao; + @Autowired + private DepartmentDao departmentDao; + @Autowired + private RoleEmployeeManager roleEmployeeManager; + + /** + * 通过角色id,分页获取成员员工列表 + * + * @param roleEmployeeQueryForm + * @return + */ + public ResponseDTO> queryEmployee(RoleEmployeeQueryForm roleEmployeeQueryForm) { + Page page = SmartPageUtil.convert2PageQuery(roleEmployeeQueryForm); + List employeeDTOS = roleEmployeeDao.selectRoleEmployeeByName(page, roleEmployeeQueryForm) + .stream() + .filter(Objects::nonNull) + .collect(Collectors.toList()); + List departmentIdList = employeeDTOS.stream().filter(e -> e != null && e.getDepartmentId() != null).map(EmployeeVO::getDepartmentId).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(departmentIdList)) { + List departmentEntities = departmentDao.selectBatchIds(departmentIdList); + Map departmentIdNameMap = departmentEntities.stream().collect(Collectors.toMap(DepartmentEntity::getDepartmentId, DepartmentEntity::getName)); + employeeDTOS.forEach(e -> { + e.setDepartmentName(departmentIdNameMap.getOrDefault(e.getDepartmentId(), StringConst.EMPTY)); + }); + } + PageResult PageResult = SmartPageUtil.convert2PageResult(page, employeeDTOS, EmployeeVO.class); + return ResponseDTO.ok(PageResult); + } + + public List getAllEmployeeByRoleId(Long roleId) { + return roleEmployeeDao.selectEmployeeByRoleId(roleId); + } + + /** + * 移除员工角色 + * + * @param employeeId + * @param roleId + * @return ResponseDTO + */ + @Transactional(rollbackFor = Exception.class) + public ResponseDTO removeRoleEmployee(Long employeeId, Long roleId) { + if (null == employeeId || null == roleId) { + return ResponseDTO.userErrorParam(); + } + roleEmployeeDao.deleteByEmployeeIdRoleId(employeeId, roleId); + return ResponseDTO.ok(); + } + + /** + * 批量删除角色的成员员工 + * + * @param roleEmployeeUpdateForm + * @return ResponseDTO + */ + public ResponseDTO batchRemoveRoleEmployee(RoleEmployeeUpdateForm roleEmployeeUpdateForm) { + roleEmployeeDao.batchDeleteEmployeeRole(roleEmployeeUpdateForm.getRoleId(), roleEmployeeUpdateForm.getEmployeeIdList()); + return ResponseDTO.ok(); + } + + /** + * 批量添加角色的成员员工 + * + * @param roleEmployeeUpdateForm + * @return + */ + public ResponseDTO batchAddRoleEmployee(RoleEmployeeUpdateForm roleEmployeeUpdateForm) { + Long roleId = roleEmployeeUpdateForm.getRoleId(); + List employeeIdList = roleEmployeeUpdateForm.getEmployeeIdList(); + // 保存新的角色员工 + List roleEmployeeList = null; + if (CollectionUtils.isNotEmpty(employeeIdList)) { + roleEmployeeList = employeeIdList.stream() + .map(employeeId -> new RoleEmployeeEntity(roleId, employeeId)) + .collect(Collectors.toList()); + } + // 保存数据 + roleEmployeeManager.saveRoleEmployee(roleId, roleEmployeeList); + return ResponseDTO.ok(); + } + + /** + * 通过员工id获取员工角色 + * + * @param employeeId + * @return + */ + public List getRoleInfoListByEmployeeId(Long employeeId) { + List roleIds = roleEmployeeDao.selectRoleIdByEmployeeId(employeeId); + List roleList = roleDao.selectList(null); + List result = SmartBeanUtil.copyList(roleList, RoleSelectedVO.class); + result.stream().forEach(item -> item.setSelected(roleIds.contains(item.getRoleId()))); + return result; + } + + /** + * 根据员工id 查询角色id集合 + * + * @param employeeId + * @return + */ + public List getRoleIdList(Long employeeId) { + return roleEmployeeDao.selectRoleIdByEmployeeId(employeeId); + } + + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleMenuService.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleMenuService.java new file mode 100644 index 00000000..e93d106a --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleMenuService.java @@ -0,0 +1,130 @@ +package net.lab1024.sa.admin.module.system.role.service; + +import com.google.common.collect.Lists; +import net.lab1024.sa.admin.module.system.menu.dao.MenuDao; +import net.lab1024.sa.admin.module.system.menu.domain.entity.MenuEntity; +import net.lab1024.sa.admin.module.system.menu.domain.vo.MenuSimpleTreeVO; +import net.lab1024.sa.admin.module.system.menu.domain.vo.MenuVO; +import net.lab1024.sa.admin.module.system.role.dao.RoleDao; +import net.lab1024.sa.admin.module.system.role.dao.RoleMenuDao; +import net.lab1024.sa.admin.module.system.role.domain.entity.RoleEntity; +import net.lab1024.sa.admin.module.system.role.domain.entity.RoleMenuEntity; +import net.lab1024.sa.admin.module.system.role.domain.form.RoleMenuUpdateForm; +import net.lab1024.sa.admin.module.system.role.domain.vo.RoleMenuTreeVO; +import net.lab1024.sa.admin.module.system.role.manager.RoleMenuManager; +import net.lab1024.sa.common.common.code.UserErrorCode; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.math.NumberUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 角色-菜单 + * + * @Author 1024创新实验室: 善逸 + * @Date 2021-10-22 23:17:47 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Service +public class RoleMenuService { + + @Autowired + private RoleDao roleDao; + @Autowired + private RoleMenuDao roleMenuDao; + @Autowired + private RoleMenuManager roleMenuManager; + @Autowired + private MenuDao menuDao; + + /** + * 更新角色权限 + * + * @param roleMenuUpdateForm + * @return + */ + public ResponseDTO updateRoleMenu(RoleMenuUpdateForm roleMenuUpdateForm) { + //查询角色是否存在 + Long roleId = roleMenuUpdateForm.getRoleId(); + RoleEntity roleEntity = roleDao.selectById(roleId); + if (null == roleEntity) { + return ResponseDTO.error(UserErrorCode.DATA_NOT_EXIST); + } + List roleMenuEntityList = Lists.newArrayList(); + RoleMenuEntity roleMenuEntity; + for (Long menuId : roleMenuUpdateForm.getMenuIdList()) { + roleMenuEntity = new RoleMenuEntity(); + roleMenuEntity.setRoleId(roleId); + roleMenuEntity.setMenuId(menuId); + roleMenuEntityList.add(roleMenuEntity); + } + roleMenuManager.updateRoleMenu(roleMenuUpdateForm.getRoleId(), roleMenuEntityList); + return ResponseDTO.ok(); + } + + /** + * 根据角色id集合,查询其所有的菜单权限 + * + * @param roleIdList + * @return + */ + public List getMenuList(List roleIdList, Boolean administratorFlag) { + //管理员返回所有菜单 + if(administratorFlag){ + List menuEntityList = roleMenuDao.selectMenuListByRoleIdList(Lists.newArrayList(), false); + return SmartBeanUtil.copyList(menuEntityList, MenuVO.class); + } + //非管理员 无角色 返回空菜单 + if (CollectionUtils.isEmpty(roleIdList)) { + return new ArrayList<>(); + } + List menuEntityList = roleMenuDao.selectMenuListByRoleIdList(roleIdList, false); + return SmartBeanUtil.copyList(menuEntityList, MenuVO.class); + } + + + /** + * 获取角色关联菜单权限 + * + * @param roleId + * @return + */ + public ResponseDTO getRoleSelectedMenu(Long roleId) { + RoleMenuTreeVO res = new RoleMenuTreeVO(); + res.setRoleId(roleId); + //查询角色ID选择的菜单权限 + List selectedMenuId = roleMenuDao.queryMenuIdByRoleId(roleId); + res.setSelectedMenuId(selectedMenuId); + //查询菜单权限 + List menuVOList = menuDao.queryMenuList(Boolean.FALSE, Boolean.FALSE, null); + Map> parentMap = menuVOList.stream().collect(Collectors.groupingBy(MenuVO::getParentId, Collectors.toList())); + List menuTreeList = this.buildMenuTree(parentMap, NumberUtils.LONG_ZERO); + res.setMenuTreeList(menuTreeList); + return ResponseDTO.ok(res); + } + + /** + * 构建菜单树 + * + * @return + */ + private List buildMenuTree(Map> parentMap, Long parentId) { + // 获取本级菜单树List + List res = parentMap.getOrDefault(parentId, Lists.newArrayList()).stream() + .map(e -> SmartBeanUtil.copy(e, MenuSimpleTreeVO.class)).collect(Collectors.toList()); + // 循环遍历下级菜单 + res.forEach(e -> { + e.setChildren(this.buildMenuTree(parentMap, e.getMenuId())); + }); + return res; + } +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleService.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleService.java new file mode 100644 index 00000000..031d75e0 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleService.java @@ -0,0 +1,119 @@ +package net.lab1024.sa.admin.module.system.role.service; + +import net.lab1024.sa.admin.module.system.role.dao.RoleDao; +import net.lab1024.sa.admin.module.system.role.dao.RoleEmployeeDao; +import net.lab1024.sa.admin.module.system.role.dao.RoleMenuDao; +import net.lab1024.sa.admin.module.system.role.domain.entity.RoleEntity; +import net.lab1024.sa.admin.module.system.role.domain.form.RoleAddForm; +import net.lab1024.sa.admin.module.system.role.domain.form.RoleUpdateForm; +import net.lab1024.sa.admin.module.system.role.domain.vo.RoleVO; +import net.lab1024.sa.common.common.code.UserErrorCode; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 角色 + * + * @Author 1024创新实验室: 胡克 + * @Date 2021-08-16 20:19:22 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Service +public class RoleService { + + @Autowired + private RoleDao roleDao; + + @Autowired + private RoleMenuDao roleMenuDao; + + @Autowired + private RoleEmployeeDao roleEmployeeDao; + + /** + * 新增添加角色 + * + * @param roleAddForm + * @return ResponseDTO + */ + public ResponseDTO addRole(RoleAddForm roleAddForm) { + RoleEntity existRoleEntity = roleDao.getByRoleName(roleAddForm.getRoleName()); + if (null != existRoleEntity) { + return ResponseDTO.userErrorParam("角色名称重复"); + } + RoleEntity roleEntity = SmartBeanUtil.copy(roleAddForm, RoleEntity.class); + roleDao.insert(roleEntity); + return ResponseDTO.ok(); + } + + /** + * 根据角色id 删除 + * + * @param roleId + * @return ResponseDTO + */ + @Transactional(rollbackFor = Exception.class) + public ResponseDTO deleteRole(Long roleId) { + RoleEntity roleEntity = roleDao.selectById(roleId); + if (null == roleEntity) { + return ResponseDTO.error(UserErrorCode.DATA_NOT_EXIST); + } + roleDao.deleteById(roleId); + roleMenuDao.deleteByRoleId(roleId); + roleEmployeeDao.deleteByRoleId(roleId); + return ResponseDTO.ok(); + } + + /** + * 更新角色 + * + * @param roleUpdateForm + * @return ResponseDTO + */ + @Transactional(rollbackFor = Exception.class) + public ResponseDTO updateRole(RoleUpdateForm roleUpdateForm) { + if (null == roleDao.selectById(roleUpdateForm.getRoleId())) { + return ResponseDTO.error(UserErrorCode.DATA_NOT_EXIST); + } + RoleEntity existRoleEntity = roleDao.getByRoleName(roleUpdateForm.getRoleName()); + if (null != existRoleEntity && !existRoleEntity.getRoleId().equals(roleUpdateForm.getRoleId())) { + return ResponseDTO.userErrorParam("角色名称重复"); + } + RoleEntity roleEntity = SmartBeanUtil.copy(roleUpdateForm, RoleEntity.class); + roleDao.updateById(roleEntity); + return ResponseDTO.ok(); + } + + /** + * 根据id获取角色数据 + * + * @param roleId + * @return ResponseDTO + */ + public ResponseDTO getRoleById(Long roleId) { + RoleEntity roleEntity = roleDao.selectById(roleId); + if (null == roleEntity) { + return ResponseDTO.error(UserErrorCode.DATA_NOT_EXIST); + } + RoleVO role = SmartBeanUtil.copy(roleEntity, RoleVO.class); + return ResponseDTO.ok(role); + } + + /** + * 获取所有角色列表 + * + * @return ResponseDTO + */ + public ResponseDTO> getAllRole() { + List roleEntityList = roleDao.selectList(null); + List roleList = SmartBeanUtil.copyList(roleEntityList, RoleVO.class); + return ResponseDTO.ok(roleList); + } +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminCacheController.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminCacheController.java new file mode 100644 index 00000000..492a063b --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminCacheController.java @@ -0,0 +1,56 @@ +package net.lab1024.sa.admin.module.system.support; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.common.common.controller.SupportBaseController; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.constant.SwaggerTagConst; +import net.lab1024.sa.common.module.support.cache.CacheService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 缓存 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2021/10/11 20:07 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@RestController +@Api(tags = {SwaggerTagConst.Support.CACHE}) +public class AdminCacheController extends SupportBaseController { + + @Autowired + private CacheService cacheService; + + @ApiOperation(value = "获取所有缓存 @author 罗伊") + @GetMapping("/cache/names") + public ResponseDTO> cacheNames() { + return ResponseDTO.ok(cacheService.cacheNames()); + } + + + @ApiOperation(value = "移除某个缓存 @author 罗伊") + @PreAuthorize("@saAuth.checkPermission('support:cache:delete')") + @GetMapping("/cache/remove/{cacheName}") + public ResponseDTO removeCache(@PathVariable String cacheName) { + cacheService.removeCache(cacheName); + return ResponseDTO.ok(); + } + + + @ApiOperation(value = "获取某个缓存的所有key @author 罗伊") + @PreAuthorize("@saAuth.checkPermission('support:cache:keys')") + @GetMapping("/cache/keys/{cacheName}") + public ResponseDTO> cacheKeys(@PathVariable String cacheName) { + return ResponseDTO.ok(cacheService.cacheKey(cacheName)); + } + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminChangeLogController.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminChangeLogController.java new file mode 100644 index 00000000..7c4b1eec --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminChangeLogController.java @@ -0,0 +1,59 @@ +package net.lab1024.sa.admin.module.system.support; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.domain.ValidateList; +import net.lab1024.sa.common.constant.SwaggerTagConst; +import net.lab1024.sa.common.module.support.changelog.domain.form.ChangeLogAddForm; +import net.lab1024.sa.common.module.support.changelog.domain.form.ChangeLogUpdateForm; +import net.lab1024.sa.common.module.support.changelog.service.ChangeLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +/** + * 系统更新日志 Controller + * + * @Author 卓大 + * @Date 2022-09-26 14:53:50 + * @Copyright 1024创新实验室 + */ + +@RestController +@Api(tags = SwaggerTagConst.Support.CHANGE_LOG) +public class AdminChangeLogController { + + @Autowired + private ChangeLogService changeLogService; + + @ApiOperation("添加 @author 卓大") + @PostMapping("/changeLog/add") + @PreAuthorize("@saAuth.checkPermission('changeLog:add')") + public ResponseDTO add(@RequestBody @Valid ChangeLogAddForm addForm) { + return changeLogService.add(addForm); + } + + @ApiOperation("更新 @author 卓大") + @PreAuthorize("@saAuth.checkPermission('changeLog:update')") + @PostMapping("/changeLog/update") + public ResponseDTO update(@RequestBody @Valid ChangeLogUpdateForm updateForm) { + return changeLogService.update(updateForm); + } + + @ApiOperation("批量删除 @author 卓大") + @PreAuthorize("@saAuth.checkPermission('changeLog:batchDelete')") + @PostMapping("/changeLog/batchDelete") + public ResponseDTO batchDelete(@RequestBody ValidateList idList) { + return changeLogService.batchDelete(idList); + } + + @ApiOperation("单个删除 @author 卓大") + @PreAuthorize("@saAuth.checkPermission('changeLog:delete')") + @GetMapping("/changeLog/delete/{changeLogId}") + public ResponseDTO batchDelete(@PathVariable Long changeLogId) { + return changeLogService.delete(changeLogId); + } +} \ No newline at end of file diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminConfigController.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminConfigController.java new file mode 100644 index 00000000..78ab1722 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminConfigController.java @@ -0,0 +1,59 @@ +package net.lab1024.sa.admin.module.system.support; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.common.common.controller.SupportBaseController; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.constant.SwaggerTagConst; +import net.lab1024.sa.common.module.support.config.ConfigService; +import net.lab1024.sa.common.module.support.config.domain.ConfigAddForm; +import net.lab1024.sa.common.module.support.config.domain.ConfigQueryForm; +import net.lab1024.sa.common.module.support.config.domain.ConfigUpdateForm; +import net.lab1024.sa.common.module.support.config.domain.ConfigVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.Valid; + +/** + * 配置 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-03-14 20:46:27 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Api(tags = {SwaggerTagConst.Support.CONFIG}) +@RestController +public class AdminConfigController extends SupportBaseController { + + @Autowired + private ConfigService configService; + + @ApiOperation("分页查询系统配置 @author 卓大") + @PreAuthorize("@saAuth.checkPermission('support:config:query')") + @PostMapping("/config/query") + public ResponseDTO> querySystemConfigPage(@RequestBody @Valid ConfigQueryForm queryForm) { + return configService.queryConfigPage(queryForm); + } + + @ApiOperation("添加配置参数 @author 卓大") + @PreAuthorize("@saAuth.checkPermission('support:config:add')") + @PostMapping("/config/add") + public ResponseDTO addSystemConfig(@RequestBody @Valid ConfigAddForm configAddForm) { + return configService.add(configAddForm); + } + + @ApiOperation("修改配置参数 @author 卓大") + @PreAuthorize("@saAuth.checkPermission('support:config:update')") + @PostMapping("/config/update") + public ResponseDTO updateSystemConfig(@RequestBody @Valid ConfigUpdateForm updateForm) { + return configService.updateSystemConfig(updateForm); + } + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminDictController.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminDictController.java new file mode 100644 index 00000000..68f40856 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminDictController.java @@ -0,0 +1,79 @@ +package net.lab1024.sa.admin.module.system.support; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.common.common.controller.SupportBaseController; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.constant.SwaggerTagConst; +import net.lab1024.sa.common.module.support.dict.domain.form.*; +import net.lab1024.sa.common.module.support.dict.domain.vo.DictKeyVO; +import net.lab1024.sa.common.module.support.dict.domain.vo.DictValueVO; +import net.lab1024.sa.common.module.support.dict.service.DictCacheService; +import net.lab1024.sa.common.module.support.dict.service.DictService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 字典 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022/5/26 19:40:55 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Api(tags = {SwaggerTagConst.Support.DICT}) +@RestController +public class AdminDictController extends SupportBaseController { + + @Autowired + private DictService dictService; + + @ApiOperation("分页查询数据字典KEY - @author 罗伊") + @PostMapping("/dict/key/query") + public ResponseDTO> keyQuery(@Valid @RequestBody DictKeyQueryForm queryForm) { + return dictService.keyQuery(queryForm); + } + + + @ApiOperation("数据字典KEY-添加- @author 罗伊") + @PostMapping("/dict/key/add") + public ResponseDTO keyAdd(@Valid @RequestBody DictKeyAddForm keyAddForm) { + return dictService.keyAdd(keyAddForm); + } + + @ApiOperation("数据字典Value-添加- @author 罗伊") + @PostMapping("/dict/value/add") + public ResponseDTO valueAdd(@Valid @RequestBody DictValueAddForm valueAddForm) { + return dictService.valueAdd(valueAddForm); + } + + @ApiOperation("数据字典KEY-更新- @author 罗伊") + @PostMapping("/dict/key/edit") + public ResponseDTO keyEdit(@Valid @RequestBody DictKeyUpdateForm keyUpdateForm) { + return dictService.keyEdit(keyUpdateForm); + } + + @ApiOperation("数据字典Value-更新- @author 罗伊") + @PostMapping("/dict/value/edit") + public ResponseDTO valueEdit(@Valid @RequestBody DictValueUpdateForm valueUpdateForm) { + return dictService.valueEdit(valueUpdateForm); + } + + @ApiOperation("数据字典KEY-删除- @author 罗伊") + @PostMapping("/dict/key/delete") + public ResponseDTO keyDelete(@RequestBody List keyIdList) { + return dictService.keyDelete(keyIdList); + } + + @ApiOperation("数据字典Value-删除- @author 罗伊") + @PostMapping("/dict/value/delete") + public ResponseDTO valueDelete(@RequestBody List valueIdList) { + return dictService.valueDelete(valueIdList); + } + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminFileController.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminFileController.java new file mode 100644 index 00000000..f8a5b1e4 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminFileController.java @@ -0,0 +1,51 @@ +package net.lab1024.sa.admin.module.system.support; + +import cn.hutool.extra.servlet.ServletUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.common.common.constant.RequestHeaderConst; +import net.lab1024.sa.common.common.controller.SupportBaseController; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.RequestUser; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartRequestUtil; +import net.lab1024.sa.common.constant.SwaggerTagConst; +import net.lab1024.sa.common.module.support.file.constant.FileFolderTypeEnum; +import net.lab1024.sa.common.module.support.file.domain.form.FileQueryForm; +import net.lab1024.sa.common.module.support.file.domain.form.FileUrlUploadForm; +import net.lab1024.sa.common.module.support.file.domain.vo.FileUploadVO; +import net.lab1024.sa.common.module.support.file.domain.vo.FileVO; +import net.lab1024.sa.common.module.support.file.service.FileService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.validation.Valid; + +/** + * 文件服务 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2019年10月11日 15:34:47 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@RestController +@Api(tags = {SwaggerTagConst.Support.FILE}) +public class AdminFileController extends SupportBaseController { + + @Autowired + private FileService fileService; + + @ApiOperation("分页查询 @author 1024创新实验室-主任-卓大") + @PreAuthorize("@saAuth.checkPermission('support:file:query')") + @PostMapping("/file/queryPage") + public ResponseDTO> queryPage(@RequestBody @Valid FileQueryForm queryForm) { + return ResponseDTO.ok(fileService.queryPage(queryForm)); + } + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminHeartBeatController.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminHeartBeatController.java new file mode 100644 index 00000000..2f91d0be --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminHeartBeatController.java @@ -0,0 +1,41 @@ +package net.lab1024.sa.admin.module.system.support; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.common.common.controller.SupportBaseController; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.constant.SwaggerTagConst; +import net.lab1024.sa.common.module.support.heartbeat.HeartBeatService; +import net.lab1024.sa.common.module.support.heartbeat.domain.HeartBeatRecordQueryForm; +import net.lab1024.sa.common.module.support.heartbeat.domain.HeartBeatRecordVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.Valid; + +/** + * 心跳记录 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-01-09 20:57:24 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Api(tags = {SwaggerTagConst.Support.HEART_BEAT}) +@RestController +public class AdminHeartBeatController extends SupportBaseController { + + @Autowired + private HeartBeatService heartBeatService; + + @PostMapping("/heartBeat/query") + @ApiOperation("查询心跳记录 @author 卓大") + public ResponseDTO> query(@RequestBody @Valid HeartBeatRecordQueryForm pageParam) { + return heartBeatService.pageQuery(pageParam); + } + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminHelpDocController.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminHelpDocController.java new file mode 100644 index 00000000..5d0949e2 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminHelpDocController.java @@ -0,0 +1,108 @@ +package net.lab1024.sa.admin.module.system.support; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.common.common.controller.SupportBaseController; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.constant.SwaggerTagConst; +import net.lab1024.sa.common.module.support.helpdoc.domain.form.*; +import net.lab1024.sa.common.module.support.helpdoc.domain.vo.HelpDocDetailVO; +import net.lab1024.sa.common.module.support.helpdoc.domain.vo.HelpDocVO; +import net.lab1024.sa.common.module.support.helpdoc.service.HelpDocCatalogService; +import net.lab1024.sa.common.module.support.helpdoc.service.HelpDocService; +import net.lab1024.sa.common.module.support.repeatsubmit.annoation.RepeatSubmit; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 帮助文档 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-20 23:11:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Api(tags = SwaggerTagConst.Support.HELP_DOC) +@RestController +public class AdminHelpDocController extends SupportBaseController { + + @Autowired + private HelpDocService helpDocService; + + @Autowired + private HelpDocCatalogService helpDocCatalogService; + + // --------------------- 帮助文档 【目录管理】 ------------------------- + + + @ApiOperation("帮助文档目录-添加 @author 卓大") + @PreAuthorize("@saAuth.checkPermission('helpDocCatalog:addCategory')") + @PostMapping("/helpDoc/helpDocCatalog/add") + public ResponseDTO addHelpDocCatalog(@RequestBody @Valid HelpDocCatalogAddForm helpDocCatalogAddForm) { + return helpDocCatalogService.add(helpDocCatalogAddForm); + } + + @ApiOperation("帮助文档目录-更新 @author 卓大") + @PreAuthorize("@saAuth.checkPermission('helpDocCatalog:edit')") + @PostMapping("/helpDoc/helpDocCatalog/update") + public ResponseDTO updateHelpDocCatalog(@RequestBody @Valid HelpDocCatalogUpdateForm helpDocCatalogUpdateForm) { + return helpDocCatalogService.update(helpDocCatalogUpdateForm); + } + + @ApiOperation("帮助文档目录-删除 @author 卓大") + @GetMapping("/helpDoc/helpDocCatalog/delete/{helpDocCatalogId}") + public ResponseDTO deleteHelpDocCatalog(@PathVariable Long helpDocCatalogId) { + return helpDocCatalogService.delete(helpDocCatalogId); + } + + // --------------------- 帮助文档 【管理:增、删、查、改】------------------------- + + @ApiOperation("【管理】帮助文档-分页查询 @author 卓大") + @PreAuthorize("@saAuth.checkPermission('helpDoc:query')") + @PostMapping("/helpDoc/query") + public ResponseDTO> query(@RequestBody @Valid HelpDocQueryForm queryForm) { + return ResponseDTO.ok(helpDocService.query(queryForm)); + } + + @ApiOperation("【管理】帮助文档-获取详情 @author 卓大") + @GetMapping("/helpDoc/getDetail/{helpDocId}") + public ResponseDTO getDetail(@PathVariable Long helpDocId) { + return ResponseDTO.ok(helpDocService.getDetail(helpDocId)); + } + + @ApiOperation("【管理】帮助文档-添加 @author 卓大") + @PreAuthorize("@saAuth.checkPermission('helpDoc:add')") + @PostMapping("/helpDoc/add") + @RepeatSubmit + public ResponseDTO add(@RequestBody @Valid HelpDocAddForm addForm) { + return helpDocService.add(addForm); + } + + @ApiOperation("【管理】帮助文档-更新 @author 卓大") + @PreAuthorize("@saAuth.checkPermission('helpDoc:update')") + @PostMapping("/helpDoc/update") + @RepeatSubmit + public ResponseDTO update(@RequestBody @Valid HelpDocUpdateForm updateForm) { + return helpDocService.update(updateForm); + } + + @ApiOperation("【管理】帮助文档-删除 @author 卓大") + @PreAuthorize("@saAuth.checkPermission('helpDoc:delete')") + @GetMapping("/helpDoc/delete/{helpDocId}") + public ResponseDTO delete(@PathVariable Long helpDocId) { + return helpDocService.delete(helpDocId); + } + + @ApiOperation("【管理】帮助文档-根据关联id查询 @author 卓大") + @GetMapping("/helpDoc/queryHelpDocByRelationId/{relationId}") + public ResponseDTO> queryHelpDocByRelationId(@PathVariable Long relationId) { + return ResponseDTO.ok(helpDocService.queryHelpDocByRelationId(relationId)); + } + +} \ No newline at end of file diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminLoginLogController.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminLoginLogController.java new file mode 100644 index 00000000..0fd71522 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminLoginLogController.java @@ -0,0 +1,42 @@ +package net.lab1024.sa.admin.module.system.support; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.common.common.controller.SupportBaseController; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.constant.SwaggerTagConst; +import net.lab1024.sa.common.module.support.loginlog.LoginLogService; +import net.lab1024.sa.common.module.support.loginlog.domain.LoginLogQueryForm; +import net.lab1024.sa.common.module.support.loginlog.domain.LoginLogVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * 登录日志 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022/07/22 19:46:23 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@RestController +@Api(tags = {SwaggerTagConst.Support.LOGIN_LOG}) +public class AdminLoginLogController extends SupportBaseController { + + @Autowired + private LoginLogService loginLogService; + + @ApiOperation(value = "分页查询 @author 卓大") + @PreAuthorize("@saAuth.checkPermission('loginLog:query')") + @PostMapping("/loginLog/page/query") + public ResponseDTO> queryByPage(@RequestBody LoginLogQueryForm queryForm) { + return loginLogService.queryByPage(queryForm); + } + + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminOperateLogController.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminOperateLogController.java new file mode 100644 index 00000000..85161a6f --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminOperateLogController.java @@ -0,0 +1,46 @@ +package net.lab1024.sa.admin.module.system.support; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.common.common.controller.SupportBaseController; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.constant.SwaggerTagConst; +import net.lab1024.sa.common.module.support.operatelog.OperateLogService; +import net.lab1024.sa.common.module.support.operatelog.domain.OperateLogQueryForm; +import net.lab1024.sa.common.module.support.operatelog.domain.OperateLogVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +/** + * 操作日志 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2021-12-08 20:48:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@RestController +@Api(tags = {SwaggerTagConst.Support.OPERATE_LOG}) +public class AdminOperateLogController extends SupportBaseController { + + @Autowired + private OperateLogService operateLogService; + + @ApiOperation(value = "分页查询 @author 罗伊") + @PreAuthorize("@saAuth.checkPermission('operateLog:query')") + @PostMapping("/operateLog/page/query") + public ResponseDTO> queryByPage(@RequestBody OperateLogQueryForm queryForm) { + return operateLogService.queryByPage(queryForm); + } + + @ApiOperation(value = "详情 @author 罗伊") + @PreAuthorize("@saAuth.checkPermission('operateLog:detail')") + @GetMapping("/operateLog/detail/{operateLogId}") + public ResponseDTO detail(@PathVariable Long operateLogId) { + return operateLogService.detail(operateLogId); + } + +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminReloadController.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminReloadController.java new file mode 100644 index 00000000..24637f6e --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminReloadController.java @@ -0,0 +1,54 @@ +package net.lab1024.sa.admin.module.system.support; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.common.common.controller.SupportBaseController; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.constant.SwaggerTagConst; +import net.lab1024.sa.common.module.support.reload.ReloadService; +import net.lab1024.sa.common.module.support.reload.domain.ReloadForm; +import net.lab1024.sa.common.module.support.reload.domain.ReloadItemVO; +import net.lab1024.sa.common.module.support.reload.domain.ReloadResultVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * reload (内存热加载、钩子等) + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2015-03-02 19:11:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@RestController +@Api(tags = {SwaggerTagConst.Support.RELOAD}) +public class AdminReloadController extends SupportBaseController { + + @Autowired + private ReloadService reloadService; + + @ApiOperation(value = "查询reload列表 @author 开云") + @GetMapping("/reload/query") + public ResponseDTO> query() { + return reloadService.query(); + } + + @ApiOperation(value = "获取reload result @author 开云") + @PreAuthorize("@saAuth.checkPermission('support:reload:result')") + @GetMapping("/reload/result/{tag}") + public ResponseDTO> queryReloadResult(@PathVariable("tag") String tag) { + return reloadService.queryReloadItemResult(tag); + } + + @ApiOperation(value = "通过tag更新标识 @author 开云") + @PreAuthorize("@saAuth.checkPermission('support:reload:execute')") + @PostMapping("/reload/update") + public ResponseDTO updateByTag(@RequestBody @Valid ReloadForm reloadForm) { + return reloadService.updateByTag(reloadForm); + } +} diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminSerialNumberController.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminSerialNumberController.java new file mode 100644 index 00000000..329a2aaf --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminSerialNumberController.java @@ -0,0 +1,74 @@ +package net.lab1024.sa.admin.module.system.support; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.common.common.controller.SupportBaseController; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartEnumUtil; +import net.lab1024.sa.common.constant.SwaggerTagConst; +import net.lab1024.sa.common.module.support.serialnumber.constant.SerialNumberIdEnum; +import net.lab1024.sa.common.module.support.serialnumber.dao.SerialNumberDao; +import net.lab1024.sa.common.module.support.serialnumber.domain.SerialNumberEntity; +import net.lab1024.sa.common.module.support.serialnumber.domain.SerialNumberGenerateForm; +import net.lab1024.sa.common.module.support.serialnumber.domain.SerialNumberRecordEntity; +import net.lab1024.sa.common.module.support.serialnumber.domain.SerialNumberRecordQueryForm; +import net.lab1024.sa.common.module.support.serialnumber.service.SerialNumberRecordService; +import net.lab1024.sa.common.module.support.serialnumber.service.SerialNumberService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.Valid; +import java.util.List; + +/** + * 单据序列号 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-03-25 21:46:07 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Api(tags = SwaggerTagConst.Support.SERIAL_NUMBER) +@RestController +public class AdminSerialNumberController extends SupportBaseController { + + @Autowired + private SerialNumberDao serialNumberDao; + + @Autowired + private SerialNumberService serialNumberService; + + @Autowired + private SerialNumberRecordService serialNumberRecordService; + + @ApiOperation("生成单号 @author 卓大") + @PreAuthorize("@saAuth.checkPermission('support:serial:number:generate')") + @PostMapping("/serialNumber/generate") + public ResponseDTO> generate(@RequestBody @Valid SerialNumberGenerateForm generateForm) { + SerialNumberIdEnum serialNumberIdEnum = SmartEnumUtil.getEnumByValue(generateForm.getSerialNumberId(), SerialNumberIdEnum.class); + if (null == serialNumberIdEnum) { + return ResponseDTO.userErrorParam("SerialNumberId,不存在" + generateForm.getSerialNumberId()); + } + return ResponseDTO.ok(serialNumberService.generate(serialNumberIdEnum, generateForm.getCount())); + } + + @ApiOperation("获取所有单号定义 @author 卓大") + @GetMapping("/serialNumber/all") + public ResponseDTO> getAll() { + return ResponseDTO.ok(serialNumberDao.selectList(null)); + } + + @ApiOperation("获取生成记录 @author 卓大") + @PreAuthorize("@saAuth.checkPermission('support:serial:number:record')") + @PostMapping("/serialNumber/queryRecord") + public ResponseDTO> queryRecord(@RequestBody @Valid SerialNumberRecordQueryForm queryForm) { + return ResponseDTO.ok(serialNumberRecordService.query(queryForm)); + } + +} diff --git a/smart-admin-api/sa-admin/src/main/resources/dev/application.yaml b/smart-admin-api/sa-admin/src/main/resources/dev/application.yaml new file mode 100644 index 00000000..148358fa --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/resources/dev/application.yaml @@ -0,0 +1,15 @@ +server: + servlet: + context-path: '/' + port: 1024 +spring: + profiles: + active: '@profiles.active@' +# 项目配置 +project: + name: sa-admin + module: net.lab1024.sa.admin.module +# swagger文档 +swagger: + host: localhost:${server.port} + tag-class: net.lab1024.sa.admin.constant.AdminSwaggerTagConst \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/dev/log4j2.xml b/smart-admin-api/sa-admin/src/main/resources/dev/log4j2.xml similarity index 98% rename from smart-admin-service/smart-admin-api/src/main/resources/dev/log4j2.xml rename to smart-admin-api/sa-admin/src/main/resources/dev/log4j2.xml index 86c514a3..a110f0a4 100644 --- a/smart-admin-service/smart-admin-api/src/main/resources/dev/log4j2.xml +++ b/smart-admin-api/sa-admin/src/main/resources/dev/log4j2.xml @@ -5,7 +5,7 @@ --> - /home/logs/smart-admin/dev/logs + $${env:localPath:-/home}/logs/smart_admin_v2/dev @@ -85,6 +85,7 @@ + @@ -94,4 +95,5 @@ + \ No newline at end of file diff --git a/smart-admin-api/sa-admin/src/main/resources/dev/spy.properties b/smart-admin-api/sa-admin/src/main/resources/dev/spy.properties new file mode 100644 index 00000000..9877f620 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/resources/dev/spy.properties @@ -0,0 +1,18 @@ +#相关的包 +modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory +# 日志格式 +logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger +#日志输出到控制台 +appender=com.p6spy.engine.spy.appender.StdoutLogger +# 设置 p6spy driver 代理 +deregisterdrivers=true +# 取消JDBC URL前缀 +useprefix=true +# 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset. +excludecategories=info,debug,result,commit,resultset +# 日期格式 +dateformat=yyyy-MM-dd HH:mm:ss +# 开启慢sql +outagedetection=true +# 慢SQL记录标准(单位秒) +outagedetectioninterval=2 \ No newline at end of file diff --git a/smart-admin-api/sa-admin/src/main/resources/mapper/business/category/CategoryMapper.xml b/smart-admin-api/sa-admin/src/main/resources/mapper/business/category/CategoryMapper.xml new file mode 100644 index 00000000..908509c5 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/resources/mapper/business/category/CategoryMapper.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/smart-admin-api/sa-admin/src/main/resources/mapper/business/goods/GoodsMapper.xml b/smart-admin-api/sa-admin/src/main/resources/mapper/business/goods/GoodsMapper.xml new file mode 100644 index 00000000..7fcadccb --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/resources/mapper/business/goods/GoodsMapper.xml @@ -0,0 +1,41 @@ + + + + + update t_goods + set deleted_flag = #{deletedFlag} + WHERE goods_id IN + + #{item} + + + + + + + \ No newline at end of file diff --git a/smart-admin-api/sa-admin/src/main/resources/mapper/business/notice/NoticeMapper.xml b/smart-admin-api/sa-admin/src/main/resources/mapper/business/notice/NoticeMapper.xml new file mode 100644 index 00000000..5965a484 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/resources/mapper/business/notice/NoticeMapper.xml @@ -0,0 +1,69 @@ + + + + + UPDATE t_notice + SET watch_amount = watch_amount + 1 + WHERE notice_id = #{noticeId} + + + UPDATE t_notice + SET deleted_flag = #{deletedFlag} + WHERE notice_id IN + + #{item} + + + + UPDATE t_notice + SET notice_type = #{noticeType}, + notice_belong_type = #{noticeBelongType}, + notice_title = #{noticeTitle}, + notice_content = #{noticeContent}, + link_address = #{linkAddress}, + cover_file_key = #{coverFileKey}, + accessory_file_keys = #{accessoryFileKeys}, + top_flag = #{topFlag}, + publish_time = #{publishTime}, + disabled_flag = #{disabledFlag} + WHERE notice_id = #{noticeId} + + + + \ No newline at end of file diff --git a/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/bank/BankMapper.xml b/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/bank/BankMapper.xml new file mode 100644 index 00000000..79b505db --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/bank/BankMapper.xml @@ -0,0 +1,58 @@ + + + + + UPDATE t_oa_bank + SET deleted_flag = #{deletedFlag} + WHERE bank_id = #{bankId} + + + + + \ No newline at end of file diff --git a/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/enterprise/EnterpriseEmployeeMapper.xml b/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/enterprise/EnterpriseEmployeeMapper.xml new file mode 100644 index 00000000..62acf08f --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/enterprise/EnterpriseEmployeeMapper.xml @@ -0,0 +1,94 @@ + + + + + + delete from t_oa_enterprise_employee where enterprise_id = #{enterpriseId} and employee_id in + + #{item} + + + + + delete from t_oa_enterprise_employee where employee_id = #{employeeId} + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/enterprise/EnterpriseMapper.xml b/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/enterprise/EnterpriseMapper.xml new file mode 100644 index 00000000..11ed88ac --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/enterprise/EnterpriseMapper.xml @@ -0,0 +1,59 @@ + + + + + UPDATE t_oa_enterprise + SET deleted_flag = #{deletedFlag} + WHERE enterprise_id = #{enterpriseId} + + + + + + \ No newline at end of file diff --git a/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/invoice/InvoiceMapper.xml b/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/invoice/InvoiceMapper.xml new file mode 100644 index 00000000..0001d92f --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/invoice/InvoiceMapper.xml @@ -0,0 +1,56 @@ + + + + + UPDATE t_oa_invoice + SET deleted_flag = #{deletedFlag} + WHERE invoice_id = #{invoiceId} + + + + + \ No newline at end of file diff --git a/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/notice/NoticeDao.xml b/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/notice/NoticeDao.xml new file mode 100644 index 00000000..13ec9914 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/notice/NoticeDao.xml @@ -0,0 +1,244 @@ + + + + + + + + insert into t_notice_visible_range + (notice_id, data_type, data_id) + values + + ( #{noticeId} , #{item.dataType}, #{item.dataId} ) + + + + delete + from t_notice_visible_range + where notice_id = #{noticeId} + + + + + + + update t_notice + set deleted_flag = true + where notice_id = #{noticeId} + + + + + + + + + + + + + + insert into t_notice_view_record (notice_id, employee_id, first_ip, first_user_agent, page_view_count) + values (#{noticeId}, #{employeeId}, #{ip}, #{userAgent}, #{pageViewCount}) + + + update t_notice_view_record + set page_view_count = page_view_count + 1, + last_ip = #{ip}, + last_user_agent = #{userAgent} + where notice_id = #{noticeId} + and employee_id = #{employeeId} + + + \ No newline at end of file diff --git a/smart-admin-api/sa-admin/src/main/resources/mapper/system/department/DepartmentMapper.xml b/smart-admin-api/sa-admin/src/main/resources/mapper/system/department/DepartmentMapper.xml new file mode 100644 index 00000000..326d94f5 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/resources/mapper/system/department/DepartmentMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/smart-admin-api/sa-admin/src/main/resources/mapper/system/employee/EmployeeMapper.xml b/smart-admin-api/sa-admin/src/main/resources/mapper/system/employee/EmployeeMapper.xml new file mode 100644 index 00000000..24f5eebb --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/resources/mapper/system/employee/EmployeeMapper.xml @@ -0,0 +1,200 @@ + + + + + + + + + UPDATE t_employee + SET disabled_flag = #{disabledFlag} + WHERE employee_id = #{employeeId} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + UPDATE t_employee + SET login_pwd = #{password} + WHERE employee_id = #{employeeId} + + + + \ No newline at end of file diff --git a/smart-admin-api/sa-admin/src/main/resources/mapper/system/menu/MenuMapper.xml b/smart-admin-api/sa-admin/src/main/resources/mapper/system/menu/MenuMapper.xml new file mode 100644 index 00000000..68fbede0 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/resources/mapper/system/menu/MenuMapper.xml @@ -0,0 +1,78 @@ + + + + + + + + update t_menu + set deleted_flag = #{deletedFlag}, + update_user_id = #{updateUserId} + where menu_id = #{item} + + + + + + + + + + + + + \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/datascope/DataScopeRoleMapper.xml b/smart-admin-api/sa-admin/src/main/resources/mapper/system/role/RoleDataScopeMapper.xml similarity index 54% rename from smart-admin-service/smart-admin-api/src/main/resources/mapper/system/datascope/DataScopeRoleMapper.xml rename to smart-admin-api/sa-admin/src/main/resources/mapper/system/role/RoleDataScopeMapper.xml index 88bd6a9d..b9f5bcfc 100644 --- a/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/datascope/DataScopeRoleMapper.xml +++ b/smart-admin-api/sa-admin/src/main/resources/mapper/system/role/RoleDataScopeMapper.xml @@ -1,8 +1,8 @@ - + - + + SELECT er.role_id + FROM t_role_employee er + WHERE er.employee_id = #{employeeId} + + + + + + + + + + + + + + + + + DELETE + FROM t_role_employee + WHERE employee_id = #{employeeId} + + + + + DELETE + FROM t_role_employee + WHERE role_id = #{roleId} + + + + DELETE + FROM t_role_employee + WHERE role_id = #{roleId} + and employee_id = #{employeeId} + + + + + DELETE FROM t_role_employee + WHERE role_id = #{roleId} and employee_id in + + #{item} + + + \ No newline at end of file diff --git a/smart-admin-api/sa-admin/src/main/resources/mapper/system/role/RoleMapper.xml b/smart-admin-api/sa-admin/src/main/resources/mapper/system/role/RoleMapper.xml new file mode 100644 index 00000000..48d0e447 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/resources/mapper/system/role/RoleMapper.xml @@ -0,0 +1,15 @@ + + + + + + + + + + \ No newline at end of file diff --git a/smart-admin-api/sa-admin/src/main/resources/mapper/system/role/RoleMenuMapper.xml b/smart-admin-api/sa-admin/src/main/resources/mapper/system/role/RoleMenuMapper.xml new file mode 100644 index 00000000..12b84f0d --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/resources/mapper/system/role/RoleMenuMapper.xml @@ -0,0 +1,42 @@ + + + + + delete + from t_role_menu + where role_id = #{roleId} + + + + + + \ No newline at end of file diff --git a/smart-admin-api/sa-admin/src/main/resources/pre/application.yaml b/smart-admin-api/sa-admin/src/main/resources/pre/application.yaml new file mode 100644 index 00000000..f541f3f2 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/resources/pre/application.yaml @@ -0,0 +1,18 @@ +server: + servlet: + context-path: '/' + port: 1024 +spring: + profiles: + active: '@profiles.active@' + datasource: + url: jdbc:p6spy:mysql://127.0.0.1:3306/smart_admin_v2_pre?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai + username: root + password: Lab1024 + driver-class-name: com.p6spy.engine.spy.P6SpyDriver +project: + name: sa-admin + module: net.lab1024.sa.admin.module +swagger: + host: localhost:${server.port} + tag-class: net.lab1024.sa.admin.constant.AdminSwaggerTagConst \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/sit/log4j2.xml b/smart-admin-api/sa-admin/src/main/resources/pre/log4j2.xml similarity index 98% rename from smart-admin-service/smart-admin-api/src/main/resources/sit/log4j2.xml rename to smart-admin-api/sa-admin/src/main/resources/pre/log4j2.xml index ac533c99..70c3f924 100644 --- a/smart-admin-service/smart-admin-api/src/main/resources/sit/log4j2.xml +++ b/smart-admin-api/sa-admin/src/main/resources/pre/log4j2.xml @@ -5,7 +5,7 @@ --> - /home/logs/smart-admin/dev/logs + $${env:localPath:-/home}/logs/smart_admin_v2/pre @@ -85,6 +85,7 @@ + @@ -94,4 +95,5 @@ + \ No newline at end of file diff --git a/smart-admin-api/sa-admin/src/main/resources/pre/spy.properties b/smart-admin-api/sa-admin/src/main/resources/pre/spy.properties new file mode 100644 index 00000000..9877f620 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/resources/pre/spy.properties @@ -0,0 +1,18 @@ +#相关的包 +modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory +# 日志格式 +logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger +#日志输出到控制台 +appender=com.p6spy.engine.spy.appender.StdoutLogger +# 设置 p6spy driver 代理 +deregisterdrivers=true +# 取消JDBC URL前缀 +useprefix=true +# 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset. +excludecategories=info,debug,result,commit,resultset +# 日期格式 +dateformat=yyyy-MM-dd HH:mm:ss +# 开启慢sql +outagedetection=true +# 慢SQL记录标准(单位秒) +outagedetectioninterval=2 \ No newline at end of file diff --git a/smart-admin-api/sa-admin/src/main/resources/prod/application.yaml b/smart-admin-api/sa-admin/src/main/resources/prod/application.yaml new file mode 100644 index 00000000..678132ec --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/resources/prod/application.yaml @@ -0,0 +1,18 @@ +server: + servlet: + context-path: '/' + port: 1024 +spring: + profiles: + active: '@profiles.active@' + datasource: + url: jdbc:p6spy:mysql://127.0.0.1:3306/smart_admin_v2_prod?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai + username: root + password: Lab1024 + driver-class-name: com.p6spy.engine.spy.P6SpyDriver +project: + name: sa-admin + module: net.lab1024.sa.admin.module +swagger: + host: localhost:${server.port} + tag-class: net.lab1024.sa.admin.constant.AdminSwaggerTagConst \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/pre/log4j2.xml b/smart-admin-api/sa-admin/src/main/resources/prod/log4j2.xml similarity index 97% rename from smart-admin-service/smart-admin-api/src/main/resources/pre/log4j2.xml rename to smart-admin-api/sa-admin/src/main/resources/prod/log4j2.xml index f1942baf..dafcb3d0 100644 --- a/smart-admin-service/smart-admin-api/src/main/resources/pre/log4j2.xml +++ b/smart-admin-api/sa-admin/src/main/resources/prod/log4j2.xml @@ -5,7 +5,7 @@ --> - /home/logs/smart-admin/dev/logs + $${env:localPath:-/home}/logs/smart_admin_v2/prod @@ -85,6 +85,7 @@ + @@ -94,4 +95,5 @@ + \ No newline at end of file diff --git a/smart-admin-api/sa-admin/src/main/resources/prod/spy.properties b/smart-admin-api/sa-admin/src/main/resources/prod/spy.properties new file mode 100644 index 00000000..9877f620 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/resources/prod/spy.properties @@ -0,0 +1,18 @@ +#相关的包 +modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory +# 日志格式 +logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger +#日志输出到控制台 +appender=com.p6spy.engine.spy.appender.StdoutLogger +# 设置 p6spy driver 代理 +deregisterdrivers=true +# 取消JDBC URL前缀 +useprefix=true +# 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset. +excludecategories=info,debug,result,commit,resultset +# 日期格式 +dateformat=yyyy-MM-dd HH:mm:ss +# 开启慢sql +outagedetection=true +# 慢SQL记录标准(单位秒) +outagedetectioninterval=2 \ No newline at end of file diff --git a/smart-admin-api/sa-admin/src/main/resources/test/application.yaml b/smart-admin-api/sa-admin/src/main/resources/test/application.yaml new file mode 100644 index 00000000..d541ff90 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/resources/test/application.yaml @@ -0,0 +1,18 @@ +server: + servlet: + context-path: '/' + port: 1024 +spring: + profiles: + active: '@profiles.active@' + datasource: + url: jdbc:p6spy:mysql://127.0.0.1:3306/smart_admin_v2_test?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai + username: root + password: Lab1024 + driver-class-name: com.p6spy.engine.spy.P6SpyDriver +project: + name: sa-admin + module: net.lab1024.sa.admin.module +swagger: + host: localhost:${server.port} + tag-class: net.lab1024.sa.admin.constant.AdminSwaggerTagConst \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/prod/log4j2.xml b/smart-admin-api/sa-admin/src/main/resources/test/log4j2.xml similarity index 97% rename from smart-admin-service/smart-admin-api/src/main/resources/prod/log4j2.xml rename to smart-admin-api/sa-admin/src/main/resources/test/log4j2.xml index 4991f76e..035d17e0 100644 --- a/smart-admin-service/smart-admin-api/src/main/resources/prod/log4j2.xml +++ b/smart-admin-api/sa-admin/src/main/resources/test/log4j2.xml @@ -5,7 +5,7 @@ --> - /home/logs/smart-admin + $${env:localPath:-/home}/logs/smart_admin_v2/test @@ -85,8 +85,9 @@ + - + @@ -94,4 +95,5 @@ + \ No newline at end of file diff --git a/smart-admin-api/sa-admin/src/main/resources/test/spy.properties b/smart-admin-api/sa-admin/src/main/resources/test/spy.properties new file mode 100644 index 00000000..9877f620 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/resources/test/spy.properties @@ -0,0 +1,18 @@ +#相关的包 +modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory +# 日志格式 +logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger +#日志输出到控制台 +appender=com.p6spy.engine.spy.appender.StdoutLogger +# 设置 p6spy driver 代理 +deregisterdrivers=true +# 取消JDBC URL前缀 +useprefix=true +# 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset. +excludecategories=info,debug,result,commit,resultset +# 日期格式 +dateformat=yyyy-MM-dd HH:mm:ss +# 开启慢sql +outagedetection=true +# 慢SQL记录标准(单位秒) +outagedetectioninterval=2 \ No newline at end of file diff --git a/smart-admin-api/sa-admin/src/test/java/net/lab1024/sa/admin/SmartAdminApplicationTest.java b/smart-admin-api/sa-admin/src/test/java/net/lab1024/sa/admin/SmartAdminApplicationTest.java new file mode 100644 index 00000000..864741d1 --- /dev/null +++ b/smart-admin-api/sa-admin/src/test/java/net/lab1024/sa/admin/SmartAdminApplicationTest.java @@ -0,0 +1,25 @@ +package net.lab1024.sa.admin; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +@ExtendWith(SpringExtension.class) +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) +public class SmartAdminApplicationTest { + + @BeforeEach + public void before() { + System.out.println("----------------------- 测试开始 -----------------------"); + + } + + @AfterEach + public void after() { + System.out.println("----------------------- 测试结束 -----------------------"); + } + +} + diff --git a/smart-admin-service/smart-admin-api/pom.xml b/smart-admin-api/sa-common/pom.xml similarity index 52% rename from smart-admin-service/smart-admin-api/pom.xml rename to smart-admin-api/sa-common/pom.xml index f7ec8db4..3db2f57d 100644 --- a/smart-admin-service/smart-admin-api/pom.xml +++ b/smart-admin-api/sa-common/pom.xml @@ -1,199 +1,83 @@ + 4.0.0 net.1024lab - smart-admin-service-parent + sa-parent 1.0.0 - ../pom.xml - 4.0.0 - smart-admin-api - jar + sa-common + 1.0.0 + - smart-admin-api - - - UTF-8 - UTF-8 - 1.8 - + sa-common + sa-common project - - - org.springframework.boot - spring-boot-starter-log4j2 - org.springframework.boot spring-boot-starter-aop - spring-boot-starter-logging org.springframework.boot + spring-boot-starter-logging + org.springframework.boot - spring-boot-starter-quartz + spring-boot-starter-data-redis + + + org.springframework.boot + spring-boot-starter + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-logging + + + + + + + org.springframework.boot + spring-boot-starter-security + + + + org.springframework.boot + spring-boot-starter-log4j2 + + + + org.apache.logging.log4j + log4j-spring-boot + + + + org.apache.logging.log4j + log4j-web + + org.springframework.boot spring-boot-starter-validation - - org.springframework.boot - spring-boot-starter-data-redis - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-websocket - - - org.springframework.boot - spring-boot-starter-mail - + org.springframework.boot spring-boot-starter-test - test - - - org.springframework.boot - spring-boot-starter-actuator - - - logback-classic - ch.qos.logback - - - spring-boot-starter-logging - org.springframework.boot - - - - - - - com.baomidou - mybatis-plus-boot-starter - - - - - velocity - org.apache.velocity - - - commons-collections - commons-collections - - - - - org.apache.velocity - velocity-engine-core - - - - - - com.alibaba - fastjson - - - - - com.alibaba - druid - - - - - p6spy - p6spy - - - - - io.springfox - springfox-swagger2 - - - io.springfox - springfox-swagger-ui - - - - - - com.github.xiaoymin - knife4j-spring-boot-starter - ${knife4j.version} - - - - - - com.google.guava - guava - - - - - com.aliyun.oss - aliyun-sdk-oss - - - commons-logging - commons-logging - - - - - com.qiniu - qiniu-java-sdk - - - commons-fileupload - commons-fileupload - - - - - - io.jsonwebtoken - jjwt - - - - - cn.afterturn - easypoi-spring-boot-starter - - - - - commons-beanutils - commons-beanutils - - - commons-logging - commons-logging - - - - - - org.apache.commons - commons-pool2 @@ -202,13 +86,44 @@ - com.github.penggle - kaptcha + com.github.ben-manes.caffeine + caffeine + + + error_prone_annotations + com.google.errorprone + + - com.googlecode.concurrentlinkedhashmap - concurrentlinkedhashmap-lru + org.projectlombok + lombok + + + + org.apache.commons + commons-pool2 + + + + org.springframework + spring-mock + + + + com.baomidou + mybatis-plus-boot-starter + + + + p6spy + p6spy + + + + io.springfox + springfox-swagger2 @@ -217,60 +132,105 @@ - eu.bitwalker - UserAgentUtils + io.springfox + springfox-swagger-ui - org.projectlombok - lombok - provided + com.alibaba + fastjson + + + + com.alibaba + druid + + + + com.google.guava + guava + + + + com.github.penggle + kaptcha + + + + + cn.afterturn + easypoi-spring-boot-starter + + + + cn.afterturn + easypoi-web + + + + + com.googlecode.concurrentlinkedhashmap + concurrentlinkedhashmap-lru + + + + org.reflections + reflections + + + + com.amazonaws + aws-java-sdk-s3 + + + + + xerces + xercesImpl + + + org.apache.poi + poi-scratchpad + + + + org.apache.commons + commons-lang3 + + + org.apache.commons + commons-collections4 + + + + commons-io + commons-io + + + + cn.hutool + hutool-all + + + + io.jsonwebtoken + jjwt + + + + com.auth0 + jwks-rsa + + + org.apache.velocity + velocity-engine-core + + + org.apache.velocity.tools + velocity-tools-generic - - - - src/main/java - - **/*.* - - - - false - src/main/resources - - dev/* - sit/* - pre/* - prod/* - - - - src/main/resources/${profiles.active} - true - - *.properties - *.xml - - - - - - org.springframework.boot - spring-boot-maven-plugin - - true - - - - org.apache.maven.plugins - maven-surefire-plugin - - true - - - - + \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/NoNeedLogin.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/annoation/NoNeedLogin.java similarity index 52% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/NoNeedLogin.java rename to smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/annoation/NoNeedLogin.java index 3957937a..e8100629 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/NoNeedLogin.java +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/annoation/NoNeedLogin.java @@ -1,4 +1,4 @@ -package net.lab1024.smartadmin.common.anno; +package net.lab1024.sa.common.common.annoation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; @@ -6,15 +6,13 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** + * 不需要登录注解 * - * [ 不需要登陆 ] - * - * @version 1.0 - * @since JDK1.8 - * @author yandanyang - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date + * @Author 1024创新实验室: 罗伊 + * @Date 2022-05-30 21:22:12 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/annoation/SaAuth.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/annoation/SaAuth.java new file mode 100644 index 00000000..4d44a2f7 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/annoation/SaAuth.java @@ -0,0 +1,22 @@ +package net.lab1024.sa.common.common.annoation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 校验权限注解 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022-05-30 21:22:12 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +public @interface SaAuth { + + String saAuth = "saAuth"; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/ErrorCode.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/ErrorCode.java new file mode 100644 index 00000000..f67cc95c --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/ErrorCode.java @@ -0,0 +1,52 @@ +package net.lab1024.sa.common.common.code; + +/** + * 错误码
+ * 一共分为三种: 1)系统错误、2)用户级别错误、3)未预期到的错误 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021-09-02 20:21:10 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public interface ErrorCode { + + /** + * 系统等级 + */ + String LEVEL_SYSTEM = "system"; + + /** + * 用户等级 + */ + String LEVEL_USER = "user"; + + /** + * 未预期到的等级 + */ + String LEVEL_UNEXPECTED = "unexpected"; + + /** + * 错误码 + * + * @return + */ + int getCode(); + + /** + * 错误消息 + * + * @return + */ + String getMsg(); + + /** + * 错误等级 + * + * @return + */ + String getLevel(); + + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/ErrorCodeRangeContainer.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/ErrorCodeRangeContainer.java new file mode 100644 index 00000000..db8cce84 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/ErrorCodeRangeContainer.java @@ -0,0 +1,119 @@ +package net.lab1024.sa.common.common.code; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.tuple.ImmutablePair; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * 错误码 注册容器 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021/09/27 22:09 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +class ErrorCodeRangeContainer { + + /** + * 所有的错误码均大于10000 + */ + static final int MIN_START_CODE = 10000; + + static final Map, ImmutablePair> CODE_RANGE_MAP = new ConcurrentHashMap<>(); + + /** + * 用于统计数量 + */ + static int errorCounter = 0; + + /** + * 注册状态码 + * 校验是否重复 是否越界 + * + * @param clazz + * @param start + * @param end + */ + static void register(Class clazz, int start, int end) { + String simpleName = clazz.getSimpleName(); + if (!clazz.isEnum()) { + throw new ExceptionInInitializerError(String.format("<> error: %s not Enum class !", simpleName)); + } + if (start > end) { + throw new ExceptionInInitializerError(String.format("<> error: %s start must be less than the end !", simpleName)); + } + + if (start <= MIN_START_CODE) { + throw new ExceptionInInitializerError(String.format("<> error: %s start must be more than %s !", simpleName, MIN_START_CODE)); + } + + // 校验是否重复注册 + boolean containsKey = CODE_RANGE_MAP.containsKey(clazz); + if (containsKey) { + throw new ExceptionInInitializerError(String.format("<> error: Enum %s already exist !", simpleName)); + } + + // 校验 开始结束值 是否越界 + CODE_RANGE_MAP.forEach((k, v) -> { + if (isExistOtherRange(start, end, v)) { + throw new IllegalArgumentException(String.format("<> error: %s[%d,%d] has intersection with class:%s[%d,%d]", simpleName, start, end, + k.getSimpleName(), v.getLeft(), v.getRight())); + } + }); + + // 循环校验code并存储 + List codeList = Stream.of(clazz.getEnumConstants()).map(codeEnum -> { + Integer code = codeEnum.getCode(); + if (code < start || code > end) { + throw new IllegalArgumentException(String.format("<> error: %s[%d,%d] code %d out of range", simpleName, start, end, code)); + } + return code; + }).collect(Collectors.toList()); + + // 校验code是否重复 + List distinctCodeList = codeList.stream().distinct().collect(Collectors.toList()); + Collection subtract = CollectionUtils.subtract(codeList, distinctCodeList); + if (CollectionUtils.isNotEmpty(subtract)) { + throw new IllegalArgumentException(String.format("<> error: %s code %s is repeat!", simpleName, subtract)); + } + + CODE_RANGE_MAP.put(clazz, ImmutablePair.of(start, end)); + // 统计 + errorCounter = errorCounter + distinctCodeList.size(); + } + + /** + * 是否存在于其他范围 + * + * @param start + * @param end + * @param range + * @return + */ + private static boolean isExistOtherRange(int start, int end, ImmutablePair range) { + if (start >= range.getLeft() && start <= range.getRight()) { + return true; + } + + if (end >= range.getLeft() && end <= range.getRight()) { + return true; + } + + return false; + } + + /** + * 进行初始化 + */ + static int initialize() { + return errorCounter; + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/ErrorCodeRegister.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/ErrorCodeRegister.java new file mode 100644 index 00000000..43fe18a1 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/ErrorCodeRegister.java @@ -0,0 +1,41 @@ +package net.lab1024.sa.common.common.code; + +import static net.lab1024.sa.common.common.code.ErrorCodeRangeContainer.register; + +/** + * 注册code状态码
+ * ps:为什么要在此处不那么优雅的手动注册? + * 主要是为了能统一、清晰、浏览当前定义的所有状态码 + * 方便后续维护 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021/09/27 23:09 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public class ErrorCodeRegister { + + static { + + // 系统 错误码 + register(SystemErrorCode.class, 10001, 20000); + + // 意外 错误码 + register(UnexpectedErrorCode.class, 20001, 30000); + + // 用户 通用错误码 + register(UserErrorCode.class, 30001, 40000); + + } + + + public static int initialize() { + return ErrorCodeRangeContainer.initialize(); + } + + public static void main(String[] args) { + ErrorCodeRegister.initialize(); + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/SystemErrorCode.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/SystemErrorCode.java new file mode 100644 index 00000000..f3fc67ec --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/SystemErrorCode.java @@ -0,0 +1,36 @@ +package net.lab1024.sa.common.common.code; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 系统错误状态码(此类返回码应该高度重视) + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021/10/24 20:09 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Getter +@AllArgsConstructor +public enum SystemErrorCode implements ErrorCode { + + SYSTEM_ERROR(10001, "系统似乎出现了点小问题"), + + ; + + private final int code; + + private final String msg; + + private final String level; + + SystemErrorCode(int code, String msg) { + this.code = code; + this.msg = msg; + this.level = LEVEL_SYSTEM; + } + +} + diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/UnexpectedErrorCode.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/UnexpectedErrorCode.java new file mode 100644 index 00000000..2fc735d3 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/UnexpectedErrorCode.java @@ -0,0 +1,36 @@ +package net.lab1024.sa.common.common.code; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 未预期的错误码(即发生了不可能发生的事情,此类返回码应该高度重视) + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021/09/27 22:10:46 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Getter +@AllArgsConstructor +public enum UnexpectedErrorCode implements ErrorCode { + + BUSINESS_HANDING(20001, "呃~ 业务繁忙,请稍后重试"), + PAY_ORDER_ID_ERROR(20002, "付款单id发生了异常,请联系技术人员排查"), + + ; + + private final int code; + + private final String msg; + + private final String level; + + UnexpectedErrorCode(int code, String msg) { + this.code = code; + this.msg = msg; + this.level = LEVEL_UNEXPECTED; + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/UserErrorCode.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/UserErrorCode.java new file mode 100644 index 00000000..6178661a --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/UserErrorCode.java @@ -0,0 +1,48 @@ +package net.lab1024.sa.common.common.code; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 用户级别的错误码(用户引起的错误返回码,可以不用关注) + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021/09/21 22:12:27 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Getter +@AllArgsConstructor +public enum UserErrorCode implements ErrorCode { + + PARAM_ERROR(30001, "参数错误"), + + DATA_NOT_EXIST(30002, "左翻右翻,数据竟然找不到了~"), + + ALREADY_EXIST(30003, "数据已存在了呀~"), + + REPEAT_SUBMIT(30004, "亲~您操作的太快了,请稍等下再操作~"), + + NO_PERMISSION(30005, "对不起,您无法访问此资源哦~"), + + DEVELOPING(30006, "系統正在紧急开发中,敬请期待~"), + + LOGIN_STATE_INVALID(30007, "您还未登录或登录失效,请重新登录!"), + + USER_STATUS_ERROR(30008, "用户状态异常"), + + FORM_REPEAT_SUBMIT(30009, "请勿重复提交"); + + private final int code; + + private final String msg; + + private final String level; + + UserErrorCode(int code, String msg) { + this.code = code; + this.msg = msg; + this.level = LEVEL_USER; + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/constant/RequestHeaderConst.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/constant/RequestHeaderConst.java new file mode 100644 index 00000000..674e4dd4 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/constant/RequestHeaderConst.java @@ -0,0 +1,18 @@ +package net.lab1024.sa.common.common.constant; + +/** + * 请求消息头常量 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022-05-15 20:46:27 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public class RequestHeaderConst { + + public static final String TOKEN = "x-access-token"; + + public static final String USER_AGENT = "user-agent"; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/constant/StringConst.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/constant/StringConst.java new file mode 100644 index 00000000..2a40152d --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/constant/StringConst.java @@ -0,0 +1,44 @@ +package net.lab1024.sa.common.common.constant; + +/** + * 字符串常量 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021-10-14 23:16:47 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public class StringConst { + + /** + * 全局通用分隔符 + */ + public static final String SEPARATOR = ","; + + /** + * 全局通用分隔符 下划线 + */ + public static final String UNDERLINE = "_"; + + /** + * 全局通用 横杠 + */ + public static final String HORIZONTAL = "-"; + + /** + * 全局通用分隔符 + */ + public static final Character SEPARATOR_CHAR = ','; + + /** + * 全局通用分隔符 斜杠 + */ + public static final String SEPARATOR_SLASH = "/"; + + /** + * 空字符串 + */ + public static final String EMPTY = ""; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/controller/SupportBaseController.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/controller/SupportBaseController.java new file mode 100644 index 00000000..5c135dec --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/controller/SupportBaseController.java @@ -0,0 +1,16 @@ +package net.lab1024.sa.common.common.controller; + +import net.lab1024.sa.common.constant.UrlPrefixConst; +import org.springframework.web.bind.annotation.RequestMapping; +/** + * 支撑类业务路由基类 + * + * @Author 1024创新实验室: 胡克 + * @Date 2022-04-24 20:43:55 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@RequestMapping(UrlPrefixConst.SUPPORT) +public class SupportBaseController { +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/DataScopePlugin.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/DataScopePlugin.java new file mode 100644 index 00000000..8963f216 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/DataScopePlugin.java @@ -0,0 +1,15 @@ +package net.lab1024.sa.common.common.domain; + +import org.apache.ibatis.plugin.Interceptor; + +/** + * 数据范围 插件 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2021-11-15 17:20:04 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public abstract class DataScopePlugin implements Interceptor { +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/PageParam.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/PageParam.java new file mode 100644 index 00000000..8ffb7d75 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/PageParam.java @@ -0,0 +1,58 @@ +package net.lab1024.sa.common.common.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.Valid; +import javax.validation.constraints.Max; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.util.List; + +/** + * 分页基础参数 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2020/04/28 16:19 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class PageParam { + + @ApiModelProperty(value = "页码(不能为空)", required = true, example = "1") + @NotNull(message = "分页参数不能为空") + private Integer pageNum; + + @ApiModelProperty(value = "每页数量(不能为空)", required = true, example = "10") + @NotNull(message = "每页数量不能为空") + @Max(value = 200, message = "每页最大为200") + private Integer pageSize; + + @ApiModelProperty("是否查询总条数") + protected Boolean searchCount; + + @ApiModelProperty("排序字段集合") + @Size(max = 10, message = "排序字段最多10") + @Valid + private List sortItemList; + + /** + * 排序DTO类 + */ + @Data + public static class SortItem { + + @ApiModelProperty("true正序|false倒序") + @NotNull(message = "排序规则不能为空") + private Boolean isAsc; + + @ApiModelProperty(value = "排序字段") + @NotBlank(message = "排序字段不能为空") + @Length(max = 30, message = "排序字段最多30") + private String column; + } +} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/PageResultDTO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/PageResult.java similarity index 64% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/PageResultDTO.java rename to smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/PageResult.java index 23995832..0f75f991 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/PageResultDTO.java +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/PageResult.java @@ -1,4 +1,4 @@ -package net.lab1024.smartadmin.common.domain; +package net.lab1024.sa.common.common.domain; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -6,13 +6,16 @@ import lombok.Data; import java.util.List; /** - * Page返回对象 + * 分页返回对象 * - * @Author lihaifan - * @Date Created in 2017/10/31 15:05 + * @Author 1024创新实验室-主任: 卓大 + * @Date 2020/04/28 16:19 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ @Data -public class PageResultDTO { +public class PageResult { /** * 当前页 @@ -44,4 +47,7 @@ public class PageResultDTO { @ApiModelProperty(value = "结果集") private List list; + @ApiModelProperty("是否为空") + private Boolean emptyFlag; + } diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/RequestUrlVO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/RequestUrlVO.java new file mode 100644 index 00000000..3b8e0be3 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/RequestUrlVO.java @@ -0,0 +1,26 @@ +package net.lab1024.sa.common.common.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 请求url返回对象 + * + * @Author 1024创新实验室: 李善逸 + * @Date 2021/9/1 20:15 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class RequestUrlVO { + + @ApiModelProperty("注释说明") + private String comment; + + @ApiModelProperty("controller.method") + private String name; + + @ApiModelProperty("url") + private String url; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/RequestUser.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/RequestUser.java new file mode 100644 index 00000000..afce6da7 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/RequestUser.java @@ -0,0 +1,49 @@ +package net.lab1024.sa.common.common.domain; + +import net.lab1024.sa.common.common.enumeration.UserTypeEnum; + +/** + * 请求用户 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021-12-21 19:55:07 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public interface RequestUser { + + /** + * 请求用户id + * + * @return + */ + Long getUserId(); + + /** + * 请求用户名称 + * + * @return + */ + String getUserName(); + + /** + * 获取用户类型 + */ + UserTypeEnum getUserType(); + + /** + * 获取请求的IP + * + * @return + */ + String getIp(); + + /** + * 获取请求 user-agent + * + * @return + */ + String getUserAgent(); + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/ResponseDTO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/ResponseDTO.java new file mode 100644 index 00000000..4aaaf8e5 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/ResponseDTO.java @@ -0,0 +1,101 @@ +package net.lab1024.sa.common.common.domain; + + +import lombok.Data; +import net.lab1024.sa.common.common.code.ErrorCode; +import net.lab1024.sa.common.common.code.UserErrorCode; +import org.apache.commons.lang3.StringUtils; + +/** + * 请求返回对象 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021-10-31 21:06:11 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class ResponseDTO { + + public static final int OK_CODE = 0; + + public static final String OK_MSG = "success"; + + private Integer code; + + private String level; + + private String msg; + + private Boolean ok; + + private T data; + + public ResponseDTO(Integer code, String level, boolean ok, String msg, T data) { + this.code = code; + this.level = level; + this.ok = ok; + this.msg = msg; + this.data = data; + } + + public ResponseDTO(ErrorCode errorCode, boolean ok, String msg, T data) { + this.code = errorCode.getCode(); + this.level = errorCode.getLevel(); + this.ok = ok; + if (StringUtils.isNotBlank(msg)) { + this.msg = msg; + } else { + this.msg = errorCode.getMsg(); + } + this.data = data; + } + + public static ResponseDTO ok() { + return new ResponseDTO<>(OK_CODE, null, true, OK_MSG, null); + } + + public static ResponseDTO ok(T data) { + return new ResponseDTO<>(OK_CODE, null, true, OK_MSG, data); + } + + public static ResponseDTO okMsg(String msg) { + return new ResponseDTO<>(OK_CODE, null, true, msg, null); + } + + // -------------------------------------------- 最常用的 用户参数 错误码 -------------------------------------------- + + public static ResponseDTO userErrorParam() { + return new ResponseDTO<>(UserErrorCode.PARAM_ERROR, false, null, null); + } + + + public static ResponseDTO userErrorParam(String msg) { + return new ResponseDTO<>(UserErrorCode.PARAM_ERROR, false, msg, null); + } + + // -------------------------------------------- 错误码 -------------------------------------------- + + public static ResponseDTO error(ErrorCode errorCode) { + return new ResponseDTO<>(errorCode, false, null, null); + } + + public static ResponseDTO error(ErrorCode errorCode, boolean ok) { + return new ResponseDTO<>(errorCode, ok, null, null); + } + + public static ResponseDTO error(ResponseDTO responseDTO) { + return new ResponseDTO<>(responseDTO.getCode(), responseDTO.getLevel(), responseDTO.getOk(), responseDTO.getMsg(), responseDTO.getData()); + } + + public static ResponseDTO error(ErrorCode errorCode, String msg) { + return new ResponseDTO<>(errorCode, false, msg, null); + } + + public static ResponseDTO errorData(ErrorCode errorCode, T data) { + return new ResponseDTO<>(errorCode, false, null, data); + } + + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/SystemEnvironment.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/SystemEnvironment.java new file mode 100644 index 00000000..8cf4b845 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/SystemEnvironment.java @@ -0,0 +1,35 @@ +package net.lab1024.sa.common.common.domain; + + +import lombok.AllArgsConstructor; +import lombok.Getter; +import net.lab1024.sa.common.common.enumeration.SystemEnvironmentEnum; + +/** + * 系统环境 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021/8/13 21:06:11 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@AllArgsConstructor +@Getter +public class SystemEnvironment { + + /** + * 是否位生产环境 + */ + private boolean isProd; + + /** + * 项目名称 + */ + private String projectName; + + /** + * 当前环境 + */ + private SystemEnvironmentEnum currentEnvironment; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/ValidateData.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/ValidateData.java new file mode 100644 index 00000000..a9aff002 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/ValidateData.java @@ -0,0 +1,21 @@ +package net.lab1024.sa.common.common.domain; + +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * 校验数据是否为空的包装类 + * + * @Author 1024创新实验室: 胡克 + * @Date 2020/10/16 21:06:11 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class ValidateData { + + @NotNull(message = "数据不能为空哦") + private T data; +} \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/ValidateList.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/ValidateList.java similarity index 89% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/ValidateList.java rename to smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/ValidateList.java index c3907e63..c2ccb33c 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/ValidateList.java +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/ValidateList.java @@ -1,17 +1,22 @@ -package net.lab1024.smartadmin.common.domain; +package net.lab1024.sa.common.common.domain; import javax.validation.Valid; import javax.validation.constraints.NotEmpty; import java.util.*; /** - * @author: zhuoda - * @create: 2020-02-03 17:37 PM from win10 + * 校验集合是否为空的包装类 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2020-02-03 17:37 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ public class ValidateList implements List { @Valid - @NotEmpty(message = "数据长度请大于0!") + @NotEmpty(message = "数据长度不能为空哦") private List list; public ValidateList() { diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/BaseEnum.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/BaseEnum.java similarity index 83% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/BaseEnum.java rename to smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/BaseEnum.java index 61ef2c66..c7eaf693 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/BaseEnum.java +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/BaseEnum.java @@ -1,4 +1,4 @@ -package net.lab1024.smartadmin.common.domain; +package net.lab1024.sa.common.common.enumeration; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONAware; @@ -10,15 +10,20 @@ import java.util.LinkedHashMap; import java.util.Objects; /** - * @author listen - * @date 2018-07-17 下午 3:52 + * 枚举类接口 + * + * @Author 1024创新实验室: 胡克 + * @Date 2018-07-17 21:22:12 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ public interface BaseEnum { /** * 获取枚举类的值 * - * @return Object + * @return */ Object getValue(); @@ -67,24 +72,21 @@ public interface BaseEnum { String enumJson = JSON.toJSONString(json, true); enumJson = enumJson.replaceAll("\"", ""); - enumJson= enumJson.replaceAll("\t","  "); - enumJson = enumJson.replaceAll("\n","
"); + enumJson = enumJson.replaceAll("\t", "  "); + enumJson = enumJson.replaceAll("\n", "
"); String prefix = "
export const
" + CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, clazz.getSimpleName() + " =
"); return prefix + "" + enumJson + "
"; } - @Data class DeletedQuotationAware implements JSONAware { private String value; public DeletedQuotationAware(Object value) { - if(value == null){ - this.value = ""; - }else if (value instanceof String) { + if (value instanceof String) { this.value = "'" + value + "'"; - }else { + } else { this.value = value.toString(); } } diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/GenderEnum.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/GenderEnum.java new file mode 100644 index 00000000..548d02e1 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/GenderEnum.java @@ -0,0 +1,37 @@ +package net.lab1024.sa.common.common.enumeration; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 性别枚举类 + * + * @Author 1024创新实验室: 胡克 + * @Date 2019/09/24 16:50 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@AllArgsConstructor +@Getter +public enum GenderEnum implements BaseEnum { + + /** + * 0 未知 + */ + UNKNOWN(0, "未知"), + + /** + * 男 1 奇数为阳 + */ + MAN(1, "男"), + + /** + * 女 2 偶数为阴 + */ + WOMAN(2, "女"); + + private final Integer value; + + private final String desc; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/SystemEnvironmentEnum.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/SystemEnvironmentEnum.java new file mode 100644 index 00000000..bccaecbd --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/SystemEnvironmentEnum.java @@ -0,0 +1,50 @@ +package net.lab1024.sa.common.common.enumeration; + + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 系统环境枚举类 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2020-10-15 22:45:04 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@AllArgsConstructor +@Getter +public enum SystemEnvironmentEnum implements BaseEnum { + /** + * dev + */ + DEV(SystemEnvironmentNameConst.DEV, "开发环境"), + + /** + * test + */ + TEST(SystemEnvironmentNameConst.TEST, "测试环境"), + + /** + * pre + */ + PRE(SystemEnvironmentNameConst.PRE, "预发布环境"), + + /** + * prod + */ + PROD(SystemEnvironmentNameConst.PROD, "生产环境"); + + private final String value; + + private final String desc; + + public static final class SystemEnvironmentNameConst { + public static final String DEV = "dev"; + public static final String TEST = "test"; + public static final String PRE = "pre"; + public static final String PROD = "prod"; + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/UserTypeEnum.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/UserTypeEnum.java new file mode 100644 index 00000000..c34670b9 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/UserTypeEnum.java @@ -0,0 +1,37 @@ +package net.lab1024.sa.common.common.enumeration; + +/** + * 用户类型 + * + * @Author 1024创新实验室-主任:卓大 + * @Date 2022/10/19 21:46:24 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +public enum UserTypeEnum implements BaseEnum { + + /** + * 管理端 员工用户 + */ + ADMIN_EMPLOYEE(1, "员工"); + + private Integer type; + + private String desc; + + UserTypeEnum(Integer type, String desc) { + this.type = type; + this.desc = desc; + } + + @Override + public Integer getValue() { + return type; + } + + @Override + public String getDesc() { + return desc; + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/excel/ExcelStyle.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/excel/ExcelStyle.java new file mode 100644 index 00000000..eb723497 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/excel/ExcelStyle.java @@ -0,0 +1,185 @@ +package net.lab1024.sa.common.common.excel; + +import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; +import cn.afterturn.easypoi.excel.entity.params.ExcelForEachParams; +import cn.afterturn.easypoi.excel.export.styler.IExcelExportStyler; +import org.apache.poi.ss.usermodel.*; + +/** + * excel样式 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2020/9/25 19:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public class ExcelStyle implements IExcelExportStyler { + private static final short STRING_FORMAT = (short) BuiltinFormats.getBuiltinFormat("TEXT"); + private static final short FONT_SIZE_TEN = 10; + private static final short FONT_SIZE_ELEVEN = 11; + private static final short FONT_SIZE_TWELVE = 12; + /** + * 大标题样式 + */ + private CellStyle headerStyle; + /** + * 每列标题样式 + */ + private CellStyle titleStyle; + /** + * 数据行样式 + */ + private CellStyle styles; + + public ExcelStyle(Workbook workbook) { + this.init(workbook); + } + + /** + * 初始化样式 + * + * @param workbook + */ + private void init(Workbook workbook) { + this.headerStyle = initHeaderStyle(workbook); + this.titleStyle = initTitleStyle(workbook); + this.styles = initStyles(workbook); + } + + /** + * 大标题样式 + * + * @param color + * @return + */ + @Override + public CellStyle getHeaderStyle(short color) { + return headerStyle; + } + + /** + * 每列标题样式 + * + * @param color + * @return + */ + @Override + public CellStyle getTitleStyle(short color) { + return titleStyle; + } + + /** + * 数据行样式 + * + * @param parity 可以用来表示奇偶行 + * @param entity 数据内容 + * @return 样式 + */ + public CellStyle getStyles(boolean parity, ExcelExportEntity entity) { + return styles; + } + + /** + * 获取样式方法 + * + * @param dataRow 数据行 + * @param obj 对象 + * @param data 数据 + */ + @Override + public CellStyle getStyles(Cell cell, int dataRow, ExcelExportEntity entity, Object obj, Object data) { + return getStyles(true, entity); + } + + /** + * 模板使用的样式设置 + */ + @Override + public CellStyle getTemplateStyles(boolean isSingle, ExcelForEachParams excelForEachParams) { + return null; + } + + /** + * 初始化--大标题样式 + * + * @param workbook + * @return + */ + private CellStyle initHeaderStyle(Workbook workbook) { + CellStyle style = getBaseCellStyle(workbook); + style.setFont(getFont(workbook, FONT_SIZE_TWELVE, true)); + return style; + } + + /** + * 初始化--每列标题样式 + * + * @param workbook + * @return + */ + private CellStyle initTitleStyle(Workbook workbook) { + CellStyle style = getBaseCellStyle(workbook); + style.setFont(getFont(workbook, FONT_SIZE_ELEVEN, false)); + //背景色 + style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); + style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + return style; + } + + /** + * 初始化--数据行样式 + * + * @param workbook + * @return + */ + private CellStyle initStyles(Workbook workbook) { + CellStyle style = getBaseCellStyle(workbook); + style.setFont(getFont(workbook, FONT_SIZE_TEN, false)); + style.setDataFormat(STRING_FORMAT); + style.setAlignment(HorizontalAlignment.LEFT); + return style; + } + + /** + * 基础样式 + * + * @return + */ + private CellStyle getBaseCellStyle(Workbook workbook) { + CellStyle style = workbook.createCellStyle(); + //下边框 + style.setBorderBottom(BorderStyle.THIN); + //左边框 + style.setBorderLeft(BorderStyle.THIN); + //上边框 + style.setBorderTop(BorderStyle.THIN); + //右边框 + style.setBorderRight(BorderStyle.THIN); + //水平居中 + style.setAlignment(HorizontalAlignment.CENTER); + //上下居中 + style.setVerticalAlignment(VerticalAlignment.CENTER); + //设置自动换行 + style.setWrapText(true); + return style; + } + + /** + * 字体样式 + * + * @param size 字体大小 + * @param isBold 是否加粗 + * @return + */ + private Font getFont(Workbook workbook, short size, boolean isBold) { + Font font = workbook.createFont(); + //字体样式 + font.setFontName("宋体"); + //是否加粗 + font.setBold(isBold); + //字体大小 + font.setFontHeightInPoints(size); + return font; + } +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/exception/BusinessException.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/exception/BusinessException.java new file mode 100644 index 00000000..19b6b958 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/exception/BusinessException.java @@ -0,0 +1,38 @@ +package net.lab1024.sa.common.common.exception; + +import net.lab1024.sa.common.common.code.ErrorCode; + +/** + * 业务逻辑异常,全局异常拦截后统一返回ResponseCodeConst.SYSTEM_ERROR + * + * @Author 1024创新实验室: 罗伊 + * @Date 2020/8/25 21:57 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public class BusinessException extends RuntimeException { + + public BusinessException() { + } + + public BusinessException(ErrorCode errorCode) { + super(errorCode.getMsg()); + } + + public BusinessException(String message) { + super(message); + } + + public BusinessException(String message, Throwable cause) { + super(message, cause); + } + + public BusinessException(Throwable cause) { + super(cause); + } + + public BusinessException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/interceptor/AbstractInterceptor.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/interceptor/AbstractInterceptor.java new file mode 100644 index 00000000..62f2042d --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/interceptor/AbstractInterceptor.java @@ -0,0 +1,148 @@ +package net.lab1024.sa.common.common.interceptor; + +import com.alibaba.fastjson.JSONObject; +import net.lab1024.sa.common.common.annoation.NoNeedLogin; +import net.lab1024.sa.common.common.code.UserErrorCode; +import net.lab1024.sa.common.common.constant.RequestHeaderConst; +import net.lab1024.sa.common.common.domain.RequestUser; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartRequestUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.util.CollectionUtils; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.HandlerInterceptor; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; +import java.util.function.Function; + +/** + * 抽象拦截器 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2021-10-09 20:56:14 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public abstract class AbstractInterceptor implements HandlerInterceptor { + + @Autowired + private List ignoreUrlList; + + + /** + * Token获取用户信息 + * + * @return + */ + protected abstract Function userFunction(); + + /** + * 拦截路径 + * + * @return + */ + public abstract String[] pathPatterns(); + + /** + * 忽略的url集合 + * + * @return + */ + protected List getIgnoreUrlList() { + return ignoreUrlList; + } + + /** + * 拦截服务器端响应处理ajax请求返回结果 + * + * @param request + * @param response + * @param handler + * @return + * @throws Exception + */ + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + // OPTIONS请求直接return + if (HttpMethod.OPTIONS.toString().equals(request.getMethod())) { + response.setStatus(HttpStatus.NO_CONTENT.value()); + return false; + } + + boolean isHandler = handler instanceof HandlerMethod; + if (!isHandler) { + return true; + } + //放行的Uri前缀 + String uri = request.getRequestURI(); + String contextPath = request.getContextPath(); + String target = uri.replaceFirst(contextPath, ""); + if (this.contain(this.getIgnoreUrlList(), target)) { + return true; + } + //不需要登录 + NoNeedLogin noNeedLogin = ((HandlerMethod) handler).getMethodAnnotation(NoNeedLogin.class); + // 检查是否包含 token + String xRequestToken = request.getParameter(RequestHeaderConst.TOKEN); + String xHeaderToken = request.getHeader(RequestHeaderConst.TOKEN); + String xAccessToken = StringUtils.isNotBlank(xRequestToken) ? xRequestToken : xHeaderToken; + // 包含token 则获取用户信息 并保存 + if (StringUtils.isNotBlank(xAccessToken)) { + RequestUser requestUser = userFunction().apply(xAccessToken); + if (requestUser != null) { + SmartRequestUtil.setRequestUser(requestUser); + } + // 有token 无需登录 + if (null != noNeedLogin) { + return true; + } + } + // 无token 无需登录 + if (null != noNeedLogin) { + return true; + } + if (StringUtils.isBlank(xAccessToken)) { + this.outputResult(response, ResponseDTO.error(UserErrorCode.LOGIN_STATE_INVALID)); + return false; + } + return true; + } + + public Boolean contain(List ignores, String uri) { + if (CollectionUtils.isEmpty(ignores)) { + return false; + } + for (String ignoreUrl : ignores) { + if (uri.startsWith(ignoreUrl)) { + return true; + } + } + return false; + } + + /** + * 错误输出 + * + * @param response + * @param responseDTO + * @throws IOException + */ + private void outputResult(HttpServletResponse response, ResponseDTO responseDTO) throws IOException { + String msg = JSONObject.toJSONString(responseDTO); + response.setContentType("application/json;charset=UTF-8"); + response.getWriter().write(msg); + response.flushBuffer(); + } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { + SmartRequestUtil.remove(); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/deserializer/DictValueVoDeserializer.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/deserializer/DictValueVoDeserializer.java new file mode 100644 index 00000000..e61f1133 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/deserializer/DictValueVoDeserializer.java @@ -0,0 +1,52 @@ +package net.lab1024.sa.common.common.json.deserializer; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.ObjectCodec; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonNode; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.module.support.dict.domain.vo.DictValueVO; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 字典反序列化 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022-08-12 22:17:53 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Slf4j +public class DictValueVoDeserializer extends JsonDeserializer { + + @Override + public String deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException { + List list = new ArrayList<>(); + ObjectCodec objectCodec = jsonParser.getCodec(); + JsonNode listOrObjectNode = objectCodec.readTree(jsonParser); + String deserialize = ""; + try { + if (listOrObjectNode.isArray()) { + for (JsonNode node : listOrObjectNode) { + list.add(objectCodec.treeToValue(node, DictValueVO.class)); + } + } else { + list.add(objectCodec.treeToValue(listOrObjectNode, DictValueVO.class)); + } + deserialize = list.stream().map(DictValueVO::getValueCode).collect(Collectors.joining(",")); + } catch (Exception e) { + log.error(e.getMessage(), e); + deserialize = listOrObjectNode.asText(); + } + return deserialize; + } + + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/deserializer/FileKeyVoDeserializer.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/deserializer/FileKeyVoDeserializer.java new file mode 100644 index 00000000..66d5bdb6 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/deserializer/FileKeyVoDeserializer.java @@ -0,0 +1,53 @@ +package net.lab1024.sa.common.common.json.deserializer; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.ObjectCodec; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonNode; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.module.support.file.domain.vo.FileVO; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 文件key反序列化
+ * 由于前端接收到的是序列化过的字段, 这边入库需要进行反序列化操作比较方便处理 + * + * @Author 1024创新实验室: 胡克 + * @Date 2022-11-24 17:15:23 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Slf4j +public class FileKeyVoDeserializer extends JsonDeserializer { + + @Override + public String deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException { + List list = new ArrayList<>(); + ObjectCodec objectCodec = jsonParser.getCodec(); + JsonNode listOrObjectNode = objectCodec.readTree(jsonParser); + String deserialize = ""; + try { + if (listOrObjectNode.isArray()) { + for (JsonNode node : listOrObjectNode) { + list.add(objectCodec.treeToValue(node, FileVO.class)); + } + } else { + list.add(objectCodec.treeToValue(listOrObjectNode, FileVO.class)); + } + deserialize = list.stream().map(FileVO::getFileKey).collect(Collectors.joining(",")); + } catch (Exception e) { + log.error(e.getMessage(), e); + deserialize = listOrObjectNode.asText(); + } + return deserialize; + } + + +} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/json/LongJsonDeserializer.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/deserializer/LongJsonDeserializer.java similarity index 71% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/json/LongJsonDeserializer.java rename to smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/deserializer/LongJsonDeserializer.java index 0dc8e315..debb4875 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/json/LongJsonDeserializer.java +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/deserializer/LongJsonDeserializer.java @@ -1,4 +1,4 @@ -package net.lab1024.smartadmin.common.json; +package net.lab1024.sa.common.common.json.deserializer; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; @@ -7,6 +7,15 @@ import com.fasterxml.jackson.databind.JsonDeserializer; import java.io.IOException; +/** + * Long类型序列化 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2020-06-02 22:55:07 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ public class LongJsonDeserializer extends JsonDeserializer { @Override diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/BigDecimalNullZeroSerializer.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/BigDecimalNullZeroSerializer.java new file mode 100644 index 00000000..b0174ddf --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/BigDecimalNullZeroSerializer.java @@ -0,0 +1,29 @@ +package net.lab1024.sa.common.common.json.serializer; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + +import java.io.IOException; +import java.math.BigDecimal; + +/** + * 数字序列化 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2020/8/20 21:04 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public class BigDecimalNullZeroSerializer extends JsonSerializer { + + @Override + public void serialize(BigDecimal value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { + if (value == null) { + jsonGenerator.writeNumber(BigDecimal.ZERO); + return; + } + jsonGenerator.writeNumber(value); + } +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/DictValueVoSerializer.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/DictValueVoSerializer.java new file mode 100644 index 00000000..5398bb0d --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/DictValueVoSerializer.java @@ -0,0 +1,52 @@ +package net.lab1024.sa.common.common.json.serializer; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.google.common.collect.Lists; +import net.lab1024.sa.common.module.support.dict.domain.vo.DictValueVO; +import net.lab1024.sa.common.module.support.dict.service.DictCacheService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; + +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +/** + * 字典序列化 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022-08-12 22:17:53 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public class DictValueVoSerializer extends JsonSerializer { + + @Autowired + private DictCacheService dictCacheService; + + + @Override + public void serialize(String value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { + if (StringUtils.isEmpty(value)) { + jsonGenerator.writeObject(Lists.newArrayList()); + return; + } + + String[] valueCodeArray = value.split(","); + List valueCodeList = Arrays.asList(valueCodeArray); + List dictValueVOList = Lists.newArrayList(); + valueCodeList.forEach(e->{ + if(StringUtils.isNotBlank(e)){ + DictValueVO dictValueVO = dictCacheService.selectValueByValueCode(value); + if(dictValueVO != null){ + dictValueVOList.add(dictValueVO); + } + } + }); + jsonGenerator.writeObject(dictValueVOList); + + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/FileKeySerializer.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/FileKeySerializer.java new file mode 100644 index 00000000..d63d492b --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/FileKeySerializer.java @@ -0,0 +1,45 @@ +package net.lab1024.sa.common.common.json.serializer; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.module.support.file.service.FileService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; + +import java.io.IOException; + +/** + * 文件key进行序列化对象 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2020/8/15 22:06 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public class FileKeySerializer extends JsonSerializer { + + @Autowired + private FileService fileService; + + + @Override + public void serialize(String value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { + if (StringUtils.isEmpty(value)) { + jsonGenerator.writeString(value); + return; + } + if (fileService == null) { + jsonGenerator.writeString(value); + return; + } + ResponseDTO responseDTO = fileService.getFileUrl(value); + if (responseDTO.getOk()) { + jsonGenerator.writeString(responseDTO.getData()); + return; + } + jsonGenerator.writeString(value); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/FileKeyVoSerializer.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/FileKeyVoSerializer.java new file mode 100644 index 00000000..8f27dc1e --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/FileKeyVoSerializer.java @@ -0,0 +1,46 @@ +package net.lab1024.sa.common.common.json.serializer; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.google.common.collect.Lists; +import net.lab1024.sa.common.module.support.file.domain.vo.FileVO; +import net.lab1024.sa.common.module.support.file.service.FileService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; + +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +/** + * 文件key进行序列化对象 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2020/8/15 22:06 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public class FileKeyVoSerializer extends JsonSerializer { + + @Autowired + private FileService fileService; + + + @Override + public void serialize(String value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { + if (StringUtils.isEmpty(value)) { + jsonGenerator.writeObject(Lists.newArrayList()); + return; + } + if(fileService == null){ + jsonGenerator.writeString(value); + return; + } + String[] fileKeyArray = value.split(","); + List fileKeyList = Arrays.asList(fileKeyArray); + List fileKeyVOList = fileService.getFileList(fileKeyList); + jsonGenerator.writeObject(fileKeyVOList); + } +} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/json/LongJsonSerializer.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/LongJsonSerializer.java similarity index 70% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/json/LongJsonSerializer.java rename to smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/LongJsonSerializer.java index 75442925..05a140a3 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/json/LongJsonSerializer.java +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/LongJsonSerializer.java @@ -1,5 +1,4 @@ -package net.lab1024.smartadmin.common.json; - +package net.lab1024.sa.common.common.json.serializer; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonProcessingException; @@ -8,7 +7,17 @@ import com.fasterxml.jackson.databind.SerializerProvider; import java.io.IOException; +/** + * Long类型序列化 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2020-06-02 22:55:07 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ public class LongJsonSerializer extends JsonSerializer { + @Override public void serialize(Long value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException { String text = (value == null ? null : String.valueOf(value)); diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/AbstractSecurityConfig.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/AbstractSecurityConfig.java new file mode 100644 index 00000000..eda6db22 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/AbstractSecurityConfig.java @@ -0,0 +1,91 @@ +package net.lab1024.sa.common.common.security; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.web.filter.CorsFilter; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.function.BiFunction; +import java.util.function.Function; + +/** + * Spring Security + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021/8/3 17:50 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public abstract class AbstractSecurityConfig extends WebSecurityConfigurerAdapter { + @Autowired + private CorsFilter corsFilter; + + @Autowired + private List noNeedLoginUrlList; + + @Autowired + private List ignoreUrlList; + + /** + * Token获取用户信息 + * + * @return + */ + protected abstract BiFunction userFunction(); + + /** + * 需要认证的url集合 + * + * @return + */ + protected abstract String[] getAuthenticatedUrlPatterns(); + + /** + * 不需要登录的url集合 + * + * @return + */ + protected String[] getNoNeedLoginUrl() { + return ignoreUrlList.toArray(new String[ignoreUrlList.size()]); + } + + /** + * 忽略的url集合 + * + * @return + */ + protected String[] getIgnoreUrlList() { + return noNeedLoginUrlList.toArray(new String[noNeedLoginUrlList.size()]); + } + + @Override + protected void configure(HttpSecurity httpSecurity) throws Exception { + httpSecurity + // CSRF禁用,因为不使用session + .csrf().disable() + // 认证失败处理类 + .exceptionHandling().authenticationEntryPoint(new SecurityAuthenticationFailHandler()).and() + .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and() + // 过滤请求 + .authorizeRequests() + //忽略的url + .antMatchers(this.getIgnoreUrlList()).permitAll() + // 不需要登陆的url + .antMatchers(this.getNoNeedLoginUrl()).permitAll() + //需要校验权限的url + .antMatchers(getAuthenticatedUrlPatterns()).authenticated(); + + // token filter 进行校验 + httpSecurity.addFilterBefore(new SecurityTokenFilter(this.userFunction()), UsernamePasswordAuthenticationFilter.class); + httpSecurity.addFilterBefore(corsFilter, SecurityTokenFilter.class); + + } + + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityAuthenticationFailHandler.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityAuthenticationFailHandler.java new file mode 100644 index 00000000..3e146f18 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityAuthenticationFailHandler.java @@ -0,0 +1,43 @@ +package net.lab1024.sa.common.common.security; + +import com.alibaba.fastjson.JSONObject; +import net.lab1024.sa.common.common.code.ErrorCode; +import net.lab1024.sa.common.common.code.UserErrorCode; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.AuthenticationEntryPoint; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * 登录认证失败处理 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022-08-26 20:21:10 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public class SecurityAuthenticationFailHandler implements AuthenticationEntryPoint { + + @Override + public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) throws IOException { + this.outputResult(response, UserErrorCode.LOGIN_STATE_INVALID); + } + + /** + * 输出 + * + * @param response + * @param errorCode + * @throws IOException + */ + private void outputResult(HttpServletResponse response, ErrorCode errorCode) throws IOException { + String msg = JSONObject.toJSONString(ResponseDTO.error(errorCode)); + response.setContentType("application/json;charset=UTF-8"); + response.getWriter().write(msg); + response.flushBuffer(); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityMethodSource.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityMethodSource.java new file mode 100644 index 00000000..290b3d9c --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityMethodSource.java @@ -0,0 +1,66 @@ +package net.lab1024.sa.common.common.security; + +import net.lab1024.sa.common.common.annoation.SaAuth; +import org.apache.commons.lang3.StringUtils; +import org.springframework.security.access.ConfigAttribute; +import org.springframework.security.access.prepost.PreInvocationAttribute; +import org.springframework.security.access.prepost.PrePostAnnotationSecurityMetadataSource; +import org.springframework.security.access.prepost.PrePostInvocationAttributeFactory; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Collection; + +/** + * 此类用于默认给所有接口添加权限 @saAuth.checkPermission('%s') + * %s 为类名.方法名 + * 和使用@PreAuthorize("@saAuth.checkPermission('%s')") 效果一致 + * 避免所有接口都添加一遍 减轻工作量 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2021-08-30 23:08 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public class SecurityMethodSource extends PrePostAnnotationSecurityMetadataSource { + + + private static String EXPRESSION_FORMAT = "@%s.checkPermission('%s')"; + + private final PrePostInvocationAttributeFactory attributeFactory; + + private String beanName; + + + public SecurityMethodSource(PrePostInvocationAttributeFactory attributeFactory, String beanName) { + super(attributeFactory); + this.attributeFactory = attributeFactory; + this.beanName = beanName; + } + + + @Override + public Collection getAttributes(Method method, Class targetClass) { + //如果不存在SaAuth采用security认证模式 + SaAuth saAuth = method.getAnnotation(SaAuth.class); + if (saAuth == null) { + return super.getAttributes(method, targetClass); + } + + //存在添加以URL为权限字符串的校验模式 + ArrayList configAttributes = new ArrayList(1); + String classFullName = targetClass.getName(); + String methodName = method.getName(); + String[] classNameArray = StringUtils.split(classFullName, "\\."); + String controllerName = classNameArray[classNameArray.length - 1]; + String privilegeName = controllerName + "." + methodName; + String preAuthorizeAttribute = String.format(EXPRESSION_FORMAT, beanName, privilegeName); + PreInvocationAttribute pre = this.attributeFactory.createPreInvocationAttribute(null, null, preAuthorizeAttribute); + if (pre != null) { + configAttributes.add(pre); + } + return configAttributes; + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityPermissionCheckService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityPermissionCheckService.java new file mode 100644 index 00000000..29e46559 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityPermissionCheckService.java @@ -0,0 +1,74 @@ +package net.lab1024.sa.common.common.security; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; + +import java.util.Arrays; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * 校验权限 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022/5/12 21:50 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public abstract class SecurityPermissionCheckService { + + + /** + * 校验是否有权限 + * + * @param permission + * @return + */ + public boolean checkPermission(String permission) { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + if (authentication == null) { + return false; + } + return checkPermission(authentication, permission); + } + + /** + * 校验是否有权限 + * + * @param authentication + * @param permission + * @return + */ + public abstract boolean checkPermission(Authentication authentication, String permission); + + /** + * 判断 + * + * @param userDetails + * @param permissionStr + * @return + */ + protected boolean permissionJudge(UserDetails userDetails, String permissionStr) { + if (CollectionUtils.isEmpty(userDetails.getAuthorities())) { + return false; + } + + if (StringUtils.isBlank(permissionStr)) { + return false; + } + + String[] permissionArray = permissionStr.split(","); + for (String permission : permissionArray) { + if(userDetails.getAuthorities().contains(new SimpleGrantedAuthority(permission))){ + return true; + } + } + return false; + } +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityTokenFilter.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityTokenFilter.java new file mode 100644 index 00000000..1a2ef97e --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityTokenFilter.java @@ -0,0 +1,64 @@ +package net.lab1024.sa.common.common.security; + +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.common.constant.RequestHeaderConst; +import net.lab1024.sa.common.common.domain.RequestUser; +import net.lab1024.sa.common.common.util.SmartRequestUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; +import org.springframework.web.filter.OncePerRequestFilter; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.function.BiFunction; +import java.util.function.Function; + +/** + * 注意此处不能 加入@Component,否则对应ignoreUrl的相关请求 将会进入此Filter,并会覆盖CorsFilter + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022/5/12 21:50 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Slf4j +public class SecurityTokenFilter extends OncePerRequestFilter { + + private BiFunction userFunction; + + public SecurityTokenFilter(BiFunction userFunction) { + this.userFunction = userFunction; + } + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) + throws ServletException, IOException { + //需要做token校验, 消息头的token优先于请求query参数的token + String xHeaderToken = request.getHeader(RequestHeaderConst.TOKEN); + String xRequestToken = request.getParameter(RequestHeaderConst.TOKEN); + String xAccessToken = null != xHeaderToken ? xHeaderToken : xRequestToken; + if (StringUtils.isBlank(xAccessToken)) { + chain.doFilter(request, response); + return; + } + //清理spring security + SecurityContextHolder.clearContext(); + + UserDetails loginUserDetail = userFunction.apply(xAccessToken,request); + if (null != loginUserDetail) { + UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(loginUserDetail, null, loginUserDetail.getAuthorities()); + authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); + SecurityContextHolder.getContext().setAuthentication(authenticationToken); + SmartRequestUtil.setRequestUser((RequestUser) loginUserDetail); + } + // 若未给予spring security上下文用户授权 则会授权失败 进入AuthenticationEntryPointImpl + chain.doFilter(request, response); + } +} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/ApiModelPropertyEnum.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/swagger/ApiModelPropertyEnum.java similarity index 59% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/ApiModelPropertyEnum.java rename to smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/swagger/ApiModelPropertyEnum.java index c9babff3..c306f00b 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/ApiModelPropertyEnum.java +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/swagger/ApiModelPropertyEnum.java @@ -1,6 +1,6 @@ -package net.lab1024.smartadmin.common.anno; +package net.lab1024.sa.common.common.swagger; -import net.lab1024.smartadmin.common.domain.BaseEnum; +import net.lab1024.sa.common.common.enumeration.BaseEnum; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; @@ -8,10 +8,13 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** - * 枚举类字段属性的注解 + * 枚举类字段属性的 自定义 swagger 注解 * - * @author listen - * @date 2019/05/16 15:18 + * @Author 1024创新实验室: 胡克 + * @Date 2019/05/16 23:18 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ @Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) @@ -26,22 +29,12 @@ public @interface ApiModelPropertyEnum { String example() default ""; - /** - * 是否隐藏 - * - * @return - */ boolean hidden() default false; - /** - * 是否必须 - * - * @return - */ boolean required() default true; String dataType() default ""; - String enumDesc() default ""; + String desc() default ""; } diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/swagger/Swagger2MapperImplExtension.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/swagger/Swagger2MapperImplExtension.java new file mode 100644 index 00000000..6de869d9 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/swagger/Swagger2MapperImplExtension.java @@ -0,0 +1,91 @@ +package net.lab1024.sa.common.common.swagger; + +import com.google.common.collect.LinkedListMultimap; +import com.google.common.collect.Multimap; +import io.swagger.models.Operation; +import io.swagger.models.Path; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Component; +import springfox.documentation.service.ApiDescription; +import springfox.documentation.service.ApiListing; +import springfox.documentation.swagger2.mappers.ModelMapper; +import springfox.documentation.swagger2.mappers.ServiceModelToSwagger2MapperImpl; + +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.*; + +import static springfox.documentation.builders.BuilderDefaults.nullToEmptyList; + +/** + * 修改 api 顺序 + * + * @Author 1024创新实验室: 胡克 + * @Date 2021/8/11 22:05 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@ConditionalOnBean(ModelMapper.class) +@Component +@Primary +public class Swagger2MapperImplExtension extends ServiceModelToSwagger2MapperImpl { + + @Override + protected Map mapApiListings(Multimap apiListings) { + Map paths = new LinkedHashMap<>(); + Multimap apiListingMap = LinkedListMultimap.create(); + Iterator iter = apiListings.entries().iterator(); + while (iter.hasNext()) { + Map.Entry entry = (Map.Entry) iter.next(); + ApiListing apis = entry.getValue(); + List apiList = apis.getApis(); + apiList.sort((left, right) -> { + int position1 = left.getOperations().get(0).getPosition(); + int position2 = right.getOperations().get(0).getPosition(); + if (position1 == position2) { + return String.CASE_INSENSITIVE_ORDER.compare(left.getPath(), right.getPath()); + } + return Integer.compare(position1, position2); + }); + try { + // 因ApiListing的属性都是final故需要通过反射来修改值 + modify(apis, "apis", apiList); + } catch (Exception e) { + e.printStackTrace(); + } + apiListingMap.put(entry.getKey(), apis); + } + + for (ApiListing each : apiListingMap.values()) { + for (ApiDescription api : each.getApis()) { + paths.put(api.getPath(), mapOperations(api, Optional.ofNullable(paths.get(api.getPath())))); + } + } + return paths; + } + + private Path mapOperations(ApiDescription api, Optional existingPath) { + Path path = existingPath.orElse(new Path()); + for (springfox.documentation.service.Operation each : nullToEmptyList(api.getOperations())) { + Operation operation = mapOperation(each); + path.set(each.getMethod().toString().toLowerCase(), operation); + } + return path; + } + + public static void modify(Object object, String fieldName, Object newFieldValue) throws Exception { + Field field = object.getClass().getDeclaredField(fieldName); + + Field modifiersField = Field.class.getDeclaredField("modifiers"); + modifiersField.setAccessible(true); + modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL); + + if (!field.isAccessible()) { + field.setAccessible(true); + } + + field.set(object, newFieldValue); + } +} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/swagger/SmartSwaggerApiModelEnumPlugin.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/swagger/SwaggerApiModelPropertyEnumPlugin.java similarity index 51% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/swagger/SmartSwaggerApiModelEnumPlugin.java rename to smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/swagger/SwaggerApiModelPropertyEnumPlugin.java index dbc2d586..ce126155 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/swagger/SmartSwaggerApiModelEnumPlugin.java +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/swagger/SwaggerApiModelPropertyEnumPlugin.java @@ -1,30 +1,12 @@ -/* - * - * Copyright 2015 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * - */ +package net.lab1024.sa.common.common.swagger; -package net.lab1024.smartadmin.common.swagger; - -import net.lab1024.smartadmin.common.anno.ApiModelPropertyEnum; -import net.lab1024.smartadmin.common.domain.BaseEnum; import com.google.common.base.Function; import com.google.common.base.Optional; +import net.lab1024.sa.common.common.enumeration.BaseEnum; import org.apache.commons.lang3.StringUtils; import org.springframework.core.annotation.AnnotationUtils; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spi.schema.ModelPropertyBuilderPlugin; import springfox.documentation.spi.schema.contexts.ModelPropertyContext; @@ -36,31 +18,36 @@ import static springfox.documentation.schema.Annotations.findPropertyAnnotation; /** * swagger 用于说明枚举类字段说明 - * SWAGGER_PLUGIN_ORDER+1 是将此配置放在原来的后面执行 + * * SWAGGER_PLUGIN_ORDER+1 是将此配置放在原来的后面执行 * - * @author listen - * @date 2019年5月16日 15:36:56 + * @Author 1024创新实验室: 胡克 + * @Date 2019/8/11 15:36:56 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ -public class SmartSwaggerApiModelEnumPlugin implements ModelPropertyBuilderPlugin { +@Component +@Order(SwaggerPluginSupport.SWAGGER_PLUGIN_ORDER + 1) +public class SwaggerApiModelPropertyEnumPlugin implements ModelPropertyBuilderPlugin { @Override public void apply(ModelPropertyContext context) { - Optional enumOptional = Optional.absent(); + Optional annotation = Optional.absent(); if (context.getAnnotatedElement().isPresent()) { - enumOptional = enumOptional.or(findApiModePropertyAnnotation(context.getAnnotatedElement().get())); + annotation = annotation.or(findApiModePropertyAnnotation(context.getAnnotatedElement().get())); } if (context.getBeanPropertyDefinition().isPresent()) { - enumOptional = enumOptional.or(findPropertyAnnotation(context.getBeanPropertyDefinition().get(), ApiModelPropertyEnum.class)); + annotation = annotation.or(findPropertyAnnotation(context.getBeanPropertyDefinition().get(), ApiModelPropertyEnum.class)); } - if (enumOptional.isPresent()) { - ApiModelPropertyEnum anEnum = enumOptional.get(); + if (annotation.isPresent()) { + ApiModelPropertyEnum anEnum = annotation.get(); String enumInfo = BaseEnum.getInfo(anEnum.value()); context.getBuilder() - .required(enumOptional.transform(toIsRequired()).or(false)) - .description(anEnum.enumDesc() + ":" + enumInfo) - .example(enumOptional.transform(toExample()).orNull()) + .required(annotation.transform(toIsRequired()).or(false)) + .description(anEnum.desc() + ":" + enumInfo) + .example(annotation.transform(toExample()).orNull()) .isHidden(anEnum.hidden()); } } diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartBeanUtil.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartBeanUtil.java similarity index 52% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartBeanUtil.java rename to smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartBeanUtil.java index 6d36c05b..ec36b2b2 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartBeanUtil.java +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartBeanUtil.java @@ -1,13 +1,31 @@ -package net.lab1024.smartadmin.util; +package net.lab1024.sa.common.common.util; import org.springframework.beans.BeanUtils; +import javax.validation.ConstraintViolation; +import javax.validation.Validation; +import javax.validation.Validator; import java.util.Collections; import java.util.List; +import java.util.Set; import java.util.stream.Collectors; +/** + * bean相关工具类 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2018-01-15 10:48:23 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ public class SmartBeanUtil { + /** + * 验证器 + */ + private static final Validator VALIDATOR = Validation.buildDefaultValidatorFactory().getValidator(); + /** * 复制bean的属性 * @@ -27,7 +45,7 @@ public class SmartBeanUtil { * @return */ public static T copy(Object source, Class target) { - if(source == null || target == null){ + if (source == null || target == null) { return null; } try { @@ -49,11 +67,28 @@ public class SmartBeanUtil { * @return */ public static List copyList(List source, Class target) { - if (null == source || source.isEmpty()) { return Collections.emptyList(); } return source.stream().map(e -> copy(e, target)).collect(Collectors.toList()); } + /** + * 手动验证对象 Model的属性 + * 需要配合 hibernate-validator 校验注解 + * + * @param t + * @return String 返回null代表验证通过,否则返回错误的信息 + */ + public static String verify(T t) { + // 获取验证结果 + Set> validate = VALIDATOR.validate(t); + if (validate.isEmpty()) { + // 验证通过 + return null; + } + // 返回错误信息 + List messageList = validate.stream().map(ConstraintViolation::getMessage).collect(Collectors.toList()); + return messageList.toString(); + } } diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartBigDecimalUtil.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartBigDecimalUtil.java similarity index 55% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartBigDecimalUtil.java rename to smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartBigDecimalUtil.java index 651f3d4e..a1ff2da6 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartBigDecimalUtil.java +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartBigDecimalUtil.java @@ -1,31 +1,25 @@ -package net.lab1024.smartadmin.util; +package net.lab1024.sa.common.common.util; import java.math.BigDecimal; import java.math.RoundingMode; -import java.text.NumberFormat; /** - * 全局 BigDecimal 工具类 + * BigDecimal 工具类 * - * @author listen - * @date 2018/01/17 13:54 + * @Author 1024创新实验室: 胡克 + * @Date 2018/01/17 13:54 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ public class SmartBigDecimalUtil { /** - * 价格类型 保留小数点 2 + * 金额 保留小数点 2 */ - public static final int PRICE_DECIMAL_POINT = 2; + public static final int AMOUNT_DECIMAL_POINT = 2; - /** - * 价格类型 保留小数点 6 - */ - public static final int SIX_PRICE_DECIMAL_POINT = 6; - - /** - * 重量类型保留小数点 3 - */ - public static final int WEIGHT_DECIMAL_POINT = 3; + public static final BigDecimal ONE_HUNDRED = new BigDecimal("100"); /** * 金额相关计算方法:四舍五入 保留2位小数点 @@ -33,65 +27,22 @@ public class SmartBigDecimalUtil { public static class Amount { public static BigDecimal add(BigDecimal num1, BigDecimal num2) { - return setScale(num1.add(num2), PRICE_DECIMAL_POINT); + return setScale(num1.add(num2), AMOUNT_DECIMAL_POINT); } public static BigDecimal multiply(BigDecimal num1, BigDecimal num2) { - return setScale(num1.multiply(num2), PRICE_DECIMAL_POINT); + return setScale(num1.multiply(num2), AMOUNT_DECIMAL_POINT); } public static BigDecimal subtract(BigDecimal num1, BigDecimal num2) { - return setScale(num1.subtract(num2), PRICE_DECIMAL_POINT); + return setScale(num1.subtract(num2), AMOUNT_DECIMAL_POINT); } public static BigDecimal divide(BigDecimal num1, BigDecimal num2) { - return setScale(num1.divide(num2, RoundingMode.HALF_UP), PRICE_DECIMAL_POINT); + return setScale(num1.divide(num2, RoundingMode.HALF_UP), AMOUNT_DECIMAL_POINT); } } - /** - * 金额相关计算方法:四舍五入 保留2位小数点 - */ - public static class AmountSix { - - public static BigDecimal add(BigDecimal num1, BigDecimal num2) { - return setScale(num1.add(num2), SIX_PRICE_DECIMAL_POINT); - } - - public static BigDecimal multiply(BigDecimal num1, BigDecimal num2) { - return setScale(num1.multiply(num2), SIX_PRICE_DECIMAL_POINT); - } - - public static BigDecimal subtract(BigDecimal num1, BigDecimal num2) { - return setScale(num1.subtract(num2), SIX_PRICE_DECIMAL_POINT); - } - - public static BigDecimal divide(BigDecimal num1, BigDecimal num2) { - return num1.divide(num2, PRICE_DECIMAL_POINT, RoundingMode.HALF_UP); - } - } - - /** - * 重量相关计算方法:四舍五入 保留3位小数点 - */ - public static class Weight { - - public static BigDecimal add(BigDecimal num1, BigDecimal num2) { - return setScale(num1.add(num2), WEIGHT_DECIMAL_POINT); - } - - public static BigDecimal multiply(BigDecimal num1, BigDecimal num2) { - return setScale(num1.multiply(num2), WEIGHT_DECIMAL_POINT); - } - - public static BigDecimal subtract(BigDecimal num1, BigDecimal num2) { - return setScale(num1.subtract(num2), WEIGHT_DECIMAL_POINT); - } - - public static BigDecimal divide(BigDecimal num1, BigDecimal num2) { - return num1.divide(num2, WEIGHT_DECIMAL_POINT, RoundingMode.HALF_UP); - } - } /** * BigDecimal 加法 num1 + num2 @@ -106,6 +57,25 @@ public class SmartBigDecimalUtil { return setScale(num1.add(num2), point); } + /** + * 累加 + * + * @param point + * @param array + * @return + */ + public static BigDecimal add(int point, BigDecimal... array) { + BigDecimal res = new BigDecimal(0); + for (BigDecimal item : array) { + if (item == null) { + res = res.add(BigDecimal.ZERO); + } else { + res = res.add(item); + } + } + return setScale(res, point); + } + /** * BigDecimal 乘法 num1 x num2 * 未做非空校验 @@ -164,7 +134,7 @@ public class SmartBigDecimalUtil { * @return boolean */ public static boolean isGreaterThan(BigDecimal num1, BigDecimal num2) { - return num1.compareTo(num2) == 1; + return num1.compareTo(num2) > 0; } /** @@ -186,7 +156,7 @@ public class SmartBigDecimalUtil { * @return boolean */ public static boolean isLessThan(BigDecimal num1, BigDecimal num2) { - return num1.compareTo(num2) == -1; + return num1.compareTo(num2) < 0; } /** @@ -211,20 +181,6 @@ public class SmartBigDecimalUtil { return num1.compareTo(num2) == 0; } - /** - * 计算 num1 / num2 的百分比 - * - * @param num1 - * @param num2 - * @return String - */ - public static String getPercentage(BigDecimal num1, BigDecimal num2) { - BigDecimal result = num1.divide(num2, 4, RoundingMode.HALF_UP); - NumberFormat percent = NumberFormat.getPercentInstance(); - percent.setMaximumFractionDigits(2); - return percent.format(result.doubleValue()); - } - /** * 计算 num1 / num2 的百分比 * @@ -233,16 +189,14 @@ public class SmartBigDecimalUtil { * @param point 保留几位小数 * @return String */ - public static BigDecimal bigDecimalPercent(Integer num1, Integer num2, int point) { + public static BigDecimal percent(Integer num1, Integer num2, int point) { if (num1 == null || num2 == null) { return BigDecimal.ZERO; } if (num2.equals(0)) { return BigDecimal.ZERO; } - BigDecimal bigDecimalNum1 = new BigDecimal(num1); - BigDecimal bigDecimalNum2 = new BigDecimal(num2); - return bigDecimalPercent(bigDecimalNum1, bigDecimalNum2, point); + return percent(new BigDecimal(num1), new BigDecimal(num2), point); } /** @@ -253,7 +207,7 @@ public class SmartBigDecimalUtil { * @param point 保留几位小数 * @return String */ - public static BigDecimal bigDecimalPercent(BigDecimal num1, BigDecimal num2, int point) { + public static BigDecimal percent(BigDecimal num1, BigDecimal num2, int point) { if (num1 == null || num2 == null) { return BigDecimal.ZERO; } @@ -261,52 +215,7 @@ public class SmartBigDecimalUtil { return BigDecimal.ZERO; } BigDecimal percent = num1.divide(num2, point + 2, RoundingMode.HALF_UP); - BigDecimal percent100 = percent.multiply(new BigDecimal(100)).setScale(point); - return percent100; - } - - /** - * 判断num是否为空 或者 零 - * - * @param num - * @return String - */ - public static Boolean isEmpty(BigDecimal num) { - return null == num || equals(BigDecimal.ZERO, num); - } - - /** - * 判断num是否 不等于null 并且不等于零 - * - * @param num - * @return String - */ - public static Boolean isNotEmpty(BigDecimal num) { - return !isEmpty(num); - } - - /** - * 转换为万 - * - * @param num - * @param point - * @return - */ - public static BigDecimal convertTenThousand(BigDecimal num, int point) { - return num.divide(new BigDecimal(10000), point, RoundingMode.HALF_UP); - } - - /** - * 转换为负数 - * - * @param num - * @return - */ - public static BigDecimal convertToMinusNumber(BigDecimal num) { - if (isLessOrEqual(num, BigDecimal.ZERO)) { - return num; - } - return BigDecimal.ZERO.subtract(num); + return percent.multiply(ONE_HUNDRED).setScale(point); } /** @@ -330,4 +239,9 @@ public class SmartBigDecimalUtil { public static BigDecimal min(BigDecimal num1, BigDecimal num2) { return num1.compareTo(num2) < 0 ? num1 : num2; } + + public static void main(String[] args) { + System.out.println(percent(new BigDecimal("3"), new BigDecimal("11"), 2)); + System.out.println(percent(new BigDecimal("8"), new BigDecimal("11"), 2)); + } } diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartEasyPoiExcelUtil.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartEasyPoiExcelUtil.java similarity index 77% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartEasyPoiExcelUtil.java rename to smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartEasyPoiExcelUtil.java index fb3860a6..40994422 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartEasyPoiExcelUtil.java +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartEasyPoiExcelUtil.java @@ -1,10 +1,11 @@ -package net.lab1024.smartadmin.util; +package net.lab1024.sa.common.common.util; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.ExcelImportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.ImportParams; import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.Workbook; import org.springframework.web.multipart.MultipartFile; @@ -12,16 +13,22 @@ import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; +import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.List; import java.util.Map; import java.util.NoSuchElementException; /** - * @author: zhuoda - * @create: 2020-03-30 14:27 PM from win10 + * excel 工具类 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2018/01/17 13:54 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ - +@Slf4j public class SmartEasyPoiExcelUtil { public static void exportExcel(List list, String title, String sheetName, Class pojoClass, String fileName, boolean isCreateHeader, HttpServletResponse response) throws IOException { @@ -42,21 +49,30 @@ public class SmartEasyPoiExcelUtil { private static void defaultExport(List list, Class pojoClass, String fileName, HttpServletResponse response, ExportParams exportParams) throws IOException { Workbook workbook = ExcelExportUtil.exportExcel(exportParams, pojoClass, list); - if (workbook != null) ; - downLoadExcel(fileName, response, workbook); + downloadExcel(fileName, workbook, response); } - private static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) throws IOException { - response.setHeader("content-Type", "application/vnd.ms-excel"); - response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); - response.setCharacterEncoding("UTF-8"); + + public static void downloadExcel(String fileName, Workbook workbook, HttpServletResponse response) { + try { + fileName = URLEncoder.encode(fileName, "UTF-8"); + } catch (UnsupportedEncodingException e) { + log.error("", e); + } + response.setCharacterEncoding("utf-8"); + response.setHeader("Content-Type", "application/vnd.ms-excel"); + response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xls"); + try { workbook.write(response.getOutputStream()); + workbook.close(); + } catch (IOException e) { + log.error("", e); + } } private static void defaultExport(List> list, String fileName, HttpServletResponse response) throws IOException { Workbook workbook = ExcelExportUtil.exportExcel(list, ExcelType.HSSF); - if (workbook != null) ; - downLoadExcel(fileName, response, workbook); + downloadExcel(fileName, workbook, response); } public static List importExcel(String filePath, Integer titleRows, Integer headerRows, Class pojoClass) { @@ -73,7 +89,6 @@ public class SmartEasyPoiExcelUtil { //throw new NormalException("模板不能为空"); } catch (Exception e) { e.printStackTrace(); - //throw new NormalException(e.getMessage()); } return list; } diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartEnumUtil.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartEnumUtil.java new file mode 100644 index 00000000..40c34a95 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartEnumUtil.java @@ -0,0 +1,165 @@ +package net.lab1024.sa.common.common.util; + +import net.lab1024.sa.common.common.enumeration.BaseEnum; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; + +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Objects; +import java.util.function.BiConsumer; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * 枚举工具类 + * + * @Author 1024创新实验室: 胡克 + * @Date 2017/10/10 18:17 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public class SmartEnumUtil { + + /** + * 校验参数与枚举类比较是否合法 + * + * @param value 参数 + * @param enumClass 枚举类必须实现BaseEnum接口 + * @return boolean + * @Author 胡克 + */ + public static boolean checkEnum(Object value, Class enumClass) { + if (null == value) { + return false; + } + return Stream.of(enumClass.getEnumConstants()).anyMatch(e -> e.equalsValue(value)); + } + + /** + * 创建一个具有唯一array值的数组,每个值不包含在其他给定的数组中。 + * + * @param enumClass + * @param exclude + * @param + * @return + */ + public static List differenceValueList(Class enumClass, T... exclude) { + HashSet valueSet = new HashSet<>(); + if (exclude != null) { + valueSet.addAll(Stream.of(exclude).map(BaseEnum::getValue).collect(Collectors.toSet())); + } + + return Stream.of(enumClass.getEnumConstants()) + .filter(e -> !valueSet.contains(e.getValue())) + .map(BaseEnum::getValue) + .collect(Collectors.toList()); + } + + /** + * 获取枚举类的说明 value : info 的形式 + * + * @param enumClass + * @return String + */ + public static String getEnumDesc(Class enumClass) { + BaseEnum[] enums = enumClass.getEnumConstants(); + // value : info 的形式 + StringBuilder sb = new StringBuilder(); + for (BaseEnum baseEnum : enums) { + sb.append(baseEnum.getValue()).append(":").append(baseEnum.getDesc()).append(","); + } + return sb.toString(); + } + + /** + * 获取与参数相匹配的枚举类实例的 说明 + * + * @param value 参数 + * @param enumClass 枚举类必须实现BaseEnum接口 + * @return String 如无匹配枚举则返回null + */ + public static String getEnumDescByValue(Object value, Class enumClass) { + if (null == value) { + return null; + } + return Stream.of(enumClass.getEnumConstants()) + .filter(e -> e.equalsValue(value)) + .findFirst() + .map(BaseEnum::getDesc) + .orElse(null); + } + + public static String getEnumDescByValueList(Collection values, Class enumClass) { + if (CollectionUtils.isEmpty(values)) { + return ""; + } + return Stream.of(enumClass.getEnumConstants()).filter(e -> values.contains(e.getValue())).map(BaseEnum::getDesc).collect(Collectors.joining(",")); + } + + /** + * 根据参数获取枚举类的实例 + * + * @param value 参数 + * @param enumClass 枚举类必须实现BaseEnum接口 + * @return BaseEnum 无匹配值返回null + * @Author 胡克 + */ + public static T getEnumByValue(Object value, Class enumClass) { + if (null == value) { + return null; + } + return Stream.of(enumClass.getEnumConstants()) + .filter(e -> e.equalsValue(value)) + .findFirst() + .orElse(null); + } + + /** + * 根据实例描述与获取枚举类的实例 + * + * @param desc 参数描述 + * @param enumClass 枚举类必须实现BaseEnum接口 + * @return BaseEnum 无匹配值返回null + * @Author 胡克 + */ + public static T getEnumByDesc(String desc, Class enumClass) { + return Stream.of(enumClass.getEnumConstants()) + .filter(e -> Objects.equals(e.getDesc(), desc)) + .findFirst() + .orElse(null); + } + + + public static T getEnumByName(String name, Class enumClass) { + return Stream.of(enumClass.getEnumConstants()) + .filter(e -> StringUtils.equalsIgnoreCase(e.toString(), name)) + .findFirst() + .orElse(null); + } + + + /** + * 根据lambda getter/setter 注入 + * + * @param list + * @param getter + * @param setter + * @param enumClass + * @param + */ + public static void inject(List list, Function getter, BiConsumer setter, Class enumClass) { + if (list == null || list.isEmpty()) { + return; + } + for (T t : list) { + Integer enumValue = getter.apply(t); + if (enumValue != null) { + setter.accept(t, getEnumDescByValue(enumValue, enumClass)); + } + } + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartPageUtil.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartPageUtil.java new file mode 100644 index 00000000..63ac5d7b --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartPageUtil.java @@ -0,0 +1,111 @@ +package net.lab1024.sa.common.common.util; + +import com.baomidou.mybatisplus.core.metadata.OrderItem; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.google.common.collect.Lists; +import net.lab1024.sa.common.common.domain.PageParam; +import net.lab1024.sa.common.common.domain.PageResult; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * 分页工具类 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2020-04-23 20:51:40 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public class SmartPageUtil { + + /** + * 转换为查询参数 + * + * @param baseDTO + * @return + */ + public static Page convert2PageQuery(PageParam baseDTO) { + Page page = new Page<>(baseDTO.getPageNum(), baseDTO.getPageSize()); + // 设置排序字段 + List sortItemList = baseDTO.getSortItemList(); + if (CollectionUtils.isNotEmpty(sortItemList)) { + List orderItemList = sortItemList.stream().map(e -> new OrderItem(e.getColumn(), e.getIsAsc())).collect(Collectors.toList()); + page.setOrders(orderItemList); + } + return page; + } + + /** + * 转换为 PageResultDTO 对象 + * + * @param page + * @param sourceList 原list + * @param targetClazz 目标类 + * @return + */ + public static PageResult convert2PageResult(Page page, List sourceList, Class targetClazz) { + return convert2PageResult(page, SmartBeanUtil.copyList(sourceList, targetClazz)); + } + + /** + * 转换为 PageResultDTO 对象 + * + * @param page + * @param sourceList list + * @return + */ + public static PageResult convert2PageResult(Page page, List sourceList) { + PageResult pageResult = new PageResult<>(); + pageResult.setPageNum(page.getCurrent()); + pageResult.setPageSize(page.getSize()); + pageResult.setTotal(page.getTotal()); + pageResult.setPages(page.getPages()); + pageResult.setList(sourceList); + pageResult.setEmptyFlag(CollectionUtils.isEmpty(sourceList)); + return pageResult; + } + + /** + * 转换分页结果对象 + * + * @param pageResult + * @param targetClazz + * @return + */ + public static PageResult convert2PageResult(PageResult pageResult, Class targetClazz) { + PageResult newPageResult = new PageResult<>(); + newPageResult.setPageNum(pageResult.getPageNum()); + newPageResult.setPageSize(pageResult.getPageSize()); + newPageResult.setTotal(pageResult.getTotal()); + newPageResult.setPages(pageResult.getPages()); + newPageResult.setEmptyFlag(pageResult.getEmptyFlag()); + newPageResult.setList(SmartBeanUtil.copyList(pageResult.getList(), targetClazz)); + return newPageResult; + } + + public static PageResult subListPage(Integer pageNum, Integer pageSize, List list) { + PageResult pageRet = new PageResult(); + //总条数 + int count = list.size(); + int pages = count % pageSize == 0 ? count / pageSize : (count / pageSize + 1); + int fromIndex = (pageNum - 1) * pageSize; + int toIndex = pageNum * pageSize > count ? count : pageNum * pageSize; + + if (pageNum > pages) { + pageRet.setList(Lists.newLinkedList()); + pageRet.setPageNum(pageNum.longValue()); + pageRet.setPages(Long.valueOf(pages)); + pageRet.setTotal(Long.valueOf(count)); + return pageRet; + } + List pageList = list.subList(fromIndex, toIndex); + pageRet.setList(pageList); + pageRet.setPageNum(pageNum.longValue()); + pageRet.setPages(Long.valueOf(pages)); + pageRet.setTotal(Long.valueOf(count)); + return pageRet; + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartRequestUtil.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartRequestUtil.java new file mode 100644 index 00000000..40210ba2 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartRequestUtil.java @@ -0,0 +1,38 @@ +package net.lab1024.sa.common.common.util; + +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.common.domain.RequestUser; + +/** + * 请求用户 工具类 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022-05-30 21:22:12 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Slf4j +public class SmartRequestUtil { + + private static final ThreadLocal requestThreadLocal = new ThreadLocal<>(); + + public static void setRequestUser(RequestUser requestUser) { + requestThreadLocal.set(requestUser); + } + + public static RequestUser getRequestUser() { + return requestThreadLocal.get(); + } + + public static Long getRequestUserId() { + RequestUser requestUser = getRequestUser(); + return null == requestUser ? null : requestUser.getUserId(); + } + + public static void remove() { + requestThreadLocal.remove(); + } + + +} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartStringUtil.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartStringUtil.java similarity index 73% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartStringUtil.java rename to smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartStringUtil.java index da2e1764..230863a0 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartStringUtil.java +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartStringUtil.java @@ -1,6 +1,7 @@ -package net.lab1024.smartadmin.util; +package net.lab1024.sa.common.common.util; -import org.apache.commons.lang3.StringUtils; + +import cn.hutool.core.util.StrUtil; import java.util.ArrayList; import java.util.HashSet; @@ -8,11 +9,15 @@ import java.util.List; import java.util.Set; /** - * 字符串操作类,包括分割,转换,大写首字母 + * 独有的字符串工具类 * - * @author jiaozi + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021-09-02 20:21:10 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ -public class SmartStringUtil extends StringUtils { +public class SmartStringUtil extends StrUtil { // ===============split ======================= @@ -42,7 +47,7 @@ public class SmartStringUtil extends StringUtils { // ===============split Integer======================= - public static List splitConverToIntList(String str, String split, int defaultVal) { + public static List splitConvertToIntList(String str, String split, int defaultVal) { if (isEmpty(str)) { return new ArrayList(); } @@ -60,7 +65,7 @@ public class SmartStringUtil extends StringUtils { return list; } - public static Set splitConverToIntSet(String str, String split, int defaultVal) { + public static Set splitConvertToIntSet(String str, String split, int defaultVal) { if (isEmpty(str)) { return new HashSet(); } @@ -78,12 +83,12 @@ public class SmartStringUtil extends StringUtils { return set; } - public static Set splitConverToIntSet(String str, String split) { - return splitConverToIntSet(str, split, 0); + public static Set splitConvertToIntSet(String str, String split) { + return splitConvertToIntSet(str, split, 0); } - public static List splitConverToIntList(String str, String split) { - return splitConverToIntList(str, split, 0); + public static List splitConvertToIntList(String str, String split) { + return splitConvertToIntList(str, split, 0); } public static int[] splitConvertToIntArray(String str, String split, int defaultVal) { @@ -109,7 +114,7 @@ public class SmartStringUtil extends StringUtils { // ===============split 2 Long======================= - public static List splitConverToLongList(String str, String split, long defaultVal) { + public static List splitConvertToLongList(String str, String split, long defaultVal) { if (isEmpty(str)) { return new ArrayList(); } @@ -127,8 +132,8 @@ public class SmartStringUtil extends StringUtils { return list; } - public static List splitConverToLongList(String str, String split) { - return splitConverToLongList(str, split, 0L); + public static List splitConvertToLongList(String str, String split) { + return splitConvertToLongList(str, split, 0L); } public static long[] splitConvertToLongArray(String str, String split, long defaultVal) { @@ -154,7 +159,7 @@ public class SmartStringUtil extends StringUtils { // ===============split convert byte======================= - public static List splitConverToByteList(String str, String split, byte defaultVal) { + public static List splitConvertToByteList(String str, String split, byte defaultVal) { if (isEmpty(str)) { return new ArrayList(); } @@ -172,8 +177,8 @@ public class SmartStringUtil extends StringUtils { return list; } - public static List splitConverToByteList(String str, String split) { - return splitConverToByteList(str, split, (byte) 0); + public static List splitConvertToByteList(String str, String split) { + return splitConvertToByteList(str, split, (byte) 0); } public static byte[] splitConvertToByteArray(String str, String split, byte defaultVal) { @@ -199,7 +204,7 @@ public class SmartStringUtil extends StringUtils { // ===============split convert double======================= - public static List splitConverToDoubleList(String str, String split, double defaultVal) { + public static List splitConvertToDoubleList(String str, String split, double defaultVal) { if (isEmpty(str)) { return new ArrayList(); } @@ -217,8 +222,8 @@ public class SmartStringUtil extends StringUtils { return list; } - public static List splitConverToDoubleList(String str, String split) { - return splitConverToDoubleList(str, split, 0); + public static List splitConvertToDoubleList(String str, String split) { + return splitConvertToDoubleList(str, split, 0); } public static double[] splitConvertToDoubleArray(String str, String split, double defaultVal) { @@ -242,9 +247,9 @@ public class SmartStringUtil extends StringUtils { return splitConvertToDoubleArray(str, split, 0); } - // ===============solit convert float======================= + // ===============split convert float======================= - public static List splitConverToFloatList(String str, String split, float defaultVal) { + public static List splitConvertToFloatList(String str, String split, float defaultVal) { if (isEmpty(str)) { return new ArrayList(); } @@ -262,8 +267,8 @@ public class SmartStringUtil extends StringUtils { return list; } - public static List splitConverToFloatList(String str, String split) { - return splitConverToFloatList(str, split, 0f); + public static List splitConvertToFloatList(String str, String split) { + return splitConvertToFloatList(str, split, 0f); } public static float[] splitConvertToFloatArray(String str, String split, float defaultVal) { @@ -287,25 +292,43 @@ public class SmartStringUtil extends StringUtils { return splitConvertToFloatArray(str, split, 0f); } - // ===============upperCase======================= - /** - * 将首字母大写 - * - * @param str - * @return - */ public static String upperCaseFirstChar(String str) { - if (str == null || str.isEmpty()) { + if (str != null && !str.isEmpty()) { + char firstChar = str.charAt(0); + if (Character.isUpperCase(firstChar)) { + return str; + } else { + char[] values = str.toCharArray(); + values[0] = Character.toUpperCase(firstChar); + return new String(values); + } + } else { return str; } - char firstChar = str.charAt(0); - if (Character.isUpperCase(firstChar)) { - return str; - } - char[] values = str.toCharArray(); - values[0] = Character.toUpperCase(firstChar); - return new String(values); } -} + public static String replace(String content, int begin, int end, String newStr) { + if (begin < content.length() && begin >= 0) { + if (end <= content.length() && end >= 0) { + if (begin > end) { + return content; + } else { + StringBuilder starStr = new StringBuilder(); + + for (int i = begin; i < end; ++i) { + starStr.append(newStr); + } + + return content.substring(0, begin) + starStr + content.substring(end); + } + } else { + return content; + } + } else { + return content; + } + } + + +} \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartVerificationUtil.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartVerificationUtil.java similarity index 51% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartVerificationUtil.java rename to smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartVerificationUtil.java index ceb349f1..5360e160 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartVerificationUtil.java +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartVerificationUtil.java @@ -1,16 +1,18 @@ -package net.lab1024.smartadmin.util; +package net.lab1024.sa.common.common.util; import java.util.regex.Pattern; + /** * 验证工具类 * - * @author listen - * @date 2017/11/06 10:54 + * @Author 1024创新实验室: 胡克 + * @Date 2017/11/06 10:54 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ public class SmartVerificationUtil { - - /** * 手机号码验证规则 */ @@ -30,32 +32,33 @@ public class SmartVerificationUtil { * 车牌号 */ public static final String CAR_NUMBER = - "([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼]{1}(([A-HJ-Z]{1}[A-HJ-NP-Z0-9]{5})|([A-HJ-Z]{1}(([DF]{1}[A-HJ-NP-Z0-9]{1}[0-9]{4})|([0-9]{5}[DF]{1})))|" + "([A-HJ-Z" + "]{1}[A-D0-9]{1}[0-9]{3}警)))|" + - "([0-9]{6}使)|((([沪粤川云桂鄂陕蒙藏黑辽渝]{1}A)|鲁B|闽D|蒙E|蒙H)[0-9]{4}领)|(WJ[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼·•]{1}[0-9]{4}[TDSHBXJ0-9]{1})|" + "([VKHBSLJNGCE]{1}[A-DJ-PR" + "-TVY]{1}[0-9]{5})"; + "([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼]{1}(([A-HJ-Z]{1}[A-HJ-NP-Z0-9]{5})|([A-HJ-Z]{1}(([DF]{1}[A-HJ-NP-Z0-9]{1}[0-9]{4})|([0-9]{5}[DF]{1})))|" + "([A-HJ-Z" + "]{1}[A-D0-9]{1}[0-9]{3}警)))|" + + "([0-9]{6}使)|((([沪粤川云桂鄂陕蒙藏黑辽渝]{1}A)|鲁B|闽D|蒙E|蒙H)[0-9]{4}领)|(WJ[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼·•]{1}[0-9]{4}[TDSHBXJ0-9]{1})|" + "([VKHBSLJNGCE]{1}[A-DJ-PR" + "-TVY]{1}[0-9]{5})"; /** * 日期年月日校验 yyyy-MM-dd HH:mm:ss */ public static final String DATE_TIME = "^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9" + - "]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29))\\s+([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$"; + "]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29))\\s+([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$"; /** * 日期校验 yyyy-MM-dd */ public static final String DATE = "(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))" - + "|(02-(0[1-9]|[1][0-9]|2[0-8])))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)" + "([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9" - + "][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|(" + "(([0-9]{2})(0[48]|[2468][048]|[13579][26])|(" + "(0[48" + "]|[2468][048]|[3579][26])00))-02-29)"; + + "|(02-(0[1-9]|[1][0-9]|2[0-8])))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)" + "([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9" + + "][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|(" + "(([0-9]{2})(0[48]|[2468][048]|[13579][26])|(" + "(0[48" + "]|[2468][048]|[3579][26])00))-02-29)"; + + public static final String DATE_TIME_HM = "^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29))\\s+([0-1]?[0-9]|2[0-3]):([0-5][0-9])$"; /** * 年月校验 例: 2019-10 */ public static final String YEAR_MONTH = "^\\d{4}-((0([1-9]))|(1(0|1|2)))$"; - /** * 时间区间验证 10:23-19:00 */ - public static final String TIME_SECTION= "^(0[0-9]|1[0-9]|2[0-3]):(0[0-9]|[1-5][0-9])-(0[0-9]|1[0-9]|2[0-3]):(0[0-9]|[1-5][0-9])$"; + public static final String TIME_SECTION = "^(0[0-9]|1[0-9]|2[0-3]):(0[0-9]|[1-5][0-9])-(0[0-9]|1[0-9]|2[0-3]):(0[0-9]|[1-5][0-9])$"; /** * 时间验证 10:23 diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/en/CheckEnum.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/validator/enumeration/CheckEnum.java similarity index 65% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/en/CheckEnum.java rename to smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/validator/enumeration/CheckEnum.java index ceef46fc..dd708b3c 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/en/CheckEnum.java +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/validator/enumeration/CheckEnum.java @@ -1,7 +1,7 @@ -package net.lab1024.smartadmin.common.validator.en; +package net.lab1024.sa.common.common.validator.enumeration; -import net.lab1024.smartadmin.common.domain.BaseEnum; +import net.lab1024.sa.common.common.enumeration.BaseEnum; import javax.validation.Constraint; import javax.validation.Payload; @@ -11,11 +11,13 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** - * 自定义的属性校验注解 - * 为了方便与校验属性的值是否为合法的枚举值 + * 自定义的属性校验注解,为了方便与校验属性的值是否为合法的枚举值 * - * @author listen - * @date 2017/11/11 15:31 + * @Author 1024创新实验室: 胡克 + * @Date 2017/11/11 15:31 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) @@ -27,14 +29,14 @@ public @interface CheckEnum { * * @return String */ - String message() default "非法的枚举值"; + String message(); /** * 枚举类对象 必须实现BaseEnum接口 * * @return */ - Class enumClazz(); + Class value(); /** * 是否必须 diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/en/EnumValidator.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/validator/enumeration/EnumValidator.java similarity index 85% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/en/EnumValidator.java rename to smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/validator/enumeration/EnumValidator.java index adbc1dbe..bd7ea126 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/en/EnumValidator.java +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/validator/enumeration/EnumValidator.java @@ -1,6 +1,7 @@ -package net.lab1024.smartadmin.common.validator.en; +package net.lab1024.sa.common.common.validator.enumeration; -import net.lab1024.smartadmin.common.domain.BaseEnum; + +import net.lab1024.sa.common.common.enumeration.BaseEnum; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; @@ -11,8 +12,11 @@ import java.util.stream.Stream; /** * 枚举类校验器 * - * @author listen - * @date 2017/11/11 15:34 + * @Author 1024创新实验室: 胡克 + * @Date 2017/11/11 15:34 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ public class EnumValidator implements ConstraintValidator { @@ -30,7 +34,7 @@ public class EnumValidator implements ConstraintValidator { public void initialize(CheckEnum constraintAnnotation) { // 获取注解传入的枚举类对象 required = constraintAnnotation.required(); - Class enumClass = constraintAnnotation.enumClazz(); + Class enumClass = constraintAnnotation.value(); enumValList = Stream.of(enumClass.getEnumConstants()).map(BaseEnum::getValue).collect(Collectors.toList()); } diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/AsyncConfig.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/AsyncConfig.java new file mode 100644 index 00000000..9d39c7cd --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/AsyncConfig.java @@ -0,0 +1,71 @@ +package net.lab1024.sa.common.config; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.task.AsyncTaskExecutor; +import org.springframework.scheduling.annotation.AsyncConfigurer; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.lang.reflect.Method; +import java.util.Arrays; + +/** + * 异步调用线程配置 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021-09-02 20:21:10 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Slf4j +@Configuration +public class AsyncConfig { + + /** + * 线程池 配置bean名称 + */ + public static final String ASYNC_EXECUTOR_THREAD_NAME = "smart-admin-async-executor"; + + /** + * 配置线程池 + * + * @return + */ + @Bean(name = ASYNC_EXECUTOR_THREAD_NAME) + public AsyncTaskExecutor executor() { + int processors = Runtime.getRuntime().availableProcessors(); + int threadCount = Math.max(1, processors - 1); + ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); + // 核心线程数量 + taskExecutor.setCorePoolSize(threadCount); + // 最大线程数量 + taskExecutor.setMaxPoolSize(threadCount); + taskExecutor.setThreadNamePrefix(ASYNC_EXECUTOR_THREAD_NAME); + taskExecutor.initialize(); + return taskExecutor; + } + + /** + * spring 异步任务 异常配置 + */ + @Configuration + public static class AsyncExceptionConfig implements AsyncConfigurer { + @Override + public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { + return new AsyncExceptionHandler(); + } + } + + /** + * 自定义异常处理 + */ + public static class AsyncExceptionHandler implements AsyncUncaughtExceptionHandler { + @Override + public void handleUncaughtException(Throwable throwable, Method method, Object... objects) { + log.error("异步任务发生异常:{}, 参数:{}, ", method.getDeclaringClass().getSimpleName() + "." + method.getName(), Arrays.toString(objects), throwable); + } + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/CorsFilterConfig.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/CorsFilterConfig.java new file mode 100644 index 00000000..7cea2f08 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/CorsFilterConfig.java @@ -0,0 +1,45 @@ +package net.lab1024.sa.common.config; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 跨域配置 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2021/11/15 20:38 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Configuration +public class CorsFilterConfig { + + @Value("${access-control-allow-origin}") + private String accessControlAllowOrigin; + + /** + * 跨域配置 + * + * @return + */ + @Bean + public CorsFilter corsFilter () { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + CorsConfiguration config = new CorsConfiguration(); + config.setAllowCredentials(true); + // 设置访问源地址 + config.addAllowedOriginPattern(accessControlAllowOrigin); + // 设置访问源请求头 + config.addAllowedHeader("*"); + // 设置访问源请求方法 + config.addAllowedMethod("*"); + // 对接口配置跨域设置 + source.registerCorsConfiguration("/**", config); + return new CorsFilter(source); + } +} \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartDruidDataSourceConfig.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/DataSourceConfig.java similarity index 64% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartDruidDataSourceConfig.java rename to smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/DataSourceConfig.java index 560bda2a..35f8606d 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartDruidDataSourceConfig.java +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/DataSourceConfig.java @@ -1,4 +1,4 @@ -package net.lab1024.smartadmin.config; +package net.lab1024.sa.common.config; import com.alibaba.druid.filter.Filter; import com.alibaba.druid.filter.stat.StatFilter; @@ -6,8 +6,13 @@ import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.support.http.StatViewServlet; import com.alibaba.druid.support.http.WebStatFilter; import com.alibaba.druid.support.spring.stat.DruidStatInterceptor; -import com.alibaba.druid.util.JdbcConstants; +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.common.domain.DataScopePlugin; +import org.apache.ibatis.plugin.Interceptor; +import org.apache.ibatis.session.SqlSessionFactory; import org.springframework.aop.support.DefaultPointcutAdvisor; import org.springframework.aop.support.JdkRegexpMethodPointcut; import org.springframework.beans.factory.annotation.Autowired; @@ -15,28 +20,31 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; +import org.springframework.core.io.Resource; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import javax.sql.DataSource; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; /** - * [ 数据源配置 ] + * 数据源配置 * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 + * @Author 1024创新实验室-主任: 卓大 + * @Date 2017-11-28 15:21:10 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ @Slf4j @Configuration -public class SmartDruidDataSourceConfig { +public class DataSourceConfig { @Value("${spring.datasource.driver-class-name}") String driver; @@ -79,6 +87,8 @@ public class SmartDruidDataSourceConfig { @Value("${spring.datasource.druid.login.enabled}") boolean druidLoginEnable; + @Value("${spring.datasource.druid.method.pointcut}") + String methodPointcut; @Autowired private StatFilter logSlowSql; @@ -86,11 +96,17 @@ public class SmartDruidDataSourceConfig { @Autowired private DruidStatInterceptor druidStatInterceptor; + @Autowired + private MybatisPlusInterceptor paginationInterceptor; + + @Autowired(required = false) + private DataScopePlugin dataScopePlugin; + @Bean @Primary public DataSource druidDataSource() { DruidDataSource druidDataSource = new DruidDataSource(); - druidDataSource.setDbType(JdbcConstants.MYSQL); + druidDataSource.setDbType(DbType.MYSQL.getDb()); druidDataSource.setDriverClassName(driver); druidDataSource.setUrl(url); druidDataSource.setUsername(username); @@ -101,6 +117,7 @@ public class SmartDruidDataSourceConfig { druidDataSource.setMaxWait(maxWait); druidDataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis); druidDataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis); + druidDataSource.setValidationQuery("SELECT 1"); try { druidDataSource.setFilters(filters); ArrayList arrayList = new ArrayList<>(); @@ -115,8 +132,33 @@ public class SmartDruidDataSourceConfig { } @Bean - public ServletRegistrationBean druidServlet() { - ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(); + public SqlSessionFactory sqlSessionFactory() throws Exception { + MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean(); + factoryBean.setDataSource(druidDataSource()); + PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); + Resource[] resources = resolver.getResources("classpath*:/mapper/**/*.xml"); + factoryBean.setMapperLocations(resources); + + // 设置 MyBatis-Plus 分页插件 注意此处myBatisPlugin一定要放在后面 + List pluginsList = new ArrayList<>(); + pluginsList.add(paginationInterceptor); + if (dataScopePlugin != null) { + pluginsList.add(dataScopePlugin); + } + factoryBean.setPlugins(pluginsList.toArray(new Interceptor[pluginsList.size()])); + + return factoryBean.getObject(); + } + + /** + * 非正式环境 才加载 + * + * @return + */ + @Conditional(SystemEnvironmentConfig.class) + @Bean + public ServletRegistrationBean druidServlet() { + ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean<>(); servletRegistrationBean.setServlet(new StatViewServlet()); servletRegistrationBean.addUrlMappings("/druid/*"); Map initParameters = new HashMap(); @@ -131,11 +173,11 @@ public class SmartDruidDataSourceConfig { } @Bean - public FilterRegistrationBean filterRegistrationBean() { - FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); + public FilterRegistrationBean filterRegistrationBean() { + FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); filterRegistrationBean.setFilter(new WebStatFilter()); filterRegistrationBean.addUrlPatterns("/*"); - filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); + filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/*"); return filterRegistrationBean; } @@ -143,21 +185,20 @@ public class SmartDruidDataSourceConfig { public StatFilter logSlowSql() { StatFilter statFilter = new StatFilter(); statFilter.setMergeSql(true); - statFilter.setSlowSqlMillis(300); + statFilter.setSlowSqlMillis(500); statFilter.setLogSlowSql(true); return statFilter; } @Bean(name = "druid-stat-interceptor") public DruidStatInterceptor druidStatInterceptor() { - DruidStatInterceptor dsInterceptor = new DruidStatInterceptor(); - return dsInterceptor; + return new DruidStatInterceptor(); } @Bean public JdkRegexpMethodPointcut jdkRegexpMethodPointcut() { JdkRegexpMethodPointcut jdkRegexpMethodPointcut = new JdkRegexpMethodPointcut(); - jdkRegexpMethodPointcut.setPatterns("net.lab1024.smartadmin.module..*Service.*"); + jdkRegexpMethodPointcut.setPatterns(methodPointcut); return jdkRegexpMethodPointcut; } diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/DateConfig.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/DateConfig.java new file mode 100644 index 00000000..5faee795 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/DateConfig.java @@ -0,0 +1,88 @@ +package net.lab1024.sa.common.config; + +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.LocalDateTimeUtil; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import org.apache.commons.lang3.StringUtils; +import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.convert.converter.Converter; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeParseException; + +/** + * java8 localDate 时间类格式化配置 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2017-11-28 15:21:10 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Configuration +public class DateConfig { + + @Bean + public Jackson2ObjectMapperBuilderCustomizer customizer() { + return builder -> { + builder.deserializers(new LocalDateDeserializer(DatePattern.NORM_DATE_FORMAT.getDateTimeFormatter())); + builder.deserializers(new LocalDateTimeDeserializer(DatePattern.NORM_DATETIME_FORMAT.getDateTimeFormatter())); + builder.serializers(new LocalDateSerializer(DatePattern.NORM_DATE_FORMAT.getDateTimeFormatter())); + builder.serializers(new LocalDateTimeSerializer(DatePattern.NORM_DATETIME_FORMAT.getDateTimeFormatter())); + }; + } + + + /** + * string 转为 LocalDateTime 配置类 + * + * @author 卓大 + */ + @Configuration + public static class StringToLocalDateTime implements Converter { + + @Override + public LocalDateTime convert(String str) { + if (StringUtils.isBlank(str)) { + return null; + } + LocalDateTime localDateTime; + try { + localDateTime = LocalDateTimeUtil.parse(str, DatePattern.NORM_DATETIME_FORMAT.getDateTimeFormatter()); + } catch (DateTimeParseException e) { + throw new RuntimeException("请输入正确的日期格式:yyyy-MM-dd HH:mm:ss"); + } + return localDateTime; + } + } + + + /** + * string 转为 LocalDate 配置类 + * + * @author 卓大 + */ + @Configuration + public static class StringToLocalDate implements Converter { + + @Override + public LocalDate convert(String str) { + if (StringUtils.isBlank(str)) { + return null; + } + LocalDate localDate; + try { + localDate = LocalDateTimeUtil.parseDate(str, DatePattern.NORM_DATE_FORMAT.getDateTimeFormatter()); + } catch (DateTimeParseException e) { + throw new RuntimeException("请输入正确的日期格式:yyyy-MM-dd"); + } + return localDate; + } + } +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/FileCloudConfig.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/FileCloudConfig.java new file mode 100644 index 00000000..c7285969 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/FileCloudConfig.java @@ -0,0 +1,85 @@ +package net.lab1024.sa.common.config; + +import com.amazonaws.ClientConfiguration; +import com.amazonaws.Protocol; +import com.amazonaws.auth.AWSStaticCredentialsProvider; +import com.amazonaws.auth.BasicAWSCredentials; +import com.amazonaws.client.builder.AwsClientBuilder; +import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.AmazonS3ClientBuilder; +import lombok.Data; +import net.lab1024.sa.common.module.support.file.service.FileStorageCloudServiceImpl; +import net.lab1024.sa.common.module.support.file.service.FileStorageLocalServiceImpl; +import net.lab1024.sa.common.module.support.file.service.IFileStorageService; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * 文件上传 配置 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2019-09-02 23:21:10 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +@Configuration +public class FileCloudConfig { + + @Value("${file.storage.cloud.region}") + private String region; + + @Value("${file.storage.cloud.endpoint}") + private String endpoint; + + @Value("${file.storage.cloud.bucket-name}") + private String bucketName; + + @Value("${file.storage.cloud.access-key}") + private String accessKey; + + @Value("${file.storage.cloud.secret-key}") + private String secretKey; + + @Value("${file.storage.cloud.url.expire}") + private Long urlExpire; + + @Value("${file.storage.cloud.url.public}") + private String publicUrl; + + /** + * 初始化 云oss client 配置 + * + * @return + */ + @Bean + @ConditionalOnProperty(prefix = "file.storage", name = {"mode"}, havingValue = "cloud") + public AmazonS3 initAmazonS3() { + ClientConfiguration clientConfig = new ClientConfiguration(); + clientConfig.setProtocol(Protocol.HTTPS); + AmazonS3 s3Client = AmazonS3ClientBuilder.standard() + .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, secretKey))) + .withClientConfiguration(clientConfig) + .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endpoint, region)) + .withPathStyleAccessEnabled(false) + .build(); + return s3Client; + } + + @Bean + @ConditionalOnProperty(prefix = "file.storage", name = {"mode"}, havingValue = "cloud") + public IFileStorageService initCloudFileService() { + return new FileStorageCloudServiceImpl(); + } + + @Bean + @ConditionalOnProperty(prefix = "file.storage", name = {"mode"}, havingValue = "local") + public IFileStorageService initLocalFileService() { + return new FileStorageLocalServiceImpl(); + } + + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/HeartBeatConfig.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/HeartBeatConfig.java new file mode 100644 index 00000000..56e8765f --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/HeartBeatConfig.java @@ -0,0 +1,37 @@ +package net.lab1024.sa.common.config; + +import net.lab1024.sa.common.module.support.heartbeat.core.HeartBeatManager; +import net.lab1024.sa.common.module.support.heartbeat.core.IHeartBeatRecordHandler; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * 心跳配置 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2018/10/9 18:47 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Configuration +public class HeartBeatConfig { + + /** + * 间隔时间 + */ + @Value("${heart-beat.interval-seconds}") + private Long intervalSeconds; + + @Autowired + private IHeartBeatRecordHandler heartBeatRecordHandler; + + @Bean + public HeartBeatManager heartBeatManager() { + return new HeartBeatManager(intervalSeconds * 1000L, heartBeatRecordHandler); + } + + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/MvcConfig.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/MvcConfig.java new file mode 100644 index 00000000..c08339c9 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/MvcConfig.java @@ -0,0 +1,50 @@ +package net.lab1024.sa.common.config; + +import net.lab1024.sa.common.common.interceptor.AbstractInterceptor; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import java.util.List; + +/** + * web相关配置 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021-09-02 20:21:10 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Configuration +public class MvcConfig implements WebMvcConfigurer { + + @Autowired(required = false) + private List interceptorList; + + @Override + public void addInterceptors (InterceptorRegistry registry) { + if (CollectionUtils.isEmpty(interceptorList)) { + return; + } + interceptorList.forEach(e->{ + registry.addInterceptor(e).addPathPatterns("/**"); + }); + } + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/preview/**"); + } + + @Override + public void addViewControllers(ViewControllerRegistry registry) { + registry.addViewController("/druidMonitor").setViewName("redirect:druid/index.html"); + registry.addViewController("/swaggerApi").setViewName("redirect:swagger-ui.html"); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/MybatisPlusConfig.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/MybatisPlusConfig.java new file mode 100644 index 00000000..f946abea --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/MybatisPlusConfig.java @@ -0,0 +1,33 @@ +package net.lab1024.sa.common.config; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +/** + * mp 插件 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021-09-02 20:21:10 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@EnableTransactionManagement +@Configuration +public class MybatisPlusConfig { + + /** + * 分页插件 + */ + @Bean + public MybatisPlusInterceptor paginationInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); + return interceptor; + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/PostProcessorConfig.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/PostProcessorConfig.java new file mode 100644 index 00000000..827b499b --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/PostProcessorConfig.java @@ -0,0 +1,56 @@ +package net.lab1024.sa.common.config; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.env.EnvironmentPostProcessor; +import org.springframework.boot.env.YamlPropertySourceLoader; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.core.env.MutablePropertySources; +import org.springframework.core.env.PropertySource; +import org.springframework.core.io.Resource; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; + +import java.io.IOException; +import java.util.List; + +/** + * yaml 读取配置 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022-05-30 21:22:12 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Configuration +@Slf4j +public class PostProcessorConfig implements EnvironmentPostProcessor { + + private final YamlPropertySourceLoader loader = new YamlPropertySourceLoader(); + + @Override + public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { + MutablePropertySources propertySources = environment.getPropertySources(); + this.loadProperty(propertySources); + } + + private void loadProperty(MutablePropertySources propertySources) { + PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); + try { + Resource[] resources = resolver.getResources("classpath*:sa-*.yaml"); + if (resources.length < 1) { + return; + } + for (Resource resource : resources) { + log.info("初始化系统配置:{}", resource.getFilename()); + List> load = loader.load(resource.getFilename(), resource); + load.forEach(propertySources::addLast); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + +} \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartRedisConfig.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/RedisConfig.java similarity index 90% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartRedisConfig.java rename to smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/RedisConfig.java index 829ca01f..7002d53d 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartRedisConfig.java +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/RedisConfig.java @@ -1,4 +1,4 @@ -package net.lab1024.smartadmin.config; +package net.lab1024.sa.common.config; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; @@ -12,17 +12,16 @@ import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; /** - * [ redis配置 ] + * redis配置 * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021-09-02 20:21:10 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ @Configuration -public class SmartRedisConfig { +public class RedisConfig { @Autowired private RedisConnectionFactory factory; @@ -70,5 +69,4 @@ public class SmartRedisConfig { return redisTemplate.opsForZSet(); } - } diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/ReloadConfig.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/ReloadConfig.java new file mode 100644 index 00000000..1c31dcec --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/ReloadConfig.java @@ -0,0 +1,38 @@ +package net.lab1024.sa.common.config; + +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.module.support.reload.ReloadCommand; +import net.lab1024.sa.common.module.support.reload.core.SmartReloadManager; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * reload配置 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021/9/1 21:40 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Slf4j +@Configuration +public class ReloadConfig { + + /** + * 间隔时间 + */ + @Value("${reload.interval-seconds}") + private Integer intervalSeconds; + + @Autowired + private ReloadCommand reloadCommand; + + @Bean + public SmartReloadManager initSmartReloadManager() { + // 创建 Reload Manager 调度器 + return new SmartReloadManager(reloadCommand,intervalSeconds); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/RepeatSubmitConfig.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/RepeatSubmitConfig.java new file mode 100644 index 00000000..fcfdd5ee --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/RepeatSubmitConfig.java @@ -0,0 +1,40 @@ +package net.lab1024.sa.common.config; + +import net.lab1024.sa.common.common.constant.StringConst; +import net.lab1024.sa.common.common.util.SmartRequestUtil; +import net.lab1024.sa.common.module.support.repeatsubmit.RepeatSubmitAspect; +import net.lab1024.sa.common.module.support.repeatsubmit.ticket.RepeatSubmitCaffeineTicket; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * 重复提交配置 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2021/10/9 18:47 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Configuration +public class RepeatSubmitConfig { + + @Bean + public RepeatSubmitAspect repeatSubmitAspect() { + RepeatSubmitCaffeineTicket caffeineTicket = new RepeatSubmitCaffeineTicket(this::ticket); + return new RepeatSubmitAspect(caffeineTicket); + } + + /** + * 获取指明某个用户的凭证 + * + * @return + */ + private String ticket(String servletPath) { + Long userId = SmartRequestUtil.getRequestUserId(); + if (null == userId) { + return StringConst.EMPTY; + } + return servletPath + "_" + userId; + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/RestTemplateConfig.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/RestTemplateConfig.java new file mode 100644 index 00000000..d14004c3 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/RestTemplateConfig.java @@ -0,0 +1,130 @@ +package net.lab1024.sa.common.config; + +import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; +import okhttp3.ConnectionPool; +import okhttp3.OkHttpClient; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.MediaType; +import org.springframework.http.client.OkHttp3ClientHttpRequestFactory; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.StringHttpMessageConverter; +import org.springframework.web.client.RestTemplate; + +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSocketFactory; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; +import java.nio.charset.StandardCharsets; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeUnit; + +/** + * http请求配置 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022-05-30 21:22:12 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Configuration +public class RestTemplateConfig { + + @Value("${http.pool.max-total}") + private Integer maxTotal; + + @Value("${http.pool.connect-timeout}") + private Integer connectTimeout; + + @Value("${http.pool.read-timeout}") + private Integer readTimeout; + + @Value("${http.pool.write-timeout}") + private Integer writeTimeout; + + @Value("${http.pool.keep-alive}") + private Integer keepAlive; + + @Bean + public RestTemplate restTemplate() { + RestTemplate restTemplate = new RestTemplate(); + restTemplate.setRequestFactory(this.clientHttpRequestFactory()); + List> messageConverterList = restTemplate.getMessageConverters(); + messageConverterList.add(0, new StringHttpMessageConverter(StandardCharsets.UTF_8)); + messageConverterList.addAll(this.converters()); + return restTemplate; + } + + public List> converters() { + List> converters = new ArrayList<>(); + HttpMessageConverter converter = new StringHttpMessageConverter(StandardCharsets.UTF_8); + FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); + List fastMediaTypes = new ArrayList<>(); + fastMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED); + fastMediaTypes.add(MediaType.APPLICATION_JSON); + fastConverter.setSupportedMediaTypes(fastMediaTypes); + converters.add(converter); + converters.add(fastConverter); + return converters; + } + + + public OkHttp3ClientHttpRequestFactory clientHttpRequestFactory() { + return new OkHttp3ClientHttpRequestFactory(httpClientBuilder()); + } + + public OkHttpClient httpClientBuilder() { + return new OkHttpClient.Builder() + .retryOnConnectionFailure(true) + .connectionPool(this.pool()) + .connectTimeout(connectTimeout, TimeUnit.MILLISECONDS) + .readTimeout(readTimeout, TimeUnit.MILLISECONDS) + .writeTimeout(writeTimeout, TimeUnit.MILLISECONDS) + .build(); + } + + public ConnectionPool pool() { + return new ConnectionPool(maxTotal, keepAlive, TimeUnit.MILLISECONDS); + } + + + @Bean + public X509TrustManager x509TrustManager() { + return new X509TrustManager() { + @Override + public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { + } + + @Override + public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { + } + + @Override + public X509Certificate[] getAcceptedIssuers() { + return new X509Certificate[0]; + } + }; + } + + @Bean + public SSLSocketFactory sslSocketFactory() { + try { + //信任任何链接 + SSLContext sslContext = SSLContext.getInstance("TLS"); + sslContext.init(null, new TrustManager[]{x509TrustManager()}, new SecureRandom()); + return sslContext.getSocketFactory(); + } catch (NoSuchAlgorithmException | KeyManagementException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/ScheduleConfig.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/ScheduleConfig.java new file mode 100644 index 00000000..a156a41b --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/ScheduleConfig.java @@ -0,0 +1,47 @@ +package net.lab1024.sa.common.config; + +import lombok.extern.slf4j.Slf4j; +import org.apache.logging.log4j.util.Strings; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.SchedulingConfigurer; +import org.springframework.scheduling.config.ScheduledTaskRegistrar; +import org.springframework.scheduling.config.Task; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 定时任务调度 配置 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022-05-30 21:22:12 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Slf4j +@Configuration +public class ScheduleConfig implements SchedulingConfigurer { + + private ScheduledTaskRegistrar taskRegistrar; + + @Override + public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { + this.taskRegistrar = taskRegistrar; + } + + public String destroy() { + List taskList = new ArrayList<>(); + taskList.addAll(taskRegistrar.getCronTaskList()); + taskList.addAll(taskRegistrar.getTriggerTaskList()); + taskList.addAll(taskRegistrar.getFixedDelayTaskList()); + taskList.addAll(taskRegistrar.getFixedRateTaskList()); + + taskRegistrar.destroy(); + + List taskNameList = taskList.stream().map(Task::toString).collect(Collectors.toList()); + return "已关闭 @Scheduled定时任务:" + taskNameList.size() + "个!"; + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/SwaggerConfig.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/SwaggerConfig.java new file mode 100644 index 00000000..901b9246 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/SwaggerConfig.java @@ -0,0 +1,206 @@ +package net.lab1024.sa.common.config; + +import com.google.common.base.Optional; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.collect.Lists; +import io.swagger.annotations.Api; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.common.constant.RequestHeaderConst; +import net.lab1024.sa.common.common.swagger.SwaggerApiModelPropertyEnumPlugin; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor; +import org.springframework.context.EnvironmentAware; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Conditional; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.Order; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RestController; +import springfox.documentation.RequestHandler; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.ParameterBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.schema.ModelRef; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.service.Contact; +import springfox.documentation.service.Parameter; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger.common.SwaggerPluginSupport; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 根据SwaggerTagConst内部类动态生成Swagger group + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2020-03-25 22:54:46 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Slf4j +@EnableSwagger2 +@Configuration +@Conditional(SystemEnvironmentConfig.class) +public class SwaggerConfig implements EnvironmentAware, BeanDefinitionRegistryPostProcessor { + + /** + * 文档标题 + */ + private String title; + + /** + * 文档描述 + */ + private String description; + + /** + * api版本 + */ + private String version; + + /** + * service url + */ + private String teamUrl; + + /** + * host + */ + private String host; + + private String tagClass; + + @Bean + @Order(SwaggerPluginSupport.SWAGGER_PLUGIN_ORDER + 1) + public SwaggerApiModelPropertyEnumPlugin swaggerEnum() { + return new SwaggerApiModelPropertyEnumPlugin(); + } + + @Override + public void setEnvironment(Environment environment) { + this.title = environment.getProperty("swagger.title"); + this.description = environment.getProperty("swagger.description"); + this.version = environment.getProperty("swagger.version"); + this.host = environment.getProperty("swagger.host"); + this.tagClass = environment.getProperty("swagger.tag-class"); + this.teamUrl = environment.getProperty("swagger.team-url"); + } + + @Override + public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) { + Map> groupMap = this.buildGroup(); + for (Map.Entry> entry : groupMap.entrySet()) { + String group = entry.getKey(); + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(Docket.class, () -> this.baseDocket(group, entry.getValue())); + BeanDefinition beanDefinition = builder.getRawBeanDefinition(); + registry.registerBeanDefinition(group + "Api", beanDefinition); + } + } + + @SneakyThrows + private Map> buildGroup() { + Class clazz = Class.forName(tagClass); + Class[] innerClazz = clazz.getClasses(); + Map> groupMap = new HashMap<>(16); + for (Class cls : innerClazz) { + String group = cls.getSimpleName(); + List apiTags = Lists.newArrayList(); + Field[] fields = cls.getDeclaredFields(); + for (Field field : fields) { + boolean isFinal = Modifier.isFinal(field.getModifiers()); + if (isFinal) { + apiTags.add(field.get(null).toString()); + } + } + groupMap.put(group, apiTags); + } + return groupMap; + } + + private Docket baseDocket(String groupName, List apiTagList) { + // 配置全局参数 + List parameterList = this.generateParameter(); + + Docket docket = new Docket(DocumentationType.SWAGGER_2).groupName(groupName) + .forCodeGeneration(true) + .select() + // 过滤规则 + .apis(this.getControllerPredicate(apiTagList)) + // 与 过滤规则 controller 包路径 二选一 + // .apis(RequestHandlerSelectors.basePackage(packAge)) + .paths(PathSelectors.any()) + .build().apiInfo(this.apiInfo()) + .globalOperationParameters(parameterList); + if (StringUtils.isNotBlank(host)) { + docket = docket.host(host); + } + return docket; + } + + private Predicate getControllerPredicate(List apiTagList) { + Predicate methodPredicate = (input) -> { + Api api = null; + Optional apiOptional = input.findControllerAnnotation(Api.class); + if (apiOptional.isPresent()) { + api = apiOptional.get(); + } + if (api == null) { + return false; + } + List tags = Arrays.asList(api.tags()); + if (apiTagList.containsAll(tags)) { + return true; + } + return false; + }; + Predicate controllerPredicate = Predicates.or(RequestHandlerSelectors.withClassAnnotation(RestController.class), RequestHandlerSelectors.withClassAnnotation(Controller.class)); + return Predicates.and(controllerPredicate, methodPredicate); + } + + private ApiInfo apiInfo() { + return new ApiInfoBuilder().title(title) + .description(description) + .version(version) + .termsOfServiceUrl(teamUrl) + .contact(new Contact("1024lab", teamUrl, "1024lab@sina.com")) + .build(); + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException { + + } + + /** + * 生成共用请求参数 + * + * @return + */ + private List generateParameter() { + // 配置全局参数 token + Parameter token = new ParameterBuilder().name(RequestHeaderConst.TOKEN) + .description("token") + .modelRef(new ModelRef("string")) + .parameterType("header").defaultValue("1") + .required(false) + .build(); + return Lists.newArrayList(token); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/SystemEnvironmentConfig.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/SystemEnvironmentConfig.java new file mode 100644 index 00000000..1af9577a --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/SystemEnvironmentConfig.java @@ -0,0 +1,49 @@ +package net.lab1024.sa.common.config; + +import net.lab1024.sa.common.common.domain.SystemEnvironment; +import net.lab1024.sa.common.common.enumeration.SystemEnvironmentEnum; +import net.lab1024.sa.common.common.util.SmartEnumUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Condition; +import org.springframework.context.annotation.ConditionContext; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.type.AnnotatedTypeMetadata; + +/** + * 系统环境 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021/08/13 18:56 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Configuration +public class SystemEnvironmentConfig implements Condition { + + @Value("${spring.profiles.active}") + private String systemEnvironment; + + @Value("${project.name}") + private String projectName; + + @Override + public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) { + String property = conditionContext.getEnvironment().getProperty("spring.profiles.active"); + return StringUtils.isNotBlank(property) && !SystemEnvironmentEnum.PROD.equalsValue(property); + } + + @Bean + public SystemEnvironment initEnvironment() { + SystemEnvironmentEnum currentEnvironment = SmartEnumUtil.getEnumByValue(systemEnvironment, SystemEnvironmentEnum.class); + if (currentEnvironment == null) { + throw new ExceptionInInitializerError("无法获取当前环境!请在 application.yaml 配置参数:spring.profiles.active"); + } + if (StringUtils.isBlank(projectName)) { + throw new ExceptionInInitializerError("无法获取当前项目名称!请在 application.yaml 配置参数:project.name"); + } + return new SystemEnvironment(currentEnvironment == SystemEnvironmentEnum.PROD, projectName, currentEnvironment); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/UrlConfig.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/UrlConfig.java new file mode 100644 index 00000000..bb86ccb8 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/UrlConfig.java @@ -0,0 +1,147 @@ +package net.lab1024.sa.common.config; + +import cn.hutool.core.util.StrUtil; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.common.annoation.NoNeedLogin; +import net.lab1024.sa.common.common.annoation.SaAuth; +import net.lab1024.sa.common.common.domain.RequestUrlVO; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.mvc.method.RequestMappingInfo; +import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; + +import java.lang.reflect.Method; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * url配置 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022-05-30 21:22:12 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Configuration +@Slf4j +public class UrlConfig { + @Autowired + private RequestMappingHandlerMapping requestMappingHandlerMapping; + + /** + * 获取每个方法的请求路径 + * + * @return + */ + @Bean + public Map> methodUrlMap() { + Map> methodUrlMap = Maps.newHashMap(); + //获取url与类和方法的对应信息 + Map map = requestMappingHandlerMapping.getHandlerMethods(); + for (Map.Entry entry : map.entrySet()) { + RequestMappingInfo requestMappingInfo = entry.getKey(); + Set urls = requestMappingInfo.getPatternsCondition().getPatterns(); + if (CollectionUtils.isEmpty(urls)) { + continue; + } + HandlerMethod handlerMethod = entry.getValue(); + methodUrlMap.put(handlerMethod.getMethod(), urls); + } + return methodUrlMap; + } + + /** + * 需要进行url权限校验的方法 + * + * @param methodUrlMap + * @return + */ + @Bean + public List authUrl(Map> methodUrlMap) { + List authUrlList = Lists.newArrayList(); + for (Map.Entry> entry : methodUrlMap.entrySet()) { + Method method = entry.getKey(); + SaAuth saAuth = method.getAnnotation(SaAuth.class); + if (null == saAuth) { + continue; + } + List requestUrlList = this.buildRequestUrl(method, entry.getValue()); + authUrlList.addAll(requestUrlList); + } + log.info("需要权限校验的URL:{}", authUrlList.stream().map(e -> e.getUrl()).collect(Collectors.toList())); + return authUrlList; + } + + private List buildRequestUrl(Method method, Set urlSet) { + List requestUrlList = Lists.newArrayList(); + if (CollectionUtils.isEmpty(urlSet)) { + return requestUrlList; + } + //url对应的方法名称 + String className = method.getDeclaringClass().getName(); + String methodName = method.getName(); + List list = StrUtil.split(className, "."); + String controllerName = list.get(list.size() - 1); + String name = controllerName + "." + methodName; + //swagger 说明信息 + String methodComment = null; + ApiOperation apiOperation = method.getAnnotation(ApiOperation.class); + if (apiOperation != null) { + methodComment = apiOperation.value(); + } + for (String url : urlSet) { + RequestUrlVO requestUrlVO = new RequestUrlVO(); + requestUrlVO.setUrl(url); + requestUrlVO.setName(name); + requestUrlVO.setComment(methodComment); + requestUrlList.add(requestUrlVO); + } + return requestUrlList; + } + + + /** + * 获取无需登录可以匿名访问的url信息 + * + * @return + */ + @Bean + public List noNeedLoginUrlList(Map> methodUrlMap) { + List noNeedLoginUrlList = Lists.newArrayList(); + for (Map.Entry> entry : methodUrlMap.entrySet()) { + Method method = entry.getKey(); + NoNeedLogin noNeedLogin = method.getAnnotation(NoNeedLogin.class); + if (null == noNeedLogin) { + continue; + } + noNeedLoginUrlList.addAll(entry.getValue()); + } + log.info("不需要登录的URL:{}", noNeedLoginUrlList); + return noNeedLoginUrlList; + } + + /** + * 获取忽略的url信息 + * + * @return + */ + @Bean + public List ignoreUrlList() { + List ignoreUrlList = Lists.newArrayList(); + ignoreUrlList.add("/swagger-ui.html"); + ignoreUrlList.add("/swagger-resources/**"); + ignoreUrlList.add("/webjars/**"); + ignoreUrlList.add("/*/api-docs"); + return ignoreUrlList; + } + +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/CacheKeyConst.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/CacheKeyConst.java new file mode 100644 index 00000000..ef91a805 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/CacheKeyConst.java @@ -0,0 +1,14 @@ +package net.lab1024.sa.common.constant; + +/** + * 缓存key常量 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022-05-30 21:22:12 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public class CacheKeyConst { + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/RedisKeyConst.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/RedisKeyConst.java new file mode 100644 index 00000000..9abb7afb --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/RedisKeyConst.java @@ -0,0 +1,31 @@ +package net.lab1024.sa.common.constant; + +/** + * redis key 常量类 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022-05-30 21:22:12 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public class RedisKeyConst { + + public static final String SEPARATOR = ":"; + + public static class Support { + + public static final String FILE_URL = "file:"; + + public static final String FILE_VO = "file-vo:"; + + public static final String SERIAL_NUMBER_LAST_INFO = "serial-number:last-info"; + + public static final String SERIAL_NUMBER = "serial-number:"; + + public static final String CAPTCHA = "captcha:"; + + public static final String TOKEN = "token:"; + + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/ReloadConst.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/ReloadConst.java new file mode 100644 index 00000000..4688f70b --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/ReloadConst.java @@ -0,0 +1,18 @@ +package net.lab1024.sa.common.constant; + +/** + * reload 项目 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-05-30 21:22:12 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public class ReloadConst { + + public static final String CONFIG_RELOAD = "config"; + + public static final String CACHE_SERVICE = "cache_service"; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/SwaggerTagConst.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/SwaggerTagConst.java new file mode 100644 index 00000000..ebc7bdb4 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/SwaggerTagConst.java @@ -0,0 +1,49 @@ +package net.lab1024.sa.common.constant; + +/** + * swagger + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022-05-30 21:22:12 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public class SwaggerTagConst { + + public static class Support { + + public static final String CACHE = "业务支撑-缓存"; + + public static final String CAPTCHA = "业务支撑-验证码"; + + public static final String OPERATE_LOG = "业务支撑-用户操作记录"; + + public static final String LOGIN_LOG = "业务支撑-登录日志"; + + public static final String RELOAD = "业务支撑-reload"; + + public static final String SERIAL_NUMBER = "业务支撑-id生成器"; + + public static final String HEART_BEAT = "业务支撑-服务心跳"; + + public static final String FILE = "业务支撑-文件服务"; + + public static final String CONFIG = "业务支撑-系统参数"; + + public static final String DATA_TRACER = "业务支撑-数据变动记录"; + + public static final String DICT = "业务支撑-数据字典"; + + public static final String CODE_GENERATOR = "业务支撑-代码生成"; + + public static final String CHANGE_LOG = "业务支撑-更新日志"; + + public static final String HELP_DOC = "业务支撑-帮助文档"; + + public static final String FEEDBACK = "业务支撑-意见反馈"; + + public static final String TABLE_COLUMN = "业务支撑-列自定义"; + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/UrlPrefixConst.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/UrlPrefixConst.java new file mode 100644 index 00000000..12c28934 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/UrlPrefixConst.java @@ -0,0 +1,18 @@ +package net.lab1024.sa.common.constant; + +/** + * url前缀 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021/10/03 20:48 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public class UrlPrefixConst { + + public static final String SUPPORT = "/support"; + + public static final String THIRD = "/third"; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/handler/GlobalExceptionHandler.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/handler/GlobalExceptionHandler.java new file mode 100644 index 00000000..66da1df0 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/handler/GlobalExceptionHandler.java @@ -0,0 +1,126 @@ +package net.lab1024.sa.common.handler; + +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.common.code.SystemErrorCode; +import net.lab1024.sa.common.common.code.UserErrorCode; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.domain.SystemEnvironment; +import net.lab1024.sa.common.common.exception.BusinessException; +import org.springframework.beans.TypeMismatchException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.converter.HttpMessageNotReadableException; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.validation.BindException; +import org.springframework.validation.FieldError; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * 全局异常拦截 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2020/8/25 21:57 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Slf4j +@ControllerAdvice +public class GlobalExceptionHandler { + + @Autowired + private SystemEnvironment systemEnvironment; + + /** + * json 格式错误 缺少请求体 + */ + @ResponseBody + @ExceptionHandler({HttpMessageNotReadableException.class}) + public ResponseDTO jsonFormatExceptionHandler(Exception e) { + if (!systemEnvironment.isProd()) { + log.error("全局JSON格式错误异常,URL:{}", getCurrentRequestUrl(), e); + } + return ResponseDTO.error(UserErrorCode.PARAM_ERROR, "参数JSON格式错误"); + } + + /** + * json 格式错误 缺少请求体 + */ + @ResponseBody + @ExceptionHandler({TypeMismatchException.class, BindException.class}) + public ResponseDTO paramExceptionHandler(Exception e) { + if (!systemEnvironment.isProd()) { + log.error("全局参数异常,URL:{}", getCurrentRequestUrl(), e); + } + + if (e instanceof BindException) { + if (e instanceof MethodArgumentNotValidException) { + List fieldErrors = ((MethodArgumentNotValidException) e).getBindingResult().getFieldErrors(); + List msgList = fieldErrors.stream().map(FieldError::getDefaultMessage).collect(Collectors.toList()); + return ResponseDTO.error(UserErrorCode.PARAM_ERROR, String.join(",", msgList)); + } + + List fieldErrors = ((BindException) e).getFieldErrors(); + List error = fieldErrors.stream().map(field -> field.getField() + ":" + field.getRejectedValue()).collect(Collectors.toList()); + String errorMsg = UserErrorCode.PARAM_ERROR.getMsg() + ":" + error; + return ResponseDTO.error(UserErrorCode.PARAM_ERROR, errorMsg); + } + + return ResponseDTO.error(UserErrorCode.PARAM_ERROR); + } + + /** + * 权限异常 + */ + @ResponseBody + @ExceptionHandler({AccessDeniedException.class}) + public ResponseDTO permissionExceptionHandler(AccessDeniedException e) { + return ResponseDTO.error(UserErrorCode.NO_PERMISSION); + } + + /** + * 业务异常 + */ + @ResponseBody + @ExceptionHandler(BusinessException.class) + public ResponseDTO businessExceptionHandler(BusinessException e) { + if (!systemEnvironment.isProd()) { + log.error("全局业务异常,URL:{}", getCurrentRequestUrl(), e); + } + return ResponseDTO.error(SystemErrorCode.SYSTEM_ERROR, e.getMessage()); + } + + /** + * 其他全部异常 + * + * @param e + * @return + */ + @ResponseBody + @ExceptionHandler(Throwable.class) + public ResponseDTO errorHandler(Throwable e) { + log.error("捕获全局异常,URL:{}", getCurrentRequestUrl(), e); + return ResponseDTO.error(SystemErrorCode.SYSTEM_ERROR, systemEnvironment.isProd() ? null : e.toString()); + } + + /** + * 获取当前请求url + */ + private String getCurrentRequestUrl() { + RequestAttributes request = RequestContextHolder.getRequestAttributes(); + if (null == request) { + return null; + } + ServletRequestAttributes servletRequest = (ServletRequestAttributes) request; + return servletRequest.getRequest().getRequestURI(); + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/listener/SmartApplicationListener.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/listener/SmartApplicationListener.java new file mode 100644 index 00000000..21cfb938 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/listener/SmartApplicationListener.java @@ -0,0 +1,54 @@ +package net.lab1024.sa.common.listener; + +import cn.hutool.core.net.NetUtil; +import cn.hutool.core.util.URLUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.web.context.WebServerApplicationContext; +import org.springframework.boot.web.context.WebServerInitializedEvent; +import org.springframework.boot.web.server.WebServer; +import org.springframework.context.ApplicationListener; +import org.springframework.core.annotation.Order; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +/** + * 启动监听器 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2021-12-23 23:45:26 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Slf4j +@Component +@Order(value = 1024) +public class SmartApplicationListener implements ApplicationListener { + + @Override + public void onApplicationEvent(WebServerInitializedEvent webServerInitializedEvent) { + WebServer server = webServerInitializedEvent.getWebServer(); + WebServerApplicationContext context = webServerInitializedEvent.getApplicationContext(); + Environment env = context.getEnvironment(); + //获取服务信息 + String ip = NetUtil.getLocalhost().getHostAddress(); + Integer port = server.getPort(); + String contextPath = env.getProperty("server.servlet.context-path"); + if (contextPath == null) { + contextPath = ""; + } + String profile = env.getProperty("spring.profiles.active"); + String projectName = env.getProperty("project.name"); + //拼接服务地址 + String title = String.format("-------------【%s】 service is running!current profile is 【%s】-------------", projectName, profile); + String localhostUrl = URLUtil.normalize(String.format("http://localhost:%d%s", port, contextPath), false, true); + String externalUrl = URLUtil.normalize(String.format("http://%s:%d%s", ip, port, contextPath), false, true); + String swaggerUrl = URLUtil.normalize(String.format("http://localhost:%d%s/swagger-ui.html", port, contextPath), false, true); + log.info("\n{}\n" + + "\tLocal:\t\t{}" + + "\n\tExternal:\t{}" + + "\n\tSwagger:\t{}" + + "\n-------------------------------------------------------------------------------------\n", + title, localhostUrl, externalUrl, swaggerUrl); + } +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/cache/CacheService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/cache/CacheService.java new file mode 100644 index 00000000..10e40f75 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/cache/CacheService.java @@ -0,0 +1,67 @@ +package net.lab1024.sa.common.module.support.cache; + +import com.google.common.collect.Lists; +import net.lab1024.sa.common.constant.ReloadConst; +import net.lab1024.sa.common.module.support.reload.core.annoation.SmartReload; +import org.springframework.cache.caffeine.CaffeineCache; +import org.springframework.cache.caffeine.CaffeineCacheManager; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * 缓存操作 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2021/10/11 20:07 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Service +public class CacheService { + + @Resource + private CaffeineCacheManager caffeineCacheManager; + + /** + * 获取所有缓存名称 + * + * @return + */ + public List cacheNames() { + return Lists.newArrayList(caffeineCacheManager.getCacheNames()); + } + + + /** + * 移除某个key + * + * @param cacheName + */ + @SmartReload(ReloadConst.CACHE_SERVICE) + public void removeCache(String cacheName) { + CaffeineCache cache = (CaffeineCache) caffeineCacheManager.getCache(cacheName); + if (cache != null) { + cache.clear(); + } + } + + /** + * 某个缓存下的所有key + * + * @param cacheName + * @return + */ + public List cacheKey(String cacheName) { + CaffeineCache cache = (CaffeineCache) caffeineCacheManager.getCache(cacheName); + if (cache == null) { + return Lists.newArrayList(); + } + Set cacheKey = cache.getNativeCache().asMap().keySet(); + return cacheKey.stream().map(e -> e.toString()).collect(Collectors.toList()); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/CaptchaController.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/CaptchaController.java new file mode 100644 index 00000000..47916db0 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/CaptchaController.java @@ -0,0 +1,36 @@ +package net.lab1024.sa.common.module.support.captcha; + + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.common.common.controller.SupportBaseController; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.constant.SwaggerTagConst; +import net.lab1024.sa.common.module.support.captcha.domain.CaptchaVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 图形验证码业务 + * + * @Author 1024创新实验室: 胡克 + * @Date 2021-09-02 20:21:10 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Api(tags = SwaggerTagConst.Support.CAPTCHA) +@RestController +public class CaptchaController extends SupportBaseController { + + @Autowired + private CaptchaService captchaService; + + @ApiOperation("获取图形验证码 @author 胡克") + @GetMapping("/captcha") + public ResponseDTO generateCaptcha() { + return ResponseDTO.ok(captchaService.generateCaptcha()); + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/CaptchaService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/CaptchaService.java new file mode 100644 index 00000000..36042c67 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/CaptchaService.java @@ -0,0 +1,115 @@ +package net.lab1024.sa.common.module.support.captcha; + +import com.google.code.kaptcha.impl.DefaultKaptcha; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.common.code.UserErrorCode; +import net.lab1024.sa.common.common.constant.StringConst; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.domain.SystemEnvironment; +import net.lab1024.sa.common.common.exception.BusinessException; +import net.lab1024.sa.common.constant.RedisKeyConst; +import net.lab1024.sa.common.module.support.captcha.domain.CaptchaForm; +import net.lab1024.sa.common.module.support.captcha.domain.CaptchaVO; +import net.lab1024.sa.common.module.support.redis.RedisService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.Base64Utils; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; +import java.util.Objects; +import java.util.UUID; + +/** + * 图形验证码 服务 + * + * @Author 1024创新实验室: 胡克 + * @Date 2021/8/31 20:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Slf4j +@Service +public class CaptchaService { + + /** + * 过期时间:65秒 + */ + private static final long EXPIRE_SECOND = 65L; + + @Autowired + private DefaultKaptcha defaultKaptcha; + @Autowired + private SystemEnvironment systemEnvironment; + @Autowired + private RedisService redisService; + + /** + * 生成图形验证码 + * 默认 1 分钟有效期 + * + * @return + */ + public CaptchaVO generateCaptcha() { + String captchaText = defaultKaptcha.createText(); + BufferedImage image = defaultKaptcha.createImage(captchaText); + + String base64Code; + try (ByteArrayOutputStream os = new ByteArrayOutputStream()) { + ImageIO.write(image, "jpg", os); + base64Code = Base64Utils.encodeToString(os.toByteArray()); + } catch (Exception e) { + log.error("generateCaptcha error:", e); + throw new BusinessException("生成验证码错误"); + } + + /** + * 返回验证码对象 + * 图片 base64格式 + */ + // uuid 唯一标识 + String uuid = UUID.randomUUID().toString().replace("-", StringConst.EMPTY); + + CaptchaVO captchaVO = new CaptchaVO(); + captchaVO.setCaptchaUuid(uuid); + captchaVO.setCaptchaBase64Image("data:image/png;base64," + base64Code); + captchaVO.setExpireSeconds(EXPIRE_SECOND); + if (!systemEnvironment.isProd()) { + captchaVO.setCaptchaText(captchaText); + } + String redisCaptchaKey = redisService.generateRedisKey(RedisKeyConst.Support.CAPTCHA, uuid); + redisService.set(redisCaptchaKey, captchaText, EXPIRE_SECOND); + return captchaVO; + } + + /** + * 校验图形验证码 + * + * @param captchaForm + * @return + */ + public ResponseDTO checkCaptcha(CaptchaForm captchaForm) { + if (StringUtils.isBlank(captchaForm.getCaptchaUuid()) || StringUtils.isBlank(captchaForm.getCaptchaCode())) { + return ResponseDTO.userErrorParam("请输入正确验证码"); + } + /** + * 1、校验redis里的验证码 + * 2、校验成功后,删除redis + */ + String redisCaptchaKey = redisService.generateRedisKey(RedisKeyConst.Support.CAPTCHA, captchaForm.getCaptchaUuid()); + String redisCaptchaCode = redisService.get(redisCaptchaKey); + if (StringUtils.isBlank(redisCaptchaCode)) { + return ResponseDTO.userErrorParam("验证码已过期,请刷新重试"); + } + if (!Objects.equals(redisCaptchaCode, captchaForm.getCaptchaCode())) { + return ResponseDTO.userErrorParam("验证码错误,请输入正确的验证码"); + } + // 删除已使用的验证码 + redisService.delete(redisCaptchaKey); + return ResponseDTO.ok(); + } + +} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/kaptcha/KaptchaColor.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaColor.java similarity index 73% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/kaptcha/KaptchaColor.java rename to smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaColor.java index 4baeb2a2..4dd96c13 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/kaptcha/KaptchaColor.java +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaColor.java @@ -1,4 +1,4 @@ -package net.lab1024.smartadmin.common.kaptcha; +package net.lab1024.sa.common.module.support.captcha.config; import com.google.common.collect.Lists; @@ -7,16 +7,15 @@ import java.util.List; import java.util.Random; /** - * [ 验证码颜色 ] + * 验证码颜色 * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/7/6 0006 上午 10:51 - * @since JDK1.8 + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021-09-02 20:21:10 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ -public class KaptchaColor { +public class CaptchaColor { public static Color getColor() { diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartKaptchaConfig.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaConfig.java similarity index 60% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartKaptchaConfig.java rename to smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaConfig.java index 06dd1c95..6a315072 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartKaptchaConfig.java +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaConfig.java @@ -1,7 +1,5 @@ -package net.lab1024.smartadmin.config; +package net.lab1024.sa.common.module.support.captcha.config; -import net.lab1024.smartadmin.common.kaptcha.KaptchaNoise; -import net.lab1024.smartadmin.common.kaptcha.KaptchaWordRenderer; import com.google.code.kaptcha.impl.DefaultKaptcha; import com.google.code.kaptcha.util.Config; import org.springframework.context.annotation.Bean; @@ -10,27 +8,26 @@ import org.springframework.context.annotation.Configuration; import java.util.Properties; /** - * [ 验证码配置 ] + * 验证码配置 * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/7/4 0004 上午 9:40 - * @since JDK1.8 + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021-09-02 20:21:10 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ @Configuration -public class SmartKaptchaConfig { +public class CaptchaConfig { @Bean - public DefaultKaptcha getDefaultKaptcha(){ - DefaultKaptcha defaultKaptcha=new DefaultKaptcha(); - Properties properties=new Properties(); + public DefaultKaptcha getDefaultKaptcha() { + DefaultKaptcha defaultKaptcha = new DefaultKaptcha(); + Properties properties = new Properties(); properties.setProperty("kaptcha.border", "no"); properties.setProperty("kaptcha.border.color", "34,114,200"); properties.setProperty("kaptcha.image.width", "125"); properties.setProperty("kaptcha.image.height", "45"); - properties.setProperty("kaptcha.textproducer.char.string", "0123456789"); + properties.setProperty("kaptcha.textproducer.char.string", "123456789"); properties.setProperty("kaptcha.textproducer.char.length", "4"); properties.setProperty("kaptcha.textproducer.font.names", "Arial,Arial Narrow,Serif,Helvetica,Tahoma,Times New Roman,Verdana"); properties.setProperty("kaptcha.textproducer.font.size", "38"); @@ -38,10 +35,10 @@ public class SmartKaptchaConfig { properties.setProperty("kaptcha.background.clear.from", "white"); properties.setProperty("kaptcha.background.clear.to", "white"); - properties.setProperty("kaptcha.word.impl", KaptchaWordRenderer.class.getName()); - properties.setProperty("kaptcha.noise.impl", KaptchaNoise.class.getName()); + properties.setProperty("kaptcha.word.impl", CaptchaWordRenderer.class.getName()); + properties.setProperty("kaptcha.noise.impl", CaptchaNoise.class.getName()); - Config config=new Config(properties); + Config config = new Config(properties); defaultKaptcha.setConfig(config); return defaultKaptcha; } diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/kaptcha/KaptchaNoise.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaNoise.java similarity index 62% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/kaptcha/KaptchaNoise.java rename to smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaNoise.java index 22238a6c..36f773d5 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/kaptcha/KaptchaNoise.java +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaNoise.java @@ -1,4 +1,4 @@ -package net.lab1024.smartadmin.common.kaptcha; +package net.lab1024.sa.common.module.support.captcha.config; import com.google.code.kaptcha.NoiseProducer; import com.google.code.kaptcha.util.Configurable; @@ -8,17 +8,17 @@ import java.awt.image.BufferedImage; import java.util.Random; /** - * [ 验证码加噪处理 ] + * 验证码加噪处理 * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/7/6 0006 上午 10:47 - * @since JDK1.8 + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021-09-02 20:21:10 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ -public class KaptchaNoise extends Configurable implements NoiseProducer { - public KaptchaNoise() { +public class CaptchaNoise extends Configurable implements NoiseProducer { + + public CaptchaNoise() { } @Override @@ -26,16 +26,16 @@ public class KaptchaNoise extends Configurable implements NoiseProducer { int width = image.getWidth(); int height = image.getHeight(); - Graphics2D graph = (Graphics2D)image.getGraphics(); + Graphics2D graph = (Graphics2D) image.getGraphics(); graph.setRenderingHints(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)); graph.setStroke(new BasicStroke(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL)); Random random = new Random(); int noiseLineNum = random.nextInt(3); - if(noiseLineNum == 0){ + if (noiseLineNum == 0) { noiseLineNum = 1; } - for (int i = 0; i < noiseLineNum; i++){ - graph.setColor(KaptchaColor.getColor()); + for (int i = 0; i < noiseLineNum; i++) { + graph.setColor(CaptchaColor.getColor()); graph.drawLine(random.nextInt(width), random.nextInt(height), 10 + random.nextInt(20), 10 + random.nextInt(20)); } diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/kaptcha/KaptchaWordRenderer.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaWordRenderer.java similarity index 75% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/kaptcha/KaptchaWordRenderer.java rename to smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaWordRenderer.java index 38ff1b4c..23b2278e 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/kaptcha/KaptchaWordRenderer.java +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaWordRenderer.java @@ -1,5 +1,6 @@ -package net.lab1024.smartadmin.common.kaptcha; +package net.lab1024.sa.common.module.support.captcha.config; +import com.google.code.kaptcha.text.WordRenderer; import com.google.code.kaptcha.util.Configurable; import java.awt.*; @@ -9,18 +10,17 @@ import java.awt.image.BufferedImage; import java.util.Random; /** - * [ 验证码字体生成 ] + * 验证码字体生成 * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/7/6 0006 上午 9:43 - * @since JDK1.8 + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021-09-02 20:21:10 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ -public class KaptchaWordRenderer extends Configurable implements com.google.code.kaptcha.text.WordRenderer { +public class CaptchaWordRenderer extends Configurable implements WordRenderer { - public KaptchaWordRenderer() { + public CaptchaWordRenderer() { } @Override @@ -46,11 +46,11 @@ public class KaptchaWordRenderer extends Configurable implements com.google.code int widthNeeded = 0; int startPosX; - for(startPosX = 0; startPosX < wordChars.length; ++startPosX) { + for (startPosX = 0; startPosX < wordChars.length; ++startPosX) { chosenFonts[startPosX] = fonts[random.nextInt(fonts.length)]; char[] charToDraw = new char[]{wordChars[startPosX]}; GlyphVector gv = chosenFonts[startPosX].createGlyphVector(frc, charToDraw); - charWidths[startPosX] = (int)gv.getVisualBounds().getWidth(); + charWidths[startPosX] = (int) gv.getVisualBounds().getWidth(); if (startPosX > 0) { widthNeeded += 2; } @@ -60,8 +60,8 @@ public class KaptchaWordRenderer extends Configurable implements com.google.code startPosX = (width - widthNeeded) / 2; - for(int i = 0; i < wordChars.length; ++i) { - g2D.setColor(KaptchaColor.getColor()); + for (int i = 0; i < wordChars.length; ++i) { + g2D.setColor(CaptchaColor.getColor()); g2D.setFont(chosenFonts[i].deriveFont(Font.PLAIN)); char[] charToDraw = new char[]{wordChars[i]}; g2D.drawChars(charToDraw, 0, charToDraw.length, startPosX, startPosY); @@ -71,5 +71,4 @@ public class KaptchaWordRenderer extends Configurable implements com.google.code return image; } - } diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/domain/CaptchaForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/domain/CaptchaForm.java new file mode 100644 index 00000000..5d2d21c7 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/domain/CaptchaForm.java @@ -0,0 +1,28 @@ +package net.lab1024.sa.common.module.support.captcha.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * 图形验证码 表单 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021-09-02 20:21:10 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ + +@Data +public class CaptchaForm { + + @ApiModelProperty(value = "验证码") + @NotBlank(message = "验证码不能为空") + private String captchaCode; + + @ApiModelProperty(value = "验证码uuid标识") + @NotBlank(message = "验证码uuid标识不能为空") + private String captchaUuid; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/domain/CaptchaVO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/domain/CaptchaVO.java new file mode 100644 index 00000000..cee66da6 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/domain/CaptchaVO.java @@ -0,0 +1,29 @@ +package net.lab1024.sa.common.module.support.captcha.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 图形验证码 VO + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021/8/31 20:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class CaptchaVO { + + @ApiModelProperty("验证码唯一标识") + private String captchaUuid; + + @ApiModelProperty("验证码图片内容-生产环境无效") + private String captchaText; + + @ApiModelProperty("验证码Base64图片") + private String captchaBase64Image; + + @ApiModelProperty("过期时间(秒)") + private Long expireSeconds; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/constant/ChangeLogTypeEnum.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/constant/ChangeLogTypeEnum.java new file mode 100644 index 00000000..e57ad480 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/constant/ChangeLogTypeEnum.java @@ -0,0 +1,28 @@ +package net.lab1024.sa.common.module.support.changelog.constant; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import net.lab1024.sa.common.common.enumeration.BaseEnum; + +/** + * 更新类型:[1:特大版本功能更新;2:功能更新;3:bug修复] + * + * @Author 卓大 + * @Date 2022-09-26T14:53:50 + * @Copyright 1024创新实验室 + */ + +@AllArgsConstructor +@Getter +public enum ChangeLogTypeEnum implements BaseEnum { + + MAJOR_UPDATE(1, "重大更新"), + FUNCTION_UPDATE(2, "功能更新"), + BUG_FIX(3, "Bug修复"), + + ; + + private final Integer value; + + private final String desc; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/controller/ChangeLogController.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/controller/ChangeLogController.java new file mode 100644 index 00000000..775f3bc4 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/controller/ChangeLogController.java @@ -0,0 +1,38 @@ +package net.lab1024.sa.common.module.support.changelog.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.constant.SwaggerTagConst; +import net.lab1024.sa.common.module.support.changelog.domain.form.ChangeLogQueryForm; +import net.lab1024.sa.common.module.support.changelog.domain.vo.ChangeLogVO; +import net.lab1024.sa.common.module.support.changelog.service.ChangeLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.Valid; + +/** + * 系统更新日志 Controller + * + * @Author 卓大 + * @Date 2022-09-26 14:53:50 + * @Copyright 1024创新实验室 + */ + +@RestController +@Api(tags = SwaggerTagConst.Support.CHANGE_LOG) +public class ChangeLogController { + + @Autowired + private ChangeLogService changeLogService; + + @ApiOperation("分页查询 @author 卓大") + @PostMapping("/changeLog/queryPage") + public ResponseDTO> queryPage(@RequestBody @Valid ChangeLogQueryForm queryForm) { + return ResponseDTO.ok(changeLogService.queryPage(queryForm)); + } +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/dao/ChangeLogDao.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/dao/ChangeLogDao.java new file mode 100644 index 00000000..157eeccc --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/dao/ChangeLogDao.java @@ -0,0 +1,44 @@ +package net.lab1024.sa.common.module.support.changelog.dao; + +import java.util.List; + +import net.lab1024.sa.common.module.support.changelog.domain.form.ChangeLogQueryForm; +import net.lab1024.sa.common.module.support.changelog.domain.vo.ChangeLogVO; +import net.lab1024.sa.common.module.support.changelog.domain.entity.ChangeLogEntity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +/** + * 系统更新日志 Dao + * + * @Author 卓大 + * @Date 2022-09-26 14:53:50 + * @Copyright 1024创新实验室 + */ + +@Mapper +@Component +public interface ChangeLogDao extends BaseMapper { + + /** + * 分页 查询 + * + * @param page + * @param queryForm + * @return + */ + List queryPage(Page page, @Param("queryForm") ChangeLogQueryForm queryForm); + + /** + * 根据版本查询 ChangeLog + * + * @param version + * @return + */ + ChangeLogEntity selectByVersion(@Param("version") String version); + + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/entity/ChangeLogEntity.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/entity/ChangeLogEntity.java new file mode 100644 index 00000000..5773f412 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/entity/ChangeLogEntity.java @@ -0,0 +1,68 @@ +package net.lab1024.sa.common.module.support.changelog.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.time.LocalDate; +import java.time.LocalDateTime; +import lombok.Data; + +/** + * 系统更新日志 + * + * @Author 卓大 + * @Date 2022-09-26 14:53:50 + * @Copyright 1024创新实验室 + */ + +@Data +@TableName("t_change_log") +public class ChangeLogEntity { + + /** + * 更新日志id + */ + @TableId(type = IdType.AUTO) + private Long changeLogId; + + /** + * 版本 + */ + private String version; + + /** + * 更新类型:[1:特大版本功能更新;2:功能更新;3:bug修复] + */ + private Integer type; + + /** + * 发布人 + */ + private String publishAuthor; + + /** + * 发布日期 + */ + private LocalDate publicDate; + + /** + * 更新内容 + */ + private String content; + + /** + * 跳转链接 + */ + private String link; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; + +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/form/ChangeLogAddForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/form/ChangeLogAddForm.java new file mode 100644 index 00000000..ad552338 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/form/ChangeLogAddForm.java @@ -0,0 +1,46 @@ +package net.lab1024.sa.common.module.support.changelog.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import java.time.LocalDate; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; +import net.lab1024.sa.common.common.validator.enumeration.CheckEnum; +import net.lab1024.sa.common.module.support.changelog.constant.ChangeLogTypeEnum; + +/** + * 系统更新日志 新建表单 + * + * @Author 卓大 + * @Date 2022-09-26 14:53:50 + * @Copyright 1024创新实验室 + */ + +@Data +public class ChangeLogAddForm { + + @ApiModelProperty(value = "版本", required = true) + @NotBlank(message = "版本 不能为空") + private String version; + + @ApiModelPropertyEnum(value = ChangeLogTypeEnum.class, desc = "更新类型:[1:特大版本功能更新;2:功能更新;3:bug修复]") + @CheckEnum(value = ChangeLogTypeEnum.class, message = "更新类型:[1:特大版本功能更新;2:功能更新;3:bug修复] 错误", required = true) + private Integer type; + + @ApiModelProperty(value = "发布人", required = true) + @NotBlank(message = "发布人 不能为空") + private String publishAuthor; + + @ApiModelProperty(value = "发布日期", required = true) + @NotNull(message = "发布日期 不能为空") + private LocalDate publicDate; + + @ApiModelProperty(value = "更新内容", required = true) + @NotBlank(message = "更新内容 不能为空") + private String content; + + @ApiModelProperty(value = "跳转链接") + private String link; + +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/form/ChangeLogQueryForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/form/ChangeLogQueryForm.java new file mode 100644 index 00000000..393c4c69 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/form/ChangeLogQueryForm.java @@ -0,0 +1,42 @@ +package net.lab1024.sa.common.module.support.changelog.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.domain.PageParam; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; +import net.lab1024.sa.common.common.validator.enumeration.CheckEnum; +import net.lab1024.sa.common.module.support.changelog.constant.ChangeLogTypeEnum; + +import java.time.LocalDate; + +/** + * 系统更新日志 查询 + * + * @Author 卓大 + * @Date 2022-09-26 14:53:50 + * @Copyright 1024创新实验室 + */ + +@Data +public class ChangeLogQueryForm extends PageParam{ + + @ApiModelPropertyEnum(value = ChangeLogTypeEnum.class, desc = "更新类型:[1:特大版本功能更新;2:功能更新;3:bug修复]") + @CheckEnum(value = ChangeLogTypeEnum.class, message = "更新类型:[1:特大版本功能更新;2:功能更新;3:bug修复] 错误") + private Integer type; + + @ApiModelProperty(value = "关键字") + private String keyword; + + @ApiModelProperty(value = "发布日期") + private LocalDate publicDateBegin; + + @ApiModelProperty(value = "发布日期") + private LocalDate publicDateEnd; + + @ApiModelProperty(value = "创建时间") + private LocalDate createTime; + + @ApiModelProperty(value = "跳转链接") + private String link; + +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/form/ChangeLogUpdateForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/form/ChangeLogUpdateForm.java new file mode 100644 index 00000000..1a3c4363 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/form/ChangeLogUpdateForm.java @@ -0,0 +1,50 @@ +package net.lab1024.sa.common.module.support.changelog.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import java.time.LocalDate; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; +import net.lab1024.sa.common.common.validator.enumeration.CheckEnum; +import net.lab1024.sa.common.module.support.changelog.constant.ChangeLogTypeEnum; + +/** + * 系统更新日志 更新表单 + * + * @Author 卓大 + * @Date 2022-09-26 14:53:50 + * @Copyright 1024创新实验室 + */ + +@Data +public class ChangeLogUpdateForm { + + @ApiModelProperty(value = "更新日志id", required = true) + @NotNull(message = "更新日志id 不能为空") + private Long changeLogId; + + @ApiModelProperty(value = "版本", required = true) + @NotBlank(message = "版本 不能为空") + private String version; + + @ApiModelPropertyEnum(value = ChangeLogTypeEnum.class, desc = "更新类型:[1:特大版本功能更新;2:功能更新;3:bug修复]") + @CheckEnum(value = ChangeLogTypeEnum.class, message = "更新类型:[1:特大版本功能更新;2:功能更新;3:bug修复] 错误", required = true) + private Integer type; + + @ApiModelProperty(value = "发布人", required = true) + @NotBlank(message = "发布人 不能为空") + private String publishAuthor; + + @ApiModelProperty(value = "发布日期", required = true) + @NotNull(message = "发布日期 不能为空") + private LocalDate publicDate; + + @ApiModelProperty(value = "更新内容", required = true) + @NotBlank(message = "更新内容 不能为空") + private String content; + + @ApiModelProperty(value = "跳转链接") + private String link; + +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/vo/ChangeLogVO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/vo/ChangeLogVO.java new file mode 100644 index 00000000..cf147c7c --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/vo/ChangeLogVO.java @@ -0,0 +1,49 @@ +package net.lab1024.sa.common.module.support.changelog.domain.vo; + +import io.swagger.annotations.ApiModelProperty; + +import java.time.LocalDate; +import java.time.LocalDateTime; + +import lombok.Data; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; +import net.lab1024.sa.common.module.support.changelog.constant.ChangeLogTypeEnum; + +/** + * 系统更新日志 列表VO + * + * @Author 卓大 + * @Date 2022-09-26 14:53:50 + * @Copyright 1024创新实验室 + */ + +@Data +public class ChangeLogVO { + + private Long changeLogId; + + @ApiModelProperty(value = "版本") + private String version; + + @ApiModelPropertyEnum(value = ChangeLogTypeEnum.class, desc = "更新类型:[1:特大版本功能更新;2:功能更新;3:bug修复]") + private Integer type; + + @ApiModelProperty(value = "发布人") + private String publishAuthor; + + @ApiModelProperty(value = "发布日期") + private LocalDate publicDate; + + @ApiModelProperty(value = "更新内容") + private String content; + + @ApiModelProperty(value = "跳转链接") + private String link; + + @ApiModelProperty(value = "创建时间") + private LocalDateTime createTime; + + @ApiModelProperty(value = "更新时间") + private LocalDateTime updateTime; + +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/manager/ChangeLogManager.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/manager/ChangeLogManager.java new file mode 100644 index 00000000..ee90a6b2 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/manager/ChangeLogManager.java @@ -0,0 +1,20 @@ +package net.lab1024.sa.common.module.support.changelog.manager; + +import net.lab1024.sa.common.module.support.changelog.dao.ChangeLogDao; +import net.lab1024.sa.common.module.support.changelog.domain.entity.ChangeLogEntity; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * 系统更新日志 Manager + * + * @Author 卓大 + * @Date 2022-09-26 14:53:50 + * @Copyright 1024创新实验室 + */ +@Service +public class ChangeLogManager extends ServiceImpl { + + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/service/ChangeLogService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/service/ChangeLogService.java new file mode 100644 index 00000000..a8d95e2f --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/service/ChangeLogService.java @@ -0,0 +1,103 @@ +package net.lab1024.sa.common.module.support.changelog.service; + +import java.util.List; + +import net.lab1024.sa.common.module.support.changelog.dao.ChangeLogDao; +import net.lab1024.sa.common.module.support.changelog.domain.entity.ChangeLogEntity; +import net.lab1024.sa.common.module.support.changelog.domain.form.ChangeLogAddForm; +import net.lab1024.sa.common.module.support.changelog.domain.form.ChangeLogQueryForm; +import net.lab1024.sa.common.module.support.changelog.domain.form.ChangeLogUpdateForm; +import net.lab1024.sa.common.module.support.changelog.domain.vo.ChangeLogVO; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import net.lab1024.sa.common.common.util.SmartPageUtil; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.domain.PageResult; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * 系统更新日志 Service + * + * @Author 卓大 + * @Date 2022-09-26 14:53:50 + * @Copyright 1024创新实验室 + */ + +@Service +public class ChangeLogService { + + @Autowired + private ChangeLogDao changeLogDao; + + /** + * 分页查询 + * + * @param queryForm + * @return + */ + public PageResult queryPage(ChangeLogQueryForm queryForm) { + Page page = SmartPageUtil.convert2PageQuery(queryForm); + List list = changeLogDao.queryPage(page, queryForm); + PageResult pageResult = SmartPageUtil.convert2PageResult(page, list); + return pageResult; + } + + /** + * 添加 + */ + public synchronized ResponseDTO add(ChangeLogAddForm addForm) { + ChangeLogEntity existVersion = changeLogDao.selectByVersion(addForm.getVersion()); + if (existVersion != null) { + return ResponseDTO.userErrorParam("此版本已经存在"); + } + + ChangeLogEntity changeLogEntity = SmartBeanUtil.copy(addForm, ChangeLogEntity.class); + changeLogDao.insert(changeLogEntity); + return ResponseDTO.ok(); + } + + /** + * 更新 + * + * @param updateForm + * @return + */ + public synchronized ResponseDTO update(ChangeLogUpdateForm updateForm) { + ChangeLogEntity existVersion = changeLogDao.selectByVersion(updateForm.getVersion()); + if (existVersion != null && !updateForm.getChangeLogId().equals(existVersion.getChangeLogId())) { + return ResponseDTO.userErrorParam("此版本已经存在"); + } + ChangeLogEntity changeLogEntity = SmartBeanUtil.copy(updateForm, ChangeLogEntity.class); + changeLogDao.updateById(changeLogEntity); + return ResponseDTO.ok(); + } + + /** + * 批量删除 + * + * @param idList + * @return + */ + public synchronized ResponseDTO batchDelete(List idList) { + if (CollectionUtils.isEmpty(idList)) { + return ResponseDTO.ok(); + } + + changeLogDao.deleteBatchIds(idList); + return ResponseDTO.ok(); + } + + /** + * 单个删除 + */ + public synchronized ResponseDTO delete(Long changeLogId) { + if (null == changeLogId) { + return ResponseDTO.ok(); + } + + changeLogDao.deleteById(changeLogId); + return ResponseDTO.ok(); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeDeleteEnum.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeDeleteEnum.java new file mode 100644 index 00000000..c5308601 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeDeleteEnum.java @@ -0,0 +1,38 @@ +package net.lab1024.sa.common.module.support.codegenerator.constant; + +import net.lab1024.sa.common.common.enumeration.BaseEnum; + +/** + * 删除类型 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-06-30 22:15:38 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public enum CodeDeleteEnum implements BaseEnum { + + SINGLE("Single", "单个删除"), + BATCH("Batch", "批量删除"), + SINGLE_AND_BATCH("SingleAndBatch", "单个和批量删除"); + + private String value; + + private String desc; + + CodeDeleteEnum(String value, String desc) { + this.value = value; + this.desc = desc; + } + + @Override + public Object getValue() { + return value; + } + + @Override + public String getDesc() { + return desc; + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeFrontComponentEnum.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeFrontComponentEnum.java new file mode 100644 index 00000000..ee94ab74 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeFrontComponentEnum.java @@ -0,0 +1,52 @@ +package net.lab1024.sa.common.module.support.codegenerator.constant; + +import net.lab1024.sa.common.common.enumeration.BaseEnum; + +/** + * 前端组件类型 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-06-30 20:15:38 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public enum CodeFrontComponentEnum implements BaseEnum { + + INPUT("Input", "输入框"), + + INPUT_NUMBER("InputNumber", "数字输入框"), + + TEXTAREA("Textarea", " 文本"), + + BOOLEAN_SELECT("BooleanSelect", "布尔下拉框"), + + ENUM_SELECT("SmartEnumSelect", "枚举下拉"), + + DICT_SELECT("DictSelect", "字典下拉"), + + DATE("Date", "日期选择"), + + DATE_TIME("DateTime", "时间选择"), + + FILE_UPLOAD("FileUpload", "文件上传"); + + private String value; + + private String desc; + + CodeFrontComponentEnum(String value, String desc) { + this.value = value; + this.desc = desc; + } + + @Override + public Object getValue() { + return value; + } + + @Override + public String getDesc() { + return desc; + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeGeneratorConstant.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeGeneratorConstant.java new file mode 100644 index 00000000..dccdf337 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeGeneratorConstant.java @@ -0,0 +1,30 @@ +package net.lab1024.sa.common.module.support.codegenerator.constant; + +/** + * 常量 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022-06-30 22:15:38 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public class CodeGeneratorConstant { + + /** + * 主键 + */ + public final static String PRIMARY_KEY = "PRI"; + + /** + * 自增 + */ + public final static String AUTO_INCREMENT = "auto_increment"; + + /** + * 默认逻辑删除字段名称 + */ + public static String DELETED_FLAG = "deleted_flag"; + + +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeGeneratorPageTypeEnum.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeGeneratorPageTypeEnum.java new file mode 100644 index 00000000..4a33e00a --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeGeneratorPageTypeEnum.java @@ -0,0 +1,38 @@ +package net.lab1024.sa.common.module.support.codegenerator.constant; + +import net.lab1024.sa.common.common.enumeration.BaseEnum; + +/** + * 页面类型 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-06-29 19:11:22 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public enum CodeGeneratorPageTypeEnum implements BaseEnum { + + MODAL("modal", "弹窗"), + DRAWER("drawer", "抽屉"), + PAGE("page", "新页面"); + + private String value; + + private String desc; + + CodeGeneratorPageTypeEnum(String value, String desc) { + this.value = value; + this.desc = desc; + } + + @Override + public Object getValue() { + return value; + } + + @Override + public String getDesc() { + return desc; + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeQueryFieldQueryTypeEnum.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeQueryFieldQueryTypeEnum.java new file mode 100644 index 00000000..e68d811d --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeQueryFieldQueryTypeEnum.java @@ -0,0 +1,43 @@ +package net.lab1024.sa.common.module.support.codegenerator.constant; + +import net.lab1024.sa.common.common.enumeration.BaseEnum; + +/** + * 查询条件类型 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-06-29 20:23:46 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public enum CodeQueryFieldQueryTypeEnum implements BaseEnum { + + LIKE("Like", "模糊查询"), + EQUAL("Equal", "等于"), + DATE_RANGE("DateRange", "日期范围"), + DATE("Date", "指定日期"), + ENUM("Enum", "枚举"), + + DICT("Dict", "字典"), + ; + + private String value; + + private String desc; + + CodeQueryFieldQueryTypeEnum(String value, String desc) { + this.value = value; + this.desc = desc; + } + + @Override + public Object getValue() { + return value; + } + + @Override + public String getDesc() { + return desc; + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/controller/CodeGeneratorController.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/controller/CodeGeneratorController.java new file mode 100644 index 00000000..93cf4551 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/controller/CodeGeneratorController.java @@ -0,0 +1,106 @@ +package net.lab1024.sa.common.module.support.codegenerator.controller; + +import com.alibaba.fastjson.JSON; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.common.common.controller.SupportBaseController; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.constant.SwaggerTagConst; +import net.lab1024.sa.common.module.support.codegenerator.domain.form.CodeGeneratorConfigForm; +import net.lab1024.sa.common.module.support.codegenerator.domain.form.CodeGeneratorPreviewForm; +import net.lab1024.sa.common.module.support.codegenerator.domain.form.TableQueryForm; +import net.lab1024.sa.common.module.support.codegenerator.domain.vo.TableColumnVO; +import net.lab1024.sa.common.module.support.codegenerator.domain.vo.TableConfigVO; +import net.lab1024.sa.common.module.support.codegenerator.domain.vo.TableVO; +import net.lab1024.sa.common.module.support.codegenerator.service.CodeGeneratorService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 代码生成 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-06-29 20:23:46 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Api(tags = SwaggerTagConst.Support.CODE_GENERATOR) +@Controller +public class CodeGeneratorController extends SupportBaseController { + + @Autowired + private CodeGeneratorService codeGeneratorService; + + // ------------------- 查询 ------------------- + @ApiOperation("获取表的列 @author 卓大") + @GetMapping("/codeGenerator/table/getTableColumns/{table}") + @ResponseBody + public ResponseDTO> getTableColumns(@PathVariable String table) { + return ResponseDTO.ok(codeGeneratorService.getTableColumns(table)); + } + + @ApiOperation("查询数据库的表 @author 卓大") + @PostMapping("/codeGenerator/table/queryTableList") + @ResponseBody + public ResponseDTO> queryTableList(@RequestBody @Valid TableQueryForm tableQueryForm) { + return ResponseDTO.ok(codeGeneratorService.queryTableList(tableQueryForm)); + } + + // ------------------- 配置 ------------------- + + @ApiOperation("获取表的配置信息 @author 卓大") + @GetMapping("/codeGenerator/table/getConfig/{table}") + @ResponseBody + public ResponseDTO getTableConfig(@PathVariable String table) { + return ResponseDTO.ok(codeGeneratorService.getTableConfig(table)); + } + + @ApiOperation("更新配置信息 @author 卓大") + @PostMapping("/codeGenerator/table/updateConfig") + @ResponseBody + public ResponseDTO updateConfig(@RequestBody @Valid CodeGeneratorConfigForm form) { + return codeGeneratorService.updateConfig(form); + } + + // ------------------- 生成 ------------------- + + @ApiOperation("代码预览 @author 卓大") + @PostMapping("/codeGenerator/code/preview") + @ResponseBody + public ResponseDTO preview(@RequestBody @Valid CodeGeneratorPreviewForm form) { + return codeGeneratorService.preview(form); + } + + @ApiOperation("代码下载 @author 卓大") + @GetMapping(value = "/codeGenerator/code/download/{tableName}", produces = "application/octet-stream") + public ResponseEntity download(@PathVariable String tableName) { + + ResponseDTO download = codeGeneratorService.download(tableName); + + if (download.getOk()) { + HttpHeaders heads = new HttpHeaders(); + heads.add(HttpHeaders.CONTENT_TYPE, "application/octet-stream; charset=UTF-8"); + heads.add(HttpHeaders.CONTENT_LENGTH, "" + download.getData().length); + heads.add(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + tableName + "-code.zip"); + ResponseEntity responseEntity = new ResponseEntity<>(download.getData(), heads, HttpStatus.OK); + return responseEntity; + } else { + byte[] data = JSON.toJSONString(download).getBytes(); + HttpHeaders heads = new HttpHeaders(); + heads.add(HttpHeaders.CONTENT_TYPE, "application/json; charset=UTF-8"); + heads.add(HttpHeaders.CONTENT_LENGTH, "" + data.length); + ResponseEntity responseEntity = new ResponseEntity<>(data, heads, HttpStatus.OK); + return responseEntity; + } + } + +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/dao/CodeGeneratorConfigDao.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/dao/CodeGeneratorConfigDao.java new file mode 100644 index 00000000..cc27319e --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/dao/CodeGeneratorConfigDao.java @@ -0,0 +1,20 @@ +package net.lab1024.sa.common.module.support.codegenerator.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import net.lab1024.sa.common.module.support.codegenerator.domain.entity.CodeGeneratorConfigEntity; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Component; + +/** + * 表的 代码生成配置 Dao + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-09-23 20:15:38 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Mapper +@Component +public interface CodeGeneratorConfigDao extends BaseMapper { + +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/dao/CodeGeneratorDao.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/dao/CodeGeneratorDao.java new file mode 100644 index 00000000..f1407d3a --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/dao/CodeGeneratorDao.java @@ -0,0 +1,45 @@ +package net.lab1024.sa.common.module.support.codegenerator.dao; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.lab1024.sa.common.module.support.codegenerator.domain.form.TableQueryForm; +import net.lab1024.sa.common.module.support.codegenerator.domain.vo.TableColumnVO; +import net.lab1024.sa.common.module.support.codegenerator.domain.vo.TableVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @Author 1024创新实验室: 罗伊 + * @Date 2022-06-30 22:15:38 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Mapper +@Component +public interface CodeGeneratorDao { + + /** + * 分页查询表 + */ + List queryTableList(Page page, @Param("queryForm") TableQueryForm queryForm); + + /** + * 查询表是否存在 + * + * @param tableName + * @return + */ + long countByTableName(@Param("tableName") String tableName); + + + /** + * 查询表列信息 + * + * @param tableName + * @return + */ + List selectTableColumn(@Param("tableName") String tableName); +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/entity/CodeGeneratorConfigEntity.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/entity/CodeGeneratorConfigEntity.java new file mode 100644 index 00000000..c05bebd9 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/entity/CodeGeneratorConfigEntity.java @@ -0,0 +1,74 @@ +package net.lab1024.sa.common.module.support.codegenerator.domain.entity; + +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 lombok.Data; + +import java.time.LocalDateTime; + +/** + * 代码生成-配置 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022/6/23 21:59:22 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +@TableName("t_code_generator_config") +public class CodeGeneratorConfigEntity { + + /** + * 表名 + */ + @TableId(type = IdType.NONE) + private String tableName; + + /** + * 基础命名信息 + */ + private String basic; + + /** + * 字段列表 + */ + private String fields; + + /** + * 增加、修改 信息 + */ + private String insertAndUpdate; + + /** + * 删除 信息 + */ + private String deleteInfo; + + /** + * 查询字段 + */ + private String queryFields; + + /** + * 列表字段 + */ + private String tableFields; + + /** + * 详情 + */ + private String detail; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/form/CodeGeneratorConfigForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/form/CodeGeneratorConfigForm.java new file mode 100644 index 00000000..4a545f2d --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/form/CodeGeneratorConfigForm.java @@ -0,0 +1,64 @@ +package net.lab1024.sa.common.module.support.codegenerator.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.*; + +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * 代码生成 配置信息表单 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-06-29 20:23:46 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class CodeGeneratorConfigForm { + + @NotBlank(message = "表名 不能为空") + @ApiModelProperty("表名") + private String tableName; + + + @Valid + @NotNull(message = "基础信息不能为空") + @ApiModelProperty("基础信息") + private CodeBasic basic; + + @Valid + @NotNull(message = "字段信息不能为空") + @ApiModelProperty("字段信息") + private List fields; + + @Valid + @NotNull(message = "增加、修改 信息 不能为空") + @ApiModelProperty("增加、修改 信息") + private CodeInsertAndUpdate insertAndUpdate; + + @Valid + @NotNull(message = "删除 信息 不能为空") + @ApiModelProperty("删除 信息") + private CodeDelete deleteInfo; + + @Valid + @ApiModelProperty("查询字段") + private List queryFields; + + @Valid + @ApiModelProperty("列表字段") + private List tableFields; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/form/CodeGeneratorPreviewForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/form/CodeGeneratorPreviewForm.java new file mode 100644 index 00000000..37d65468 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/form/CodeGeneratorPreviewForm.java @@ -0,0 +1,28 @@ +package net.lab1024.sa.common.module.support.codegenerator.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * 代码生成 预览 表单 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022/6/23 23:20:46 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +@Data +public class CodeGeneratorPreviewForm { + + @NotBlank(message = "模板文件 不能为空") + @ApiModelProperty("模板文件") + private String templateFile; + + @NotBlank(message = "表名 不能为空") + @ApiModelProperty("表名") + private String tableName; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/form/TableQueryForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/form/TableQueryForm.java new file mode 100644 index 00000000..3ffd4359 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/form/TableQueryForm.java @@ -0,0 +1,23 @@ +package net.lab1024.sa.common.module.support.codegenerator.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.domain.PageParam; + + +/** + * 查询表数据 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-06-30 22:15:38 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class TableQueryForm extends PageParam { + + @ApiModelProperty("表名关键字") + private String tableNameKeywords; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeBasic.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeBasic.java new file mode 100644 index 00000000..aabecf43 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeBasic.java @@ -0,0 +1,55 @@ +package net.lab1024.sa.common.module.support.codegenerator.domain.model; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.time.LocalDateTime; + +/** + * 代码生成 基础数据 模型 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-06-30 22:15:38 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ + +@Data +public class CodeBasic { + + @ApiModelProperty("业务名称") + @NotBlank(message = "业务名称 不能为空") + private String moduleName; + + @ApiModelProperty("java包名") + @NotBlank(message = "java包名 不能为空") + private String javaPackageName; + + @ApiModelProperty("注释") + @NotBlank(message = "注释 不能为空") + private String description; + + @ApiModelProperty("前端作者") + @NotBlank(message = "前端作者 不能为空") + private String frontAuthor; + + @ApiModelProperty("前端时间") + @NotNull(message = "前端时间 不能为空") + private LocalDateTime frontDate; + + @ApiModelProperty("后端作者") + @NotBlank(message = "后端作者 不能为空") + private String backendAuthor; + + @ApiModelProperty("后端时间") + @NotNull(message = "后端时间 不能为空") + private LocalDateTime backendDate; + + @ApiModelProperty("版权信息") + @NotNull(message = "版权信息 不能为空") + private String copyright; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeDelete.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeDelete.java new file mode 100644 index 00000000..56b35baf --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeDelete.java @@ -0,0 +1,40 @@ +package net.lab1024.sa.common.module.support.codegenerator.domain.model; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; +import net.lab1024.sa.common.common.validator.enumeration.CheckEnum; +import net.lab1024.sa.common.module.support.codegenerator.constant.CodeDeleteEnum; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 代码生成 删除 模型 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-06-30 22:15:38 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ + +@Data +public class CodeDelete { + + @ApiModelProperty("是否支持删除 ") + @NotNull(message = "是否支持删除 不能为空") + private Boolean isSupportDelete; + + @ApiModelProperty("是否为物理删除") + @NotNull(message = "是否为物理删除 不能为空") + private Boolean isPhysicallyDeleted; + + @ApiModelProperty("删除类型") + @NotBlank(message = "删除类型 不能为空") + @ApiModelPropertyEnum(CodeDeleteEnum.class) + @CheckEnum(value = CodeDeleteEnum.class, message = "删除 删除类型 枚举值错误") + private String deleteEnum; + + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeField.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeField.java new file mode 100644 index 00000000..fc0402d1 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeField.java @@ -0,0 +1,59 @@ +package net.lab1024.sa.common.module.support.codegenerator.domain.model; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 代码生成 基础字段 模型 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-06-30 22:15:38 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ + +@Data +public class CodeField { + + @ApiModelProperty("列") + @NotBlank(message = "列名 不能为空") + private String columnName; + + @ApiModelProperty("列备注") + private String columnComment; + + @ApiModelProperty("业务名称") + @NotBlank(message = "业务名称 不能为空") + private String label; + + @ApiModelProperty("字段") + @NotBlank(message = "字段 不能为空") + private String fieldName; + + @ApiModelProperty("java类型") + @NotBlank(message = "java类型 不能为空") + private String javaType; + + @ApiModelProperty("js类型") + @NotBlank(message = "js类型 不能为空") + private String jsType; + + @ApiModelProperty("字典key") + private String dict; + + @ApiModelProperty("枚举名称") + private String enumName; + + @ApiModelProperty("主键") + @NotNull(message = "主键 不能为空") + private Boolean primaryKeyFlag; + + @ApiModelProperty("自增") + @NotNull(message = "自增 不能为空") + private Boolean autoIncreaseFlag; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeInsertAndUpdate.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeInsertAndUpdate.java new file mode 100644 index 00000000..17118445 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeInsertAndUpdate.java @@ -0,0 +1,42 @@ +package net.lab1024.sa.common.module.support.codegenerator.domain.model; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; +import net.lab1024.sa.common.common.validator.enumeration.CheckEnum; +import net.lab1024.sa.common.module.support.codegenerator.constant.CodeGeneratorPageTypeEnum; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * 代码生成 增加、修改 模型 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-06-30 22:15:38 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ + +@Data +public class CodeInsertAndUpdate { + + @NotNull(message = "是否支持增加、修改 不能为空") + private Boolean isSupportInsertAndUpdate; + + @ApiModelPropertyEnum(CodeGeneratorPageTypeEnum.class) + @CheckEnum(value = CodeGeneratorPageTypeEnum.class, message = "增加、修改 页面类型 枚举值错误") + private String pageType; + + @ApiModelProperty("宽度") + private String width; + + @NotNull(message = "每行字段数量 不能为空") + @ApiModelProperty("每行字段数量") + private Integer countPerLine; + + @ApiModelProperty("字段列表") + private List fieldList; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeInsertAndUpdateField.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeInsertAndUpdateField.java new file mode 100644 index 00000000..7792a8d2 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeInsertAndUpdateField.java @@ -0,0 +1,46 @@ +package net.lab1024.sa.common.module.support.codegenerator.domain.model; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; +import net.lab1024.sa.common.common.validator.enumeration.CheckEnum; +import net.lab1024.sa.common.module.support.codegenerator.constant.CodeFrontComponentEnum; +import net.lab1024.sa.common.module.support.codegenerator.constant.CodeGeneratorPageTypeEnum; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 代码生成 增加、修改的字段 模型 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-06-30 22:15:38 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ + +@Data +public class CodeInsertAndUpdateField { + + @NotBlank(message = "列名 不能为空") + @ApiModelProperty("列名") + private String columnName; + + @NotNull(message = "必须 不能为空") + @ApiModelProperty("必须") + private Boolean requiredFlag; + + @NotNull(message = "插入标识 不能为空") + @ApiModelProperty("插入标识") + private Boolean insertFlag; + + @NotNull(message = "更新标识 不能为空") + @ApiModelProperty("更新标识") + private Boolean updateFlag; + + @ApiModelPropertyEnum(value = CodeGeneratorPageTypeEnum.class) + @CheckEnum(value = CodeFrontComponentEnum.class, message = "增加、修改 组件类型 枚举值错误", required = true) + private String frontComponent; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeQueryField.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeQueryField.java new file mode 100644 index 00000000..5a75d73c --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeQueryField.java @@ -0,0 +1,47 @@ +package net.lab1024.sa.common.module.support.codegenerator.domain.model; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; +import net.lab1024.sa.common.common.validator.enumeration.CheckEnum; +import net.lab1024.sa.common.module.support.codegenerator.constant.CodeQueryFieldQueryTypeEnum; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import java.util.List; + +/** + * 代码生成 查询条件 模型 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-06-30 22:15:38 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ + +@Data +public class CodeQueryField { + + @NotBlank(message = "查询条件 不能为空") + @ApiModelProperty("查询条件") + private String label; + + @NotBlank(message = "字段名 不能为空") + @ApiModelProperty("字段名") + private String fieldName; + + @ApiModelPropertyEnum(CodeQueryFieldQueryTypeEnum.class) + @CheckEnum(value = CodeQueryFieldQueryTypeEnum.class, message = "查询条件 查询类型 枚举值错误") + private String queryTypeEnum; + + @NotEmpty(message = "查询条件 不能为空") + @ApiModelProperty("查询条件") + private List columnNameList; + + @NotBlank(message = "宽度 不能为空") + @ApiModelProperty("宽度") + private String width; + + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeTableField.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeTableField.java new file mode 100644 index 00000000..3c2a0c94 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeTableField.java @@ -0,0 +1,46 @@ +package net.lab1024.sa.common.module.support.codegenerator.domain.model; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 代码生成 列表表格 模型 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-06-30 22:15:38 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ + +@Data +public class CodeTableField { + + @NotBlank(message = "列 不能为空") + @ApiModelProperty("列") + private String columnName; + + @NotBlank(message = "表格列名 不能为空") + @ApiModelProperty("表格列名") + private String label; + + @NotBlank(message = "字段名 不能为空") + @ApiModelProperty("字段名") + private String fieldName; + + @NotNull(message = "列表显示 不能为空") + @ApiModelProperty("列表显示") + private Boolean showFlag; + + @ApiModelProperty("宽度") + private Integer width; + + @NotNull(message = "自动省略标识 不能为空") + @ApiModelProperty("自动省略标识") + private Boolean ellipsisFlag; + + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/vo/TableColumnVO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/vo/TableColumnVO.java new file mode 100644 index 00000000..251bfca0 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/vo/TableColumnVO.java @@ -0,0 +1,44 @@ + +package net.lab1024.sa.common.module.support.codegenerator.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 列 + * + * @Author 1024创新实验室-主任:卓大 + * @Date 2022/9/21 21:07:58 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +@Data +public class TableColumnVO { + + @ApiModelProperty("列名") + private String columnName; + + @ApiModelProperty("列描述") + private String columnComment; + + @ApiModelProperty("columnKey") + private String columnKey; + + @ApiModelProperty("extra") + private String extra; + + @ApiModelProperty("是否为空") + private String isNullable; + + @ApiModelProperty("数据类型varchar") + private String dataType; + + @ApiModelProperty("列类型varchar(50)") + private String columnType; + + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/vo/TableConfigVO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/vo/TableConfigVO.java new file mode 100644 index 00000000..33df9523 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/vo/TableConfigVO.java @@ -0,0 +1,40 @@ + +package net.lab1024.sa.common.module.support.codegenerator.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.*; + +import java.util.List; + +/** + * 表的配置信息 + * + * @Author 1024创新实验室-主任:卓大 + * @Date 2022/9/21 21:07:58 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +@Data +public class TableConfigVO { + + @ApiModelProperty("基础命名信息") + private CodeBasic basic; + + @ApiModelProperty("字段列") + private List fields; + + @ApiModelProperty("增加、修改 信息") + private CodeInsertAndUpdate insertAndUpdate; + + @ApiModelProperty("删除 信息") + private CodeDelete deleteInfo; + + @ApiModelProperty("查询字段") + private List queryFields; + + @ApiModelProperty("列表字段") + private List tableFields; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/vo/TableVO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/vo/TableVO.java new file mode 100644 index 00000000..286a2a33 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/vo/TableVO.java @@ -0,0 +1,37 @@ + +package net.lab1024.sa.common.module.support.codegenerator.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 表信息 + * + * @Author 1024创新实验室-主任:卓大 + * @Date 2022/9/21 18:07:58 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +@Data +public class TableVO { + + @ApiModelProperty("表名") + private String tableName; + + @ApiModelProperty("表备注") + private String tableComment; + + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + + @ApiModelProperty("更新时间") + private LocalDateTime updateTime; + + @ApiModelProperty("配置时间") + private LocalDateTime configTime; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/CodeGeneratorService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/CodeGeneratorService.java new file mode 100644 index 00000000..f7b9aae5 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/CodeGeneratorService.java @@ -0,0 +1,223 @@ +package net.lab1024.sa.common.module.support.codegenerator.service; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartPageUtil; +import net.lab1024.sa.common.common.util.SmartStringUtil; +import net.lab1024.sa.common.module.support.codegenerator.constant.CodeGeneratorConstant; +import net.lab1024.sa.common.module.support.codegenerator.dao.CodeGeneratorConfigDao; +import net.lab1024.sa.common.module.support.codegenerator.dao.CodeGeneratorDao; +import net.lab1024.sa.common.module.support.codegenerator.domain.entity.CodeGeneratorConfigEntity; +import net.lab1024.sa.common.module.support.codegenerator.domain.form.CodeGeneratorConfigForm; +import net.lab1024.sa.common.module.support.codegenerator.domain.form.CodeGeneratorPreviewForm; +import net.lab1024.sa.common.module.support.codegenerator.domain.form.TableQueryForm; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.*; +import net.lab1024.sa.common.module.support.codegenerator.domain.vo.TableColumnVO; +import net.lab1024.sa.common.module.support.codegenerator.domain.vo.TableConfigVO; +import net.lab1024.sa.common.module.support.codegenerator.domain.vo.TableVO; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.io.ByteArrayOutputStream; +import java.util.List; +import java.util.Optional; + +/** + * 代码生成器 Service + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-06-30 22:15:38 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Slf4j +@Service +public class CodeGeneratorService { + + @Autowired + private CodeGeneratorDao codeGeneratorDao; + + @Autowired + private CodeGeneratorConfigDao codeGeneratorConfigDao; + + @Autowired + private CodeGeneratorTemplateService codeGeneratorTemplateService; + + + /** + * 列信息 + * + * @param tableName + * @return + */ + public List getTableColumns(String tableName) { + return codeGeneratorDao.selectTableColumn(tableName); + } + + + /** + * 查询数据库表数据 + * + * @param tableQueryForm + * @return + */ + public PageResult queryTableList(TableQueryForm tableQueryForm) { + Page page = SmartPageUtil.convert2PageQuery(tableQueryForm); + List tableVOList = codeGeneratorDao.queryTableList(page, tableQueryForm); + return SmartPageUtil.convert2PageResult(page, tableVOList); + } + + /** + * 获取 表的 配置信息 + * + * @param table + * @return + */ + public TableConfigVO getTableConfig(String table) { + + TableConfigVO config = new TableConfigVO(); + + CodeGeneratorConfigEntity codeGeneratorConfigEntity = codeGeneratorConfigDao.selectById(table); + if (codeGeneratorConfigEntity == null) { + return config; + } + + if (SmartStringUtil.isNotEmpty(codeGeneratorConfigEntity.getBasic())) { + CodeBasic basic = JSON.parseObject(codeGeneratorConfigEntity.getBasic(), CodeBasic.class); + config.setBasic(basic); + } + + if (SmartStringUtil.isNotEmpty(codeGeneratorConfigEntity.getFields())) { + List fields = JSONArray.parseArray(codeGeneratorConfigEntity.getFields(), CodeField.class); + config.setFields(fields); + } + + if (SmartStringUtil.isNotEmpty(codeGeneratorConfigEntity.getInsertAndUpdate())) { + CodeInsertAndUpdate insertAndUpdate = JSON.parseObject(codeGeneratorConfigEntity.getInsertAndUpdate(), CodeInsertAndUpdate.class); + config.setInsertAndUpdate(insertAndUpdate); + } + + if (SmartStringUtil.isNotEmpty(codeGeneratorConfigEntity.getDeleteInfo())) { + CodeDelete deleteInfo = JSON.parseObject(codeGeneratorConfigEntity.getDeleteInfo(), CodeDelete.class); + config.setDeleteInfo(deleteInfo); + } + + if (SmartStringUtil.isNotEmpty(codeGeneratorConfigEntity.getQueryFields())) { + List queryFields = JSONArray.parseArray(codeGeneratorConfigEntity.getQueryFields(), CodeQueryField.class); + config.setQueryFields(queryFields); + } + + if (SmartStringUtil.isNotEmpty(codeGeneratorConfigEntity.getTableFields())) { + List tableFields = JSONArray.parseArray(codeGeneratorConfigEntity.getTableFields(), CodeTableField.class); + config.setTableFields(tableFields); + } + + return config; + } + + /** + * 更新配置 + * + * @param form + * @return + */ + public synchronized ResponseDTO updateConfig(CodeGeneratorConfigForm form) { + long existCount = codeGeneratorDao.countByTableName(form.getTableName()); + if (existCount == 0) { + return ResponseDTO.userErrorParam("表不存在,请联系后端查看下数据库"); + } + + CodeGeneratorConfigEntity codeGeneratorConfigEntity = codeGeneratorConfigDao.selectById(form.getTableName()); + boolean updateFlag = true; + if (codeGeneratorConfigEntity == null) { + codeGeneratorConfigEntity = new CodeGeneratorConfigEntity(); + updateFlag = false; + } + + // 校验假删,必须有 deleted_flag 字段 + List tableColumns = getTableColumns(form.getTableName()); + if (null != form.getDeleteInfo() && form.getDeleteInfo().getIsSupportDelete() && !form.getDeleteInfo().getIsPhysicallyDeleted()) { + Optional any = tableColumns.stream().filter(e -> e.getColumnName().equals(CodeGeneratorConstant.DELETED_FLAG)).findAny(); + if (!any.isPresent()) { + return ResponseDTO.userErrorParam("表结构中没有假删字段:" + CodeGeneratorConstant.DELETED_FLAG + ",请仔细排查"); + } + } + + codeGeneratorConfigEntity.setTableName(form.getTableName()); + codeGeneratorConfigEntity.setBasic(JSON.toJSONString(form.getBasic())); + codeGeneratorConfigEntity.setFields(JSONArray.toJSONString(form.getFields())); + codeGeneratorConfigEntity.setInsertAndUpdate(JSON.toJSONString(form.getInsertAndUpdate())); + codeGeneratorConfigEntity.setDeleteInfo(JSON.toJSONString(form.getDeleteInfo())); + codeGeneratorConfigEntity.setQueryFields(JSONArray.toJSONString(form.getQueryFields())); + codeGeneratorConfigEntity.setTableFields(JSONArray.toJSONString(form.getTableFields())); + + if (updateFlag) { + codeGeneratorConfigDao.updateById(codeGeneratorConfigEntity); + } else { + codeGeneratorConfigDao.insert(codeGeneratorConfigEntity); + } + return ResponseDTO.ok(); + } + + /** + * 预览 + * + * @param form + * @return + */ + public ResponseDTO preview(CodeGeneratorPreviewForm form) { + long existCount = codeGeneratorDao.countByTableName(form.getTableName()); + if (existCount == 0) { + return ResponseDTO.userErrorParam("表不存在,请联系后端查看下数据库"); + } + + CodeGeneratorConfigEntity codeGeneratorConfigEntity = codeGeneratorConfigDao.selectById(form.getTableName()); + if (codeGeneratorConfigEntity == null) { + return ResponseDTO.userErrorParam("配置信息不存在,请先进行配置"); + } + + List columns = getTableColumns(form.getTableName()); + if (CollectionUtils.isEmpty(columns)) { + return ResponseDTO.userErrorParam("表没有列信息无法生成"); + } + + String result = codeGeneratorTemplateService.generate(form.getTableName(), form.getTemplateFile(), codeGeneratorConfigEntity); + return ResponseDTO.ok(result); + + } + + /** + * 下载代码 + * @param tableName + * @return + */ + public ResponseDTO download(String tableName) { + if (SmartStringUtil.isBlank(tableName)) { + return ResponseDTO.userErrorParam("表名不能为空"); + } + + long existCount = codeGeneratorDao.countByTableName(tableName); + if (existCount == 0) { + return ResponseDTO.userErrorParam("表不存在,请联系后端查看下数据库"); + } + + CodeGeneratorConfigEntity codeGeneratorConfigEntity = codeGeneratorConfigDao.selectById(tableName); + if (codeGeneratorConfigEntity == null) { + return ResponseDTO.userErrorParam("配置信息不存在,请先进行配置"); + } + + List columns = getTableColumns(tableName); + if (CollectionUtils.isEmpty(columns)) { + return ResponseDTO.userErrorParam("表没有列信息无法生成"); + } + ByteArrayOutputStream out = new ByteArrayOutputStream(); + codeGeneratorTemplateService.zipGeneratedFiles(out, tableName, codeGeneratorConfigEntity); + return ResponseDTO.ok(out.toByteArray()); + } +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/CodeGeneratorTemplateService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/CodeGeneratorTemplateService.java new file mode 100644 index 00000000..d9808e2f --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/CodeGeneratorTemplateService.java @@ -0,0 +1,238 @@ +package net.lab1024.sa.common.module.support.codegenerator.service; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.IORuntimeException; +import cn.hutool.core.util.ZipUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.google.common.base.CaseFormat; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.common.util.SmartStringUtil; +import net.lab1024.sa.common.module.support.codegenerator.domain.entity.CodeGeneratorConfigEntity; +import net.lab1024.sa.common.module.support.codegenerator.domain.form.CodeGeneratorConfigForm; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.*; +import net.lab1024.sa.common.module.support.codegenerator.service.variable.backend.ControllerVariableService; +import net.lab1024.sa.common.module.support.codegenerator.service.variable.backend.DaoVariableService; +import net.lab1024.sa.common.module.support.codegenerator.service.variable.backend.ManagerVariableService; +import net.lab1024.sa.common.module.support.codegenerator.service.variable.backend.ServiceVariableService; +import net.lab1024.sa.common.module.support.codegenerator.service.variable.backend.domain.*; +import net.lab1024.sa.common.module.support.codegenerator.service.variable.front.ApiVariableService; +import net.lab1024.sa.common.module.support.codegenerator.service.variable.front.ConstVariableService; +import net.lab1024.sa.common.module.support.codegenerator.service.variable.front.FormVariableService; +import net.lab1024.sa.common.module.support.codegenerator.service.variable.front.ListVariableService; +import net.lab1024.sa.common.module.support.codegenerator.service.variable.CodeGenerateBaseVariableService; +import net.lab1024.sa.common.module.support.codegenerator.util.CodeGeneratorTool; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.velocity.Template; +import org.apache.velocity.app.Velocity; +import org.apache.velocity.app.VelocityEngine; +import org.apache.velocity.tools.ToolContext; +import org.apache.velocity.tools.ToolManager; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; +import java.io.File; +import java.io.OutputStream; +import java.io.StringWriter; +import java.nio.charset.Charset; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 代码生成器 模板 Service + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-06-30 22:15:38 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ + +@Service +@Slf4j +public class CodeGeneratorTemplateService { + + + private Map map = new HashMap<>(); + + @PostConstruct + public void init() { + // 后端 + map.put("java/domain/entity/Entity.java", new EntityVariableService()); + map.put("java/domain/form/AddForm.java", new AddFormVariableService()); + map.put("java/domain/form/UpdateForm.java", new UpdateFormVariableService()); + map.put("java/domain/form/QueryForm.java", new QueryFormVariableService()); + map.put("java/domain/vo/VO.java", new VOVariableService()); + map.put("java/controller/Controller.java", new ControllerVariableService()); + map.put("java/service/Service.java", new ServiceVariableService()); + map.put("java/manager/Manager.java", new ManagerVariableService()); + map.put("java/dao/Dao.java", new DaoVariableService()); + map.put("java/mapper/Mapper.xml", new MapperVariableService()); + // 前端 + map.put("js/api.js", new ApiVariableService()); + map.put("js/const.js", new ConstVariableService()); + map.put("js/list.vue", new ListVariableService()); + map.put("js/form.vue", new FormVariableService()); + } + + public void zipGeneratedFiles(OutputStream outputStream, String tableName, CodeGeneratorConfigEntity codeGeneratorConfigEntity) { + String uuid = UUID.randomUUID().toString(); + File dir = new File(uuid); + + // 1、生产文件 + CodeBasic basic = JSON.parseObject(codeGeneratorConfigEntity.getBasic(), CodeBasic.class); + String moduleName = basic.getModuleName(); + + for (Map.Entry entry : map.entrySet()) { + try { + String templateFile = entry.getKey(); + String upperCamel = new CodeGeneratorTool().lowerCamel2UpperCamel(moduleName); + String lowerHyphen = new CodeGeneratorTool().lowerCamel2LowerHyphen(moduleName); + String[] templateSplit = templateFile.split("/"); + String fileName = templateFile.startsWith("java") ? upperCamel + templateSplit[templateSplit.length - 1] : lowerHyphen + "-" + templateSplit[templateSplit.length - 1]; + String fullPathFileName = templateFile.replaceAll(templateSplit[templateSplit.length - 1], fileName); + fullPathFileName = fullPathFileName.replaceAll("java/", "java/" + basic.getModuleName().toLowerCase() + "/"); + + String fileContent = generate(tableName, templateFile, codeGeneratorConfigEntity); + File file = new File(uuid + "/" + fullPathFileName); + file.getParentFile().mkdirs(); + FileUtil.appendUtf8String(fileContent, file); + } catch (IORuntimeException e) { + log.error(e.getMessage(), e); + } + } + + // 2、后端的枚举文件 + List fields = JSONArray.parseArray(codeGeneratorConfigEntity.getFields(), CodeField.class); + if (CollectionUtils.isNotEmpty(fields)) { + List enumFiledList = fields.stream().filter(e -> SmartStringUtil.isNotBlank(e.getEnumName())).collect(Collectors.toList()); + for (CodeField codeField : enumFiledList) { + Map variablesMap = new HashMap<>(); + + String enumName = CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_CAMEL, codeField.getEnumName()); + if (!enumName.endsWith("Enum")) { + enumName = enumName + "Enum"; + } + variablesMap.put("enumName", enumName); + variablesMap.put("enumDesc", codeField.getColumnComment()); + variablesMap.put("enumJavaType", codeField.getJavaType()); + variablesMap.put("basic", basic); + variablesMap.put("packageName", basic.getJavaPackageName() + ".constant"); + + String fileContent = render("code-generator-template/java/constant/enum.java.vm", variablesMap); + File file = new File(uuid + "/java/" + basic.getModuleName().toLowerCase() + "/constant/" + enumName + ".java"); + file.getParentFile().mkdirs(); + FileUtil.appendUtf8String(fileContent, file); + } + } + + + ZipUtil.zip(outputStream, Charset.forName("utf-8"), false, null, dir); + + FileUtil.del(dir); + + } + + + public String generate(String tableName, String file, CodeGeneratorConfigEntity codeGeneratorConfigEntity) { + + // -------------------- 1 校验不支持的代码生成,比如增加、删除等 -------------------- + + String finalFile = file; + Optional optional = map.keySet().stream().filter(e -> e.contains(finalFile)).findFirst(); + if (!optional.isPresent()) { + return "不存在此模板!"; + } + + file = optional.get(); + CodeGenerateBaseVariableService codeGenerateBaseVariableService = map.get(file); + if (codeGenerateBaseVariableService == null) { + return "代码生成Service不存在,请检查相关代码!"; + } + + CodeBasic basic = JSON.parseObject(codeGeneratorConfigEntity.getBasic(), CodeBasic.class); + List fields = JSONArray.parseArray(codeGeneratorConfigEntity.getFields(), CodeField.class); + CodeInsertAndUpdate insertAndUpdate = JSON.parseObject(codeGeneratorConfigEntity.getInsertAndUpdate(), CodeInsertAndUpdate.class); + CodeDelete deleteInfo = JSON.parseObject(codeGeneratorConfigEntity.getDeleteInfo(), CodeDelete.class); + List queryFields = JSONArray.parseArray(codeGeneratorConfigEntity.getQueryFields(), CodeQueryField.class); + List tableFields = JSONArray.parseArray(codeGeneratorConfigEntity.getTableFields(), CodeTableField.class); + tableFields.stream().forEach(e -> e.setWidth(e.getWidth() == null ? 0 : e.getWidth())); + + CodeGeneratorConfigForm form = CodeGeneratorConfigForm.builder().basic(basic).fields(fields).insertAndUpdate(insertAndUpdate).deleteInfo(deleteInfo).queryFields(queryFields).tableFields(tableFields).deleteInfo(deleteInfo).build(); + form.setTableName(tableName); + if (!codeGenerateBaseVariableService.isSupport(form)) { + return "业务不需要此功能,故没有生成代码;"; + } + + // -------------------- 2 通用模板的变量 -------------------- + Map variablesMap = new HashMap<>(); + + + Map basicMap = BeanUtil.beanToMap(basic); + basicMap.put("frontDate", DateUtil.formatLocalDateTime(basic.getFrontDate())); + basicMap.put("backendDate", DateUtil.formatLocalDateTime(basic.getBackendDate())); + + variablesMap.put("basic", basicMap); + variablesMap.put("fields", fields); + variablesMap.put("insertAndUpdate", insertAndUpdate); + variablesMap.put("deleteInfo", deleteInfo); + variablesMap.put("queryFields", queryFields); + variablesMap.put("tableFields", tableFields); + variablesMap.put("tableName", tableName); + + //名词的大写开头和小写开头 + HashMap names = new HashMap<>(); + names.put("lowerCamel", CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, basic.getModuleName())); + names.put("upperCamel", CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_CAMEL, basic.getModuleName())); + names.put("lowerHyphenCamel", CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN, basic.getModuleName())); + variablesMap.put("name", names); + + //主键字段名称和java类型 + CodeField primaryKeycodeField = fields.stream().filter(e -> e.getPrimaryKeyFlag()).findFirst().get(); + if (primaryKeycodeField != null) { + variablesMap.put("primaryKeyJavaType", primaryKeycodeField.getJavaType()); + variablesMap.put("primaryKeyFieldName", primaryKeycodeField.getFieldName()); + variablesMap.put("primaryKeyColumnName", primaryKeycodeField.getColumnName()); + } + + // -------------------- 3、针对此 模板 的特殊变量 -------------------- + + Map specialVariables = codeGenerateBaseVariableService.getInjectVariablesMap(form); + variablesMap.putAll(specialVariables); + + // -------------------- 4、模板 生成代码 -------------------- + + return render("code-generator-template/" + file + ".vm", variablesMap); + } + + /** + * 渲染 + * + * @param templateFile + * @param variablesMap + * @return + */ + private String render(String templateFile, Map variablesMap) { + VelocityEngine engine = new VelocityEngine(); + engine.setProperty(Velocity.FILE_RESOURCE_LOADER_CACHE, true); + engine.setProperty(Velocity.INPUT_ENCODING, "UTF-8"); + engine.setProperty("resource.loader.file.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); + engine.init(); + Template template = engine.getTemplate(templateFile); + + //加载tools.xml配置文件 + ToolManager toolManager = new ToolManager(); + toolManager.configure("code-generator-template/tools.xml"); + + //注入变量 + ToolContext context = toolManager.createContext(); + context.putAll(variablesMap); + + StringWriter sw = new StringWriter(); + template.merge(context, sw); + return sw.toString(); + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/CodeGenerateBaseVariableService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/CodeGenerateBaseVariableService.java new file mode 100644 index 00000000..d412d1fc --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/CodeGenerateBaseVariableService.java @@ -0,0 +1,162 @@ +package net.lab1024.sa.common.module.support.codegenerator.service.variable; + +import com.google.common.base.CaseFormat; +import net.lab1024.sa.common.common.util.SmartStringUtil; +import net.lab1024.sa.common.module.support.codegenerator.domain.form.CodeGeneratorConfigForm; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.CodeField; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.CodeInsertAndUpdate; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.CodeInsertAndUpdateField; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @Author 1024创新实验室-主任:卓大 + * @Date 2022/9/29 17:20:41 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +public abstract class CodeGenerateBaseVariableService { + + public abstract Map getInjectVariablesMap(CodeGeneratorConfigForm form); + + /** + * 是否支持 : + * 1、增加、修改 + * 2、删除 + * + * @param form + * @return + */ + public abstract boolean isSupport(CodeGeneratorConfigForm form); + + /** + * 获取所有javabean的 import 包名 + * + * @param form + * @return + */ + public List getJavaBeanImportClass(CodeGeneratorConfigForm form) { + String upperCamelName = CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_CAMEL, form.getBasic().getModuleName()); + ArrayList list = new ArrayList<>(); + + list.add("import " + form.getBasic().getJavaPackageName() + ".domain.entity." + upperCamelName + "Entity;" ); + + list.add("import " + form.getBasic().getJavaPackageName() + ".domain.form." + upperCamelName + "AddForm;" ); + list.add("import " + form.getBasic().getJavaPackageName() + ".domain.form." + upperCamelName + "UpdateForm;" ); + list.add("import " + form.getBasic().getJavaPackageName() + ".domain.form." + upperCamelName + "QueryForm;" ); + + list.add("import " + form.getBasic().getJavaPackageName() + ".domain.vo." + upperCamelName + "VO;" ); + return list; + } + + + /** + * 根据列名查找 CodeField + */ + public CodeField getCodeFieldByColumnName(String columnName, CodeGeneratorConfigForm form) { + List fields = form.getFields(); + if (CollectionUtils.isEmpty(fields)) { + return null; + } + + return fields.stream().filter(e -> columnName.equals(e.getColumnName())) + .findFirst().get(); + } + + + /** + * 是否为文件上传字段 + */ + protected boolean isFile(String columnName, CodeGeneratorConfigForm form) { + CodeInsertAndUpdate insertAndUpdate = form.getInsertAndUpdate(); + if (insertAndUpdate == null) { + return false; + } + + List fieldList = insertAndUpdate.getFieldList(); + if (CollectionUtils.isEmpty(fieldList)) { + return false; + } + + Optional first = fieldList.stream().filter(e -> columnName.equals(e.getColumnName())).findFirst(); + if (!first.isPresent()) { + return false; + } + + CodeInsertAndUpdateField field = first.get(); + return SmartStringUtil.contains(field.getFrontComponent(), "Upload" ); + } + + /** + * 是否为 枚举 + */ + protected boolean isDict(String columnName, CodeGeneratorConfigForm form) { + List fields = form.getFields(); + if (CollectionUtils.isEmpty(fields)) { + return false; + } + + Optional first = fields.stream().filter(e -> columnName.equals(e.getColumnName())).findFirst(); + if (first.isPresent()) { + return false; + } + + CodeField codeField = first.get(); + return codeField.getDict() != null; + } + + /** + * 是否为 枚举 + */ + protected boolean isEnum(String columnName, CodeGeneratorConfigForm form) { + List fields = form.getFields(); + if (CollectionUtils.isEmpty(fields)) { + return false; + } + + Optional first = fields.stream().filter(e -> columnName.equals(e.getColumnName())).findFirst(); + if (first.isPresent()) { + return false; + } + + CodeField codeField = first.get(); + return codeField.getEnumName() != null; + } + + /** + * 获取字段集合 + * + * @param form + * @return + */ + protected Map getFieldMap(CodeGeneratorConfigForm form) { + List fields = form.getFields(); + if (fields == null) { + return new HashMap<>(); + } + + return fields.stream().collect(Collectors.toMap(CodeField::getColumnName, Function.identity())); + } + + /** + * 获取java类型 + * + * @return + */ + protected String getJavaPackageName(String javaType) { + if ("BigDecimal".equals(javaType)) { + return "import java.math.BigDecimal"; + } else if ("LocalDate".equals(javaType)) { + return "import java.time.LocalDate;"; + } else if ("LocalDateTime".equals(javaType)) { + return "import java.time.LocalDateTime;"; + } else { + return null; + } + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/ControllerVariableService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/ControllerVariableService.java new file mode 100644 index 00000000..60543b3a --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/ControllerVariableService.java @@ -0,0 +1,78 @@ +package net.lab1024.sa.common.module.support.codegenerator.service.variable.backend; + +import com.google.common.base.CaseFormat; +import net.lab1024.sa.common.common.util.SmartEnumUtil; +import net.lab1024.sa.common.module.support.codegenerator.constant.CodeDeleteEnum; +import net.lab1024.sa.common.module.support.codegenerator.domain.form.CodeGeneratorConfigForm; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.CodeInsertAndUpdateField; +import net.lab1024.sa.common.module.support.codegenerator.service.variable.CodeGenerateBaseVariableService; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Author 1024创新实验室-主任:卓大 + * @Date 2022/9/29 17:20:41 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +public class ControllerVariableService extends CodeGenerateBaseVariableService { + + @Override + public boolean isSupport(CodeGeneratorConfigForm form) { + return true; + } + + @Override + public Map getInjectVariablesMap(CodeGeneratorConfigForm form) { + Map variablesMap = new HashMap<>(); + + List updateFieldList = form.getInsertAndUpdate().getFieldList().stream().filter(e -> Boolean.TRUE.equals(e.getInsertFlag())).collect(Collectors.toList()); + + variablesMap.put("packageName", form.getBasic().getJavaPackageName() + ".controller"); + + List packageList = getPackageList(updateFieldList, form); + variablesMap.put("importPackageList", packageList); + + return variablesMap; + } + + + public List getPackageList(List fields, CodeGeneratorConfigForm form) { + if (CollectionUtils.isEmpty(fields)) { + return new ArrayList<>(); + } + + HashSet packageSet = new HashSet<>(); + + //1、javabean相关的包 + packageSet.addAll(getJavaBeanImportClass(form).stream().filter(e -> !e.contains("Entity;")).collect(Collectors.toList())); + + //2、其他包 + if (form.getDeleteInfo().getIsSupportDelete()) { + + CodeDeleteEnum codeDeleteEnum = SmartEnumUtil.getEnumByValue(form.getDeleteInfo().getDeleteEnum(), CodeDeleteEnum.class); + if (codeDeleteEnum == CodeDeleteEnum.BATCH || codeDeleteEnum == CodeDeleteEnum.SINGLE_AND_BATCH) { + //2、批量删除的话,要导入ValidateList + packageSet.add("import net.lab1024.sa.common.common.domain.ValidateList;"); + } + + if (codeDeleteEnum == CodeDeleteEnum.SINGLE || codeDeleteEnum == CodeDeleteEnum.SINGLE_AND_BATCH) { + //3、单个删除的话,要导入 @PathVariable + packageSet.add("import org.springframework.web.bind.annotation.PathVariable;"); + packageSet.add("import org.springframework.web.bind.annotation.GetMapping;"); + } + } + + packageSet.add("import " + form.getBasic().getJavaPackageName() + ".service." + CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_CAMEL, form.getBasic().getModuleName()) + "Service;"); + + // 排序一下 + ArrayList packageList = new ArrayList<>(packageSet); + Collections.sort(packageList); + return packageList; + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/DaoVariableService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/DaoVariableService.java new file mode 100644 index 00000000..caf4963f --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/DaoVariableService.java @@ -0,0 +1,59 @@ +package net.lab1024.sa.common.module.support.codegenerator.service.variable.backend; + +import net.lab1024.sa.common.module.support.codegenerator.domain.form.CodeGeneratorConfigForm; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.CodeInsertAndUpdateField; +import net.lab1024.sa.common.module.support.codegenerator.service.variable.CodeGenerateBaseVariableService; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Author 1024创新实验室-主任:卓大 + * @Date 2022/9/29 17:20:41 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +public class DaoVariableService extends CodeGenerateBaseVariableService { + + @Override + public boolean isSupport(CodeGeneratorConfigForm form) { + return true; + } + + @Override + public Map getInjectVariablesMap(CodeGeneratorConfigForm form) { + Map variablesMap = new HashMap<>(); + + List updateFieldList = form.getInsertAndUpdate().getFieldList().stream().filter(e -> Boolean.TRUE.equals(e.getInsertFlag())).collect(Collectors.toList()); + List packageList = getPackageList(updateFieldList, form); + + variablesMap.put("packageName", form.getBasic().getJavaPackageName() + ".dao" ); + variablesMap.put("importPackageList", packageList); + + return variablesMap; + } + + + public List getPackageList(List fields, CodeGeneratorConfigForm form) { + if (CollectionUtils.isEmpty(fields)) { + return new ArrayList<>(); + } + + HashSet packageSet = new HashSet<>(); + + //1、javabean相关的包 + packageSet.addAll(getJavaBeanImportClass(form).stream().filter( e-> e.contains("QueryForm;") || e.contains("VO;")|| e.contains("Entity;")).collect(Collectors.toList())); + + //2、util + packageSet.add("import java.util.List;"); + + //3、 排序一下 + ArrayList packageList = new ArrayList<>(packageSet); + Collections.sort(packageList); + return packageList; + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/ManagerVariableService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/ManagerVariableService.java new file mode 100644 index 00000000..f4e43e0b --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/ManagerVariableService.java @@ -0,0 +1,55 @@ +package net.lab1024.sa.common.module.support.codegenerator.service.variable.backend; + +import net.lab1024.sa.common.module.support.codegenerator.domain.form.CodeGeneratorConfigForm; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.CodeInsertAndUpdateField; +import net.lab1024.sa.common.module.support.codegenerator.service.variable.CodeGenerateBaseVariableService; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Author 1024创新实验室-主任:卓大 + * @Date 2022/9/29 17:20:41 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +public class ManagerVariableService extends CodeGenerateBaseVariableService { + + @Override + public boolean isSupport(CodeGeneratorConfigForm form) { + return true; + } + + @Override + public Map getInjectVariablesMap(CodeGeneratorConfigForm form) { + Map variablesMap = new HashMap<>(); + + List updateFieldList = form.getInsertAndUpdate().getFieldList().stream().filter(e -> Boolean.TRUE.equals(e.getInsertFlag())).collect(Collectors.toList()); + List packageList = getPackageList(updateFieldList, form); + + variablesMap.put("packageName", form.getBasic().getJavaPackageName() + ".manager" ); + variablesMap.put("importPackageList", packageList); + + return variablesMap; + } + + + public List getPackageList(List fields, CodeGeneratorConfigForm form) { + if (CollectionUtils.isEmpty(fields)) { + return new ArrayList<>(); + } + + HashSet packageList = new HashSet<>(); + + //1、javabean相关的包 + packageList.addAll(getJavaBeanImportClass(form).stream().filter(e -> e.contains("Entity;")).collect(Collectors.toList())); + + //2、dao + packageList.add("import " + form.getBasic().getJavaPackageName() + ".dao."+ form.getBasic().getModuleName() + "Dao;" ); + return new ArrayList<>(packageList); + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/ServiceVariableService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/ServiceVariableService.java new file mode 100644 index 00000000..a87473cf --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/ServiceVariableService.java @@ -0,0 +1,62 @@ +package net.lab1024.sa.common.module.support.codegenerator.service.variable.backend; + +import net.lab1024.sa.common.module.support.codegenerator.domain.form.CodeGeneratorConfigForm; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.CodeInsertAndUpdateField; +import net.lab1024.sa.common.module.support.codegenerator.service.variable.CodeGenerateBaseVariableService; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Author 1024创新实验室-主任:卓大 + * @Date 2022/9/29 17:20:41 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +public class ServiceVariableService extends CodeGenerateBaseVariableService { + + @Override + public boolean isSupport(CodeGeneratorConfigForm form) { + return true; + } + + @Override + public Map getInjectVariablesMap(CodeGeneratorConfigForm form) { + Map variablesMap = new HashMap<>(); + + List updateFieldList = form.getInsertAndUpdate().getFieldList().stream().filter(e -> Boolean.TRUE.equals(e.getInsertFlag())).collect(Collectors.toList()); + List packageList = getPackageList(updateFieldList, form); + + variablesMap.put("packageName", form.getBasic().getJavaPackageName() + ".service" ); + variablesMap.put("importPackageList", packageList); + + return variablesMap; + } + + + public List getPackageList(List fields, CodeGeneratorConfigForm form) { + if (CollectionUtils.isEmpty(fields)) { + return new ArrayList<>(); + } + + HashSet packageSet = new HashSet<>(); + + //1、javabean相关的包 + packageSet.addAll(getJavaBeanImportClass(form)); + + //2、dao + packageSet.add("import " + form.getBasic().getJavaPackageName() + ".dao."+ form.getBasic().getModuleName() + "Dao;" ); + + //3、util list + packageSet.add("import java.util.List;"); + + //3、 排序一下 + ArrayList packageList = new ArrayList<>(packageSet); + Collections.sort(packageList); + return packageList; + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/AddFormVariableService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/AddFormVariableService.java new file mode 100644 index 00000000..ee9822ab --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/AddFormVariableService.java @@ -0,0 +1,131 @@ +package net.lab1024.sa.common.module.support.codegenerator.service.variable.backend.domain; + +import cn.hutool.core.bean.BeanUtil; +import net.lab1024.sa.common.common.util.SmartStringUtil; +import net.lab1024.sa.common.module.support.codegenerator.domain.form.CodeGeneratorConfigForm; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.CodeField; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.CodeInsertAndUpdate; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.CodeInsertAndUpdateField; +import net.lab1024.sa.common.module.support.codegenerator.service.variable.CodeGenerateBaseVariableService; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.tuple.ImmutablePair; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Author 1024创新实验室-主任:卓大 + * @Date 2022/9/29 17:20:41 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +public class AddFormVariableService extends CodeGenerateBaseVariableService { + + + @Override + public boolean isSupport(CodeGeneratorConfigForm form) { + CodeInsertAndUpdate insertAndUpdate = form.getInsertAndUpdate(); + return insertAndUpdate != null && insertAndUpdate.getIsSupportInsertAndUpdate() != null && insertAndUpdate.getIsSupportInsertAndUpdate(); + } + + @Override + public Map getInjectVariablesMap(CodeGeneratorConfigForm form) { + Map variablesMap = new HashMap<>(); + + List updateFieldList = form.getInsertAndUpdate().getFieldList().stream().filter(e -> Boolean.TRUE.equals(e.getInsertFlag())).collect(Collectors.toList()); + ImmutablePair, List>> packageListAndFields = getPackageListAndFields(updateFieldList, form); + + variablesMap.put("packageName", form.getBasic().getJavaPackageName() + ".domain.form"); + variablesMap.put("importPackageList", packageListAndFields.getLeft()); + variablesMap.put("fields", packageListAndFields.getRight()); + + return variablesMap; + } + + + public ImmutablePair, List>> getPackageListAndFields(List fields, CodeGeneratorConfigForm form) { + if (CollectionUtils.isEmpty(fields)) { + return ImmutablePair.of(new ArrayList<>(), new ArrayList<>()); + } + + Map fieldMap = getFieldMap(form); + HashSet packageList = new HashSet<>(); + + + /** + * 1、LocalDate、LocalDateTime、BigDecimal 类型的包名 + * 2、排序 + */ + + List> finalFieldList = new ArrayList<>(); + + for (CodeInsertAndUpdateField field : fields) { + CodeField codeField = fieldMap.get(field.getColumnName()); + if (codeField == null) { + continue; + } + + // CodeField 和 InsertAndUpdateField 合并 + Map finalFieldMap = BeanUtil.beanToMap(field); + finalFieldMap.putAll(BeanUtil.beanToMap(codeField)); + + // 枚举 + if (SmartStringUtil.isNotEmpty(codeField.getEnumName())) { + packageList.add("import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum;"); + packageList.add("import net.lab1024.sa.common.common.validator.enumeration.CheckEnum;"); + packageList.add("import " + form.getBasic().getJavaPackageName() + ".constant." + codeField.getEnumName() + ";"); + + //enum check + String checkEnumPrefix = "@CheckEnum(value = " + codeField.getEnumName() + ".class, message = \"" + codeField.getLabel() + " 错误\""; + String checkEnum = checkEnumPrefix + (field.getRequiredFlag() ? ", required = true)" : ")"); + + finalFieldMap.put("apiModelProperty", "@ApiModelPropertyEnum(value = " + codeField.getEnumName() + ".class, desc = \"" + codeField.getLabel() + "\")"); + finalFieldMap.put("checkEnum", checkEnum); + finalFieldMap.put("isEnum", true); + + } else { + String prefix = "@ApiModelProperty(value = \"" + codeField.getLabel() + "\""; + String apiModelProperty = prefix + (field.getRequiredFlag() ? ", required = true)" : ")"); + finalFieldMap.put("apiModelProperty", apiModelProperty); + + packageList.add("import io.swagger.annotations.ApiModelProperty;"); + + if (Boolean.TRUE.equals(field.getRequiredFlag())) { + String notEmptyPrefix = "String".equals(codeField.getJavaType()) ? "@NotBlank" : "@NotNull"; + finalFieldMap.put("notEmpty", "\n " + notEmptyPrefix + "(message = \"" + codeField.getLabel() + " 不能为空\")"); + packageList.add("String".equals(codeField.getJavaType()) ? "import javax.validation.constraints.NotBlank;" + : "import javax.validation.constraints.NotNull;"); + } + } + + + //字典 + if (SmartStringUtil.isNotEmpty(codeField.getDict())) { + finalFieldMap.put("dict", "\n @JsonDeserialize(using = DictValueVoDeserializer.class)"); + packageList.add("import com.fasterxml.jackson.databind.annotation.JsonDeserialize;"); + packageList.add("import net.lab1024.sa.common.common.json.deserializer.DictValueVoDeserializer;"); + } + + //文件上传 + if (SmartStringUtil.contains(field.getFrontComponent(), "Upload")) { + finalFieldMap.put("file", "\n @JsonDeserialize(using = FileKeyVoDeserializer.class)"); + packageList.add("import com.fasterxml.jackson.databind.annotation.JsonDeserialize;"); + packageList.add("import net.lab1024.sa.common.common.json.deserializer.FileKeyVoDeserializer;"); + } + + packageList.add(getJavaPackageName(codeField.getJavaType())); + finalFieldList.add(finalFieldMap); + } + + + // lombok + packageList.add("import lombok.Data;"); + + List packageNameList = packageList.stream().filter(Objects::nonNull).collect(Collectors.toList()); + Collections.sort(packageNameList); + return ImmutablePair.of(packageNameList, finalFieldList); + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/DeleteFormVariableService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/DeleteFormVariableService.java new file mode 100644 index 00000000..52525f58 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/DeleteFormVariableService.java @@ -0,0 +1,130 @@ +package net.lab1024.sa.common.module.support.codegenerator.service.variable.backend.domain; + +import cn.hutool.core.bean.BeanUtil; +import net.lab1024.sa.common.common.util.SmartStringUtil; +import net.lab1024.sa.common.module.support.codegenerator.domain.form.CodeGeneratorConfigForm; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.CodeDelete; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.CodeField; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.CodeInsertAndUpdateField; +import net.lab1024.sa.common.module.support.codegenerator.service.variable.CodeGenerateBaseVariableService; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.tuple.ImmutablePair; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Author 1024创新实验室-主任:卓大 + * @Date 2022/9/29 17:20:41 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +public class DeleteFormVariableService extends CodeGenerateBaseVariableService { + + @Override + public boolean isSupport(CodeGeneratorConfigForm form) { + CodeDelete deleteInfo = form.getDeleteInfo(); + return deleteInfo != null && deleteInfo.getIsSupportDelete() != null && deleteInfo.getIsSupportDelete(); + } + + @Override + public Map getInjectVariablesMap(CodeGeneratorConfigForm form) { + + Map variablesMap = new HashMap<>(); + + List updateFieldList = form.getInsertAndUpdate().getFieldList().stream().filter(e -> Boolean.TRUE.equals(e.getInsertFlag())).collect(Collectors.toList()); + ImmutablePair, List>> packageListAndFields = getPackageListAndFields(updateFieldList, form); + + variablesMap.put("packageName", form.getBasic().getJavaPackageName() + ".domain.form"); + variablesMap.put("importPackageList", packageListAndFields.getLeft()); + variablesMap.put("fields", packageListAndFields.getRight()); + + return variablesMap; + } + + public ImmutablePair, List>> getPackageListAndFields(List fields, CodeGeneratorConfigForm form) { + if (CollectionUtils.isEmpty(fields)) { + return ImmutablePair.of(new ArrayList<>(), new ArrayList<>()); + } + + Map fieldMap = getFieldMap(form); + HashSet packageList = new HashSet<>(); + + + /** + * 1、LocalDate、LocalDateTime、BigDecimal 类型的包名 + * 2、排序 + */ + + List> finalFieldList = new ArrayList<>(); + + for (CodeInsertAndUpdateField field : fields) { + CodeField codeField = fieldMap.get(field.getColumnName()); + if (codeField == null) { + continue; + } + + // CodeField 和 InsertAndUpdateField 合并 + Map finalFieldMap = BeanUtil.beanToMap(field); + finalFieldMap.putAll(BeanUtil.beanToMap(codeField)); + + // 枚举 + if (SmartStringUtil.isNotEmpty(codeField.getEnumName())) { + packageList.add("import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum;"); + packageList.add("import net.lab1024.sa.common.common.validator.enumeration.CheckEnum;"); + packageList.add("import " + form.getBasic().getJavaPackageName() + ".constant." + codeField.getEnumName() + ";"); + + //enum check + String checkEnumPrefix = "@CheckEnum(value = " + codeField.getEnumName() + ".class, message = \"" + codeField.getLabel() + " 错误\""; + String checkEnum = checkEnumPrefix + (field.getRequiredFlag() ? ", required = true)" : ")"); + + finalFieldMap.put("apiModelProperty", "@ApiModelPropertyEnum(value = " + codeField.getEnumName() + ".class, desc = \"" + codeField.getLabel() + "\")"); + finalFieldMap.put("checkEnum", checkEnum); + finalFieldMap.put("isEnum", true); + + } else { + String prefix = "@ApiModelProperty(value = \"" + codeField.getLabel() + "\""; + String apiModelProperty = prefix + (field.getRequiredFlag() ? ", required = true)" : ")"); + finalFieldMap.put("apiModelProperty", apiModelProperty); + + packageList.add("import io.swagger.annotations.ApiModelProperty;"); + + if (Boolean.TRUE.equals(field.getRequiredFlag())) { + String notEmptyPrefix = "String".equals(codeField.getJavaType()) ? "@NotBlank" : "@NotNull"; + finalFieldMap.put("notEmpty", "\n " + notEmptyPrefix + "(message = \"" + codeField.getLabel() + " 不能为空\")"); + packageList.add("String".equals(codeField.getJavaType()) ? "import javax.validation.constraints.NotBlank;" + : "import javax.validation.constraints.NotNull;"); + } + } + + + //字典 + if (SmartStringUtil.isNotEmpty(codeField.getDict())) { + finalFieldMap.put("dict", "\n @JsonDeserialize(using = DictValueVoDeserializer.class)"); + packageList.add("import com.fasterxml.jackson.databind.annotation.JsonDeserialize;"); + packageList.add("import net.lab1024.sa.common.common.json.deserializer.DictValueVoDeserializer;"); + } + + //文件上传 + if (SmartStringUtil.contains(field.getFrontComponent(), "Upload")) { + finalFieldMap.put("file", "\n @JsonDeserialize(using = FileKeyVoDeserializer.class)"); + packageList.add("import com.fasterxml.jackson.databind.annotation.JsonDeserialize;"); + packageList.add("import net.lab1024.sa.common.common.json.deserializer.FileKeyVoDeserializer;"); + } + + packageList.add(getJavaPackageName(codeField.getJavaType())); + finalFieldList.add(finalFieldMap); + } + + + // lombok + packageList.add("import lombok.Data;"); + + List packageNameList = packageList.stream().filter(Objects::nonNull).collect(Collectors.toList()); + Collections.sort(packageNameList); + return ImmutablePair.of(packageNameList, finalFieldList); + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/EntityVariableService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/EntityVariableService.java new file mode 100644 index 00000000..f1943853 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/EntityVariableService.java @@ -0,0 +1,73 @@ +package net.lab1024.sa.common.module.support.codegenerator.service.variable.backend.domain; + +import com.google.common.collect.Lists; +import net.lab1024.sa.common.module.support.codegenerator.domain.form.CodeGeneratorConfigForm; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.CodeField; +import net.lab1024.sa.common.module.support.codegenerator.service.variable.CodeGenerateBaseVariableService; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Author 1024创新实验室-主任:卓大 + * @Date 2022/9/29 17:20:41 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +public class EntityVariableService extends CodeGenerateBaseVariableService { + + @Override + public boolean isSupport(CodeGeneratorConfigForm form) { + return true; + } + + @Override + public Map getInjectVariablesMap(CodeGeneratorConfigForm form) { + Map variablesMap = new HashMap<>(); + + + variablesMap.put("packageName", form.getBasic().getJavaPackageName() + ".domain.entity"); + variablesMap.put("importPackageList", getImportPackageList(form.getFields())); + + + return variablesMap; + } + + + public List getImportPackageList(List fields) { + if (CollectionUtils.isEmpty(fields)) { + return Lists.newArrayList(); + } + + /** + * 1、LocalDate、LocalDateTime、BigDecimal 类型的包名 + * 2、排序 + */ + List result = fields.stream().map(e -> getJavaPackageName(e.getJavaType())).filter(Objects::nonNull).distinct().collect(Collectors.toList()); + + // lombok + result.add("import lombok.Data;"); + + // mybatis plus + result.add("import com.baomidou.mybatisplus.annotation.TableName;"); + + //主键 + boolean isExistPrimaryKey = fields.stream().filter(e -> e.getPrimaryKeyFlag() != null && e.getPrimaryKeyFlag()).findFirst().isPresent(); + if (isExistPrimaryKey) { + result.add("import com.baomidou.mybatisplus.annotation.TableId;"); + } + + //自增 + boolean isExistAutoIncrease = fields.stream().filter(e -> e.getAutoIncreaseFlag() != null && e.getAutoIncreaseFlag()).findFirst().isPresent(); + if (isExistAutoIncrease) { + result.add("import com.baomidou.mybatisplus.annotation.IdType;"); + } + + Collections.sort(result); + return result; + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/MapperVariableService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/MapperVariableService.java new file mode 100644 index 00000000..7a6bbd26 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/MapperVariableService.java @@ -0,0 +1,93 @@ +package net.lab1024.sa.common.module.support.codegenerator.service.variable.backend.domain; + +import cn.hutool.core.bean.BeanUtil; +import net.lab1024.sa.common.module.support.codegenerator.constant.CodeQueryFieldQueryTypeEnum; +import net.lab1024.sa.common.module.support.codegenerator.domain.form.CodeGeneratorConfigForm; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.CodeInsertAndUpdateField; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.CodeQueryField; +import net.lab1024.sa.common.module.support.codegenerator.service.variable.CodeGenerateBaseVariableService; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.*; + +/** + * @Author 1024创新实验室-主任:卓大 + * @Date 2022/9/29 17:20:41 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +public class MapperVariableService extends CodeGenerateBaseVariableService { + + @Override + public boolean isSupport(CodeGeneratorConfigForm form) { + return true; + } + + @Override + public Map getInjectVariablesMap(CodeGeneratorConfigForm form) { + Map variablesMap = new HashMap<>(); + List> finalQueryFiledList = new ArrayList<>(); + for (CodeQueryField queryField : form.getQueryFields()) { + Map fieldMap = BeanUtil.beanToMap(queryField); + finalQueryFiledList.add(fieldMap); + + //模糊查询 + if (CodeQueryFieldQueryTypeEnum.LIKE.getValue().equals(queryField.getQueryTypeEnum())) { + StringBuilder stringBuilder = new StringBuilder(); + List columnNameList = queryField.getColumnNameList(); + if (columnNameList.size() == 1) { + // AND INSTR(t_notice.title,#{query.keywords}) + stringBuilder.append(" AND INSTR(" )// + .append(form.getTableName()).append("." ).append(queryField.getColumnNameList().get(0)) + .append(",#{queryForm." ) + .append(queryField.getFieldName()) + .append("})" ); + } else { + for (int i = 0; i < columnNameList.size(); i++) { + if (i == 0) { + stringBuilder.append("AND ( INSTR(" )// + .append(form.getTableName()).append("." ).append(queryField.getColumnNameList().get(i)) + .append(",#{queryForm." ) + .append(queryField.getFieldName()) + .append("})" ); + } else { + // OR INSTR(t_notice.author,#{query.keywords}) + stringBuilder.append("\n OR INSTR(" )// + .append(form.getTableName()).append("." ).append(queryField.getColumnNameList().get(i)) + .append(",#{queryForm." ) + .append(queryField.getFieldName()) + .append("})" ); + } + } + stringBuilder.append("\n )" ); + } + fieldMap.put("likeStr", stringBuilder.toString()); + }else{ + fieldMap.put("columnName",queryField.getColumnNameList().get(0)); + } + } + + variablesMap.put("queryFields", finalQueryFiledList); + variablesMap.put("daoClassName", form.getBasic().getJavaPackageName() + ".dao." + form.getBasic().getModuleName() + "Dao" ); + return variablesMap; + } + + + public List getPackageList(List fields, CodeGeneratorConfigForm form) { + if (CollectionUtils.isEmpty(fields)) { + return new ArrayList<>(); + } + + HashSet packageList = new HashSet<>(); + + //1、javabean相关的包 + packageList.addAll(getJavaBeanImportClass(form)); + + //2、dao + packageList.add("import " + form.getBasic().getJavaPackageName() + ".dao." + form.getBasic().getModuleName() + "Dao;" ); + return new ArrayList<>(packageList); + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/QueryFormVariableService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/QueryFormVariableService.java new file mode 100644 index 00000000..18bf844e --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/QueryFormVariableService.java @@ -0,0 +1,128 @@ +package net.lab1024.sa.common.module.support.codegenerator.service.variable.backend.domain; + +import cn.hutool.core.bean.BeanUtil; +import net.lab1024.sa.common.common.util.SmartEnumUtil; +import net.lab1024.sa.common.module.support.codegenerator.constant.CodeQueryFieldQueryTypeEnum; +import net.lab1024.sa.common.module.support.codegenerator.domain.form.CodeGeneratorConfigForm; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.CodeField; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.CodeQueryField; +import net.lab1024.sa.common.module.support.codegenerator.service.variable.CodeGenerateBaseVariableService; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.tuple.ImmutablePair; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Author 1024创新实验室-主任:卓大 + * @Date 2022/9/29 17:20:41 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +public class QueryFormVariableService extends CodeGenerateBaseVariableService { + + + @Override + public boolean isSupport(CodeGeneratorConfigForm form) { + return true; + } + + @Override + public Map getInjectVariablesMap(CodeGeneratorConfigForm form) { + Map variablesMap = new HashMap<>(); + ImmutablePair, List>> packageListAndFields = getPackageListAndFields(form); + variablesMap.put("packageName", form.getBasic().getJavaPackageName() + ".domain.form"); + variablesMap.put("importPackageList", packageListAndFields.getLeft()); + variablesMap.put("fields", packageListAndFields.getRight()); + return variablesMap; + } + + + public ImmutablePair, List>> getPackageListAndFields(CodeGeneratorConfigForm form) { + List fields = form.getQueryFields(); + if (CollectionUtils.isEmpty(fields)) { + return ImmutablePair.of(new ArrayList<>(), new ArrayList<>()); + } + + HashSet packageList = new HashSet<>(); + + + /** + * 1、LocalDate、LocalDateTime、BigDecimal 类型的包名 + * 2、排序 + */ + + List> finalFieldList = new ArrayList<>(); + + for (CodeQueryField field : fields) { + + // CodeField 和 InsertAndUpdateField 合并 + Map finalFieldMap = BeanUtil.beanToMap(field); + finalFieldMap.putAll(BeanUtil.beanToMap(field)); + + String queryTypeEnumStr = field.getQueryTypeEnum(); + CodeQueryFieldQueryTypeEnum queryTypeEnum = SmartEnumUtil.getEnumByValue(queryTypeEnumStr, CodeQueryFieldQueryTypeEnum.class); + if (queryTypeEnum == null) { + continue; + } + + String apiModelProperty = "@ApiModelProperty(value = \"" + field.getLabel() + "\")"; + finalFieldMap.put("apiModelProperty", apiModelProperty); + packageList.add("import io.swagger.annotations.ApiModelProperty;"); + + CodeField codeField = null; + + switch (queryTypeEnum) { + case LIKE: + finalFieldMap.put("javaType", "String"); + break; + case EQUAL: + codeField = getCodeFieldByColumnName(field.getColumnNameList().get(0), form); + if (codeField == null) { + finalFieldMap.put("javaType", "String"); + } else { + finalFieldMap.put("javaType", codeField.getJavaType()); + } + break; + case DATE_RANGE: + case DATE: + packageList.add("import java.time.LocalDate;"); + finalFieldMap.put("javaType", "LocalDate"); + break; + case ENUM: + codeField = getCodeFieldByColumnName(field.getColumnNameList().get(0), form); + if (codeField == null) { + continue; + } + + packageList.add("import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum;"); + packageList.add("import net.lab1024.sa.common.common.validator.enumeration.CheckEnum;"); + packageList.add("import " + form.getBasic().getJavaPackageName() + ".constant." + codeField.getEnumName() + ";"); + + //enum check + String checkEnum = "@CheckEnum(value = " + codeField.getEnumName() + ".class, message = \"" + codeField.getLabel() + " 错误\")"; + finalFieldMap.put("apiModelProperty", "@ApiModelPropertyEnum(value = " + codeField.getEnumName() + ".class, desc = \"" + codeField.getLabel() + "\")"); + finalFieldMap.put("checkEnum", checkEnum); + finalFieldMap.put("isEnum", true); + + finalFieldMap.put("javaType", codeField.getJavaType()); + break; + default: + finalFieldMap.put("javaType", "String"); + } + + finalFieldList.add(finalFieldMap); + } + + + // lombok + packageList.add("import lombok.Data;"); + + List packageNameList = packageList.stream().filter(Objects::nonNull).collect(Collectors.toList()); + Collections.sort(packageNameList); + return ImmutablePair.of(packageNameList, finalFieldList); + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/UpdateFormVariableService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/UpdateFormVariableService.java new file mode 100644 index 00000000..b0323ad5 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/UpdateFormVariableService.java @@ -0,0 +1,145 @@ +package net.lab1024.sa.common.module.support.codegenerator.service.variable.backend.domain; + +import cn.hutool.core.bean.BeanUtil; +import net.lab1024.sa.common.common.util.SmartStringUtil; +import net.lab1024.sa.common.module.support.codegenerator.domain.form.CodeGeneratorConfigForm; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.CodeField; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.CodeInsertAndUpdate; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.CodeInsertAndUpdateField; +import net.lab1024.sa.common.module.support.codegenerator.service.variable.CodeGenerateBaseVariableService; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.tuple.ImmutablePair; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Author 1024创新实验室-主任:卓大 + * @Date 2022/9/29 17:20:41 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +public class UpdateFormVariableService extends CodeGenerateBaseVariableService { + + + @Override + public boolean isSupport(CodeGeneratorConfigForm form) { + CodeInsertAndUpdate insertAndUpdate = form.getInsertAndUpdate(); + return insertAndUpdate != null && insertAndUpdate.getIsSupportInsertAndUpdate() != null && insertAndUpdate.getIsSupportInsertAndUpdate(); + } + + @Override + public Map getInjectVariablesMap(CodeGeneratorConfigForm form) { + Map variablesMap = new HashMap<>(); + + Map fieldMap = getFieldMap(form); + List updateFieldList = form.getInsertAndUpdate().getFieldList().stream().filter(e -> { + boolean isUpdate = Boolean.TRUE.equals(e.getUpdateFlag()); + CodeField codeField = fieldMap.get(e.getColumnName()); + if (codeField == null) { + return false; + } + + if(Boolean.TRUE.equals(codeField.getPrimaryKeyFlag())){ + e.setRequiredFlag(true); + } + + return isUpdate || Boolean.TRUE.equals(codeField.getPrimaryKeyFlag()); + } + + ).collect(Collectors.toList()); + + ImmutablePair, List>> packageListAndFields = getPackageListAndFields(updateFieldList, form); + + variablesMap.put("packageName", form.getBasic().getJavaPackageName() + ".domain.form"); + variablesMap.put("importPackageList", packageListAndFields.getLeft()); + variablesMap.put("fields", packageListAndFields.getRight()); + + return variablesMap; + } + + public ImmutablePair, List>> getPackageListAndFields(List fields, CodeGeneratorConfigForm form) { + if (CollectionUtils.isEmpty(fields)) { + return ImmutablePair.of(new ArrayList<>(), new ArrayList<>()); + } + + Map fieldMap = getFieldMap(form); + HashSet packageList = new HashSet<>(); + + + /** + * 1、LocalDate、LocalDateTime、BigDecimal 类型的包名 + * 2、排序 + */ + + List> finalFieldList = new ArrayList<>(); + + for (CodeInsertAndUpdateField field : fields) { + CodeField codeField = fieldMap.get(field.getColumnName()); + if (codeField == null) { + continue; + } + + // CodeField 和 InsertAndUpdateField 合并 + Map finalFieldMap = BeanUtil.beanToMap(field); + finalFieldMap.putAll(BeanUtil.beanToMap(codeField)); + + // 枚举 + if (SmartStringUtil.isNotEmpty(codeField.getEnumName())) { + packageList.add("import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum;"); + packageList.add("import net.lab1024.sa.common.common.validator.enumeration.CheckEnum;"); + packageList.add("import " + form.getBasic().getJavaPackageName() + ".constant." + codeField.getEnumName() + ";"); + + //enum check + String checkEnumPrefix = "@CheckEnum(value = " + codeField.getEnumName() + ".class, message = \"" + codeField.getLabel() + " 错误\""; + String checkEnum = checkEnumPrefix + (field.getRequiredFlag() ? ", required = true)" : ")"); + + finalFieldMap.put("apiModelProperty", "@ApiModelPropertyEnum(value = " + codeField.getEnumName() + ".class, desc = \"" + codeField.getLabel() + "\")"); + finalFieldMap.put("checkEnum", checkEnum); + finalFieldMap.put("isEnum", true); + + } else { + String prefix = "@ApiModelProperty(value = \"" + codeField.getLabel() + "\""; + String apiModelProperty = prefix + (field.getRequiredFlag() ? ", required = true)" : ")"); + finalFieldMap.put("apiModelProperty", apiModelProperty); + + packageList.add("import io.swagger.annotations.ApiModelProperty;"); + + if (Boolean.TRUE.equals(field.getRequiredFlag())) { + String notEmptyPrefix = "String".equals(codeField.getJavaType()) ? "@NotBlank" : "@NotNull"; + finalFieldMap.put("notEmpty", "\n " + notEmptyPrefix + "(message = \"" + codeField.getLabel() + " 不能为空\")"); + packageList.add("String".equals(codeField.getJavaType()) ? "import javax.validation.constraints.NotBlank;" : "import javax.validation.constraints.NotNull;"); + } + } + + + //字典 + if (SmartStringUtil.isNotEmpty(codeField.getDict())) { + finalFieldMap.put("dict", "\n @JsonDeserialize(using = DictValueVoDeserializer.class)"); + packageList.add("import com.fasterxml.jackson.databind.annotation.JsonDeserialize;"); + packageList.add("import net.lab1024.sa.common.common.json.deserializer.DictValueVoDeserializer;"); + } + + //文件上传 + if (SmartStringUtil.contains(field.getFrontComponent(), "Upload")) { + finalFieldMap.put("file", "\n @JsonDeserialize(using = FileKeyVoDeserializer.class)"); + packageList.add("import com.fasterxml.jackson.databind.annotation.JsonDeserialize;"); + packageList.add("import net.lab1024.sa.common.common.json.deserializer.FileKeyVoDeserializer;"); + } + + packageList.add(getJavaPackageName(codeField.getJavaType())); + finalFieldList.add(finalFieldMap); + } + + + // lombok + packageList.add("import lombok.Data;"); + + List packageNameList = packageList.stream().filter(Objects::nonNull).collect(Collectors.toList()); + Collections.sort(packageNameList); + return ImmutablePair.of(packageNameList, finalFieldList); + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/VOVariableService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/VOVariableService.java new file mode 100644 index 00000000..821629e1 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/VOVariableService.java @@ -0,0 +1,115 @@ +package net.lab1024.sa.common.module.support.codegenerator.service.variable.backend.domain; + +import cn.hutool.core.bean.BeanUtil; +import net.lab1024.sa.common.common.util.SmartStringUtil; +import net.lab1024.sa.common.module.support.codegenerator.domain.form.CodeGeneratorConfigForm; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.CodeField; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.CodeTableField; +import net.lab1024.sa.common.module.support.codegenerator.service.variable.CodeGenerateBaseVariableService; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.tuple.ImmutablePair; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Author 1024创新实验室-主任:卓大 + * @Date 2022/9/29 17:20:41 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +public class VOVariableService extends CodeGenerateBaseVariableService { + + @Override + public boolean isSupport(CodeGeneratorConfigForm form) { + return true; + } + + @Override + public Map getInjectVariablesMap(CodeGeneratorConfigForm form) { + Map variablesMap = new HashMap<>(); + + Map fieldMap = getFieldMap(form); + List updateFieldList = form.getTableFields().stream().filter(e -> Boolean.TRUE.equals(e.getShowFlag())).collect(Collectors.toList()); + + ImmutablePair, List>> packageListAndFields = getPackageListAndFields(updateFieldList, form); + + variablesMap.put("packageName", form.getBasic().getJavaPackageName() + ".domain.vo"); + variablesMap.put("importPackageList", packageListAndFields.getLeft()); + variablesMap.put("fields", packageListAndFields.getRight()); + + return variablesMap; + } + + public ImmutablePair, List>> getPackageListAndFields(List fields, CodeGeneratorConfigForm form) { + if (CollectionUtils.isEmpty(fields)) { + return ImmutablePair.of(new ArrayList<>(), new ArrayList<>()); + } + + Map fieldMap = getFieldMap(form); + HashSet packageList = new HashSet<>(); + + + /** + * 1、LocalDate、LocalDateTime、BigDecimal 类型的包名 + * 2、排序 + */ + + List> finalFieldList = new ArrayList<>(); + + for (CodeTableField field : fields) { + CodeField codeField = fieldMap.get(field.getColumnName()); + if (codeField == null) { + continue; + } + + // CodeField 和 CodeTableField 合并 + Map finalFieldMap = BeanUtil.beanToMap(field); + finalFieldMap.putAll(BeanUtil.beanToMap(codeField)); + + // 枚举 + if (SmartStringUtil.isNotEmpty(codeField.getEnumName())) { + packageList.add("import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum;"); + packageList.add("import " + form.getBasic().getJavaPackageName() + ".constant." + codeField.getEnumName() + ";"); + + finalFieldMap.put("apiModelProperty", "@ApiModelPropertyEnum(value = " + codeField.getEnumName() + ".class, desc = \"" + codeField.getLabel() + "\")"); + finalFieldMap.put("isEnum", true); + + } else { + String apiModelProperty = "@ApiModelProperty(value = \"" + codeField.getLabel() + "\")"; + finalFieldMap.put("apiModelProperty", apiModelProperty); + + packageList.add("import io.swagger.annotations.ApiModelProperty;"); + } + + + //字典 + if (isDict(field.getColumnName(), form)) { + finalFieldMap.put("dict", "\n @JsonDeserialize(using = DictValueVoDeserializer.class)"); + packageList.add("import com.fasterxml.jackson.databind.annotation.JsonDeserialize;"); + packageList.add("import net.lab1024.sa.common.common.json.deserializer.DictValueVoDeserializer;"); + } + + //文件上传 + if (isFile(field.getColumnName(), form)) { + finalFieldMap.put("file", "\n @JsonDeserialize(using = FileKeyVoDeserializer.class)"); + packageList.add("import com.fasterxml.jackson.databind.annotation.JsonDeserialize;"); + packageList.add("import net.lab1024.sa.common.common.json.deserializer.FileKeyVoDeserializer;"); + } + + packageList.add(getJavaPackageName(codeField.getJavaType())); + finalFieldList.add(finalFieldMap); + } + + + // lombok + packageList.add("import lombok.Data;"); + + List packageNameList = packageList.stream().filter(Objects::nonNull).collect(Collectors.toList()); + Collections.sort(packageNameList); + return ImmutablePair.of(packageNameList, finalFieldList); + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/ApiVariableService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/ApiVariableService.java new file mode 100644 index 00000000..22af04c9 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/ApiVariableService.java @@ -0,0 +1,29 @@ +package net.lab1024.sa.common.module.support.codegenerator.service.variable.front; + +import net.lab1024.sa.common.module.support.codegenerator.domain.form.CodeGeneratorConfigForm; +import net.lab1024.sa.common.module.support.codegenerator.service.variable.CodeGenerateBaseVariableService; + +import java.util.*; + +/** + * @Author 1024创新实验室-主任:卓大 + * @Date 2022/9/29 17:20:41 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +public class ApiVariableService extends CodeGenerateBaseVariableService { + + @Override + public boolean isSupport(CodeGeneratorConfigForm form) { + return true; + } + + @Override + public Map getInjectVariablesMap(CodeGeneratorConfigForm form) { + Map variablesMap = new HashMap<>(); + + return variablesMap; + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/ConstVariableService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/ConstVariableService.java new file mode 100644 index 00000000..0ce4b954 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/ConstVariableService.java @@ -0,0 +1,45 @@ +package net.lab1024.sa.common.module.support.codegenerator.service.variable.front; + +import cn.hutool.core.bean.BeanUtil; +import com.google.common.base.CaseFormat; +import net.lab1024.sa.common.common.util.SmartStringUtil; +import net.lab1024.sa.common.module.support.codegenerator.domain.form.CodeGeneratorConfigForm; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.CodeField; +import net.lab1024.sa.common.module.support.codegenerator.service.variable.CodeGenerateBaseVariableService; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @Author 1024创新实验室-主任:卓大 + * @Date 2022/9/29 17:20:41 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +public class ConstVariableService extends CodeGenerateBaseVariableService { + + @Override + public boolean isSupport(CodeGeneratorConfigForm form) { + return true; + } + + @Override + public Map getInjectVariablesMap(CodeGeneratorConfigForm form) { + Map variablesMap = new HashMap<>(); + List> enumList = new ArrayList<>(); + List enumFiledList = form.getFields().stream().filter(e -> SmartStringUtil.isNotBlank(e.getEnumName())).collect(Collectors.toList()); + for (CodeField codeField : enumFiledList) { + Map beanToMap = BeanUtil.beanToMap(codeField); + String upperUnderscoreEnum = CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, codeField.getEnumName()); + beanToMap.put("upperUnderscoreEnum", upperUnderscoreEnum); + enumList.add(beanToMap); + } + variablesMap.put("enumList", enumList); + return variablesMap; + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/FormVariableService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/FormVariableService.java new file mode 100644 index 00000000..544d74fa --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/FormVariableService.java @@ -0,0 +1,82 @@ +package net.lab1024.sa.common.module.support.codegenerator.service.variable.front; + +import cn.hutool.core.bean.BeanUtil; +import com.google.common.base.CaseFormat; +import net.lab1024.sa.common.common.util.SmartStringUtil; +import net.lab1024.sa.common.module.support.codegenerator.constant.CodeFrontComponentEnum; +import net.lab1024.sa.common.module.support.codegenerator.domain.form.CodeGeneratorConfigForm; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.CodeField; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.CodeInsertAndUpdateField; +import net.lab1024.sa.common.module.support.codegenerator.service.variable.CodeGenerateBaseVariableService; + +import java.util.*; + +/** + * @Author 1024创新实验室-主任:卓大 + * @Date 2022/9/29 17:20:41 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +public class FormVariableService extends CodeGenerateBaseVariableService { + + @Override + public boolean isSupport(CodeGeneratorConfigForm form) { + return true; + } + + @Override + public Map getInjectVariablesMap(CodeGeneratorConfigForm form) { + Map variablesMap = new HashMap<>(); + List> fieldsVariableList = new ArrayList<>(); + List fieldList = form.getInsertAndUpdate().getFieldList(); + + HashSet frontImportSet = new HashSet<>(); + + for (CodeInsertAndUpdateField field : fieldList) { + // 不存在 添加 和 更新 + if (!(field.getInsertFlag() || field.getUpdateFlag())) { + continue; + } + + Map objectMap = BeanUtil.beanToMap(field); + + CodeField codeField = getCodeFieldByColumnName(field.getColumnName(), form); + if (codeField == null) { + continue; + } + objectMap.put("label", codeField.getLabel()); + objectMap.put("fieldName", codeField.getFieldName()); + objectMap.put("dict", codeField.getDict()); + + if (SmartStringUtil.isNotBlank(codeField.getEnumName())) { + String upperUnderscoreEnum = CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, codeField.getEnumName()); + objectMap.put("upperUnderscoreEnum", upperUnderscoreEnum); + } + + fieldsVariableList.add(objectMap); + + if (CodeFrontComponentEnum.ENUM_SELECT.getValue().equals(field.getFrontComponent())) { + frontImportSet.add("import SmartEnumSelect from '/@/components/framework/smart-enum-select/index.vue';"); + } + + if (CodeFrontComponentEnum.BOOLEAN_SELECT.getValue().equals(field.getFrontComponent())) { + frontImportSet.add("import BooleanSelect from '/@/components/framework/boolean-select/index.vue';"); + } + + if (CodeFrontComponentEnum.DICT_SELECT.getValue().equals(field.getFrontComponent())) { + frontImportSet.add("import DictSelect from '/@/components/support/dict-select/index.vue';"); + } + + if (CodeFrontComponentEnum.FILE_UPLOAD.getValue().equals(field.getFrontComponent())) { + frontImportSet.add("import FileUpload from '/@/components/support/file-upload/index.vue';"); + } + } + + variablesMap.put("formFields", fieldsVariableList); + variablesMap.put("frontImportList", new ArrayList<>(frontImportSet)); + + return variablesMap; + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/ListVariableService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/ListVariableService.java new file mode 100644 index 00000000..df051618 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/ListVariableService.java @@ -0,0 +1,57 @@ +package net.lab1024.sa.common.module.support.codegenerator.service.variable.front; + +import cn.hutool.core.bean.BeanUtil; +import com.google.common.base.CaseFormat; +import net.lab1024.sa.common.module.support.codegenerator.constant.CodeQueryFieldQueryTypeEnum; +import net.lab1024.sa.common.module.support.codegenerator.domain.form.CodeGeneratorConfigForm; +import net.lab1024.sa.common.module.support.codegenerator.domain.model.CodeQueryField; +import net.lab1024.sa.common.module.support.codegenerator.service.variable.CodeGenerateBaseVariableService; + +import java.util.*; + +/** + * @Author 1024创新实验室-主任:卓大 + * @Date 2022/9/29 17:20:41 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +public class ListVariableService extends CodeGenerateBaseVariableService { + + @Override + public boolean isSupport(CodeGeneratorConfigForm form) { + return true; + } + + @Override + public Map getInjectVariablesMap(CodeGeneratorConfigForm form) { + Map variablesMap = new HashMap<>(); + + List> variableList = new ArrayList<>(); + List queryFields = form.getQueryFields(); + HashSet frontImportSet = new HashSet<>(); + frontImportSet.add("import " + CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_CAMEL, form.getBasic().getModuleName()) + "Form from './" + CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN, form.getBasic().getModuleName()) + "-form.vue';"); + + for (CodeQueryField queryField : queryFields) { + Map objectMap = BeanUtil.beanToMap(queryField); + variableList.add(objectMap); + + if("Enum".equals(queryField.getQueryTypeEnum())){ + frontImportSet.add("import SmartEnumSelect from '/@/components/framework/smart-enum-select/index.vue';"); + } + + if("Dict".equals(queryField.getQueryTypeEnum())){ + frontImportSet.add("import DictSelect from '/@/components/support/dict-select/index.vue';"); + } + + if(CodeQueryFieldQueryTypeEnum.DATE_RANGE.getValue().equals(queryField.getQueryTypeEnum())){ + frontImportSet.add("import { defaultTimeRanges } from '/@/lib/default-time-ranges';"); + } + + } + variablesMap.put("queryFields",variableList); + variablesMap.put("frontImportList",new ArrayList<>(frontImportSet)); + return variablesMap; + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/util/CodeGeneratorTool.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/util/CodeGeneratorTool.java new file mode 100644 index 00000000..b4843e66 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/util/CodeGeneratorTool.java @@ -0,0 +1,59 @@ +package net.lab1024.sa.common.module.support.codegenerator.util; + +import com.google.common.base.CaseFormat; +import net.lab1024.sa.common.common.constant.StringConst; + +/** + * 代码生成 velocity 工具类 + * + * @Author 1024创新实验室-主任:卓大 + * @Date 2022/9/30 19:02:17 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +public class CodeGeneratorTool { + + /** + * 小写驼峰,转为大写驼峰 + */ + public String lowerCamel2UpperCamel(String str) { + if (str == null) { + return StringConst.EMPTY; + } + return CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_CAMEL, str); + } + + /** + * 小写驼峰,转为小写中划线 + */ + public String lowerCamel2LowerHyphen(String str) { + if (str == null) { + return StringConst.EMPTY; + } + return CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_HYPHEN, str); + } + + + /** + * 去掉 注释 枚举类型 + */ + public String removeEnumDesc(String str) { + if (str == null) { + return StringConst.EMPTY; + } + + int index = str.indexOf("["); + if (index == -1) { + index = str.indexOf("【"); + } + + if (index == -1) { + return str; + } + + return str.substring(0, index - 1); + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigController.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigController.java new file mode 100644 index 00000000..5eee1999 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigController.java @@ -0,0 +1,36 @@ +package net.lab1024.sa.common.module.support.config; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.common.common.controller.SupportBaseController; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.constant.SwaggerTagConst; +import net.lab1024.sa.common.module.support.config.domain.ConfigVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +/** + * 配置 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-03-14 20:46:27 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Api(tags = {SwaggerTagConst.Support.CONFIG}) +@RestController +public class ConfigController extends SupportBaseController { + + @Autowired + private ConfigService configService; + + @ApiOperation("查询配置详情 @author 卓大") + @GetMapping("/config/queryByKey") + public ResponseDTO queryByKey(@RequestParam String configKey) { + return ResponseDTO.ok(configService.getConfig(configKey)); + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigDao.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigDao.java new file mode 100644 index 00000000..e2e9cde8 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigDao.java @@ -0,0 +1,41 @@ +package net.lab1024.sa.common.module.support.config; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.lab1024.sa.common.module.support.config.domain.ConfigEntity; +import net.lab1024.sa.common.module.support.config.domain.ConfigQueryForm; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 系统参数配置 t_config Dao层 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-03-14 20:46:27 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Component +@Mapper +public interface ConfigDao extends BaseMapper { + + /** + * 分页查询系统配置 + * + * @param page + * @return + */ + List queryByPage(Page page, @Param("query") ConfigQueryForm queryDTO); + + /** + * 根据key查询获取数据 + * + * @param key + * @return + */ + ConfigEntity selectByKey(String key); +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigKeyEnum.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigKeyEnum.java new file mode 100644 index 00000000..eb3b0a22 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigKeyEnum.java @@ -0,0 +1,35 @@ +package net.lab1024.sa.common.module.support.config; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import net.lab1024.sa.common.common.enumeration.BaseEnum; + +/** + * 系统配置常量类 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-03-14 20:46:27 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Getter +@AllArgsConstructor +public enum ConfigKeyEnum implements BaseEnum { + + /** + * 本地上传路径前缀 + */ + LOCAL_UPLOAD_URL_PREFIX("local_upload_url_prefix", "本地上传路径前缀"), + + /** + * 万能密码 + */ + SUPER_PASSWORD("super_password", "万能密码"), + + ; + + private final String value; + + private final String desc; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigService.java new file mode 100644 index 00000000..04285106 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigService.java @@ -0,0 +1,205 @@ +package net.lab1024.sa.common.module.support.config; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.common.code.UserErrorCode; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import net.lab1024.sa.common.common.util.SmartPageUtil; +import net.lab1024.sa.common.constant.ReloadConst; +import net.lab1024.sa.common.module.support.config.domain.*; +import net.lab1024.sa.common.module.support.reload.core.annoation.SmartReload; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 系统配置业务类 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-03-14 20:46:27 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Slf4j +@Service +public class ConfigService { + + /** + * 一个简单的系统配置缓存 + */ + private final ConcurrentHashMap configCache = new ConcurrentHashMap<>(); + + @Autowired + private ConfigDao configDao; + + @SmartReload(ReloadConst.CONFIG_RELOAD) + public void configReload(String param) { + this.loadConfigCache(); + } + + /** + * 初始化系统设置缓存 + */ + @PostConstruct + private void loadConfigCache() { + configCache.clear(); + List entityList = configDao.selectList(null); + if (CollectionUtils.isEmpty(entityList)) { + return; + } + entityList.forEach(entity -> this.configCache.put(entity.getConfigKey().toLowerCase(), entity)); + log.info("################# 系统配置缓存初始化完毕:{} ###################", configCache.size()); + } + + /** + * 刷新系统设置缓存 + */ + private void refreshConfigCache(Long configId) { + // 重新查询 加入缓存 + ConfigEntity configEntity = configDao.selectById(configId); + if (null == configEntity) { + return; + } + this.configCache.put(configEntity.getConfigKey().toLowerCase(), configEntity); + } + + /** + * 分页查询系统配置 + * + * @param queryDTO + * @return + */ + public ResponseDTO> queryConfigPage(ConfigQueryForm queryDTO) { + Page page = SmartPageUtil.convert2PageQuery(queryDTO); + List entityList = configDao.queryByPage(page, queryDTO); + PageResult pageResult = SmartPageUtil.convert2PageResult(page, entityList, ConfigVO.class); + return ResponseDTO.ok(pageResult); + } + + /** + * 查询配置缓存 + * + * @param configKey + * @return + */ + public ConfigVO getConfig(ConfigKeyEnum configKey) { + return this.getConfig(configKey.getValue()); + } + + /** + * 查询配置缓存 + * + * @param configKey + * @return + */ + public ConfigVO getConfig(String configKey) { + if (StrUtil.isBlank(configKey)) { + return null; + } + ConfigEntity entity = this.configCache.get(configKey.toLowerCase()); + return SmartBeanUtil.copy(entity, ConfigVO.class); + } + + /** + * 查询配置缓存参数 + * + * @param configKey + * @return + */ + public String getConfigValue(ConfigKeyEnum configKey) { + return this.getConfig(configKey).getConfigValue(); + } + + /** + * 根据参数key查询 并转换为对象 + * + * @param configKey + * @param clazz + * @param + * @return + */ + public T getConfigValue2Obj(ConfigKeyEnum configKey, Class clazz) { + String configValue = this.getConfigValue(configKey); + return JSON.parseObject(configValue, clazz); + } + + /** + * 添加系统配置 + * + * @param configAddDTO + * @return + */ + public ResponseDTO add(ConfigAddForm configAddDTO) { + ConfigEntity entity = configDao.selectByKey(configAddDTO.getConfigKey()); + if (null != entity) { + return ResponseDTO.error(UserErrorCode.ALREADY_EXIST); + } + entity = SmartBeanUtil.copy(configAddDTO, ConfigEntity.class); + configDao.insert(entity); + + // 刷新缓存 + this.refreshConfigCache(entity.getConfigId()); + return ResponseDTO.ok(); + } + + /** + * 更新系统配置 + * + * @param updateDTO + * @return + */ + public ResponseDTO updateSystemConfig(ConfigUpdateForm updateDTO) { + Long configId = updateDTO.getConfigId(); + ConfigEntity entity = configDao.selectById(configId); + if (null == entity) { + return ResponseDTO.error(UserErrorCode.DATA_NOT_EXIST); + } + ConfigEntity alreadyEntity = configDao.selectByKey(updateDTO.getConfigKey()); + if (null != alreadyEntity && !Objects.equals(configId, alreadyEntity.getConfigId())) { + return ResponseDTO.error(UserErrorCode.ALREADY_EXIST, "config key 已存在"); + } + + // 更新数据 + entity = SmartBeanUtil.copy(updateDTO, ConfigEntity.class); + configDao.updateById(entity); + + // 刷新缓存 + this.refreshConfigCache(configId); + return ResponseDTO.ok(); + } + + /** + * 更新系统配置 + * + * @param key + * @param value + * @return + */ + public ResponseDTO updateValueByKey(ConfigKeyEnum key, String value) { + ConfigVO config = this.getConfig(key); + if (null == config) { + return ResponseDTO.error(UserErrorCode.DATA_NOT_EXIST); + } + + // 更新数据 + Long configId = config.getConfigId(); + ConfigEntity entity = new ConfigEntity(); + entity.setConfigId(configId); + entity.setConfigValue(value); + configDao.updateById(entity); + + // 刷新缓存 + this.refreshConfigCache(configId); + return ResponseDTO.ok(); + } +} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigAddDTO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigAddForm.java similarity index 61% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigAddDTO.java rename to smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigAddForm.java index 18b8a7c9..e7b480cf 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigAddDTO.java +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigAddForm.java @@ -1,4 +1,4 @@ -package net.lab1024.smartadmin.module.system.systemconfig.domain.dto; +package net.lab1024.sa.common.module.support.config.domain; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -7,17 +7,16 @@ import org.hibernate.validator.constraints.Length; import javax.validation.constraints.NotBlank; /** - * [ ] + * 添加配置表单 * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-03-14 20:46:27 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ @Data -public class SystemConfigAddDTO { +public class ConfigAddForm { @ApiModelProperty("参数key") @NotBlank(message = "参数key不能为空") @@ -26,7 +25,7 @@ public class SystemConfigAddDTO { @ApiModelProperty("参数的值") @NotBlank(message = "参数的值不能为空") - @Length(max = 65530, message = "参数的值最多65530个字符") + @Length(max = 60000, message = "参数的值最多60000个字符") private String configValue; @ApiModelProperty("参数名称") @@ -34,11 +33,6 @@ public class SystemConfigAddDTO { @Length(max = 255, message = "参数名称最多255个字符") private String configName; - @ApiModelProperty("参数类别") - @NotBlank(message = "参数类别不能为空") - @Length(max = 255, message = "参数类别最多255个字符") - private String configGroup; - @ApiModelProperty("备注") @Length(max = 255, message = "备注最多255个字符") private String remark; diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigEntity.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigEntity.java new file mode 100644 index 00000000..13a3abca --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigEntity.java @@ -0,0 +1,49 @@ +package net.lab1024.sa.common.module.support.config.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 系统配置参数 实体类 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-03-14 20:46:27 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +@TableName("t_config") +public class ConfigEntity { + + @TableId(type = IdType.AUTO) + private Long configId; + + /** + * 参数key + */ + private String configKey; + + /** + * 参数的值 + */ + private String configValue; + + /** + * 参数名称 + */ + private String configName; + + /** + * 备注 + */ + private String remark; + + private LocalDateTime updateTime; + + private LocalDateTime createTime; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigQueryForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigQueryForm.java new file mode 100644 index 00000000..8e56af1b --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigQueryForm.java @@ -0,0 +1,23 @@ +package net.lab1024.sa.common.module.support.config.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.domain.PageParam; +import org.hibernate.validator.constraints.Length; + +/** + * 分页查询 系统配置 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-03-14 20:46:27 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class ConfigQueryForm extends PageParam { + + @ApiModelProperty("参数KEY") + @Length(max = 50, message = "参数Key最多50字符") + private String configKey; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigUpdateForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigUpdateForm.java new file mode 100644 index 00000000..816ced02 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigUpdateForm.java @@ -0,0 +1,23 @@ +package net.lab1024.sa.common.module.support.config.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * 配置更新表单 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-03-14 20:46:27 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class ConfigUpdateForm extends ConfigAddForm { + + @ApiModelProperty("configId") + @NotNull(message = "configId不能为空") + private Long configId; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigVO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigVO.java new file mode 100644 index 00000000..17230d81 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigVO.java @@ -0,0 +1,39 @@ +package net.lab1024.sa.common.module.support.config.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 配置信息 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-03-14 20:46:27 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class ConfigVO { + @ApiModelProperty("主键") + private Long configId; + + @ApiModelProperty("参数key") + private String configKey; + + @ApiModelProperty("参数的值") + private String configValue; + + @ApiModelProperty("参数名称") + private String configName; + + @ApiModelProperty("备注") + private String remark; + + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + + @ApiModelProperty("上次修改时间") + private LocalDateTime updateTime; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldBigDecimal.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldBigDecimal.java new file mode 100644 index 00000000..adb292c7 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldBigDecimal.java @@ -0,0 +1,21 @@ +package net.lab1024.sa.common.module.support.datatracer.annoation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 数据变动字段注解 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-07-23 19:38:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface DataTracerFieldBigDecimal { + int scale() default 2; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldDict.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldDict.java new file mode 100644 index 00000000..898a3936 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldDict.java @@ -0,0 +1,22 @@ +package net.lab1024.sa.common.module.support.datatracer.annoation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 字典的字段 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-07-23 19:38:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface DataTracerFieldDict { + + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldEnum.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldEnum.java new file mode 100644 index 00000000..d9841c75 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldEnum.java @@ -0,0 +1,25 @@ +package net.lab1024.sa.common.module.support.datatracer.annoation; + +import net.lab1024.sa.common.common.enumeration.BaseEnum; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 字段枚举 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-07-23 19:38:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface DataTracerFieldEnum { + + Class enumClass() default BaseEnum.class; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldLabel.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldLabel.java new file mode 100644 index 00000000..089325b4 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldLabel.java @@ -0,0 +1,26 @@ +package net.lab1024.sa.common.module.support.datatracer.annoation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 字段标签 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-07-23 19:38:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface DataTracerFieldLabel { + /** + * 本属性的注释信息 + * @return + */ + String value() default ""; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldSql.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldSql.java new file mode 100644 index 00000000..4f76636a --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldSql.java @@ -0,0 +1,40 @@ +package net.lab1024.sa.common.module.support.datatracer.annoation; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 支持查询sql + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-07-23 19:38:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface DataTracerFieldSql { + + /** + * 关联字段名称 + * @return + */ + String relateColumn() default "id"; + + /** + * 关联显示的字段 + * @return + */ + String relateDisplayColumn() default ""; + /** + * 是否关联字段查询Mapper + * @return + */ + Class relateMapper() default BaseMapper.class; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/constant/DataTracerConst.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/constant/DataTracerConst.java new file mode 100644 index 00000000..729a241f --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/constant/DataTracerConst.java @@ -0,0 +1,27 @@ +package net.lab1024.sa.common.module.support.datatracer.constant; + +/** + * 常量 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-07-23 19:38:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public class DataTracerConst { + + public static final String TAB = " "; + + public static final String SPLIT_LINE = "-----------------------------"; + + public static final String BLANK = " "; + public static final String SPLIT = ": "; + public static final String HTML_BR = "
"; + + public static final String INSERT = "新增"; + + public static final String DELETE = "删除"; + + public static final String UPDATE = "修改"; +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/constant/DataTracerTypeEnum.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/constant/DataTracerTypeEnum.java new file mode 100644 index 00000000..0bed6700 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/constant/DataTracerTypeEnum.java @@ -0,0 +1,32 @@ +package net.lab1024.sa.common.module.support.datatracer.constant; + + +import lombok.AllArgsConstructor; +import lombok.Getter; +import net.lab1024.sa.common.common.enumeration.BaseEnum; + +/** + * 数据业务类型 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-07-23 19:38:52- + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@AllArgsConstructor +@Getter +public enum DataTracerTypeEnum implements BaseEnum { + + GOODS(1, "商品"), + + OA_NOTICE(2, "OA-通知公告"), + + OA_ENTERPRISE(3, "OA-企业信息"), + + ; + + private final Integer value; + + private final String desc; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/controller/DataTracerController.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/controller/DataTracerController.java new file mode 100644 index 00000000..2fabdd6a --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/controller/DataTracerController.java @@ -0,0 +1,40 @@ +package net.lab1024.sa.common.module.support.datatracer.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.common.common.controller.SupportBaseController; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.constant.SwaggerTagConst; +import net.lab1024.sa.common.module.support.datatracer.domain.form.DataTracerQueryForm; +import net.lab1024.sa.common.module.support.datatracer.domain.vo.DataTracerVO; +import net.lab1024.sa.common.module.support.datatracer.service.DataTracerService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.Valid; + +/** + * 数据变动记录 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-07-23 19:38:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Api(tags = {SwaggerTagConst.Support.DATA_TRACER}) +@RestController +public class DataTracerController extends SupportBaseController { + + @Autowired + private DataTracerService dataTracerService; + + @ApiOperation("分页查询业务操作日志 - @author 卓大") + @PostMapping("/dataTracer/query") + public ResponseDTO> query(@Valid @RequestBody DataTracerQueryForm queryForm) { + return dataTracerService.query(queryForm); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/dao/DataTracerDao.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/dao/DataTracerDao.java new file mode 100644 index 00000000..989b6382 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/dao/DataTracerDao.java @@ -0,0 +1,42 @@ +package net.lab1024.sa.common.module.support.datatracer.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.lab1024.sa.common.module.support.datatracer.domain.entity.DataTracerEntity; +import net.lab1024.sa.common.module.support.datatracer.domain.form.DataTracerQueryForm; +import net.lab1024.sa.common.module.support.datatracer.domain.vo.DataTracerVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * dao: t_data_tracker + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-07-23 19:38:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Mapper +@Component +public interface DataTracerDao extends BaseMapper { + + /** + * 操作记录查询 + * + * @return + */ + List selectRecord(@Param("dataId") Long dataId, @Param("dataType") Integer dataType); + + /** + * 分页查询 + * + * @param page + * @param queryForm + * @return + */ + List query(Page page, @Param("query") DataTracerQueryForm queryForm); +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/bo/DataTracerContentBO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/bo/DataTracerContentBO.java new file mode 100644 index 00000000..5333642f --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/bo/DataTracerContentBO.java @@ -0,0 +1,39 @@ +package net.lab1024.sa.common.module.support.datatracer.domain.bo; + +import lombok.Data; + +import java.lang.reflect.Field; + +/** + * 变动内容 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-07-23 19:38:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class DataTracerContentBO { + + /** + * 变动字段 + */ + private Field field; + + /** + * 变动字段的值 + */ + private Object fieldValue; + + /** + * 变动字段描述 + */ + private String fieldDesc; + + /** + * 变动内容 + */ + private String fieldContent; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/entity/DataTracerEntity.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/entity/DataTracerEntity.java new file mode 100644 index 00000000..5732a8f2 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/entity/DataTracerEntity.java @@ -0,0 +1,90 @@ +package net.lab1024.sa.common.module.support.datatracer.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import net.lab1024.sa.common.module.support.datatracer.constant.DataTracerTypeEnum; + +import java.time.LocalDateTime; + +/** + * 数据记录 实体 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-07-23 19:38:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +@TableName("t_data_tracer") +public class DataTracerEntity { + + @TableId(type = IdType.AUTO) + private Long dataTracerId; + /** + * 数据id + */ + private Long dataId; + /** + * 业务类型 + * {@link DataTracerTypeEnum} + */ + private Integer type; + + /** + * 内容 + */ + private String content; + + /** + * diff 差异:旧的数据 + */ + private String diffOld; + + /** + * 差异:新的数据 + */ + private String diffNew; + + /** + * 扩展字段 + */ + private String extraData; + + /** + * 用户 + */ + private Long userId; + + /** + * 用户类型 + */ + private Integer userType; + + /** + * 用户名 + */ + private String userName; + + /** + * 请求ip + */ + private String ip; + + /** + * 请求头 + */ + private String userAgent; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/form/DataTracerForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/form/DataTracerForm.java new file mode 100644 index 00000000..607d1e66 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/form/DataTracerForm.java @@ -0,0 +1,54 @@ +package net.lab1024.sa.common.module.support.datatracer.domain.form; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import net.lab1024.sa.common.module.support.datatracer.constant.DataTracerTypeEnum; + +/** + * 数据变动表单 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-07-23 19:38:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DataTracerForm { + + /** + * 业务id + */ + private Long dataId; + + /** + * 业务类型 + */ + private DataTracerTypeEnum type; + + /** + * 操作内容 + */ + private String content; + + /** + * diff 差异:旧的数据 + */ + private String diffOld; + + /** + * 差异:新的数据 + */ + private String diffNew; + + /** + * 扩展字段 + */ + private String extraData; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/form/DataTracerQueryForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/form/DataTracerQueryForm.java new file mode 100644 index 00000000..4eccbe5b --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/form/DataTracerQueryForm.java @@ -0,0 +1,32 @@ +package net.lab1024.sa.common.module.support.datatracer.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.domain.PageParam; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; +import net.lab1024.sa.common.module.support.datatracer.constant.DataTracerTypeEnum; + +import javax.validation.constraints.NotNull; + +/** + * 查询表单 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-07-23 19:38:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class DataTracerQueryForm extends PageParam { + + @ApiModelPropertyEnum(DataTracerTypeEnum.class) + private Integer type; + + @ApiModelProperty("业务id") + @NotNull(message = "业务id不能为空") + private Long dataId; + + @ApiModelProperty("关键字") + private String keywords; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/vo/DataTracerVO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/vo/DataTracerVO.java new file mode 100644 index 00000000..e55beb98 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/vo/DataTracerVO.java @@ -0,0 +1,62 @@ +package net.lab1024.sa.common.module.support.datatracer.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.enumeration.UserTypeEnum; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; +import net.lab1024.sa.common.module.support.datatracer.constant.DataTracerTypeEnum; + +import java.time.LocalDateTime; + +/** + * 变动记录 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-07-23 19:38:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class DataTracerVO { + + @ApiModelProperty("日志id") + private Long dataTracerId; + + @ApiModelProperty("单据id") + private Long dataId; + + @ApiModelPropertyEnum(value = DataTracerTypeEnum.class, desc = "业务类型") + private Integer type; + + @ApiModelProperty("操作内容") + private String content; + + @ApiModelProperty("diff 差异:旧的数据") + private String diffOld; + + @ApiModelProperty("差异:新的数据") + private String diffNew; + + @ApiModelProperty("扩展字段") + private String extraData; + + @ApiModelProperty("操作人") + private Long userId; + + @ApiModelPropertyEnum(value = UserTypeEnum.class, desc = "用户类型") + private Integer userType; + + @ApiModelProperty("操作人名称") + private String userName; + + @ApiModelProperty("userAgent") + private String userAgent; + + @ApiModelProperty("ip") + private String ip; + + @ApiModelProperty("操作时间") + private LocalDateTime createTime; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/manager/DataTracerManger.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/manager/DataTracerManger.java new file mode 100644 index 00000000..8586cdfb --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/manager/DataTracerManger.java @@ -0,0 +1,19 @@ +package net.lab1024.sa.common.module.support.datatracer.manager; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import net.lab1024.sa.common.module.support.datatracer.dao.DataTracerDao; +import net.lab1024.sa.common.module.support.datatracer.domain.entity.DataTracerEntity; +import org.springframework.stereotype.Service; + +/** + * manager层 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-07-23 19:38:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Service +public class DataTracerManger extends ServiceImpl { +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/service/DataTracerChangeContentService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/service/DataTracerChangeContentService.java new file mode 100644 index 00000000..24af9f40 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/service/DataTracerChangeContentService.java @@ -0,0 +1,486 @@ +package net.lab1024.sa.common.module.support.datatracer.service; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.google.common.base.CaseFormat; +import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.common.util.SmartBigDecimalUtil; +import net.lab1024.sa.common.common.util.SmartEnumUtil; +import net.lab1024.sa.common.common.util.SmartStringUtil; +import net.lab1024.sa.common.module.support.datatracer.annoation.*; +import net.lab1024.sa.common.module.support.datatracer.constant.DataTracerConst; +import net.lab1024.sa.common.module.support.datatracer.domain.bo.DataTracerContentBO; +import net.lab1024.sa.common.module.support.dict.service.DictCacheService; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Service; + +import java.beans.PropertyDescriptor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.*; +import java.util.Map.Entry; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 数据变更内容 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-07-23 19:38:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Slf4j +@Service +public class DataTracerChangeContentService { + + @Autowired + private ApplicationContext applicationContext; + @Autowired + private DictCacheService dictCacheService; + /** + * 字段描述缓存 + */ + private ConcurrentHashMap fieldDescCacheMap = new ConcurrentHashMap<>(); + + /** + * 类 加注解字段缓存 + */ + private ConcurrentHashMap> fieldMap = new ConcurrentHashMap<>(); + + /** + * 数据批量对比 + * + * @param oldObjectList + * @param newObjectList + * @param + * @return + */ + public String getChangeContent(List oldObjectList, List newObjectList) { + boolean valid = this.valid(oldObjectList, newObjectList); + if (!valid) { + return ""; + } + String operateType = this.getOperateType(oldObjectList, newObjectList); + String operateContent = ""; + if (DataTracerConst.INSERT.equals(operateType) || DataTracerConst.DELETE.equals(operateType)) { + operateContent = this.getObjectListContent(newObjectList); + if (StringUtils.isEmpty(operateContent)) { + return ""; + } + return operateType + ":" + operateContent; + } + if (DataTracerConst.UPDATE.equals(operateType)) { + return this.getUpdateContentList(oldObjectList, newObjectList); + } + return operateContent; + } + + + /** + * 解析多个对象的变更,删除,新增 + * oldObject 为空 ,newObject 不为空 为新增 + * oldObject 不为空 ,newObject 不空 为删除 + * 都不为空为编辑 + * + * @param oldObject + * @param newObject + * @return + */ + public String getChangeContent(Object oldObject, Object newObject) { + boolean valid = this.valid(oldObject, newObject); + if (!valid) { + return ""; + } + String operateType = this.getOperateType(oldObject, newObject); + String operateContent = ""; + if (DataTracerConst.INSERT.equals(operateType) || DataTracerConst.DELETE.equals(operateType)) { + operateContent = this.getAddDeleteContent(newObject); + } + if (DataTracerConst.UPDATE.equals(operateType)) { + operateContent = this.getUpdateContent(oldObject, newObject); + } + if (StringUtils.isEmpty(operateContent)) { + return ""; + } + return operateContent; + } + + /** + * 解析单个bean的内容 + * + * @param object + * @return + */ + public String getChangeContent(Object object) { + return this.getAddDeleteContent(object); + } + + // ---------------------------- 以下 是 私有private 方法 ---------------------------- + + /** + * 获取新增或删除操作内容 + * + * @param object 新增或删除的对象 + * @return + */ + private String getAddDeleteContent(Object object) { + List fields = this.getField(object); + Map beanParseMap = this.fieldParse(object, fields); + return this.getAddDeleteContent(beanParseMap); + } + + /** + * 单个对象变动内容 + * + * @param oldObjectList + * @param newObjectList + * @param + * @return + */ + private String getUpdateContentList(List oldObjectList, List newObjectList) { + String oldContent = this.getObjectListContent(oldObjectList); + String newContent = this.getObjectListContent(newObjectList); + if (oldContent.equals(newContent)) { + return ""; + } + if (StringUtils.isEmpty(oldContent) && StringUtils.isEmpty(newContent)) { + return ""; + } + return "【原数据】:
" + oldContent + "
" + "【新数据】:
" + newContent; + } + + /** + * 获取一个对象的内容信息 + * + * @param objectList + * @param + * @return + */ + private String getObjectListContent(List objectList) { + if (CollectionUtils.isEmpty(objectList)) { + return ""; + } + List fields = this.getField(objectList.get(0)); + List contentList = Lists.newArrayList(); + for (Object objItem : objectList) { + Map beanParseMap = this.fieldParse(objItem, fields); + contentList.add(this.getAddDeleteContent(beanParseMap)); + } + return StringUtils.join(contentList, "
"); + } + + private String getAddDeleteContent(Map beanParseMap) { + List contentList = new ArrayList<>(); + for (Entry entry : beanParseMap.entrySet()) { + DataTracerContentBO dataTracerContentBO = entry.getValue(); + Boolean jsonFlag = JSONUtil.isTypeJSON(dataTracerContentBO.getFieldContent()); + String filedDesc = dataTracerContentBO.getFieldDesc(); + if (jsonFlag) { + contentList.add(filedDesc + "(请进入详情查看)"); + } else { + contentList.add(dataTracerContentBO.getFieldDesc() + ":" + dataTracerContentBO.getFieldContent()); + } + } + String operateContent = StringUtils.join(contentList, "
"); + if (StringUtils.isEmpty(operateContent)) { + return ""; + } + return operateContent; + } + + + /** + * 获取更新操作内容 + * + * @param oldObject + * @param newObject + * @return + */ + private String getUpdateContent(T oldObject, T newObject) { + List fields = this.getField(oldObject); + List contentList = new ArrayList<>(); + Map oldBeanParseMap = this.fieldParse(oldObject, fields); + Map newBeanParseMap = this.fieldParse(newObject, fields); + //oldBeanParseMap与newBeanParseMap size一定相同 + for (Entry entry : oldBeanParseMap.entrySet()) { + String fieldName = entry.getKey(); + // 新旧对象内容 + DataTracerContentBO oldContentBO = entry.getValue(); + DataTracerContentBO newContentBO = newBeanParseMap.get(fieldName); + // fieldContent + String oldContent = oldContentBO.getFieldContent() == null ? "" : oldContentBO.getFieldContent(); + String newContent = newContentBO.getFieldContent() == null ? "" : newContentBO.getFieldContent(); + + if (oldContent.equals(newContent)) { + continue; + } + String fieldDesc = oldContentBO.getFieldDesc(); + Boolean jsonFlag = JSONUtil.isTypeJSON(oldContent) || JSONUtil.isTypeJSON(newContent); + if (jsonFlag) { + String content = fieldDesc + "【进入详情查看】"; + contentList.add(content); + continue; + } + String content = fieldDesc + ":" + "由【" + oldContent + "】变更为【" + newContent + "】"; + contentList.add(content); + } + if (CollectionUtils.isEmpty(contentList)) { + return ""; + } + String operateContent = StringUtils.join(contentList, "
"); + if (StringUtils.isEmpty(operateContent)) { + return ""; + } + return operateContent; + } + + + /** + * 接bean对象 + * + * @param object + * @param fields + * @return + */ + private Map fieldParse(Object object, List fields) { + if (fields == null || fields.size() == 0) { + return new HashMap<>(); + } + //对象解析结果 + Map objectParse = new HashMap<>(16); + for (Field field : fields) { + field.setAccessible(true); + String desc = this.getFieldDesc(field); + if (StringUtils.isEmpty(desc)) { + continue; + } + DataTracerContentBO dataTracerContentBO = this.getFieldValue(field, object); + if (dataTracerContentBO != null) { + dataTracerContentBO.setFieldDesc(desc); + objectParse.put(field.getName(), dataTracerContentBO); + } + } + return objectParse; + } + + /** + * 获取字段值 + * + * @param field + * @param object + * @return + */ + private DataTracerContentBO getFieldValue(Field field, Object object) { + Object fieldValue = ""; + Class clazz = object.getClass(); + try { + PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); + Method get = pd.getReadMethod(); + fieldValue = get.invoke(object); + } catch (Exception e) { + log.error("bean operate log: reflect field value error " + field.getName()); + return null; + } + if (fieldValue == null) { + return null; + } + + String fieldContent = ""; + DataTracerFieldEnum dataTracerFieldEnum = field.getAnnotation(DataTracerFieldEnum.class); + DataTracerFieldSql dataTracerFieldSql = field.getAnnotation(DataTracerFieldSql.class); + DataTracerFieldDict dataTracerFieldDict = field.getAnnotation(DataTracerFieldDict.class); + if (dataTracerFieldEnum != null) { + if (fieldValue instanceof Collection) { + fieldContent = SmartEnumUtil.getEnumDescByValueList((Collection) fieldValue, dataTracerFieldEnum.enumClass()); + } else { + fieldContent = SmartEnumUtil.getEnumDescByValue(fieldValue, dataTracerFieldEnum.enumClass()); + } + } else if (dataTracerFieldDict != null) { + fieldContent = dictCacheService.selectValueNameByValueCodeSplit(fieldValue.toString()); + } else if (dataTracerFieldSql != null) { + fieldContent = this.getRelateDisplayValue(fieldValue, dataTracerFieldSql); + } else if (fieldValue instanceof Date) { + fieldContent = DateUtil.formatDateTime((Date) fieldValue); + } else if (fieldValue instanceof LocalDateTime) { + fieldContent = LocalDateTimeUtil.formatNormal((LocalDateTime) fieldValue); + } else if (fieldValue instanceof LocalDate) { + fieldContent = LocalDateTimeUtil.formatNormal((LocalDate) fieldValue); + } else if (fieldValue instanceof BigDecimal) { + DataTracerFieldBigDecimal dataTracerFieldBigDecimal = field.getAnnotation(DataTracerFieldBigDecimal.class); + if (dataTracerFieldBigDecimal != null) { + BigDecimal value = SmartBigDecimalUtil.setScale((BigDecimal) fieldValue, dataTracerFieldBigDecimal.scale()); + fieldContent = value.toString(); + } + } else { + fieldContent = JSON.toJSONString(fieldValue); + } + DataTracerContentBO dataTracerContentBO = new DataTracerContentBO(); + dataTracerContentBO.setField(field); + dataTracerContentBO.setFieldValue(fieldValue); + dataTracerContentBO.setFieldContent(fieldContent); + return dataTracerContentBO; + } + + /** + * 获取关联字段的显示值 + * + * @param fieldValue + * @return + */ + private String getRelateDisplayValue(Object fieldValue, DataTracerFieldSql dataTracerFieldSql) { + Class relateMapper = dataTracerFieldSql.relateMapper(); + BaseMapper mapper = applicationContext.getBean(relateMapper); + if (mapper == null) { + return ""; + } + String relateFieldValue = fieldValue.toString(); + QueryWrapper qw = new QueryWrapper(); + qw.select(CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dataTracerFieldSql.relateDisplayColumn())); + qw.in(CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dataTracerFieldSql.relateColumn()), relateFieldValue); + List displayValue = mapper.selectObjs(qw); + if (CollectionUtils.isEmpty(displayValue)) { + return ""; + } + return SmartStringUtil.join(",", displayValue); + } + + /** + * 获取字段描述信息 优先 OperateField 没得话swagger判断 + * + * @param field + * @return + */ + private String getFieldDesc(Field field) { + // 根据字段名称 从缓存中查询 + String fieldName = field.toGenericString(); + String desc = fieldDescCacheMap.get(fieldName); + if (null != desc) { + return desc; + } + DataTracerFieldLabel operateField = field.getAnnotation(DataTracerFieldLabel.class); + if (operateField != null) { + return operateField.value(); + } + fieldDescCacheMap.put(fieldName, desc); + return desc; + } + + /** + * 获取操作类型 + * + * @param oldObject + * @param newObject + * @return + */ + private String getOperateType(Object oldObject, Object newObject) { + if (oldObject == null && newObject != null) { + return DataTracerConst.INSERT; + } + if (oldObject != null && newObject == null) { + return DataTracerConst.DELETE; + } + return DataTracerConst.UPDATE; + } + + /** + * 校验是否进行比对 + * + * @param oldObject + * @param newObject + * @return + */ + private boolean valid(Object oldObject, Object newObject) { + if (oldObject == null && newObject == null) { + return false; + } + if (oldObject == null && newObject != null) { + return true; + } + if (oldObject != null && newObject == null) { + return true; + } + if (oldObject != null && newObject != null) { + String oldClass = oldObject.getClass().getName(); + String newClass = newObject.getClass().getName(); + return oldClass.equals(newClass); + } + return true; + } + + + /** + * 校验 + * + * @param oldObjectList + * @param newObjectList + * @param + * @return + */ + private boolean valid(List oldObjectList, List newObjectList) { + if (CollectionUtils.isEmpty(oldObjectList) && CollectionUtils.isEmpty(newObjectList)) { + return false; + } + if (CollectionUtils.isEmpty(oldObjectList) && CollectionUtils.isNotEmpty(newObjectList)) { + return true; + } + if (CollectionUtils.isNotEmpty(oldObjectList) && CollectionUtils.isEmpty(newObjectList)) { + return true; + } + if (CollectionUtils.isNotEmpty(oldObjectList) && CollectionUtils.isNotEmpty(newObjectList)) { + T oldObject = oldObjectList.get(0); + T newObject = newObjectList.get(0); + String oldClass = oldObject.getClass().getName(); + String newClass = newObject.getClass().getName(); + return oldClass.equals(newClass); + } + return true; + } + + /** + * 查询 包含 file key 注解的字段 + * 使用缓存 + * + * @param obj + * @return + */ + private List getField(Object obj) { + // 从缓存中查询 + Class tClass = obj.getClass(); + List fieldList = fieldMap.get(tClass); + if (null != fieldList) { + return fieldList; + } + + // 这一段递归代码 是为了 从父类中获取属性 + Class tempClass = tClass; + fieldList = new ArrayList<>(); + while (tempClass != null) { + Field[] declaredFields = tempClass.getDeclaredFields(); + for (Field field : declaredFields) { + // 过虑出有注解字段 + if (!field.isAnnotationPresent(DataTracerFieldLabel.class)) { + continue; + } + field.setAccessible(true); + fieldList.add(field); + } + tempClass = tempClass.getSuperclass(); + } + fieldMap.put(tClass, fieldList); + return fieldList; + } + + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/service/DataTracerService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/service/DataTracerService.java new file mode 100644 index 00000000..2968ed5a --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/service/DataTracerService.java @@ -0,0 +1,224 @@ +package net.lab1024.sa.common.module.support.datatracer.service; + + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.RequestUser; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import net.lab1024.sa.common.common.util.SmartPageUtil; +import net.lab1024.sa.common.common.util.SmartRequestUtil; +import net.lab1024.sa.common.module.support.datatracer.constant.DataTracerConst; +import net.lab1024.sa.common.module.support.datatracer.constant.DataTracerTypeEnum; +import net.lab1024.sa.common.module.support.datatracer.dao.DataTracerDao; +import net.lab1024.sa.common.module.support.datatracer.domain.entity.DataTracerEntity; +import net.lab1024.sa.common.module.support.datatracer.domain.form.DataTracerForm; +import net.lab1024.sa.common.module.support.datatracer.domain.form.DataTracerQueryForm; +import net.lab1024.sa.common.module.support.datatracer.domain.vo.DataTracerVO; +import net.lab1024.sa.common.module.support.datatracer.manager.DataTracerManger; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * 数据变动记录 Service + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-07-23 19:38:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Slf4j +@Service +public class DataTracerService { + + @Autowired + private DataTracerDao dataTracerDao; + + @Autowired + private DataTracerManger dataTracerManger; + + @Autowired + private DataTracerChangeContentService dataTracerChangeContentService; + + /** + * 获取变更内容 + * + * @param object + * @return + */ + public String getChangeContent(Object object) { + return dataTracerChangeContentService.getChangeContent(object); + } + + /** + * 获取变更内容 + */ + public String getChangeContent(Object oldObject, Object newObject) { + return dataTracerChangeContentService.getChangeContent(oldObject, newObject); + } + + + /** + * 获取变更内容 + */ + public String getChangeContent(List oldObjectList, List newObjectList) { + return dataTracerChangeContentService.getChangeContent(oldObjectList, newObjectList); + } + + + /** + * 保存【修改】数据变动记录 + * + * @param dataId + * @param type + */ + public void update(Long dataId, DataTracerTypeEnum type, Object oldObject, Object newObject) { + DataTracerForm form = DataTracerForm.builder() + .dataId(dataId) + .type(type) + .content(dataTracerChangeContentService.getChangeContent(oldObject, newObject)) + .build(); + this.addTrace(form); + } + + + /** + * 保存【新增】数据变动记录 + * + * @param dataId + * @param type + */ + public void insert(Long dataId, DataTracerTypeEnum type) { + DataTracerForm form = DataTracerForm.builder().dataId(dataId).type(type).content(DataTracerConst.INSERT).build(); + this.addTrace(form); + } + + /** + * 保存【删除】数据变动记录 + * + * @param dataId + * @param type + */ + public void delete(Long dataId, DataTracerTypeEnum type) { + DataTracerForm form = DataTracerForm.builder().dataId(dataId).type(type).content(DataTracerConst.DELETE).build(); + this.addTrace(form); + } + + /** + * 保存【删除】数据变动记录 + * + * @param dataId + * @param type + */ + public void delete(Long dataId, DataTracerTypeEnum type, Object object) { + DataTracerForm form = DataTracerForm.builder().dataId(dataId).type(type).content(DataTracerConst.DELETE).build(); + this.addTrace(form); + } + + /** + * 保存【批量删除】数据变动记录 + * + * @param dataIdList + * @param type + */ + public void batchDelete(List dataIdList, DataTracerTypeEnum type) { + if (CollectionUtils.isEmpty(dataIdList)) { + return; + } + + this.addTraceList(dataIdList.stream().map(e -> DataTracerForm.builder() + .dataId(e) + .type(type) + .content(DataTracerConst.DELETE) + .build()) + .collect(Collectors.toList()) + ); + } + + /** + * 保存数据变动记录 + * + * @param dataId + * @param type + * @param content + */ + public void addTrace(Long dataId, DataTracerTypeEnum type, String content) { + DataTracerForm form = DataTracerForm.builder().dataId(dataId).type(type).content(content).build(); + this.addTrace(form); + } + + /** + * 保存数据变动记录 + */ + public void addTrace(DataTracerForm tracerForm) { + RequestUser requestUser = SmartRequestUtil.getRequestUser(); + this.addTrace(tracerForm, requestUser); + } + + + /** + * 保存数据变动记录 + */ + public void addTrace(DataTracerForm tracerForm, RequestUser requestUser) { + DataTracerEntity tracerEntity = SmartBeanUtil.copy(tracerForm, DataTracerEntity.class); + tracerEntity.setType(tracerForm.getType().getValue()); + if (requestUser != null) { + tracerEntity.setIp(requestUser.getIp()); + tracerEntity.setUserAgent(requestUser.getUserAgent()); + tracerEntity.setUserId(requestUser.getUserId()); + tracerEntity.setUserType(requestUser.getUserType().getValue()); + tracerEntity.setUserName(requestUser.getUserName()); + } + dataTracerManger.save(tracerEntity); + } + + /** + * 批量保存数据变动记录 + */ + public void addTraceList(List tracerFormList) { + RequestUser requestUser = SmartRequestUtil.getRequestUser(); + this.addTraceList(tracerFormList, requestUser); + } + + /** + * 批量保存数据变动记录 + */ + public void addTraceList(List tracerFormList, RequestUser requestUser) { + if (CollectionUtils.isEmpty(tracerFormList)) { + return; + } + + List tracerEntityList = tracerFormList.stream().map(e -> { + DataTracerEntity tracerEntity = SmartBeanUtil.copy(e, DataTracerEntity.class); + tracerEntity.setType(e.getType().getValue()); + tracerEntity.setIp(requestUser.getIp()); + tracerEntity.setUserAgent(requestUser.getUserAgent()); + tracerEntity.setUserId(requestUser.getUserId()); + tracerEntity.setUserType(requestUser.getUserType().getValue()); + tracerEntity.setUserName(requestUser.getUserName()); + return tracerEntity; + }).collect(Collectors.toList()); + dataTracerManger.saveBatch(tracerEntityList); + } + + + /** + * 分页查询 + * + * @param queryForm + * @return + */ + public ResponseDTO> query(DataTracerQueryForm queryForm) { + Page page = SmartPageUtil.convert2PageQuery(queryForm); + List list = dataTracerDao.query(page, queryForm); + PageResult pageResult = SmartPageUtil.convert2PageResult(page, list); + return ResponseDTO.ok(pageResult); + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/controller/DictController.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/controller/DictController.java new file mode 100644 index 00000000..ae71b8ec --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/controller/DictController.java @@ -0,0 +1,63 @@ +package net.lab1024.sa.common.module.support.dict.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.common.common.controller.SupportBaseController; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.constant.SwaggerTagConst; +import net.lab1024.sa.common.module.support.dict.service.DictCacheService; +import net.lab1024.sa.common.module.support.dict.service.DictService; +import net.lab1024.sa.common.module.support.dict.domain.form.*; +import net.lab1024.sa.common.module.support.dict.domain.vo.DictKeyVO; +import net.lab1024.sa.common.module.support.dict.domain.vo.DictValueVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 字典 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022/5/26 19:40:55 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Api(tags = {SwaggerTagConst.Support.DICT}) +@RestController +public class DictController extends SupportBaseController { + + @Autowired + private DictService dictService; + @Autowired + private DictCacheService dictCacheService; + + + @ApiOperation("查询全部字典key - @author 卓大") + @GetMapping("/dict/key/queryAll") + public ResponseDTO> queryAll() { + return ResponseDTO.ok(dictService.queryAllKey()); + } + + @ApiOperation("分页查询数据字典value - @author 罗伊") + @PostMapping("/dict/value/query") + public ResponseDTO> valueQuery(@Valid @RequestBody DictValueQueryForm queryForm) { + return dictService.valueQuery(queryForm); + } + + @ApiOperation("数据字典缓存-刷新- @author 罗伊") + @GetMapping("/dict/cache/refresh") + public ResponseDTO cacheRefresh() { + return dictCacheService.cacheRefresh(); + } + + @ApiOperation("数据字典-值列表- @author 罗伊") + @GetMapping("/dict/value/list/{keyCode}") + public ResponseDTO> valueList(@PathVariable String keyCode) { + List dictValueVOList = dictCacheService.selectByKeyCode(keyCode); + return ResponseDTO.ok(dictValueVOList); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/dao/DictKeyDao.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/dao/DictKeyDao.java new file mode 100644 index 00000000..f4d48a55 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/dao/DictKeyDao.java @@ -0,0 +1,58 @@ +package net.lab1024.sa.common.module.support.dict.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.lab1024.sa.common.module.support.dict.domain.entity.DictKeyEntity; +import net.lab1024.sa.common.module.support.dict.domain.form.DictKeyQueryForm; +import net.lab1024.sa.common.module.support.dict.domain.vo.DictKeyVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 字典 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022/5/26 19:40:55 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Mapper +@Component +public interface DictKeyDao extends BaseMapper { + + /** + * 查找所有未删除的自带key + * @param deletedFlag + * @return + */ + List selectByDeletedFlag(@Param("deletedFlag") Boolean deletedFlag); + + /** + * 逻辑删除 + * + * @param dictKeyIdList + * @param deletedFlag + */ + void updateDeletedFlagByIdList(@Param("dictKeyIdList") List dictKeyIdList, @Param("deletedFlag") Boolean deletedFlag); + + /** + * 分页查询 + * + * @param page + * @param queryForm + * @return + */ + List query(Page page, @Param("query") DictKeyQueryForm queryForm); + + /** + * 跟进code查询 + * @param keyCode + * @param deletedFlag + * @return + */ + DictKeyEntity selectByCode(@Param("keyCode")String keyCode, @Param("deletedFlag") Boolean deletedFlag); +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/dao/DictValueDao.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/dao/DictValueDao.java new file mode 100644 index 00000000..4cefc6bd --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/dao/DictValueDao.java @@ -0,0 +1,69 @@ +package net.lab1024.sa.common.module.support.dict.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.lab1024.sa.common.module.support.dict.domain.entity.DictValueEntity; +import net.lab1024.sa.common.module.support.dict.domain.form.DictValueQueryForm; +import net.lab1024.sa.common.module.support.dict.domain.vo.DictValueVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 字典 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022/5/26 19:40:55 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Mapper +@Component +public interface DictValueDao extends BaseMapper { + + /** + * 查找所有未删除的自带key + * + * @param deletedFlag + * @return + */ + List selectByDeletedFlag(@Param("deletedFlag") Boolean deletedFlag); + + /** + * 查找所有未删除的自带key + * + * @param dictKeyId + * @param deletedFlag + * @return + */ + List selectByDeletedFlagAndKeyId(@Param("dictKeyId") Long dictKeyId, @Param("deletedFlag") Boolean deletedFlag); + + /** + * 逻辑删除 + * + * @param dictValueIdList + * @param deletedFlag + */ + void updateDeletedFlagByIdList(@Param("dictValueIdList") List dictValueIdList, @Param("deletedFlag") Boolean deletedFlag); + + /** + * 分页查询 + * + * @param page + * @param queryForm + * @return + */ + List query(Page page, @Param("query") DictValueQueryForm queryForm); + + /** + * 跟进code查询 + * + * @param valueCode + * @param deletedFlag + * @return + */ + DictValueEntity selectByCode(@Param("valueCode") String valueCode, @Param("deletedFlag") Boolean deletedFlag); +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/entity/DictKeyEntity.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/entity/DictKeyEntity.java new file mode 100644 index 00000000..1696440a --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/entity/DictKeyEntity.java @@ -0,0 +1,54 @@ +package net.lab1024.sa.common.module.support.dict.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 字典 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022/5/26 19:40:55 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +@TableName("t_dict_key") +public class DictKeyEntity { + + @TableId(type = IdType.AUTO) + private Long dictKeyId; + + /** + * 编码 + */ + private String keyCode; + /** + * 名称 + */ + private String keyName; + + /** + * 备注 + */ + private String remark; + + /** + * 删除标识 + */ + private Boolean deletedFlag; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/entity/DictValueEntity.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/entity/DictValueEntity.java new file mode 100644 index 00000000..ff46e340 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/entity/DictValueEntity.java @@ -0,0 +1,58 @@ +package net.lab1024.sa.common.module.support.dict.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 字典 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022/5/26 19:40:55 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +@TableName("t_dict_value") +public class DictValueEntity { + + @TableId(type = IdType.AUTO) + private Long dictValueId; + + private Long dictKeyId; + /** + * 编码 + */ + private String valueCode; + /** + * 名称 + */ + private String valueName; + /** + * 备注 + */ + private String remark; + + /** + * 排序 + */ + private Integer sort; + /** + * 删除标识 + */ + private Boolean deletedFlag; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictKeyAddForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictKeyAddForm.java new file mode 100644 index 00000000..d6bc67b6 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictKeyAddForm.java @@ -0,0 +1,34 @@ +package net.lab1024.sa.common.module.support.dict.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; + +/** + * 字典 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022/5/26 19:40:55 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class DictKeyAddForm { + + @ApiModelProperty("编码") + @NotBlank(message = "编码不能为空") + @Length(max = 50,message = "编码太长了,不能超过50字符") + private String keyCode; + + @ApiModelProperty("名称") + @NotBlank(message = "名称不能为空") + @Length(max = 50,message = "名称太长了,不能超过50字符") + private String keyName; + + @ApiModelProperty("备注") + @Length(max = 500,message = "备注太长了") + private String remark; +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictKeyQueryForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictKeyQueryForm.java new file mode 100644 index 00000000..8cd26dd4 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictKeyQueryForm.java @@ -0,0 +1,24 @@ +package net.lab1024.sa.common.module.support.dict.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.domain.PageParam; + +/** + * 字典 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022/5/26 19:40:55 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class DictKeyQueryForm extends PageParam { + + @ApiModelProperty("搜索词") + private String searchWord; + + @ApiModelProperty(value = "删除标识",hidden = true) + private Boolean deletedFlag; +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictKeyUpdateForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictKeyUpdateForm.java new file mode 100644 index 00000000..87bfb204 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictKeyUpdateForm.java @@ -0,0 +1,23 @@ +package net.lab1024.sa.common.module.support.dict.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * 字典 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022/5/26 19:40:55 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class DictKeyUpdateForm extends DictKeyAddForm { + + @ApiModelProperty("keyId") + @NotNull(message = "keyId不能为空") + private Long dictKeyId; +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictValueAddForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictValueAddForm.java new file mode 100644 index 00000000..7f5b0931 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictValueAddForm.java @@ -0,0 +1,44 @@ +package net.lab1024.sa.common.module.support.dict.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 字典 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022/5/26 19:40:55 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class DictValueAddForm { + + @ApiModelProperty("dictKeyId") + @NotNull(message = "dictKeyId不能为空") + private Long dictKeyId; + + @ApiModelProperty("编码") + @NotBlank(message = "编码不能为空") + @Length(max = 50,message = "编码太长了,不能超过50字符") + private String valueCode; + + @ApiModelProperty("名称") + @NotBlank(message = "名称不能为空") + @Length(max = 50,message = "名称太长了,不能超过50字符") + private String valueName; + + @ApiModelProperty("排序") + @NotNull(message = "排序不能为空") + private Integer sort; + + @ApiModelProperty("备注") + @Length(max = 500,message = "备注太长了") + private String remark; + +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictValueQueryForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictValueQueryForm.java new file mode 100644 index 00000000..40540ea2 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictValueQueryForm.java @@ -0,0 +1,30 @@ +package net.lab1024.sa.common.module.support.dict.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.domain.PageParam; + +import javax.validation.constraints.NotNull; + +/** + * 字典 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022/5/26 19:40:55 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class DictValueQueryForm extends PageParam { + + @ApiModelProperty("dictKeyId") + @NotNull(message = "dictKeyId不能为空") + private Long dictKeyId; + + @ApiModelProperty("搜索词") + private String searchWord; + + @ApiModelProperty(value = "删除标识",hidden = true) + private Boolean deletedFlag; +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictValueUpdateForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictValueUpdateForm.java new file mode 100644 index 00000000..273100a4 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictValueUpdateForm.java @@ -0,0 +1,23 @@ +package net.lab1024.sa.common.module.support.dict.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * 字典 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022/5/26 19:40:55 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class DictValueUpdateForm extends DictValueAddForm { + + @ApiModelProperty("valueId") + @NotNull(message = "valueId不能为空") + private Long dictValueId; +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/vo/DictKeyVO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/vo/DictKeyVO.java new file mode 100644 index 00000000..f9864955 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/vo/DictKeyVO.java @@ -0,0 +1,29 @@ +package net.lab1024.sa.common.module.support.dict.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 字典 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022/5/26 19:40:55 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class DictKeyVO { + + @ApiModelProperty("dictKeyId") + private Long dictKeyId; + + @ApiModelProperty("编码") + private String keyCode; + + @ApiModelProperty("名称") + private String keyName; + + @ApiModelProperty("备注") + private String remark; +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/vo/DictValueVO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/vo/DictValueVO.java new file mode 100644 index 00000000..ec7535cf --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/vo/DictValueVO.java @@ -0,0 +1,35 @@ +package net.lab1024.sa.common.module.support.dict.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 字典 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022/5/26 19:40:55 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class DictValueVO { + + @ApiModelProperty("valueId") + private Long dictValueId; + + @ApiModelProperty("dictKeyId") + private Long dictKeyId; + + @ApiModelProperty("编码") + private String valueCode; + + @ApiModelProperty("名称") + private String valueName; + + @ApiModelProperty("排序") + private Integer sort; + + @ApiModelProperty("备注") + private String remark; +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/service/DictCacheService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/service/DictCacheService.java new file mode 100644 index 00000000..63c9a66f --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/service/DictCacheService.java @@ -0,0 +1,133 @@ +package net.lab1024.sa.common.module.support.dict.service; + +import cn.hutool.core.util.StrUtil; +import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import net.lab1024.sa.common.module.support.dict.dao.DictKeyDao; +import net.lab1024.sa.common.module.support.dict.dao.DictValueDao; +import net.lab1024.sa.common.module.support.dict.domain.entity.DictKeyEntity; +import net.lab1024.sa.common.module.support.dict.domain.entity.DictValueEntity; +import net.lab1024.sa.common.module.support.dict.domain.vo.DictValueVO; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; + +/** + * 字典缓存 服务 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022/5/26 19:40:55 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Slf4j +@Service +public class DictCacheService { + + @Autowired + private DictKeyDao dictKeyDao; + @Autowired + private DictValueDao dictValueDao; + + private ConcurrentHashMap> DICT_CACHE = new ConcurrentHashMap<>(); + + private ConcurrentHashMap VALUE_CACHE = new ConcurrentHashMap<>(); + + + @PostConstruct + public void dictCache() { + this.cacheInit(); + } + + public void cacheInit() { + List dictKeyEntityList = dictKeyDao.selectByDeletedFlag(false); + if (CollectionUtils.isEmpty(dictKeyEntityList)) { + return; + } + List dictKeyValueList = dictValueDao.selectByDeletedFlag(false); + List dictValueVOList = SmartBeanUtil.copyList(dictKeyValueList, DictValueVO.class); + Map> valueListMap = dictValueVOList.stream().collect(Collectors.groupingBy(DictValueVO::getDictKeyId)); + //字典键值对缓存 + for (DictKeyEntity dictKeyEntity : dictKeyEntityList) { + String keyCode = dictKeyEntity.getKeyCode(); + Long dictKeyId = dictKeyEntity.getDictKeyId(); + DICT_CACHE.put(keyCode, valueListMap.getOrDefault(dictKeyId, Lists.newArrayList())); + } + //字典值缓存 + dictValueVOList.forEach(e -> { + VALUE_CACHE.put(e.getValueCode(), e); + }); + log.info("################# 数据字典缓存初始化完毕 ###################"); + } + + /** + * 刷新缓存 + */ + public ResponseDTO cacheRefresh() { + DICT_CACHE.clear(); + VALUE_CACHE.clear(); + this.cacheInit(); + return ResponseDTO.ok(); + } + + /** + * 查询某个key对应的字典值列表 + * + * @param keyCode + * @return + */ + public List selectByKeyCode(String keyCode) { + return DICT_CACHE.getOrDefault(keyCode, Lists.newArrayList()); + } + + /** + * 查询值code名称 + * + * @param valueCode + * @return + */ + public String selectValueNameByValueCode(String valueCode) { + if (StrUtil.isEmpty(valueCode)) { + return null; + } + + DictValueVO dictValueVO = VALUE_CACHE.get(valueCode); + if (dictValueVO == null) { + return ""; + } + return dictValueVO.getValueName(); + } + + public DictValueVO selectValueByValueCode(String valueCode) { + if (StrUtil.isEmpty(valueCode)) { + return null; + } + return VALUE_CACHE.get(valueCode); + } + + public String selectValueNameByValueCodeSplit(String valueCodes) { + if (StrUtil.isEmpty(valueCodes)) { + return ""; + } + List valueNameList = Lists.newArrayList(); + String[] valueCodeArray = valueCodes.split(","); + for (String valueCode : valueCodeArray) { + DictValueVO dictValueVO = VALUE_CACHE.get(valueCode); + if (dictValueVO != null) { + valueNameList.add(dictValueVO.getValueName()); + } + } + return StringUtils.join(valueNameList, ","); + } + +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/service/DictService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/service/DictService.java new file mode 100644 index 00000000..ad624157 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/service/DictService.java @@ -0,0 +1,196 @@ +package net.lab1024.sa.common.module.support.dict.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.google.common.collect.Interner; +import com.google.common.collect.Interners; +import net.lab1024.sa.common.common.code.UserErrorCode; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import net.lab1024.sa.common.common.util.SmartPageUtil; +import net.lab1024.sa.common.module.support.dict.dao.DictKeyDao; +import net.lab1024.sa.common.module.support.dict.dao.DictValueDao; +import net.lab1024.sa.common.module.support.dict.domain.entity.DictKeyEntity; +import net.lab1024.sa.common.module.support.dict.domain.entity.DictValueEntity; +import net.lab1024.sa.common.module.support.dict.domain.form.*; +import net.lab1024.sa.common.module.support.dict.domain.vo.DictKeyVO; +import net.lab1024.sa.common.module.support.dict.domain.vo.DictValueVO; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 字典 服务 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2022/5/26 19:40:55 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Service +public class DictService { + + @Autowired + private DictKeyDao dictKeyDao; + @Autowired + private DictValueDao dictValueDao; + @Autowired + private DictCacheService dictCacheService; + /** + * CODE锁 + */ + private static final Interner CODE_POOL = Interners.newWeakInterner(); + + + /** + * key添加 + * + * @param keyAddForm + * @return + */ + public ResponseDTO keyAdd(DictKeyAddForm keyAddForm) { + synchronized (CODE_POOL.intern(keyAddForm.getKeyCode())) { + DictKeyEntity dictKeyEntity = dictKeyDao.selectByCode(keyAddForm.getKeyCode(), false); + if (dictKeyEntity != null) { + return ResponseDTO.error(UserErrorCode.ALREADY_EXIST); + } + dictKeyEntity = SmartBeanUtil.copy(keyAddForm, DictKeyEntity.class); + dictKeyDao.insert(dictKeyEntity); + } + return ResponseDTO.ok(); + } + + /** + * 值添加 + * + * @param valueAddForm + * @return + */ + public ResponseDTO valueAdd(DictValueAddForm valueAddForm) { + synchronized (CODE_POOL.intern(valueAddForm.getValueCode())) { + DictValueEntity dictValueEntity = dictValueDao.selectByCode(valueAddForm.getValueCode(), false); + if (dictValueEntity != null) { + return ResponseDTO.error(UserErrorCode.ALREADY_EXIST); + } + dictValueEntity = SmartBeanUtil.copy(valueAddForm, DictValueEntity.class); + dictValueDao.insert(dictValueEntity); + } + return ResponseDTO.ok(); + } + + /** + * key 编辑 + * + * @param keyUpdateForm + * @return + */ + public ResponseDTO keyEdit(DictKeyUpdateForm keyUpdateForm) { + synchronized (CODE_POOL.intern(keyUpdateForm.getKeyCode())) { + DictKeyEntity dictKeyEntity = dictKeyDao.selectByCode(keyUpdateForm.getKeyCode(), false); + if (dictKeyEntity != null && !dictKeyEntity.getDictKeyId().equals(keyUpdateForm.getDictKeyId())) { + return ResponseDTO.error(UserErrorCode.ALREADY_EXIST); + } + DictKeyEntity dictKeyUpdateEntity = SmartBeanUtil.copy(keyUpdateForm, DictKeyEntity.class); + dictKeyDao.updateById(dictKeyUpdateEntity); + } + return ResponseDTO.ok(); + } + + /** + * 值编辑 + * + * @param valueUpdateForm + * @return + */ + public ResponseDTO valueEdit(DictValueUpdateForm valueUpdateForm) { + DictKeyEntity dictKeyEntity = dictKeyDao.selectById(valueUpdateForm.getDictKeyId()); + if (dictKeyEntity == null || dictKeyEntity.getDeletedFlag()) { + return ResponseDTO.userErrorParam("key不能存在"); + } + synchronized (CODE_POOL.intern(valueUpdateForm.getValueCode())) { + DictValueEntity dictValueEntity = dictValueDao.selectByCode(valueUpdateForm.getValueCode(), false); + if (dictValueEntity != null && !dictValueEntity.getDictValueId().equals(valueUpdateForm.getDictValueId())) { + return ResponseDTO.error(UserErrorCode.ALREADY_EXIST); + } + DictValueEntity dictValueUpdateEntity = SmartBeanUtil.copy(valueUpdateForm, DictValueEntity.class); + dictValueDao.updateById(dictValueUpdateEntity); + } + return ResponseDTO.ok(); + } + + /** + * key删除 + * + * @param keyIdList + * @return + */ + public ResponseDTO keyDelete(List keyIdList) { + if (CollectionUtils.isEmpty(keyIdList)) { + return ResponseDTO.ok(); + } + dictKeyDao.updateDeletedFlagByIdList(keyIdList, true); + return ResponseDTO.ok(); + } + + /** + * 值删除 + * + * @param valueIdList + * @return + */ + public ResponseDTO valueDelete(List valueIdList) { + if (CollectionUtils.isEmpty(valueIdList)) { + return ResponseDTO.ok(); + } + dictValueDao.updateDeletedFlagByIdList(valueIdList, true); + return ResponseDTO.ok(); + } + + /** + * 分页查询key + * + * @param queryForm + * @return + */ + public ResponseDTO> keyQuery(DictKeyQueryForm queryForm) { + queryForm.setDeletedFlag(false); + Page page = SmartPageUtil.convert2PageQuery(queryForm); + List list = dictKeyDao.query(page, queryForm); + PageResult pageResult = SmartPageUtil.convert2PageResult(page, list); + if (pageResult.getEmptyFlag()) { + return ResponseDTO.ok(pageResult); + } + return ResponseDTO.ok(pageResult); + } + + /** + * 所有key + * + * @return + */ + public List queryAllKey() { + return SmartBeanUtil.copyList(dictKeyDao.selectList(null), DictKeyVO.class); + } + + /** + * 分页查询值 + * + * @param queryForm + * @return + */ + public ResponseDTO> valueQuery(DictValueQueryForm queryForm) { + queryForm.setDeletedFlag(false); + Page page = SmartPageUtil.convert2PageQuery(queryForm); + List list = dictValueDao.query(page, queryForm); + PageResult pageResult = SmartPageUtil.convert2PageResult(page, list); + if (pageResult.getEmptyFlag()) { + return ResponseDTO.ok(pageResult); + } + return ResponseDTO.ok(pageResult); + } + + +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/controller/FeedbackController.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/controller/FeedbackController.java new file mode 100644 index 00000000..b9a1cd09 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/controller/FeedbackController.java @@ -0,0 +1,53 @@ +package net.lab1024.sa.common.module.support.feedback.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.common.controller.SupportBaseController; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.RequestUser; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartRequestUtil; +import net.lab1024.sa.common.constant.SwaggerTagConst; +import net.lab1024.sa.common.module.support.feedback.domain.FeedbackAddForm; +import net.lab1024.sa.common.module.support.feedback.domain.FeedbackQueryForm; +import net.lab1024.sa.common.module.support.feedback.domain.FeedbackVO; +import net.lab1024.sa.common.module.support.feedback.service.FeedbackService; +import net.lab1024.sa.common.module.support.repeatsubmit.annoation.RepeatSubmit; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.Valid; + +/** + * 意见反馈 + * + * @Author 1024创新实验室: 开云 + * @Date 2022-08-11 20:48:09 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Slf4j +@Api(tags = SwaggerTagConst.Support.FEEDBACK) +@RestController +public class FeedbackController extends SupportBaseController { + + @Autowired + private FeedbackService feedbackService; + + @ApiOperation("意见反馈-分页查询 @author 开云") + @PostMapping("/feedback/query") + public ResponseDTO> query(@RequestBody @Valid FeedbackQueryForm queryForm) { + return feedbackService.query(queryForm); + } + + @ApiOperation("意见反馈-新增 @author 开云") + @PostMapping("/feedback/add") + public ResponseDTO add(@RequestBody @Valid FeedbackAddForm addForm) { + RequestUser employee = SmartRequestUtil.getRequestUser(); + return feedbackService.add(addForm, employee); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/dao/FeedbackDao.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/dao/FeedbackDao.java new file mode 100644 index 00000000..e03e2e14 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/dao/FeedbackDao.java @@ -0,0 +1,31 @@ +package net.lab1024.sa.common.module.support.feedback.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.lab1024.sa.common.module.support.feedback.domain.FeedbackEntity; +import net.lab1024.sa.common.module.support.feedback.domain.FeedbackQueryForm; +import net.lab1024.sa.common.module.support.feedback.domain.FeedbackVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 意见反馈 dao + * + * @Author 1024创新实验室: 开云 + * @Date 2022-08-11 20:48:09 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Mapper +@Component +public interface FeedbackDao extends BaseMapper { + + /** + * 分页查询 + */ + List queryPage(Page page, @Param("query") FeedbackQueryForm query); +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackAddForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackAddForm.java new file mode 100644 index 00000000..dd32ea57 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackAddForm.java @@ -0,0 +1,33 @@ +package net.lab1024.sa.common.module.support.feedback.domain; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.json.deserializer.FileKeyVoDeserializer; +import net.lab1024.sa.common.common.json.serializer.FileKeyVoSerializer; + +import javax.validation.constraints.NotBlank; + +/** + * 意见反馈 添加表单 + * + * @Author 1024创新实验室: 开云 + * @Date 2022-08-11 20:48:09 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class FeedbackAddForm { + + @ApiModelProperty("反馈内容") + @NotBlank(message = "反馈内容不能为空") + private String feedbackContent; + + @ApiModelProperty("反馈图片") + @JsonSerialize(using = FileKeyVoSerializer.class) + @JsonDeserialize(using = FileKeyVoDeserializer.class) + private String feedbackAttachment; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackEntity.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackEntity.java new file mode 100644 index 00000000..1a5a9899 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackEntity.java @@ -0,0 +1,62 @@ +package net.lab1024.sa.common.module.support.feedback.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 意见反馈 表 + * + * @Author 1024创新实验室: 开云 + * @Date 2022-08-11 20:48:09 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +@TableName("t_feedback") +public class FeedbackEntity { + /** + * 主键 + */ + @TableId(type = IdType.AUTO) + private Long feedbackId; + + /** + * 反馈内容 + */ + private String feedbackContent; + + /** + * 反馈附件 + */ + private String feedbackAttachment; + + /** + * 创建人id + */ + private Long userId; + + /** + * 用户类型 + */ + private Integer userType; + + /** + * 创建人姓名 + */ + private String userName; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; + + /** + * 创建时间 + */ + private LocalDateTime createTime; +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackQueryForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackQueryForm.java new file mode 100644 index 00000000..954a2e9f --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackQueryForm.java @@ -0,0 +1,31 @@ +package net.lab1024.sa.common.module.support.feedback.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.domain.PageParam; +import org.hibernate.validator.constraints.Length; + +import java.time.LocalDate; + +/** + * 意见反馈 查询 + * + * @Author 1024创新实验室: 开云 + * @Date 2022-08-11 20:48:09 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class FeedbackQueryForm extends PageParam { + + @ApiModelProperty("搜索词") + @Length(max = 25, message = "搜索词最多25字符") + private String searchWord; + + @ApiModelProperty(value = "开始时间", example = "2021-02-14") + private LocalDate startDate; + + @ApiModelProperty(value = "截止时间", example = "2022-10-15") + private LocalDate endDate; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackVO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackVO.java new file mode 100644 index 00000000..83d19674 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackVO.java @@ -0,0 +1,51 @@ +package net.lab1024.sa.common.module.support.feedback.domain; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.enumeration.UserTypeEnum; +import net.lab1024.sa.common.common.json.deserializer.FileKeyVoDeserializer; +import net.lab1024.sa.common.common.json.serializer.FileKeyVoSerializer; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; + +import java.time.LocalDateTime; + +/** + * 意见反馈 返回对象 + * + * @Author 1024创新实验室: 开云 + * @Date 2022-08-11 20:48:09 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class FeedbackVO { + + @ApiModelProperty(value = "主键") + private Long feedbackId; + + @ApiModelProperty(value = "反馈内容") + private String feedbackContent; + + @ApiModelProperty("反馈图片") + @JsonSerialize(using = FileKeyVoSerializer.class) + @JsonDeserialize(using = FileKeyVoDeserializer.class) + private String feedbackAttachment; + + @ApiModelProperty(value = "创建人id") + private Long userId; + + @ApiModelProperty(value = "创建人姓名") + private String userName; + + @ApiModelPropertyEnum(value = UserTypeEnum.class, desc = "创建人类型") + private Integer userType; + + @ApiModelProperty(value = "更新时间") + private LocalDateTime updateTime; + + @ApiModelProperty(value = "创建时间") + private LocalDateTime createTime; +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/service/FeedbackService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/service/FeedbackService.java new file mode 100644 index 00000000..a534cc7e --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/service/FeedbackService.java @@ -0,0 +1,62 @@ +package net.lab1024.sa.common.module.support.feedback.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.RequestUser; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import net.lab1024.sa.common.common.util.SmartPageUtil; +import net.lab1024.sa.common.module.support.feedback.dao.FeedbackDao; +import net.lab1024.sa.common.module.support.feedback.domain.FeedbackAddForm; +import net.lab1024.sa.common.module.support.feedback.domain.FeedbackEntity; +import net.lab1024.sa.common.module.support.feedback.domain.FeedbackQueryForm; +import net.lab1024.sa.common.module.support.feedback.domain.FeedbackVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + + +/** + * 意见反馈 + * + * @Author 1024创新实验室: 开云 + * @Date 2022-08-11 20:48:09 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Service +public class FeedbackService { + + @Autowired + private FeedbackDao feedbackDao; + + /** + * 分页查询 + * + * @param queryForm + * @return + */ + public ResponseDTO> query(FeedbackQueryForm queryForm) { + Page page = SmartPageUtil.convert2PageQuery(queryForm); + List list = feedbackDao.queryPage(page, queryForm); + PageResult pageResultDTO = SmartPageUtil.convert2PageResult(page, list); + if (pageResultDTO.getEmptyFlag()) { + return ResponseDTO.ok(pageResultDTO); + } + return ResponseDTO.ok(pageResultDTO); + } + + /** + * 新建 + */ + public ResponseDTO add(FeedbackAddForm addForm, RequestUser requestUser) { + FeedbackEntity feedback = SmartBeanUtil.copy(addForm, FeedbackEntity.class); + feedback.setUserType(requestUser.getUserType().getValue()); + feedback.setUserId(requestUser.getUserId()); + feedback.setUserName(requestUser.getUserName()); + feedbackDao.insert(feedback); + return ResponseDTO.ok(); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/constant/FileFolderTypeEnum.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/constant/FileFolderTypeEnum.java new file mode 100644 index 00000000..5428c418 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/constant/FileFolderTypeEnum.java @@ -0,0 +1,49 @@ +package net.lab1024.sa.common.module.support.file.constant; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import net.lab1024.sa.common.common.enumeration.BaseEnum; + +/** + * 文件服务 文件夹位置类型枚举类 + * + * @Author 1024创新实验室: 胡克 + * @Date 2019年10月11日 15:34:47 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@AllArgsConstructor +@Getter +public enum FileFolderTypeEnum implements BaseEnum { + + COMMON(1, FileFolderTypeEnum.FOLDER_PUBLIC + "/common/", "通用"), + + NOTICE(2, FileFolderTypeEnum.FOLDER_PUBLIC + "/notice/", "公告"), + + HELP_DOC(3, FileFolderTypeEnum.FOLDER_PUBLIC + "help-doc", "帮助中心"), + + FEEDBACK(4, FileFolderTypeEnum.FOLDER_PUBLIC + "/feedback/", "意见反馈"), + + ; + + /** + * 公用读取文件夹 public + */ + public static final String FOLDER_PUBLIC = "public"; + + /** + * 私有读取文件夹 private + */ + public static final String FOLDER_PRIVATE = "private"; + + + public static final String INFO = "1:通用"; + + private final Integer value; + + private final String folder; + + private final String desc; +} + diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/controller/FileController.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/controller/FileController.java new file mode 100644 index 00000000..04dc3f10 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/controller/FileController.java @@ -0,0 +1,72 @@ +package net.lab1024.sa.common.module.support.file.controller; + +import cn.hutool.extra.servlet.ServletUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.common.common.constant.RequestHeaderConst; +import net.lab1024.sa.common.common.controller.SupportBaseController; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.RequestUser; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartRequestUtil; +import net.lab1024.sa.common.constant.SwaggerTagConst; +import net.lab1024.sa.common.module.support.file.domain.form.FileQueryForm; +import net.lab1024.sa.common.module.support.file.domain.form.FileUrlUploadForm; +import net.lab1024.sa.common.module.support.file.domain.vo.FileUploadVO; +import net.lab1024.sa.common.module.support.file.domain.vo.FileVO; +import net.lab1024.sa.common.module.support.repeatsubmit.annoation.RepeatSubmit; +import net.lab1024.sa.common.module.support.file.constant.FileFolderTypeEnum; +import net.lab1024.sa.common.module.support.file.service.FileService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.validation.Valid; + +/** + * 文件服务 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2019年10月11日 15:34:47 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@RestController +@Api(tags = {SwaggerTagConst.Support.FILE}) +public class FileController extends SupportBaseController { + + @Autowired + private FileService fileService; + + + @ApiOperation(value = "文件上传 @author 胡克", notes = FileFolderTypeEnum.INFO) + @PostMapping("/file/upload") + public ResponseDTO upload(@RequestParam MultipartFile file, + @RequestParam Integer folder) { + RequestUser requestUser = SmartRequestUtil.getRequestUser(); + return fileService.fileUpload(file, folder, requestUser); + } + + @ApiOperation(value = "文件上传,通过url上传 @author 胡克", notes = FileFolderTypeEnum.INFO) + @PostMapping("/file/upload/url") + public ResponseDTO uploadByUrl(@RequestBody @Valid FileUrlUploadForm uploadForm) { + RequestUser requestUser = SmartRequestUtil.getRequestUser(); + return fileService.fileUpload(uploadForm,requestUser); + } + + @ApiOperation("获取文件URL:根据fileKey @author 胡克") + @GetMapping("/file/getFileUrl") + public ResponseDTO getUrl(@RequestParam String fileKey) { + return fileService.getFileUrl(fileKey); + } + + @ApiOperation(value = "下载文件流(根据fileKey) @author 胡克") + @GetMapping("/file/downLoad") + public ResponseEntity downLoad(@RequestParam String fileKey, HttpServletRequest request) { + String userAgent = ServletUtil.getHeaderIgnoreCase(request, RequestHeaderConst.USER_AGENT); + return fileService.downloadByFileKey(fileKey, userAgent); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/dao/FileDao.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/dao/FileDao.java new file mode 100644 index 00000000..f49b4177 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/dao/FileDao.java @@ -0,0 +1,44 @@ +package net.lab1024.sa.common.module.support.file.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.lab1024.sa.common.module.support.file.domain.vo.FileVO; +import net.lab1024.sa.common.module.support.file.domain.entity.FileEntity; +import net.lab1024.sa.common.module.support.file.domain.form.FileQueryForm; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 文件服务 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2019年10月11日 15:34:47 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Mapper +@Component +public interface FileDao extends BaseMapper { + + /** + * 文件key单个查询 + * + * @param fileKey + * @return + */ + FileVO getByFileKey(@Param("fileKey") String fileKey); + + /** + * 分页 查询 + * + * @param page + * @param queryForm + * @return + */ + List queryPage(Page page, @Param("queryForm") FileQueryForm queryForm); + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/entity/FileEntity.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/entity/FileEntity.java new file mode 100644 index 00000000..194a4ecb --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/entity/FileEntity.java @@ -0,0 +1,73 @@ +package net.lab1024.sa.common.module.support.file.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 文件服务 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2019年10月11日 15:34:47 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +@TableName(value = "t_file") +public class FileEntity { + + /** + * 主键id + */ + @TableId(type = IdType.AUTO) + private Long fileId; + + /** + * 文件夹类型 + */ + private Integer folderType; + + /** + * 文件名称 + */ + private String fileName; + + /** + * 文件大小 + */ + private Long fileSize; + + /** + * 文件key,用于文件下载 + */ + private String fileKey; + + /** + * 文件类型 + */ + private String fileType; + + /** + * 创建人,即上传人 + */ + private Long creatorId; + + /** + * 用户类型 + */ + private Integer creatorUserType; + + /** + * 创建人 姓名 + */ + private String creatorName; + + private LocalDateTime updateTime; + + private LocalDateTime createTime; +} + diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/form/FileQueryForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/form/FileQueryForm.java new file mode 100644 index 00000000..29bc58ce --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/form/FileQueryForm.java @@ -0,0 +1,47 @@ +package net.lab1024.sa.common.module.support.file.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.domain.PageParam; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; +import net.lab1024.sa.common.common.validator.enumeration.CheckEnum; +import net.lab1024.sa.common.module.support.file.constant.FileFolderTypeEnum; +import org.hibernate.validator.constraints.Length; + +import java.time.LocalDate; + +/** + * 文件信息查询 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2019年10月11日 15:34:47 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class FileQueryForm extends PageParam { + + @ApiModelPropertyEnum(value = FileFolderTypeEnum.class, desc = "文件夹类型") + @CheckEnum(value = FileFolderTypeEnum.class, message = "文件夹类型 错误") + private Integer folderType; + + @ApiModelProperty(value = "文件名词") + private String fileName; + + @ApiModelProperty(value = "文件Key") + private String fileKey; + + @ApiModelProperty(value = "文件类型") + private String fileType; + + @ApiModelProperty(value = "创建人") + private String creatorName; + + @ApiModelProperty(value = "创建时间") + private LocalDate createTimeBegin; + + @ApiModelProperty(value = "创建时间") + private LocalDate createTimeEnd; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/form/FileUrlUploadForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/form/FileUrlUploadForm.java new file mode 100644 index 00000000..a3468851 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/form/FileUrlUploadForm.java @@ -0,0 +1,31 @@ +package net.lab1024.sa.common.module.support.file.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; +import net.lab1024.sa.common.common.validator.enumeration.CheckEnum; +import net.lab1024.sa.common.module.support.file.constant.FileFolderTypeEnum; + +import javax.validation.constraints.NotBlank; + +/** + * url上传文件 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2019年10月11日 15:34:47 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class FileUrlUploadForm { + + @ApiModelPropertyEnum(value = FileFolderTypeEnum.class, desc = "业务类型") + @CheckEnum(value = FileFolderTypeEnum.class, required = true, message = "业务类型错误") + private Integer folder; + + @ApiModelProperty("文件url") + @NotBlank(message = "文件url不能为空") + private String fileUrl; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileDownloadVO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileDownloadVO.java new file mode 100644 index 00000000..42e76ddf --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileDownloadVO.java @@ -0,0 +1,28 @@ +package net.lab1024.sa.common.module.support.file.domain.vo; + +import lombok.Data; + +/** + * 文件下载 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2019年10月11日 15:34:47 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class FileDownloadVO { + + /** + * 文件字节数据 + */ + private byte[] data; + + /** + * 文件元数据 + */ + private FileMetadataVO metadata; + + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileMetadataVO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileMetadataVO.java new file mode 100644 index 00000000..ad268891 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileMetadataVO.java @@ -0,0 +1,31 @@ +package net.lab1024.sa.common.module.support.file.domain.vo; + +import lombok.Data; + +/** + * 文件元数据 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2019年10月11日 15:34:47 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class FileMetadataVO { + + /** + * 文件名称 + */ + private String fileName; + + /** + * 文件大小/字节 + */ + private Long fileSize; + + /** + * 文件格式 + */ + private String fileFormat; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileUploadVO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileUploadVO.java new file mode 100644 index 00000000..345c337f --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileUploadVO.java @@ -0,0 +1,35 @@ +package net.lab1024.sa.common.module.support.file.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 文件信息 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2019年10月11日 15:34:47 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class FileUploadVO { + + @ApiModelProperty(value = "文件id") + private Long fileId; + + @ApiModelProperty(value = "文件名称") + private String fileName; + + @ApiModelProperty(value = "fileUrl") + private String fileUrl; + + @ApiModelProperty(value = "fileKey") + private String fileKey; + + @ApiModelProperty(value = "文件大小") + private Long fileSize; + + @ApiModelProperty(value = "文件类型") + private String fileType; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileVO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileVO.java new file mode 100644 index 00000000..9ab82174 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileVO.java @@ -0,0 +1,56 @@ +package net.lab1024.sa.common.module.support.file.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.enumeration.UserTypeEnum; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; +import net.lab1024.sa.common.module.support.file.constant.FileFolderTypeEnum; + +import java.time.LocalDateTime; + +/** + * 文件信息 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2019年10月11日 15:34:47 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class FileVO { + + @ApiModelProperty("主键") + private Long fileId; + + @ApiModelProperty("存储文件夹类型") + @ApiModelPropertyEnum(FileFolderTypeEnum.class) + private Integer folderType; + + @ApiModelProperty("文件名称") + private String fileName; + + @ApiModelProperty("文件大小") + private Integer fileSize; + + @ApiModelProperty("文件类型") + private String fileType; + + @ApiModelProperty("文件路径") + private String fileKey; + + @ApiModelProperty("上传人") + private Long creatorId; + + @ApiModelProperty("上传人") + private String creatorName; + + @ApiModelPropertyEnum(value = UserTypeEnum.class, desc = "创建人类型") + private Integer creatorUserType; + + @ApiModelProperty("文件展示url") + private String fileUrl; + + @ApiModelProperty("创建时间") + private LocalDateTime createTime; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/FileService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/FileService.java new file mode 100644 index 00000000..34449f32 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/FileService.java @@ -0,0 +1,272 @@ +package net.lab1024.sa.common.module.support.file.service; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.google.common.collect.Lists; +import net.lab1024.sa.common.common.code.SystemErrorCode; +import net.lab1024.sa.common.common.code.UserErrorCode; +import net.lab1024.sa.common.common.constant.StringConst; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.RequestUser; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import net.lab1024.sa.common.common.util.SmartEnumUtil; +import net.lab1024.sa.common.common.util.SmartPageUtil; +import net.lab1024.sa.common.constant.RedisKeyConst; +import net.lab1024.sa.common.module.support.file.constant.FileFolderTypeEnum; +import net.lab1024.sa.common.module.support.file.dao.FileDao; +import net.lab1024.sa.common.module.support.file.domain.entity.FileEntity; +import net.lab1024.sa.common.module.support.file.domain.form.FileQueryForm; +import net.lab1024.sa.common.module.support.file.domain.form.FileUrlUploadForm; +import net.lab1024.sa.common.module.support.file.domain.vo.FileDownloadVO; +import net.lab1024.sa.common.module.support.file.domain.vo.FileMetadataVO; +import net.lab1024.sa.common.module.support.file.domain.vo.FileUploadVO; +import net.lab1024.sa.common.module.support.file.domain.vo.FileVO; +import net.lab1024.sa.common.module.support.redis.RedisService; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.mock.web.MockMultipartFile; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.IOException; +import java.net.URL; +import java.net.URLConnection; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * 文件服务 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2019年10月11日 15:34:47 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Service +public class FileService { + + /** + * 文件名最大长度 + */ + private static final int FILE_NAME_MAX_LENGTH = 100; + + @Resource + private IFileStorageService fileStorageService; + + @Autowired + private FileDao fileDao; + + @Autowired + private RedisService redisService; + + @Value("${spring.servlet.multipart.max-file-size}") + private String maxFileSize; + + /** + * 文件上传服务:通过 url 上传 + * + * @param urlUploadForm + * @param requestUser + * @return + */ + public ResponseDTO fileUpload(FileUrlUploadForm urlUploadForm, RequestUser requestUser) { + try { + URL url = new URL(urlUploadForm.getFileUrl()); + URLConnection urlConnection = url.openConnection(); + // 获取文件格式 + String contentType = urlConnection.getContentType(); + String fileType = fileStorageService.getFileTypeByContentType(contentType); + // 生成文件key + String fileKey = fileStorageService.generateFileNameByType(fileType); + MockMultipartFile file = new MockMultipartFile(fileKey, fileKey, contentType, urlConnection.getInputStream()); + return this.fileUpload(file, urlUploadForm.getFolder(), requestUser); + } catch (IOException e) { + return ResponseDTO.error(SystemErrorCode.SYSTEM_ERROR, "上传失败"); + } + } + + /** + * 文件上传服务 + * + * @param file + * @param folderType 文件夹类型 + * @return + */ + public ResponseDTO fileUpload(MultipartFile file, Integer folderType, RequestUser requestUser) { + FileFolderTypeEnum folderTypeEnum = SmartEnumUtil.getEnumByValue(folderType, FileFolderTypeEnum.class); + if (null == folderTypeEnum) { + return ResponseDTO.userErrorParam("文件夹错误"); + } + if (null == file || file.getSize() == 0) { + return ResponseDTO.userErrorParam("上传文件不能为空"); + } + // 校验文件名称 + String originalFilename = file.getOriginalFilename(); + if (StringUtils.isBlank(originalFilename)) { + return ResponseDTO.userErrorParam("上传文件名称不能为空"); + } + if (originalFilename.length() > FILE_NAME_MAX_LENGTH) { + return ResponseDTO.userErrorParam("文件名称最大长度为:" + FILE_NAME_MAX_LENGTH); + } + // 校验文件大小 + String maxSizeStr = maxFileSize.toLowerCase().replace("mb", ""); + long maxSize = Integer.parseInt(maxSizeStr) * 1024 * 1024L; + if (file.getSize() > maxSize) { + return ResponseDTO.userErrorParam("上传文件最大:" + maxSize); + } + // 获取文件服务 + ResponseDTO response = fileStorageService.fileUpload(file, folderTypeEnum.getFolder()); + if (!response.getOk()) { + return response; + } + + // 上传成功 保存记录数据库 + FileUploadVO uploadVO = response.getData(); + + FileEntity fileEntity = new FileEntity(); + fileEntity.setFolderType(folderTypeEnum.getValue()); + fileEntity.setFileName(originalFilename); + fileEntity.setFileSize(file.getSize()); + fileEntity.setFileKey(uploadVO.getFileKey()); + fileEntity.setFileType(uploadVO.getFileType()); + fileEntity.setCreatorId(requestUser == null ? null:requestUser.getUserId()); + fileEntity.setCreatorName(requestUser == null ? null:requestUser.getUserName()); + fileEntity.setCreatorUserType(requestUser == null ? null:requestUser.getUserType().getValue()); + fileDao.insert(fileEntity); + uploadVO.setFileId(fileEntity.getFileId()); + // 添加缓存 + String redisKey = redisService.generateRedisKey(RedisKeyConst.Support.FILE_URL, uploadVO.getFileKey()); + redisService.set(redisKey, uploadVO.getFileUrl(), fileStorageService.cacheExpireSecond()); + + String fileRedisKey = redisService.generateRedisKey(RedisKeyConst.Support.FILE_VO, uploadVO.getFileKey()); + FileVO fileVO = SmartBeanUtil.copy(fileEntity, FileVO.class); + redisService.set(fileRedisKey, fileVO, fileStorageService.cacheExpireSecond()); + return response; + } + + public List getFileList(List fileKeyList) { + if (CollectionUtils.isEmpty(fileKeyList)) { + return Lists.newArrayList(); + } + return fileKeyList.stream().map(this::getCacheFileVO).filter(Objects::nonNull).collect(Collectors.toList()); + } + + private FileVO getCacheFileVO(String fileKey) { + String redisKey = redisService.generateRedisKey(RedisKeyConst.Support.FILE_VO, fileKey); + FileVO fileVO = redisService.getObject(redisKey, FileVO.class); + if (fileVO == null) { + fileVO = fileDao.getByFileKey(fileKey); + if (fileVO == null) { + return null; + } + redisService.set(redisKey, fileVO, fileStorageService.cacheExpireSecond()); + } + fileVO.setFileUrl(this.getCacheUrl(fileKey)); + return fileVO; + } + + /** + * 根据文件绝对路径 获取文件URL + * 支持单个 key 逗号分隔的形式 + * + * @param fileKey + * @return + */ + public ResponseDTO getFileUrl(String fileKey) { + if (StringUtils.isBlank(fileKey)) { + return ResponseDTO.error(UserErrorCode.PARAM_ERROR); + } + // 处理逗号分隔的字符串 + String keyList = StrUtil.split(fileKey, StringConst.SEPARATOR) + .stream().map(this::getCacheUrl) + .collect(Collectors.joining(StringConst.SEPARATOR)); + return ResponseDTO.ok(keyList); + } + + + private String getCacheUrl(String fileKey) { + String redisKey = redisService.generateRedisKey(RedisKeyConst.Support.FILE_URL, fileKey); + String fileUrl = redisService.get(redisKey); + if (null != fileUrl) { + return fileUrl; + } + ResponseDTO responseDTO = fileStorageService.getFileUrl(fileKey); + if (!responseDTO.getOk()) { + return null; + } + fileUrl = responseDTO.getData(); + redisService.set(redisKey, fileUrl, fileStorageService.cacheExpireSecond()); + return fileUrl; + } + + /** + * 分页查询 + * + * @param queryForm + * @return + */ + public PageResult queryPage(FileQueryForm queryForm) { + Page page = SmartPageUtil.convert2PageQuery(queryForm); + List list = fileDao.queryPage(page, queryForm); + PageResult pageResult = SmartPageUtil.convert2PageResult(page, list); + return pageResult; + } + + /** + * 根据文件服务类型 和 FileKey 下载文件 + * + * @param fileKey + * @return + * @throws IOException + */ + public ResponseEntity downloadByFileKey(String fileKey, String userAgent) { + // 根据文件服务类 获取对应文件服务 查询 url + ResponseDTO responseDTO = fileStorageService.fileDownload(fileKey); + if (!responseDTO.getOk()) { + HttpHeaders heads = new HttpHeaders(); + heads.add(HttpHeaders.CONTENT_TYPE, "text/html;charset=UTF-8"); + return new ResponseEntity<>(responseDTO.getMsg() + ":" + fileKey, heads, HttpStatus.OK); + } + // 设置下载头 + HttpHeaders heads = new HttpHeaders(); + heads.add(HttpHeaders.CONTENT_TYPE, "application/octet-stream; charset=utf-8"); + // 设置对应浏览器的文件名称编码 + FileDownloadVO fileDownloadVO = responseDTO.getData(); + FileMetadataVO metadata = fileDownloadVO.getMetadata(); + String fileName = null != metadata ? metadata.getFileName() : fileKey.substring(fileKey.lastIndexOf("/")); + fileName = fileStorageService.getDownloadFileNameByUA(fileName, userAgent); + heads.add(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + fileName); + ResponseEntity responseEntity = new ResponseEntity<>(fileDownloadVO.getData(), heads, HttpStatus.OK); + return responseEntity; + } + + /** + * 根据文件key 删除 + * + * @param fileKey + * @return + */ + public ResponseDTO deleteByFileKey(String fileKey) { + if (StringUtils.isBlank(fileKey)) { + return ResponseDTO.error(UserErrorCode.PARAM_ERROR); + } + FileEntity fileEntity = new FileEntity(); + fileEntity.setFileKey(fileKey); + fileEntity = fileDao.selectOne(new QueryWrapper<>(fileEntity)); + if (null == fileEntity) { + return ResponseDTO.error(UserErrorCode.DATA_NOT_EXIST); + } + // 根据文件服务类 获取对应文件服务 删除文件 + return fileStorageService.delete(fileKey); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/FileStorageCloudServiceImpl.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/FileStorageCloudServiceImpl.java new file mode 100644 index 00000000..5b414c5e --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/FileStorageCloudServiceImpl.java @@ -0,0 +1,215 @@ +package net.lab1024.sa.common.module.support.file.service; + +import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.model.CannedAccessControlList; +import com.amazonaws.services.s3.model.ObjectMetadata; +import com.amazonaws.services.s3.model.S3Object; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.common.code.SystemErrorCode; +import net.lab1024.sa.common.common.code.UserErrorCode; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.config.FileCloudConfig; +import net.lab1024.sa.common.module.support.file.domain.vo.FileDownloadVO; +import net.lab1024.sa.common.module.support.file.domain.vo.FileMetadataVO; +import net.lab1024.sa.common.module.support.file.domain.vo.FileUploadVO; +import net.lab1024.sa.common.module.support.file.constant.FileFolderTypeEnum; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.FileCopyUtils; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.net.URL; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +/** + * 云计算 实现 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2019年10月11日 15:34:47 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Slf4j +public class FileStorageCloudServiceImpl implements IFileStorageService { + + @Autowired + private AmazonS3 amazonS3; + + @Autowired + private FileCloudConfig cloudConfig; + + /** + * 自定义元数据 文件名称 + */ + private static final String USER_METADATA_FILE_NAME = "file-name"; + + /** + * 自定义元数据 文件格式 + */ + private static final String USER_METADATA_FILE_FORMAT = "file-format"; + + /** + * 自定义元数据 文件大小 + */ + private static final String USER_METADATA_FILE_SIZE = "file-size"; + + @Override + public ResponseDTO fileUpload(MultipartFile file, String path) { + // 设置文件 key + String originalFilename = file.getOriginalFilename(); + String fileType = FilenameUtils.getExtension(originalFilename); + String fileKey = path + this.generateFileName(originalFilename); + // 文件名称 URL 编码 + String urlEncoderFilename; + try { + urlEncoderFilename = URLEncoder.encode(originalFilename, StandardCharsets.UTF_8.name()); + } catch (UnsupportedEncodingException e) { + log.error("阿里云文件上传服务URL ENCODE-发生异常:", e); + return ResponseDTO.error(SystemErrorCode.SYSTEM_ERROR,"上传失败"); + } + ObjectMetadata meta = new ObjectMetadata(); + meta.setContentEncoding(StandardCharsets.UTF_8.name()); + meta.setContentDisposition("attachment;filename=" + urlEncoderFilename); + Map userMetadata = new HashMap(10); + userMetadata.put(USER_METADATA_FILE_NAME, urlEncoderFilename); + userMetadata.put(USER_METADATA_FILE_FORMAT, fileType); + userMetadata.put(USER_METADATA_FILE_SIZE, String.valueOf(file.getSize())); + meta.setUserMetadata(userMetadata); + meta.setContentLength(file.getSize()); + meta.setContentType(this.getContentType(fileType)); + try { + amazonS3.putObject(cloudConfig.getBucketName(), fileKey, file.getInputStream(), meta); + } catch (IOException e) { + log.error("文件上传-发生异常:", e); + return ResponseDTO.error(SystemErrorCode.SYSTEM_ERROR,"上传失败"); + } + // 根据文件路径获取并设置访问权限 + CannedAccessControlList acl = this.getACL(path); + amazonS3.setObjectAcl(cloudConfig.getBucketName(), fileKey, acl); + // 返回上传结果 + FileUploadVO uploadVO = new FileUploadVO(); + uploadVO.setFileName(originalFilename); + uploadVO.setFileType(fileType); + // 根据 访问权限 返回不同的 URL + String url = cloudConfig.getPublicUrl() + fileKey; + if (CannedAccessControlList.Private.equals(acl)) { + // 获取临时访问的URL + url = this.getFileUrl(fileKey).getData(); + } + uploadVO.setFileUrl(url); + uploadVO.setFileKey(fileKey); + uploadVO.setFileSize(file.getSize()); + return ResponseDTO.ok(uploadVO); + } + + /** + * 获取文件url + * + * @param fileKey + * @return + */ + @Override + public ResponseDTO getFileUrl(String fileKey) { + if (StringUtils.isBlank(fileKey)) { + return ResponseDTO.userErrorParam(); + } + if (!fileKey.startsWith(FileFolderTypeEnum.FOLDER_PRIVATE)) { + // 不是私有的 都公共读 + return ResponseDTO.ok(cloudConfig.getPublicUrl() + fileKey); + } + Date expiration = new Date(System.currentTimeMillis() + cloudConfig.getUrlExpire()); + URL url = amazonS3.generatePresignedUrl(cloudConfig.getBucketName(), fileKey, expiration); + String urlStr = url.toString().replace("http://", "https://"); + return ResponseDTO.ok(urlStr); + } + + /** + * 流式下载(名称为原文件) + */ + @Override + public ResponseDTO fileDownload(String key) { + //获取oss对象 + S3Object s3Object = amazonS3.getObject(cloudConfig.getBucketName(), key); + // 获取文件 meta + ObjectMetadata metadata = s3Object.getObjectMetadata(); + Map userMetadata = metadata.getUserMetadata(); + FileMetadataVO metadataDTO = null; + if (MapUtils.isNotEmpty(userMetadata)) { + metadataDTO = new FileMetadataVO(); + metadataDTO.setFileFormat(userMetadata.get(USER_METADATA_FILE_FORMAT)); + metadataDTO.setFileName(userMetadata.get(USER_METADATA_FILE_NAME)); + String fileSizeStr = userMetadata.get(USER_METADATA_FILE_SIZE); + Long fileSize = StringUtils.isBlank(fileSizeStr) ? null : Long.valueOf(fileSizeStr); + metadataDTO.setFileSize(fileSize); + } + + // 获得输入流 + InputStream objectContent = s3Object.getObjectContent(); + try { + // 输入流转换为字节流 + byte[] buffer = FileCopyUtils.copyToByteArray(objectContent); + + FileDownloadVO fileDownloadVO = new FileDownloadVO(); + fileDownloadVO.setData(buffer); + fileDownloadVO.setMetadata(metadataDTO); + return ResponseDTO.ok(fileDownloadVO); + } catch (IOException e) { + log.error("文件下载-发生异常:", e); + return ResponseDTO.error(SystemErrorCode.SYSTEM_ERROR,"下载失败"); + } finally { + try { + // 关闭输入流 + objectContent.close(); + s3Object.close(); + } catch (IOException e) { + log.error("文件下载-发生异常:", e); + } + } + } + + /** + * 根据文件夹路径 返回对应的访问权限 + * + * @param fileKey + * @return + */ + private CannedAccessControlList getACL(String fileKey) { + // 公用读 + if (fileKey.contains(FileFolderTypeEnum.FOLDER_PUBLIC)) { + return CannedAccessControlList.PublicRead; + } + // 其他默认私有读写 + return CannedAccessControlList.Private; + } + + /** + * 单个删除文件 + * 根据 file key 删除文件 + * ps:不能删除fileKey不为空的文件夹 + * + * @param fileKey 文件or文件夹 + * @return + */ + @Override + public ResponseDTO delete(String fileKey) { + amazonS3.deleteObject(cloudConfig.getBucketName(), fileKey); + return ResponseDTO.ok(); + } + + + @Override + public Long cacheExpireSecond(){ + return cloudConfig.getUrlExpire() - 1800; + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/FileStorageLocalServiceImpl.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/FileStorageLocalServiceImpl.java new file mode 100644 index 00000000..3842aef6 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/FileStorageLocalServiceImpl.java @@ -0,0 +1,149 @@ +package net.lab1024.sa.common.module.support.file.service; + +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.common.code.SystemErrorCode; +import net.lab1024.sa.common.common.code.UserErrorCode; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.module.support.file.domain.vo.FileDownloadVO; +import net.lab1024.sa.common.module.support.file.domain.vo.FileUploadVO; +import net.lab1024.sa.common.module.support.config.ConfigKeyEnum; +import net.lab1024.sa.common.module.support.config.ConfigService; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.FilenameUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.util.FileCopyUtils; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; + +/** + * 本地存储 实现 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2019年10月11日 15:34:47 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Slf4j +public class FileStorageLocalServiceImpl implements IFileStorageService { + + @Value("${file.storage.local.path}") + private String localPath; + + @Autowired + private ConfigService configService; + + @Override + public ResponseDTO fileUpload(MultipartFile multipartFile, String path) { + if (null == multipartFile) { + return ResponseDTO.userErrorParam("上传文件不能为空"); + } + String filePath = localPath + path; + File directory = new File(filePath); + if (!directory.exists()) { + // 目录不存在,新建 + directory.mkdirs(); + } + if (!path.endsWith("/")) { + path = path + "/"; + } + FileUploadVO fileUploadVO = new FileUploadVO(); + //原文件名 + String originalFileName = multipartFile.getOriginalFilename(); + //新文件名 + String newFileName = this.generateFileName(originalFileName); + //生成文件key + String fileKey = path + newFileName; + //创建文件 + File fileTemp = new File(new File(filePath + newFileName).getAbsolutePath()); + try { + multipartFile.transferTo(fileTemp); + fileUploadVO.setFileUrl(this.generateFileUrl(fileKey)); + fileUploadVO.setFileName(newFileName); + fileUploadVO.setFileKey(fileKey); + fileUploadVO.setFileSize(multipartFile.getSize()); + fileUploadVO.setFileType(FilenameUtils.getExtension(originalFileName)); + } catch (IOException e) { + if (fileTemp.exists() && fileTemp.isFile()) { + fileTemp.delete(); + } + log.error("", e); + return ResponseDTO.error(SystemErrorCode.SYSTEM_ERROR, "上传失败"); + } + return ResponseDTO.ok(fileUploadVO); + } + + /** + * 生成fileUrl地址 + * + * @param fileKey + * @return + */ + public String generateFileUrl(String fileKey) { + String configValue = configService.getConfigValue(ConfigKeyEnum.LOCAL_UPLOAD_URL_PREFIX); + String fileUrl = configValue + fileKey; + return fileUrl; + } + + /** + * 获取文件Url + * + * @param fileKey + * @return + */ + @Override + public ResponseDTO getFileUrl(String fileKey) { + String fileUrl = this.generateFileUrl(fileKey); + return ResponseDTO.ok(fileUrl); + } + + /** + * 文件下载 + * + * @param fileKey + * @return + */ + @Override + public ResponseDTO fileDownload(String fileKey) { + String filePath = localPath + fileKey; + File localFile = new File(filePath); + InputStream in = null; + try { + in = new FileInputStream(localFile); + // 输入流转换为字节流 + byte[] buffer = FileCopyUtils.copyToByteArray(in); + FileDownloadVO fileDownloadVO = new FileDownloadVO(); + fileDownloadVO.setData(buffer); + return ResponseDTO.ok(fileDownloadVO); + } catch (IOException e) { + log.error("文件下载-发生异常:", e); + return ResponseDTO.error(SystemErrorCode.SYSTEM_ERROR, "文件下载失败"); + } finally { + try { + // 关闭输入流 + if (in != null) { + in.close(); + } + } catch (IOException e) { + log.error("文件下载-发生异常:", e); + } + } + } + + @Override + public ResponseDTO delete(String fileKey) { + String filePath = localPath + fileKey; + File localFile = new File(filePath); + try { + FileUtils.forceDelete(localFile); + } catch (IOException e) { + log.error("删除本地文件失败:{}", e); + } + return ResponseDTO.ok(); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/IFileStorageService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/IFileStorageService.java new file mode 100644 index 00000000..7fd4690d --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/IFileStorageService.java @@ -0,0 +1,209 @@ +package net.lab1024.sa.common.module.support.file.service; + +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.LocalDateTimeUtil; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.module.support.file.domain.vo.FileDownloadVO; +import net.lab1024.sa.common.module.support.file.domain.vo.FileUploadVO; +import org.apache.commons.io.FilenameUtils; +import org.springframework.web.multipart.MultipartFile; + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.time.LocalDateTime; +import java.util.UUID; + +/** + * 接口 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2019年10月11日 15:34:47 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public interface IFileStorageService { + + /** + * 文件上传 + * + * @param file + * @param path + * @return + */ + ResponseDTO fileUpload(MultipartFile file, String path); + + /** + * 获取文件url + * + * @param fileKey + * @return + */ + ResponseDTO getFileUrl(String fileKey); + + /** + * 流式下载(名称为原文件) + * + * @param key + * @return + */ + ResponseDTO fileDownload(String key); + + /** + * 单个删除文件 + * 根据文件key删除 + * + * @param fileKey + * @return + */ + ResponseDTO delete(String fileKey); + + + /** + * 缓存过期秒数 + * + * @return + */ + default Long cacheExpireSecond() { + return 3600L; + } + + /** + * 生成文件名字 + * 当前年月日时分秒 +32位 uuid + 文件格式后缀 + * + * @param originalFileName + * @return String + */ + default String generateFileName(String originalFileName) { + return generateFileNameByType(FilenameUtils.getExtension(originalFileName)); + } + + /** + * 根据文件类型 生成文件名,格式如下: + * [uuid]_[日期时间]_[文件类型] + * + * @param fileType + * @return + */ + default String generateFileNameByType(String fileType) { + String uuid = UUID.randomUUID().toString().replaceAll("-", ""); + String time = LocalDateTimeUtil.format(LocalDateTime.now(), DatePattern.PURE_DATETIME_FORMATTER); + return uuid + "_" + time + "_" + fileType; + } + + /** + * 获取文件类型 + * + * @param fileExt + * @return + */ + default String getContentType(String fileExt) { + // 文件的后缀名 + if ("bmp".equalsIgnoreCase(fileExt)) { + return "image/bmp"; + } + if ("gif".equalsIgnoreCase(fileExt)) { + return "image/gif"; + } + if ("jpeg".equalsIgnoreCase(fileExt) || "jpg".equalsIgnoreCase(fileExt)) { + return "image/jpeg"; + } + if ("png".equalsIgnoreCase(fileExt)) { + return "image/png"; + } + if ("html".equalsIgnoreCase(fileExt)) { + return "text/html"; + } + if ("txt".equalsIgnoreCase(fileExt)) { + return "text/plain"; + } + if ("vsd".equalsIgnoreCase(fileExt)) { + return "application/vnd.visio"; + } + if ("ppt".equalsIgnoreCase(fileExt) || "pptx".equalsIgnoreCase(fileExt)) { + return "application/vnd.ms-powerpoint"; + } + if ("doc".equalsIgnoreCase(fileExt) || "docx".equalsIgnoreCase(fileExt)) { + return "application/msword"; + } + if ("pdf".equalsIgnoreCase(fileExt)) { + return "application/pdf"; + } + if ("xml".equalsIgnoreCase(fileExt)) { + return "text/xml"; + } + return ""; + } + + /** + * 获取文件格式 根据 content-type + * + * @param contentType + * @return + */ + default String getFileTypeByContentType(String contentType) { + // 文件的后缀名 + if ("image/bmp".equalsIgnoreCase(contentType)) { + return "bmp"; + } + if ("image/gif".equalsIgnoreCase(contentType)) { + return "gif"; + } + if ("image/jpeg".equalsIgnoreCase(contentType) || "image/jpg".equalsIgnoreCase(contentType)) { + return "jpg"; + } + if ("image/png".equalsIgnoreCase(contentType)) { + return "png"; + } + if ("text/html".equalsIgnoreCase(contentType)) { + return "html"; + } + if ("text/plain".equalsIgnoreCase(contentType)) { + return "txt"; + } + if ("application/vnd.visio".equalsIgnoreCase(contentType)) { + return "vsd"; + } + if ("application/vnd.ms-powerpoint".equalsIgnoreCase(contentType)) { + return "pptx"; + } + if ("application/msword".equalsIgnoreCase(contentType)) { + return "docx"; + } + if ("application/pdf".equalsIgnoreCase(contentType)) { + return "pdf"; + } + if ("text/xml".equalsIgnoreCase(contentType)) { + return "xml"; + } + return ""; + } + + /** + * 根据不同的浏览器 返回对应编码的文件名称 + * + * @param fileName + * @param userAgent + * @return + */ + default String getDownloadFileNameByUA(String fileName, String userAgent) { + try { + userAgent = userAgent.toUpperCase(); + if (userAgent.indexOf("MSIE") > 0) { + // IE浏览器 + fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.name()); + } else if (userAgent.indexOf("EDGE") > 0) { + // WIN10浏览器 + fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.name()); + } else { + // 其他 + fileName = new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1); + } + } catch (UnsupportedEncodingException e) { + return null; + } + return fileName; + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/HeartBeatRecordDao.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/HeartBeatRecordDao.java new file mode 100644 index 00000000..9859bb83 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/HeartBeatRecordDao.java @@ -0,0 +1,51 @@ +package net.lab1024.sa.common.module.support.heartbeat; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.lab1024.sa.common.module.support.heartbeat.domain.HeartBeatRecordEntity; +import net.lab1024.sa.common.module.support.heartbeat.domain.HeartBeatRecordQueryForm; +import net.lab1024.sa.common.module.support.heartbeat.domain.HeartBeatRecordVO; +import net.lab1024.sa.common.module.support.operatelog.domain.OperateLogQueryForm; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * 心跳记录 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-01-09 20:57:24 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Component +@Mapper +public interface HeartBeatRecordDao extends BaseMapper { + + /** + * 更新心跳日志 + * + * @param id + * @param heartBeatTime + */ + void updateHeartBeatTimeById(@Param("id") Long id, @Param("heartBeatTime") LocalDateTime heartBeatTime); + + /** + * 查询心跳日志 + * + * @param heartBeatRecordEntity + * @return + */ + HeartBeatRecordEntity query(HeartBeatRecordEntity heartBeatRecordEntity); + + /** + * 分页查询 + * @param heartBeatRecordQueryForm + * @return + */ + List pageQuery(Page page, @Param("query") HeartBeatRecordQueryForm heartBeatRecordQueryForm); +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/HeartBeatRecordHandler.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/HeartBeatRecordHandler.java new file mode 100644 index 00000000..c666ecef --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/HeartBeatRecordHandler.java @@ -0,0 +1,42 @@ +package net.lab1024.sa.common.module.support.heartbeat; + +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import net.lab1024.sa.common.module.support.heartbeat.domain.HeartBeatRecordEntity; +import net.lab1024.sa.common.module.support.heartbeat.core.HeartBeatRecord; +import net.lab1024.sa.common.module.support.heartbeat.core.IHeartBeatRecordHandler; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * 心跳记录 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-01-09 20:57:24 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Slf4j +@Service +public class HeartBeatRecordHandler implements IHeartBeatRecordHandler { + + @Autowired + private HeartBeatRecordDao heartBeatRecordDao; + + /** + * 心跳日志处理方法 + * @param heartBeatRecord + */ + @Override + public void handler(HeartBeatRecord heartBeatRecord) { + HeartBeatRecordEntity heartBeatRecordEntity = SmartBeanUtil.copy(heartBeatRecord, HeartBeatRecordEntity.class); + HeartBeatRecordEntity heartBeatRecordOld = heartBeatRecordDao.query(heartBeatRecordEntity); + if (heartBeatRecordOld == null) { + heartBeatRecordDao.insert(heartBeatRecordEntity); + } else { + heartBeatRecordDao.updateHeartBeatTimeById(heartBeatRecordOld.getHeartBeatRecordId(), heartBeatRecordEntity.getHeartBeatTime()); + } + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/HeartBeatService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/HeartBeatService.java new file mode 100644 index 00000000..1964b684 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/HeartBeatService.java @@ -0,0 +1,38 @@ +package net.lab1024.sa.common.module.support.heartbeat; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.common.domain.PageParam; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartPageUtil; +import net.lab1024.sa.common.module.support.heartbeat.domain.HeartBeatRecordQueryForm; +import net.lab1024.sa.common.module.support.heartbeat.domain.HeartBeatRecordVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 心跳记录 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-01-09 20:57:24 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Slf4j +@Service +public class HeartBeatService { + + @Autowired + private HeartBeatRecordDao heartBeatRecordDao; + + public ResponseDTO> pageQuery(HeartBeatRecordQueryForm pageParam) { + Page pageQueryInfo = SmartPageUtil.convert2PageQuery(pageParam); + List recordVOList = heartBeatRecordDao.pageQuery(pageQueryInfo,pageParam); + PageResult pageResult = SmartPageUtil.convert2PageResult(pageQueryInfo, recordVOList); + return ResponseDTO.ok(pageResult); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/HeartBeatManager.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/HeartBeatManager.java new file mode 100644 index 00000000..72973dda --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/HeartBeatManager.java @@ -0,0 +1,59 @@ +package net.lab1024.sa.common.module.support.heartbeat.core; + +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * 心跳核心调度管理器 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-01-09 20:57:24 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public class HeartBeatManager { + + private static final String THREAD_NAME_PREFIX = "sa-heart-beat"; + private static final int THREAD_COUNT = 1; + private static final long INITIAL_DELAY = 60 * 1000L; + + private ScheduledThreadPoolExecutor threadPoolExecutor; + + /** + * 服务状态持久化处理类 + */ + private IHeartBeatRecordHandler heartBeatRecordHandler; + + /** + * 调度配置信息 + */ + private long intervalMilliseconds; + + /** + * @param intervalMilliseconds 间隔执行时间(毫秒) + */ + public HeartBeatManager(Long intervalMilliseconds, + IHeartBeatRecordHandler heartBeatRecordHandler) { + this.intervalMilliseconds = intervalMilliseconds; + this.heartBeatRecordHandler = heartBeatRecordHandler; + //使用守护线程去处理 + this.threadPoolExecutor = new ScheduledThreadPoolExecutor(THREAD_COUNT, r -> { + Thread t = new Thread(r, THREAD_NAME_PREFIX); + if (!t.isDaemon()) { + t.setDaemon(true); + } + return t; + }); + // 开始心跳 + this.beginHeartBeat(); + } + + /** + * 开启心跳 + */ + private void beginHeartBeat() { + HeartBeatRunnable heartBeatRunnable = new HeartBeatRunnable(heartBeatRecordHandler); + threadPoolExecutor.scheduleWithFixedDelay(heartBeatRunnable, INITIAL_DELAY, intervalMilliseconds, TimeUnit.MILLISECONDS); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/HeartBeatRecord.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/HeartBeatRecord.java new file mode 100644 index 00000000..42698a13 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/HeartBeatRecord.java @@ -0,0 +1,41 @@ +package net.lab1024.sa.common.module.support.heartbeat.core; + +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 心跳记录日志 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-01-09 20:57:24 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class HeartBeatRecord { + + /** + * 项目名字 + */ + private String projectPath; + /** + * 服务器ip + */ + private String serverIp; + /** + * 进程号 + */ + private Integer processNo; + /** + * 进程开启时间 + */ + private LocalDateTime processStartTime; + /** + * 心跳当前时间 + */ + private LocalDateTime heartBeatTime; + + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/HeartBeatRunnable.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/HeartBeatRunnable.java new file mode 100644 index 00000000..475780fe --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/HeartBeatRunnable.java @@ -0,0 +1,71 @@ +package net.lab1024.sa.common.module.support.heartbeat.core; + +import cn.hutool.core.net.NetUtil; +import org.apache.commons.lang3.StringUtils; + +import java.lang.management.ManagementFactory; +import java.lang.management.RuntimeMXBean; +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.List; + +/** + * 心跳线程 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-01-09 20:57:24 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public class HeartBeatRunnable implements Runnable { + + /** + * 项目路径 + */ + private String projectPath; + /** + * 服务器ip(多网卡) + */ + private List serverIps; + /** + * 进程号 + */ + private Integer processNo; + /** + * 进程开启时间 + */ + private LocalDateTime processStartTime; + + private IHeartBeatRecordHandler recordHandler; + + public HeartBeatRunnable(IHeartBeatRecordHandler recordHandler) { + this.recordHandler = recordHandler; + this.initServerInfo(); + } + + /** + * 初始化心跳相关信息 + */ + private void initServerInfo(){ + RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean(); + this.projectPath = System.getProperty("user.dir"); + this.serverIps = new ArrayList<>(NetUtil.localIpv4s()); + this.processNo = Integer.valueOf(runtimeMXBean.getName().split("@")[0]).intValue(); + this.processStartTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(runtimeMXBean.getStartTime()), ZoneId.systemDefault()); + } + + + @Override + public void run() { + HeartBeatRecord heartBeatRecord = new HeartBeatRecord(); + heartBeatRecord.setProjectPath(this.projectPath); + heartBeatRecord.setServerIp(StringUtils.join(this.serverIps, ";")); + heartBeatRecord.setProcessNo(this.processNo); + heartBeatRecord.setProcessStartTime(this.processStartTime); + heartBeatRecord.setHeartBeatTime(LocalDateTime.now()); + recordHandler.handler(heartBeatRecord); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/IHeartBeatRecordHandler.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/IHeartBeatRecordHandler.java new file mode 100644 index 00000000..ac5fa589 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/IHeartBeatRecordHandler.java @@ -0,0 +1,20 @@ +package net.lab1024.sa.common.module.support.heartbeat.core; + +/** + * 心跳处理接口 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-01-09 20:57:24 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public interface IHeartBeatRecordHandler { + + /** + * 心跳日志处理方法 + * + * @param heartBeatRecord + */ + void handler(HeartBeatRecord heartBeatRecord); +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/domain/HeartBeatRecordEntity.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/domain/HeartBeatRecordEntity.java new file mode 100644 index 00000000..052f3d89 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/domain/HeartBeatRecordEntity.java @@ -0,0 +1,53 @@ +package net.lab1024.sa.common.module.support.heartbeat.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +/** + * 心跳记录 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-01-09 20:57:24 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +@TableName(value = "t_heart_beat_record") +public class HeartBeatRecordEntity implements Serializable { + + /** + * 主键id + */ + @TableId(type = IdType.AUTO) + private Long heartBeatRecordId; + + /** + * 项目名字 + */ + private String projectPath; + /** + * 服务器ip + */ + private String serverIp; + /** + * 进程号 + */ + private Integer processNo; + /** + * 进程开启时间 + */ + private LocalDateTime processStartTime; + /** + * 心跳当前时间 + */ + private LocalDateTime heartBeatTime; + + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/domain/HeartBeatRecordQueryForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/domain/HeartBeatRecordQueryForm.java new file mode 100644 index 00000000..c9408bbf --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/domain/HeartBeatRecordQueryForm.java @@ -0,0 +1,30 @@ +package net.lab1024.sa.common.module.support.heartbeat.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.domain.PageParam; + +import java.time.LocalDate; + +/** + * 心跳记录 查询 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-01-09 20:57:24 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class HeartBeatRecordQueryForm extends PageParam { + + @ApiModelProperty("关键字") + private String keywords; + + @ApiModelProperty("开始日期") + private LocalDate startDate; + + @ApiModelProperty("结束日期") + private LocalDate endDate; + +} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatRecordVO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/domain/HeartBeatRecordVO.java similarity index 53% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatRecordVO.java rename to smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/domain/HeartBeatRecordVO.java index 34e98932..9f94f175 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatRecordVO.java +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/domain/HeartBeatRecordVO.java @@ -1,23 +1,25 @@ -package net.lab1024.smartadmin.module.support.heartbeat; +package net.lab1024.sa.common.module.support.heartbeat.domain; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import java.io.Serializable; import java.util.Date; /** - * 心跳记录日志 - * User: simajinqiang - * Date: 2018/7/9 - * Time: 11:11 + * 心跳记录 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-01-09 20:57:24 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ @Data -public class HeartBeatRecordVO implements Serializable { +public class HeartBeatRecordVO { - private Integer id; + private Integer heartBeatRecordId; - @ApiModelProperty("项目名字") + @ApiModelProperty("项目路径") private String projectPath; @ApiModelProperty("服务器ip") diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/controller/HelpDocController.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/controller/HelpDocController.java new file mode 100644 index 00000000..cd3eb398 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/controller/HelpDocController.java @@ -0,0 +1,77 @@ +package net.lab1024.sa.common.module.support.helpdoc.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.common.common.controller.SupportBaseController; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartRequestUtil; +import net.lab1024.sa.common.constant.SwaggerTagConst; +import net.lab1024.sa.common.module.support.helpdoc.domain.form.HelpDocViewRecordQueryForm; +import net.lab1024.sa.common.module.support.helpdoc.domain.vo.HelpDocCatalogVO; +import net.lab1024.sa.common.module.support.helpdoc.domain.vo.HelpDocDetailVO; +import net.lab1024.sa.common.module.support.helpdoc.domain.vo.HelpDocVO; +import net.lab1024.sa.common.module.support.helpdoc.domain.vo.HelpDocViewRecordVO; +import net.lab1024.sa.common.module.support.helpdoc.service.HelpDocCatalogService; +import net.lab1024.sa.common.module.support.helpdoc.service.HelpDocUserService; +import net.lab1024.sa.common.module.support.repeatsubmit.annoation.RepeatSubmit; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import javax.validation.Valid; +import java.util.List; + +/** + * 帮助文档 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-20 23:11:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Api(tags = SwaggerTagConst.Support.HELP_DOC) +@RestController +public class HelpDocController extends SupportBaseController { + + @Autowired + private HelpDocCatalogService helpDocCatalogService; + + @Autowired + private HelpDocUserService helpDocUserService; + + // --------------------- 帮助文档 【目录】 ------------------------- + + @ApiOperation("帮助文档目录-获取全部 @author 卓大") + @GetMapping("/helpDoc/helpDocCatalog/getAll") + public ResponseDTO> getAll() { + return ResponseDTO.ok(helpDocCatalogService.getAll()); + } + + // --------------------- 帮助文档 【用户】------------------------- + + @ApiOperation("【用户】帮助文档-查看详情 @author 卓大") + @GetMapping("/helpDoc/user/view/{helpDocId}") + @RepeatSubmit + public ResponseDTO view(@PathVariable Long helpDocId, HttpServletRequest request) { + return helpDocUserService.view( + SmartRequestUtil.getRequestUser(), + helpDocId); + } + + @ApiOperation("【用户】帮助文档-查询全部 @author 卓大") + @GetMapping("/helpDoc/user/queryAllHelpDocList") + @RepeatSubmit + public ResponseDTO> queryAllHelpDocList() { + return helpDocUserService.queryAllHelpDocList(); + } + + + @ApiOperation("【用户】帮助文档-查询 查看记录 @author 卓大") + @PostMapping("/helpDoc/user/queryViewRecord") + @RepeatSubmit + public ResponseDTO> queryViewRecord(@RequestBody @Valid HelpDocViewRecordQueryForm helpDocViewRecordQueryForm) { + return ResponseDTO.ok(helpDocUserService.queryViewRecord(helpDocViewRecordQueryForm)); + } +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/dao/HelpDocCatalogDao.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/dao/HelpDocCatalogDao.java new file mode 100644 index 00000000..68dac20a --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/dao/HelpDocCatalogDao.java @@ -0,0 +1,21 @@ +package net.lab1024.sa.common.module.support.helpdoc.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import net.lab1024.sa.common.module.support.helpdoc.domain.entity.HelpDocCatalogEntity; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Component; + +/** + * 帮助文档目录 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-20 23:11:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Mapper +@Component +public interface HelpDocCatalogDao extends BaseMapper { + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/dao/HelpDocDao.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/dao/HelpDocDao.java new file mode 100644 index 00000000..cab687c2 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/dao/HelpDocDao.java @@ -0,0 +1,137 @@ +package net.lab1024.sa.common.module.support.helpdoc.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.lab1024.sa.common.module.support.helpdoc.domain.entity.HelpDocEntity; +import net.lab1024.sa.common.module.support.helpdoc.domain.form.HelpDocQueryForm; +import net.lab1024.sa.common.module.support.helpdoc.domain.form.HelpDocRelationForm; +import net.lab1024.sa.common.module.support.helpdoc.domain.form.HelpDocViewRecordQueryForm; +import net.lab1024.sa.common.module.support.helpdoc.domain.vo.HelpDocRelationVO; +import net.lab1024.sa.common.module.support.helpdoc.domain.vo.HelpDocVO; +import net.lab1024.sa.common.module.support.helpdoc.domain.vo.HelpDocViewRecordVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 帮助文档 dao + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-20 23:11:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Mapper +@Component +public interface HelpDocDao extends BaseMapper { + + // ================================= 帮助文档【主表 t_help_doc 】 ================================= + + + /** + * 查询 全部相关文档 + * + * @return + */ + List queryAllHelpDocList(); + + /** + * 后管分页查询帮助文档 + * + * @param page + * @param queryForm + * @return + */ + List query(Page page, @Param("query") HelpDocQueryForm queryForm); + + + /** + * 更新 阅读量 + * @param helpDocId + * @param userViewCountIncrease + * @param pageViewCountIncrease + */ + void updateViewCount(@Param("helpDocId")Long helpDocId, @Param("userViewCountIncrease")Integer userViewCountIncrease,@Param("pageViewCountIncrease") Integer pageViewCountIncrease); + + + /** + * 根据目录,查询文档 + * + * @param helpDocCatalogId + * @return + */ + List queryHelpDocByCatalogId( @Param("helpDocCatalogId") Long helpDocCatalogId); + + /** + * 根据关联文档id,查询文档 + * + * @param relationId + * @return + */ + List queryHelpDocByRelationId( @Param("relationId") Long relationId); + + // ================================= 关联项目 【子表 t_help_doc_relation 】 ================================= + + /** + * 保存 关联 + * + * @param helpDocId + * @param relationList + */ + void insertRelation(@Param("helpDocId") Long helpDocId, @Param("relationList") List relationList); + + /** + * 删除关联 + * + * @param helpDocId + */ + void deleteRelation(@Param("helpDocId") Long helpDocId); + + /** + * 查询关联 + * + * @param helpDocId + */ + List queryRelationByHelpDoc(@Param("helpDocId") Long helpDocId); + + // ================================= 查看记录【子表 t_help_doc_view_record】 ================================= + + /** + * 查询某个用户的指定文档的阅读量 + * @param helpDocId + * @param userId + * @return + */ + long viewRecordCount(@Param("helpDocId")Long helpDocId, @Param("userId")Long userId); + + /** + * 查询帮助文档的 查看记录 + * @param page + * @param helpDocViewRecordQueryForm + * @return + */ + List queryViewRecordList(Page page, @Param("queryForm") HelpDocViewRecordQueryForm helpDocViewRecordQueryForm); + + /** + * 保存查看记录 + * @param helpDocId + * @param userId + * @param userName + * @param ip + * @param userAgent + */ + void insertViewRecord(@Param("helpDocId") Long helpDocId, @Param("userId") Long userId, @Param("userName") String userName, @Param("ip") String ip, @Param("userAgent") String userAgent,@Param("pageViewCount") Integer pageViewCount); + + /** + * 更新查看记录 + * @param helpDocId + * @param userId + * @param ip + * @param userAgent + */ + void updateViewRecord(@Param("helpDocId")Long helpDocId, @Param("userId")Long userId,@Param("ip") String ip, @Param("userAgent")String userAgent); + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/entity/HelpDocCatalogEntity.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/entity/HelpDocCatalogEntity.java new file mode 100644 index 00000000..04a2afb6 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/entity/HelpDocCatalogEntity.java @@ -0,0 +1,53 @@ +package net.lab1024.sa.common.module.support.helpdoc.domain.entity; + +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 lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * 帮助文档的 类型 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-20 23:11:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +@TableName("t_help_doc_catalog") +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class HelpDocCatalogEntity { + + @TableId(type = IdType.AUTO) + private Long helpDocCatalogId; + + /** + * 名称 + */ + private String name; + + /** + * 父id + */ + private Long parentId; + + /** + * 排序 + */ + @TableField("`sort`") + private Integer sort; + + + private LocalDateTime updateTime; + + private LocalDateTime createTime; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/entity/HelpDocEntity.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/entity/HelpDocEntity.java new file mode 100644 index 00000000..fe3d033e --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/entity/HelpDocEntity.java @@ -0,0 +1,77 @@ +package net.lab1024.sa.common.module.support.helpdoc.domain.entity; + +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 lombok.Data; + +import java.time.LocalDateTime; + +/** + * 帮助文档 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-20 23:11:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +@TableName("t_help_doc") +public class HelpDocEntity { + + @TableId(type = IdType.AUTO) + private Long helpDocId; + + /** + * 类型 + */ + private Long helpDocCatalogId; + + /** + * 标题 + */ + private String title; + + /** + * 内容 纯文本 + */ + private String contentText; + + /** + * 内容 html + */ + private String contentHtml; + + /** + * 附件 + * 多个英文逗号分隔 + */ + private String attachment; + + /** + * 排序 + */ + @TableField("`sort`") + private Integer sort; + + /** + * 页面浏览量 + */ + private Integer pageViewCount; + + /** + * 用户浏览量 + */ + private Integer userViewCount; + + /** + * 作者 + */ + private String author; + + private LocalDateTime updateTime; + + private LocalDateTime createTime; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocAddForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocAddForm.java new file mode 100644 index 00000000..116cd001 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocAddForm.java @@ -0,0 +1,57 @@ +package net.lab1024.sa.common.module.support.helpdoc.domain.form; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.json.deserializer.FileKeyVoDeserializer; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * 帮助文档 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-20 23:11:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class HelpDocAddForm { + + @ApiModelProperty("标题") + @NotBlank(message = "标题不能为空") + @Length(max = 200, message = "标题最多200字符") + private String title; + + @ApiModelProperty("分类") + @NotNull(message = "分类不能为空") + private Long helpDocCatalogId; + + @ApiModelProperty("纯文本内容") + @NotNull(message = "文本内容不能为空") + private String contentText; + + @ApiModelProperty("html内容") + @NotNull(message = "html内容不能为空") + private String contentHtml; + + @ApiModelProperty("附件,多个英文逗号分隔|可选") + @Length(max = 1000, message = "最多1000字符") + @JsonDeserialize(using = FileKeyVoDeserializer.class) + private String attachment; + + @ApiModelProperty("排序") + @NotNull(message = "排序不能为空") + private Integer sort; + + @ApiModelProperty("关联的集合") + private List relationList; + + @ApiModelProperty("作者") + @NotBlank(message = "作者不能为空") + private String author; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocCatalogAddForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocCatalogAddForm.java new file mode 100644 index 00000000..9e449675 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocCatalogAddForm.java @@ -0,0 +1,31 @@ +package net.lab1024.sa.common.module.support.helpdoc.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; + +/** + * 帮助文档 目录 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-20 23:11:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class HelpDocCatalogAddForm { + + @ApiModelProperty("名称") + @NotBlank(message = "名称不能为空") + @Length(max = 200, message = "名称最多200字符") + private String name; + + @ApiModelProperty("父级") + private Long parentId; + + @ApiModelProperty("排序") + private Integer sort; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocCatalogUpdateForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocCatalogUpdateForm.java new file mode 100644 index 00000000..7e2f1366 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocCatalogUpdateForm.java @@ -0,0 +1,23 @@ +package net.lab1024.sa.common.module.support.helpdoc.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * 帮助文档 目录 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-20 23:11:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class HelpDocCatalogUpdateForm extends HelpDocCatalogAddForm { + + @ApiModelProperty("id") + @NotNull(message = "id") + private Long helpDocCatalogId; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocQueryForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocQueryForm.java new file mode 100644 index 00000000..beac2c10 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocQueryForm.java @@ -0,0 +1,33 @@ +package net.lab1024.sa.common.module.support.helpdoc.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.domain.PageParam; + +import java.time.LocalDate; + +/** + * 帮助文档 分页查询 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-20 23:11:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class HelpDocQueryForm extends PageParam { + + @ApiModelProperty("分类") + private Long helpDocCatalogId; + + @ApiModelProperty("标题") + private String keywords; + + @ApiModelProperty("创建-开始时间") + private LocalDate createTimeBegin; + + @ApiModelProperty("创建-截止时间") + private LocalDate createTimeEnd; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocRelationForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocRelationForm.java new file mode 100644 index 00000000..374a8753 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocRelationForm.java @@ -0,0 +1,28 @@ +package net.lab1024.sa.common.module.support.helpdoc.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 帮助文档 关联项目 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-20 23:11:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class HelpDocRelationForm { + + @ApiModelProperty("关联名称") + @NotBlank(message = "关联名称不能为空") + private String relationName; + + @ApiModelProperty("关联id") + @NotNull(message = "关联id不能为空") + private Long relationId; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocUpdateForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocUpdateForm.java new file mode 100644 index 00000000..37f2e1aa --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocUpdateForm.java @@ -0,0 +1,24 @@ +package net.lab1024.sa.common.module.support.helpdoc.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * 更新 帮助文档 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-20 23:11:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class HelpDocUpdateForm extends HelpDocAddForm { + + @ApiModelProperty("id") + @NotNull(message = "通知id不能为空") + private Long helpDocId; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocViewRecordQueryForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocViewRecordQueryForm.java new file mode 100644 index 00000000..fc6bebb9 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocViewRecordQueryForm.java @@ -0,0 +1,32 @@ +package net.lab1024.sa.common.module.support.helpdoc.domain.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.domain.PageParam; + +import javax.validation.constraints.NotNull; + +/** + * 查阅记录 查询 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-20 23:11:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class HelpDocViewRecordQueryForm extends PageParam { + + @ApiModelProperty("帮助文档id") + @NotNull(message = "帮助文档id不能为空") + private Long helpDocId; + + @ApiModelProperty("用户id") + private Long userId; + + @ApiModelProperty("关键字") + private String keywords; + + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocCatalogVO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocCatalogVO.java new file mode 100644 index 00000000..423bc3e5 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocCatalogVO.java @@ -0,0 +1,30 @@ +package net.lab1024.sa.common.module.support.helpdoc.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 帮助文档的 目录 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-20 23:11:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class HelpDocCatalogVO { + + @ApiModelProperty("帮助文档目录id") + private Long helpDocCatalogId; + + @ApiModelProperty("帮助文档目录-名称") + private String name; + + @ApiModelProperty("帮助文档目录-父级id") + private Long parentId; + + @ApiModelProperty("帮助文档目录-排序") + private Integer sort; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocDetailVO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocDetailVO.java new file mode 100644 index 00000000..eef39d1d --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocDetailVO.java @@ -0,0 +1,65 @@ +package net.lab1024.sa.common.module.support.helpdoc.domain.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.json.serializer.FileKeyVoSerializer; + +import javax.validation.constraints.NotBlank; +import java.time.LocalDateTime; +import java.util.List; + +/** + * 帮助文档 详情 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-20 23:11:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class HelpDocDetailVO { + + @ApiModelProperty("id") + private Long helpDocId; + + @ApiModelProperty("标题") + private String title; + + @ApiModelProperty("分类") + private Long helpDocCatalogId; + + @ApiModelProperty("分类名称") + private Long helpDocCatalogName; + + @ApiModelProperty("纯文本内容") + private String contentText; + + @ApiModelProperty("html内容") + private String contentHtml; + + @ApiModelProperty("附件") + @JsonSerialize(using = FileKeyVoSerializer.class) + private String attachment; + + @ApiModelProperty("作者") + @NotBlank(message = "作者不能为空") + private String author; + + @ApiModelProperty("页面浏览量") + private Integer pageViewCount; + + @ApiModelProperty("用户浏览量") + private Integer userViewCount; + + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + + @ApiModelProperty("更新时间") + private LocalDateTime updateTime; + + @ApiModelProperty("关联项目") + private List relationList; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocRecordVO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocRecordVO.java new file mode 100644 index 00000000..3eabf68b --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocRecordVO.java @@ -0,0 +1,49 @@ +package net.lab1024.sa.common.module.support.helpdoc.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 帮助文档 - 浏览记录 VO + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-20 23:11:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class HelpDocRecordVO { + + @ApiModelProperty("员工ID") + private Long employeeId; + + @ApiModelProperty("员工姓名") + private String employeeName; + + @ApiModelProperty("员工部门名称") + private String departmentName; + + @ApiModelProperty("查看次数") + private Integer pageViewCount; + + @ApiModelProperty("首次ip") + private String firstIp; + + @ApiModelProperty("首次用户设备等标识") + private String firstUserAgent; + + @ApiModelProperty("首次查看时间") + private LocalDateTime createTime; + + @ApiModelProperty("最后一次 ip") + private String lastIp; + + @ApiModelProperty("最后一次 用户设备等标识") + private String lastUserAgent; + + @ApiModelProperty("最后一次查看时间") + private LocalDateTime updateTime; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocRelationVO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocRelationVO.java new file mode 100644 index 00000000..753a92e1 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocRelationVO.java @@ -0,0 +1,23 @@ +package net.lab1024.sa.common.module.support.helpdoc.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 帮助文档 关联项目 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-20 23:11:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class HelpDocRelationVO { + + @ApiModelProperty("关联名称") + private String relationName; + + @ApiModelProperty("关联id") + private Long relationId; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocVO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocVO.java new file mode 100644 index 00000000..c668caad --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocVO.java @@ -0,0 +1,50 @@ +package net.lab1024.sa.common.module.support.helpdoc.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 帮助文档 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-20 23:11:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class HelpDocVO { + + @ApiModelProperty("id") + private Long helpDocId; + + @ApiModelProperty("标题") + private String title; + + @ApiModelProperty("分类") + private Long helpDocCatalogId; + + @ApiModelProperty("分类名称") + private String helpDocCatalogName; + + @ApiModelProperty("作者") + private String author; + + @ApiModelProperty("排序") + private Integer sort; + + @ApiModelProperty("页面浏览量") + private Integer pageViewCount; + + @ApiModelProperty("用户浏览量") + private Integer userViewCount; + + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + + @ApiModelProperty("更新时间") + private LocalDateTime updateTime; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocViewRecordVO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocViewRecordVO.java new file mode 100644 index 00000000..c03cb736 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocViewRecordVO.java @@ -0,0 +1,46 @@ +package net.lab1024.sa.common.module.support.helpdoc.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 帮助文档 - 浏览记录 VO + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-20 23:11:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class HelpDocViewRecordVO { + + @ApiModelProperty("ID") + private Long userId; + + @ApiModelProperty("姓名") + private String userName; + + @ApiModelProperty("查看次数") + private Integer pageViewCount; + + @ApiModelProperty("首次ip") + private String firstIp; + + @ApiModelProperty("首次用户设备等标识") + private String firstUserAgent; + + @ApiModelProperty("首次查看时间") + private LocalDateTime createTime; + + @ApiModelProperty("最后一次 ip") + private String lastIp; + + @ApiModelProperty("最后一次 用户设备等标识") + private String lastUserAgent; + + @ApiModelProperty("最后一次查看时间") + private LocalDateTime updateTime; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/manager/HelpDocManager.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/manager/HelpDocManager.java new file mode 100644 index 00000000..44cd84d7 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/manager/HelpDocManager.java @@ -0,0 +1,60 @@ +package net.lab1024.sa.common.module.support.helpdoc.manager; + +import net.lab1024.sa.common.module.support.helpdoc.dao.HelpDocDao; +import net.lab1024.sa.common.module.support.helpdoc.domain.entity.HelpDocEntity; +import net.lab1024.sa.common.module.support.helpdoc.domain.form.HelpDocRelationForm; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 帮助文档 manager + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-20 23:11:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Service +public class HelpDocManager { + + @Autowired + private HelpDocDao helpDocDao; + + /** + * 保存 + * + * @param helpDocEntity + * @param relationList + */ + @Transactional(rollbackFor = Throwable.class) + public void save(HelpDocEntity helpDocEntity, List relationList) { + helpDocDao.insert(helpDocEntity); + Long helpDocId = helpDocEntity.getHelpDocId(); + // 保存关联 + if (CollectionUtils.isNotEmpty(relationList)) { + helpDocDao.insertRelation(helpDocId, relationList); + } + } + + /** + * 更新 + * + * @param helpDocEntity + * @param relationList + */ + @Transactional(rollbackFor = Throwable.class) + public void update(HelpDocEntity helpDocEntity, List relationList) { + helpDocDao.updateById(helpDocEntity); + Long helpDocId = helpDocEntity.getHelpDocId(); + // 保存关联 + if (CollectionUtils.isNotEmpty(relationList)) { + helpDocDao.deleteRelation(helpDocId); + helpDocDao.insertRelation(helpDocId, relationList); + } + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/service/HelpDocCatalogService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/service/HelpDocCatalogService.java new file mode 100644 index 00000000..9a8ec360 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/service/HelpDocCatalogService.java @@ -0,0 +1,115 @@ +package net.lab1024.sa.common.module.support.helpdoc.service; + +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import net.lab1024.sa.common.module.support.helpdoc.dao.HelpDocCatalogDao; +import net.lab1024.sa.common.module.support.helpdoc.dao.HelpDocDao; +import net.lab1024.sa.common.module.support.helpdoc.domain.entity.HelpDocCatalogEntity; +import net.lab1024.sa.common.module.support.helpdoc.domain.form.HelpDocCatalogAddForm; +import net.lab1024.sa.common.module.support.helpdoc.domain.form.HelpDocCatalogUpdateForm; +import net.lab1024.sa.common.module.support.helpdoc.domain.vo.HelpDocCatalogVO; +import net.lab1024.sa.common.module.support.helpdoc.domain.vo.HelpDocVO; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +/** + * 帮助文档 目录 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-20 23:11:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Service +public class HelpDocCatalogService { + + @Autowired + private HelpDocCatalogDao helpDocCatalogDao; + + @Autowired + private HelpDocDao helpDocDao; + + /** + * 查询全部目录 + * + * @return + */ + public List getAll() { + return SmartBeanUtil.copyList(helpDocCatalogDao.selectList(null), HelpDocCatalogVO.class); + } + + /** + * 添加目录 + * + * @param helpDocCatalogAddForm + * @return + */ + public synchronized ResponseDTO add(HelpDocCatalogAddForm helpDocCatalogAddForm) { + List helpDocCatalogList = getAll(); + Optional exist = helpDocCatalogList.stream().filter(e -> helpDocCatalogAddForm.getName().equals(e.getName())).findFirst(); + if (exist.isPresent()) { + return ResponseDTO.userErrorParam("存在相同名称的目录了"); + } + + helpDocCatalogDao.insert(SmartBeanUtil.copy(helpDocCatalogAddForm, HelpDocCatalogEntity.class)); + return ResponseDTO.ok(); + } + + /** + * 更新目录 + * + * @param updateForm + * @return + */ + public synchronized ResponseDTO update(HelpDocCatalogUpdateForm updateForm) { + HelpDocCatalogEntity helpDocCatalogEntity = helpDocCatalogDao.selectById(updateForm.getHelpDocCatalogId()); + if (helpDocCatalogEntity == null) { + return ResponseDTO.userErrorParam("目录不存在"); + } + + List helpDocCatalogList = getAll(); + Optional exist = helpDocCatalogList.stream().filter(e -> updateForm.getName().equals(e.getName())).findFirst(); + if (exist.isPresent() && !exist.get().getHelpDocCatalogId().equals(updateForm.getHelpDocCatalogId())) { + return ResponseDTO.userErrorParam("存在相同名称的目录了"); + } + helpDocCatalogDao.updateById(SmartBeanUtil.copy(updateForm, HelpDocCatalogEntity.class)); + return ResponseDTO.ok(); + } + + /** + * 删除目录(如果有子目录、或者有帮助文档,则不能删除) + * + * @param helpDocCatalogId + * @return + */ + public synchronized ResponseDTO delete(Long helpDocCatalogId) { + if (helpDocCatalogId == null) { + return ResponseDTO.ok(); + } + + HelpDocCatalogEntity helpDocCatalogEntity = helpDocCatalogDao.selectById(helpDocCatalogId); + if (helpDocCatalogEntity == null) { + return ResponseDTO.userErrorParam("目录不存在"); + } + + //如果有子目录,则不能删除 + Optional existOptional = getAll().stream().filter(e -> helpDocCatalogId.equals(e.getParentId())).findFirst(); + if (existOptional.isPresent()) { + return ResponseDTO.userErrorParam("存在子目录:" + existOptional.get().getName()); + } + + //查询是否有帮助文档 + List helpDocVOList = helpDocDao.queryHelpDocByCatalogId(helpDocCatalogId); + if (CollectionUtils.isNotEmpty(helpDocVOList)) { + return ResponseDTO.userErrorParam("目录下存在文档,不能删除"); + } + helpDocCatalogDao.deleteById(helpDocCatalogId); + return ResponseDTO.ok(); + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/service/HelpDocService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/service/HelpDocService.java new file mode 100644 index 00000000..9d6ba2d3 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/service/HelpDocService.java @@ -0,0 +1,117 @@ +package net.lab1024.sa.common.module.support.helpdoc.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import net.lab1024.sa.common.common.util.SmartPageUtil; +import net.lab1024.sa.common.module.support.helpdoc.dao.HelpDocDao; +import net.lab1024.sa.common.module.support.helpdoc.domain.entity.HelpDocEntity; +import net.lab1024.sa.common.module.support.helpdoc.domain.form.HelpDocAddForm; +import net.lab1024.sa.common.module.support.helpdoc.domain.form.HelpDocQueryForm; +import net.lab1024.sa.common.module.support.helpdoc.domain.form.HelpDocUpdateForm; +import net.lab1024.sa.common.module.support.helpdoc.domain.vo.HelpDocDetailVO; +import net.lab1024.sa.common.module.support.helpdoc.domain.vo.HelpDocVO; +import net.lab1024.sa.common.module.support.helpdoc.manager.HelpDocManager; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 后台管理业务 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-20 23:11:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Service +public class HelpDocService { + + @Autowired + private HelpDocDao helpDocDao; + + @Autowired + private HelpDocManager helpDaoManager; + + + /** + * 查询 帮助文档 + * + * @param queryForm + * @return + */ + public PageResult query(HelpDocQueryForm queryForm) { + Page page = SmartPageUtil.convert2PageQuery(queryForm); + List list = helpDocDao.query(page, queryForm); + return SmartPageUtil.convert2PageResult(page, list); + } + + /** + * 添加 + * + * @param addForm + * @return + */ + public ResponseDTO add(HelpDocAddForm addForm) { + HelpDocEntity helpDaoEntity = SmartBeanUtil.copy(addForm, HelpDocEntity.class); + helpDaoManager.save(helpDaoEntity, addForm.getRelationList()); + return ResponseDTO.ok(); + } + + + /** + * 更新 + * + * @param updateForm + * @return + */ + public ResponseDTO update(HelpDocUpdateForm updateForm) { + // 更新 + HelpDocEntity helpDaoEntity = SmartBeanUtil.copy(updateForm, HelpDocEntity.class); + helpDaoManager.update(helpDaoEntity, updateForm.getRelationList()); + return ResponseDTO.ok(); + } + + + /** + * 删除 + * + * @param helpDocId + * @return + */ + public ResponseDTO delete(Long helpDocId) { + HelpDocEntity helpDaoEntity = helpDocDao.selectById(helpDocId); + if (helpDaoEntity != null) { + helpDocDao.deleteById(helpDocId); + } + return ResponseDTO.ok(); + } + + /** + * 获取详情 + * + * @param helpDocId + * @return + */ + public HelpDocDetailVO getDetail(Long helpDocId) { + HelpDocEntity helpDaoEntity = helpDocDao.selectById(helpDocId); + HelpDocDetailVO detail = SmartBeanUtil.copy(helpDaoEntity, HelpDocDetailVO.class); + if (detail != null) { + detail.setRelationList(helpDocDao.queryRelationByHelpDoc(helpDocId)); + } + return detail; + } + + /** + * 获取详情 + * + * @param relationId + * @return + */ + public List queryHelpDocByRelationId(Long relationId) { + return helpDocDao.queryHelpDocByRelationId(relationId); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/service/HelpDocUserService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/service/HelpDocUserService.java new file mode 100644 index 00000000..16830b72 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/service/HelpDocUserService.java @@ -0,0 +1,85 @@ +package net.lab1024.sa.common.module.support.helpdoc.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.RequestUser; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import net.lab1024.sa.common.common.util.SmartPageUtil; +import net.lab1024.sa.common.module.support.helpdoc.dao.HelpDocDao; +import net.lab1024.sa.common.module.support.helpdoc.domain.entity.HelpDocEntity; +import net.lab1024.sa.common.module.support.helpdoc.domain.form.HelpDocViewRecordQueryForm; +import net.lab1024.sa.common.module.support.helpdoc.domain.vo.HelpDocDetailVO; +import net.lab1024.sa.common.module.support.helpdoc.domain.vo.HelpDocVO; +import net.lab1024.sa.common.module.support.helpdoc.domain.vo.HelpDocViewRecordVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 用户查看 帮助文档 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-20 23:11:42 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Service +public class HelpDocUserService { + + @Autowired + private HelpDocDao helpDocDao; + + + /** + * 查询全部 帮助文档 + * + * @return + */ + public ResponseDTO> queryAllHelpDocList() { + return ResponseDTO.ok(helpDocDao.queryAllHelpDocList()); + } + + + /** + * 查询我的 待查看的 帮助文档清单 + * + * @return + */ + public ResponseDTO view(RequestUser requestUser, Long helpDocId) { + HelpDocEntity helpDocEntity = helpDocDao.selectById(helpDocId); + if (helpDocEntity == null) { + return ResponseDTO.userErrorParam("帮助文档不存在"); + } + + HelpDocDetailVO helpDocDetailVO = SmartBeanUtil.copy(helpDocEntity, HelpDocDetailVO.class); + long viewCount = helpDocDao.viewRecordCount(helpDocId, requestUser.getUserId()); + if (viewCount == 0) { + helpDocDao.insertViewRecord(helpDocId, requestUser.getUserId(), requestUser.getUserName(), requestUser.getIp(), requestUser.getUserAgent(), 1); + helpDocDao.updateViewCount(helpDocId, 1, 1); + helpDocDetailVO.setPageViewCount(helpDocDetailVO.getPageViewCount() + 1); + helpDocDetailVO.setUserViewCount(helpDocDetailVO.getUserViewCount() + 1); + } else { + helpDocDao.updateViewRecord(helpDocId, requestUser.getUserId(), requestUser.getIp(), requestUser.getUserAgent()); + helpDocDao.updateViewCount(helpDocId, 0, 1); + helpDocDetailVO.setPageViewCount(helpDocDetailVO.getPageViewCount() + 1); + } + + return ResponseDTO.ok(helpDocDetailVO); + } + + + /** + * 分页查询 查看记录 + * + * @param helpDocViewRecordQueryForm + * @return + */ + public PageResult queryViewRecord(HelpDocViewRecordQueryForm helpDocViewRecordQueryForm) { + Page page = SmartPageUtil.convert2PageQuery(helpDocViewRecordQueryForm); + List noticeViewRecordVOS = helpDocDao.queryViewRecordList(page, helpDocViewRecordQueryForm); + return SmartPageUtil.convert2PageResult(page, noticeViewRecordVOS); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/DecryptData.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/DecryptData.java new file mode 100644 index 00000000..d23f329a --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/DecryptData.java @@ -0,0 +1,18 @@ +package net.lab1024.sa.common.module.support.jwe; + +import lombok.Data; + +/** + * 加密数据 包装类 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2021/6/29 20:49:23 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +class DecryptData { + + private String data; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweAspect.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweAspect.java new file mode 100644 index 00000000..7a2dbc64 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweAspect.java @@ -0,0 +1,128 @@ +package net.lab1024.sa.common.module.support.jwe; + +import cn.hutool.crypto.Mode; +import cn.hutool.crypto.Padding; +import cn.hutool.crypto.SecureUtil; +import cn.hutool.crypto.symmetric.AES; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.serializer.SerializerFeature; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.core.annotation.Order; +import org.springframework.util.Base64Utils; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import java.lang.reflect.Method; +import java.util.function.Function; + +/** + * 加密数据切口 + * + * @Author 1024创新实验室: 胡克 + * @Date 2020/11/25 10:46 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Slf4j +@Aspect +@Order(100) +public class JweAspect { + + private static final String MD5_SALT_FORMAT = "sa_%s_salt"; + + private Function userFunction; + + public JweAspect(Function userFunction) { + this.userFunction = userFunction; + } + + @Before("@annotation(net.lab1024.sa.common.module.support.jwe.JweDecrypt)") + public void before(JoinPoint joinPoint) { + Method method = ((MethodSignature) joinPoint.getSignature()).getMethod(); + JweDecrypt annotation = method.getAnnotation(JweDecrypt.class); + if (annotation == null) { + return; + } + Object[] params = joinPoint.getArgs(); + if (params == null) { + return; + } + if (params.length == 0) { + return; + } + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + JweUserKey user = this.userFunction.apply(request); + if (user == null) { + return; + } + Boolean decryptParamFlag = params[0] instanceof DecryptData; + if (!decryptParamFlag) { + return; + } + DecryptData decryptData = (DecryptData) params[0]; + String data = decryptData.getData(); + log.info("解密前数据:{}", data); + + String key = SecureUtil.md5(String.format(MD5_SALT_FORMAT, user.getUserId())); + log.info("解密KEY数据:{}", key); + //初始化向量是16位长度 + String iv = key.substring(0, 16); + //解密 + AES aes = new AES(Mode.CTS, Padding.PKCS5Padding, key.getBytes(), iv.getBytes()); + data = aes.decryptStr(data); + log.info("解密后数据:{}", data); + //base64解码 + data = new String(Base64Utils.decodeFromString(data)); + log.info("base64解码后数据:{}", data); + decryptData.setData(data); + } + + + @AfterReturning(returning = "object", pointcut = "@annotation(net.lab1024.sa.common.module.support.jwe.JweEncrypt)") + public void afterReturning(JoinPoint joinPoint, Object object) { + Method method = ((MethodSignature) joinPoint.getSignature()).getMethod(); + JweEncrypt annotation = method.getAnnotation(JweEncrypt.class); + if (annotation == null) { + return; + } + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + JweUserKey user = this.userFunction.apply(request); + if (user == null) { + return; + } + try { + ResponseDTO responseDTO = (ResponseDTO) object; + Object data = responseDTO.getData(); + if (data == null) { + return; + } + String jsonData = JSON.toJSONString(data, SerializerFeature.DisableCircularReferenceDetect); + log.info("JSON 原数据:{}", jsonData); + //base64编码 + jsonData = Base64Utils.encodeToString(jsonData.getBytes("utf-8")); + log.info("JSON Base64数据:{}", jsonData); + //加密秘钥 + String key = SecureUtil.md5(String.format(MD5_SALT_FORMAT, user.getUserId())); + log.info("JSON MD5 KEY数据:{}", key); + //初始化向量是16位长度 + String iv = key.substring(0, 16); + //AES 加密 + AES aes = new AES(Mode.CTS, Padding.PKCS5Padding, key.getBytes(), iv.getBytes()); + data = aes.encryptBase64(jsonData); + log.info("JSON ASE 加密数据:{}", jsonData); + responseDTO.setData(jsonData); + } catch (Exception e) { + log.error(e.getMessage(),e); + return; + } + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweDecrypt.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweDecrypt.java new file mode 100644 index 00000000..5900f439 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweDecrypt.java @@ -0,0 +1,20 @@ +package net.lab1024.sa.common.module.support.jwe; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 解密注解 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2020/11/25 20:46 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +public @interface JweDecrypt { +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweEncrypt.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweEncrypt.java new file mode 100644 index 00000000..e6e93940 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweEncrypt.java @@ -0,0 +1,20 @@ +package net.lab1024.sa.common.module.support.jwe; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 加密注解 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2020/11/25 20:46 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +public @interface JweEncrypt { +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweUserKey.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweUserKey.java new file mode 100644 index 00000000..ce020667 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweUserKey.java @@ -0,0 +1,32 @@ +package net.lab1024.sa.common.module.support.jwe; + +import lombok.Data; + +/** + * 解密用用户信息作为key + * + * @Author 1024创新实验室: 罗伊 + * @Date 2020/11/25 20:46 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class JweUserKey { + + /** + * 用户id + */ + private Long userId; + + /** + * 用户名 + */ + private String userName; + + /** + * 扩展信息 + */ + private String extData; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/LoginLogDao.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/LoginLogDao.java new file mode 100644 index 00000000..e7fe6183 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/LoginLogDao.java @@ -0,0 +1,46 @@ +package net.lab1024.sa.common.module.support.loginlog; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.lab1024.sa.common.module.support.loginlog.domain.LoginLogEntity; +import net.lab1024.sa.common.module.support.loginlog.domain.LoginLogQueryForm; +import net.lab1024.sa.common.module.support.loginlog.domain.LoginLogVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 登录日志 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022/07/22 19:46:23 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Mapper +@Component +public interface LoginLogDao extends BaseMapper { + + /** + * 分页查询 + * + * @param page + * @param queryForm + * @return LoginLogVO + */ + List queryByPage(Page page, @Param("query") LoginLogQueryForm queryForm); + + /** + * 查询上一个登录记录 + * + * @param userId + * @param userType + * @return LoginLogVO + */ + LoginLogVO queryLastByUserId(@Param("userId") Long userId,@Param("userType") Integer userType); + + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/LoginLogResultEnum.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/LoginLogResultEnum.java new file mode 100644 index 00000000..2ccb7503 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/LoginLogResultEnum.java @@ -0,0 +1,37 @@ +package net.lab1024.sa.common.module.support.loginlog; + +import net.lab1024.sa.common.common.enumeration.BaseEnum; + +/** + * 登录类型 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022/07/22 19:46:23 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public enum LoginLogResultEnum implements BaseEnum { + + LOGIN_SUCCESS(0, "登录成功"), + LOGIN_FAIL(1, "登录失败"), + LOGIN_OUT(2, "退出登录"); + + private Integer type; + private String desc; + + LoginLogResultEnum(Integer type, String desc) { + this.type = type; + this.desc = desc; + } + + @Override + public Integer getValue() { + return type; + } + + @Override + public String getDesc() { + return desc; + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/LoginLogService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/LoginLogService.java new file mode 100644 index 00000000..0c6fb039 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/LoginLogService.java @@ -0,0 +1,67 @@ +package net.lab1024.sa.common.module.support.loginlog; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.enumeration.UserTypeEnum; +import net.lab1024.sa.common.common.util.SmartPageUtil; +import net.lab1024.sa.common.module.support.loginlog.domain.LoginLogEntity; +import net.lab1024.sa.common.module.support.loginlog.domain.LoginLogQueryForm; +import net.lab1024.sa.common.module.support.loginlog.domain.LoginLogVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 登录日志 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022/07/22 19:46:23 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Service +@Slf4j +public class LoginLogService { + + @Autowired + private LoginLogDao loginLogDao; + + /** + * @author 卓大 + * @description 分页查询 + */ + public ResponseDTO> queryByPage(LoginLogQueryForm queryForm) { + Page page = SmartPageUtil.convert2PageQuery(queryForm); + List logList = loginLogDao.queryByPage(page, queryForm); + PageResult pageResult = SmartPageUtil.convert2PageResult(page, logList); + return ResponseDTO.ok(pageResult); + } + + /** + * @author 卓大 + * @description 添加 + */ + public void log(LoginLogEntity loginLogEntity) { + try { + loginLogDao.insert(loginLogEntity); + } catch (Throwable e) { + log.error(e.getMessage(), e); + } + } + + + /** + * 查询上一个登录记录 + * + * @author 卓大 + * @description 查询上一个登录记录 + */ + public LoginLogVO queryLastByUserId(Long userId, UserTypeEnum userTypeEnum) { + return loginLogDao.queryLastByUserId(userId,userTypeEnum.getValue()); + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/domain/LoginLogEntity.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/domain/LoginLogEntity.java new file mode 100644 index 00000000..50c785b4 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/domain/LoginLogEntity.java @@ -0,0 +1,67 @@ +package net.lab1024.sa.common.module.support.loginlog.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Builder; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 登录日志 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022/07/22 19:46:23 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@TableName("t_login_log") +@Data +@Builder +public class LoginLogEntity { + + @TableId(type = IdType.AUTO) + private Long loginLogId; + + /** + * 用户id + */ + private Long userId; + + /** + * 用户类型 + */ + private Integer userType; + + /** + * 用户名 + */ + private String userName; + + /** + * 登录ip + */ + private String loginIp; + + /** + * user-agent + */ + private String userAgent; + + /** + * 备注 + */ + private String remark; + + /** + * 登录类型 + */ + private Integer loginResult; + + private LocalDateTime updateTime; + + private LocalDateTime createTime; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/domain/LoginLogQueryForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/domain/LoginLogQueryForm.java new file mode 100644 index 00000000..92d69c18 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/domain/LoginLogQueryForm.java @@ -0,0 +1,31 @@ +package net.lab1024.sa.common.module.support.loginlog.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.domain.PageParam; + +/** + * 登录查询日志 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022/07/22 19:46:23 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class LoginLogQueryForm extends PageParam { + + @ApiModelProperty("开始日期") + private String startDate; + + @ApiModelProperty("结束日期") + private String endDate; + + @ApiModelProperty("用户名称") + private String userName; + + @ApiModelProperty("ip") + private String ip; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/domain/LoginLogVO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/domain/LoginLogVO.java new file mode 100644 index 00000000..753dd49c --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/domain/LoginLogVO.java @@ -0,0 +1,48 @@ +package net.lab1024.sa.common.module.support.loginlog.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.enumeration.UserTypeEnum; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; +import net.lab1024.sa.common.module.support.loginlog.LoginLogResultEnum; + +import java.time.LocalDateTime; + +/** + * 登录日志 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022/07/22 19:46:23 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class LoginLogVO { + + private Long loginLogId; + + @ApiModelProperty("用户id") + private Long userId; + + @ApiModelPropertyEnum(value = UserTypeEnum.class, desc = "用户类型") + private Integer userType; + + @ApiModelProperty("用户名") + private String userName; + + @ApiModelProperty("登录ip") + private String loginIp; + + @ApiModelProperty("user-agent") + private String userAgent; + + @ApiModelProperty("remark") + private String remark; + + @ApiModelPropertyEnum(LoginLogResultEnum.class) + private Integer loginResult; + + private LocalDateTime createTime; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/OperateLogDao.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/OperateLogDao.java new file mode 100644 index 00000000..be5af95e --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/OperateLogDao.java @@ -0,0 +1,49 @@ +package net.lab1024.sa.common.module.support.operatelog; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.lab1024.sa.common.module.support.operatelog.domain.OperateLogEntity; +import net.lab1024.sa.common.module.support.operatelog.domain.OperateLogQueryForm; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 操作日志 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2021-12-08 20:48:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Mapper +@Component +public interface OperateLogDao extends BaseMapper { + + /** + * 分页查询 + * @param page + * @param queryForm + * @return UserOperateLogEntity + */ + List queryByPage(Page page, @Param("query") OperateLogQueryForm queryForm); + + /** + * 根据id删除 + * + * @param id + * @return + */ + void deleteById(@Param("id") Long id); + + /** + * 批量删除 + * + * @param idList + * @return + */ + void deleteByIds(@Param("idList") List idList); +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/OperateLogService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/OperateLogService.java new file mode 100644 index 00000000..d3ac8bf3 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/OperateLogService.java @@ -0,0 +1,57 @@ +package net.lab1024.sa.common.module.support.operatelog; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.lab1024.sa.common.common.code.UserErrorCode; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import net.lab1024.sa.common.common.util.SmartPageUtil; +import net.lab1024.sa.common.module.support.operatelog.domain.OperateLogEntity; +import net.lab1024.sa.common.module.support.operatelog.domain.OperateLogQueryForm; +import net.lab1024.sa.common.module.support.operatelog.domain.OperateLogVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 操作日志 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2021-12-08 20:48:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Service +public class OperateLogService { + + @Autowired + private OperateLogDao operateLogDao; + + /** + * @author 罗伊 + * @description 分页查询 + */ + public ResponseDTO> queryByPage(OperateLogQueryForm queryForm) { + Page page = SmartPageUtil.convert2PageQuery(queryForm); + List logEntityList = operateLogDao.queryByPage(page, queryForm); + PageResult pageResult = SmartPageUtil.convert2PageResult(page, logEntityList, OperateLogVO.class); + return ResponseDTO.ok(pageResult); + } + + + /** + * 查询详情 + * @param operateLogId + * @return + */ + public ResponseDTO detail(Long operateLogId) { + OperateLogEntity operateLogEntity = operateLogDao.selectById(operateLogId); + if(operateLogEntity == null){ + return ResponseDTO.error(UserErrorCode.DATA_NOT_EXIST); + } + OperateLogVO operateLogVO = SmartBeanUtil.copy(operateLogEntity, OperateLogVO.class); + return ResponseDTO.ok(operateLogVO); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/annoation/OperateLog.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/annoation/OperateLog.java new file mode 100644 index 00000000..f8acadfb --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/annoation/OperateLog.java @@ -0,0 +1,19 @@ +package net.lab1024.sa.common.module.support.operatelog.annoation; + +import java.lang.annotation.*; + +/** + * 用户操作日志 注解 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2021-12-08 20:48:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +@Documented +public @interface OperateLog { + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/core/OperateLogAspect.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/core/OperateLogAspect.java new file mode 100644 index 00000000..169a7ce3 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/core/OperateLogAspect.java @@ -0,0 +1,276 @@ +package net.lab1024.sa.common.module.support.operatelog.core; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.extra.servlet.ServletUtil; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.common.constant.RequestHeaderConst; +import net.lab1024.sa.common.common.domain.RequestUser; +import net.lab1024.sa.common.common.util.SmartRequestUtil; +import net.lab1024.sa.common.module.support.operatelog.OperateLogDao; +import net.lab1024.sa.common.module.support.operatelog.annoation.OperateLog; +import net.lab1024.sa.common.module.support.operatelog.domain.OperateLogEntity; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.AfterThrowing; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.core.annotation.AnnotationUtils; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.lang.reflect.Method; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * 操作日志记录处理,对所有OperateLog注解的Controller进行操作日志监控 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2021-12-08 20:48:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Slf4j +@Aspect +public abstract class OperateLogAspect { + + private static final String pointCut = "@within(net.lab1024.sa.common.module.support.operatelog.annoation.OperateLog)"; + + @Autowired + private ApplicationContext applicationContext; + /** + * 线程池 + */ + private ThreadPoolTaskExecutor taskExecutor; + + public abstract OperateLogConfig getOperateLogConfig(); + + public OperateLogAspect() { + this.initThread(); + } + + @Pointcut(pointCut) + public void logPointCut() { + } + + @AfterReturning(pointcut = "logPointCut()") + public void doAfterReturning(JoinPoint joinPoint) { + handleLog(joinPoint, null); + } + + @AfterThrowing(value = "logPointCut()", throwing = "e") + public void doAfterThrowing(JoinPoint joinPoint, Exception e) { + handleLog(joinPoint, e); + } + + /** + * 初始化线程池 + */ + private void initThread() { + OperateLogConfig config = getOperateLogConfig(); + int corePoolSize = Runtime.getRuntime().availableProcessors(); + if (null != config.getCorePoolSize()) { + corePoolSize = config.getCorePoolSize(); + } + taskExecutor = new ThreadPoolTaskExecutor(); + //线程初始化 + taskExecutor.initialize(); + // 设置核心线程数 + taskExecutor.setCorePoolSize(corePoolSize); + // 设置最大线程数 + taskExecutor.setMaxPoolSize(corePoolSize * 2); + // 设置队列容量 + taskExecutor.setQueueCapacity(1000); + // 设置线程活跃时间(秒) + taskExecutor.setKeepAliveSeconds(60); + // 设置默认线程名称 + taskExecutor.setThreadNamePrefix("smart-logs"); + // 设置拒绝策略 + taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + // 等待所有任务结束后再关闭线程池 + taskExecutor.setWaitForTasksToCompleteOnShutdown(true); + } + + protected void handleLog(final JoinPoint joinPoint, final Exception e) { + try { + OperateLog operateLog = this.getAnnotationLog(joinPoint); + if (operateLog == null) { + return; + } + this.submitLog(joinPoint, e); + } catch (Exception exp) { + log.error("保存操作日志异常:{}", exp.getMessage()); + exp.printStackTrace(); + } + } + + private OperateLog getAnnotationLog(JoinPoint joinPoint) throws Exception { + Signature signature = joinPoint.getSignature(); + MethodSignature methodSignature = (MethodSignature) signature; + Method method = methodSignature.getMethod(); + OperateLog classAnnotation = AnnotationUtils.findAnnotation(method.getDeclaringClass(), OperateLog.class); + if (method != null) { + return classAnnotation; + } + return null; + } + + /** + * swagger API + * + * @param joinPoint + * @return + * @throws Exception + */ + private Api getApi(JoinPoint joinPoint) { + Signature signature = joinPoint.getSignature(); + MethodSignature methodSignature = (MethodSignature) signature; + Method method = methodSignature.getMethod(); + Api classAnnotation = AnnotationUtils.findAnnotation(method.getDeclaringClass(), Api.class); + if (method != null) { + return classAnnotation; + } + return null; + } + + /** + * swagger ApiOperation + * + * @param joinPoint + * @return + * @throws Exception + */ + private ApiOperation getApiOperation(JoinPoint joinPoint) { + Signature signature = joinPoint.getSignature(); + MethodSignature methodSignature = (MethodSignature) signature; + Method method = methodSignature.getMethod(); + + if (method != null) { + return method.getAnnotation(ApiOperation.class); + } + return null; + } + + /** + * 提交存储操作日志 + * + * @param joinPoint + * @param e + * @throws Exception + */ + private void submitLog(final JoinPoint joinPoint, final Throwable e) throws Exception { + Boolean isOpen = this.isOpen(); + if (!isOpen) { + return; + } + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + Boolean filter = this.filterUrl(request.getRequestURI()); + if (filter) { + return; + } + //设置用户信息 + RequestUser user = SmartRequestUtil.getRequestUser(); + if (user == null) { + return; + } + + Object[] args = joinPoint.getArgs(); + String params = JSON.toJSONString(args); + // 设置方法名称 + String className = joinPoint.getTarget().getClass().getName(); + String methodName = joinPoint.getSignature().getName(); + String operateMethod = className + "." + methodName; + String failReason = null; + Boolean successFlag = true; + if (e != null) { + successFlag = false; + failReason = getExceptionString(e); + } + + + OperateLogEntity operateLogEntity = + OperateLogEntity.builder() + .operateUserId(user.getUserId()) + .operateUserType(user.getUserType().getValue()) + .operateUserName(user.getUserName()) + .url(request.getRequestURI()) + .method(operateMethod) + .param(params) + .ip(user.getIp()) + .userAgent(user.getUserAgent()) + .failReason(failReason) + .successFlag(successFlag).build(); + ApiOperation apiOperation = this.getApiOperation(joinPoint); + if (apiOperation != null) { + operateLogEntity.setContent(apiOperation.value()); + } + Api api = this.getApi(joinPoint); + if (api != null) { + String[] tags = api.tags(); + operateLogEntity.setModule(StrUtil.join(",", tags)); + } + taskExecutor.execute(() -> { + this.saveLog(operateLogEntity); + }); + } + + + private String getExceptionString(Throwable e) { + StringWriter sw = new StringWriter(); + try (PrintWriter pw = new PrintWriter(sw);) { + e.printStackTrace(pw); + } + return sw.toString(); + } + + /** + * 是否开启操作日志 + * + * @return + */ + private Boolean isOpen() { + return Boolean.TRUE; + } + + /** + * 需要过滤的url + * + * @param url + * @return + */ + private Boolean filterUrl(String url) { + return Boolean.FALSE; + } + + /** + * 保存操作日志 + * + * @param operateLogEntity + * @return + */ + private Boolean saveLog(OperateLogEntity operateLogEntity) { + OperateLogConfig operateLogConfig = getOperateLogConfig(); + if (operateLogConfig.getSaveFunction() == null) { + BaseMapper mapper = applicationContext.getBean(OperateLogDao.class); + if (mapper == null) { + return false; + } + mapper.insert(operateLogEntity); + return true; + } + return operateLogConfig.getSaveFunction().apply(operateLogEntity); + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/core/OperateLogConfig.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/core/OperateLogConfig.java new file mode 100644 index 00000000..7bc65256 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/core/OperateLogConfig.java @@ -0,0 +1,38 @@ +package net.lab1024.sa.common.module.support.operatelog.core; + +import lombok.Builder; +import lombok.Data; +import net.lab1024.sa.common.module.support.operatelog.domain.OperateLogEntity; + +import java.util.function.Function; + +/** + * 配置 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2021-12-08 20:48:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +@Builder +public class OperateLogConfig { + + /** + * 操作日志存储方法 + */ + private Function saveFunction; + + /** + * 核心线程数 + */ + private Integer corePoolSize; + + /** + * 队列大小 + */ + private Integer queueCapacity; + + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/domain/OperateLogEntity.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/domain/OperateLogEntity.java new file mode 100644 index 00000000..0a51993e --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/domain/OperateLogEntity.java @@ -0,0 +1,106 @@ +package net.lab1024.sa.common.module.support.operatelog.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * 操作记录 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2021-12-08 20:48:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName("t_operate_log") +public class OperateLogEntity { + + /** + * 主键id + */ + @TableId(type = IdType.AUTO) + private Long operateLogId; + + /** + * 操作人id + */ + private Long operateUserId; + + /** + * 用户类型 + */ + private Integer operateUserType; + + /** + * 操作人名称 + */ + private String operateUserName; + /** + * 操作模块 + */ + private String module; + + /** + * 操作内容 + */ + private String content; + + /** + * 请求路径 + */ + private String url; + + /** + * 请求方法 + */ + private String method; + + /** + * 请求参数 + */ + private String param; + + /** + * 客户ip + */ + private String ip; + + /** + * user-agent + */ + private String userAgent; + + /** + * 请求结果 0失败 1成功 + */ + private Boolean successFlag; + + /** + * 失败原因 + */ + private String failReason; + + + /** + * 更新时间 + */ + private LocalDateTime updateTime; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/domain/OperateLogQueryForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/domain/OperateLogQueryForm.java new file mode 100644 index 00000000..2e92f11b --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/domain/OperateLogQueryForm.java @@ -0,0 +1,33 @@ +package net.lab1024.sa.common.module.support.operatelog.domain; + +import net.lab1024.sa.common.common.domain.PageParam; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 操作日志查询 表单 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2021-12-08 20:48:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class OperateLogQueryForm extends PageParam { + + + @ApiModelProperty("开始日期") + private String startDate; + + @ApiModelProperty("结束日期") + private String endDate; + + + @ApiModelProperty("用户名称") + private String userName; + + @ApiModelProperty("请求结果 false失败 true成功") + private Boolean successFlag; + +} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/domain/UserOperateLogDTO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/domain/OperateLogVO.java similarity index 51% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/domain/UserOperateLogDTO.java rename to smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/domain/OperateLogVO.java index 39fd2f99..b71f083f 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/domain/UserOperateLogDTO.java +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/domain/OperateLogVO.java @@ -1,30 +1,37 @@ -package net.lab1024.smartadmin.module.business.log.useroperatelog.domain; -import lombok.Data; -import java.util.Date; +package net.lab1024.sa.common.module.support.operatelog.domain; + import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.enumeration.UserTypeEnum; +import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum; + +import java.time.LocalDateTime; +import java.util.Date; /** - * [ ] + * 操作日志信息 * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/3/27 0027 下午 12:27 - * @since JDK1.8 + * @Author 1024创新实验室: 罗伊 + * @Date 2021-12-08 20:48:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ @Data -public class UserOperateLogDTO { +public class OperateLogVO { @ApiModelProperty("主键") - private Long id; + private Long operateLogId; @ApiModelProperty("用户id") - private Long userId; + private Long operateUserId; + + @ApiModelPropertyEnum(value = UserTypeEnum.class, desc = "用户类型") + private Integer operateUserType; @ApiModelProperty("用户名称") - private String userName; + private String operateUserName; @ApiModelProperty("操作模块") private String module; @@ -41,19 +48,25 @@ public class UserOperateLogDTO { @ApiModelProperty("请求参数") private String param; + @ApiModelProperty("客户ip") + private String ip; + + @ApiModelProperty("user-agent") + private String userAgent; + @ApiModelProperty("请求结果 0失败 1成功") - private Integer result; + private Boolean successFlag; @ApiModelProperty("失败原因") private String failReason; @ApiModelProperty("更新时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private Date updateTime; + private LocalDateTime updateTime; @ApiModelProperty("创建时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private Date createTime; + private LocalDateTime createTime; } diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/redis/RedisService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/redis/RedisService.java new file mode 100644 index 00000000..f99f29ef --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/redis/RedisService.java @@ -0,0 +1,222 @@ +package net.lab1024.sa.common.module.support.redis; + +import com.alibaba.fastjson.JSON; +import net.lab1024.sa.common.common.domain.SystemEnvironment; +import net.lab1024.sa.common.common.enumeration.SystemEnvironmentEnum; +import net.lab1024.sa.common.common.util.SmartStringUtil; +import net.lab1024.sa.common.constant.RedisKeyConst; +import org.slf4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.*; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.temporal.ChronoUnit; +import java.util.Collection; +import java.util.List; +import java.util.concurrent.TimeUnit; + +/** + * redis 一顿操作 + * + * @Author 1024创新实验室: 罗伊 + * @Date 2020/8/25 21:57 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Component +public class RedisService { + + private static final Logger log = org.slf4j.LoggerFactory.getLogger(RedisService.class); + + @Autowired + private StringRedisTemplate stringRedisTemplate; + + @Autowired + private RedisTemplate redisTemplate; + + @Autowired + private ValueOperations redisValueOperations; + + @Autowired + private HashOperations redisHashOperations; + + @Autowired + private ListOperations redisListOperations; + + @Autowired + private SetOperations redisSetOperations; + + @Autowired + private SystemEnvironment systemEnvironment; + + + /** + * 生成redis key + * @param prefix + * @param key + * @return + */ + public String generateRedisKey(String prefix, String key) { + SystemEnvironmentEnum currentEnvironment = systemEnvironment.getCurrentEnvironment(); + return systemEnvironment.getProjectName() + RedisKeyConst.SEPARATOR + currentEnvironment.getValue() + RedisKeyConst.SEPARATOR + prefix + key; + } + + /** + * redis key 解析成真实的内容 + * @param redisKey + * @return + */ + public static String redisKeyParse(String redisKey) { + if(SmartStringUtil.isBlank(redisKey)){ + return ""; + } + int index = redisKey.lastIndexOf(RedisKeyConst.SEPARATOR); + if(index < 1){ + return redisKey; + } + return redisKey.substring(index); + } + + public boolean getLock(String key, long expire) { + return redisValueOperations.setIfAbsent(key, String.valueOf(System.currentTimeMillis()), expire, TimeUnit.MILLISECONDS); + } + + public void unLock(String key) { + redisValueOperations.getOperations().delete(key); + } + + /** + * 指定缓存失效时间 + * + * @param key 键 + * @param time 时间(秒) + * @return + */ + public boolean expire(String key, long time) { + return redisTemplate.expire(key, time, TimeUnit.SECONDS); + } + + /** + * 获取当天剩余的秒数 + * + * @return + */ + public static long currentDaySecond() { + return ChronoUnit.SECONDS.between(LocalDateTime.now(), LocalDateTime.of(LocalDate.now(), LocalTime.MAX)); + } + + /** + * 根据key 获取过期时间 + * + * @param key 键 不能为null + * @return 时间(秒) 返回0代表为永久有效 + */ + public long getExpire(String key) { + return redisTemplate.getExpire(key, TimeUnit.SECONDS); + } + + /** + * 判断key是否存在 + * + * @param key 键 + * @return true 存在 false不存在 + */ + public boolean hasKey(String key) { + return redisTemplate.hasKey(key); + } + + /** + * 删除缓存 + * + * @param key 可以传一个值 或多个 + */ + @SuppressWarnings("unchecked") + public void delete(String... key) { + if (key != null && key.length > 0) { + if (key.length == 1) { + redisTemplate.delete(key[0]); + } else { + redisTemplate.delete((Collection) CollectionUtils.arrayToList(key)); + } + } + } + + /** + * 删除缓存 + * + * @param keyList + */ + public void delete(List keyList) { + if (CollectionUtils.isEmpty(keyList)) { + return; + } + redisTemplate.delete(keyList); + } + + //============================String============================= + + /** + * 普通缓存获取 + * + * @param key 键 + * @return 值 + */ + public String get(String key) { + return key == null ? null : redisValueOperations.get(key); + } + + public T getObject(String key, Class clazz) { + Object json = this.get(key); + if (json == null) { + return null; + } + T obj = JSON.parseObject(json.toString(), clazz); + return obj; + } + + + /** + * 普通缓存放入 + */ + public void set(String key, String value) { + redisValueOperations.set(key, value); + } + public void set(Object key, Object value) { + String jsonString = JSON.toJSONString(value); + redisValueOperations.set(key.toString(), jsonString); + } + + /** + * 普通缓存放入 + */ + public void set(String key, String value, long second) { + redisValueOperations.set(key, value, second, TimeUnit.SECONDS); + } + + /** + * 普通缓存放入并设置时间 + */ + public void set(Object key, Object value, long time) { + String jsonString = JSON.toJSONString(value); + if (time > 0) { + redisValueOperations.set(key.toString(), jsonString, time, TimeUnit.SECONDS); + } else { + set(key.toString(), jsonString); + } + } + + //============================ map ============================= + public void mset(String key, String hashKey, Object value) { + redisHashOperations.put(key, hashKey, value); + } + + public Object mget(String key, String hashKey) { + return redisHashOperations.get(key, hashKey); + } + +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/ReloadCommand.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/ReloadCommand.java new file mode 100644 index 00000000..ad039f38 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/ReloadCommand.java @@ -0,0 +1,56 @@ +package net.lab1024.sa.common.module.support.reload; + +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import net.lab1024.sa.common.module.support.reload.dao.ReloadItemDao; +import net.lab1024.sa.common.module.support.reload.dao.ReloadResultDao; +import net.lab1024.sa.common.module.support.reload.core.AbstractSmartReloadCommand; +import net.lab1024.sa.common.module.support.reload.core.domain.SmartReloadItem; +import net.lab1024.sa.common.module.support.reload.core.domain.SmartReloadResult; +import net.lab1024.sa.common.module.support.reload.domain.ReloadItemEntity; +import net.lab1024.sa.common.module.support.reload.domain.ReloadResultEntity; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * reload 操作 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2015-03-02 19:11:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Component +public class ReloadCommand extends AbstractSmartReloadCommand { + + @Autowired + private ReloadItemDao reloadItemDao; + + @Autowired + private ReloadResultDao reloadResultDao; + + /** + * 读取数据库中SmartReload项 + * + * @return List + */ + @Override + public List readReloadItem() { + List reloadItemEntityList = reloadItemDao.selectList(null); + return SmartBeanUtil.copyList(reloadItemEntityList, SmartReloadItem.class); + } + + + /** + * 保存reload结果 + * + * @param smartReloadResult + */ + @Override + public void handleReloadResult(SmartReloadResult smartReloadResult) { + ReloadResultEntity reloadResultEntity = SmartBeanUtil.copy(smartReloadResult, ReloadResultEntity.class); + reloadResultDao.insert(reloadResultEntity); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/ReloadService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/ReloadService.java new file mode 100644 index 00000000..9737f19a --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/ReloadService.java @@ -0,0 +1,68 @@ +package net.lab1024.sa.common.module.support.reload; + +import net.lab1024.sa.common.common.code.UserErrorCode; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.module.support.reload.dao.ReloadItemDao; +import net.lab1024.sa.common.module.support.reload.dao.ReloadResultDao; +import net.lab1024.sa.common.module.support.reload.domain.ReloadForm; +import net.lab1024.sa.common.module.support.reload.domain.ReloadItemEntity; +import net.lab1024.sa.common.module.support.reload.domain.ReloadItemVO; +import net.lab1024.sa.common.module.support.reload.domain.ReloadResultVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * reload (内存热加载、钩子等) + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2015-03-02 19:11:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Service +public class ReloadService { + + @Autowired + private ReloadItemDao reloadItemDao; + + @Autowired + private ReloadResultDao reloadResultDao; + + /** + * 查询 + * + * @return + */ + public ResponseDTO> query() { + List list = reloadItemDao.query(); + return ResponseDTO.ok(list); + } + + public ResponseDTO> queryReloadItemResult(String tag) { + List reloadResultList = reloadResultDao.query(tag); + return ResponseDTO.ok(reloadResultList); + } + + + /** + * 通过标签更新标识符 + * + * @param reloadForm + * @return + */ + public ResponseDTO updateByTag(ReloadForm reloadForm) { + ReloadItemEntity reloadItemEntity = reloadItemDao.selectById(reloadForm.getTag()); + if (null == reloadItemEntity) { + return ResponseDTO.error(UserErrorCode.DATA_NOT_EXIST); + } + reloadItemEntity.setIdentification(reloadForm.getIdentification()); + reloadItemEntity.setUpdateTime(LocalDateTime.now()); + reloadItemEntity.setArgs(reloadForm.getArgs()); + reloadItemDao.updateById(reloadItemEntity); + return ResponseDTO.ok(); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/AbstractSmartReloadCommand.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/AbstractSmartReloadCommand.java new file mode 100644 index 00000000..8479c60f --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/AbstractSmartReloadCommand.java @@ -0,0 +1,96 @@ +package net.lab1024.sa.common.module.support.reload.core; + + +import net.lab1024.sa.common.module.support.reload.core.domain.SmartReloadItem; +import net.lab1024.sa.common.module.support.reload.core.domain.SmartReloadObject; +import net.lab1024.sa.common.module.support.reload.core.domain.SmartReloadResult; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 检测是否 Reload 的类 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2015-03-02 19:11:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public abstract class AbstractSmartReloadCommand { + + /** + * 当前ReloadItem的存储器 + */ + private ConcurrentHashMap tagIdentifierMap = new ConcurrentHashMap<>(); + + private SmartReloadManager smartReloadManager; + + /** + * @return + */ + public void setReloadManager(SmartReloadManager smartReloadManager) { + this.smartReloadManager = smartReloadManager; + } + + public void init() { + List smartReloadItems = this.readReloadItem(); + if (smartReloadItems != null) { + for (SmartReloadItem smartReloadItem : smartReloadItems) { + tagIdentifierMap.put(smartReloadItem.getTag(), smartReloadItem.getIdentification()); + } + } + } + + + /** + * 该方法返回一个List:
+ * ReloadItem对象的tagIdentify为:该tag的 状态(状态其实就是个字符串,如果该字符串跟上次有变化则进行reload操作)
+ * ReloadItem对象的args为: reload操作需要的参数

+ * + * @return List + */ + public abstract List readReloadItem(); + + /** + * 处理Reload结果 + * + * @param smartReloadResult + */ + public abstract void handleReloadResult(SmartReloadResult smartReloadResult); + + + /** + * 获取本地缓存tag标识 + * + * @return + */ + public ConcurrentHashMap getTagIdentifierMap() { + return tagIdentifierMap; + } + + /** + * 设置新的缓存标识 + * + * @param tag + * @param identification + */ + public void putIdentifierMap(String tag, String identification) { + tagIdentifierMap.put(tag, identification); + } + + + /** + * 获取重载对象 + * + * @return + */ + public SmartReloadObject reloadObject(String tag) { + if (this.smartReloadManager == null) { + return null; + } + Map reloadObjectMap = smartReloadManager.reloadObjectMap(); + return reloadObjectMap.get(tag); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/SmartReloadManager.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/SmartReloadManager.java new file mode 100644 index 00000000..a3aad41d --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/SmartReloadManager.java @@ -0,0 +1,97 @@ +package net.lab1024.sa.common.module.support.reload.core; + + +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.module.support.reload.core.annoation.SmartReload; +import net.lab1024.sa.common.module.support.reload.core.domain.SmartReloadObject; +import net.lab1024.sa.common.module.support.reload.core.thread.SmartReloadRunnable; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.util.ReflectionUtils; + +import java.lang.reflect.Method; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * SmartReloadManager 管理器 + *

+ * 可以在此类中添加 检测任务 以及注册 处理程序 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2015-03-02 19:11:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Slf4j +public class SmartReloadManager implements BeanPostProcessor { + + private static final String THREAD_NAME_PREFIX = "smart-admin-reload"; + private static final int THREAD_COUNT = 1; + + private Map reloadObjectMap = new ConcurrentHashMap<>(); + + private ScheduledThreadPoolExecutor threadPoolExecutor; + + public SmartReloadManager(AbstractSmartReloadCommand reloadCommand, int intervalSeconds) { + this.threadPoolExecutor = new ScheduledThreadPoolExecutor(THREAD_COUNT, r -> { + Thread t = new Thread(r, THREAD_NAME_PREFIX); + if (!t.isDaemon()) { + t.setDaemon(true); + } + return t; + }); + this.threadPoolExecutor.scheduleWithFixedDelay(new SmartReloadRunnable(reloadCommand), 10, intervalSeconds, TimeUnit.SECONDS); + reloadCommand.setReloadManager(this); + } + + + @Override + public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { + Method[] methods = ReflectionUtils.getAllDeclaredMethods(bean.getClass()); + if (methods == null) { + return bean; + } + for (Method method : methods) { + SmartReload smartReload = method.getAnnotation(SmartReload.class); + if (smartReload == null) { + continue; + } + int paramCount = method.getParameterCount(); + if (paramCount > 1) { + log.error("<> register tag reload : " + smartReload.value() + " , param count cannot greater than one !"); + continue; + } + String reloadTag = smartReload.value(); + this.register(reloadTag, new SmartReloadObject(bean, method)); + } + return bean; + } + + /** + * 注册reload + * + * @param tag + * @param smartReloadObject + */ + private void register(String tag, SmartReloadObject smartReloadObject) { + if (reloadObjectMap.containsKey(tag)) { + log.error("<> register duplicated tag reload : " + tag + " , and it will be cover!"); + } + reloadObjectMap.put(tag, smartReloadObject); + } + + /** + * 获取重载对象 + * + * @return + */ + public Map reloadObjectMap() { + return this.reloadObjectMap; + } + + +} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/annotation/SmartReload.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/annoation/SmartReload.java similarity index 56% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/annotation/SmartReload.java rename to smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/annoation/SmartReload.java index eac54afd..d22f119f 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/annotation/SmartReload.java +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/annoation/SmartReload.java @@ -1,4 +1,4 @@ -package net.lab1024.smartadmin.common.reload.annotation; +package net.lab1024.sa.common.module.support.reload.core.annoation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; @@ -8,7 +8,11 @@ import java.lang.annotation.Target; /** * 定义 SmartReload 注解 * - * @author zhuoda + * @Author 1024创新实验室-主任: 卓大 + * @Date 2015-03-02 19:11:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/domain/SmartReloadItem.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/domain/SmartReloadItem.java new file mode 100644 index 00000000..3820d9d8 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/domain/SmartReloadItem.java @@ -0,0 +1,32 @@ +package net.lab1024.sa.common.module.support.reload.core.domain; + +import lombok.Data; + +/** + * reload项目 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2015-03-02 19:11:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class SmartReloadItem { + + /** + * 项名称 + */ + private String tag; + + /** + * 参数 + */ + private String args; + + /** + * 标识 + */ + private String identification; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/domain/SmartReloadObject.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/domain/SmartReloadObject.java new file mode 100644 index 00000000..8242a07e --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/domain/SmartReloadObject.java @@ -0,0 +1,32 @@ +package net.lab1024.sa.common.module.support.reload.core.domain; + +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.lang.reflect.Method; + +/** + * Reload 处理程序的实现方法,用于包装以注解 SmartReload 实现的处理类 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2015-03-02 19:11:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +@AllArgsConstructor +public class SmartReloadObject { + + /** + * 方法对应的实例化对象 + */ + private Object reloadObject; + + /** + * 重新加载执行的方法 + */ + private Method method; + + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/domain/SmartReloadResult.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/domain/SmartReloadResult.java new file mode 100644 index 00000000..58278a78 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/domain/SmartReloadResult.java @@ -0,0 +1,43 @@ +package net.lab1024.sa.common.module.support.reload.core.domain; + +import lombok.Data; + +/** + * t_reload_result 表 实体类 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2015-03-02 19:11:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class SmartReloadResult { + + /** + * 项名称 + */ + private String tag; + + /** + * 参数 + */ + private String args; + + /** + * 标识 + */ + private String identification; + + /** + * 处理结果 + */ + private boolean result; + + /** + * 异常说明 + */ + private String exception; + + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/thread/SmartReloadRunnable.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/thread/SmartReloadRunnable.java new file mode 100644 index 00000000..f9da0305 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/thread/SmartReloadRunnable.java @@ -0,0 +1,114 @@ +package net.lab1024.sa.common.module.support.reload.core.thread; + +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.module.support.reload.core.AbstractSmartReloadCommand; +import net.lab1024.sa.common.module.support.reload.core.domain.SmartReloadItem; +import net.lab1024.sa.common.module.support.reload.core.domain.SmartReloadObject; +import net.lab1024.sa.common.module.support.reload.core.domain.SmartReloadResult; + +import java.io.PrintWriter; +import java.io.StringWriter; +import java.lang.reflect.Method; +import java.util.List; +import java.util.concurrent.ConcurrentHashMap; + +/** + * reload 线程 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2015-03-02 19:11:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Slf4j +public class SmartReloadRunnable implements Runnable { + + private AbstractSmartReloadCommand abstractSmartReloadCommand; + + private boolean isInit = false; + + public SmartReloadRunnable(AbstractSmartReloadCommand abstractSmartReloadCommand) { + this.abstractSmartReloadCommand = abstractSmartReloadCommand; + } + + @Override + public void run() { + try { + this.doTask(); + } catch (Throwable e) { + log.error("", e); + } + } + + /** + * 检测Identifier变化,执行reload + */ + private void doTask() { + if (!isInit) { + this.abstractSmartReloadCommand.init(); + isInit = true; + return; + } + + List smartReloadItemList = this.abstractSmartReloadCommand.readReloadItem(); + ConcurrentHashMap tagIdentifierMap = this.abstractSmartReloadCommand.getTagIdentifierMap(); + for (SmartReloadItem smartReloadItem : smartReloadItemList) { + String tag = smartReloadItem.getTag(); + String tagIdentifier = smartReloadItem.getIdentification(); + String preTagChangeIdentifier = tagIdentifierMap.get(tag); + // 数据不一致 + if (preTagChangeIdentifier == null || !preTagChangeIdentifier.equals(tagIdentifier)) { + this.abstractSmartReloadCommand.putIdentifierMap(tag, tagIdentifier); + // 执行重新加载此项的动作 + SmartReloadResult smartReloadResult = this.doReload(smartReloadItem); + this.abstractSmartReloadCommand.handleReloadResult(smartReloadResult); + } + } + } + + /** + * 方法调用 + * + * @param smartReloadItem + * @return + */ + private SmartReloadResult doReload(SmartReloadItem smartReloadItem) { + SmartReloadResult result = new SmartReloadResult(); + SmartReloadObject smartReloadObject = this.abstractSmartReloadCommand.reloadObject(smartReloadItem.getTag()); + try { + Method method = smartReloadObject.getMethod(); + if (method == null) { + result.setResult(false); + result.setException("reload方法不存在"); + return result; + } + + result.setTag(smartReloadItem.getTag()); + result.setArgs(smartReloadItem.getArgs()); + result.setIdentification(smartReloadItem.getIdentification()); + result.setResult(true); + int paramCount = method.getParameterCount(); + if (paramCount > 1) { + result.setResult(false); + result.setException("reload方法" + method.getName() + "参数太多"); + return result; + } + + if (paramCount == 0) { + method.invoke(smartReloadObject.getReloadObject()); + } else { + method.invoke(smartReloadObject.getReloadObject(), smartReloadItem.getArgs()); + } + } catch (Throwable throwable) { + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + throwable.printStackTrace(pw); + + result.setResult(false); + result.setException(throwable.toString()); + } + return result; + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/dao/ReloadItemDao.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/dao/ReloadItemDao.java new file mode 100644 index 00000000..d063ba5d --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/dao/ReloadItemDao.java @@ -0,0 +1,25 @@ +package net.lab1024.sa.common.module.support.reload.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import net.lab1024.sa.common.module.support.reload.domain.ReloadItemEntity; +import net.lab1024.sa.common.module.support.reload.domain.ReloadItemVO; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * t_reload_item 数据表dao + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2015-03-02 19:11:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Component +@Mapper +public interface ReloadItemDao extends BaseMapper { + + List query(); +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/dao/ReloadResultDao.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/dao/ReloadResultDao.java new file mode 100644 index 00000000..298100a7 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/dao/ReloadResultDao.java @@ -0,0 +1,26 @@ +package net.lab1024.sa.common.module.support.reload.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import net.lab1024.sa.common.module.support.reload.domain.ReloadResultEntity; +import net.lab1024.sa.common.module.support.reload.domain.ReloadResultVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * t_reload_result 数据表dao + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2015-03-02 19:11:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Component +@Mapper +public interface ReloadResultDao extends BaseMapper { + + List query(@Param("tag") String tag); +} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/dto/ReloadItemUpdateDTO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadForm.java similarity index 53% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/dto/ReloadItemUpdateDTO.java rename to smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadForm.java index 20ad98f5..45913124 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/dto/ReloadItemUpdateDTO.java +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadForm.java @@ -1,20 +1,21 @@ -package net.lab1024.smartadmin.module.support.smartreload.domain.dto; +package net.lab1024.sa.common.module.support.reload.domain; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotBlank; + /** + * reload (内存热加载、钩子等) * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 + * @Author 1024创新实验室-主任: 卓大 + * @Date 2015-03-02 19:11:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ @Data -public class ReloadItemUpdateDTO { +public class ReloadForm { @ApiModelProperty("标签") @NotBlank(message = "标签不能为空") @@ -24,6 +25,7 @@ public class ReloadItemUpdateDTO { @NotBlank(message = "状态标识不能为空") private String identification; - @ApiModelProperty("reload时传入的参数,可以为空") + @ApiModelProperty("参数") private String args; + } diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/entity/ReloadItemEntity.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadItemEntity.java similarity index 62% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/entity/ReloadItemEntity.java rename to smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadItemEntity.java index cbd264c1..54b01131 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/entity/ReloadItemEntity.java +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadItemEntity.java @@ -1,16 +1,20 @@ -package net.lab1024.smartadmin.module.support.smartreload.domain.entity; +package net.lab1024.sa.common.module.support.reload.domain; + import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; -import java.util.Date; +import java.time.LocalDateTime; /** * t_reload_item 数据表 实体类 * - * @author listen - * @date 2018/02/10 09:29 + * @Author 1024创新实验室-主任: 卓大 + * @Date 2015-03-02 19:11:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ @Data @TableName("t_reload_item") @@ -35,12 +39,12 @@ public class ReloadItemEntity { /** * 更新时间 */ - private Date updateTime; + private LocalDateTime updateTime; /** * 创建时间 */ - private Date createTime; + private LocalDateTime createTime; } diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadItemVO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadItemVO.java new file mode 100644 index 00000000..b21b8e69 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadItemVO.java @@ -0,0 +1,36 @@ +package net.lab1024.sa.common.module.support.reload.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * reload (内存热加载、钩子等) + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2015-03-02 19:11:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class ReloadItemVO { + + @ApiModelProperty("加载项标签") + private String tag; + + @ApiModelProperty("参数") + private String args; + + @ApiModelProperty("运行标识") + private String identification; + + @ApiModelProperty("更新时间") + private LocalDateTime updateTime; + + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + + +} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/entity/ReloadResultEntity.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadResultEntity.java similarity index 62% rename from smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/entity/ReloadResultEntity.java rename to smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadResultEntity.java index bb79c21e..004156d8 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/entity/ReloadResultEntity.java +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadResultEntity.java @@ -1,14 +1,19 @@ -package net.lab1024.smartadmin.module.support.smartreload.domain.entity; +package net.lab1024.sa.common.module.support.reload.domain; + import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; -import java.util.Date; +import java.time.LocalDateTime; /** + * reload结果
* t_reload_result 数据表 实体类 * - * @author listen - * @date 2018/02/10 09:29 + * @Author 1024创新实验室-主任: 卓大 + * @Date 2015-03-02 19:11:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) */ @Data @TableName("t_reload_result") @@ -42,7 +47,7 @@ public class ReloadResultEntity { /** * 创建时间 */ - private Date createTime; + private LocalDateTime createTime; } diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadResultVO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadResultVO.java new file mode 100644 index 00000000..d7d68836 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadResultVO.java @@ -0,0 +1,34 @@ +package net.lab1024.sa.common.module.support.reload.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * reload结果 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2015-03-02 19:11:52 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class ReloadResultVO { + + @ApiModelProperty("加载项标签") + private String tag; + + @ApiModelProperty("参数") + private String args; + + @ApiModelProperty("运行结果") + private Boolean result; + + @ApiModelProperty("异常") + private String exception; + + @ApiModelProperty("创建时间") + private LocalDateTime createTime; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/RepeatSubmitAspect.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/RepeatSubmitAspect.java new file mode 100644 index 00000000..1bf8cae0 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/RepeatSubmitAspect.java @@ -0,0 +1,82 @@ +package net.lab1024.sa.common.module.support.repeatsubmit; + +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.common.code.UserErrorCode; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.module.support.repeatsubmit.annoation.RepeatSubmit; +import net.lab1024.sa.common.module.support.repeatsubmit.ticket.AbstractRepeatSubmitTicket; +import org.apache.commons.lang3.StringUtils; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import java.lang.reflect.Method; + +/** + * 重复提交 aop切口 + * + * @Author 1024创新实验室: 胡克 + * @Date 2020-11-25 20:56:58 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Aspect +@Slf4j +public class RepeatSubmitAspect { + + private AbstractRepeatSubmitTicket repeatSubmitTicket; + + /** + * 获取凭证信息 + * rep + * + * @param repeatSubmitTicket + */ + public RepeatSubmitAspect(AbstractRepeatSubmitTicket repeatSubmitTicket) { + this.repeatSubmitTicket = repeatSubmitTicket; + } + + /** + * 定义切入点 + * + * @param point + * @return + * @throws Throwable + */ + @Around("@annotation(net.lab1024.sa.common.module.support.repeatsubmit.annoation.RepeatSubmit)") + public Object around(ProceedingJoinPoint point) throws Throwable { + + ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + String ticketToken = attributes.getRequest().getServletPath(); + String ticket = this.repeatSubmitTicket.getTicket(ticketToken); + if (StringUtils.isEmpty(ticket)) { + return point.proceed(); + } + Long timeStamp = this.repeatSubmitTicket.getTicketTimestamp(ticket); + if (timeStamp != null) { + Method method = ((MethodSignature) point.getSignature()).getMethod(); + RepeatSubmit annotation = method.getAnnotation(RepeatSubmit.class); + int interval = Math.min(annotation.value(), RepeatSubmit.MAX_INTERVAL); + if (System.currentTimeMillis() < timeStamp + interval) { + // 提交频繁 + return ResponseDTO.error(UserErrorCode.REPEAT_SUBMIT); + } + } + Object obj = null; + try { + obj = point.proceed(); + this.repeatSubmitTicket.putTicket(ticket); + } catch (Throwable throwable) { + log.error("", throwable); + throw throwable; + } finally { + this.repeatSubmitTicket.removeTicket(ticket); + } + return obj; + } + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/annoation/RepeatSubmit.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/annoation/RepeatSubmit.java new file mode 100644 index 00000000..aed05382 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/annoation/RepeatSubmit.java @@ -0,0 +1,33 @@ +package net.lab1024.sa.common.module.support.repeatsubmit.annoation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 标记 需要防止重复提交 的注解
+ * 单位:毫秒 + * + * @Author 1024创新实验室: 胡克 + * @Date 2020-11-25 20:56:58 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +public @interface RepeatSubmit { + + /** + * 重复提交间隔时间/毫秒 + * + * @return + */ + int value() default 300; + + /** + * 最长间隔30s + */ + int MAX_INTERVAL = 30000; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/ticket/AbstractRepeatSubmitTicket.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/ticket/AbstractRepeatSubmitTicket.java new file mode 100644 index 00000000..fd6d7758 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/ticket/AbstractRepeatSubmitTicket.java @@ -0,0 +1,56 @@ +package net.lab1024.sa.common.module.support.repeatsubmit.ticket; + +import java.util.function.Function; + +/** + * 凭证(用于校验重复提交的东西) + * + * @Author 1024创新实验室: 罗伊 + * @Date 2020-11-25 20:56:58 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public abstract class AbstractRepeatSubmitTicket { + + private Function ticketFunction; + + + public AbstractRepeatSubmitTicket(Function ticketFunction) { + this.ticketFunction = ticketFunction; + } + + + /** + * 获取凭证 + * + * @param ticketToken + * @return + */ + public String getTicket(String ticketToken) { + return this.ticketFunction.apply(ticketToken); + } + + /** + * 获取凭证 时间戳 + * + * @param ticket + * @return + */ + public abstract Long getTicketTimestamp(String ticket); + + + /** + * 设置本次请求时间 + * + * @param ticket + */ + public abstract void putTicket(String ticket); + + /** + * 移除凭证 + * + * @param ticket + */ + public abstract void removeTicket(String ticket); +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/ticket/RepeatSubmitCaffeineTicket.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/ticket/RepeatSubmitCaffeineTicket.java new file mode 100644 index 00000000..be6f7960 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/ticket/RepeatSubmitCaffeineTicket.java @@ -0,0 +1,50 @@ +package net.lab1024.sa.common.module.support.repeatsubmit.ticket; + +import com.github.benmanes.caffeine.cache.Cache; +import com.github.benmanes.caffeine.cache.Caffeine; +import net.lab1024.sa.common.module.support.repeatsubmit.annoation.RepeatSubmit; + +import java.util.concurrent.TimeUnit; +import java.util.function.Function; + +/** + * 凭证(内存实现) + * + * @Author 1024创新实验室: 罗伊 + * @Date 2020-11-25 20:56:58 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public class RepeatSubmitCaffeineTicket extends AbstractRepeatSubmitTicket { + + /** + * 限制缓存最大数量 超过后先放入的会自动移除 + * 默认缓存时间 + * 初始大小为:100万 + */ + private static Cache cache = Caffeine.newBuilder() + .maximumSize(100 * 10000) + .expireAfterWrite(RepeatSubmit.MAX_INTERVAL, TimeUnit.MILLISECONDS).build(); + + + public RepeatSubmitCaffeineTicket(Function ticketFunction) { + super(ticketFunction); + } + + @Override + public Long getTicketTimestamp(String ticket) { + return cache.getIfPresent(ticket); + } + + + @Override + public void putTicket(String ticket) { + cache.put(ticket, System.currentTimeMillis()); + } + + @Override + public void removeTicket(String ticket) { + cache.invalidate(ticket); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/ticket/RepeatSubmitRedisTicket.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/ticket/RepeatSubmitRedisTicket.java new file mode 100644 index 00000000..806b7324 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/ticket/RepeatSubmitRedisTicket.java @@ -0,0 +1,48 @@ +package net.lab1024.sa.common.module.support.repeatsubmit.ticket; + +import net.lab1024.sa.common.module.support.repeatsubmit.annoation.RepeatSubmit; +import org.springframework.data.redis.core.ValueOperations; + +import java.util.concurrent.TimeUnit; +import java.util.function.Function; + +/** + * 凭证(redis实现) + * + * @Author 1024创新实验室: 罗伊 + * @Date 2020-11-25 20:56:58 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public class RepeatSubmitRedisTicket extends AbstractRepeatSubmitTicket { + + private ValueOperations redisValueOperations; + + public RepeatSubmitRedisTicket(ValueOperations redisValueOperations, + Function ticketFunction) { + super(ticketFunction); + this.redisValueOperations = redisValueOperations; + } + + @Override + public Long getTicketTimestamp(String ticket) { + Long timeStamp = System.currentTimeMillis(); + boolean setFlag = redisValueOperations.setIfAbsent(ticket, String.valueOf(timeStamp), RepeatSubmit.MAX_INTERVAL, TimeUnit.MILLISECONDS); + if (!setFlag) { + timeStamp = Long.valueOf(redisValueOperations.get(ticket)); + } + return timeStamp; + } + + @Override + public void putTicket(String ticket) { + redisValueOperations.getOperations().delete(ticket); + this.getTicketTimestamp(ticket); + } + + @Override + public void removeTicket(String ticket) { + redisValueOperations.getOperations().delete(ticket); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/constant/SerialNumberIdEnum.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/constant/SerialNumberIdEnum.java new file mode 100644 index 00000000..72eb8586 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/constant/SerialNumberIdEnum.java @@ -0,0 +1,42 @@ +package net.lab1024.sa.common.module.support.serialnumber.constant; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import net.lab1024.sa.common.common.enumeration.BaseEnum; + +/** + * 单据序列号 枚举 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-03-25 21:46:07 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@AllArgsConstructor +@Getter +public enum SerialNumberIdEnum implements BaseEnum { + + ORDER(1, "订单id"), + + CONTRACT(2, "合同id"), + + ; + + private final Integer serialNumberId; + + private final String desc; + + @Override + public Integer getValue() { + return serialNumberId; + } + + @Override + public String toString() { + return "SerialNumberIdEnum{" + + "serialNumberId=" + serialNumberId + + ", desc='" + desc + '\'' + + '}'; + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/constant/SerialNumberRuleTypeEnum.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/constant/SerialNumberRuleTypeEnum.java new file mode 100644 index 00000000..5fc08557 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/constant/SerialNumberRuleTypeEnum.java @@ -0,0 +1,44 @@ +package net.lab1024.sa.common.module.support.serialnumber.constant; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import net.lab1024.sa.common.common.constant.StringConst; +import net.lab1024.sa.common.common.enumeration.BaseEnum; + +/** + * 单据序列号 周期 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-03-25 21:46:07 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@AllArgsConstructor +@Getter +public enum SerialNumberRuleTypeEnum implements BaseEnum { + /** + * 没有周期 + */ + NONE(StringConst.EMPTY, "", "没有周期"), + /** + * 年周期 + */ + YEAR("[yyyy]", "\\[yyyy\\]", "年"), + /** + * 月周期 + */ + MONTH("[mm]", "\\[mm\\]", "年月"), + /** + * 日周期 + */ + DAY("[dd]", "\\[dd\\]", "年月日"); + + private final String value; + + private final String regex; + + private final String desc; + + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/dao/SerialNumberDao.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/dao/SerialNumberDao.java new file mode 100644 index 00000000..50d32b64 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/dao/SerialNumberDao.java @@ -0,0 +1,41 @@ +package net.lab1024.sa.common.module.support.serialnumber.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import net.lab1024.sa.common.module.support.serialnumber.domain.SerialNumberEntity; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +/** + * 单据序列号 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-03-25 21:46:07 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Mapper +@Component +public interface SerialNumberDao extends BaseMapper { + + /** + * 排他锁查询 + * + * @param serialNumberId + * @return + */ + SerialNumberEntity selectForUpdate(@Param("serialNumberId") Integer serialNumberId); + + /** + * 更新上一次的 数值和时间 + * + * @param serialNumberId + * @param lastNumber + * @param lastTime + */ + void updateLastNumberAndTime(@Param("serialNumberId") Integer serialNumberId, @Param("lastNumber") Long lastNumber, @Param("lastTime") LocalDateTime lastTime); + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/dao/SerialNumberRecordDao.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/dao/SerialNumberRecordDao.java new file mode 100644 index 00000000..7d66a469 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/dao/SerialNumberRecordDao.java @@ -0,0 +1,55 @@ +package net.lab1024.sa.common.module.support.serialnumber.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.lab1024.sa.common.module.support.serialnumber.domain.SerialNumberRecordEntity; +import net.lab1024.sa.common.module.support.serialnumber.domain.SerialNumberRecordQueryForm; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +import java.time.LocalDate; +import java.util.List; + +/** + * 单据序列号 生成的记录 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-03-25 21:46:07 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Mapper +@Component +public interface SerialNumberRecordDao extends BaseMapper { + + /** + * 根据 id和日期 查询 记录id + * + * @param serialNumberId + * @param recordDate + * @return + */ + Long selectRecordIdBySerialNumberIdAndDate(@Param("serialNumberId") Integer serialNumberId, @Param("recordDate") String recordDate); + + /** + * 更新记录 + * + * @param serialNumberId + * @param recordDate + * @param lastNumber + * @param count + * @return + */ + Long updateRecord(@Param("serialNumberId") Integer serialNumberId, @Param("recordDate") LocalDate recordDate, @Param("lastNumber") Long lastNumber, @Param("count") int count); + + /** + * 分页查询记录 + * + * @param page + * @param queryForm + * @return + */ + List query(Page page, @Param("queryForm") SerialNumberRecordQueryForm queryForm); +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberEntity.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberEntity.java new file mode 100644 index 00000000..79b589f1 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberEntity.java @@ -0,0 +1,79 @@ +package net.lab1024.sa.common.module.support.serialnumber.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import net.lab1024.sa.common.module.support.serialnumber.constant.SerialNumberIdEnum; +import net.lab1024.sa.common.module.support.serialnumber.constant.SerialNumberRuleTypeEnum; + +import java.time.LocalDateTime; + +/** + * 单据序列号 定义表 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-03-25 21:46:07 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +@TableName("t_serial_number") +public class SerialNumberEntity { + + /** + * 主键id + * + * @see SerialNumberIdEnum + */ + @TableId(type = IdType.INPUT) + private Integer serialNumberId; + + /** + * 业务 + */ + private String businessName; + + /** + * 格式 + */ + private String format; + + /** + * 生成规则 + * + * @see SerialNumberRuleTypeEnum + */ + private String ruleType; + + + /** + * 初始值 + */ + private Long initNumber; + + /** + * 步长随机数范围 + */ + private Integer stepRandomRange; + + /** + * 备注 + */ + private String remark; + + /** + * 上次产生的单号, 默认为空 + */ + private Long lastNumber; + + /** + * 上次产生的单号时间 + */ + private LocalDateTime lastTime; + + private LocalDateTime updateTime; + + private LocalDateTime createTime; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberGenerateForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberGenerateForm.java new file mode 100644 index 00000000..30e0b777 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberGenerateForm.java @@ -0,0 +1,28 @@ +package net.lab1024.sa.common.module.support.serialnumber.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * 单据序列号 生成表单 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-03-25 21:46:07 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class SerialNumberGenerateForm { + + @ApiModelProperty("单号id") + @NotNull(message = "单号id不能为空") + private Integer serialNumberId; + + @ApiModelProperty("生成的数量") + @NotNull(message = "生成的数量") + private Integer count; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberGenerateResultBO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberGenerateResultBO.java new file mode 100644 index 00000000..f4dfe3ae --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberGenerateResultBO.java @@ -0,0 +1,52 @@ +package net.lab1024.sa.common.module.support.serialnumber.domain; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * 单据序列号 生成结果 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-03-25 21:46:07 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class SerialNumberGenerateResultBO { + + /** + * 序号id + */ + private Integer serialNumberId; + + /** + * 是否重置的初始值 + */ + private Boolean isReset; + + /** + * 上次生成的数字 + */ + private Long lastNumber; + + /** + * 上次生成的时间 + */ + private LocalDateTime lastTime; + + /** + * 生成的 number 集合 + */ + private List numberList; + + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberInfoBO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberInfoBO.java new file mode 100644 index 00000000..89fae4e6 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberInfoBO.java @@ -0,0 +1,97 @@ +package net.lab1024.sa.common.module.support.serialnumber.domain; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import net.lab1024.sa.common.module.support.serialnumber.constant.SerialNumberIdEnum; +import net.lab1024.sa.common.module.support.serialnumber.constant.SerialNumberRuleTypeEnum; + +/** + * 单据序列号 信息 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-03-25 21:46:07 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ + +@Getter +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class SerialNumberInfoBO { + + /** + * 主键id + * + * @see SerialNumberIdEnum + */ + private Integer serialNumberId; + + /** + * 业务 + */ + private String businessName; + + /** + * 格式 + */ + private String format; + + /** + * 生成规则 + * + * @see SerialNumberRuleTypeEnum + */ + private String ruleType; + + + /** + * 初始值 + */ + private Long initNumber; + + /** + * 步长随机数范围 + */ + private Integer stepRandomRange; + + /** + * 备注 + */ + private String remark; + + /** + * 规则枚举 + */ + private SerialNumberRuleTypeEnum serialNumberRuleTypeEnum; + + + /** + * 存在[nnnnnn]中 n 的数量 + */ + private Integer numberCount; + + /** + * [nnnnnn] 的格式(主要用于替换) + */ + private String numberFormat; + + /** + * 是否存在年份 + */ + private Boolean haveYearFlag; + + /** + * 是否存在月份 + */ + private Boolean haveMonthFlag; + + /** + * 是否存在 月 + */ + private Boolean haveDayFlag; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberLastGenerateBO.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberLastGenerateBO.java new file mode 100644 index 00000000..5ccf4e75 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberLastGenerateBO.java @@ -0,0 +1,41 @@ +package net.lab1024.sa.common.module.support.serialnumber.domain; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * 上次生成信息 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-03-25 21:46:07 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class SerialNumberLastGenerateBO { + + /** + * 序号id + */ + private Integer serialNumberId; + + /** + * 上次生成的数字 + */ + private Long lastNumber; + + /** + * 上次生成的时间 + */ + private LocalDateTime lastTime; + + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberRecordEntity.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberRecordEntity.java new file mode 100644 index 00000000..a32982e4 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberRecordEntity.java @@ -0,0 +1,57 @@ +package net.lab1024.sa.common.module.support.serialnumber.domain; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * 单据序列号 表结构 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-03-25 21:46:07 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@TableName("t_serial_number_record") +public class SerialNumberRecordEntity { + + /** + * 单号id + */ + private Integer serialNumberId; + + /** + * 记录日期 + */ + private LocalDate recordDate; + + /** + * 最后更新值 + */ + private Long lastNumber; + + /** + * 上次生成时间 + */ + private LocalDateTime lastTime; + + /** + * 数量 + */ + private Long count; + + private LocalDateTime updateTime; + + private LocalDateTime createTime; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberRecordQueryForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberRecordQueryForm.java new file mode 100644 index 00000000..7fe36829 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberRecordQueryForm.java @@ -0,0 +1,24 @@ +package net.lab1024.sa.common.module.support.serialnumber.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import net.lab1024.sa.common.common.domain.PageParam; + +import javax.validation.constraints.NotNull; + +/** + * 单据序列号 生成记录 查询 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-03-25 21:46:07 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class SerialNumberRecordQueryForm extends PageParam { + + @ApiModelProperty("单号id") + @NotNull(message = "单号id不能为空") + private Integer serialNumberId; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/SerialNumberBaseService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/SerialNumberBaseService.java new file mode 100644 index 00000000..1a85af11 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/SerialNumberBaseService.java @@ -0,0 +1,252 @@ +package net.lab1024.sa.common.module.support.serialnumber.service; + +import com.google.common.collect.Lists; +import net.lab1024.sa.common.common.exception.BusinessException; +import net.lab1024.sa.common.common.util.SmartEnumUtil; +import net.lab1024.sa.common.module.support.serialnumber.constant.SerialNumberIdEnum; +import net.lab1024.sa.common.module.support.serialnumber.constant.SerialNumberRuleTypeEnum; +import net.lab1024.sa.common.module.support.serialnumber.dao.SerialNumberDao; +import net.lab1024.sa.common.module.support.serialnumber.dao.SerialNumberRecordDao; +import net.lab1024.sa.common.module.support.serialnumber.domain.*; +import org.apache.commons.lang3.RandomUtils; +import org.springframework.beans.factory.annotation.Autowired; + +import javax.annotation.PostConstruct; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 单据序列号 基类 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-03-25 21:46:07 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public abstract class SerialNumberBaseService implements SerialNumberService { + + @Autowired + protected SerialNumberRecordDao serialNumberRecordDao; + + @Autowired + protected SerialNumberDao serialNumberDao; + + private ConcurrentHashMap serialNumberMap = new ConcurrentHashMap<>(); + + public abstract List generateSerialNumberList(SerialNumberInfoBO serialNumber, int count); + + @PostConstruct + void init() { + List serialNumberEntityList = serialNumberDao.selectList(null); + if (serialNumberEntityList == null) { + return; + } + for (SerialNumberEntity serialNumberEntity : serialNumberEntityList) { + SerialNumberRuleTypeEnum ruleTypeEnum = SmartEnumUtil.getEnumByName(serialNumberEntity.getRuleType().toUpperCase(), SerialNumberRuleTypeEnum.class); + if (ruleTypeEnum == null) { + throw new ExceptionInInitializerError("cannot find rule type , id : " + serialNumberEntity.getSerialNumberId()); + } + + String format = serialNumberEntity.getFormat(); + int startIndex = format.indexOf("[n"); + int endIndex = format.indexOf("n]"); + if (startIndex == -1 || endIndex == -1 || endIndex <= startIndex) { + throw new ExceptionInInitializerError("[nnn] 配置错误,请仔细查看 id : " + serialNumberEntity.getSerialNumberId()); + } + + String numberFormat = format.substring(startIndex + 1, endIndex + 1); + + if (serialNumberEntity.getStepRandomRange() < 1) { + throw new ExceptionInInitializerError("random step range must greater than 1 " + serialNumberEntity.getSerialNumberId()); + } + + SerialNumberInfoBO serialNumberInfoBO = SerialNumberInfoBO.builder() + .serialNumberId(serialNumberEntity.getSerialNumberId()) + .serialNumberRuleTypeEnum(ruleTypeEnum) + .initNumber(serialNumberEntity.getInitNumber()) + .format(serialNumberEntity.getFormat()) + .stepRandomRange(serialNumberEntity.getStepRandomRange()) + .haveDayFlag(format.contains(SerialNumberRuleTypeEnum.DAY.getValue())) + .haveMonthFlag(format.contains(SerialNumberRuleTypeEnum.MONTH.getValue())) + .haveYearFlag(format.contains(SerialNumberRuleTypeEnum.YEAR.getValue())) + .numberCount(endIndex - startIndex) + .numberFormat("\\[" + numberFormat + "\\]") + .build(); + + this.serialNumberMap.put(serialNumberEntity.getSerialNumberId(), serialNumberInfoBO); + } + + //初始化数据 + initLastGenerateData(serialNumberEntityList); + } + + /** + * 初始化上次生成的数据 + * + * @param serialNumberEntityList + */ + public abstract void initLastGenerateData(List serialNumberEntityList); + + @Override + public String generate(SerialNumberIdEnum serialNumberIdEnum) { + List generateList = this.generate(serialNumberIdEnum, 1); + if (generateList == null || generateList.isEmpty()) { + throw new BusinessException("cannot generate : " + serialNumberIdEnum.toString()); + } + return generateList.get(0); + } + + @Override + public List generate(SerialNumberIdEnum serialNumberIdEnum, int count) { + SerialNumberInfoBO serialNumberInfoBO = serialNumberMap.get(serialNumberIdEnum.getSerialNumberId()); + if (serialNumberInfoBO == null) { + throw new BusinessException("cannot found SerialNumberId : " + serialNumberIdEnum.toString()); + } + return this.generateSerialNumberList(serialNumberInfoBO, count); + } + + /** + * 循环生成 number 集合 + * + * @param lastGenerate + * @param serialNumberInfo + * @param count + * @return + */ + protected SerialNumberGenerateResultBO loopNumberList(SerialNumberLastGenerateBO lastGenerate, SerialNumberInfoBO serialNumberInfo, int count) { + Long lastNumber = lastGenerate.getLastNumber(); + boolean isReset = false; + if (isResetInitNumber(lastGenerate, serialNumberInfo)) { + lastNumber = serialNumberInfo.getInitNumber(); + isReset = true; + } + + ArrayList numberList = Lists.newArrayListWithCapacity(count); + for (int i = 0; i < count; i++) { + Integer stepRandomRange = serialNumberInfo.getStepRandomRange(); + if (stepRandomRange > 1) { + lastNumber = lastNumber + RandomUtils.nextInt(1, stepRandomRange + 1); + } else { + lastNumber = lastNumber + 1; + } + + numberList.add(lastNumber); + } + + return SerialNumberGenerateResultBO + .builder() + .serialNumberId(serialNumberInfo.getSerialNumberId()) + .lastNumber(lastNumber) + .lastTime(LocalDateTime.now()) + .numberList(numberList) + .isReset(isReset) + .build(); + } + + protected void saveRecord(SerialNumberGenerateResultBO resultBO) { + Long effectRows = serialNumberRecordDao.updateRecord(resultBO.getSerialNumberId(), + resultBO.getLastTime().toLocalDate(), + resultBO.getLastNumber(), + resultBO.getNumberList().size() + ); + + // 需要插入 + if (effectRows == null || effectRows == 0) { + SerialNumberRecordEntity recordEntity = SerialNumberRecordEntity.builder() + .serialNumberId(resultBO.getSerialNumberId()) + .recordDate(LocalDate.now()) + .lastTime(resultBO.getLastTime()) + .lastNumber(resultBO.getLastNumber()) + .count((long) resultBO.getNumberList().size()) + .build(); + serialNumberRecordDao.insert(recordEntity); + } + + } + + /** + * 若不在规则周期内,重制初始值 + * + * @return + */ + private boolean isResetInitNumber(SerialNumberLastGenerateBO lastGenerate, SerialNumberInfoBO serialNumberInfo) { + LocalDateTime lastTime = lastGenerate.getLastTime(); + if (lastTime == null) { + return true; + } + + SerialNumberRuleTypeEnum serialNumberRuleTypeEnum = serialNumberInfo.getSerialNumberRuleTypeEnum(); + int lastTimeYear = lastTime.getYear(); + int lastTimeMonth = lastTime.getMonthValue(); + int lastTimeDay = lastTime.getDayOfYear(); + + LocalDateTime now = LocalDateTime.now(); + + switch (serialNumberRuleTypeEnum) { + case YEAR: + return lastTimeYear != now.getYear(); + case MONTH: + return lastTimeYear != now.getYear() || lastTimeMonth != now.getMonthValue(); + case DAY: + return lastTimeYear != now.getYear() || lastTimeDay != now.getDayOfYear(); + default: + return false; + } + } + + /** + * 替换特殊rule,即替换[yyyy][mm][dd][nnn]等规则 + */ + protected List formatNumberList(SerialNumberGenerateResultBO generteResult, SerialNumberInfoBO serialNumberInfo) { + + /** + * 第一步:替换年、月、日 + */ + LocalDate lastTime = generteResult.getLastTime().toLocalDate(); + String year = String.valueOf(lastTime.getYear()); + String month = lastTime.getMonthValue() > 9 ? String.valueOf(lastTime.getMonthValue()) : "0" + lastTime.getMonthValue(); + String day = lastTime.getDayOfMonth() > 9 ? String.valueOf(lastTime.getDayOfMonth()) : "0" + lastTime.getDayOfMonth(); + + // 把年月日替换 + String format = serialNumberInfo.getFormat(); + + if (serialNumberInfo.getHaveYearFlag()) { + format = format.replaceAll(SerialNumberRuleTypeEnum.YEAR.getRegex(), year); + } + if (serialNumberInfo.getHaveMonthFlag()) { + format = format.replaceAll(SerialNumberRuleTypeEnum.MONTH.getRegex(), month); + } + if (serialNumberInfo.getHaveDayFlag()) { + format = format.replaceAll(SerialNumberRuleTypeEnum.DAY.getRegex(), day); + } + + + /** + * 第二步:替换数字 + */ + + List numberList = Lists.newArrayListWithCapacity(generteResult.getNumberList().size()); + for (Long number : generteResult.getNumberList()) { + StringBuilder numberStringBuilder = new StringBuilder(); + int currentNumberCount = String.valueOf(number).length(); + //数量不够,前面补0 + if (serialNumberInfo.getNumberCount() > currentNumberCount) { + int remain = serialNumberInfo.getNumberCount() - currentNumberCount; + for (int i = 0; i < remain; i++) { + numberStringBuilder.append(0); + } + } + numberStringBuilder.append(number); + //最终替换 + String finalNumber = format.replaceAll(serialNumberInfo.getNumberFormat(), numberStringBuilder.toString()); + numberList.add(finalNumber); + } + return numberList; + } + + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/SerialNumberRecordService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/SerialNumberRecordService.java new file mode 100644 index 00000000..664e24fa --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/SerialNumberRecordService.java @@ -0,0 +1,39 @@ +package net.lab1024.sa.common.module.support.serialnumber.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.lab1024.sa.common.common.domain.PageResult; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartPageUtil; +import net.lab1024.sa.common.module.support.operatelog.domain.OperateLogEntity; +import net.lab1024.sa.common.module.support.operatelog.domain.OperateLogVO; +import net.lab1024.sa.common.module.support.serialnumber.constant.SerialNumberIdEnum; +import net.lab1024.sa.common.module.support.serialnumber.dao.SerialNumberDao; +import net.lab1024.sa.common.module.support.serialnumber.dao.SerialNumberRecordDao; +import net.lab1024.sa.common.module.support.serialnumber.domain.SerialNumberRecordEntity; +import net.lab1024.sa.common.module.support.serialnumber.domain.SerialNumberRecordQueryForm; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 单据序列号 记录 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-03-25 21:46:07 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Service +public class SerialNumberRecordService { + + @Autowired + private SerialNumberRecordDao serialNumberRecordDao; + + public PageResult query(SerialNumberRecordQueryForm queryForm) { + Page page = SmartPageUtil.convert2PageQuery(queryForm); + List recordList = serialNumberRecordDao.query(page, queryForm); + return SmartPageUtil.convert2PageResult(page, recordList); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/SerialNumberService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/SerialNumberService.java new file mode 100644 index 00000000..ce40d7fa --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/SerialNumberService.java @@ -0,0 +1,36 @@ +package net.lab1024.sa.common.module.support.serialnumber.service; + +import net.lab1024.sa.common.module.support.serialnumber.constant.SerialNumberIdEnum; + +import java.util.List; + +/** + * 单据序列号 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-03-25 21:46:07 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public interface SerialNumberService { + + /** + * 生成 + * + * @param serialNumberIdEnum + * @return + */ + String generate(SerialNumberIdEnum serialNumberIdEnum); + + + /** + * 生成n个 + * + * @param serialNumberIdEnum + * @param count + * @return + */ + List generate(SerialNumberIdEnum serialNumberIdEnum, int count); + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/impl/SerialNumberInternService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/impl/SerialNumberInternService.java new file mode 100644 index 00000000..db8c04e7 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/impl/SerialNumberInternService.java @@ -0,0 +1,78 @@ +package net.lab1024.sa.common.module.support.serialnumber.service.impl; + +import com.google.common.collect.Interner; +import com.google.common.collect.Interners; +import net.lab1024.sa.common.module.support.serialnumber.domain.SerialNumberEntity; +import net.lab1024.sa.common.module.support.serialnumber.domain.SerialNumberGenerateResultBO; +import net.lab1024.sa.common.module.support.serialnumber.domain.SerialNumberInfoBO; +import net.lab1024.sa.common.module.support.serialnumber.domain.SerialNumberLastGenerateBO; +import net.lab1024.sa.common.module.support.serialnumber.service.SerialNumberBaseService; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 单据序列号 基于内存锁实现 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-03-25 21:46:07 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Service +public class SerialNumberInternService extends SerialNumberBaseService { + + /** + * 按照 serialNumberId 进行锁 + */ + private static final Interner POOL = Interners.newWeakInterner(); + + + private ConcurrentHashMap serialNumberLastGenerateMap = new ConcurrentHashMap<>(); + + @Override + public void initLastGenerateData(List serialNumberEntityList) { + if (serialNumberEntityList == null) { + return; + } + + for (SerialNumberEntity serialNumberEntity : serialNumberEntityList) { + SerialNumberLastGenerateBO lastGenerateBO = SerialNumberLastGenerateBO + .builder() + .serialNumberId(serialNumberEntity.getSerialNumberId()) + .lastNumber(serialNumberEntity.getLastNumber()) + .lastTime(serialNumberEntity.getLastTime()) + .build(); + serialNumberLastGenerateMap.put(serialNumberEntity.getSerialNumberId(), lastGenerateBO); + } + } + + @Override + public List generateSerialNumberList(SerialNumberInfoBO serialNumberInfo, int count) { + SerialNumberGenerateResultBO serialNumberGenerateResult = null; + synchronized (POOL.intern(serialNumberInfo.getSerialNumberId())) { + + // 获取上次的生成结果 + SerialNumberLastGenerateBO lastGenerateBO = serialNumberLastGenerateMap.get(serialNumberInfo.getSerialNumberId()); + + // 生成 + serialNumberGenerateResult = super.loopNumberList(lastGenerateBO, serialNumberInfo, count); + + // 将生成信息保存的内存和数据库 + lastGenerateBO.setLastNumber(serialNumberGenerateResult.getLastNumber()); + lastGenerateBO.setLastTime(serialNumberGenerateResult.getLastTime()); + serialNumberDao.updateLastNumberAndTime(serialNumberInfo.getSerialNumberId(), + serialNumberGenerateResult.getLastNumber(), + serialNumberGenerateResult.getLastTime()); + + // 把生成过程保存到数据库里 + super.saveRecord(serialNumberGenerateResult); + } + + return formatNumberList(serialNumberGenerateResult, serialNumberInfo); + } + + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/impl/SerialNumberMysqlService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/impl/SerialNumberMysqlService.java new file mode 100644 index 00000000..8d2413a7 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/impl/SerialNumberMysqlService.java @@ -0,0 +1,61 @@ +package net.lab1024.sa.common.module.support.serialnumber.service.impl; + +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.common.exception.BusinessException; +import net.lab1024.sa.common.module.support.serialnumber.domain.SerialNumberEntity; +import net.lab1024.sa.common.module.support.serialnumber.domain.SerialNumberGenerateResultBO; +import net.lab1024.sa.common.module.support.serialnumber.domain.SerialNumberInfoBO; +import net.lab1024.sa.common.module.support.serialnumber.domain.SerialNumberLastGenerateBO; +import net.lab1024.sa.common.module.support.serialnumber.service.SerialNumberBaseService; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 单据序列号 基于mysql锁实现 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-03-25 21:46:07 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Slf4j +public class SerialNumberMysqlService extends SerialNumberBaseService { + + @Override + @Transactional(rollbackFor = Throwable.class) + public List generateSerialNumberList(SerialNumberInfoBO serialNumberInfo, int count) { + // // 获取上次的生成结果 + SerialNumberEntity serialNumberEntity = serialNumberDao.selectForUpdate(serialNumberInfo.getSerialNumberId()); + if (serialNumberEntity == null) { + throw new BusinessException("cannot found SerialNumberId 数据库不存在:" + serialNumberInfo.getSerialNumberId()); + } + SerialNumberLastGenerateBO lastGenerateBO = SerialNumberLastGenerateBO + .builder() + .lastNumber(serialNumberEntity.getLastNumber()) + .lastTime(serialNumberEntity.getLastTime()) + .serialNumberId(serialNumberEntity.getSerialNumberId()) + .build(); + + // 生成 + SerialNumberGenerateResultBO serialNumberGenerateResult = super.loopNumberList(lastGenerateBO, serialNumberInfo, count); + + // 将生成信息保存的内存和数据库 + lastGenerateBO.setLastNumber(serialNumberGenerateResult.getLastNumber()); + lastGenerateBO.setLastTime(serialNumberGenerateResult.getLastTime()); + serialNumberDao.updateLastNumberAndTime(serialNumberInfo.getSerialNumberId(), + serialNumberGenerateResult.getLastNumber(), + serialNumberGenerateResult.getLastTime()); + + // 把生成过程保存到数据库里 + super.saveRecord(serialNumberGenerateResult); + + return formatNumberList(serialNumberGenerateResult, serialNumberInfo); + } + + @Override + public void initLastGenerateData(List serialNumberEntityList) { + + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/impl/SerialNumberRedisService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/impl/SerialNumberRedisService.java new file mode 100644 index 00000000..1c54f0ed --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/impl/SerialNumberRedisService.java @@ -0,0 +1,105 @@ +package net.lab1024.sa.common.module.support.serialnumber.service.impl; + +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.common.exception.BusinessException; +import net.lab1024.sa.common.constant.RedisKeyConst; +import net.lab1024.sa.common.module.support.redis.RedisService; +import net.lab1024.sa.common.module.support.serialnumber.domain.SerialNumberEntity; +import net.lab1024.sa.common.module.support.serialnumber.domain.SerialNumberGenerateResultBO; +import net.lab1024.sa.common.module.support.serialnumber.domain.SerialNumberInfoBO; +import net.lab1024.sa.common.module.support.serialnumber.domain.SerialNumberLastGenerateBO; +import net.lab1024.sa.common.module.support.serialnumber.service.SerialNumberBaseService; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.List; + +/** + * 单据序列号 基于redis锁实现 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-03-25 21:46:07 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Slf4j +public class SerialNumberRedisService extends SerialNumberBaseService { + + private static final int MAX_GET_LOCK_COUNT = 5; + + private static final long SLEEP_MILLISECONDS = 200L; + + @Autowired + private RedisService redisService; + + @Override + public void initLastGenerateData(List serialNumberEntityList) { + if (serialNumberEntityList == null) { + return; + } + + //删除之前的 + redisService.delete(RedisKeyConst.Support.SERIAL_NUMBER_LAST_INFO); + + for (SerialNumberEntity serialNumberEntity : serialNumberEntityList) { + SerialNumberLastGenerateBO lastGenerateBO = SerialNumberLastGenerateBO + .builder() + .serialNumberId(serialNumberEntity.getSerialNumberId()) + .lastNumber(serialNumberEntity.getLastNumber()) + .lastTime(serialNumberEntity.getLastTime()) + .build(); + + redisService.mset(RedisKeyConst.Support.SERIAL_NUMBER_LAST_INFO, + String.valueOf(serialNumberEntity.getSerialNumberId()), + lastGenerateBO + ); + } + } + + @Override + public List generateSerialNumberList(SerialNumberInfoBO serialNumberInfo, int count) { + SerialNumberGenerateResultBO serialNumberGenerateResult = null; + String lockKey = RedisKeyConst.Support.SERIAL_NUMBER + serialNumberInfo.getSerialNumberId(); + try { + boolean lock = false; + for (int i = 0; i < MAX_GET_LOCK_COUNT; i++) { + try { + lock = redisService.getLock(lockKey, 60 * 1000L); + if (lock) { + break; + } + Thread.sleep(SLEEP_MILLISECONDS); + } catch (Throwable e) { + log.error(e.getMessage(), e); + } + } + if (!lock) { + throw new BusinessException("SerialNumber 尝试5次,未能生成单号"); + } + // 获取上次的生成结果 + SerialNumberLastGenerateBO lastGenerateBO = (SerialNumberLastGenerateBO) redisService.mget( + RedisKeyConst.Support.SERIAL_NUMBER_LAST_INFO, + String.valueOf(serialNumberInfo.getSerialNumberId())); + + // 生成 + serialNumberGenerateResult = super.loopNumberList(lastGenerateBO, serialNumberInfo, count); + + // 将生成信息保存的内存和数据库 + lastGenerateBO.setLastNumber(serialNumberGenerateResult.getLastNumber()); + lastGenerateBO.setLastTime(serialNumberGenerateResult.getLastTime()); + serialNumberDao.updateLastNumberAndTime(serialNumberInfo.getSerialNumberId(), + serialNumberGenerateResult.getLastNumber(), + serialNumberGenerateResult.getLastTime()); + + // 把生成过程保存到数据库里 + super.saveRecord(serialNumberGenerateResult); + } catch (Throwable e) { + log.error(e.getMessage(), e); + throw e; + } finally { + redisService.unLock(lockKey); + } + + return formatNumberList(serialNumberGenerateResult, serialNumberInfo); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/TableColumnController.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/TableColumnController.java new file mode 100644 index 00000000..fd657e09 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/TableColumnController.java @@ -0,0 +1,51 @@ +package net.lab1024.sa.common.module.support.table; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import net.lab1024.sa.common.common.controller.SupportBaseController; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.util.SmartRequestUtil; +import net.lab1024.sa.common.constant.SwaggerTagConst; +import net.lab1024.sa.common.module.support.repeatsubmit.annoation.RepeatSubmit; +import net.lab1024.sa.common.module.support.table.domain.TableColumnUpdateForm; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +/** + * 表格自定义列(前端用户自定义表格列,并保存到数据库里) + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-12 22:52:21 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@RestController +@Api(tags = {SwaggerTagConst.Support.TABLE_COLUMN}) +public class TableColumnController extends SupportBaseController { + + @Autowired + private TableColumnService tableColumnService; + + @ApiOperation("修改表格列 @author 卓大") + @PostMapping("/tableColumn/update") + @RepeatSubmit + public ResponseDTO updateTableColumn(@RequestBody @Valid TableColumnUpdateForm updateForm) { + return tableColumnService.updateTableColumns(SmartRequestUtil.getRequestUser(), updateForm); + } + + @ApiOperation("恢复默认(删除) @author 卓大") + @GetMapping("/tableColumn/delete/{tableId}") + @RepeatSubmit + public ResponseDTO deleteTableColumn(@PathVariable Integer tableId) { + return tableColumnService.deleteTableColumn(SmartRequestUtil.getRequestUser(), tableId); + } + + @ApiOperation("查询表格列 @author 卓大") + @GetMapping("/tableColumn/getColumns/{tableId}") + public ResponseDTO getColumns(@PathVariable Integer tableId) { + return ResponseDTO.ok(tableColumnService.getTableColumns(SmartRequestUtil.getRequestUser(), tableId)); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/TableColumnDao.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/TableColumnDao.java new file mode 100644 index 00000000..2a7d6cdc --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/TableColumnDao.java @@ -0,0 +1,23 @@ +package net.lab1024.sa.common.module.support.table; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import net.lab1024.sa.common.module.support.table.domain.TableColumnEntity; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * 表格自定义列(前端用户自定义表格列,并保存到数据库里) + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-12 22:52:21 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Mapper +public interface TableColumnDao extends BaseMapper { + + TableColumnEntity selectByUserIdAndTableId(@Param("userId") Long userId, @Param("userType") Integer userType, @Param("tableId") Integer tableId); + + void delete(@Param("userId") Long userId, @Param("userType") Integer userType, @Param("tableId") Integer tableId); +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/TableColumnService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/TableColumnService.java new file mode 100644 index 00000000..5f388c4a --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/TableColumnService.java @@ -0,0 +1,72 @@ +package net.lab1024.sa.common.module.support.table; + +import com.alibaba.fastjson.JSONArray; +import net.lab1024.sa.common.common.domain.RequestUser; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.module.support.table.domain.TableColumnEntity; +import net.lab1024.sa.common.module.support.table.domain.TableColumnUpdateForm; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * 表格自定义列(前端用户自定义表格列,并保存到数据库里) + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-12 22:52:21 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Service +public class TableColumnService { + + @Autowired + private TableColumnDao tableColumnDao; + + /** + * 获取 - 表格列 + * + * @return + */ + public String getTableColumns(RequestUser requestUser, Integer tableId) { + TableColumnEntity tableColumnEntity = tableColumnDao.selectByUserIdAndTableId(requestUser.getUserId(), requestUser.getUserType().getValue(), tableId); + return tableColumnEntity == null ? null : tableColumnEntity.getColumns(); + } + + /** + * 更新表格列 + * + * @return + */ + public ResponseDTO updateTableColumns(RequestUser requestUser, TableColumnUpdateForm updateForm) { + if (CollectionUtils.isEmpty(updateForm.getColumnList())) { + return ResponseDTO.ok(); + } + Integer tableId = updateForm.getTableId(); + TableColumnEntity tableColumnEntity = tableColumnDao.selectByUserIdAndTableId(requestUser.getUserId(), requestUser.getUserType().getValue(), tableId); + if (tableColumnEntity == null) { + tableColumnEntity = new TableColumnEntity(); + tableColumnEntity.setTableId(tableId); + tableColumnEntity.setUserId(requestUser.getUserId()); + tableColumnEntity.setUserType(requestUser.getUserType().getValue()); + + tableColumnEntity.setColumns(JSONArray.toJSONString(updateForm.getColumnList())); + tableColumnDao.insert(tableColumnEntity); + } else { + tableColumnEntity.setColumns(JSONArray.toJSONString(updateForm.getColumnList())); + tableColumnDao.updateById(tableColumnEntity); + } + return ResponseDTO.ok(); + } + + /** + * 删除表格列 + * + * @return + */ + public ResponseDTO deleteTableColumn(RequestUser requestUser, Integer tableId) { + tableColumnDao.delete(requestUser.getUserId(), requestUser.getUserType().getValue(), tableId); + return ResponseDTO.ok(); + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/domain/TableColumnEntity.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/domain/TableColumnEntity.java new file mode 100644 index 00000000..c177ed16 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/domain/TableColumnEntity.java @@ -0,0 +1,49 @@ +package net.lab1024.sa.common.module.support.table.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 自定义表格列 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-12 22:52:21 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +@TableName("t_table_column") +public class TableColumnEntity { + + @TableId(type = IdType.AUTO) + private Long tableColumnId; + + /** + * 用户id + */ + private Long userId; + + /** + * 用户类型 + */ + private Integer userType; + + /** + * 表id + */ + private Integer tableId; + + /** + * 表列 + */ + private String columns; + + private LocalDateTime createTime; + + private LocalDateTime updateTime; +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/domain/TableColumnItemForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/domain/TableColumnItemForm.java new file mode 100644 index 00000000..0a50f8e9 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/domain/TableColumnItemForm.java @@ -0,0 +1,37 @@ +package net.lab1024.sa.common.module.support.table.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +/** + * 自定义表格列 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-12 22:52:21 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class TableColumnItemForm { + + @NotEmpty(message = "列不能为空") + @ApiModelProperty("字段") + private String columnKey; + + @ApiModelProperty("宽度") + private Integer width; + + @NotNull(message = "显示不能为空") + @ApiModelProperty("是否显示") + private Boolean showFlag; + + @NotNull(message = "排序不能为空") + @ApiModelProperty("排序") + private Integer sort; + + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/domain/TableColumnUpdateForm.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/domain/TableColumnUpdateForm.java new file mode 100644 index 00000000..106bf61b --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/domain/TableColumnUpdateForm.java @@ -0,0 +1,27 @@ +package net.lab1024.sa.common.module.support.table.domain; + +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * 自定义表格列 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2022-08-12 22:52:21 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Data +public class TableColumnUpdateForm { + + @NotNull(message = "表id不能为空") + private Integer tableId; + + @NotEmpty(message = "请上传列") + private List columnList; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/token/JwtConst.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/token/JwtConst.java new file mode 100644 index 00000000..79084efe --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/token/JwtConst.java @@ -0,0 +1,38 @@ +package net.lab1024.sa.common.module.support.token; + +/** + * jwt相关常量 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021-11-29 19:48:35 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +class JwtConst { + /** + * Id + */ + static final String CLAIM_ID_KEY = "id"; + + /** + * NAME + */ + static final String CLAIM_NAME_KEY = "name"; + + /** + * user type + */ + static final String CLAIM_USER_TYPE_KEY = "type"; + + /** + * 设备 + */ + static final String CLAIM_DEVICE_KEY = "device"; + + /** + * 万能密码登录的标识 + */ + static final String CLAIM_SUPER_PASSWORD_FLAG = "superPasswordFlag"; + +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/token/LoginDeviceEnum.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/token/LoginDeviceEnum.java new file mode 100644 index 00000000..3fa94198 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/token/LoginDeviceEnum.java @@ -0,0 +1,43 @@ +package net.lab1024.sa.common.module.support.token; + +import net.lab1024.sa.common.common.enumeration.BaseEnum; + +/** + * 登录设备类型 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021-11-29 19:48:35 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +public enum LoginDeviceEnum implements BaseEnum { + + PC(1, "电脑端"), + + ANDROID(2, "安卓"), + + APPLE(3, "苹果"), + + H5(4, "H5"), + + WEIXIN_MP(5, "微信小程序"); + + LoginDeviceEnum(Integer value, String desc) { + this.value = value; + this.desc = desc; + } + + private Integer value; + private String desc; + + @Override + public Integer getValue() { + return value; + } + + @Override + public String getDesc() { + return desc; + } +} diff --git a/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/token/TokenService.java b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/token/TokenService.java new file mode 100644 index 00000000..e3af8649 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/token/TokenService.java @@ -0,0 +1,220 @@ +package net.lab1024.sa.common.module.support.token; + +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.JwtBuilder; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.common.common.enumeration.UserTypeEnum; +import net.lab1024.sa.common.constant.RedisKeyConst; +import net.lab1024.sa.common.module.support.redis.RedisService; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.math.NumberUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.util.Date; +import java.util.Map; + +/** + * 与用户token的相关的服务 + * + * @Author 1024创新实验室-主任: 卓大 + * @Date 2021-11-29 19:48:35 + * @Wechat zhuoda1024 + * @Email lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ) + */ +@Component +@Slf4j +public class TokenService { + private static final long HOUR_TIME_MILLI = 60 * 60 * 1000; + + @Value("${token.key}") + private String tokenKey; + + @Value("${token.expire-day}") + private Integer tokenExpire; + + @Autowired + private RedisService redisService; + + /** + * 生成Token,并存入redis + * + * @param userId + * @param userName + * @param userTypeEnum + * @param loginDeviceEnum + * @param superPasswordFlag 特殊万能密码标识 + * @return + */ + public String generateToken(Long userId, String userName, UserTypeEnum userTypeEnum, LoginDeviceEnum loginDeviceEnum, Boolean superPasswordFlag) { + long nowTimeMilli = System.currentTimeMillis(); + Claims jwtClaims = Jwts.claims(); + jwtClaims.put(JwtConst.CLAIM_ID_KEY, userId); + jwtClaims.put(JwtConst.CLAIM_NAME_KEY, userName); + jwtClaims.put(JwtConst.CLAIM_USER_TYPE_KEY, userTypeEnum.getValue()); + jwtClaims.put(JwtConst.CLAIM_DEVICE_KEY, loginDeviceEnum.getValue()); + jwtClaims.put(JwtConst.CLAIM_SUPER_PASSWORD_FLAG, superPasswordFlag); + JwtBuilder jwtBuilder = Jwts.builder() + .setClaims(jwtClaims) + .setIssuedAt(new Date(nowTimeMilli)) + .signWith(SignatureAlgorithm.HS512, tokenKey); + + // 如果是万能密码,则不需要记录到redis中;万能密码最多半个小时有效期 + if (superPasswordFlag) { + jwtBuilder.setExpiration(new Date(nowTimeMilli + (HOUR_TIME_MILLI / 2))); + return jwtBuilder.compact(); + } + + jwtBuilder.setExpiration(new Date(nowTimeMilli + tokenExpire * 24 * HOUR_TIME_MILLI)); + String token = jwtBuilder.compact(); + String redisKey = this.generateTokenRedisKey(userId, userTypeEnum.getValue(), loginDeviceEnum.getValue()); + redisService.set(redisKey, token, tokenExpire * 24 * 3600); + return token; + } + + /** + * 生成登录信息: 含设备信息 + * + * @param userId + * @param device + * @return + */ + private String generateTokenRedisKey(Long userId, Integer userType, Integer device) { + String userKey = userType + "_" + userId + "_" + device; + return redisService.generateRedisKey(RedisKeyConst.Support.TOKEN, userKey); + } + + + /** + * 强制移除 此用户各端的登录信息 + * + * @param token + */ + public void removeToken(String token) { + Map tokenData = this.decryptTokenData(token); + if (MapUtils.isEmpty(tokenData)) { + return; + } + + //特殊账号 + if (tokenData.get(JwtConst.CLAIM_SUPER_PASSWORD_FLAG) != null) { + try { + Boolean superPasswordFlag = Boolean.valueOf(tokenData.get(JwtConst.CLAIM_SUPER_PASSWORD_FLAG).toString()); + if (superPasswordFlag) { + return; + } + } catch (Exception e) { + log.error(e.getMessage(), e); + return; + } + } + + boolean isValid = this.checkRedisToken(tokenData, token); + if (!isValid) { + return; + } + + Long userId = Long.valueOf(tokenData.get(JwtConst.CLAIM_ID_KEY).toString()); + Integer userType = Integer.valueOf(tokenData.get(JwtConst.CLAIM_USER_TYPE_KEY).toString()); + Integer device = Integer.valueOf(tokenData.get(JwtConst.CLAIM_DEVICE_KEY).toString()); + + String redisKey = this.generateTokenRedisKey(userId, userType, device); + redisService.delete(redisKey); + } + + /** + * 解析并校验token信息 获取 userId + * + * @param token + * @return + */ + public Long getUserIdAndValidateToken(String token) { + Map parseJwtData = this.decryptTokenData(token); + boolean isValid = this.checkRedisToken(parseJwtData, token); + if (!isValid) { + return null; + } + Long userId = Long.valueOf(parseJwtData.get(JwtConst.CLAIM_ID_KEY).toString()); + return userId; + } + + /** + * 解密和解析token + * + * @param token + * @return + */ + private Map decryptTokenData(String token) { + try { + return Jwts.parser() + .setSigningKey(tokenKey) + .parseClaimsJws(token) + .getBody(); + } catch (Exception e) { + } + return null; + } + + /** + * 校验token是否有效 + * + * @param token + * @return + */ + private boolean checkRedisToken(Map parseJwtData, String token) { + if (MapUtils.isEmpty(parseJwtData)) { + return false; + } + //特殊账号 + if (parseJwtData.get(JwtConst.CLAIM_SUPER_PASSWORD_FLAG) != null) { + try { + Boolean superPasswordFlag = Boolean.valueOf(parseJwtData.get(JwtConst.CLAIM_SUPER_PASSWORD_FLAG).toString()); + if (superPasswordFlag) { + return true; + } + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + } + + Long userId = null; + Integer userType = null, device = null; + + if (null != parseJwtData.get(JwtConst.CLAIM_ID_KEY)) { + userId = NumberUtils.toLong(parseJwtData.get(JwtConst.CLAIM_ID_KEY).toString(), -1); + userId = userId == -1 ? null : userId; + } + + if (null != parseJwtData.get(JwtConst.CLAIM_USER_TYPE_KEY)) { + userType = NumberUtils.toInt(parseJwtData.get(JwtConst.CLAIM_USER_TYPE_KEY).toString(), -1); + userType = userType == -1 ? null : userType; + } + + if (null != parseJwtData.get(JwtConst.CLAIM_DEVICE_KEY)) { + device = NumberUtils.toInt(parseJwtData.get(JwtConst.CLAIM_DEVICE_KEY).toString(), -1); + device = device == -1 ? null : device; + } + + if (userId == null || userType == null || device == null) { + return false; + } + + String redisKey = this.generateTokenRedisKey(userId, userType, device); + String redisToken = redisService.get(redisKey); + return token.equals(redisToken); + } + + /** + * 批量移除用户所有设备的token + */ + public void batchRemoveRedisToken(Long userId, UserTypeEnum userTypeEnum) { + for (LoginDeviceEnum device : LoginDeviceEnum.values()) { + redisService.delete(this.generateTokenRedisKey(userId, userTypeEnum.getValue(), device.getValue())); + } + } +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/resources/META-INF/spring.factories b/smart-admin-api/sa-common/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..99b8129c --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.env.EnvironmentPostProcessor=\ + net.lab1024.sa.common.config.PostProcessorConfig \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/banner.txt b/smart-admin-api/sa-common/src/main/resources/banner.txt similarity index 50% rename from smart-admin-service/smart-admin-api/src/main/resources/banner.txt rename to smart-admin-api/sa-common/src/main/resources/banner.txt index d3187732..92bf81a5 100644 --- a/smart-admin-service/smart-admin-api/src/main/resources/banner.txt +++ b/smart-admin-api/sa-common/src/main/resources/banner.txt @@ -1,8 +1,19 @@ + ${AnsiColor.BRIGHT_GREEN} + / ____| | | /\ | | (_) | (___ _ __ ___ __ _ _ __| |_ / \ __| |_ __ ___ _ _ __ \___ \| '_ ` _ \ / _` | '__| __| / /\ \ / _` | '_ ` _ \| | '_ \ ____) | | | | | | (_| | | | |_ / ____ \ (_| | | | | | | | | | | |_____/|_| |_| |_|\__,_|_| \__/_/ \_\__,_|_| |_| |_|_|_| |_| -SmartAdmin v1.2.0 +保持谦逊 保持学习 ! +热爱代码 热爱生活 ! +永远年轻 永远前行 ! +SmartAdmin v2.X ,作者:1024创新实验室 @copyright:【 1024lab 】 + +SmartAdmin 文档地址:https://smartadmin.1024lab.net + +1024创新实验室:https://www.1024lab.net + +${AnsiColor.DEFAULT} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/constant/enum.java.vm b/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/constant/enum.java.vm new file mode 100644 index 00000000..6511a80d --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/constant/enum.java.vm @@ -0,0 +1,24 @@ +package ${packageName}; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import net.lab1024.sa.common.common.enumeration.BaseEnum; + +/** + * ${enumDesc} + * + * @Author ${basic.backendAuthor} + * @Date ${basic.backendDate} + * @Copyright ${basic.copyright} + */ + +@AllArgsConstructor +@Getter +public enum ${enumName} implements BaseEnum { + + ; + + private final ${enumJavaType} value; + + private final String desc; +} diff --git a/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/controller/Controller.java.vm b/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/controller/Controller.java.vm new file mode 100644 index 00000000..42f93dc2 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/controller/Controller.java.vm @@ -0,0 +1,68 @@ +package ${packageName}; + +#foreach ($importClass in $importPackageList) +$importClass +#end +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.domain.PageResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import javax.validation.Valid; + +/** + * ${basic.description} Controller + * + * @Author ${basic.backendAuthor} + * @Date ${basic.backendDate} + * @Copyright ${basic.copyright} + */ + +@RestController +@Api(tags = "") +public class ${name.upperCamel}Controller { + + @Autowired + private ${name.upperCamel}Service ${name.lowerCamel}Service; + + @ApiOperation("分页查询 @author ${basic.backendAuthor}") + @PostMapping("/${name.lowerCamel}/queryPage") + public ResponseDTO> queryPage(@RequestBody @Valid ${name.upperCamel}QueryForm queryForm) { + return ResponseDTO.ok(${name.lowerCamel}Service.queryPage(queryForm)); + } + +#if($insertAndUpdate.isSupportInsertAndUpdate) + @ApiOperation("添加 @author ${basic.backendAuthor}") + @PostMapping("/${name.lowerCamel}/add") + public ResponseDTO add(@RequestBody @Valid ${name.upperCamel}AddForm addForm) { + return ${name.lowerCamel}Service.add(addForm); + } + + @ApiOperation("更新 @author ${basic.backendAuthor}") + @PostMapping("/${name.lowerCamel}/update") + public ResponseDTO update(@RequestBody @Valid ${name.upperCamel}UpdateForm updateForm) { + return ${name.lowerCamel}Service.update(updateForm); + } +#end + +#if($deleteInfo.isSupportDelete) + #if($deleteInfo.deleteEnum == "Batch" || $deleteInfo.deleteEnum == "SingleAndBatch") + @ApiOperation("批量删除 @author ${basic.backendAuthor}") + @PostMapping("/${name.lowerCamel}/batchDelete") + public ResponseDTO batchDelete(@RequestBody ValidateList<${primaryKeyJavaType}> idList) { + return ${name.lowerCamel}Service.batchDelete(idList); + } + #end + + #if($deleteInfo.deleteEnum == "Single" || $deleteInfo.deleteEnum == "SingleAndBatch") + @ApiOperation("单个删除 @author ${basic.backendAuthor}") + @GetMapping("/${name.lowerCamel}/delete/{${name.lowerCamel}Id}") + public ResponseDTO batchDelete(@PathVariable ${primaryKeyJavaType} ${primaryKeyFieldName}) { + return ${name.lowerCamel}Service.delete(${name.lowerCamel}Id); + } + #end +#end +} diff --git a/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/dao/Dao.java.vm b/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/dao/Dao.java.vm new file mode 100644 index 00000000..b14411a9 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/dao/Dao.java.vm @@ -0,0 +1,51 @@ +package ${packageName}; + +#foreach ($importClass in $importPackageList) +$importClass +#end +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +/** + * ${basic.description} Dao + * + * @Author ${basic.backendAuthor} + * @Date ${basic.backendDate} + * @Copyright ${basic.copyright} + */ + +@Mapper +@Component +public interface ${name.upperCamel}Dao extends BaseMapper<${name.upperCamel}Entity> { + + /** + * 分页 查询 + * + * @param page + * @param queryForm + * @return + */ + List<${name.upperCamel}VO> queryPage(Page page, @Param("queryForm") ${name.upperCamel}QueryForm queryForm); + +#if($deleteInfo.isSupportDelete) +### 假删除 +#if(!${deleteInfo.isPhysicallyDeleted}) +#if($deleteInfo.deleteEnum == "Single" || $deleteInfo.deleteEnum == "SingleAndBatch") + /** + * 更新删除状态 + */ + long updateDeleted(@Param("${primaryKeyFieldName}")${primaryKeyJavaType} ${primaryKeyFieldName},@Param("${deletedFlag}")boolean deletedFlag); +#end +#if($deleteInfo.deleteEnum == "Batch" || $deleteInfo.deleteEnum == "SingleAndBatch") + /** + * 批量更新删除状态 + */ + void batchUpdateDeleted(@Param("idList")List<${primaryKeyJavaType}> idList,@Param("${deletedFlag}")boolean deletedFlag); +#end +#end +#end + +} diff --git a/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/entity/Entity.java.vm b/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/entity/Entity.java.vm new file mode 100644 index 00000000..dd1fe0bb --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/entity/Entity.java.vm @@ -0,0 +1,32 @@ +package ${basic.javaPackageName}.domain.entity; + +#foreach ($importClass in $importPackageList) +$importClass +#end + +/** + * ${basic.description} 实体类 + * + * @Author ${basic.backendAuthor} + * @Date ${basic.backendDate} + * @Copyright ${basic.copyright} + */ + +@Data +@TableName("${tableName}") +public class ${name.upperCamel}Entity { +#foreach ($field in $fields) + + /** + * $field.label + */ +#if($field.primaryKeyFlag && $field.autoIncreaseFlag) + @TableId(type = IdType.AUTO) +#end +#if($field.primaryKeyFlag && !$field.autoIncreaseFlag) + @TableId +#end + private $field.javaType $field.fieldName; +#end + +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/form/AddForm.java.vm b/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/form/AddForm.java.vm new file mode 100644 index 00000000..d1e8581c --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/form/AddForm.java.vm @@ -0,0 +1,30 @@ +package ${packageName}; + +#foreach ($importClass in $importPackageList) +$importClass +#end + +/** + * ${basic.description} 新建表单 + * + * @Author ${basic.backendAuthor} + * @Date ${basic.backendDate} + * @Copyright ${basic.copyright} + */ + +@Data +public class ${name.upperCamel}AddForm { +#foreach ($field in $fields) + +#if($field.isEnum) + ${field.apiModelProperty} + ${field.checkEnum} + private $field.javaType $field.fieldName; +#end +#if(!$field.isEnum) + ${field.apiModelProperty}$!{field.notEmpty}$!{field.dict}$!{field.file} + private $field.javaType $field.fieldName; +#end +#end + +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/form/QueryForm.java.vm b/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/form/QueryForm.java.vm new file mode 100644 index 00000000..ed672d95 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/form/QueryForm.java.vm @@ -0,0 +1,38 @@ +package ${packageName}; + +import net.lab1024.sa.common.common.domain.PageParam; +#foreach ($importClass in $importPackageList) +$importClass +#end + +/** + * ${basic.description} 分页查询表单 + * + * @Author ${basic.backendAuthor} + * @Date ${basic.backendDate} + * @Copyright ${basic.copyright} + */ + +@Data +public class ${name.upperCamel}QueryForm extends PageParam{ +#foreach ($field in $fields) + +#if($field.isEnum) + ${field.apiModelProperty} + ${field.checkEnum} + private $field.javaType $field.fieldName; +#end +#if(!$field.isEnum && $field.queryTypeEnum != "DateRange") + ${field.apiModelProperty}$!{field.dict} + private $field.javaType $field.fieldName; +#end +#if(!$field.isEnum && $field.queryTypeEnum == "DateRange") + ${field.apiModelProperty} + private $field.javaType ${field.fieldName}Begin; + + ${field.apiModelProperty} + private $field.javaType ${field.fieldName}End; +#end +#end + +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/form/UpdateForm.java.vm b/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/form/UpdateForm.java.vm new file mode 100644 index 00000000..15cbe9a5 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/form/UpdateForm.java.vm @@ -0,0 +1,30 @@ +package ${packageName}; + +#foreach ($importClass in $importPackageList) +$importClass +#end + +/** + * ${basic.description} 更新表单 + * + * @Author ${basic.backendAuthor} + * @Date ${basic.backendDate} + * @Copyright ${basic.copyright} + */ + +@Data +public class ${name.upperCamel}UpdateForm { +#foreach ($field in $fields) + +#if($field.isEnum) + ${field.apiModelProperty} + ${field.checkEnum} + private $field.javaType $field.fieldName; +#end +#if(!$field.isEnum) + ${field.apiModelProperty}$!{field.notEmpty}$!{field.dict}$!{field.file} + private $field.javaType $field.fieldName; +#end +#end + +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/vo/VO.java.vm b/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/vo/VO.java.vm new file mode 100644 index 00000000..e2c84f82 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/vo/VO.java.vm @@ -0,0 +1,32 @@ +package ${packageName}; + +#foreach ($importClass in $importPackageList) +$importClass +#end + +/** + * ${basic.description} 列表VO + * + * @Author ${basic.backendAuthor} + * @Date ${basic.backendDate} + * @Copyright ${basic.copyright} + */ + +@Data +public class ${name.upperCamel}VO { + + private $!{primaryKeyJavaType} $!{primaryKeyFieldName}; + +#foreach ($field in $fields) + +#if($field.isEnum) + ${field.apiModelProperty} + private $field.javaType $field.fieldName; +#end +#if(!$field.isEnum) + ${field.apiModelProperty}$!{field.dict}$!{field.file} + private $field.javaType $field.fieldName; +#end +#end + +} \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/manager/Manager.java.vm b/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/manager/Manager.java.vm new file mode 100644 index 00000000..52811ca0 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/manager/Manager.java.vm @@ -0,0 +1,21 @@ +package ${packageName}; + +#foreach ($importClass in $importPackageList) +$importClass +#end + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * ${basic.description} Manager + * + * @Author ${basic.backendAuthor} + * @Date ${basic.backendDate} + * @Copyright ${basic.copyright} + */ +@Service +public class ${name.upperCamel}Manager extends ServiceImpl<${name.upperCamel}Dao, ${name.upperCamel}Entity> { + + +} diff --git a/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/mapper/Mapper.xml.vm b/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/mapper/Mapper.xml.vm new file mode 100644 index 00000000..d6809423 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/mapper/Mapper.xml.vm @@ -0,0 +1,74 @@ + + + + + + + +#if($dao.deletedFieldUpperName != $null) + + update ${mapper.tableName} set ${mapper.deletedColumnName} = #{deletedFlag} + where ${mapper.mainKeyColumnName} in + + #{item} + + +#end + +#if($deleteInfo.isSupportDelete) +### 假删除 +#if(!${deleteInfo.isPhysicallyDeleted}) +#if($deleteInfo.deleteEnum == "Batch" || $deleteInfo.deleteEnum == "SingleAndBatch") + + + update ${tableName} set deleted_flag = #{deletedFlag} + where ${primaryKeyColumnName} in + + #{item} + + +#end +#if($deleteInfo.deleteEnum == "Single" || $deleteInfo.deleteEnum == "SingleAndBatch") + + + update ${tableName} set deleted_flag = #{deletedFlag} + where ${primaryKeyColumnName} = #{${primaryKeyFieldName}} + +#end +#end +#end + \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/service/Service.java.vm b/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/service/Service.java.vm new file mode 100644 index 00000000..02f43a19 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/service/Service.java.vm @@ -0,0 +1,108 @@ +package ${packageName}; + +#foreach ($importClass in $importPackageList) +$importClass +#end +import net.lab1024.sa.common.common.util.SmartBeanUtil; +import net.lab1024.sa.common.common.util.SmartPageUtil; +import net.lab1024.sa.common.common.domain.ResponseDTO; +import net.lab1024.sa.common.common.domain.PageResult; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * ${basic.description} Service + * + * @Author ${basic.backendAuthor} + * @Date ${basic.backendDate} + * @Copyright ${basic.copyright} + */ + +@Service +public class ${name.upperCamel}Service { + + @Autowired + private ${name.upperCamel}Dao ${name.lowerCamel}Dao; + + /** + * 分页查询 + * + * @param queryForm + * @return + */ + public PageResult<${name.upperCamel}VO> queryPage(${name.upperCamel}QueryForm queryForm) { + Page page = SmartPageUtil.convert2PageQuery(queryForm); + List<${name.upperCamel}VO> list = ${name.lowerCamel}Dao.queryPage(page, queryForm); + PageResult<${name.upperCamel}VO> pageResult = SmartPageUtil.convert2PageResult(page, list); + return pageResult; + } + +#if($insertAndUpdate.isSupportInsertAndUpdate) + /** + * 添加 + */ + public ResponseDTO add(${name.upperCamel}AddForm addForm) { + ${name.upperCamel}Entity ${name.lowerCamel}Entity = SmartBeanUtil.copy(addForm, ${name.upperCamel}Entity.class); + ${name.lowerCamel}Dao.insert(${name.lowerCamel}Entity); + return ResponseDTO.ok(); + } + + /** + * 更新 + * + * @param updateForm + * @return + */ + public ResponseDTO update(${name.upperCamel}UpdateForm updateForm) { + ${name.upperCamel}Entity ${name.lowerCamel}Entity = SmartBeanUtil.copy(updateForm, ${name.upperCamel}Entity.class); + ${name.lowerCamel}Dao.updateById(${name.lowerCamel}Entity); + return ResponseDTO.ok(); + } +#end + +#if($deleteInfo.isSupportDelete) + #if($deleteInfo.deleteEnum == "BATCH" || $deleteInfo.deleteEnum == "SingleAndBatch") + /** + * 批量删除 + * + * @param idList + * @return + */ + public ResponseDTO batchDelete(List<${primaryKeyJavaType}> idList) { + if (CollectionUtils.isEmpty(idList)){ + return ResponseDTO.ok(); + } + +### 真删除 or 假删除 +#if(!${deleteInfo.isPhysicallyDeleted}) + ${name.lowerCamel}Dao.batchUpdateDeleted(idList, true); +#else + ${name.lowerCamel}Dao.deleteBatchIds(idList); +#end + return ResponseDTO.ok(); + } + #end + + #if($deleteInfo.deleteEnum == "Single" || $deleteInfo.deleteEnum == "SingleAndBatch") + /** + * 单个删除 + */ + public ResponseDTO delete(${primaryKeyJavaType} ${primaryKeyFieldName}) { + if (null == ${primaryKeyFieldName}){ + return ResponseDTO.ok(); + } + +### 真删除 or 假删除 +#if(!${deleteInfo.isPhysicallyDeleted}) + ${name.lowerCamel}Dao.updateDeleted(${primaryKeyFieldName},true); +#end +#if(${deleteInfo.isPhysicallyDeleted}) + ${name.lowerCamel}Dao.deleteById(${primaryKeyFieldName}); +#end + return ResponseDTO.ok(); + } + #end +#end +} diff --git a/smart-admin-api/sa-common/src/main/resources/code-generator-template/js/api.js.vm b/smart-admin-api/sa-common/src/main/resources/code-generator-template/js/api.js.vm new file mode 100644 index 00000000..b249d0c2 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/code-generator-template/js/api.js.vm @@ -0,0 +1,78 @@ +/** + * ${basic.description} api 封装 + * + * @Author: ${basic.frontAuthor} + * @Date: ${basic.frontDate} + * @Copyright ${basic.copyright} + */ +import { postRequest, getRequest } from '/@/lib/axios'; + +export const ${name.lowerCamel}Api = { + + /** + * 分页查询 @author ${basic.frontAuthor} + */ + queryPage : (param) => { + return postRequest('/${name.lowerCamel}/queryPage', param); + }, + + /** + * 增加 @author ${basic.frontAuthor} + */ + add: (param) => { + return postRequest('/${name.lowerCamel}/add', param); + }, + + /** + * 修改 @author ${basic.frontAuthor} + */ + update: (param) => { + return postRequest('/${name.lowerCamel}/update', param); + }, +## ------------------ 详情 ------------------ + +#if($deleteInfo.isSupportDetail) + /** + * 获取详情 @author ${basic.frontAuthor} + */ + getDetail: (id) => { + return getRequest(`/${name.lowerCamel}/getDetail/\${id}`); + }, +#end + +## ------------------ 删除 ------------------ +#if($deleteInfo.isSupportDelete) + #if($deleteInfo.deleteEnum == 'Single') + /** + * 删除 @author ${basic.frontAuthor} + */ + delete: (id) => { + return getRequest(`/${name.lowerCamel}/delete/${id}`); + }, + #end + #if($deleteInfo.deleteEnum == 'Batch') + /** + * 批量删除 @author ${basic.frontAuthor} + */ + batchDelete: (idList) => { + return postRequest('/${name.lowerCamel}/batchDelete', idList); + }, + #end + #if($deleteInfo.deleteEnum == 'SingleAndBatch') + /** + * 删除 @author ${basic.frontAuthor} + */ + delete: (id) => { + return getRequest(`/${name.lowerCamel}/delete/${id}`); + }, + + /** + * 批量删除 @author ${basic.frontAuthor} + */ + batchDelete: (idList) => { + return postRequest('/${name.lowerCamel}/batchDelete', idList); + }, + #end +#end + +}; diff --git a/smart-admin-api/sa-common/src/main/resources/code-generator-template/js/const.js.vm b/smart-admin-api/sa-common/src/main/resources/code-generator-template/js/const.js.vm new file mode 100644 index 00000000..30ca06a3 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/code-generator-template/js/const.js.vm @@ -0,0 +1,23 @@ +/** + * ${basic.description} 枚举 + * + * @Author: ${basic.frontAuthor} + * @Date: ${basic.frontDate} + * @Copyright ${basic.copyright} + */ + +#foreach ($enum in $enumList) + +/** + * $enum.columnComment + */ +export const $enum.upperUnderscoreEnum = { + +} +#end + +export default { +#foreach ($enum in $enumList) + $enum.upperUnderscoreEnum, +#end +}; \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/resources/code-generator-template/js/form.vue.vm b/smart-admin-api/sa-common/src/main/resources/code-generator-template/js/form.vue.vm new file mode 100644 index 00000000..e302c22c --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/code-generator-template/js/form.vue.vm @@ -0,0 +1,181 @@ + + + diff --git a/smart-admin-api/sa-common/src/main/resources/code-generator-template/js/list.vue.vm b/smart-admin-api/sa-common/src/main/resources/code-generator-template/js/list.vue.vm new file mode 100644 index 00000000..a7d3fdf1 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/code-generator-template/js/list.vue.vm @@ -0,0 +1,317 @@ + + + diff --git a/smart-admin-api/sa-common/src/main/resources/code-generator-template/tools.xml b/smart-admin-api/sa-common/src/main/resources/code-generator-template/tools.xml new file mode 100644 index 00000000..7f8f8681 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/code-generator-template/tools.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/smart-admin-api/sa-common/src/main/resources/dev/sa-common.yaml b/smart-admin-api/sa-common/src/main/resources/dev/sa-common.yaml new file mode 100644 index 00000000..e95bb7a8 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/dev/sa-common.yaml @@ -0,0 +1,129 @@ +spring: + # 数据库连接信息 + datasource: + url: jdbc:p6spy:mysql://127.0.0.1:3307/smart_admin_v2?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai + username: root + password: Lab024 + initial-size: 2 + min-idle: 2 + max-active: 10 + max-wait: 60000 + time-between-eviction-runs-millis: 60000 + min-evictable-idle-time-millis: 300000 + driver-class-name: com.p6spy.engine.spy.P6SpyDriver + filters: stat + druid: + username: druid + password: 1024 + login: + enabled: true + method: + pointcut: net.lab1024.sa..*Service.* + + # redis 连接池配置信息 + redis: + database: 1 + host: 127.0.0.1 + lettuce: + pool: + max-active: 5 + min-idle: 1 + max-idle: 3 + max-wait: 30000ms + port: 6379 + timeout: 10000ms + password: + + # 上传文件大小配置 + servlet: + multipart: + max-file-size: 30MB + max-request-size: 30MB + + # json序列化相关配置 + jackson: + serialization: + write-enums-using-to-string: true + write-dates-as-timestamps: false + deserialization: + read-enums-using-to-string: true + fail-on-unknown-properties: false + default-property-inclusion: always + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 + + # 缓存实现类型 + cache: + type: caffeine + +# tomcat 配置,主要用于 配置 访问日志(便于将来排查错误) +server: + tomcat: + basedir: ${localPath:/home}/logs/smart_admin_v2/tomcat-logs + accesslog: + enabled: true + pattern: '%t %{X-Forwarded-For}i %a "%r" %s %D (%D ms)' + +#swagger: 提高swagger 方法名称有重复的日志提示 +logging: + level: + springfox: + documentation: + spring: + web: + readers: + operation: + CachingOperationNameGenerator: warn + scanners: + ApiListingReferenceScanner: warn + +# 文件上传 配置 +file: + storage: + mode: cloud + local: + path: ${localPath:/home}/smart_admin_v2/upload/ + cloud: + region: oss-cn-qingdao + endpoint: oss-cn-qingdao.aliyuncs.com + bucket-name: common-sit + access-key: + secret-key: + url: + expire: 7200000 + public: https://${file.storage.cloud.bucket-name}.${file.storage.cloud.endpoint}/ + +# swagger 配置 +swagger: + title: SmartAdmin + description: SmartAdmin 2.0 + version: 2.0 + host: localhost:${server.port} + package: net.lab1024.sa + tag-class: net.lab1024.sa.common.constant.SwaggerTagConst + team-url: https://www.1024lab.net/ + +# RestTemplate 请求配置 +http: + pool: + max-total: 20 + connect-timeout: 50000 + read-timeout: 50000 + write-timeout: 50000 + keep-alive: 300000 + +# token相关配置 +token: + key: sa-jwt-key + expire-day: 7 + +# 跨域配置 +access-control-allow-origin: '*' + +# 心跳配置 +heart-beat: + interval-seconds: 60 + +# 热加载配置 +reload: + interval-seconds: 60 \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/resources/mapper/support/ChangeLogMapper.xml b/smart-admin-api/sa-common/src/main/resources/mapper/support/ChangeLogMapper.xml new file mode 100644 index 00000000..7f5b7dbf --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/mapper/support/ChangeLogMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/resources/mapper/support/CodeGeneratorMapper.xml b/smart-admin-api/sa-common/src/main/resources/mapper/support/CodeGeneratorMapper.xml new file mode 100644 index 00000000..4376face --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/mapper/support/CodeGeneratorMapper.xml @@ -0,0 +1,36 @@ + + + + + + + + + + \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/resources/mapper/support/ConfigMapper.xml b/smart-admin-api/sa-common/src/main/resources/mapper/support/ConfigMapper.xml new file mode 100644 index 00000000..1fb8474d --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/mapper/support/ConfigMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/resources/mapper/support/DataTracerMapper.xml b/smart-admin-api/sa-common/src/main/resources/mapper/support/DataTracerMapper.xml new file mode 100644 index 00000000..546e62a5 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/mapper/support/DataTracerMapper.xml @@ -0,0 +1,31 @@ + + + + + + + + + \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/resources/mapper/support/DictKeyMapper.xml b/smart-admin-api/sa-common/src/main/resources/mapper/support/DictKeyMapper.xml new file mode 100644 index 00000000..619269bb --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/mapper/support/DictKeyMapper.xml @@ -0,0 +1,37 @@ + + + + + + update t_dict_key set deleted_flag = #{deletedFlag} where dict_key_id in + + #{item} + + + + + + + + + + \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/resources/mapper/support/DictValueMapper.xml b/smart-admin-api/sa-common/src/main/resources/mapper/support/DictValueMapper.xml new file mode 100644 index 00000000..6f0fbc15 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/mapper/support/DictValueMapper.xml @@ -0,0 +1,44 @@ + + + + + + update t_dict_value set deleted_flag = #{deletedFlag} where dict_value_id in + + #{item} + + + + + + + + + + + \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/resources/mapper/support/FeedbackMapper.xml b/smart-admin-api/sa-common/src/main/resources/mapper/support/FeedbackMapper.xml new file mode 100644 index 00000000..740037a2 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/mapper/support/FeedbackMapper.xml @@ -0,0 +1,26 @@ + + + + + + \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/resources/mapper/support/FileMapper.xml b/smart-admin-api/sa-common/src/main/resources/mapper/support/FileMapper.xml new file mode 100644 index 00000000..405f79f8 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/mapper/support/FileMapper.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/resources/mapper/support/HeartBeatRecordMapper.xml b/smart-admin-api/sa-common/src/main/resources/mapper/support/HeartBeatRecordMapper.xml new file mode 100644 index 00000000..e37f08ab --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/mapper/support/HeartBeatRecordMapper.xml @@ -0,0 +1,37 @@ + + + + + + + update t_heart_beat_record + set heart_beat_time = #{heartBeatTime} + + heart_beat_record_id = #{id} + + + + + + + + diff --git a/smart-admin-api/sa-common/src/main/resources/mapper/support/HelpDocDao.xml b/smart-admin-api/sa-common/src/main/resources/mapper/support/HelpDocDao.xml new file mode 100644 index 00000000..6bbbf5e3 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/mapper/support/HelpDocDao.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + update t_help_doc + set page_view_count = page_view_count + #{pageViewCountIncrease}, + user_view_count = user_view_count + #{userViewCountIncrease} + where help_doc_id = #{helpDocId} + + + + + + + + + + insert into t_help_doc_relation + (relation_id, relation_name, help_doc_id) + values + + ( #{item.relationId} ,#{item.relationName}, #{helpDocId} ) + + + + + delete + from t_help_doc_relation + where help_doc_id = #{helpDocId} + + + + + + + + insert into t_help_doc_view_record (help_doc_id, user_id,user_name, first_ip, first_user_agent, page_view_count) + values (#{helpDocId}, #{userId},#{userName}, #{ip}, #{userAgent}, #{pageViewCount}) + + + update t_help_doc_view_record + set page_view_count = page_view_count + 1, + last_ip = #{ip}, + last_user_agent = #{userAgent} + where help_doc_id = #{helpDocId} + and user_id = #{userId} + + + + + \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/resources/mapper/support/LoginLogMapper.xml b/smart-admin-api/sa-common/src/main/resources/mapper/support/LoginLogMapper.xml new file mode 100644 index 00000000..6126a290 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/mapper/support/LoginLogMapper.xml @@ -0,0 +1,37 @@ + + + + + + + + + \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/resources/mapper/support/OperateLogMapper.xml b/smart-admin-api/sa-common/src/main/resources/mapper/support/OperateLogMapper.xml new file mode 100644 index 00000000..e432a896 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/mapper/support/OperateLogMapper.xml @@ -0,0 +1,37 @@ + + + + + + + + delete from t_operate_log where id = #{id} + + + + delete from t_operate_log where id in + + #{item} + + + + \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/resources/mapper/support/ReloadItemMapper.xml b/smart-admin-api/sa-common/src/main/resources/mapper/support/ReloadItemMapper.xml new file mode 100644 index 00000000..85b6ffb4 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/mapper/support/ReloadItemMapper.xml @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/resources/mapper/support/ReloadResultMapper.xml b/smart-admin-api/sa-common/src/main/resources/mapper/support/ReloadResultMapper.xml new file mode 100644 index 00000000..a1f96b83 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/mapper/support/ReloadResultMapper.xml @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/resources/mapper/support/SerialNumberMapper.xml b/smart-admin-api/sa-common/src/main/resources/mapper/support/SerialNumberMapper.xml new file mode 100644 index 00000000..3afd34a3 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/mapper/support/SerialNumberMapper.xml @@ -0,0 +1,21 @@ + + + + + + update t_serial_number + set + last_number = #{lastNumber}, + last_time = #{lastTime} + where + serial_number_id = #{serialNumberId} + + + + + + + + \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/resources/mapper/support/SerialNumberRecordMapper.xml b/smart-admin-api/sa-common/src/main/resources/mapper/support/SerialNumberRecordMapper.xml new file mode 100644 index 00000000..f13636aa --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/mapper/support/SerialNumberRecordMapper.xml @@ -0,0 +1,32 @@ + + + + + + update t_serial_number_record + set last_number = #{lastNumber}, + count = count + #{count} + where + serial_number_id = #{serialNumberId} + and + record_date = #{recordDate} + + + + + + + + \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/resources/mapper/support/TableColumnMapper.xml b/smart-admin-api/sa-common/src/main/resources/mapper/support/TableColumnMapper.xml new file mode 100644 index 00000000..530888b1 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/mapper/support/TableColumnMapper.xml @@ -0,0 +1,18 @@ + + + + + delete + from t_table_column + where user_id = #{userId} + and table_id = #{tableId} + + + + \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/resources/pre/sa-common.yaml b/smart-admin-api/sa-common/src/main/resources/pre/sa-common.yaml new file mode 100644 index 00000000..7aea8a75 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/pre/sa-common.yaml @@ -0,0 +1,129 @@ +spring: + # 数据库连接信息 + datasource: + url: jdbc:p6spy:mysql://127.0.0.1:3306/smart_admin_v2_pre?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai + username: root + password: Lab1024 + initial-size: 5 + min-idle: 5 + max-active: 50 + max-wait: 60000 + time-between-eviction-runs-millis: 60000 + min-evictable-idle-time-millis: 300000 + driver-class-name: com.p6spy.engine.spy.P6SpyDriver + filters: stat + druid: + username: druid + password: 1024 + login: + enabled: true + method: + pointcut: net.lab1024.sa..*Service.* + + # redis 连接池配置信息 + redis: + database: 1 + host: 127.0.0.1 + lettuce: + pool: + max-active: 50 + min-idle: 5 + max-idle: 5 + max-wait: 30000ms + port: 6379 + timeout: 10000ms + password: + + # 上传文件大小配置 + servlet: + multipart: + max-file-size: 30MB + max-request-size: 30MB + + # json序列化相关配置 + jackson: + serialization: + write-enums-using-to-string: true + write-dates-as-timestamps: false + deserialization: + read-enums-using-to-string: true + fail-on-unknown-properties: false + default-property-inclusion: always + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 + + # 缓存实现类型 + cache: + type: caffeine + +# tomcat 配置,主要用于 配置 访问日志(便于将来排查错误) +server: + tomcat: + basedir: ${localPath:/home}/logs/smart_admin_v2/tomcat-logs + accesslog: + enabled: true + pattern: '%t %{X-Forwarded-For}i %a "%r" %s %D (%D ms)' + +#swagger: 提高swagger 方法名称有重复的日志提示 +logging: + level: + springfox: + documentation: + spring: + web: + readers: + operation: + CachingOperationNameGenerator: warn + scanners: + ApiListingReferenceScanner: warn + +# 文件上传 配置 +file: + storage: + mode: cloud + local: + path: ${localPath:/home}/smart_admin_v2/upload/ + cloud: + region: oss-cn-qingdao + endpoint: oss-cn-qingdao.aliyuncs.com + bucket-name: common-sit + access-key: + secret-key: + url: + expire: 7200000 + public: https://${file.storage.cloud.bucket-name}.${file.storage.cloud.endpoint}/ + +# swagger 配置 +swagger: + title: SmartAdmin + description: SmartAdmin 2.0 + version: 2.0 + host: localhost:${server.port} + package: net.lab1024.sa + tag-class: net.lab1024.sa.common.constant.SwaggerTagConst + team-url: https://www.1024lab.net/ + +# RestTemplate 请求配置 +http: + pool: + max-total: 20 + connect-timeout: 50000 + read-timeout: 50000 + write-timeout: 50000 + keep-alive: 300000 + +# token相关配置 +token: + key: sa-jwt-key + expire-day: 7 + +# 跨域配置 +access-control-allow-origin: '*' + +# 心跳配置 +heart-beat: + interval-seconds: 60 + +# 热加载配置 +reload: + interval-seconds: 60 \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/resources/prod/sa-common.yaml b/smart-admin-api/sa-common/src/main/resources/prod/sa-common.yaml new file mode 100644 index 00000000..3703ddfb --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/prod/sa-common.yaml @@ -0,0 +1,129 @@ +spring: + # 数据库连接信息 + datasource: + url: jdbc:p6spy:mysql://127.0.0.1:3306/smart_admin_v2_prod?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai + username: root + password: Lab1024 + initial-size: 10 + min-idle: 10 + max-active: 100 + max-wait: 60000 + time-between-eviction-runs-millis: 60000 + min-evictable-idle-time-millis: 300000 + driver-class-name: com.p6spy.engine.spy.P6SpyDriver + filters: stat + druid: + username: druid + password: 1024 + login: + enabled: true + method: + pointcut: net.lab1024.sa..*Service.* + + # redis 连接池配置信息 + redis: + database: 1 + host: 127.0.0.1 + lettuce: + pool: + max-active: 100 + min-idle: 10 + max-idle: 10 + max-wait: 30000ms + port: 6379 + timeout: 10000ms + password: + + # 上传文件大小配置 + servlet: + multipart: + max-file-size: 30MB + max-request-size: 30MB + + # json序列化相关配置 + jackson: + serialization: + write-enums-using-to-string: true + write-dates-as-timestamps: false + deserialization: + read-enums-using-to-string: true + fail-on-unknown-properties: false + default-property-inclusion: always + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 + + # 缓存实现类型 + cache: + type: caffeine + +# tomcat 配置,主要用于 配置 访问日志(便于将来排查错误) +server: + tomcat: + basedir: ${localPath:/home}/logs/smart_admin_v2/tomcat-logs + accesslog: + enabled: true + pattern: '%t %{X-Forwarded-For}i %a "%r" %s %D (%D ms)' + +#swagger: 提高swagger 方法名称有重复的日志提示 +logging: + level: + springfox: + documentation: + spring: + web: + readers: + operation: + CachingOperationNameGenerator: warn + scanners: + ApiListingReferenceScanner: warn + +# 文件上传 配置 +file: + storage: + mode: cloud + local: + path: ${localPath:/home}/smart_admin_v2/upload/ + cloud: + region: oss-cn-qingdao + endpoint: oss-cn-qingdao.aliyuncs.com + bucket-name: common-sit + access-key: + secret-key: + url: + expire: 7200000 + public: https://${file.storage.cloud.bucket-name}.${file.storage.cloud.endpoint}/ + +# swagger 配置 +swagger: + title: SmartAdmin + description: SmartAdmin 2.0 + version: 2.0 + host: localhost:${server.port} + package: net.lab1024.sa + tag-class: net.lab1024.sa.common.constant.SwaggerTagConst + team-url: https://www.1024lab.net/ + +# RestTemplate 请求配置 +http: + pool: + max-total: 20 + connect-timeout: 50000 + read-timeout: 50000 + write-timeout: 50000 + keep-alive: 300000 + +# token相关配置 +token: + key: sa-jwt-key + expire-day: 7 + +# 跨域配置 +access-control-allow-origin: '*' + +# 心跳配置 +heart-beat: + interval-seconds: 60 + +# 热加载配置 +reload: + interval-seconds: 60 \ No newline at end of file diff --git a/smart-admin-api/sa-common/src/main/resources/test/sa-common.yaml b/smart-admin-api/sa-common/src/main/resources/test/sa-common.yaml new file mode 100644 index 00000000..9cf5f478 --- /dev/null +++ b/smart-admin-api/sa-common/src/main/resources/test/sa-common.yaml @@ -0,0 +1,129 @@ +spring: + # 数据库连接信息 + datasource: + url: jdbc:p6spy:mysql://127.0.0.1:3306/smart_admin_v2_test?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai + username: root + password: Lab1024 + initial-size: 2 + min-idle: 5 + max-active: 20 + max-wait: 60000 + time-between-eviction-runs-millis: 60000 + min-evictable-idle-time-millis: 300000 + driver-class-name: com.p6spy.engine.spy.P6SpyDriver + filters: stat + druid: + username: druid + password: 1024 + login: + enabled: true + method: + pointcut: net.lab1024.sa..*Service.* + + # redis 连接池配置信息 + redis: + database: 1 + host: 127.0.0.1 + lettuce: + pool: + max-active: 10 + min-idle: 1 + max-idle: 3 + max-wait: 30000ms + port: 6379 + timeout: 10000ms + password: + + # 上传文件大小配置 + servlet: + multipart: + max-file-size: 30MB + max-request-size: 30MB + + # json序列化相关配置 + jackson: + serialization: + write-enums-using-to-string: true + write-dates-as-timestamps: false + deserialization: + read-enums-using-to-string: true + fail-on-unknown-properties: false + default-property-inclusion: always + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 + + # 缓存实现类型 + cache: + type: caffeine + +# tomcat 配置,主要用于 配置 访问日志(便于将来排查错误) +server: + tomcat: + basedir: ${localPath:/home}/logs/smart_admin_v2/tomcat-logs + accesslog: + enabled: true + pattern: '%t %{X-Forwarded-For}i %a "%r" %s %D (%D ms)' + +#swagger: 提高swagger 方法名称有重复的日志提示 +logging: + level: + springfox: + documentation: + spring: + web: + readers: + operation: + CachingOperationNameGenerator: warn + scanners: + ApiListingReferenceScanner: warn + +# 文件上传 配置 +file: + storage: + mode: cloud + local: + path: ${localPath:/home}/smart_admin_v2/upload/ + cloud: + region: oss-cn-qingdao + endpoint: oss-cn-qingdao.aliyuncs.com + bucket-name: common-sit + access-key: + secret-key: + url: + expire: 7200000 + public: https://${file.storage.cloud.bucket-name}.${file.storage.cloud.endpoint}/ + +# swagger 配置 +swagger: + title: SmartAdmin + description: SmartAdmin 2.0 + version: 2.0 + host: localhost:${server.port} + package: net.lab1024.sa + tag-class: net.lab1024.sa.common.constant.SwaggerTagConst + team-url: https://www.1024lab.net/ + +# RestTemplate 请求配置 +http: + pool: + max-total: 20 + connect-timeout: 50000 + read-timeout: 50000 + write-timeout: 50000 + keep-alive: 300000 + +# token相关配置 +token: + key: sa-jwt-key + expire-day: 7 + +# 跨域配置 +access-control-allow-origin: '*' + +# 心跳配置 +heart-beat: + interval-seconds: 60 + +# 热加载配置 +reload: + interval-seconds: 60 \ No newline at end of file diff --git a/smart-admin-api/sa-parent/pom.xml b/smart-admin-api/sa-parent/pom.xml new file mode 100644 index 00000000..c4441069 --- /dev/null +++ b/smart-admin-api/sa-parent/pom.xml @@ -0,0 +1,352 @@ + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.5.2 + + + net.1024lab + sa-parent + 1.0.0 + pom + + sa-parent + sa-parent project + + + 1.8 + 2.0.8 + 3.4.1 + 3.8.6 + 2.7.0 + 1.2.62 + 1.1.21 + 1.4.2 + 20.0 + 1.21 + 2.3.2 + 0.9.11 + 2.6 + 3.12.0 + 4.4 + 1.13 + 4.2.0 + 2.12.0 + 4.1.1 + 1.3 + 1.11.842 + 2.17.2 + 5.7.22 + 2.3 + 0.9.1 + 0.9.0 + 3.1 + + + + + + + org.springframework + spring-mock + ${spring-mock.version} + + + commons-logging + commons-logging + + + + + + com.baomidou + mybatis-plus-boot-starter + ${mybatis-plus.version} + + + org.springframework.boot + spring-boot-starter-logging + + + + + + p6spy + p6spy + ${p6spy.version} + + + + io.springfox + springfox-swagger2 + ${swagger.version} + + + guava + com.google.guava + + + + + + io.springfox + springfox-swagger-ui + ${swagger.version} + + + + com.alibaba + fastjson + ${fastjson.version} + + + + com.alibaba + druid + ${druid.version} + + + + com.googlecode.concurrentlinkedhashmap + concurrentlinkedhashmap-lru + ${google-linkedhashmap.version} + + + + com.google.guava + guava + ${google-guava.version} + + + + eu.bitwalker + UserAgentUtils + ${user-agent-utils.version} + + + + com.github.penggle + kaptcha + ${kaptcha.version} + + + + org.reflections + reflections + ${reflections.version} + + + guava + com.google.guava + + + + + + commons-io + commons-io + ${commons-io.version} + + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + + org.apache.commons + commons-collections4 + ${commons-collections4.version} + + + + commons-codec + commons-codec + ${commons-codec.version} + + + + + cn.afterturn + easypoi-spring-boot-starter + ${easypoi.version} + + + + cn.afterturn + easypoi-web + ${easypoi.version} + + + javassist + org.javassist + + + guava + com.google.guava + + + + + + + xerces + xercesImpl + ${xerces.version} + + + org.apache.poi + poi-scratchpad + ${poi-scratchpad.version} + + + + + org.apache.poi + ooxml-schemas + ${poi-ooxml-schemas.version} + + + + com.amazonaws + aws-java-sdk-s3 + ${aws-java-sdk.version} + + + commons-logging + commons-logging + + + + + + org.apache.logging.log4j + log4j-spring-boot + ${log4j-spring-boot.version} + + + + cn.hutool + hutool-all + ${hutool.version} + + + + io.jsonwebtoken + jjwt + ${jjwt.version} + + + + com.auth0 + jwks-rsa + ${jwks-rsa.version} + + + + + org.apache.velocity + velocity-engine-core + ${velocity-engine-core.version} + + + org.apache.velocity.tools + velocity-tools-generic + ${velocity-tools.version} + + + + + + + + ${profiles.active}-${project.name} + + + false + src/main/resources + + dev/* + sit/* + pre/* + prod/* + + + + + src/main/resources/${profiles.active} + true + + *.yaml + + + + + src/main/resources/${profiles.active} + false + + *.* + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.2 + + 1.8 + 1.8 + UTF-8 + + + + org.apache.maven.plugins + maven-surefire-plugin + + true + true + + + + + + + + + dev + + dev + + + true + + + + + test + + test + + + + + pre + + pre + + + + + prod + + prod + + + + + \ No newline at end of file diff --git a/smart-admin-h5/.browserslistrc b/smart-admin-h5/.browserslistrc deleted file mode 100644 index d6471a38..00000000 --- a/smart-admin-h5/.browserslistrc +++ /dev/null @@ -1,2 +0,0 @@ -> 1% -last 2 versions diff --git a/smart-admin-h5/.editorconfig b/smart-admin-h5/.editorconfig deleted file mode 100644 index 4881e66d..00000000 --- a/smart-admin-h5/.editorconfig +++ /dev/null @@ -1,15 +0,0 @@ -root = true - -[*] -# 字符 -charset = utf-8 -# 空格 -indent_style = space -# 2个空格缩进 -indent_size = 2 -# 换行符 -end_of_line = lf -# 文件的最后插入一个空行 -insert_final_newline = true -# 删除行尾的空格 -trim_trailing_whitespace = true diff --git a/smart-admin-h5/.env.development b/smart-admin-h5/.env.development deleted file mode 100644 index b698907c..00000000 --- a/smart-admin-h5/.env.development +++ /dev/null @@ -1,3 +0,0 @@ -NODE_ENV = development -VUE_APP_ENV = dev -VUE_APP_URL = http://127.0.0.1:10086/smart-admin-api diff --git a/smart-admin-h5/.env.local b/smart-admin-h5/.env.local deleted file mode 100644 index 6d07d04c..00000000 --- a/smart-admin-h5/.env.local +++ /dev/null @@ -1,3 +0,0 @@ -NODE_ENV = development -VUE_APP_ENV = local -VUE_APP_URL = http://127.0.0.1:10086/smart-admin-api diff --git a/smart-admin-h5/.env.pre b/smart-admin-h5/.env.pre deleted file mode 100644 index 80c46b0e..00000000 --- a/smart-admin-h5/.env.pre +++ /dev/null @@ -1,3 +0,0 @@ -NODE_ENV = production -VUE_APP_ENV = pre -VUE_APP_URL = http://smartadmin.1024lab.net/smart-admin-api diff --git a/smart-admin-h5/.env.prod b/smart-admin-h5/.env.prod deleted file mode 100644 index 0e1616d4..00000000 --- a/smart-admin-h5/.env.prod +++ /dev/null @@ -1,3 +0,0 @@ -NODE_ENV = production -VUE_APP_ENV = prod -VUE_APP_URL = http://smartadmin.1024lab.net/smart-admin-api diff --git a/smart-admin-h5/.env.sit b/smart-admin-h5/.env.sit deleted file mode 100644 index 411bc968..00000000 --- a/smart-admin-h5/.env.sit +++ /dev/null @@ -1,3 +0,0 @@ -NODE_ENV = production -VUE_APP_ENV = sit -VUE_APP_URL = http://smartadmin.1024lab.net/smart-admin-api diff --git a/smart-admin-h5/.eslintignore b/smart-admin-h5/.eslintignore deleted file mode 100644 index 7c435adc..00000000 --- a/smart-admin-h5/.eslintignore +++ /dev/null @@ -1,7 +0,0 @@ - -# 忽略项目中某些文件的提交代码规范 - -build/*.js -src/assets -public -dist diff --git a/smart-admin-h5/.eslintrc.js b/smart-admin-h5/.eslintrc.js deleted file mode 100644 index 27350869..00000000 --- a/smart-admin-h5/.eslintrc.js +++ /dev/null @@ -1,232 +0,0 @@ -module.exports = { - root: true, - env: { - node: true - }, - extends: [ - 'plugin:vue/essential', - 'eslint:recommended' - ], - parserOptions: { - parser: 'babel-eslint' - }, - rules: { - // 具体请看 https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/max-attributes-per-line.md - 'vue/max-attributes-per-line': [ - 2, - { - singleline: 10, - multiline: { - max: 1, - allowFirstLine: false - } - } - ], - // 在单行元素的内容前后需要换行符 - 'vue/singleline-html-element-content-newline': 'off', - // 在多行元素的内容之前和之后需要换行符 - 'vue/multiline-html-element-content-newline': 'off', - // JS/JSX中的组件名应该 大写驼峰 命名法 - 'vue/name-property-casing': ['error', 'PascalCase'], - // 给v-for设置键值,与key结合使用,可以高效的更新虚拟DOM - "vue/require-v-for-key": 1, - 'vue/no-v-html': 'off', - // 在对象中强制使用getter/setter - 'accessor-pairs': 2, - // 在箭头函数之前/之后需要空格 - 'arrow-spacing': [ - 2, - { - before: true, - after: true - } - ], - // 在打开块之后和关闭块之前,禁止或强制执行块内部的空格 - 'block-spacing': [2, 'always'], - // 需要大括号样式 - 'brace-style': [ - 2, - '1tbs', - { - allowSingleLine: true - } - ], - // 需要驼峰命名 - camelcase: [ - 0, - { - properties: 'always' - } - ], - // 要求或禁止使用尾随逗号;最后一个属性是不需要逗号 - 'comma-dangle': [2, 'never'], - // 强制逗号旁边的间距: 左右一个空格 - 'comma-spacing': [ - 2, - { - before: false, - after: true - } - ], - // 逗号风格 - 'comma-style': [2, 'last'], - // 构建方法中使用super方法 - 'constructor-super': 2, - curly: [2, 'multi-line'], - // 在dot之前和之后强制换行 - 'dot-location': [2, 'property'], - // 在文件末尾要求或禁止换行 - 'eol-last': 2, - // 是否使用全等 - eqeqeq: ['error', 'always', { null: 'ignore' }], - // 在生成器函数中强制执行*周围的间距 - 'generator-star-spacing': [2, { - 'before': true, - 'after': true - }], - // 强制执行回调错误处理 - 'handle-callback-err': [1, '^(err|error)$'], - // 强制执行一致的缩进 - 'indent': [2, 2, { - 'SwitchCase': 1 - }], - // 强制在JSX文件中一致使用单引号 - 'jsx-quotes': [2, 'prefer-single'], - // 在对象属性中强制键和值之间的一致间距 - 'key-spacing': [2, { - 'beforeColon': false, - 'afterColon': true - }], - // 关键字前后强制执行一致的间距 - 'keyword-spacing': [2, { - 'before': true, - 'after': true - }], - // 要求构造函数名称以大写字母开头 - 'new-cap': [2, { - 'newIsCap': true, - 'capIsNew': false - }], - 'new-parens': 2, // 调用不带参数的函数时需要括号 - 'no-array-constructor': 2, // 禁止阵列构建器 - 'no-caller': 2, // 禁止使用来电者/被叫者 - 'no-console': 'off', // 不允许使用控制台 - 'no-class-assign': 2, // 禁止修改类声明的变量 - 'no-cond-assign': 2, // 在条件语句中禁止赋值运算符 - 'no-const-assign': 2, // 禁止修改使用const声明的变量 - 'no-control-regex': 0, // 禁止正则表达式中的控制字符 - 'no-delete-var': 2, // 禁止删除变量 - 'no-dupe-args': 2, // 在函数定义中禁止重复参数 - 'no-dupe-class-members': 2, // 禁止在类成员中重复名称 - 'no-dupe-keys': 2, // 禁止对象重复声明属性 - 'no-duplicate-case': 2, // 规则禁止重复案例标签 - 'no-empty-character-class': 2, // 禁止在正则表达式中使用空字符类 - 'no-empty-pattern': 2, // 不允许空的解构模式 - 'no-eval': 2, // 禁止使用eval() - 'no-ex-assign': 2, // 禁止在catch子句中重新分配异常 - 'no-extend-native': 2, // 禁止扩展原生对象 - 'no-extra-bind': 2, // 禁止不必要的功能绑定 - 'no-extra-boolean-cast': 2, // 禁止不必要的布尔类型转换 - 'no-extra-parens': [2, 'functions'], // 禁止不必要的括号 - 'no-fallthrough': 2, // 禁止太多陈述描述 - 'no-floating-decimal': 2, // 禁止浮动小数 - 'no-func-assign': 2, // 禁止重新分配函数声明 - 'no-implied-eval': 2, - 'no-inner-declarations': [2, 'functions'], // 禁止嵌套块中的变量或函数声明 - 'no-invalid-regexp': 2, // 禁止在RegExp中使用无效的正则表达式字符串 - 'no-irregular-whitespace': 2, // 不允许不规则的空白 - 'no-iterator': 2, // 禁止迭代器 - 'no-label-var': 2, // 禁止变量名称的标签 - 'no-labels': [2, { - 'allowLoop': false, - 'allowSwitch': false - }], - 'no-lone-blocks': 2, // 禁止不必要的嵌套块 - 'no-mixed-spaces-and-tabs': 2, // 禁止使用混合空格和制表符进行缩进 - 'no-multi-spaces': 2, // 禁止多个空格 - 'no-multi-str': 2, // 禁止多行字符串 - 'no-multiple-empty-lines': [2, { // 禁止多个空行 - 'max': 1 - }], - 'no-native-reassign': 2, - 'no-negated-in-lhs': 2, - 'no-new-object': 2, - 'no-new-require': 2, - 'no-new-symbol': 2, - 'no-new-wrappers': 2, - 'no-obj-calls': 2, - 'no-octal': 2, - 'no-octal-escape': 2, - 'no-path-concat': 2, - 'no-proto': 2, - 'no-redeclare': 2, - 'no-regex-spaces': 2, - 'no-return-assign': [2, 'except-parens'], - 'no-self-assign': 2, - 'no-self-compare': 2, - 'no-sequences': 2, - 'no-shadow-restricted-names': 2, - 'no-spaced-func': 2, - 'no-sparse-arrays': 2, - 'no-this-before-super': 2, - 'no-throw-literal': 2, - 'no-trailing-spaces': 2, - 'no-undef': 0, - 'no-undef-init': 2, - 'no-unexpected-multiline': 2, - 'no-unmodified-loop-condition': 2, // 禁止未修改的循环条件 - 'no-unneeded-ternary': [2, { // 当存在更简单的替代方案时,不允许三元运算符 - 'defaultAssignment': false - }], - 'no-unreachable': 2, // 返回,抛出,继续和中断语句后禁止无法访问的代码 - 'no-unsafe-finally': 2, // 禁止finally块中的控制流语句 - 'no-unused-vars': [2, { // 禁止使用未声明的变量 - 'vars': 'all', - 'args': 'none' - }], - 'no-useless-call': 2, // 禁止不必要的call()和apply()方法 - 'no-useless-computed-key': 2, // 禁止在对象上使用不必要的计算属性键 - 'no-useless-constructor': 2, // 禁止不必要的构造方法 - 'no-useless-escape': 0, // 禁止不必要的转义用法 - 'no-whitespace-before-property': 2, // 在属性之前禁止空格 - 'no-with': 2, - 'one-var': [2, { - 'initialized': 'never' - }], - 'operator-linebreak': [2, 'after', { // 为维护强制执行一致的换行方式 - 'overrides': { - '?': 'before', - ':': 'before' - } - }], - 'padded-blocks': [2, 'never'], // 在块内要求或禁止填充 - 'quotes': [2, 'single', { - 'avoidEscape': true, - 'allowTemplateLiterals': true - }], - semi: ["error", "always"], - 'space-before-blocks': [2, 'always'], // 不要存在多余的块空间 - 'space-before-function-paren': [2, 'never'], - 'space-in-parens': [2, 'never'], - 'space-infix-ops': 2, - 'space-unary-ops': [2, { - 'words': true, - 'nonwords': false - }], - 'spaced-comment': [2, 'always', { - 'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ','] - }], - 'template-curly-spacing': [2, 'never'], - 'use-isnan': 2, - 'valid-typeof': 2, - 'wrap-iife': [2, 'any'], - 'yield-star-spacing': [2, 'both'], - 'yoda': [2, 'never'], - 'prefer-const': 1, - 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0, - 'object-curly-spacing': [2, 'always', { - objectsInObjects: false - }], - 'array-bracket-spacing': [2, 'never'] - } -} diff --git a/smart-admin-h5/.gitignore b/smart-admin-h5/.gitignore deleted file mode 100644 index 24d694ca..00000000 --- a/smart-admin-h5/.gitignore +++ /dev/null @@ -1,22 +0,0 @@ -node_modules -/dist - -# Log files -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Editor directories and files -.DS_Store -.idea -.vscode -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? - -package-lock.json -yarn.lock - -build/env.js diff --git a/smart-admin-h5/.postcssrc.js b/smart-admin-h5/.postcssrc.js deleted file mode 100644 index e2783a57..00000000 --- a/smart-admin-h5/.postcssrc.js +++ /dev/null @@ -1,11 +0,0 @@ -module.exports = { - plugins: { - autoprefixer: { - overrideBrowserslist: ['Android 4.1', 'iOS 7.1', 'Chrome > 31', 'ff > 31', 'ie >= 8'] - }, - 'postcss-pxtorem': { - rootValue: 37.5, - propList: ['*'], - } - } -} diff --git a/smart-admin-h5/.prettierrc.js b/smart-admin-h5/.prettierrc.js deleted file mode 100644 index c19422ec..00000000 --- a/smart-admin-h5/.prettierrc.js +++ /dev/null @@ -1,31 +0,0 @@ -module.exports = { - // 缩进字节数 - tabWidth: 2, - // 使用单引号代替双引号 - singleQuote: true, - // 在对象或数组最后一个元素后面是否加逗号(在ES5中加尾逗号) - trailingComma: 'none', - // 句尾添加分号 - semi: true, - // 默认值。因为使用了一些折行敏感型的渲染器(如GitHub comment)而按照markdown文本样式进行折行 - proseWrap: 'always', - // (x) => {} 箭头函数参数只有一个时是否要有小括号。avoid:省略括号 - arrowParens: 'avoid', - // 在对象,数组括号与文字之间加空格 "{ foo: bar }" - bracketSpacing: true, - // 在jsx中把'>' 是否单独放一行 - jsxBracketSameLine: false, - // 缩进不使用tab,使用空格 - useTabs: false, - // 不让prettier使用eslint的代码格式进行校验 - eslintIntegration: true, - overrides: [ - { - files: '.prettierrc', - options: { - parser: 'json' - } - } - ], - endOfLine: 'auto' -} diff --git a/smart-admin-h5/.sentryclirc b/smart-admin-h5/.sentryclirc deleted file mode 100644 index b6f61dbd..00000000 --- a/smart-admin-h5/.sentryclirc +++ /dev/null @@ -1,7 +0,0 @@ -[defaults] -url = https://sentry.1024lab.net/ -org = 1024lab-sentry -project = smart-admin-h5 - -[auth] -token = 8dflijsldjkasdo3u49230948pkjdasoia8023jl3k4jr29o81029i40534p545ke diff --git a/smart-admin-h5/README.md b/smart-admin-h5/README.md deleted file mode 100644 index c5f8fa10..00000000 --- a/smart-admin-h5/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# SmartAdmin-H5 - -#### 介绍 -SmartAdmin-H5 是SmartAdmin 平台的移动端web项目 diff --git a/smart-admin-h5/babel.config.js b/smart-admin-h5/babel.config.js deleted file mode 100644 index 58b18fe8..00000000 --- a/smart-admin-h5/babel.config.js +++ /dev/null @@ -1,16 +0,0 @@ - -module.exports = { - presets: [['@vue/cli-plugin-babel/preset', {useBuiltIns: 'usage', corejs: 3}]], - plugins:[ - // vant-ui 按需引入,详情:https://github.com/ElementUI/babel-plugin-component - // [ - // 'import', - // { - // libraryName: 'vant', - // libraryDirectory: 'es', - // style: true - // }, - // 'vant' - // ] - ] -}; diff --git a/smart-admin-h5/package.json b/smart-admin-h5/package.json deleted file mode 100644 index cd09ecb3..00000000 --- a/smart-admin-h5/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "smart-admin-h5", - "version": "1.0.0", - "description": "基于vue和vant的h5模板", - "author": "zhuoluodada@qq.com", - "private": true, - "scripts": { - "local": "vue-cli-service serve --open --mode local", - "dev": "vue-cli-service serve --open", - "build": "vue-cli-service build", - "build:sit": "vue-cli-service build --mode sit", - "build:pre": "vue-cli-service build --mode pre", - "build:prod": "vue-cli-service build --mode prod", - "stage": "vue-cli-service build --mode staging", - "lint": "vue-cli-service lint" - }, - "dependencies": { - "@sentry/browser": "^5.13.2", - "@sentry/integrations": "^5.13.2", - "axios": "^0.19.2", - "core-js": "^3.6.5", - "fastclick": "^1.0.6", - "js-cookie": "^2.2.1", - "lib-flexible": "^0.3.2", - "lodash": "^4.17.20", - "moment": "^2.29.0", - "nprogress": "^0.2.0", - "regenerator-runtime": "^0.13.5", - "vant": "^2.11.1", - "vue": "^2.6.12", - "vue-enum": "^1.0.5", - "vue-loading-overlay": "^3.4.2", - "vue-router": "^3.4.0", - "vuex": "^3.6.0" - }, - "devDependencies": { - "@sentry/webpack-plugin": "^1.11.1", - "@vue/cli-plugin-babel": "~4.5.0", - "@vue/cli-plugin-eslint": "~4.5.0", - "@vue/cli-plugin-router": "~4.5.0", - "@vue/cli-plugin-vuex": "~4.5.0", - "@vue/cli-service": "~4.5.0", - "babel-eslint": "^10.1.0", - "babel-plugin-import": "^1.13.0", - "babel-plugin-transform-remove-console": "^6.9.4", - "compression-webpack-plugin": "^3.1.0", - "eslint": "^6.7.2", - "eslint-plugin-vue": "^6.2.2", - "node-sass": "^4.14.1", - "postcss-pxtorem": "^5.1.1", - "sass": "^1.3.0", - "sass-loader": "^9.0.3", - "script-ext-html-webpack-plugin": "^2.1.5", - "uglifyjs-webpack-plugin": "^2.2.0", - "vue-template-compiler": "^2.6.12", - "webpack-bundle-analyzer": "^4.2.0" - } -} diff --git a/smart-admin-h5/public/index.html b/smart-admin-h5/public/index.html deleted file mode 100644 index 5f5a1f86..00000000 --- a/smart-admin-h5/public/index.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - <% if (process.env.NODE_ENV === 'production') { %> - <% for(var css of htmlWebpackPlugin.options.cdn.css) { %> - - - <% } %> <% for(var js of htmlWebpackPlugin.options.cdn.js) { %> - - - <% } %> <% } %> - - - - <% if (process.env.NODE_ENV === 'development') { %> - - <% } %> - - - - - - <%= htmlWebpackPlugin.options.title %> - - - - - -

- - - diff --git a/smart-admin-h5/src/App.vue b/smart-admin-h5/src/App.vue deleted file mode 100644 index f3b5bda4..00000000 --- a/smart-admin-h5/src/App.vue +++ /dev/null @@ -1,16 +0,0 @@ - - - - diff --git a/smart-admin-h5/src/api/employee.js b/smart-admin-h5/src/api/employee.js deleted file mode 100644 index 76f30459..00000000 --- a/smart-admin-h5/src/api/employee.js +++ /dev/null @@ -1,43 +0,0 @@ -import { postAxios, getAxios } from '@/lib/http'; -export const employeeApi = { - // 员工管理查询 - getEmployeeList: (data) => { - return postAxios('admin/employee/query', data); - }, - // 添加员工 - addEmployee: (data) => { - return postAxios('admin/employee/add', data); - }, - // 更新员工信息 - updateEmployee: (data) => { - return postAxios('admin/employee/update', data); - }, - // 禁用启用单个员工 - updateStatus: (employeeId, status) => { - return getAxios('admin/employee/updateStatus/' + employeeId + '/' + status); - }, - // 批量禁用 - updateStatusBatch: (data) => { - return postAxios('admin/employee/batchUpdateStatus', data); - }, - // 单个员工角色授权 - updateRoles: (data) => { - return postAxios('admin/employee/updateRoles', data); - }, - // 修改密码 - updatePwd: (data) => { - return postAxios('admin/employee/updatePwd', data); - }, - // 重置密码 - resetPassword: (employeeId) => { - return getAxios('admin/employee/resetPasswd/' + employeeId); - }, - // 通过部门id获取当前部门的人员&没有部门的人 - getListEmployeeByDeptId: (departmentId) => { - return getAxios('admin/employee/listEmployeeByDeptId/' + departmentId); - }, - // 删除员工 - deleteEmployee: (employeeId) => { - return postAxios('admin/employee/delete/' + employeeId); - } -}; diff --git a/smart-admin-h5/src/api/file.js b/smart-admin-h5/src/api/file.js deleted file mode 100644 index 2bc1a85a..00000000 --- a/smart-admin-h5/src/api/file.js +++ /dev/null @@ -1,14 +0,0 @@ -import { postAxios, getAxios } from '@/lib/http'; -import config from '@/config'; -import Cookies from '@/lib/cookie'; -const baseUrl = config.baseUrl.apiUrl; - -export const fileApi = { - // 文件上传 - fileUpload: (folder, data) => { - const url = baseUrl + '/common/file/upload/' + folder + '?x-access-token=' + Cookies.getToken(); - return postAxios(url, data, { - headers: { 'Content-Type': 'multipart/form-data' } - }); - } -}; diff --git a/smart-admin-h5/src/api/login.js b/smart-admin-h5/src/api/login.js deleted file mode 100644 index aad9ae16..00000000 --- a/smart-admin-h5/src/api/login.js +++ /dev/null @@ -1,10 +0,0 @@ -import { getAxios, postAxios } from '@/lib/http'; - -export const loginApi = { - login: (data) => { - return postAxios('/session/login', data); - }, - logout: (token) => { - return getAxios(`/session/logOut?x-access-token=${token}`); - } -}; diff --git a/smart-admin-h5/src/api/system-config.js b/smart-admin-h5/src/api/system-config.js deleted file mode 100644 index a9384d21..00000000 --- a/smart-admin-h5/src/api/system-config.js +++ /dev/null @@ -1,31 +0,0 @@ -// 系统参数API -import { - postAxios, - getAxios -} from '@/lib/http'; -export const systemConfigApi = { - // 查询系统参数列表 - getSystemConfigList: (data) => { - return postAxios('/admin/systemConfig/getListPage', data); - }, - // 添加系统参数 - addSystemConfig: (data) => { - return postAxios('/admin/systemConfig/add', data); - }, - // 更新单条系统参数 - updateSystemConfig: (data) => { - return postAxios('/admin/systemConfig/update', data); - }, - // 通过key获取对应的信息 - getConfigListByKey: (key) => { - return getAxios(`/admin/systemConfig/selectByKey?configKey=${key}`); - }, - // 根据分组查询所有系统配置 - getListByGroup: (group) => { - return getAxios(`/admin/systemConfig/getListByGroup?group=${group}`); - }, - // 获取系统版本信息 - getCodeVersion: () => { - return getAxios('/admin/codeVersion'); - } -}; diff --git a/smart-admin-h5/src/api/user.js b/smart-admin-h5/src/api/user.js deleted file mode 100644 index 7d2b2a83..00000000 --- a/smart-admin-h5/src/api/user.js +++ /dev/null @@ -1,7 +0,0 @@ -import { getAxios } from '@/lib/http'; - -export const userApi = { - getSession: () => { - return getAxios('/session/get'); - } -}; diff --git a/smart-admin-h5/src/assets/css/index.scss b/smart-admin-h5/src/assets/css/index.scss deleted file mode 100644 index 27597440..00000000 --- a/smart-admin-h5/src/assets/css/index.scss +++ /dev/null @@ -1,5 +0,0 @@ -$text-color: #323233; -$border-color: #ebedf0; -$active-color: #f2f3f5; -$background-color: #f7f8fa; -$background-color-light: #fafafa; diff --git a/smart-admin-h5/src/assets/logo.png b/smart-admin-h5/src/assets/logo.png deleted file mode 100644 index f3d2503fc2a44b5053b0837ebea6e87a2d339a43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6849 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 - -
- - - -
- 全选 - 反选 -
- - - - - - diff --git a/smart-admin-h5/src/components/form/select-picker/SmartEnumSelectPicker.vue b/smart-admin-h5/src/components/form/select-picker/SmartEnumSelectPicker.vue deleted file mode 100644 index 976211d1..00000000 --- a/smart-admin-h5/src/components/form/select-picker/SmartEnumSelectPicker.vue +++ /dev/null @@ -1,61 +0,0 @@ - - - - diff --git a/smart-admin-h5/src/components/form/select-picker/SmartSelectPicker b/smart-admin-h5/src/components/form/select-picker/SmartSelectPicker deleted file mode 100644 index c15bf200..00000000 --- a/smart-admin-h5/src/components/form/select-picker/SmartSelectPicker +++ /dev/null @@ -1,59 +0,0 @@ - - - - - diff --git a/smart-admin-h5/src/components/mixin/session-mixin.js b/smart-admin-h5/src/components/mixin/session-mixin.js deleted file mode 100644 index 94026bb0..00000000 --- a/smart-admin-h5/src/components/mixin/session-mixin.js +++ /dev/null @@ -1,25 +0,0 @@ -import cookie from '@/lib/cookie'; -import { userApi } from 'api/user'; - -/** - * 此 mixin为登录以后的页面用的,因为所有的有效路由(排除登录、注册、404,500 这个几个特殊页面)都会走 App.vue里的router - * @author zhuoda - */ -export default { - created: function() { - const token = cookie.getToken(); - // 如果登录过,获取token - if (token && !this.$store.state.user.isHaveGotSessionInfo) { - (async() => { - try { - console.debug(' request session info '); - const res = await userApi.getSession(); - const loginInfo = res.data; - this.$store.commit('user/updateSession', loginInfo); - } catch (e) { - this.$smartSentry.captureException(e); - } - })(); - } - } -}; diff --git a/smart-admin-h5/src/components/van-bar/BackNavBar.vue b/smart-admin-h5/src/components/van-bar/BackNavBar.vue deleted file mode 100644 index bca0b99e..00000000 --- a/smart-admin-h5/src/components/van-bar/BackNavBar.vue +++ /dev/null @@ -1,24 +0,0 @@ - - - diff --git a/smart-admin-h5/src/components/van-bar/RouterNavBar.vue b/smart-admin-h5/src/components/van-bar/RouterNavBar.vue deleted file mode 100644 index 355a57d6..00000000 --- a/smart-admin-h5/src/components/van-bar/RouterNavBar.vue +++ /dev/null @@ -1,27 +0,0 @@ - - - diff --git a/smart-admin-h5/src/config/index.js b/smart-admin-h5/src/config/index.js deleted file mode 100644 index dafb4212..00000000 --- a/smart-admin-h5/src/config/index.js +++ /dev/null @@ -1,46 +0,0 @@ -console.log('project api url : ', process.env.VUE_APP_URL); - -const isProductionEnv = ['production'].includes(process.env.NODE_ENV); - -module.exports = { - // 配置显示在浏览器标签的title - title: 'Smart-Admin-H5', - // token在Cookie中存储的天数,默认7天 - cookieExpires: 7, - /** - * @description api请求基础路径 - */ - baseUrl: { - apiUrl: process.env.VUE_APP_URL, - erpApiUrl: process.env.VUE_APP_ERP_URL, - webSocketUrl: process.env.VUE_APP_SOCKET_URL - }, - /** - * 打包后静态资源地址;如果是走cdn的话,可以配置如下: - * publicPath: isProd ? 'https://cdn.1024lab.net/static/smart-h5/' : '/' - */ - publicPath: isProductionEnv ? '/manage-h5/' : '/', - - // ==================== cdn 相关 begin ==================== - cdn: { - cdnResource: { - css: [], - js: [ - 'https://cdn.bootcss.com/vue/2.6.11/vue.min.js', - 'https://cdn.bootcss.com/vue-router/3.2.0/vue-router.min.js', - 'https://cdn.bootcdn.net/ajax/libs/vuex/3.5.1/vuex.min.js', - 'https://cdn.bootcss.com/axios/0.19.2/axios.min.js', - 'https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.20/lodash.min.js' - ] - }, - // 指定资源加载cdn - externals: { - vue: 'Vue', - 'vue-router': 'VueRouter', - vuex: 'Vuex', - axios: 'axios', - lodash: '_' - } - } - // ==================== cdn 相关 end ==================== -}; diff --git a/smart-admin-h5/src/constants/area.js b/smart-admin-h5/src/constants/area.js deleted file mode 100644 index 26e2ca99..00000000 --- a/smart-admin-h5/src/constants/area.js +++ /dev/null @@ -1,4047 +0,0 @@ -export default { - province_list: { - 110000: '北京市', - 120000: '天津市', - 130000: '河北省', - 140000: '山西省', - 150000: '内蒙古自治区', - 210000: '辽宁省', - 220000: '吉林省', - 230000: '黑龙江省', - 310000: '上海市', - 320000: '江苏省', - 330000: '浙江省', - 340000: '安徽省', - 350000: '福建省', - 360000: '江西省', - 370000: '山东省', - 410000: '河南省', - 420000: '湖北省', - 430000: '湖南省', - 440000: '广东省', - 450000: '广西壮族自治区', - 460000: '海南省', - 500000: '重庆市', - 510000: '四川省', - 520000: '贵州省', - 530000: '云南省', - 540000: '西藏自治区', - 610000: '陕西省', - 620000: '甘肃省', - 630000: '青海省', - 640000: '宁夏回族自治区', - 650000: '新疆维吾尔自治区', - 710000: '台湾省', - 810000: '香港特别行政区', - 820000: '澳门特别行政区', - 900000: '海外' - }, - city_list: { - 110100: '北京市', - 120100: '天津市', - 130100: '石家庄市', - 130200: '唐山市', - 130300: '秦皇岛市', - 130400: '邯郸市', - 130500: '邢台市', - 130600: '保定市', - 130700: '张家口市', - 130800: '承德市', - 130900: '沧州市', - 131000: '廊坊市', - 131100: '衡水市', - 140100: '太原市', - 140200: '大同市', - 140300: '阳泉市', - 140400: '长治市', - 140500: '晋城市', - 140600: '朔州市', - 140700: '晋中市', - 140800: '运城市', - 140900: '忻州市', - 141000: '临汾市', - 141100: '吕梁市', - 150100: '呼和浩特市', - 150200: '包头市', - 150300: '乌海市', - 150400: '赤峰市', - 150500: '通辽市', - 150600: '鄂尔多斯市', - 150700: '呼伦贝尔市', - 150800: '巴彦淖尔市', - 150900: '乌兰察布市', - 152200: '兴安盟', - 152500: '锡林郭勒盟', - 152900: '阿拉善盟', - 210100: '沈阳市', - 210200: '大连市', - 210300: '鞍山市', - 210400: '抚顺市', - 210500: '本溪市', - 210600: '丹东市', - 210700: '锦州市', - 210800: '营口市', - 210900: '阜新市', - 211000: '辽阳市', - 211100: '盘锦市', - 211200: '铁岭市', - 211300: '朝阳市', - 211400: '葫芦岛市', - 220100: '长春市', - 220200: '吉林市', - 220300: '四平市', - 220400: '辽源市', - 220500: '通化市', - 220600: '白山市', - 220700: '松原市', - 220800: '白城市', - 222400: '延边朝鲜族自治州', - 230100: '哈尔滨市', - 230200: '齐齐哈尔市', - 230300: '鸡西市', - 230400: '鹤岗市', - 230500: '双鸭山市', - 230600: '大庆市', - 230700: '伊春市', - 230800: '佳木斯市', - 230900: '七台河市', - 231000: '牡丹江市', - 231100: '黑河市', - 231200: '绥化市', - 232700: '大兴安岭地区', - 310100: '上海市', - 320100: '南京市', - 320200: '无锡市', - 320300: '徐州市', - 320400: '常州市', - 320500: '苏州市', - 320600: '南通市', - 320700: '连云港市', - 320800: '淮安市', - 320900: '盐城市', - 321000: '扬州市', - 321100: '镇江市', - 321200: '泰州市', - 321300: '宿迁市', - 330100: '杭州市', - 330200: '宁波市', - 330300: '温州市', - 330400: '嘉兴市', - 330500: '湖州市', - 330600: '绍兴市', - 330700: '金华市', - 330800: '衢州市', - 330900: '舟山市', - 331000: '台州市', - 331100: '丽水市', - 340100: '合肥市', - 340200: '芜湖市', - 340300: '蚌埠市', - 340400: '淮南市', - 340500: '马鞍山市', - 340600: '淮北市', - 340700: '铜陵市', - 340800: '安庆市', - 341000: '黄山市', - 341100: '滁州市', - 341200: '阜阳市', - 341300: '宿州市', - 341500: '六安市', - 341600: '亳州市', - 341700: '池州市', - 341800: '宣城市', - 350100: '福州市', - 350200: '厦门市', - 350300: '莆田市', - 350400: '三明市', - 350500: '泉州市', - 350600: '漳州市', - 350700: '南平市', - 350800: '龙岩市', - 350900: '宁德市', - 360100: '南昌市', - 360200: '景德镇市', - 360300: '萍乡市', - 360400: '九江市', - 360500: '新余市', - 360600: '鹰潭市', - 360700: '赣州市', - 360800: '吉安市', - 360900: '宜春市', - 361000: '抚州市', - 361100: '上饶市', - 370100: '济南市', - 370200: '青岛市', - 370300: '淄博市', - 370400: '枣庄市', - 370500: '东营市', - 370600: '烟台市', - 370700: '潍坊市', - 370800: '济宁市', - 370900: '泰安市', - 371000: '威海市', - 371100: '日照市', - 371300: '临沂市', - 371400: '德州市', - 371500: '聊城市', - 371600: '滨州市', - 371700: '菏泽市', - 410100: '郑州市', - 410200: '开封市', - 410300: '洛阳市', - 410400: '平顶山市', - 410500: '安阳市', - 410600: '鹤壁市', - 410700: '新乡市', - 410800: '焦作市', - 410900: '濮阳市', - 411000: '许昌市', - 411100: '漯河市', - 411200: '三门峡市', - 411300: '南阳市', - 411400: '商丘市', - 411500: '信阳市', - 411600: '周口市', - 411700: '驻马店市', - 419000: '省直辖县', - 420100: '武汉市', - 420200: '黄石市', - 420300: '十堰市', - 420500: '宜昌市', - 420600: '襄阳市', - 420700: '鄂州市', - 420800: '荆门市', - 420900: '孝感市', - 421000: '荆州市', - 421100: '黄冈市', - 421200: '咸宁市', - 421300: '随州市', - 422800: '恩施土家族苗族自治州', - 429000: '省直辖县', - 430100: '长沙市', - 430200: '株洲市', - 430300: '湘潭市', - 430400: '衡阳市', - 430500: '邵阳市', - 430600: '岳阳市', - 430700: '常德市', - 430800: '张家界市', - 430900: '益阳市', - 431000: '郴州市', - 431100: '永州市', - 431200: '怀化市', - 431300: '娄底市', - 433100: '湘西土家族苗族自治州', - 440100: '广州市', - 440200: '韶关市', - 440300: '深圳市', - 440400: '珠海市', - 440500: '汕头市', - 440600: '佛山市', - 440700: '江门市', - 440800: '湛江市', - 440900: '茂名市', - 441200: '肇庆市', - 441300: '惠州市', - 441400: '梅州市', - 441500: '汕尾市', - 441600: '河源市', - 441700: '阳江市', - 441800: '清远市', - 441900: '东莞市', - 442000: '中山市', - 445100: '潮州市', - 445200: '揭阳市', - 445300: '云浮市', - 450100: '南宁市', - 450200: '柳州市', - 450300: '桂林市', - 450400: '梧州市', - 450500: '北海市', - 450600: '防城港市', - 450700: '钦州市', - 450800: '贵港市', - 450900: '玉林市', - 451000: '百色市', - 451100: '贺州市', - 451200: '河池市', - 451300: '来宾市', - 451400: '崇左市', - 460100: '海口市', - 460200: '三亚市', - 460300: '三沙市', - 460400: '儋州市', - 469000: '省直辖县', - 500100: '重庆市', - 500200: '县', - 510100: '成都市', - 510300: '自贡市', - 510400: '攀枝花市', - 510500: '泸州市', - 510600: '德阳市', - 510700: '绵阳市', - 510800: '广元市', - 510900: '遂宁市', - 511000: '内江市', - 511100: '乐山市', - 511300: '南充市', - 511400: '眉山市', - 511500: '宜宾市', - 511600: '广安市', - 511700: '达州市', - 511800: '雅安市', - 511900: '巴中市', - 512000: '资阳市', - 513200: '阿坝藏族羌族自治州', - 513300: '甘孜藏族自治州', - 513400: '凉山彝族自治州', - 520100: '贵阳市', - 520200: '六盘水市', - 520300: '遵义市', - 520400: '安顺市', - 520500: '毕节市', - 520600: '铜仁市', - 522300: '黔西南布依族苗族自治州', - 522600: '黔东南苗族侗族自治州', - 522700: '黔南布依族苗族自治州', - 530100: '昆明市', - 530300: '曲靖市', - 530400: '玉溪市', - 530500: '保山市', - 530600: '昭通市', - 530700: '丽江市', - 530800: '普洱市', - 530900: '临沧市', - 532300: '楚雄彝族自治州', - 532500: '红河哈尼族彝族自治州', - 532600: '文山壮族苗族自治州', - 532800: '西双版纳傣族自治州', - 532900: '大理白族自治州', - 533100: '德宏傣族景颇族自治州', - 533300: '怒江傈僳族自治州', - 533400: '迪庆藏族自治州', - 540100: '拉萨市', - 540200: '日喀则市', - 540300: '昌都市', - 540400: '林芝市', - 540500: '山南市', - 540600: '那曲市', - 542500: '阿里地区', - 610100: '西安市', - 610200: '铜川市', - 610300: '宝鸡市', - 610400: '咸阳市', - 610500: '渭南市', - 610600: '延安市', - 610700: '汉中市', - 610800: '榆林市', - 610900: '安康市', - 611000: '商洛市', - 620100: '兰州市', - 620200: '嘉峪关市', - 620300: '金昌市', - 620400: '白银市', - 620500: '天水市', - 620600: '武威市', - 620700: '张掖市', - 620800: '平凉市', - 620900: '酒泉市', - 621000: '庆阳市', - 621100: '定西市', - 621200: '陇南市', - 622900: '临夏回族自治州', - 623000: '甘南藏族自治州', - 630100: '西宁市', - 630200: '海东市', - 632200: '海北藏族自治州', - 632300: '黄南藏族自治州', - 632500: '海南藏族自治州', - 632600: '果洛藏族自治州', - 632700: '玉树藏族自治州', - 632800: '海西蒙古族藏族自治州', - 640100: '银川市', - 640200: '石嘴山市', - 640300: '吴忠市', - 640400: '固原市', - 640500: '中卫市', - 650100: '乌鲁木齐市', - 650200: '克拉玛依市', - 650400: '吐鲁番市', - 650500: '哈密市', - 652300: '昌吉回族自治州', - 652700: '博尔塔拉蒙古自治州', - 652800: '巴音郭楞蒙古自治州', - 652900: '阿克苏地区', - 653000: '克孜勒苏柯尔克孜自治州', - 653100: '喀什地区', - 653200: '和田地区', - 654000: '伊犁哈萨克自治州', - 654200: '塔城地区', - 654300: '阿勒泰地区', - 659000: '自治区直辖县级行政区划', - 710100: '台北市', - 710200: '高雄市', - 710300: '台南市', - 710400: '台中市', - 710500: '金门县', - 710600: '南投县', - 710700: '基隆市', - 710800: '新竹市', - 710900: '嘉义市', - 711100: '新北市', - 711200: '宜兰县', - 711300: '新竹县', - 711400: '桃园县', - 711500: '苗栗县', - 711700: '彰化县', - 711900: '嘉义县', - 712100: '云林县', - 712400: '屏东县', - 712500: '台东县', - 712600: '花莲县', - 712700: '澎湖县', - 712800: '连江县', - 810100: '香港岛', - 810200: '九龙', - 810300: '新界', - 820100: '澳门半岛', - 820200: '离岛', - 900400: '阿富汗', - 900800: '阿尔巴尼亚', - 901000: '南极洲', - 901200: '阿尔及利亚', - 901600: '美属萨摩亚', - 902000: '安道尔', - 902400: '安哥拉', - 902800: '安提瓜和巴布达', - 903100: '阿塞拜疆', - 903200: '阿根廷', - 903600: '澳大利亚', - 904000: '奥地利', - 904400: '巴哈马', - 904800: '巴林', - 905000: '孟加拉', - 905100: '亚美尼亚', - 905200: '巴巴多斯', - 905600: '比利时', - 906000: '百慕大', - 906400: '不丹', - 906800: '玻利维亚', - 907000: '波黑', - 907200: '博茨瓦纳', - 907400: '布韦岛', - 907600: '巴西', - 908400: '伯利兹', - 908600: '英属印度洋领地', - 909000: '所罗门群岛', - 909200: '英属维尔京群岛', - 909600: '文莱', - 910000: '保加利亚', - 910400: '缅甸', - 910800: '布隆迪', - 911200: '白俄罗斯', - 911600: '柬埔寨', - 912000: '喀麦隆', - 912400: '加拿大', - 913200: '佛得角', - 913600: '开曼群岛', - 914000: '中非', - 914400: '斯里兰卡', - 914800: '乍得', - 915200: '智利', - 916200: '圣诞岛', - 916600: '科科斯群岛', - 917000: '哥伦比亚', - 917400: '科摩罗', - 917500: '马约特', - 917800: '刚果(布)', - 918000: '刚果(金)', - 918400: '库克群岛', - 918800: '哥斯达黎加', - 919100: '克罗地亚', - 919200: '古巴', - 919600: '塞浦路斯', - 920300: '捷克', - 920400: '贝宁', - 920800: '丹麦', - 921200: '多米尼克', - 921400: '多米尼加', - 921800: '厄瓜多尔', - 922200: '萨尔瓦多', - 922600: '赤道几内亚', - 923100: '埃塞俄比亚', - 923200: '厄立特里亚', - 923300: '爱沙尼亚', - 923400: '法罗群岛', - 923800: '马尔维纳斯群岛( 福克兰)', - 923900: '南乔治亚岛和南桑威奇群岛', - 924200: '斐济群岛', - 924600: '芬兰', - 924800: '奥兰群岛', - 925000: '法国', - 925400: '法属圭亚那', - 925800: '法属波利尼西亚', - 926000: '法属南部领地', - 926200: '吉布提', - 926600: '加蓬', - 926800: '格鲁吉亚', - 927000: '冈比亚', - 927500: '巴勒斯坦', - 927600: '德国', - 928800: '加纳', - 929200: '直布罗陀', - 929600: '基里巴斯', - 930000: '希腊', - 930400: '格陵兰', - 930800: '格林纳达', - 931200: '瓜德罗普', - 931600: '关岛', - 932000: '危地马拉', - 932400: '几内亚', - 932800: '圭亚那', - 933200: '海地', - 933400: '赫德岛和麦克唐纳群岛', - 933600: '梵蒂冈', - 934000: '洪都拉斯', - 934800: '匈牙利', - 935200: '冰岛', - 935600: '印度', - 936000: '印尼', - 936400: '伊朗', - 936800: '伊拉克', - 937200: '爱尔兰', - 937600: '以色列', - 938000: '意大利', - 938400: '科特迪瓦', - 938800: '牙买加', - 939200: '日本', - 939800: '哈萨克斯坦', - 940000: '约旦', - 940400: '肯尼亚', - 940800: '朝鲜 北朝鲜', - 941000: '韩国', - 941400: '科威特', - 941700: '吉尔吉斯斯坦', - 941800: '老挝', - 942200: '黎巴嫩', - 942600: '莱索托', - 942800: '拉脱维亚', - 943000: '利比里亚', - 943400: '利比亚', - 943800: '列支敦士登', - 944000: '立陶宛', - 944200: '卢森堡', - 945000: '马达加斯加', - 945400: '马拉维', - 945800: '马来西亚', - 946200: '马尔代夫', - 946600: '马里', - 947000: '马耳他', - 947400: '马提尼克', - 947800: '毛里塔尼亚', - 948000: '毛里求斯', - 948400: '墨西哥', - 949200: '摩纳哥', - 949600: '蒙古国', - 949800: '摩尔多瓦', - 949900: '黑山', - 950000: '蒙塞拉特岛', - 950400: '摩洛哥', - 950800: '莫桑比克', - 951200: '阿曼', - 951600: '纳米比亚', - 952000: '瑙鲁', - 952400: '尼泊尔', - 952800: '荷兰', - 953300: '阿鲁巴', - 953500: '荷兰加勒比区', - 954000: '新喀里多尼亚', - 954800: '瓦努阿图', - 955400: '新西兰', - 955800: '尼加拉瓜', - 956200: '尼日尔', - 956600: '尼日利亚', - 957000: '纽埃', - 957400: '诺福克岛', - 957800: '挪威', - 958000: '北马里亚纳群岛', - 958100: '美国本土外小岛屿', - 958300: '密克罗尼西亚联邦', - 958400: '马绍尔群岛', - 958500: '帕劳', - 958600: '巴基斯坦', - 959100: '巴拿马', - 959800: '巴布亚新几内亚', - 960000: '巴拉圭', - 960400: '秘鲁', - 960800: '菲律宾', - 961200: '皮特凯恩群岛', - 961600: '波兰', - 962000: '葡萄牙', - 962400: '几内亚比绍', - 962600: '东帝汶', - 963000: '波多黎各', - 963400: '卡塔尔', - 963800: '留尼汪', - 964200: '罗马尼亚', - 964300: '俄罗斯', - 964600: '卢旺达', - 965200: '圣巴泰勒米岛', - 965400: '圣赫勒拿', - 965900: '圣基茨和尼维斯', - 966000: '安圭拉', - 966200: '圣卢西亚', - 966300: '法属圣马丁', - 966600: '圣皮埃尔和密克隆', - 967000: '圣文森特和格林纳丁斯', - 967400: '圣马力诺', - 967800: '圣多美和普林西比', - 968200: '沙特阿拉伯', - 968600: '塞内加尔', - 968800: '塞尔维亚', - 969000: '塞舌尔', - 969400: '塞拉利昂', - 970200: '新加坡', - 970300: '斯洛伐克', - 970400: '越南', - 970500: '斯洛文尼亚', - 970600: '索马里', - 971000: '南非', - 971600: '津巴布韦', - 972400: '西班牙', - 972800: '南苏丹', - 972900: '苏丹', - 973200: '西撒哈拉', - 974000: '苏里南', - 974400: '斯瓦尔巴群岛和 扬马延岛', - 974800: '斯威士兰', - 975200: '瑞典', - 975600: '瑞士', - 976000: '叙利亚', - 976200: '塔吉克斯坦', - 976400: '泰国', - 976800: '多哥', - 977200: '托克劳', - 977600: '汤加', - 978000: '特立尼达和多巴哥', - 978400: '阿联酋', - 978800: '突尼斯', - 979200: '土耳其', - 979500: '土库曼斯坦', - 979600: '特克斯和凯科斯群岛', - 979800: '图瓦卢', - 980000: '乌干达', - 980400: '乌克兰', - 980700: '马其顿', - 981800: '埃及', - 982600: '英国', - 983100: '根西岛', - 983200: '泽西岛', - 983300: '马恩岛', - 983400: '坦桑尼亚', - 984000: '美国', - 985000: '美属维尔京群岛', - 985400: '布基纳法索', - 985800: '乌拉圭', - 986000: '乌兹别克斯坦', - 986200: '委内瑞拉', - 987600: '瓦利斯和富图纳', - 988200: '萨摩亚', - 988700: '也门', - 989400: '赞比亚' - }, - county_list: { - 110101: '东城区', - 110102: '西城区', - 110105: '朝阳区', - 110106: '丰台区', - 110107: '石景山区', - 110108: '海淀区', - 110109: '门头沟区', - 110111: '房山区', - 110112: '通州区', - 110113: '顺义区', - 110114: '昌平区', - 110115: '大兴区', - 110116: '怀柔区', - 110117: '平谷区', - 110118: '密云区', - 110119: '延庆区', - 120101: '和平区', - 120102: '河东区', - 120103: '河西区', - 120104: '南开区', - 120105: '河北区', - 120106: '红桥区', - 120110: '东丽区', - 120111: '西青区', - 120112: '津南区', - 120113: '北辰区', - 120114: '武清区', - 120115: '宝坻区', - 120116: '滨海新区', - 120117: '宁河区', - 120118: '静海区', - 120119: '蓟州区', - 130102: '长安区', - 130104: '桥西区', - 130105: '新华区', - 130107: '井陉矿区', - 130108: '裕华区', - 130109: '藁城区', - 130110: '鹿泉区', - 130111: '栾城区', - 130121: '井陉县', - 130123: '正定县', - 130125: '行唐县', - 130126: '灵寿县', - 130127: '高邑县', - 130128: '深泽县', - 130129: '赞皇县', - 130130: '无极县', - 130131: '平山县', - 130132: '元氏县', - 130133: '赵县', - 130181: '辛集市', - 130183: '晋州市', - 130184: '新乐市', - 130202: '路南区', - 130203: '路北区', - 130204: '古冶区', - 130205: '开平区', - 130207: '丰南区', - 130208: '丰润区', - 130209: '曹妃甸区', - 130224: '滦南县', - 130225: '乐亭县', - 130227: '迁西县', - 130229: '玉田县', - 130281: '遵化市', - 130283: '迁安市', - 130284: '滦州市', - 130302: '海港区', - 130303: '山海关区', - 130304: '北戴河区', - 130306: '抚宁区', - 130321: '青龙满族自治县', - 130322: '昌黎县', - 130324: '卢龙县', - 130390: '经济技术开发区', - 130402: '邯山区', - 130403: '丛台区', - 130404: '复兴区', - 130406: '峰峰矿区', - 130407: '肥乡区', - 130408: '永年区', - 130423: '临漳县', - 130424: '成安县', - 130425: '大名县', - 130426: '涉县', - 130427: '磁县', - 130430: '邱县', - 130431: '鸡泽县', - 130432: '广平县', - 130433: '馆陶县', - 130434: '魏县', - 130435: '曲周县', - 130481: '武安市', - 130502: '桥东区', - 130503: '桥西区', - 130521: '邢台县', - 130522: '临城县', - 130523: '内丘县', - 130524: '柏乡县', - 130525: '隆尧县', - 130526: '任县', - 130527: '南和县', - 130528: '宁晋县', - 130529: '巨鹿县', - 130530: '新河县', - 130531: '广宗县', - 130532: '平乡县', - 130533: '威县', - 130534: '清河县', - 130535: '临西县', - 130581: '南宫市', - 130582: '沙河市', - 130602: '竞秀区', - 130606: '莲池区', - 130607: '满城区', - 130608: '清苑区', - 130609: '徐水区', - 130623: '涞水县', - 130624: '阜平县', - 130626: '定兴县', - 130627: '唐县', - 130628: '高阳县', - 130629: '容城县', - 130630: '涞源县', - 130631: '望都县', - 130632: '安新县', - 130633: '易县', - 130634: '曲阳县', - 130635: '蠡县', - 130636: '顺平县', - 130637: '博野县', - 130638: '雄县', - 130681: '涿州市', - 130682: '定州市', - 130683: '安国市', - 130684: '高碑店市', - 130702: '桥东区', - 130703: '桥西区', - 130705: '宣化区', - 130706: '下花园区', - 130708: '万全区', - 130709: '崇礼区', - 130722: '张北县', - 130723: '康保县', - 130724: '沽源县', - 130725: '尚义县', - 130726: '蔚县', - 130727: '阳原县', - 130728: '怀安县', - 130730: '怀来县', - 130731: '涿鹿县', - 130732: '赤城县', - 130802: '双桥区', - 130803: '双滦区', - 130804: '鹰手营子矿区', - 130821: '承德县', - 130822: '兴隆县', - 130824: '滦平县', - 130825: '隆化县', - 130826: '丰宁满族自治县', - 130827: '宽城满族自治县', - 130828: '围场满族蒙古族自治县', - 130881: '平泉市', - 130902: '新华区', - 130903: '运河区', - 130921: '沧县', - 130922: '青县', - 130923: '东光县', - 130924: '海兴县', - 130925: '盐山县', - 130926: '肃宁县', - 130927: '南皮县', - 130928: '吴桥县', - 130929: '献县', - 130930: '孟村回族自治县', - 130981: '泊头市', - 130982: '任丘市', - 130983: '黄骅市', - 130984: '河间市', - 131002: '安次区', - 131003: '广阳区', - 131022: '固安县', - 131023: '永清县', - 131024: '香河县', - 131025: '大城县', - 131026: '文安县', - 131028: '大厂回族自治县', - 131081: '霸州市', - 131082: '三河市', - 131090: '开发区', - 131102: '桃城区', - 131103: '冀州区', - 131121: '枣强县', - 131122: '武邑县', - 131123: '武强县', - 131124: '饶阳县', - 131125: '安平县', - 131126: '故城县', - 131127: '景县', - 131128: '阜城县', - 131182: '深州市', - 140105: '小店区', - 140106: '迎泽区', - 140107: '杏花岭区', - 140108: '尖草坪区', - 140109: '万柏林区', - 140110: '晋源区', - 140121: '清徐县', - 140122: '阳曲县', - 140123: '娄烦县', - 140181: '古交市', - 140212: '新荣区', - 140213: '平城区', - 140214: '云冈区', - 140215: '云州区', - 140221: '阳高县', - 140222: '天镇县', - 140223: '广灵县', - 140224: '灵丘县', - 140225: '浑源县', - 140226: '左云县', - 140302: '城区', - 140303: '矿区', - 140311: '郊区', - 140321: '平定县', - 140322: '盂县', - 140403: '潞州区', - 140404: '上党区', - 140405: '屯留区', - 140406: '潞城区', - 140423: '襄垣县', - 140425: '平顺县', - 140426: '黎城县', - 140427: '壶关县', - 140428: '长子县', - 140429: '武乡县', - 140430: '沁县', - 140431: '沁源县', - 140502: '城区', - 140521: '沁水县', - 140522: '阳城县', - 140524: '陵川县', - 140525: '泽州县', - 140581: '高平市', - 140602: '朔城区', - 140603: '平鲁区', - 140621: '山阴县', - 140622: '应县', - 140623: '右玉县', - 140681: '怀仁市', - 140702: '榆次区', - 140721: '榆社县', - 140722: '左权县', - 140723: '和顺县', - 140724: '昔阳县', - 140725: '寿阳县', - 140726: '太谷县', - 140727: '祁县', - 140728: '平遥县', - 140729: '灵石县', - 140781: '介休市', - 140802: '盐湖区', - 140821: '临猗县', - 140822: '万荣县', - 140823: '闻喜县', - 140824: '稷山县', - 140825: '新绛县', - 140826: '绛县', - 140827: '垣曲县', - 140828: '夏县', - 140829: '平陆县', - 140830: '芮城县', - 140881: '永济市', - 140882: '河津市', - 140902: '忻府区', - 140921: '定襄县', - 140922: '五台县', - 140923: '代县', - 140924: '繁峙县', - 140925: '宁武县', - 140926: '静乐县', - 140927: '神池县', - 140928: '五寨县', - 140929: '岢岚县', - 140930: '河曲县', - 140931: '保德县', - 140932: '偏关县', - 140981: '原平市', - 141002: '尧都区', - 141021: '曲沃县', - 141022: '翼城县', - 141023: '襄汾县', - 141024: '洪洞县', - 141025: '古县', - 141026: '安泽县', - 141027: '浮山县', - 141028: '吉县', - 141029: '乡宁县', - 141030: '大宁县', - 141031: '隰县', - 141032: '永和县', - 141033: '蒲县', - 141034: '汾西县', - 141081: '侯马市', - 141082: '霍州市', - 141102: '离石区', - 141121: '文水县', - 141122: '交城县', - 141123: '兴县', - 141124: '临县', - 141125: '柳林县', - 141126: '石楼县', - 141127: '岚县', - 141128: '方山县', - 141129: '中阳县', - 141130: '交口县', - 141181: '孝义市', - 141182: '汾阳市', - 150102: '新城区', - 150103: '回民区', - 150104: '玉泉区', - 150105: '赛罕区', - 150121: '土默特左旗', - 150122: '托克托县', - 150123: '和林格尔县', - 150124: '清水河县', - 150125: '武川县', - 150202: '东河区', - 150203: '昆都仑区', - 150204: '青山区', - 150205: '石拐区', - 150206: '白云鄂博矿区', - 150207: '九原区', - 150221: '土默特右旗', - 150222: '固阳县', - 150223: '达尔罕茂明安联合旗', - 150302: '海勃湾区', - 150303: '海南区', - 150304: '乌达区', - 150402: '红山区', - 150403: '元宝山区', - 150404: '松山区', - 150421: '阿鲁科尔沁旗', - 150422: '巴林左旗', - 150423: '巴林右旗', - 150424: '林西县', - 150425: '克什克腾旗', - 150426: '翁牛特旗', - 150428: '喀喇沁旗', - 150429: '宁城县', - 150430: '敖汉旗', - 150502: '科尔沁区', - 150521: '科尔沁左翼中旗', - 150522: '科尔沁左翼后旗', - 150523: '开鲁县', - 150524: '库伦旗', - 150525: '奈曼旗', - 150526: '扎鲁特旗', - 150581: '霍林郭勒市', - 150602: '东胜区', - 150603: '康巴什区', - 150621: '达拉特旗', - 150622: '准格尔旗', - 150623: '鄂托克前旗', - 150624: '鄂托克旗', - 150625: '杭锦旗', - 150626: '乌审旗', - 150627: '伊金霍洛旗', - 150702: '海拉尔区', - 150703: '扎赉诺尔区', - 150721: '阿荣旗', - 150722: '莫力达瓦达斡尔族自治旗', - 150723: '鄂伦春自治旗', - 150724: '鄂温克族自治旗', - 150725: '陈巴尔虎旗', - 150726: '新巴尔虎左旗', - 150727: '新巴尔虎右旗', - 150781: '满洲里市', - 150782: '牙克石市', - 150783: '扎兰屯市', - 150784: '额尔古纳市', - 150785: '根河市', - 150802: '临河区', - 150821: '五原县', - 150822: '磴口县', - 150823: '乌拉特前旗', - 150824: '乌拉特中旗', - 150825: '乌拉特后旗', - 150826: '杭锦后旗', - 150902: '集宁区', - 150921: '卓资县', - 150922: '化德县', - 150923: '商都县', - 150924: '兴和县', - 150925: '凉城县', - 150926: '察哈尔右翼前旗', - 150927: '察哈尔右翼中旗', - 150928: '察哈尔右翼后旗', - 150929: '四子王旗', - 150981: '丰镇市', - 152201: '乌兰浩特市', - 152202: '阿尔山市', - 152221: '科尔沁右翼前旗', - 152222: '科尔沁右翼中旗', - 152223: '扎赉特旗', - 152224: '突泉县', - 152501: '二连浩特市', - 152502: '锡林浩特市', - 152522: '阿巴嘎旗', - 152523: '苏尼特左旗', - 152524: '苏尼特右旗', - 152525: '东乌珠穆沁旗', - 152526: '西乌珠穆沁旗', - 152527: '太仆寺旗', - 152528: '镶黄旗', - 152529: '正镶白旗', - 152530: '正蓝旗', - 152531: '多伦县', - 152921: '阿拉善左旗', - 152922: '阿拉善右旗', - 152923: '额济纳旗', - 210102: '和平区', - 210103: '沈河区', - 210104: '大东区', - 210105: '皇姑区', - 210106: '铁西区', - 210111: '苏家屯区', - 210112: '浑南区', - 210113: '沈北新区', - 210114: '于洪区', - 210115: '辽中区', - 210123: '康平县', - 210124: '法库县', - 210181: '新民市', - 210190: '经济技术开发区', - 210202: '中山区', - 210203: '西岗区', - 210204: '沙河口区', - 210211: '甘井子区', - 210212: '旅顺口区', - 210213: '金州区', - 210214: '普兰店区', - 210224: '长海县', - 210281: '瓦房店市', - 210283: '庄河市', - 210302: '铁东区', - 210303: '铁西区', - 210304: '立山区', - 210311: '千山区', - 210321: '台安县', - 210323: '岫岩满族自治县', - 210381: '海城市', - 210390: '高新区', - 210402: '新抚区', - 210403: '东洲区', - 210404: '望花区', - 210411: '顺城区', - 210421: '抚顺县', - 210422: '新宾满族自治县', - 210423: '清原满族自治县', - 210502: '平山区', - 210503: '溪湖区', - 210504: '明山区', - 210505: '南芬区', - 210521: '本溪满族自治县', - 210522: '桓仁满族自治县', - 210602: '元宝区', - 210603: '振兴区', - 210604: '振安区', - 210624: '宽甸满族自治县', - 210681: '东港市', - 210682: '凤城市', - 210702: '古塔区', - 210703: '凌河区', - 210711: '太和区', - 210726: '黑山县', - 210727: '义县', - 210781: '凌海市', - 210782: '北镇市', - 210793: '经济技术开发区', - 210802: '站前区', - 210803: '西市区', - 210804: '鲅鱼圈区', - 210811: '老边区', - 210881: '盖州市', - 210882: '大石桥市', - 210902: '海州区', - 210903: '新邱区', - 210904: '太平区', - 210905: '清河门区', - 210911: '细河区', - 210921: '阜新蒙古族自治县', - 210922: '彰武县', - 211002: '白塔区', - 211003: '文圣区', - 211004: '宏伟区', - 211005: '弓长岭区', - 211011: '太子河区', - 211021: '辽阳县', - 211081: '灯塔市', - 211102: '双台子区', - 211103: '兴隆台区', - 211104: '大洼区', - 211122: '盘山县', - 211202: '银州区', - 211204: '清河区', - 211221: '铁岭县', - 211223: '西丰县', - 211224: '昌图县', - 211281: '调兵山市', - 211282: '开原市', - 211302: '双塔区', - 211303: '龙城区', - 211321: '朝阳县', - 211322: '建平县', - 211324: '喀喇沁左翼蒙古族自治县', - 211381: '北票市', - 211382: '凌源市', - 211402: '连山区', - 211403: '龙港区', - 211404: '南票区', - 211421: '绥中县', - 211422: '建昌县', - 211481: '兴城市', - 220102: '南关区', - 220103: '宽城区', - 220104: '朝阳区', - 220105: '二道区', - 220106: '绿园区', - 220112: '双阳区', - 220113: '九台区', - 220122: '农安县', - 220182: '榆树市', - 220183: '德惠市', - 220192: '经济技术开发区', - 220202: '昌邑区', - 220203: '龙潭区', - 220204: '船营区', - 220211: '丰满区', - 220221: '永吉县', - 220281: '蛟河市', - 220282: '桦甸市', - 220283: '舒兰市', - 220284: '磐石市', - 220302: '铁西区', - 220303: '铁东区', - 220322: '梨树县', - 220323: '伊通满族自治县', - 220381: '公主岭市', - 220382: '双辽市', - 220402: '龙山区', - 220403: '西安区', - 220421: '东丰县', - 220422: '东辽县', - 220502: '东昌区', - 220503: '二道江区', - 220521: '通化县', - 220523: '辉南县', - 220524: '柳河县', - 220581: '梅河口市', - 220582: '集安市', - 220602: '浑江区', - 220605: '江源区', - 220621: '抚松县', - 220622: '靖宇县', - 220623: '长白朝鲜族自治县', - 220681: '临江市', - 220702: '宁江区', - 220721: '前郭尔罗斯蒙古族自治县', - 220722: '长岭县', - 220723: '乾安县', - 220781: '扶余市', - 220802: '洮北区', - 220821: '镇赉县', - 220822: '通榆县', - 220881: '洮南市', - 220882: '大安市', - 222401: '延吉市', - 222402: '图们市', - 222403: '敦化市', - 222404: '珲春市', - 222405: '龙井市', - 222406: '和龙市', - 222424: '汪清县', - 222426: '安图县', - 230102: '道里区', - 230103: '南岗区', - 230104: '道外区', - 230108: '平房区', - 230109: '松北区', - 230110: '香坊区', - 230111: '呼兰区', - 230112: '阿城区', - 230113: '双城区', - 230123: '依兰县', - 230124: '方正县', - 230125: '宾县', - 230126: '巴彦县', - 230127: '木兰县', - 230128: '通河县', - 230129: '延寿县', - 230183: '尚志市', - 230184: '五常市', - 230202: '龙沙区', - 230203: '建华区', - 230204: '铁锋区', - 230205: '昂昂溪区', - 230206: '富拉尔基区', - 230207: '碾子山区', - 230208: '梅里斯达斡尔族区', - 230221: '龙江县', - 230223: '依安县', - 230224: '泰来县', - 230225: '甘南县', - 230227: '富裕县', - 230229: '克山县', - 230230: '克东县', - 230231: '拜泉县', - 230281: '讷河市', - 230302: '鸡冠区', - 230303: '恒山区', - 230304: '滴道区', - 230305: '梨树区', - 230306: '城子河区', - 230307: '麻山区', - 230321: '鸡东县', - 230381: '虎林市', - 230382: '密山市', - 230402: '向阳区', - 230403: '工农区', - 230404: '南山区', - 230405: '兴安区', - 230406: '东山区', - 230407: '兴山区', - 230421: '萝北县', - 230422: '绥滨县', - 230502: '尖山区', - 230503: '岭东区', - 230505: '四方台区', - 230506: '宝山区', - 230521: '集贤县', - 230522: '友谊县', - 230523: '宝清县', - 230524: '饶河县', - 230602: '萨尔图区', - 230603: '龙凤区', - 230604: '让胡路区', - 230605: '红岗区', - 230606: '大同区', - 230621: '肇州县', - 230622: '肇源县', - 230623: '林甸县', - 230624: '杜尔伯特蒙古族自治县', - 230702: '伊春区', - 230703: '南岔区', - 230704: '友好区', - 230705: '西林区', - 230706: '翠峦区', - 230707: '新青区', - 230708: '美溪区', - 230709: '金山屯区', - 230710: '五营区', - 230711: '乌马河区', - 230712: '汤旺河区', - 230713: '带岭区', - 230714: '乌伊岭区', - 230715: '红星区', - 230716: '上甘岭区', - 230722: '嘉荫县', - 230781: '铁力市', - 230803: '向阳区', - 230804: '前进区', - 230805: '东风区', - 230811: '郊区', - 230822: '桦南县', - 230826: '桦川县', - 230828: '汤原县', - 230881: '同江市', - 230882: '富锦市', - 230883: '抚远市', - 230902: '新兴区', - 230903: '桃山区', - 230904: '茄子河区', - 230921: '勃利县', - 231002: '东安区', - 231003: '阳明区', - 231004: '爱民区', - 231005: '西安区', - 231025: '林口县', - 231081: '绥芬河市', - 231083: '海林市', - 231084: '宁安市', - 231085: '穆棱市', - 231086: '东宁市', - 231102: '爱辉区', - 231121: '嫩江县', - 231123: '逊克县', - 231124: '孙吴县', - 231181: '北安市', - 231182: '五大连池市', - 231202: '北林区', - 231221: '望奎县', - 231222: '兰西县', - 231223: '青冈县', - 231224: '庆安县', - 231225: '明水县', - 231226: '绥棱县', - 231281: '安达市', - 231282: '肇东市', - 231283: '海伦市', - 232701: '漠河市', - 232721: '呼玛县', - 232722: '塔河县', - 232790: '松岭区', - 232791: '呼中区', - 232792: '加格达奇区', - 232793: '新林区', - 310101: '黄浦区', - 310104: '徐汇区', - 310105: '长宁区', - 310106: '静安区', - 310107: '普陀区', - 310109: '虹口区', - 310110: '杨浦区', - 310112: '闵行区', - 310113: '宝山区', - 310114: '嘉定区', - 310115: '浦东新区', - 310116: '金山区', - 310117: '松江区', - 310118: '青浦区', - 310120: '奉贤区', - 310151: '崇明区', - 320102: '玄武区', - 320104: '秦淮区', - 320105: '建邺区', - 320106: '鼓楼区', - 320111: '浦口区', - 320113: '栖霞区', - 320114: '雨花台区', - 320115: '江宁区', - 320116: '六合区', - 320117: '溧水区', - 320118: '高淳区', - 320205: '锡山区', - 320206: '惠山区', - 320211: '滨湖区', - 320213: '梁溪区', - 320214: '新吴区', - 320281: '江阴市', - 320282: '宜兴市', - 320302: '鼓楼区', - 320303: '云龙区', - 320305: '贾汪区', - 320311: '泉山区', - 320312: '铜山区', - 320321: '丰县', - 320322: '沛县', - 320324: '睢宁县', - 320381: '新沂市', - 320382: '邳州市', - 320391: '工业园区', - 320402: '天宁区', - 320404: '钟楼区', - 320411: '新北区', - 320412: '武进区', - 320413: '金坛区', - 320481: '溧阳市', - 320505: '虎丘区', - 320506: '吴中区', - 320507: '相城区', - 320508: '姑苏区', - 320509: '吴江区', - 320581: '常熟市', - 320582: '张家港市', - 320583: '昆山市', - 320585: '太仓市', - 320590: '工业园区', - 320591: '高新区', - 320602: '崇川区', - 320611: '港闸区', - 320612: '通州区', - 320623: '如东县', - 320681: '启东市', - 320682: '如皋市', - 320684: '海门市', - 320685: '海安市', - 320691: '高新区', - 320703: '连云区', - 320706: '海州区', - 320707: '赣榆区', - 320722: '东海县', - 320723: '灌云县', - 320724: '灌南县', - 320803: '淮安区', - 320804: '淮阴区', - 320812: '清江浦区', - 320813: '洪泽区', - 320826: '涟水县', - 320830: '盱眙县', - 320831: '金湖县', - 320890: '经济开发区', - 320902: '亭湖区', - 320903: '盐都区', - 320904: '大丰区', - 320921: '响水县', - 320922: '滨海县', - 320923: '阜宁县', - 320924: '射阳县', - 320925: '建湖县', - 320981: '东台市', - 321002: '广陵区', - 321003: '邗江区', - 321012: '江都区', - 321023: '宝应县', - 321081: '仪征市', - 321084: '高邮市', - 321090: '经济开发区', - 321102: '京口区', - 321111: '润州区', - 321112: '丹徒区', - 321181: '丹阳市', - 321182: '扬中市', - 321183: '句容市', - 321202: '海陵区', - 321203: '高港区', - 321204: '姜堰区', - 321281: '兴化市', - 321282: '靖江市', - 321283: '泰兴市', - 321302: '宿城区', - 321311: '宿豫区', - 321322: '沭阳县', - 321323: '泗阳县', - 321324: '泗洪县', - 330102: '上城区', - 330103: '下城区', - 330104: '江干区', - 330105: '拱墅区', - 330106: '西湖区', - 330108: '滨江区', - 330109: '萧山区', - 330110: '余杭区', - 330111: '富阳区', - 330112: '临安区', - 330122: '桐庐县', - 330127: '淳安县', - 330182: '建德市', - 330203: '海曙区', - 330205: '江北区', - 330206: '北仑区', - 330211: '镇海区', - 330212: '鄞州区', - 330213: '奉化区', - 330225: '象山县', - 330226: '宁海县', - 330281: '余姚市', - 330282: '慈溪市', - 330302: '鹿城区', - 330303: '龙湾区', - 330304: '瓯海区', - 330305: '洞头区', - 330324: '永嘉县', - 330326: '平阳县', - 330327: '苍南县', - 330328: '文成县', - 330329: '泰顺县', - 330381: '瑞安市', - 330382: '乐清市', - 330402: '南湖区', - 330411: '秀洲区', - 330421: '嘉善县', - 330424: '海盐县', - 330481: '海宁市', - 330482: '平湖市', - 330483: '桐乡市', - 330502: '吴兴区', - 330503: '南浔区', - 330521: '德清县', - 330522: '长兴县', - 330523: '安吉县', - 330602: '越城区', - 330603: '柯桥区', - 330604: '上虞区', - 330624: '新昌县', - 330681: '诸暨市', - 330683: '嵊州市', - 330702: '婺城区', - 330703: '金东区', - 330723: '武义县', - 330726: '浦江县', - 330727: '磐安县', - 330781: '兰溪市', - 330782: '义乌市', - 330783: '东阳市', - 330784: '永康市', - 330802: '柯城区', - 330803: '衢江区', - 330822: '常山县', - 330824: '开化县', - 330825: '龙游县', - 330881: '江山市', - 330902: '定海区', - 330903: '普陀区', - 330921: '岱山县', - 330922: '嵊泗县', - 331002: '椒江区', - 331003: '黄岩区', - 331004: '路桥区', - 331022: '三门县', - 331023: '天台县', - 331024: '仙居县', - 331081: '温岭市', - 331082: '临海市', - 331083: '玉环市', - 331102: '莲都区', - 331121: '青田县', - 331122: '缙云县', - 331123: '遂昌县', - 331124: '松阳县', - 331125: '云和县', - 331126: '庆元县', - 331127: '景宁畲族自治县', - 331181: '龙泉市', - 340102: '瑶海区', - 340103: '庐阳区', - 340104: '蜀山区', - 340111: '包河区', - 340121: '长丰县', - 340122: '肥东县', - 340123: '肥西县', - 340124: '庐江县', - 340181: '巢湖市', - 340190: '高新技术开发区', - 340191: '经济技术开发区', - 340202: '镜湖区', - 340203: '弋江区', - 340207: '鸠江区', - 340208: '三山区', - 340221: '芜湖县', - 340222: '繁昌县', - 340223: '南陵县', - 340225: '无为县', - 340302: '龙子湖区', - 340303: '蚌山区', - 340304: '禹会区', - 340311: '淮上区', - 340321: '怀远县', - 340322: '五河县', - 340323: '固镇县', - 340402: '大通区', - 340403: '田家庵区', - 340404: '谢家集区', - 340405: '八公山区', - 340406: '潘集区', - 340421: '凤台县', - 340422: '寿县', - 340503: '花山区', - 340504: '雨山区', - 340506: '博望区', - 340521: '当涂县', - 340522: '含山县', - 340523: '和县', - 340602: '杜集区', - 340603: '相山区', - 340604: '烈山区', - 340621: '濉溪县', - 340705: '铜官区', - 340706: '义安区', - 340711: '郊区', - 340722: '枞阳县', - 340802: '迎江区', - 340803: '大观区', - 340811: '宜秀区', - 340822: '怀宁县', - 340824: '潜山县', - 340825: '太湖县', - 340826: '宿松县', - 340827: '望江县', - 340828: '岳西县', - 340881: '桐城市', - 341002: '屯溪区', - 341003: '黄山区', - 341004: '徽州区', - 341021: '歙县', - 341022: '休宁县', - 341023: '黟县', - 341024: '祁门县', - 341102: '琅琊区', - 341103: '南谯区', - 341122: '来安县', - 341124: '全椒县', - 341125: '定远县', - 341126: '凤阳县', - 341181: '天长市', - 341182: '明光市', - 341202: '颍州区', - 341203: '颍东区', - 341204: '颍泉区', - 341221: '临泉县', - 341222: '太和县', - 341225: '阜南县', - 341226: '颍上县', - 341282: '界首市', - 341302: '埇桥区', - 341321: '砀山县', - 341322: '萧县', - 341323: '灵璧县', - 341324: '泗县', - 341390: '经济开发区', - 341502: '金安区', - 341503: '裕安区', - 341504: '叶集区', - 341522: '霍邱县', - 341523: '舒城县', - 341524: '金寨县', - 341525: '霍山县', - 341602: '谯城区', - 341621: '涡阳县', - 341622: '蒙城县', - 341623: '利辛县', - 341702: '贵池区', - 341721: '东至县', - 341722: '石台县', - 341723: '青阳县', - 341802: '宣州区', - 341821: '郎溪县', - 341822: '广德县', - 341823: '泾县', - 341824: '绩溪县', - 341825: '旌德县', - 341881: '宁国市', - 350102: '鼓楼区', - 350103: '台江区', - 350104: '仓山区', - 350105: '马尾区', - 350111: '晋安区', - 350112: '长乐区', - 350121: '闽侯县', - 350122: '连江县', - 350123: '罗源县', - 350124: '闽清县', - 350125: '永泰县', - 350128: '平潭县', - 350181: '福清市', - 350203: '思明区', - 350205: '海沧区', - 350206: '湖里区', - 350211: '集美区', - 350212: '同安区', - 350213: '翔安区', - 350302: '城厢区', - 350303: '涵江区', - 350304: '荔城区', - 350305: '秀屿区', - 350322: '仙游县', - 350402: '梅列区', - 350403: '三元区', - 350421: '明溪县', - 350423: '清流县', - 350424: '宁化县', - 350425: '大田县', - 350426: '尤溪县', - 350427: '沙县', - 350428: '将乐县', - 350429: '泰宁县', - 350430: '建宁县', - 350481: '永安市', - 350502: '鲤城区', - 350503: '丰泽区', - 350504: '洛江区', - 350505: '泉港区', - 350521: '惠安县', - 350524: '安溪县', - 350525: '永春县', - 350526: '德化县', - 350527: '金门县', - 350581: '石狮市', - 350582: '晋江市', - 350583: '南安市', - 350602: '芗城区', - 350603: '龙文区', - 350622: '云霄县', - 350623: '漳浦县', - 350624: '诏安县', - 350625: '长泰县', - 350626: '东山县', - 350627: '南靖县', - 350628: '平和县', - 350629: '华安县', - 350681: '龙海市', - 350702: '延平区', - 350703: '建阳区', - 350721: '顺昌县', - 350722: '浦城县', - 350723: '光泽县', - 350724: '松溪县', - 350725: '政和县', - 350781: '邵武市', - 350782: '武夷山市', - 350783: '建瓯市', - 350802: '新罗区', - 350803: '永定区', - 350821: '长汀县', - 350823: '上杭县', - 350824: '武平县', - 350825: '连城县', - 350881: '漳平市', - 350902: '蕉城区', - 350921: '霞浦县', - 350922: '古田县', - 350923: '屏南县', - 350924: '寿宁县', - 350925: '周宁县', - 350926: '柘荣县', - 350981: '福安市', - 350982: '福鼎市', - 360102: '东湖区', - 360103: '西湖区', - 360104: '青云谱区', - 360105: '湾里区', - 360111: '青山湖区', - 360112: '新建区', - 360121: '南昌县', - 360123: '安义县', - 360124: '进贤县', - 360190: '经济技术开发区', - 360192: '高新区', - 360202: '昌江区', - 360203: '珠山区', - 360222: '浮梁县', - 360281: '乐平市', - 360302: '安源区', - 360313: '湘东区', - 360321: '莲花县', - 360322: '上栗县', - 360323: '芦溪县', - 360402: '濂溪区', - 360403: '浔阳区', - 360404: '柴桑区', - 360423: '武宁县', - 360424: '修水县', - 360425: '永修县', - 360426: '德安县', - 360428: '都昌县', - 360429: '湖口县', - 360430: '彭泽县', - 360481: '瑞昌市', - 360482: '共青城市', - 360483: '庐山市', - 360490: '经济技术开发区', - 360502: '渝水区', - 360521: '分宜县', - 360602: '月湖区', - 360603: '余江区', - 360681: '贵溪市', - 360702: '章贡区', - 360703: '南康区', - 360704: '赣县区', - 360722: '信丰县', - 360723: '大余县', - 360724: '上犹县', - 360725: '崇义县', - 360726: '安远县', - 360727: '龙南县', - 360728: '定南县', - 360729: '全南县', - 360730: '宁都县', - 360731: '于都县', - 360732: '兴国县', - 360733: '会昌县', - 360734: '寻乌县', - 360735: '石城县', - 360781: '瑞金市', - 360802: '吉州区', - 360803: '青原区', - 360821: '吉安县', - 360822: '吉水县', - 360823: '峡江县', - 360824: '新干县', - 360825: '永丰县', - 360826: '泰和县', - 360827: '遂川县', - 360828: '万安县', - 360829: '安福县', - 360830: '永新县', - 360881: '井冈山市', - 360902: '袁州区', - 360921: '奉新县', - 360922: '万载县', - 360923: '上高县', - 360924: '宜丰县', - 360925: '靖安县', - 360926: '铜鼓县', - 360981: '丰城市', - 360982: '樟树市', - 360983: '高安市', - 361002: '临川区', - 361003: '东乡区', - 361021: '南城县', - 361022: '黎川县', - 361023: '南丰县', - 361024: '崇仁县', - 361025: '乐安县', - 361026: '宜黄县', - 361027: '金溪县', - 361028: '资溪县', - 361030: '广昌县', - 361102: '信州区', - 361103: '广丰区', - 361121: '上饶县', - 361123: '玉山县', - 361124: '铅山县', - 361125: '横峰县', - 361126: '弋阳县', - 361127: '余干县', - 361128: '鄱阳县', - 361129: '万年县', - 361130: '婺源县', - 361181: '德兴市', - 370102: '历下区', - 370103: '市中区', - 370104: '槐荫区', - 370105: '天桥区', - 370112: '历城区', - 370113: '长清区', - 370114: '章丘区', - 370115: '济阳区', - 370116: '莱芜区', - 370117: '钢城区', - 370124: '平阴县', - 370126: '商河县', - 370190: '高新区', - 370202: '市南区', - 370203: '市北区', - 370211: '黄岛区', - 370212: '崂山区', - 370213: '李沧区', - 370214: '城阳区', - 370215: '即墨区', - 370281: '胶州市', - 370283: '平度市', - 370285: '莱西市', - 370290: '开发区', - 370302: '淄川区', - 370303: '张店区', - 370304: '博山区', - 370305: '临淄区', - 370306: '周村区', - 370321: '桓台县', - 370322: '高青县', - 370323: '沂源县', - 370402: '市中区', - 370403: '薛城区', - 370404: '峄城区', - 370405: '台儿庄区', - 370406: '山亭区', - 370481: '滕州市', - 370502: '东营区', - 370503: '河口区', - 370505: '垦利区', - 370522: '利津县', - 370523: '广饶县', - 370602: '芝罘区', - 370611: '福山区', - 370612: '牟平区', - 370613: '莱山区', - 370634: '长岛县', - 370681: '龙口市', - 370682: '莱阳市', - 370683: '莱州市', - 370684: '蓬莱市', - 370685: '招远市', - 370686: '栖霞市', - 370687: '海阳市', - 370690: '开发区', - 370702: '潍城区', - 370703: '寒亭区', - 370704: '坊子区', - 370705: '奎文区', - 370724: '临朐县', - 370725: '昌乐县', - 370781: '青州市', - 370782: '诸城市', - 370783: '寿光市', - 370784: '安丘市', - 370785: '高密市', - 370786: '昌邑市', - 370790: '开发区', - 370791: '高新区', - 370811: '任城区', - 370812: '兖州区', - 370826: '微山县', - 370827: '鱼台县', - 370828: '金乡县', - 370829: '嘉祥县', - 370830: '汶上县', - 370831: '泗水县', - 370832: '梁山县', - 370881: '曲阜市', - 370883: '邹城市', - 370890: '高新区', - 370902: '泰山区', - 370911: '岱岳区', - 370921: '宁阳县', - 370923: '东平县', - 370982: '新泰市', - 370983: '肥城市', - 371002: '环翠区', - 371003: '文登区', - 371082: '荣成市', - 371083: '乳山市', - 371091: '经济技术开发区', - 371102: '东港区', - 371103: '岚山区', - 371121: '五莲县', - 371122: '莒县', - 371302: '兰山区', - 371311: '罗庄区', - 371312: '河东区', - 371321: '沂南县', - 371322: '郯城县', - 371323: '沂水县', - 371324: '兰陵县', - 371325: '费县', - 371326: '平邑县', - 371327: '莒南县', - 371328: '蒙阴县', - 371329: '临沭县', - 371402: '德城区', - 371403: '陵城区', - 371422: '宁津县', - 371423: '庆云县', - 371424: '临邑县', - 371425: '齐河县', - 371426: '平原县', - 371427: '夏津县', - 371428: '武城县', - 371481: '乐陵市', - 371482: '禹城市', - 371502: '东昌府区', - 371521: '阳谷县', - 371522: '莘县', - 371523: '茌平县', - 371524: '东阿县', - 371525: '冠县', - 371526: '高唐县', - 371581: '临清市', - 371602: '滨城区', - 371603: '沾化区', - 371621: '惠民县', - 371622: '阳信县', - 371623: '无棣县', - 371625: '博兴县', - 371681: '邹平市', - 371702: '牡丹区', - 371703: '定陶区', - 371721: '曹县', - 371722: '单县', - 371723: '成武县', - 371724: '巨野县', - 371725: '郓城县', - 371726: '鄄城县', - 371728: '东明县', - 410102: '中原区', - 410103: '二七区', - 410104: '管城回族区', - 410105: '金水区', - 410106: '上街区', - 410108: '惠济区', - 410122: '中牟县', - 410181: '巩义市', - 410182: '荥阳市', - 410183: '新密市', - 410184: '新郑市', - 410185: '登封市', - 410190: '高新技术开发区', - 410191: '经济技术开发区', - 410202: '龙亭区', - 410203: '顺河回族区', - 410204: '鼓楼区', - 410205: '禹王台区', - 410212: '祥符区', - 410221: '杞县', - 410222: '通许县', - 410223: '尉氏县', - 410225: '兰考县', - 410302: '老城区', - 410303: '西工区', - 410304: '瀍河回族区', - 410305: '涧西区', - 410306: '吉利区', - 410311: '洛龙区', - 410322: '孟津县', - 410323: '新安县', - 410324: '栾川县', - 410325: '嵩县', - 410326: '汝阳县', - 410327: '宜阳县', - 410328: '洛宁县', - 410329: '伊川县', - 410381: '偃师市', - 410402: '新华区', - 410403: '卫东区', - 410404: '石龙区', - 410411: '湛河区', - 410421: '宝丰县', - 410422: '叶县', - 410423: '鲁山县', - 410425: '郏县', - 410481: '舞钢市', - 410482: '汝州市', - 410502: '文峰区', - 410503: '北关区', - 410505: '殷都区', - 410506: '龙安区', - 410522: '安阳县', - 410523: '汤阴县', - 410526: '滑县', - 410527: '内黄县', - 410581: '林州市', - 410590: '开发区', - 410602: '鹤山区', - 410603: '山城区', - 410611: '淇滨区', - 410621: '浚县', - 410622: '淇县', - 410702: '红旗区', - 410703: '卫滨区', - 410704: '凤泉区', - 410711: '牧野区', - 410721: '新乡县', - 410724: '获嘉县', - 410725: '原阳县', - 410726: '延津县', - 410727: '封丘县', - 410728: '长垣县', - 410781: '卫辉市', - 410782: '辉县市', - 410802: '解放区', - 410803: '中站区', - 410804: '马村区', - 410811: '山阳区', - 410821: '修武县', - 410822: '博爱县', - 410823: '武陟县', - 410825: '温县', - 410882: '沁阳市', - 410883: '孟州市', - 410902: '华龙区', - 410922: '清丰县', - 410923: '南乐县', - 410926: '范县', - 410927: '台前县', - 410928: '濮阳县', - 411002: '魏都区', - 411003: '建安区', - 411024: '鄢陵县', - 411025: '襄城县', - 411081: '禹州市', - 411082: '长葛市', - 411102: '源汇区', - 411103: '郾城区', - 411104: '召陵区', - 411121: '舞阳县', - 411122: '临颍县', - 411202: '湖滨区', - 411203: '陕州区', - 411221: '渑池县', - 411224: '卢氏县', - 411281: '义马市', - 411282: '灵宝市', - 411302: '宛城区', - 411303: '卧龙区', - 411321: '南召县', - 411322: '方城县', - 411323: '西峡县', - 411324: '镇平县', - 411325: '内乡县', - 411326: '淅川县', - 411327: '社旗县', - 411328: '唐河县', - 411329: '新野县', - 411330: '桐柏县', - 411381: '邓州市', - 411402: '梁园区', - 411403: '睢阳区', - 411421: '民权县', - 411422: '睢县', - 411423: '宁陵县', - 411424: '柘城县', - 411425: '虞城县', - 411426: '夏邑县', - 411481: '永城市', - 411502: '浉河区', - 411503: '平桥区', - 411521: '罗山县', - 411522: '光山县', - 411523: '新县', - 411524: '商城县', - 411525: '固始县', - 411526: '潢川县', - 411527: '淮滨县', - 411528: '息县', - 411602: '川汇区', - 411621: '扶沟县', - 411622: '西华县', - 411623: '商水县', - 411624: '沈丘县', - 411625: '郸城县', - 411626: '淮阳县', - 411627: '太康县', - 411628: '鹿邑县', - 411681: '项城市', - 411690: '经济开发区', - 411702: '驿城区', - 411721: '西平县', - 411722: '上蔡县', - 411723: '平舆县', - 411724: '正阳县', - 411725: '确山县', - 411726: '泌阳县', - 411727: '汝南县', - 411728: '遂平县', - 411729: '新蔡县', - 419001: '济源市', - 420102: '江岸区', - 420103: '江汉区', - 420104: '硚口区', - 420105: '汉阳区', - 420106: '武昌区', - 420107: '青山区', - 420111: '洪山区', - 420112: '东西湖区', - 420113: '汉南区', - 420114: '蔡甸区', - 420115: '江夏区', - 420116: '黄陂区', - 420117: '新洲区', - 420202: '黄石港区', - 420203: '西塞山区', - 420204: '下陆区', - 420205: '铁山区', - 420222: '阳新县', - 420281: '大冶市', - 420302: '茅箭区', - 420303: '张湾区', - 420304: '郧阳区', - 420322: '郧西县', - 420323: '竹山县', - 420324: '竹溪县', - 420325: '房县', - 420381: '丹江口市', - 420502: '西陵区', - 420503: '伍家岗区', - 420504: '点军区', - 420505: '猇亭区', - 420506: '夷陵区', - 420525: '远安县', - 420526: '兴山县', - 420527: '秭归县', - 420528: '长阳土家族自治县', - 420529: '五峰土家族自治县', - 420581: '宜都市', - 420582: '当阳市', - 420583: '枝江市', - 420590: '经济开发区', - 420602: '襄城区', - 420606: '樊城区', - 420607: '襄州区', - 420624: '南漳县', - 420625: '谷城县', - 420626: '保康县', - 420682: '老河口市', - 420683: '枣阳市', - 420684: '宜城市', - 420702: '梁子湖区', - 420703: '华容区', - 420704: '鄂城区', - 420802: '东宝区', - 420804: '掇刀区', - 420822: '沙洋县', - 420881: '钟祥市', - 420882: '京山市', - 420902: '孝南区', - 420921: '孝昌县', - 420922: '大悟县', - 420923: '云梦县', - 420981: '应城市', - 420982: '安陆市', - 420984: '汉川市', - 421002: '沙市区', - 421003: '荆州区', - 421022: '公安县', - 421023: '监利县', - 421024: '江陵县', - 421081: '石首市', - 421083: '洪湖市', - 421087: '松滋市', - 421102: '黄州区', - 421121: '团风县', - 421122: '红安县', - 421123: '罗田县', - 421124: '英山县', - 421125: '浠水县', - 421126: '蕲春县', - 421127: '黄梅县', - 421181: '麻城市', - 421182: '武穴市', - 421202: '咸安区', - 421221: '嘉鱼县', - 421222: '通城县', - 421223: '崇阳县', - 421224: '通山县', - 421281: '赤壁市', - 421303: '曾都区', - 421321: '随县', - 421381: '广水市', - 422801: '恩施市', - 422802: '利川市', - 422822: '建始县', - 422823: '巴东县', - 422825: '宣恩县', - 422826: '咸丰县', - 422827: '来凤县', - 422828: '鹤峰县', - 429004: '仙桃市', - 429005: '潜江市', - 429006: '天门市', - 429021: '神农架林区', - 430102: '芙蓉区', - 430103: '天心区', - 430104: '岳麓区', - 430105: '开福区', - 430111: '雨花区', - 430112: '望城区', - 430121: '长沙县', - 430181: '浏阳市', - 430182: '宁乡市', - 430202: '荷塘区', - 430203: '芦淞区', - 430204: '石峰区', - 430211: '天元区', - 430212: '渌口区', - 430223: '攸县', - 430224: '茶陵县', - 430225: '炎陵县', - 430281: '醴陵市', - 430302: '雨湖区', - 430304: '岳塘区', - 430321: '湘潭县', - 430381: '湘乡市', - 430382: '韶山市', - 430405: '珠晖区', - 430406: '雁峰区', - 430407: '石鼓区', - 430408: '蒸湘区', - 430412: '南岳区', - 430421: '衡阳县', - 430422: '衡南县', - 430423: '衡山县', - 430424: '衡东县', - 430426: '祁东县', - 430481: '耒阳市', - 430482: '常宁市', - 430502: '双清区', - 430503: '大祥区', - 430511: '北塔区', - 430521: '邵东县', - 430522: '新邵县', - 430523: '邵阳县', - 430524: '隆回县', - 430525: '洞口县', - 430527: '绥宁县', - 430528: '新宁县', - 430529: '城步苗族自治县', - 430581: '武冈市', - 430602: '岳阳楼区', - 430603: '云溪区', - 430611: '君山区', - 430621: '岳阳县', - 430623: '华容县', - 430624: '湘阴县', - 430626: '平江县', - 430681: '汨罗市', - 430682: '临湘市', - 430702: '武陵区', - 430703: '鼎城区', - 430721: '安乡县', - 430722: '汉寿县', - 430723: '澧县', - 430724: '临澧县', - 430725: '桃源县', - 430726: '石门县', - 430781: '津市市', - 430802: '永定区', - 430811: '武陵源区', - 430821: '慈利县', - 430822: '桑植县', - 430902: '资阳区', - 430903: '赫山区', - 430921: '南县', - 430922: '桃江县', - 430923: '安化县', - 430981: '沅江市', - 431002: '北湖区', - 431003: '苏仙区', - 431021: '桂阳县', - 431022: '宜章县', - 431023: '永兴县', - 431024: '嘉禾县', - 431025: '临武县', - 431026: '汝城县', - 431027: '桂东县', - 431028: '安仁县', - 431081: '资兴市', - 431102: '零陵区', - 431103: '冷水滩区', - 431121: '祁阳县', - 431122: '东安县', - 431123: '双牌县', - 431124: '道县', - 431125: '江永县', - 431126: '宁远县', - 431127: '蓝山县', - 431128: '新田县', - 431129: '江华瑶族自治县', - 431202: '鹤城区', - 431221: '中方县', - 431222: '沅陵县', - 431223: '辰溪县', - 431224: '溆浦县', - 431225: '会同县', - 431226: '麻阳苗族自治县', - 431227: '新晃侗族自治县', - 431228: '芷江侗族自治县', - 431229: '靖州苗族侗族自治县', - 431230: '通道侗族自治县', - 431281: '洪江市', - 431302: '娄星区', - 431321: '双峰县', - 431322: '新化县', - 431381: '冷水江市', - 431382: '涟源市', - 433101: '吉首市', - 433122: '泸溪县', - 433123: '凤凰县', - 433124: '花垣县', - 433125: '保靖县', - 433126: '古丈县', - 433127: '永顺县', - 433130: '龙山县', - 440103: '荔湾区', - 440104: '越秀区', - 440105: '海珠区', - 440106: '天河区', - 440111: '白云区', - 440112: '黄埔区', - 440113: '番禺区', - 440114: '花都区', - 440115: '南沙区', - 440117: '从化区', - 440118: '增城区', - 440203: '武江区', - 440204: '浈江区', - 440205: '曲江区', - 440222: '始兴县', - 440224: '仁化县', - 440229: '翁源县', - 440232: '乳源瑶族自治县', - 440233: '新丰县', - 440281: '乐昌市', - 440282: '南雄市', - 440303: '罗湖区', - 440304: '福田区', - 440305: '南山区', - 440306: '宝安区', - 440307: '龙岗区', - 440308: '盐田区', - 440309: '龙华区', - 440310: '坪山区', - 440311: '光明区', - 440402: '香洲区', - 440403: '斗门区', - 440404: '金湾区', - 440507: '龙湖区', - 440511: '金平区', - 440512: '濠江区', - 440513: '潮阳区', - 440514: '潮南区', - 440515: '澄海区', - 440523: '南澳县', - 440604: '禅城区', - 440605: '南海区', - 440606: '顺德区', - 440607: '三水区', - 440608: '高明区', - 440703: '蓬江区', - 440704: '江海区', - 440705: '新会区', - 440781: '台山市', - 440783: '开平市', - 440784: '鹤山市', - 440785: '恩平市', - 440802: '赤坎区', - 440803: '霞山区', - 440804: '坡头区', - 440811: '麻章区', - 440823: '遂溪县', - 440825: '徐闻县', - 440881: '廉江市', - 440882: '雷州市', - 440883: '吴川市', - 440890: '经济技术开发区', - 440902: '茂南区', - 440904: '电白区', - 440981: '高州市', - 440982: '化州市', - 440983: '信宜市', - 441202: '端州区', - 441203: '鼎湖区', - 441204: '高要区', - 441223: '广宁县', - 441224: '怀集县', - 441225: '封开县', - 441226: '德庆县', - 441284: '四会市', - 441302: '惠城区', - 441303: '惠阳区', - 441322: '博罗县', - 441323: '惠东县', - 441324: '龙门县', - 441402: '梅江区', - 441403: '梅县区', - 441422: '大埔县', - 441423: '丰顺县', - 441424: '五华县', - 441426: '平远县', - 441427: '蕉岭县', - 441481: '兴宁市', - 441502: '城区', - 441521: '海丰县', - 441523: '陆河县', - 441581: '陆丰市', - 441602: '源城区', - 441621: '紫金县', - 441622: '龙川县', - 441623: '连平县', - 441624: '和平县', - 441625: '东源县', - 441702: '江城区', - 441704: '阳东区', - 441721: '阳西县', - 441781: '阳春市', - 441802: '清城区', - 441803: '清新区', - 441821: '佛冈县', - 441823: '阳山县', - 441825: '连山壮族瑶族自治县', - 441826: '连南瑶族自治县', - 441881: '英德市', - 441882: '连州市', - 441901: '中堂镇', - 441903: '南城街道办事处', - 441904: '长安镇', - 441905: '东坑镇', - 441906: '樟木头镇', - 441907: '莞城街道办事处', - 441908: '石龙镇', - 441909: '桥头镇', - 441910: '万江街道办事处', - 441911: '麻涌镇', - 441912: '虎门镇', - 441913: '谢岗镇', - 441914: '石碣镇', - 441915: '茶山镇', - 441916: '东城街道办事处', - 441917: '洪梅镇', - 441918: '道滘镇', - 441919: '高埗镇', - 441920: '企石镇', - 441921: '凤岗镇', - 441922: '大岭山镇', - 441923: '松山湖管委会', - 441924: '清溪镇', - 441925: '望牛墩镇', - 441926: '厚街镇', - 441927: '常平镇', - 441928: '寮步镇', - 441929: '石排镇', - 441930: '横沥镇', - 441931: '塘厦镇', - 441932: '黄江镇', - 441933: '大朗镇', - 441934: '东莞港', - 441935: '东莞生态园', - 441990: '沙田镇', - 442001: '南头镇', - 442002: '神湾镇', - 442003: '东凤镇', - 442004: '五桂山街道办事处', - 442005: '黄圃镇', - 442006: '小榄镇', - 442007: '石岐区街道办事处', - 442008: '横栏镇', - 442009: '三角镇', - 442010: '三乡镇', - 442011: '港口镇', - 442012: '沙溪镇', - 442013: '板芙镇', - 442015: '东升镇', - 442016: '阜沙镇', - 442017: '民众镇', - 442018: '东区街道办事处', - 442019: '火炬开发区街道办事处', - 442020: '西区街道办事处', - 442021: '南区街道办事处', - 442022: '古镇镇', - 442023: '坦洲镇', - 442024: '大涌镇', - 442025: '南朗镇', - 445102: '湘桥区', - 445103: '潮安区', - 445122: '饶平县', - 445202: '榕城区', - 445203: '揭东区', - 445222: '揭西县', - 445224: '惠来县', - 445281: '普宁市', - 445302: '云城区', - 445303: '云安区', - 445321: '新兴县', - 445322: '郁南县', - 445381: '罗定市', - 450102: '兴宁区', - 450103: '青秀区', - 450105: '江南区', - 450107: '西乡塘区', - 450108: '良庆区', - 450109: '邕宁区', - 450110: '武鸣区', - 450123: '隆安县', - 450124: '马山县', - 450125: '上林县', - 450126: '宾阳县', - 450127: '横县', - 450202: '城中区', - 450203: '鱼峰区', - 450204: '柳南区', - 450205: '柳北区', - 450206: '柳江区', - 450222: '柳城县', - 450223: '鹿寨县', - 450224: '融安县', - 450225: '融水苗族自治县', - 450226: '三江侗族自治县', - 450302: '秀峰区', - 450303: '叠彩区', - 450304: '象山区', - 450305: '七星区', - 450311: '雁山区', - 450312: '临桂区', - 450321: '阳朔县', - 450323: '灵川县', - 450324: '全州县', - 450325: '兴安县', - 450326: '永福县', - 450327: '灌阳县', - 450328: '龙胜各族自治县', - 450329: '资源县', - 450330: '平乐县', - 450332: '恭城瑶族自治县', - 450381: '荔浦市', - 450403: '万秀区', - 450405: '长洲区', - 450406: '龙圩区', - 450421: '苍梧县', - 450422: '藤县', - 450423: '蒙山县', - 450481: '岑溪市', - 450502: '海城区', - 450503: '银海区', - 450512: '铁山港区', - 450521: '合浦县', - 450602: '港口区', - 450603: '防城区', - 450621: '上思县', - 450681: '东兴市', - 450702: '钦南区', - 450703: '钦北区', - 450721: '灵山县', - 450722: '浦北县', - 450802: '港北区', - 450803: '港南区', - 450804: '覃塘区', - 450821: '平南县', - 450881: '桂平市', - 450902: '玉州区', - 450903: '福绵区', - 450921: '容县', - 450922: '陆川县', - 450923: '博白县', - 450924: '兴业县', - 450981: '北流市', - 451002: '右江区', - 451021: '田阳县', - 451022: '田东县', - 451023: '平果县', - 451024: '德保县', - 451026: '那坡县', - 451027: '凌云县', - 451028: '乐业县', - 451029: '田林县', - 451030: '西林县', - 451031: '隆林各族自治县', - 451081: '靖西市', - 451102: '八步区', - 451103: '平桂区', - 451121: '昭平县', - 451122: '钟山县', - 451123: '富川瑶族自治县', - 451202: '金城江区', - 451203: '宜州区', - 451221: '南丹县', - 451222: '天峨县', - 451223: '凤山县', - 451224: '东兰县', - 451225: '罗城仫佬族自治县', - 451226: '环江毛南族自治县', - 451227: '巴马瑶族自治县', - 451228: '都安瑶族自治县', - 451229: '大化瑶族自治县', - 451302: '兴宾区', - 451321: '忻城县', - 451322: '象州县', - 451323: '武宣县', - 451324: '金秀瑶族自治县', - 451381: '合山市', - 451402: '江州区', - 451421: '扶绥县', - 451422: '宁明县', - 451423: '龙州县', - 451424: '大新县', - 451425: '天等县', - 451481: '凭祥市', - 460105: '秀英区', - 460106: '龙华区', - 460107: '琼山区', - 460108: '美兰区', - 460202: '海棠区', - 460203: '吉阳区', - 460204: '天涯区', - 460205: '崖州区', - 460321: '西沙群岛', - 460322: '南沙群岛', - 460323: '中沙群岛的岛礁及其海域', - 460401: '那大镇', - 460402: '和庆镇', - 460403: '南丰镇', - 460404: '大成镇', - 460405: '雅星镇', - 460406: '兰洋镇', - 460407: '光村镇', - 460408: '木棠镇', - 460409: '海头镇', - 460410: '峨蔓镇', - 460411: '王五镇', - 460412: '白马井镇', - 460413: '中和镇', - 460414: '排浦镇', - 460415: '东成镇', - 460416: '新州镇', - 460417: '洋浦经济开发区', - 460418: '华南热作学院', - 469001: '五指山市', - 469002: '琼海市', - 469005: '文昌市', - 469006: '万宁市', - 469007: '东方市', - 469021: '定安县', - 469022: '屯昌县', - 469023: '澄迈县', - 469024: '临高县', - 469025: '白沙黎族自治县', - 469026: '昌江黎族自治县', - 469027: '乐东黎族自治县', - 469028: '陵水黎族自治县', - 469029: '保亭黎族苗族自治县', - 469030: '琼中黎族苗族自治县', - 500101: '万州区', - 500102: '涪陵区', - 500103: '渝中区', - 500104: '大渡口区', - 500105: '江北区', - 500106: '沙坪坝区', - 500107: '九龙坡区', - 500108: '南岸区', - 500109: '北碚区', - 500110: '綦江区', - 500111: '大足区', - 500112: '渝北区', - 500113: '巴南区', - 500114: '黔江区', - 500115: '长寿区', - 500116: '江津区', - 500117: '合川区', - 500118: '永川区', - 500119: '南川区', - 500120: '璧山区', - 500151: '铜梁区', - 500152: '潼南区', - 500153: '荣昌区', - 500154: '开州区', - 500155: '梁平区', - 500156: '武隆区', - 500229: '城口县', - 500230: '丰都县', - 500231: '垫江县', - 500233: '忠县', - 500235: '云阳县', - 500236: '奉节县', - 500237: '巫山县', - 500238: '巫溪县', - 500240: '石柱土家族自治县', - 500241: '秀山土家族苗族自治县', - 500242: '酉阳土家族苗族自治县', - 500243: '彭水苗族土家族自治县', - 510104: '锦江区', - 510105: '青羊区', - 510106: '金牛区', - 510107: '武侯区', - 510108: '成华区', - 510112: '龙泉驿区', - 510113: '青白江区', - 510114: '新都区', - 510115: '温江区', - 510116: '双流区', - 510117: '郫都区', - 510121: '金堂县', - 510129: '大邑县', - 510131: '蒲江县', - 510132: '新津县', - 510181: '都江堰市', - 510182: '彭州市', - 510183: '邛崃市', - 510184: '崇州市', - 510185: '简阳市', - 510191: '高新区', - 510302: '自流井区', - 510303: '贡井区', - 510304: '大安区', - 510311: '沿滩区', - 510321: '荣县', - 510322: '富顺县', - 510402: '东区', - 510403: '西区', - 510411: '仁和区', - 510421: '米易县', - 510422: '盐边县', - 510502: '江阳区', - 510503: '纳溪区', - 510504: '龙马潭区', - 510521: '泸县', - 510522: '合江县', - 510524: '叙永县', - 510525: '古蔺县', - 510603: '旌阳区', - 510604: '罗江区', - 510623: '中江县', - 510681: '广汉市', - 510682: '什邡市', - 510683: '绵竹市', - 510703: '涪城区', - 510704: '游仙区', - 510705: '安州区', - 510722: '三台县', - 510723: '盐亭县', - 510725: '梓潼县', - 510726: '北川羌族自治县', - 510727: '平武县', - 510781: '江油市', - 510791: '高新区', - 510802: '利州区', - 510811: '昭化区', - 510812: '朝天区', - 510821: '旺苍县', - 510822: '青川县', - 510823: '剑阁县', - 510824: '苍溪县', - 510903: '船山区', - 510904: '安居区', - 510921: '蓬溪县', - 510922: '射洪县', - 510923: '大英县', - 511002: '市中区', - 511011: '东兴区', - 511024: '威远县', - 511025: '资中县', - 511083: '隆昌市', - 511102: '市中区', - 511111: '沙湾区', - 511112: '五通桥区', - 511113: '金口河区', - 511123: '犍为县', - 511124: '井研县', - 511126: '夹江县', - 511129: '沐川县', - 511132: '峨边彝族自治县', - 511133: '马边彝族自治县', - 511181: '峨眉山市', - 511302: '顺庆区', - 511303: '高坪区', - 511304: '嘉陵区', - 511321: '南部县', - 511322: '营山县', - 511323: '蓬安县', - 511324: '仪陇县', - 511325: '西充县', - 511381: '阆中市', - 511402: '东坡区', - 511403: '彭山区', - 511421: '仁寿县', - 511423: '洪雅县', - 511424: '丹棱县', - 511425: '青神县', - 511502: '翠屏区', - 511503: '南溪区', - 511504: '叙州区', - 511523: '江安县', - 511524: '长宁县', - 511525: '高县', - 511526: '珙县', - 511527: '筠连县', - 511528: '兴文县', - 511529: '屏山县', - 511602: '广安区', - 511603: '前锋区', - 511621: '岳池县', - 511622: '武胜县', - 511623: '邻水县', - 511681: '华蓥市', - 511702: '通川区', - 511703: '达川区', - 511722: '宣汉县', - 511723: '开江县', - 511724: '大竹县', - 511725: '渠县', - 511781: '万源市', - 511802: '雨城区', - 511803: '名山区', - 511822: '荥经县', - 511823: '汉源县', - 511824: '石棉县', - 511825: '天全县', - 511826: '芦山县', - 511827: '宝兴县', - 511902: '巴州区', - 511903: '恩阳区', - 511921: '通江县', - 511922: '南江县', - 511923: '平昌县', - 512002: '雁江区', - 512021: '安岳县', - 512022: '乐至县', - 513201: '马尔康市', - 513221: '汶川县', - 513222: '理县', - 513223: '茂县', - 513224: '松潘县', - 513225: '九寨沟县', - 513226: '金川县', - 513227: '小金县', - 513228: '黑水县', - 513230: '壤塘县', - 513231: '阿坝县', - 513232: '若尔盖县', - 513233: '红原县', - 513301: '康定市', - 513322: '泸定县', - 513323: '丹巴县', - 513324: '九龙县', - 513325: '雅江县', - 513326: '道孚县', - 513327: '炉霍县', - 513328: '甘孜县', - 513329: '新龙县', - 513330: '德格县', - 513331: '白玉县', - 513332: '石渠县', - 513333: '色达县', - 513334: '理塘县', - 513335: '巴塘县', - 513336: '乡城县', - 513337: '稻城县', - 513338: '得荣县', - 513401: '西昌市', - 513422: '木里藏族自治县', - 513423: '盐源县', - 513424: '德昌县', - 513425: '会理县', - 513426: '会东县', - 513427: '宁南县', - 513428: '普格县', - 513429: '布拖县', - 513430: '金阳县', - 513431: '昭觉县', - 513432: '喜德县', - 513433: '冕宁县', - 513434: '越西县', - 513435: '甘洛县', - 513436: '美姑县', - 513437: '雷波县', - 520102: '南明区', - 520103: '云岩区', - 520111: '花溪区', - 520112: '乌当区', - 520113: '白云区', - 520115: '观山湖区', - 520121: '开阳县', - 520122: '息烽县', - 520123: '修文县', - 520181: '清镇市', - 520201: '钟山区', - 520203: '六枝特区', - 520221: '水城县', - 520281: '盘州市', - 520302: '红花岗区', - 520303: '汇川区', - 520304: '播州区', - 520322: '桐梓县', - 520323: '绥阳县', - 520324: '正安县', - 520325: '道真仡佬族苗族自治县', - 520326: '务川仡佬族苗族自治县', - 520327: '凤冈县', - 520328: '湄潭县', - 520329: '余庆县', - 520330: '习水县', - 520381: '赤水市', - 520382: '仁怀市', - 520402: '西秀区', - 520403: '平坝区', - 520422: '普定县', - 520423: '镇宁布依族苗族自治县', - 520424: '关岭布依族苗族自治县', - 520425: '紫云苗族布依族自治县', - 520502: '七星关区', - 520521: '大方县', - 520522: '黔西县', - 520523: '金沙县', - 520524: '织金县', - 520525: '纳雍县', - 520526: '威宁彝族回族苗族自治县', - 520527: '赫章县', - 520602: '碧江区', - 520603: '万山区', - 520621: '江口县', - 520622: '玉屏侗族自治县', - 520623: '石阡县', - 520624: '思南县', - 520625: '印江土家族苗族自治县', - 520626: '德江县', - 520627: '沿河土家族自治县', - 520628: '松桃苗族自治县', - 522301: '兴义市', - 522302: '兴仁市', - 522323: '普安县', - 522324: '晴隆县', - 522325: '贞丰县', - 522326: '望谟县', - 522327: '册亨县', - 522328: '安龙县', - 522601: '凯里市', - 522622: '黄平县', - 522623: '施秉县', - 522624: '三穗县', - 522625: '镇远县', - 522626: '岑巩县', - 522627: '天柱县', - 522628: '锦屏县', - 522629: '剑河县', - 522630: '台江县', - 522631: '黎平县', - 522632: '榕江县', - 522633: '从江县', - 522634: '雷山县', - 522635: '麻江县', - 522636: '丹寨县', - 522701: '都匀市', - 522702: '福泉市', - 522722: '荔波县', - 522723: '贵定县', - 522725: '瓮安县', - 522726: '独山县', - 522727: '平塘县', - 522728: '罗甸县', - 522729: '长顺县', - 522730: '龙里县', - 522731: '惠水县', - 522732: '三都水族自治县', - 530102: '五华区', - 530103: '盘龙区', - 530111: '官渡区', - 530112: '西山区', - 530113: '东川区', - 530114: '呈贡区', - 530115: '晋宁区', - 530124: '富民县', - 530125: '宜良县', - 530126: '石林彝族自治县', - 530127: '嵩明县', - 530128: '禄劝彝族苗族自治县', - 530129: '寻甸回族彝族自治县', - 530181: '安宁市', - 530302: '麒麟区', - 530303: '沾益区', - 530304: '马龙区', - 530322: '陆良县', - 530323: '师宗县', - 530324: '罗平县', - 530325: '富源县', - 530326: '会泽县', - 530381: '宣威市', - 530402: '红塔区', - 530403: '江川区', - 530422: '澄江县', - 530423: '通海县', - 530424: '华宁县', - 530425: '易门县', - 530426: '峨山彝族自治县', - 530427: '新平彝族傣族自治县', - 530428: '元江哈尼族彝族傣族自治县', - 530502: '隆阳区', - 530521: '施甸县', - 530523: '龙陵县', - 530524: '昌宁县', - 530581: '腾冲市', - 530602: '昭阳区', - 530621: '鲁甸县', - 530622: '巧家县', - 530623: '盐津县', - 530624: '大关县', - 530625: '永善县', - 530626: '绥江县', - 530627: '镇雄县', - 530628: '彝良县', - 530629: '威信县', - 530681: '水富市', - 530702: '古城区', - 530721: '玉龙纳西族自治县', - 530722: '永胜县', - 530723: '华坪县', - 530724: '宁蒗彝族自治县', - 530802: '思茅区', - 530821: '宁洱哈尼族彝族自治县', - 530822: '墨江哈尼族自治县', - 530823: '景东彝族自治县', - 530824: '景谷傣族彝族自治县', - 530825: '镇沅彝族哈尼族拉祜族自治县', - 530826: '江城哈尼族彝族自治县', - 530827: '孟连傣族拉祜族佤族自治县', - 530828: '澜沧拉祜族自治县', - 530829: '西盟佤族自治县', - 530902: '临翔区', - 530921: '凤庆县', - 530922: '云县', - 530923: '永德县', - 530924: '镇康县', - 530925: '双江拉祜族佤族布朗族傣族自治县', - 530926: '耿马傣族佤族自治县', - 530927: '沧源佤族自治县', - 532301: '楚雄市', - 532322: '双柏县', - 532323: '牟定县', - 532324: '南华县', - 532325: '姚安县', - 532326: '大姚县', - 532327: '永仁县', - 532328: '元谋县', - 532329: '武定县', - 532331: '禄丰县', - 532501: '个旧市', - 532502: '开远市', - 532503: '蒙自市', - 532504: '弥勒市', - 532523: '屏边苗族自治县', - 532524: '建水县', - 532525: '石屏县', - 532527: '泸西县', - 532528: '元阳县', - 532529: '红河县', - 532530: '金平苗族瑶族傣族自治县', - 532531: '绿春县', - 532532: '河口瑶族自治县', - 532601: '文山市', - 532622: '砚山县', - 532623: '西畴县', - 532624: '麻栗坡县', - 532625: '马关县', - 532626: '丘北县', - 532627: '广南县', - 532628: '富宁县', - 532801: '景洪市', - 532822: '勐海县', - 532823: '勐腊县', - 532901: '大理市', - 532922: '漾濞彝族自治县', - 532923: '祥云县', - 532924: '宾川县', - 532925: '弥渡县', - 532926: '南涧彝族自治县', - 532927: '巍山彝族回族自治县', - 532928: '永平县', - 532929: '云龙县', - 532930: '洱源县', - 532931: '剑川县', - 532932: '鹤庆县', - 533102: '瑞丽市', - 533103: '芒市', - 533122: '梁河县', - 533123: '盈江县', - 533124: '陇川县', - 533301: '泸水市', - 533323: '福贡县', - 533324: '贡山独龙族怒族自治县', - 533325: '兰坪白族普米族自治县', - 533401: '香格里拉市', - 533422: '德钦县', - 533423: '维西傈僳族自治县', - 540102: '城关区', - 540103: '堆龙德庆区', - 540104: '达孜区', - 540121: '林周县', - 540122: '当雄县', - 540123: '尼木县', - 540124: '曲水县', - 540127: '墨竹工卡县', - 540202: '桑珠孜区', - 540221: '南木林县', - 540222: '江孜县', - 540223: '定日县', - 540224: '萨迦县', - 540225: '拉孜县', - 540226: '昂仁县', - 540227: '谢通门县', - 540228: '白朗县', - 540229: '仁布县', - 540230: '康马县', - 540231: '定结县', - 540232: '仲巴县', - 540233: '亚东县', - 540234: '吉隆县', - 540235: '聂拉木县', - 540236: '萨嘎县', - 540237: '岗巴县', - 540302: '卡若区', - 540321: '江达县', - 540322: '贡觉县', - 540323: '类乌齐县', - 540324: '丁青县', - 540325: '察雅县', - 540326: '八宿县', - 540327: '左贡县', - 540328: '芒康县', - 540329: '洛隆县', - 540330: '边坝县', - 540402: '巴宜区', - 540421: '工布江达县', - 540422: '米林县', - 540423: '墨脱县', - 540424: '波密县', - 540425: '察隅县', - 540426: '朗县', - 540502: '乃东区', - 540521: '扎囊县', - 540522: '贡嘎县', - 540523: '桑日县', - 540524: '琼结县', - 540525: '曲松县', - 540526: '措美县', - 540527: '洛扎县', - 540528: '加查县', - 540529: '隆子县', - 540530: '错那县', - 540531: '浪卡子县', - 540602: '色尼区', - 540621: '嘉黎县', - 540622: '比如县', - 540623: '聂荣县', - 540624: '安多县', - 540625: '申扎县', - 540626: '索县', - 540627: '班戈县', - 540628: '巴青县', - 540629: '尼玛县', - 540630: '双湖县', - 542521: '普兰县', - 542522: '札达县', - 542523: '噶尔县', - 542524: '日土县', - 542525: '革吉县', - 542526: '改则县', - 542527: '措勤县', - 610102: '新城区', - 610103: '碑林区', - 610104: '莲湖区', - 610111: '灞桥区', - 610112: '未央区', - 610113: '雁塔区', - 610114: '阎良区', - 610115: '临潼区', - 610116: '长安区', - 610117: '高陵区', - 610118: '鄠邑区', - 610122: '蓝田县', - 610124: '周至县', - 610202: '王益区', - 610203: '印台区', - 610204: '耀州区', - 610222: '宜君县', - 610302: '渭滨区', - 610303: '金台区', - 610304: '陈仓区', - 610322: '凤翔县', - 610323: '岐山县', - 610324: '扶风县', - 610326: '眉县', - 610327: '陇县', - 610328: '千阳县', - 610329: '麟游县', - 610330: '凤县', - 610331: '太白县', - 610402: '秦都区', - 610403: '杨陵区', - 610404: '渭城区', - 610422: '三原县', - 610423: '泾阳县', - 610424: '乾县', - 610425: '礼泉县', - 610426: '永寿县', - 610428: '长武县', - 610429: '旬邑县', - 610430: '淳化县', - 610431: '武功县', - 610481: '兴平市', - 610482: '彬州市', - 610502: '临渭区', - 610503: '华州区', - 610522: '潼关县', - 610523: '大荔县', - 610524: '合阳县', - 610525: '澄城县', - 610526: '蒲城县', - 610527: '白水县', - 610528: '富平县', - 610581: '韩城市', - 610582: '华阴市', - 610602: '宝塔区', - 610603: '安塞区', - 610621: '延长县', - 610622: '延川县', - 610623: '子长县', - 610625: '志丹县', - 610626: '吴起县', - 610627: '甘泉县', - 610628: '富县', - 610629: '洛川县', - 610630: '宜川县', - 610631: '黄龙县', - 610632: '黄陵县', - 610702: '汉台区', - 610703: '南郑区', - 610722: '城固县', - 610723: '洋县', - 610724: '西乡县', - 610725: '勉县', - 610726: '宁强县', - 610727: '略阳县', - 610728: '镇巴县', - 610729: '留坝县', - 610730: '佛坪县', - 610802: '榆阳区', - 610803: '横山区', - 610822: '府谷县', - 610824: '靖边县', - 610825: '定边县', - 610826: '绥德县', - 610827: '米脂县', - 610828: '佳县', - 610829: '吴堡县', - 610830: '清涧县', - 610831: '子洲县', - 610881: '神木市', - 610902: '汉滨区', - 610921: '汉阴县', - 610922: '石泉县', - 610923: '宁陕县', - 610924: '紫阳县', - 610925: '岚皋县', - 610926: '平利县', - 610927: '镇坪县', - 610928: '旬阳县', - 610929: '白河县', - 611002: '商州区', - 611021: '洛南县', - 611022: '丹凤县', - 611023: '商南县', - 611024: '山阳县', - 611025: '镇安县', - 611026: '柞水县', - 620102: '城关区', - 620103: '七里河区', - 620104: '西固区', - 620105: '安宁区', - 620111: '红古区', - 620121: '永登县', - 620122: '皋兰县', - 620123: '榆中县', - 620201: '市辖区', - 620290: '雄关区', - 620291: '长城区', - 620292: '镜铁区', - 620293: '新城镇', - 620294: '峪泉镇', - 620295: '文殊镇', - 620302: '金川区', - 620321: '永昌县', - 620402: '白银区', - 620403: '平川区', - 620421: '靖远县', - 620422: '会宁县', - 620423: '景泰县', - 620502: '秦州区', - 620503: '麦积区', - 620521: '清水县', - 620522: '秦安县', - 620523: '甘谷县', - 620524: '武山县', - 620525: '张家川回族自治县', - 620602: '凉州区', - 620621: '民勤县', - 620622: '古浪县', - 620623: '天祝藏族自治县', - 620702: '甘州区', - 620721: '肃南裕固族自治县', - 620722: '民乐县', - 620723: '临泽县', - 620724: '高台县', - 620725: '山丹县', - 620802: '崆峒区', - 620821: '泾川县', - 620822: '灵台县', - 620823: '崇信县', - 620825: '庄浪县', - 620826: '静宁县', - 620881: '华亭市', - 620902: '肃州区', - 620921: '金塔县', - 620922: '瓜州县', - 620923: '肃北蒙古族自治县', - 620924: '阿克塞哈萨克族自治县', - 620981: '玉门市', - 620982: '敦煌市', - 621002: '西峰区', - 621021: '庆城县', - 621022: '环县', - 621023: '华池县', - 621024: '合水县', - 621025: '正宁县', - 621026: '宁县', - 621027: '镇原县', - 621102: '安定区', - 621121: '通渭县', - 621122: '陇西县', - 621123: '渭源县', - 621124: '临洮县', - 621125: '漳县', - 621126: '岷县', - 621202: '武都区', - 621221: '成县', - 621222: '文县', - 621223: '宕昌县', - 621224: '康县', - 621225: '西和县', - 621226: '礼县', - 621227: '徽县', - 621228: '两当县', - 622901: '临夏市', - 622921: '临夏县', - 622922: '康乐县', - 622923: '永靖县', - 622924: '广河县', - 622925: '和政县', - 622926: '东乡族自治县', - 622927: '积石山保安族东乡族撒拉族自治县', - 623001: '合作市', - 623021: '临潭县', - 623022: '卓尼县', - 623023: '舟曲县', - 623024: '迭部县', - 623025: '玛曲县', - 623026: '碌曲县', - 623027: '夏河县', - 630102: '城东区', - 630103: '城中区', - 630104: '城西区', - 630105: '城北区', - 630121: '大通回族土族自治县', - 630122: '湟中县', - 630123: '湟源县', - 630202: '乐都区', - 630203: '平安区', - 630222: '民和回族土族自治县', - 630223: '互助土族自治县', - 630224: '化隆回族自治县', - 630225: '循化撒拉族自治县', - 632221: '门源回族自治县', - 632222: '祁连县', - 632223: '海晏县', - 632224: '刚察县', - 632321: '同仁县', - 632322: '尖扎县', - 632323: '泽库县', - 632324: '河南蒙古族自治县', - 632521: '共和县', - 632522: '同德县', - 632523: '贵德县', - 632524: '兴海县', - 632525: '贵南县', - 632621: '玛沁县', - 632622: '班玛县', - 632623: '甘德县', - 632624: '达日县', - 632625: '久治县', - 632626: '玛多县', - 632701: '玉树市', - 632722: '杂多县', - 632723: '称多县', - 632724: '治多县', - 632725: '囊谦县', - 632726: '曲麻莱县', - 632801: '格尔木市', - 632802: '德令哈市', - 632803: '茫崖市', - 632821: '乌兰县', - 632822: '都兰县', - 632823: '天峻县', - 640104: '兴庆区', - 640105: '西夏区', - 640106: '金凤区', - 640121: '永宁县', - 640122: '贺兰县', - 640181: '灵武市', - 640202: '大武口区', - 640205: '惠农区', - 640221: '平罗县', - 640302: '利通区', - 640303: '红寺堡区', - 640323: '盐池县', - 640324: '同心县', - 640381: '青铜峡市', - 640402: '原州区', - 640422: '西吉县', - 640423: '隆德县', - 640424: '泾源县', - 640425: '彭阳县', - 640502: '沙坡头区', - 640521: '中宁县', - 640522: '海原县', - 650102: '天山区', - 650103: '沙依巴克区', - 650104: '新市区', - 650105: '水磨沟区', - 650106: '头屯河区', - 650107: '达坂城区', - 650109: '米东区', - 650121: '乌鲁木齐县', - 650202: '独山子区', - 650203: '克拉玛依区', - 650204: '白碱滩区', - 650205: '乌尔禾区', - 650402: '高昌区', - 650421: '鄯善县', - 650422: '托克逊县', - 650502: '伊州区', - 650521: '巴里坤哈萨克自治县', - 650522: '伊吾县', - 652301: '昌吉市', - 652302: '阜康市', - 652323: '呼图壁县', - 652324: '玛纳斯县', - 652325: '奇台县', - 652327: '吉木萨尔县', - 652328: '木垒哈萨克自治县', - 652701: '博乐市', - 652702: '阿拉山口市', - 652722: '精河县', - 652723: '温泉县', - 652801: '库尔勒市', - 652822: '轮台县', - 652823: '尉犁县', - 652824: '若羌县', - 652825: '且末县', - 652826: '焉耆回族自治县', - 652827: '和静县', - 652828: '和硕县', - 652829: '博湖县', - 652901: '阿克苏市', - 652922: '温宿县', - 652923: '库车县', - 652924: '沙雅县', - 652925: '新和县', - 652926: '拜城县', - 652927: '乌什县', - 652928: '阿瓦提县', - 652929: '柯坪县', - 653001: '阿图什市', - 653022: '阿克陶县', - 653023: '阿合奇县', - 653024: '乌恰县', - 653101: '喀什市', - 653121: '疏附县', - 653122: '疏勒县', - 653123: '英吉沙县', - 653124: '泽普县', - 653125: '莎车县', - 653126: '叶城县', - 653127: '麦盖提县', - 653128: '岳普湖县', - 653129: '伽师县', - 653130: '巴楚县', - 653131: '塔什库尔干塔吉克自治县', - 653201: '和田市', - 653221: '和田县', - 653222: '墨玉县', - 653223: '皮山县', - 653224: '洛浦县', - 653225: '策勒县', - 653226: '于田县', - 653227: '民丰县', - 654002: '伊宁市', - 654003: '奎屯市', - 654004: '霍尔果斯市', - 654021: '伊宁县', - 654022: '察布查尔锡伯自治县', - 654023: '霍城县', - 654024: '巩留县', - 654025: '新源县', - 654026: '昭苏县', - 654027: '特克斯县', - 654028: '尼勒克县', - 654201: '塔城市', - 654202: '乌苏市', - 654221: '额敏县', - 654223: '沙湾县', - 654224: '托里县', - 654225: '裕民县', - 654226: '和布克赛尔蒙古自治县', - 654301: '阿勒泰市', - 654321: '布尔津县', - 654322: '富蕴县', - 654323: '福海县', - 654324: '哈巴河县', - 654325: '青河县', - 654326: '吉木乃县', - 659001: '石河子市', - 659002: '阿拉尔市', - 659003: '图木舒克市', - 659004: '五家渠市', - 659005: '北屯市', - 659006: '铁门关市', - 659007: '双河市', - 659008: '可克达拉市', - 659009: '昆玉市', - 710101: '中正区', - 710102: '大同区', - 710103: '中山区', - 710104: '松山区', - 710105: '大安区', - 710106: '万华区', - 710107: '信义区', - 710108: '士林区', - 710109: '北投区', - 710110: '内湖区', - 710111: '南港区', - 710112: '文山区', - 710199: '其它区', - 710201: '新兴区', - 710202: '前金区', - 710203: '芩雅区', - 710204: '盐埕区', - 710205: '鼓山区', - 710206: '旗津区', - 710207: '前镇区', - 710208: '三民区', - 710209: '左营区', - 710210: '楠梓区', - 710211: '小港区', - 710241: '苓雅区', - 710242: '仁武区', - 710243: '大社区', - 710244: '冈山区', - 710245: '路竹区', - 710246: '阿莲区', - 710247: '田寮区', - 710248: '燕巢区', - 710249: '桥头区', - 710250: '梓官区', - 710251: '弥陀区', - 710252: '永安区', - 710253: '湖内区', - 710254: '凤山区', - 710255: '大寮区', - 710256: '林园区', - 710257: '鸟松区', - 710258: '大树区', - 710259: '旗山区', - 710260: '美浓区', - 710261: '六龟区', - 710262: '内门区', - 710263: '杉林区', - 710264: '甲仙区', - 710265: '桃源区', - 710266: '那玛夏区', - 710267: '茂林区', - 710268: '茄萣区', - 710299: '其它区', - 710301: '中西区', - 710302: '东区', - 710303: '南区', - 710304: '北区', - 710305: '安平区', - 710306: '安南区', - 710339: '永康区', - 710340: '归仁区', - 710341: '新化区', - 710342: '左镇区', - 710343: '玉井区', - 710344: '楠西区', - 710345: '南化区', - 710346: '仁德区', - 710347: '关庙区', - 710348: '龙崎区', - 710349: '官田区', - 710350: '麻豆区', - 710351: '佳里区', - 710352: '西港区', - 710353: '七股区', - 710354: '将军区', - 710355: '学甲区', - 710356: '北门区', - 710357: '新营区', - 710358: '后壁区', - 710359: '白河区', - 710360: '东山区', - 710361: '六甲区', - 710362: '下营区', - 710363: '柳营区', - 710364: '盐水区', - 710365: '善化区', - 710366: '大内区', - 710367: '山上区', - 710368: '新市区', - 710369: '安定区', - 710399: '其它区', - 710401: '中区', - 710402: '东区', - 710403: '南区', - 710404: '西区', - 710405: '北区', - 710406: '北屯区', - 710407: '西屯区', - 710408: '南屯区', - 710431: '太平区', - 710432: '大里区', - 710433: '雾峰区', - 710434: '乌日区', - 710435: '丰原区', - 710436: '后里区', - 710437: '石冈区', - 710438: '东势区', - 710439: '和平区', - 710440: '新社区', - 710441: '潭子区', - 710442: '大雅区', - 710443: '神冈区', - 710444: '大肚区', - 710445: '沙鹿区', - 710446: '龙井区', - 710447: '梧栖区', - 710448: '清水区', - 710449: '大甲区', - 710450: '外埔区', - 710451: '大安区', - 710499: '其它区', - 710507: '金沙镇', - 710508: '金湖镇', - 710509: '金宁乡', - 710510: '金城镇', - 710511: '烈屿乡', - 710512: '乌坵乡', - 710614: '南投市', - 710615: '中寮乡', - 710616: '草屯镇', - 710617: '国姓乡', - 710618: '埔里镇', - 710619: '仁爱乡', - 710620: '名间乡', - 710621: '集集镇', - 710622: '水里乡', - 710623: '鱼池乡', - 710624: '信义乡', - 710625: '竹山镇', - 710626: '鹿谷乡', - 710701: '仁爱区', - 710702: '信义区', - 710703: '中正区', - 710704: '中山区', - 710705: '安乐区', - 710706: '暖暖区', - 710707: '七堵区', - 710799: '其它区', - 710801: '东区', - 710802: '北区', - 710803: '香山区', - 710899: '其它区', - 710901: '东区', - 710902: '西区', - 710999: '其它区', - 711130: '万里区', - 711132: '板桥区', - 711133: '汐止区', - 711134: '深坑区', - 711135: '石碇区', - 711136: '瑞芳区', - 711137: '平溪区', - 711138: '双溪区', - 711139: '贡寮区', - 711140: '新店区', - 711141: '坪林区', - 711142: '乌来区', - 711143: '永和区', - 711144: '中和区', - 711145: '土城区', - 711146: '三峡区', - 711147: '树林区', - 711148: '莺歌区', - 711149: '三重区', - 711150: '新庄区', - 711151: '泰山区', - 711152: '林口区', - 711153: '芦洲区', - 711154: '五股区', - 711155: '八里区', - 711156: '淡水区', - 711157: '三芝区', - 711158: '石门区', - 711287: '宜兰市', - 711288: '头城镇', - 711289: '礁溪乡', - 711290: '壮围乡', - 711291: '员山乡', - 711292: '罗东镇', - 711293: '三星乡', - 711294: '大同乡', - 711295: '五结乡', - 711296: '冬山乡', - 711297: '苏澳镇', - 711298: '南澳乡', - 711299: '钓鱼台', - 711387: '竹北市', - 711388: '湖口乡', - 711389: '新丰乡', - 711390: '新埔镇', - 711391: '关西镇', - 711392: '芎林乡', - 711393: '宝山乡', - 711394: '竹东镇', - 711395: '五峰乡', - 711396: '横山乡', - 711397: '尖石乡', - 711398: '北埔乡', - 711399: '峨眉乡', - 711414: '中坜区', - 711415: '平镇区', - 711417: '杨梅区', - 711418: '新屋区', - 711419: '观音区', - 711420: '桃园区', - 711421: '龟山区', - 711422: '八德区', - 711423: '大溪区', - 711425: '大园区', - 711426: '芦竹区', - 711487: '中坜市', - 711488: '平镇市', - 711489: '龙潭乡', - 711490: '杨梅市', - 711491: '新屋乡', - 711492: '观音乡', - 711493: '桃园市', - 711494: '龟山乡', - 711495: '八德市', - 711496: '大溪镇', - 711497: '复兴乡', - 711498: '大园乡', - 711499: '芦竹乡', - 711520: '头份市', - 711582: '竹南镇', - 711583: '头份镇', - 711584: '三湾乡', - 711585: '南庄乡', - 711586: '狮潭乡', - 711587: '后龙镇', - 711588: '通霄镇', - 711589: '苑里镇', - 711590: '苗栗市', - 711591: '造桥乡', - 711592: '头屋乡', - 711593: '公馆乡', - 711594: '大湖乡', - 711595: '泰安乡', - 711596: '铜锣乡', - 711597: '三义乡', - 711598: '西湖乡', - 711599: '卓兰镇', - 711736: '员林市', - 711774: '彰化市', - 711775: '芬园乡', - 711776: '花坛乡', - 711777: '秀水乡', - 711778: '鹿港镇', - 711779: '福兴乡', - 711780: '线西乡', - 711781: '和美镇', - 711782: '伸港乡', - 711783: '员林镇', - 711784: '社头乡', - 711785: '永靖乡', - 711786: '埔心乡', - 711787: '溪湖镇', - 711788: '大村乡', - 711789: '埔盐乡', - 711790: '田中镇', - 711791: '北斗镇', - 711792: '田尾乡', - 711793: '埤头乡', - 711794: '溪州乡', - 711795: '竹塘乡', - 711796: '二林镇', - 711797: '大城乡', - 711798: '芳苑乡', - 711799: '二水乡', - 711982: '番路乡', - 711983: '梅山乡', - 711984: '竹崎乡', - 711985: '阿里山乡', - 711986: '中埔乡', - 711987: '大埔乡', - 711988: '水上乡', - 711989: '鹿草乡', - 711990: '太保市', - 711991: '朴子市', - 711992: '东石乡', - 711993: '六脚乡', - 711994: '新港乡', - 711995: '民雄乡', - 711996: '大林镇', - 711997: '溪口乡', - 711998: '义竹乡', - 711999: '布袋镇', - 712180: '斗南镇', - 712181: '大埤乡', - 712182: '虎尾镇', - 712183: '土库镇', - 712184: '褒忠乡', - 712185: '东势乡', - 712186: '台西乡', - 712187: '仑背乡', - 712188: '麦寮乡', - 712189: '斗六市', - 712190: '林内乡', - 712191: '古坑乡', - 712192: '莿桐乡', - 712193: '西螺镇', - 712194: '二仑乡', - 712195: '北港镇', - 712196: '水林乡', - 712197: '口湖乡', - 712198: '四湖乡', - 712199: '元长乡', - 712451: '崁顶乡', - 712467: '屏东市', - 712468: '三地门乡', - 712469: '雾台乡', - 712470: '玛家乡', - 712471: '九如乡', - 712472: '里港乡', - 712473: '高树乡', - 712474: '盐埔乡', - 712475: '长治乡', - 712476: '麟洛乡', - 712477: '竹田乡', - 712478: '内埔乡', - 712479: '万丹乡', - 712480: '潮州镇', - 712481: '泰武乡', - 712482: '来义乡', - 712483: '万峦乡', - 712484: '莰顶乡', - 712485: '新埤乡', - 712486: '南州乡', - 712487: '林边乡', - 712488: '东港镇', - 712489: '琉球乡', - 712490: '佳冬乡', - 712491: '新园乡', - 712492: '枋寮乡', - 712493: '枋山乡', - 712494: '春日乡', - 712495: '狮子乡', - 712496: '车城乡', - 712497: '牡丹乡', - 712498: '恒春镇', - 712499: '满州乡', - 712584: '台东市', - 712585: '绿岛乡', - 712586: '兰屿乡', - 712587: '延平乡', - 712588: '卑南乡', - 712589: '鹿野乡', - 712590: '关山镇', - 712591: '海端乡', - 712592: '池上乡', - 712593: '东河乡', - 712594: '成功镇', - 712595: '长滨乡', - 712596: '金峰乡', - 712597: '大武乡', - 712598: '达仁乡', - 712599: '太麻里乡', - 712686: '花莲市', - 712687: '新城乡', - 712688: '太鲁阁', - 712689: '秀林乡', - 712690: '吉安乡', - 712691: '寿丰乡', - 712692: '凤林镇', - 712693: '光复乡', - 712694: '丰滨乡', - 712695: '瑞穗乡', - 712696: '万荣乡', - 712697: '玉里镇', - 712698: '卓溪乡', - 712699: '富里乡', - 712794: '马公市', - 712795: '西屿乡', - 712796: '望安乡', - 712797: '七美乡', - 712798: '白沙乡', - 712799: '湖西乡', - 712896: '南竿乡', - 712897: '北竿乡', - 712898: '东引乡', - 712899: '莒光乡', - 810101: '中西区', - 810102: '湾仔区', - 810103: '东区', - 810104: '南区', - 810201: '九龙城区', - 810202: '油尖旺区', - 810203: '深水埗区', - 810204: '黄大仙区', - 810205: '观塘区', - 810301: '北区', - 810302: '大埔区', - 810303: '沙田区', - 810304: '西贡区', - 810305: '元朗区', - 810306: '屯门区', - 810307: '荃湾区', - 810308: '葵青区', - 810309: '离岛区', - 820102: '花地玛堂区', - 820103: '花王堂区', - 820104: '望德堂区', - 820105: '大堂区', - 820106: '风顺堂区', - 820202: '嘉模堂区', - 820203: '路氹填海区', - 820204: '圣方济各堂区' - } -}; diff --git a/smart-admin-h5/src/constants/erp/contact-company.js b/smart-admin-h5/src/constants/erp/contact-company.js deleted file mode 100644 index b3730d9b..00000000 --- a/smart-admin-h5/src/constants/erp/contact-company.js +++ /dev/null @@ -1,165 +0,0 @@ -/** - * 往来单位性质 - * @type {{ENTERPRISE: {value: number, desc: string}, PERSONAL: {value: number, desc: string}}} - */ -export const CONTACT_COMPANY_NATURE_ENUM = - { - ENTERPRISE: { - value: 0, - desc: '企业' - }, - PERSONAL: { - value: 1, - desc: '个人' - } - }; -/** - * 往来机构类型 - * @type {{CUSTOMER: {value: number, desc: string}, SUPPLIER: {value: number, desc: string}}} - */ -export const - CONTACT_COMPANY_TYPE_ENUM = - { - CUSTOMER: { - value: 0, - desc: '客户' - }, - SUPPLIER: { - value: 1, - desc: '供应商' - }, - SCHOOL: { - value: 2, - desc: '分校' - }, - COOPERATIVE_ORG: { - value: 3, - desc: '合作机构' - } - }; - -/** - * 付款方式 - * @type {{BANK: {value: number, desc: string}, ZHI_FU_BAO: {value: number, desc: string}, WE_CHAT: {value: number, desc: string}}} - */ -export const - PAYMENT_TYPE_ENUM = - { - BANK: { - value: 0, - desc: '银行卡' - }, - WE_CHAT: { - value: 1, - desc: '微信' - }, - ZHI_FU_BAO: { - value: 2, - desc: '支付宝' - } - }; - -/** - * 往来机构余额类型 - * @type {{RECEIVE_BALANCE: {value: number, desc: string}, PAY_BALANCE: {value: number, desc: string}}} - */ -export const - CONTACT_COMPANY_BALANCE_TYPE = - { - PAY_BALANCE: { - value: 0, - desc: '应付款余额' - }, - RECEIVE_BALANCE: { - value: 1, - desc: '应收款余额' - } - }; - -/** - * 往来单位等级 - * @type {{CORE: {value: number, desc: string}, POTENTIAL: {value: number, desc: string}, BAD: {value: number, desc: string}, GENERAL: {value: number, desc: string}}} - */ -export const CONTACT_COMPANY_GRADE_ENUM = { - CORE: { - value: 1, - desc: '核心', - color: 'green' - }, - POTENTIAL: { - value: 2, - desc: '有潜力', - color: 'cyan' - }, - GENERAL: { - value: 3, - desc: '普通', - color: 'blue' - }, - BAD: { - value: 4, - desc: '较差', - color: 'purple' - } -}; - -/** - * 往来单位等级 - * @type {{OWNER: {value: number, desc: string}, SHARER: {value: number, desc: string}, COMMON: {value: number, desc: string}}} - */ -export const CONTACT_COMPANY_SHARE_TYPE_ENUM = { - OWNER: { - value: 0, - desc: '属于我的' - }, - SHARER: { - value: 1, - desc: '共享的' - }, - COMMON: { - value: 2, - desc: '公共的' - } -}; - -/** - * 往来单位标签 - * @type {{OWNER: {value: number, desc: string}, SHARER: {value: number, desc: string}, COMMON: {value: number, desc: string}}} - */ -export const CONTACT_COMPANY_TAG_ENUM = { - POTENTIAL: { - value: 0, - desc: '潜在', - color: 'green' - }, - INTENTION: { - value: 1, - desc: '意向', - color: 'cyan' - }, - NEGOTIATION: { - value: 2, - desc: '洽谈', - color: 'blue' - }, - DEAL: { - value: 3, - desc: '成交', - color: 'geekblue' - }, - LOSS: { - value: 4, - desc: '流失', - color: 'red' - } -}; - -export default { - CONTACT_COMPANY_NATURE_ENUM, - CONTACT_COMPANY_TYPE_ENUM, - PAYMENT_TYPE_ENUM, - CONTACT_COMPANY_BALANCE_TYPE, - CONTACT_COMPANY_GRADE_ENUM, - CONTACT_COMPANY_SHARE_TYPE_ENUM, - CONTACT_COMPANY_TAG_ENUM -}; diff --git a/smart-admin-h5/src/constants/erp/index.js b/smart-admin-h5/src/constants/erp/index.js deleted file mode 100644 index b14cb861..00000000 --- a/smart-admin-h5/src/constants/erp/index.js +++ /dev/null @@ -1,6 +0,0 @@ -import contactCompany from './contact-company'; - -export default { - ...contactCompany -}; - diff --git a/smart-admin-h5/src/constants/file.js b/smart-admin-h5/src/constants/file.js deleted file mode 100644 index cc72166b..00000000 --- a/smart-admin-h5/src/constants/file.js +++ /dev/null @@ -1,92 +0,0 @@ -export const COMMON_FILE_FOLDER_TYPE_ENUM = { - DISPLAY_PIC: { - value: 1, - desc: '轮播展示图' - }, - RESOURCE_LECTURER: { - value: 2, - desc: '资源-讲师图片' - }, - RESOURCE_FILE: { - value: 3, - desc: '资源-文件资源' - }, - USER_AVATAR: { - value: 4, - desc: '用户头像' - }, - STOCK_BASIC: { - value: 5, - desc: '货物基本信息图片' - }, - PUBLICATION_QR_CODE: { - value: 6, - desc: '出版物二维码图片' - }, - RESOURCE_PAGE_QR_CODE: { - value: 7, - desc: '资源页面链接二维码图片' - }, - FINANCE_RECEIVE_QR_CODE: { - value: 8, - desc: '财务收款二维码' - }, - FINANCE_WX_PAY_CERT: { - value: 9, - desc: '财务-微信支付证书' - }, - GOODS: { - value: 10, - desc: '商品图片-公用文件夹' - }, - EXCEL_EXPORT: { - value: 11, - desc: 'excel导出-私有文件夹' - }, - FINANCE_WAIT_PAYMENT_PAYMENT_PROOF: { - value: 12, - desc: '财务待支付支付凭证' - }, - FEEDBACK: { - value: 99, - desc: '用户反馈图片' - }, - EDITOR: { - value: 100, - desc: '文本编辑器' - }, - EDITOR_IMG: { - value: 100, - desc: '文本编辑器' - }, - INTERNAL_INFORMATION: { - value: 14, - desc: '内部资料' - }, - CRM_USER: { - value: 111, - desc: 'CRM学员跟进附件' - }, - CRM_SCHOOL: { - value: 112, - desc: 'CRM分校跟进附件' - }, - // = =======erp 相关 begin============ - ERP_STOCK_IMG: { - value: 201, - desc: '货物图片' - }, - ERP_CONTACT_COMPANY_RECEIVE_IMAGE: { - value: 210, - desc: '往来单位收款二维码' - }, - ERP_CONTACT_COMPANY_ATTACHMENT: { - value: 211, - desc: '往来单位附件' - } - // = =======erp 相关 end ============ -}; - -export default { - COMMON_FILE_FOLDER_TYPE_ENUM -}; diff --git a/smart-admin-h5/src/constants/index.js b/smart-admin-h5/src/constants/index.js deleted file mode 100644 index 384b7029..00000000 --- a/smart-admin-h5/src/constants/index.js +++ /dev/null @@ -1,7 +0,0 @@ -import school from '@/constants/school'; -import erp from './erp'; - -export default { - ...school, - ...erp -}; diff --git a/smart-admin-h5/src/constants/school.js b/smart-admin-h5/src/constants/school.js deleted file mode 100644 index aa69bd01..00000000 --- a/smart-admin-h5/src/constants/school.js +++ /dev/null @@ -1,71 +0,0 @@ -/** - * 分校标签 - */ -export const SCHOOL_TAG_ENUM = { - POTENTIAL: { - value: 0, - desc: '潜在' - }, - INTENTION: { - value: 1, - desc: '意向' - }, - NEGOTIATION: { - value: 2, - desc: '洽谈' - }, - DEAL: { - value: 3, - desc: '成交' - }, - LOSS: { - value: 4, - desc: '流失' - } -}; - -/** - * 分校等级 - */ -export const SCHOOL_GRADE_ENUM = { - CORE: { - value: 1, - desc: '核心' - }, - POTENTIAL: { - value: 2, - desc: '有潜力' - }, - GENERAL: { - value: 3, - desc: '普通' - }, - BAD: { - value: 4, - desc: '较差' - } -}; - -/** - * 共享类型 - */ -export const SCHOOL_SHARE_TYPE_ENUM = { - OWNER: { - value: 0, - desc: '属于我的' - }, - SHARER: { - value: 1, - desc: '共享的' - }, - COMMON: { - value: 2, - desc: '公共的' - } -}; - -export default { - SCHOOL_TAG_ENUM, - SCHOOL_GRADE_ENUM, - SCHOOL_SHARE_TYPE_ENUM -}; diff --git a/smart-admin-h5/src/filters/filter.js b/smart-admin-h5/src/filters/filter.js deleted file mode 100644 index 5bb102f2..00000000 --- a/smart-admin-h5/src/filters/filter.js +++ /dev/null @@ -1,298 +0,0 @@ -import Vue from 'vue'; - -function ellipsis(value, length) { - if (!value) return ''; - if (value.length > length) { - return value.slice(0, length) + '...'; - } - return value; -} - -/** - * 去除空格 type 1-所有空格 2-前后空格 3-前空格 4-后空格 - */ -function trim(value, trim) { - switch (trim) { - case 1: - return value.replace(/\s+/g, ''); - case 2: - return value.replace(/(^\s*)|(\s*$)/g, ''); - case 3: - return value.replace(/(^\s*)/g, ''); - case 4: - return value.replace(/(\s*$)/g, ''); - default: - return value; - } -} - -/** - * 任意格式日期处理 - 使用格式: - {{ '2018-09-14 01:05' | formatDate(yyyy-MM-dd hh:mm:ss) }} - {{ '2018-09-14 01:05' | formatDate(yyyy-MM-dd) }} - {{ '2018-09-14 01:05' | formatDate(MM/dd) }} 等 - - * @param value - * @param fmt - * @returns {*} - */ -function formatDate(value, fmt) { - var date = new Date(value); - var o = { - 'M+': date.getMonth() + 1, // 月份 - 'd+': date.getDate(), // 日 - 'h+': date.getHours(), // 小时 - 'm+': date.getMinutes(), // 分 - 's+': date.getSeconds(), // 秒 - 'w+': date.getDay(), // 星期 - 'q+': Math.floor((date.getMonth() + 3) / 3), // 季度 - 'S': date.getMilliseconds() // 毫秒 - }; - if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length)); - for (var k in o) { - if (k === 'w+') { - if (o[k] === 0) { - fmt = fmt.replace('w', '周日'); - } else if (o[k] === 1) { - fmt = fmt.replace('w', '周一'); - } else if (o[k] === 2) { - fmt = fmt.replace('w', '周二'); - } else if (o[k] === 3) { - fmt = fmt.replace('w', '周三'); - } else if (o[k] === 4) { - fmt = fmt.replace('w', '周四'); - } else if (o[k] === 5) { - fmt = fmt.replace('w', '周五'); - } else if (o[k] === 6) { - fmt = fmt.replace('w', '周六'); - } - } else if (new RegExp('(' + k + ')').test(fmt)) { - fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length))); - } - } - return fmt; -} - -/** - * 字母大小写切换 - type - 1:首字母大写 - 2:首页母小写 - 3:大小写转换 - 4:全部大写 - 5:全部小写 - * @param str - * @param type - * @returns {string|*} - */ -function changeCase(str, type) { - function ToggleCase(str) { - var itemText = ''; - str.split('').forEach( - function(item) { - if (/^([a-z]+)/.test(item)) { - itemText += item.toUpperCase(); - } else if (/^([A-Z]+)/.test(item)) { - itemText += item.toLowerCase(); - } else { - itemText += item; - } - }); - return itemText; - } - - switch (type) { - case 1: - return str.replace(/\b\w+\b/g, function(word) { - return word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase(); - }); - case 2: - return str.replace(/\b\w+\b/g, function(word) { - return word.substring(0, 1).toLowerCase() + word.substring(1).toUpperCase(); - }); - case 3: - return ToggleCase(str); - case 4: - return str.toUpperCase(); - case 5: - return str.toLowerCase(); - default: - return str; - } -} - -/** - * 字符串循环复制,count->次数 - */ -function repeatStr(str, count) { - var text = ''; - for (var i = 0; i < count; i++) { - text += str; - } - return text; -} - -/** - * 字符串替换 - */ -function replaceAll(str, AFindText, ARepText) { - const raRegExp = new RegExp(AFindText, 'g'); - return str.replace(raRegExp, ARepText); -} - -/** - * - * 字符替换*,隐藏手机号或者身份证号等 - replaceStr(字符串,字符格式, 替换方式,替换的字符(默认*)) - ecDo.replaceStr('18819322663',[3,5,3],0) - result:188*****663 - ecDo.replaceStr('asdasdasdaa',[3,5,3],1) - result:***asdas*** - ecDo.replaceStr('1asd88465asdwqe3',[5],0) - result:*****8465asdwqe3 - ecDo.replaceStr('1asd88465asdwqe3',[5],1,'+') - result:"1asd88465as+++++" - * - * @param str - * @param regArr - * @param type - * @param ARepText - * @returns {*} - */ -function replaceStr(str, regArr, type, ARepText) { - var regtext = ''; - var Reg = null; - var replaceText = ARepText || '*'; - // repeatStr是在上面定义过的(字符串循环复制),大家注意哦 - if (regArr.length === 3 && type === 0) { - regtext = '(\\w{' + regArr[0] + '})\\w{' + regArr[1] + '}(\\w{' + regArr[2] + '})'; - Reg = new RegExp(regtext); - var replaceCount = this.repeatStr(replaceText, regArr[1]); - return str.replace(Reg, '$1' + replaceCount + '$2'); - } else if (regArr.length === 3 && type === 1) { - regtext = '\\w{' + regArr[0] + '}(\\w{' + regArr[1] + '})\\w{' + regArr[2] + '}'; - Reg = new RegExp(regtext); - var replaceCount1 = this.repeatStr(replaceText, regArr[0]); - var replaceCount2 = this.repeatStr(replaceText, regArr[2]); - return str.replace(Reg, replaceCount1 + '$1' + replaceCount2); - } else if (regArr.length === 1 && type === 0) { - regtext = '(^\\w{' + regArr[0] + '})'; - Reg = new RegExp(regtext); - var replaceCount = this.repeatStr(replaceText, regArr[0]); - return str.replace(Reg, replaceCount); - } else if (regArr.length === 1 && type === 1) { - regtext = '(\\w{' + regArr[0] + '}$)'; - Reg = new RegExp(regtext); - var replaceCount = this.repeatStr(replaceText, regArr[0]); - return str.replace(Reg, replaceCount); - } -} - -/** - * 格式化处理字符串 - ecDo.formatText('1234asda567asd890') - result:"12,34a,sda,567,asd,890" - ecDo.formatText('1234asda567asd890',4,' ') - result:"1 234a sda5 67as d890" - ecDo.formatText('1234asda567asd890',4,'-') - result:"1-234a-sda5-67as-d890" - - * @param str - * @param size - * @param delimiter - * @returns {*} - */ -function formatText(str, size, delimiter) { - var _size = size || 3; - var _delimiter = delimiter || ','; - var regText = '\\B(?=(\\w{' + _size + '})+(?!\\w))'; - var reg = new RegExp(regText, 'g'); - return str.replace(reg, _delimiter); -} - -/** - * 现金额大写转换函数 - ecDo.upDigit(168752632) - result:"人民币壹亿陆仟捌佰柒拾伍万贰仟陆佰叁拾贰元整" - ecDo.upDigit(1682) - result:"人民币壹仟陆佰捌拾贰元整" - ecDo.upDigit(-1693) - result:"欠人民币壹仟陆佰玖拾叁元整" - * @param n - * @returns {string} - */ -function upDigit(n) { - var fraction = ['角', '分', '厘']; - var digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']; - var unit = [ - ['元', '万', '亿'], - ['', '拾', '佰', '仟'] - ]; - var head = n < 0 ? '欠人民币' : '人民币'; - n = Math.abs(n); - var s = ''; - for (var i = 0; i < fraction.length; i++) { - s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, ''); - } - s = s || '整'; - n = Math.floor(n); - for (var i = 0; i < unit[0].length && n > 0; i++) { - var p = ''; - for (var j = 0; j < unit[1].length && n > 0; j++) { - p = digit[n % 10] + unit[1][j] + p; - n = Math.floor(n / 10); - } - s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s; - // s = p + unit[0][i] + s; - } - return head + s.replace(/(零.)*零元/, '元').replace(/(零.)+/g, '零').replace(/^整$/, '零元整'); -} - -// 保留2位小数 -function toFixed(val, acc) { - let num = parseFloat(val); - if (isNaN(num)) { - num = 0; - } - let accuracy = parseInt(acc); - if (isNaN(accuracy) || accuracy < 0 || accuracy > 10) { - accuracy = 2; - } - return num.toFixed(accuracy); -} - -// 转百分比 -function toPercent(val, acc) { - let num = parseFloat(val); - if (isNaN(num)) { - num = 0; - } - let accuracy = parseInt(acc); - if (isNaN(accuracy) || accuracy < 0 || accuracy > 10) { - accuracy = 2; - } - return (num * 100).toFixed(accuracy) + '%'; -} - -// ------------ enum begin ------------ -function getEnumDescByValue(value, enumName) { - return Vue.prototype.$enum.getDescByValue(enumName, value); -} - -// ------------ enum end ------------ - -export { - trim, - changeCase, - repeatStr, - replaceAll, - replaceStr, - formatText, - upDigit, - toFixed, - formatDate, - toPercent, - getEnumDescByValue, - ellipsis -}; diff --git a/smart-admin-h5/src/filters/index.js b/smart-admin-h5/src/filters/index.js deleted file mode 100644 index 484c0dc0..00000000 --- a/smart-admin-h5/src/filters/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import Vue from 'vue' - -import * as filter from './filter' - -Object.keys(filter).forEach(key => Vue.filter(key, filter[key])) diff --git a/smart-admin-h5/src/lib/cookie.js b/smart-admin-h5/src/lib/cookie.js deleted file mode 100644 index 83386119..00000000 --- a/smart-admin-h5/src/lib/cookie.js +++ /dev/null @@ -1,21 +0,0 @@ -import Cookies from 'js-cookie'; -import config from '@/config'; -const { cookieExpires } = config; -export const TOKEN_KEY = 'token'; - -export default { - setToken: token => { - Cookies.set(TOKEN_KEY, token, { - // token在Cookie中存储的天数,默认1天 - expires: cookieExpires || 7 - }); - }, - getToken: () => { - const token = Cookies.get(TOKEN_KEY); - if (token) return token; - else return null; - }, - clearToken: () => { - Cookies.remove(TOKEN_KEY); - } -}; diff --git a/smart-admin-h5/src/lib/erp-http.js b/smart-admin-h5/src/lib/erp-http.js deleted file mode 100644 index 3f4766f8..00000000 --- a/smart-admin-h5/src/lib/erp-http.js +++ /dev/null @@ -1,65 +0,0 @@ -import Axios from 'axios'; -import config from '@/config'; -import cookie from '@/lib/cookie'; -import { Toast } from 'vant'; - -export const baseUrl = config.baseUrl.erpApiUrl; - -const axios = Axios.create({ - baseURL: baseUrl, - timeout: 30000, - headers: { - 'Content-Type': 'application/json; charset=utf-8' - } -}); - -// 添加请求拦截器 -axios.interceptors.request.use( - function(config) { - const token = cookie.getToken(); - if (token) { - config.headers['x-access-token'] = token; - } - return config; - }, - function(error) { - return Promise.reject(error); - } -); - -// 添加响应拦截器 -axios.interceptors.response.use( - res => { - const { data } = res; - if (data && data.code && data.code !== 1) { - if (data.code === 121) { - cookie.clearToken(); - localStorage.clear(); - window.location.href = window.location.pathname + '#/login'; - Toast.fail('未登录,或登录失效,请登录'); - return; - } else if (data.code === 502) { - window.location.href = window.location.pathname + '#/500'; - return; - } else { - Toast.fail(data.msg); - return Promise.reject(res); - } - } - return Promise.resolve(data); - }, - error => { - Toast.fail('服务内部错误'); - return Promise.reject(error); - } -); - -export const postAxios = (url, data, config) => { - return axios.post(url, data, config); -}; - -export const getAxios = (url, data) => { - return axios.get(url, { - params: data - }); -}; diff --git a/smart-admin-h5/src/lib/http.js b/smart-admin-h5/src/lib/http.js deleted file mode 100644 index b4c86937..00000000 --- a/smart-admin-h5/src/lib/http.js +++ /dev/null @@ -1,65 +0,0 @@ -import Axios from 'axios'; -import config from '@/config'; -import cookie from '@/lib/cookie'; -import { Toast } from 'vant'; - -export const baseUrl = config.baseUrl.apiUrl; - -const axios = Axios.create({ - baseURL: baseUrl, - timeout: 30000, - headers: { - 'Content-Type': 'application/json; charset=utf-8' - } -}); - -// 添加请求拦截器 -axios.interceptors.request.use( - function(config) { - const token = cookie.getToken(); - if (token) { - config.headers['x-access-token'] = token; - } - return config; - }, - function(error) { - return Promise.reject(error); - } -); - -// 添加响应拦截器 -axios.interceptors.response.use( - res => { - const { data } = res; - if (data && data.code && data.code !== 1) { - if (data.code === 1001) { - cookie.clearToken(); - localStorage.clear(); - window.location.href = window.location.pathname + '#/login'; - Toast.fail('未登录,或登录失效,请登录'); - return; - } else if (data.code === 502) { - window.location.href = window.location.pathname + '#/500'; - return; - } else { - Toast.fail(data.msg); - return Promise.reject(res); - } - } - return Promise.resolve(data); - }, - error => { - Toast.fail('服务内部错误'); - return Promise.reject(error); - } -); - -export const postAxios = (url, data, config) => { - return axios.post(url, data, config); -}; - -export const getAxios = (url, data) => { - return axios.get(url, { - params: data - }); -}; diff --git a/smart-admin-h5/src/lib/local.js b/smart-admin-h5/src/lib/local.js deleted file mode 100644 index c19d7e3d..00000000 --- a/smart-admin-h5/src/lib/local.js +++ /dev/null @@ -1,8 +0,0 @@ -export const localSave = (key, value) => { - localStorage.setItem(key, value); -}; - -export const localRead = key => { - return localStorage.getItem(key) || ''; -}; - diff --git a/smart-admin-h5/src/lib/menu-func.js b/smart-admin-h5/src/lib/menu-func.js deleted file mode 100644 index 914d5379..00000000 --- a/smart-admin-h5/src/lib/menu-func.js +++ /dev/null @@ -1,276 +0,0 @@ -import { forEach, hasOneOf, objEqual } from '@/lib/util'; -import config from '@/config'; -import { localRead, localSave } from '@/lib/local'; -const { title, useI18n } = config; -export const hasChild = item => { - return item.children && item.children.length !== 0; -}; - -/** - * 通过权限过滤菜单 - * @param {Object} map 权限对象 - * @param {Array} menuList 菜单列表 - * @returns {Array} - */ -export const getShowMenu = (map = {}, menuList, access = false) => { - // 判断是否为超级管理员 - if (access) { - return menuList; - } - // 返回的菜单列表 - let result = []; - for (let menuItem of menuList) { - let routerObj = JSON.parse(JSON.stringify(menuItem)); - if ( - map.hasOwnProperty(menuItem.name) && - (menuItem.name !== 'home' && menuItem.name !== '_home') - ) { - // 判断该菜单权限下是否为数组,若为数组,则为功能点权限否则为子菜单 - if (getType(map[routerObj.name]) === 'array') { - let funcPrivilege = localRead('funcPrivilegeInfo') - ? JSON.parse(localRead('funcPrivilegeInfo')) - : {}; - localSave( - 'funcPrivilegeInfo', - JSON.stringify({ - ...funcPrivilege, - [routerObj.name]: map[routerObj.name] - }) - ); - } else if ( - getType(map[routerObj.name]) !== 'array' && - !routerObj.children - ) { - // 判断是否为二级菜单,若是则需要多枚举一层赋值 - let funcPrivilege = localRead('funcPrivilegeInfo') - ? JSON.parse(localRead('funcPrivilegeInfo')) - : {}; - localSave( - 'funcPrivilegeInfo', - JSON.stringify({ - ...funcPrivilege, - [routerObj.name]: map[routerObj.name][routerObj.name] - }) - ); - } else if ( - getType(map[routerObj.name]) !== 'array' && - routerObj.children - ) { - // 循环子菜单权限 - routerObj.children = getShowMenu( - map[routerObj.name], - routerObj.children - ); - } - result.push(routerObj); - } - } - return result; -}; -// 获取数据类型 -export const getType = obj => { - return {}.toString - .call(obj) - .match(/\s([a-zA-Z]+)/)[1] - .toLowerCase(); -}; - -/** - * @description 本地存储和获取标签导航列表 - */ -export const setTagNavListInLocalStorage = list => { - localStorage.tagNaveList = JSON.stringify(list); -}; -/** - * @returns {Array} 其中的每个元素只包含路由原信息中的name, path, meta三项 - */ -export const getTagNavListFromLocalStorage = () => { - const list = localStorage.tagNaveList; - return list ? JSON.parse(list) : []; -}; -export const getBreadCrumbList = (route, homeRoute) => { - let homeItem = { - ...homeRoute, - icon: homeRoute.meta.icon - }; - let routeMatched = route.matched; - if (routeMatched.some(item => item.name === homeRoute.name)) { - return [homeItem]; - } - let res = routeMatched - .filter(item => { - return item.meta === undefined || !item.meta.hideInBread; - }) - .map(item => { - let meta = { - ...item.meta - }; - if (meta.title && typeof meta.title === 'function') { - meta.__titleIsFunction__ = true; - meta.title = meta.title(route); - } - let obj = { - icon: (item.meta && item.meta.icon) || '', - name: item.name, - meta: meta - }; - return obj; - }); - res = res.filter(item => { - return !item.meta.hideInMenu; - }); - return [...res]; -}; -/** - * @param {Array} routers 路由列表数组 - * @description 用于找到路由列表中name为home的对象 - */ -export const getHomeRoute = (routers, homeName = 'Home') => { - let i = -1; - let len = routers.length; - let homeRoute = {}; - while (++i < len) { - let item = routers[i]; - if (item.children && item.children.length) { - let res = getHomeRoute(item.children, homeName); - if (res.name) return res; - } else { - if (item.name === homeName) homeRoute = item; - } - } - return homeRoute; -}; -/** - * @param {Array} list 标签列表 - * @param {String} name 当前关闭的标签的name - */ -export const getNextRoute = (list, route) => { - let res = {}; - if (list.length === 2) { - res = getHomeRoute(list); - } else { - const index = list.findIndex(item => routeEqual(item, route)); - if (index === list.length - 1) res = list[list.length - 2]; - else res = list[index + 1]; - } - return res; -}; - -/** - * 判断打开的标签列表里是否已存在这个新添加的路由对象 - */ -export const routeHasExist = (tagNavList, routeItem) => { - let len = tagNavList.length; - let res = false; - doCustomTimes(len, index => { - if (routeEqual(tagNavList[index], routeItem)) res = true; - }); - return res; -}; -/** - * @param {*} list 现有标签导航列表 - * @param {*} newRoute 新添加的路由原信息对象 - * @description 如果该newRoute已经存在则不再添加 - */ -export const getNewTagList = (list, newRoute) => { - const { name, path, meta, query } = newRoute; - let newList = [...list]; - let index = newList.findIndex(item => item.name === name); - if (index >= 0) { - newList[index] = { name, path, meta, query }; - } else newList.push({ name, path, meta, query }); - return newList; -}; -export const routeEqual = (route1, route2) => { - return route1.name === route2.name; -}; -export const getRouteTitleHandled = route => { - let router = { - ...route - }; - let meta = { - ...route.meta - }; - let title = ''; - if (meta.title) { - if (typeof meta.title === 'function') { - meta.__titleIsFunction__ = true; - title = meta.title(router); - } else title = meta.title; - } - meta.title = title; - router.meta = meta; - return router; -}; -/** - * @param {Number} times 回调函数需要执行的次数 - * @param {Function} callback 回调函数 - */ -export const doCustomTimes = (times, callback) => { - let i = -1; - while (++i < times) { - callback(i); - } -}; -export const showTitle = (item, vm) => { - let { title, __titleIsFunction__ } = item.meta; - if (!title) return; - if (useI18n) { - if (title.includes('{{') && title.includes('}}') && useI18n) { - title = title.replace(/({{[\s\S]+?}})/, (m, str) => - str.replace(/{{([\s\S]*)}}/, (m, _) => vm.$t(_.trim())) - ); - } else if (__titleIsFunction__) title = item.meta.title; - else title = vm.$t(item.name); - } else title = (item.meta && item.meta.title) || item.name; - return title; -}; -/** - * @description 根据当前跳转的路由设置显示在浏览器标签的title - * @param {Object} routeItem 路由对象 - * @param {Object} vm Vue实例 - */ -export const setTitle = (routeItem, vm) => { - const handledRoute = getRouteTitleHandled(routeItem); - const pageTitle = showTitle(handledRoute, vm); - const resTitle = pageTitle ? `${pageTitle} - ${title}` : title; - window.document.title = resTitle; -}; - -export const findNodeUpper = (ele, tag) => { - if (ele.parentNode) { - if (ele.parentNode.tagName === tag.toUpperCase()) { - return ele.parentNode; - } else { - return findNodeUpper(ele.parentNode, tag); - } - } -}; - -export const findNodeUpperByClasses = (ele, classes) => { - let parentNode = ele.parentNode; - if (parentNode) { - let classList = parentNode.classList; - if ( - classList && - classes.every(className => classList.contains(className)) - ) { - return parentNode; - } else { - return findNodeUpperByClasses(parentNode, classes); - } - } -}; - -export const findNodeDownward = (ele, tag) => { - const tagName = tag.toUpperCase(); - if (ele.childNodes.length) { - let i = -1; - let len = ele.childNodes.length; - while (++i < len) { - let child = ele.childNodes[i]; - if (child.tagName === tagName) return child; - else return findNodeDownward(child, tag); - } - } -}; diff --git a/smart-admin-h5/src/lib/printPlugs.js b/smart-admin-h5/src/lib/printPlugs.js deleted file mode 100644 index 9c4295dd..00000000 --- a/smart-admin-h5/src/lib/printPlugs.js +++ /dev/null @@ -1,133 +0,0 @@ -// 打印类属性、方法定义 -/* eslint-disable */ -//第二个参数表明是否要关闭当前窗口 -const Print = function(dom, close, options) { - if (!(this instanceof Print)) return new Print(dom, close, options); - - this.options = this.extend( - { - noPrint: '.no-print' - }, - options - ); - - if (typeof dom === 'string') { - this.dom = document.querySelector(dom); - } else { - this.dom = dom; - } - - this.init(close); -}; -Print.prototype = { - init: function(close) { - var content = this.getStyle() + this.getHtml(); - this.writeIframe(content, close); - }, - extend: function(obj, obj2) { - for (var k in obj2) { - obj[k] = obj2[k]; - } - return obj; - }, - - getStyle: function() { - var str = '', - styles = document.querySelectorAll('style,link'); - for (var i = 0; i < styles.length; i++) { - str += styles[i].outerHTML; - } - str += - ''; - - return str; - }, - - getHtml: function() { - var inputs = document.querySelectorAll('input'); - var textareas = document.querySelectorAll('textarea'); - var selects = document.querySelectorAll('select'); - - for (var k in inputs) { - if (inputs[k].type == 'checkbox' || inputs[k].type == 'radio') { - if (inputs[k].checked == true) { - inputs[k].setAttribute('checked', 'checked'); - } else { - inputs[k].removeAttribute('checked'); - } - } else if (inputs[k].type == 'text') { - inputs[k].setAttribute('value', inputs[k].value); - } - } - - for (var k2 in textareas) { - if (textareas[k2].type == 'textarea') { - textareas[k2].innerHTML = textareas[k2].value; - } - } - - for (var k3 in selects) { - if (selects[k3].type == 'select-one') { - var child = selects[k3].children; - for (var i in child) { - if (child[i].tagName == 'OPTION') { - if (child[i].selected == true) { - child[i].setAttribute('selected', 'selected'); - } else { - child[i].removeAttribute('selected'); - } - } - } - } - } - return this.dom.outerHTML; - }, - - writeIframe: function(content, close) { - var w, - doc, - iframe = document.createElement('iframe'), - f = document.body.appendChild(iframe); - iframe.id = 'myIframe'; - iframe.style = 'position:absolute;'; - - w = f.contentWindow || f.contentDocument; - doc = f.contentDocument || f.contentWindow.document; - doc.open(); - doc.write(content); - doc.close(); - this.toPrint(w, close); - setTimeout(function() { - document.body.removeChild(iframe); - }, 500); - }, - - toPrint: function(frameWindow, close) { - try { - setTimeout(function() { - frameWindow.focus(); - try { - if (!frameWindow.document.execCommand('print', false, null)) { - frameWindow.print(); - } - } catch (e) { - frameWindow.print(); - } - frameWindow.close(); - if (close) { - window.close(); - } - }, 500); - } catch (err) { - console.log('err', err); - } - } -}; -const MyPlugin = {}; -MyPlugin.install = function(Vue, options) { - // 4. 添加实例方法 - Vue.prototype.$print = Print; -}; -export default MyPlugin; diff --git a/smart-admin-h5/src/lib/render-dom.js b/smart-admin-h5/src/lib/render-dom.js deleted file mode 100644 index 1cad207e..00000000 --- a/smart-admin-h5/src/lib/render-dom.js +++ /dev/null @@ -1,10 +0,0 @@ -export default { - name: 'RenderDom', - functional: true, - props: { - render: Function - }, - render: (h, ctx) => { - return ctx.props.render(h); - } -}; diff --git a/smart-admin-h5/src/lib/smart-sentry.js b/smart-admin-h5/src/lib/smart-sentry.js deleted file mode 100644 index 2ccd8f0a..00000000 --- a/smart-admin-h5/src/lib/smart-sentry.js +++ /dev/null @@ -1,21 +0,0 @@ -/* - * @Description: - * @Author: hanyu - * @Date: 2020-05-28 12:46:06 - * @LastEditTime: 2020-07-08 09:16:15 - * @LastEditors: hy - */ -// smart sentry -import * as Sentry from '@sentry/browser'; -export default { - /** - * sentry 主动上报 - * @param {error} error 错误信息 - */ - captureException: (error) => { - if (error.config && error.data && error && error.headers && error.request && error.status) { - return; - } - Sentry.captureException(error); - } -}; diff --git a/smart-admin-h5/src/lib/util.js b/smart-admin-h5/src/lib/util.js deleted file mode 100644 index 6a3845b0..00000000 --- a/smart-admin-h5/src/lib/util.js +++ /dev/null @@ -1,515 +0,0 @@ -import moment from 'moment'; -/** - * @param {String} url - * @description 从URL中解析参数 - */ -export const getParams = url => { - const keyValueArr = url.split('?')[1].split('&'); - let paramObj = {}; - keyValueArr.forEach(item => { - const keyValue = item.split('='); - paramObj[keyValue[0]] = keyValue[1]; - }); - return paramObj; -}; - -/** - * @param {Any} obj - * @description 获取数据类型 - */ -export const getType = obj => { - return {}.toString - .call(obj) - .match(/\s([a-zA-Z]+)/)[1] - .toLowerCase(); -}; -// 日期格式 -export const dateFormat = { - YMD: 'YMD', - YMDHM: 'YMDHM', - YMDHMS: 'YMDHMS' -}; -export const forEach = (arr, fn) => { - if (!arr.length || !fn) return; - let i = -1; - let len = arr.length; - while (++i < len) { - let item = arr[i]; - fn(item, i, arr); - } -}; - -/** - * @param {Array} arr1 - * @param {Array} arr2 - * @description 得到两个数组的交集, 两个数组的元素为数值或字符串 - */ -export const getIntersection = (arr1, arr2) => { - let len = Math.min(arr1.length, arr2.length); - let i = -1; - let res = []; - while (++i < len) { - const item = arr2[i]; - if (arr1.indexOf(item) > -1) res.push(item); - } - return res; -}; - -/** - * @param {Array} arr1 - * @param {Array} arr2 - * @description 得到两个数组的并集, 两个数组的元素为数值或字符串 - */ -export const getUnion = (arr1, arr2) => { - return Array.from(new Set([...arr1, ...arr2])); -}; - -/** - * @param {Array} target 目标数组 - * @param {Array} arr 需要查询的数组 - * @description 判断要查询的数组是否至少有一个元素包含在目标数组中 - */ -export const hasOneOf = (targetarr, arr) => { - return targetarr.some(_ => arr.indexOf(_) > -1); -}; - -/** - * @param {String|Number} value 要验证的字符串或数值 - * @param {*} validList 用来验证的列表 - */ -export function oneOf (value, validList) { - for (let i = 0; i < validList.length; i++) { - if (value === validList[i]) { - return true; - } - } - return false; -} - -/** - * @param {Number} timeStamp 判断时间戳格式是否是毫秒 - * @returns {Boolean} - */ -const isMillisecond = timeStamp => { - const timeStr = String(timeStamp); - return timeStr.length > 10; -}; - -/** - * @param {Number} timeStamp 传入的时间戳 - * @param {Number} currentTime 当前时间时间戳 - * @returns {Boolean} 传入的时间戳是否早于当前时间戳 - */ -const isEarly = (timeStamp, currentTime) => { - return timeStamp < currentTime; -}; - -/** - * @param {Number} num 数值 - * @returns {String} 处理后的字符串 - * @description 如果传入的数值小于10,即位数只有1位,则在前面补充0 - */ -const getHandledValue = num => { - return num < 10 ? '0' + num : num; -}; - -/** - * @param {Number} timeStamp 传入的时间戳 - * @param {Number} startType 要返回的时间字符串的格式类型,传入'year'则返回年开头的完整时间 - */ -const getDate = (timeStamp, startType) => { - const d = new Date(timeStamp * 1000); - const year = d.getFullYear(); - const month = getHandledValue(d.getMonth() + 1); - const date = getHandledValue(d.getDate()); - const hours = getHandledValue(d.getHours()); - const minutes = getHandledValue(d.getMinutes()); - const second = getHandledValue(d.getSeconds()); - let resStr = ''; - if (startType === 'year') { - resStr = - year + - '-' + - month + - '-' + - date + - ' ' + - hours + - ':' + - minutes + - ':' + - second; - } - else resStr = month + '-' + date + ' ' + hours + ':' + minutes; - return resStr; -}; - -/** - * @param {String|Number} timeStamp 时间戳 - * @returns {String} 相对时间字符串 - */ -export const getRelativeTime = timeStamp => { - // 判断当前传入的时间戳是秒格式还是毫秒 - const IS_MILLISECOND = isMillisecond(timeStamp); - // 如果是毫秒格式则转为秒格式 - if (IS_MILLISECOND) Math.floor((timeStamp /= 1000)); - // 传入的时间戳可以是数值或字符串类型,这里统一转为数值类型 - timeStamp = Number(timeStamp); - // 获取当前时间时间戳 - const currentTime = Math.floor(Date.parse(new Date()) / 1000); - // 判断传入时间戳是否早于当前时间戳 - const IS_EARLY = isEarly(timeStamp, currentTime); - // 获取两个时间戳差值 - let diff = currentTime - timeStamp; - // 如果IS_EARLY为false则差值取反 - if (!IS_EARLY) diff = -diff; - let resStr = ''; - const dirStr = IS_EARLY ? '前' : '后'; - // 少于等于59秒 - if (diff <= 59) resStr = diff + '秒' + dirStr; - // 多于59秒,少于等于59分钟59秒 - else if (diff > 59 && diff <= 3599) { resStr = Math.floor(diff / 60) + '分钟' + dirStr; } - // 多于59分钟59秒,少于等于23小时59分钟59秒 - else if (diff > 3599 && diff <= 86399) { resStr = Math.floor(diff / 3600) + '小时' + dirStr; } - // 多于23小时59分钟59秒,少于等于29天59分钟59秒 - else if (diff > 86399 && diff <= 2623859) { resStr = Math.floor(diff / 86400) + '天' + dirStr; } - // 多于29天59分钟59秒,少于364天23小时59分钟59秒,且传入的时间戳早于当前 - else if (diff > 2623859 && diff <= 31567859 && IS_EARLY) { resStr = getDate(timeStamp); } - else resStr = getDate(timeStamp, 'year'); - return resStr; -}; - -/** - * @returns {String} 当前浏览器名称 - */ -export const getExplorer = () => { - const ua = window.navigator.userAgent; - const isExplorer = exp => { - return ua.indexOf(exp) > -1; - }; - if (isExplorer('MSIE')) return 'IE'; - else if (isExplorer('Firefox')) return 'Firefox'; - else if (isExplorer('Chrome')) return 'Chrome'; - else if (isExplorer('Opera')) return 'Opera'; - else if (isExplorer('Safari')) return 'Safari'; -}; - -/** - * @description 绑定事件 on(element, event, handler) - */ -export const on = (function () { - if (document.addEventListener) { - return function (element, event, handler) { - if (element && event && handler) { - element.addEventListener(event, handler, false); - } - }; - } else { - return function (element, event, handler) { - if (element && event && handler) { - element.attachEvent('on' + event, handler); - } - }; - } -})(); - -/** - * @description 解绑事件 off(element, event, handler) - */ -export const off = (function () { - if (document.removeEventListener) { - return function (element, event, handler) { - if (element && event) { - element.removeEventListener(event, handler, false); - } - }; - } else { - return function (element, event, handler) { - if (element && event) { - element.detachEvent('on' + event, handler); - } - }; - } -})(); - -/** - * 判断一个对象是否存在key,如果传入第二个参数key,则是判断这个obj对象是否存在key这个属性 - * 如果没有传入key这个参数,则判断obj对象是否有键值对 - */ -export const hasKey = (obj, key) => { - if (key) return key in obj; - else { - let keysArr = Object.keys(obj); - return keysArr.length; - } -}; - -/** - * @param {*} obj1 对象 - * @param {*} obj2 对象 - * @description 判断两个对象是否相等,这两个对象的值只能是数字或字符串 - */ -export const objEqual = (obj1, obj2) => { - const keysArr1 = Object.keys(obj1); - const keysArr2 = Object.keys(obj2); - if (keysArr1.length !== keysArr2.length) return false; - else if (keysArr1.length === 0 && keysArr2.length === 0) return true; - /* eslint-disable-next-line */ else { return !keysArr1.some(key => obj1[key] != obj2[key]); } -}; - -// 相关工具类 -export const utils = { - /** - * @description table实现反选 - * @param {Object} vm Vue实例 - * @param {Array} tableSelectDate 选中的数据 - * @param {Array} allData 所有数据 - * @param {Array} key 数据中的唯一值 - */ - reverseSelect (vm, tableSelectDate, allData, key) { - let copyMess = JSON.parse(JSON.stringify(tableSelectDate)); - // 流程:先全部选中->再部分选中 - vm.handleSelectAll(false); - // 选中的idList - let idList = copyMess.map(item => item[key]); - console.log(idList); - for (let item of allData) { - if (idList.every(id => id !== item.id)) { - vm.$set(item, '_checked', true); - tableSelectDate.push(item); - } else { - vm.$set(item, '_checked', false); - } - } - }, - // 校验字符串是否相同 合同使用 - contrastString (originStr, changeStr) { - let origin = originStr - .replace(/\s*/g, '') - .replace(/"/g, '\'') - .replace(/ /g, '') - .replace(/disabled=\/'\/'/g, 'disabled'); - let change = changeStr - .replace(/\s*/g, '') - .replace(/"/g, '\'') - .replace(/ /g, '') - .replace(/disabled=\/'\/'/g, 'disabled'); - return origin === change; - }, - // 获取当前日期getDateStr(0)、前几天getDateStr(-10)、后几天getDateStr(20) - getDateStr (AddDayCount, format) { - let date = new Date(); - // 获取AddDayCount天后的日期 - date.setDate(date.getDate() + AddDayCount); - return this.getDate(date, format); - }, - getDate (date, format) { - let year = date.getFullYear(); - // day获取当前几号,不足10补0 - let day = date.getDate() > 9 ? date.getDate() : '0' + date.getDate(); - // month获取当前月份的日期,不足10补0 - let month = - date.getMonth() + 1 > 9 - ? date.getMonth() + 1 - : '0' + (date.getMonth() + 1); - // h获取当前小时,不足10补0 - let h = date.getHours() > 9 ? date.getHours() : '0' + date.getHours(); - // s获取当前分钟,不足10补0 - let m = date.getMinutes() > 9 ? date.getMinutes() : '0' + date.getMinutes(); - // s获取当前秒数,不足10补0 - let s = date.getSeconds() > 9 ? date.getSeconds() : '0' + date.getSeconds(); - let resultDate = ''; - if (format === dateFormat.YMD) { - resultDate = year + '-' + month + '-' + day; - } - if (format === dateFormat.YMDHM) { - resultDate = year + '-' + month + '-' + day + ' ' + h + ':' + m; - } - if (format === dateFormat.YMDHMS) { - resultDate = year + '-' + month + '-' + day + ' ' + h + ':' + m + ':' + s; - } - return resultDate; - }, - // 获取周一和周日日期,返回两种格式时间 - getDateWeek () { - let now = new Date(); - let nowTime = now.getTime(); - let day = now.getDay(); - let oneDayLong = 1000 * 60 * 60 * 24; - let MondayTime = nowTime - (day - 1) * oneDayLong; - let SundayTime = nowTime + (7 - day) * oneDayLong; - let monday = new Date(MondayTime); - let sunday = new Date(SundayTime); - return { - // first: this.getDateAll(monday), - // last: this.getDateAll(sunday), - firstDate: monday, - lastDate: sunday - }; - }, - // 获取月初与月末日期,返回两种时间格式 - getDateMonth () { - let dateFirter = new Date(); - let dateLast = new Date(); - dateFirter.setDate(1); - - let currentMonth = dateLast.getMonth(); - let nextMonth = ++currentMonth; - let nextMonthFirstDay = new Date(dateLast.getFullYear(), nextMonth, 1); - let oneDay = 1000 * 60 * 60 * 24; - dateLast = new Date(nextMonthFirstDay - oneDay); - - return { - // first: this.getDateAll(dateFirter), - // last: this.getDateAll(dateLast), - firstDate: dateFirter, - lastDate: dateLast - }; - }, - // 计算天数 - getDayBetweenDate (date) { - date = this.getDate(new Date(date), 'YMD'); - let startTime = Date.parse(new Date(date)); // IE支持“yyyy/MM/dd”格式 - let endTime = Date.parse(this.getDate(new Date(), 'YMD')); - let day = parseInt((endTime - startTime) / (1000 * 60 * 60 * 24)); - return day; - }, - getDateIntervalYear (firstDate, secondDate) { - if (!firstDate || !secondDate) { - return 0; - } - let first = new Date(firstDate); - let second = new Date(secondDate); - let firstYear = first.getFullYear(); - let secondYear = second.getFullYear(); - let intervalYear = secondYear - firstYear; - return intervalYear < 0 ? 0 : intervalYear; - }, - getDateIntervalYearFixed2 (firstDate, secondDate) { - if (!firstDate || !secondDate) { - return 0; - } - // 格式化时间 - let startDate = new Date(this.getDate(new Date(firstDate), 'YMD')); - let endDate = new Date(this.getDate(new Date(secondDate), 'YMD')); - // 得到毫秒值 - let startTime = Date.parse(startDate); - let endTime = Date.parse(endDate); - // 得到差了多少天 - let day = parseInt((endTime - startTime) / (1000 * 60 * 60 * 24)); - if (day <= 0) { - return 0; - } - // 得到差的多少年 保留两位小数 - let resultYear = parseFloat((day / (30 * 12)).toFixed(2)); - return resultYear; - }, - // 数字转化为中文大写 - // 代码如下所示: - convertCurrency (money) { - // 汉字的数字 - let cnNums = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']; - // 基本单位 - let cnIntRadice = ['', '拾', '佰', '仟']; - // 对应整数部分扩展单位 - let cnIntUnits = ['', '万', '亿', '兆']; - // 对应小数部分单位 - let cnDecUnits = ['角', '分', '毫', '厘']; - // 整数金额时后面跟的字符 - let cnInteger = '整'; - // 整型完以后的单位 - let cnIntLast = '元'; - // 最大处理的数字 - let maxNum = 999999999999999.9999; - // 金额整数部分 - let integerNum; - // 金额小数部分 - let decimalNum; - // 输出的中文金额字符串 - let chineseStr = ''; - // 分离金额后用的数组,预定义 - let parts; - if (money === '') { - return ''; - } - money = parseFloat(money); - if (money >= maxNum) { - // 超出最大处理数字 - return ''; - } - if (money === 0) { - chineseStr = cnNums[0] + cnIntLast + cnInteger; - return chineseStr; - } - // 转换为字符串 - money = money.toString(); - if (money.indexOf('.') === -1) { - integerNum = money; - decimalNum = ''; - } else { - parts = money.split('.'); - integerNum = parts[0]; - decimalNum = parts[1].substr(0, 4); - } - // 获取整型部分转换 - if (parseInt(integerNum, 10) > 0) { - let zeroCount = 0; - let IntLen = integerNum.length; - for (let i = 0; i < IntLen; i++) { - let n = integerNum.substr(i, 1); - let p = IntLen - i - 1; - let q = p / 4; - let m = p % 4; - if (n === '0') { - zeroCount++; - } else { - if (zeroCount > 0) { - chineseStr += cnNums[0]; - } - // 归零 - zeroCount = 0; - chineseStr += cnNums[parseInt(n)] + cnIntRadice[m]; - } - if (m === 0 && zeroCount < 4) { - chineseStr += cnIntUnits[q]; - } - } - chineseStr += cnIntLast; - } - // 小数部分 - if (decimalNum !== '') { - let decLen = decimalNum.length; - for (let i = 0; i < decLen; i++) { - let n = decimalNum.substr(i, 1); - if (n !== '0') { - chineseStr += cnNums[Number(n)] + cnDecUnits[i]; - } - } - } - if (chineseStr === '') { - chineseStr += cnNums[0] + cnIntLast + cnInteger; - } else if (decimalNum === '') { - chineseStr += cnInteger; - } - return chineseStr; - } -}; - - -export const dateTimeRangeConvert = (timerange) => { - // timerange - let arr = []; - if (timerange[0] === '') { - arr.push(null); - } else { - arr.push(moment(timerange[0]).format("YYYY-MM-DD 00:00:00")); - } - - if (timerange[1] === '') { - arr.push(null); - } else { - arr.push(moment(timerange[1]).format("YYYY-MM-DD 23:59:59")); - } - return arr; -} - diff --git a/smart-admin-h5/src/lib/watermark.js b/smart-admin-h5/src/lib/watermark.js deleted file mode 100644 index 30747309..00000000 --- a/smart-admin-h5/src/lib/watermark.js +++ /dev/null @@ -1,49 +0,0 @@ -const watermark = {}; - -const setWatermark = (str) => { - const id = '1.23452384164.123412415'; - - if (document.getElementById(id) !== null) { - document.body.removeChild(document.getElementById(id)); - } - - const can = document.createElement('canvas'); - can.width = 150; - can.height = 120; - - const cans = can.getContext('2d'); - cans.rotate(-20 * Math.PI / 180); - cans.font = '15px Vedana'; - cans.fillStyle = 'rgba(0, 0, 0, 0.15)'; - cans.textAlign = 'left'; - cans.textBaseline = 'Middle'; - cans.fillText(str, can.width / 20, can.height); - - const div = document.createElement('div'); - div.id = id; - div.style.pointerEvents = 'none'; - div.style.top = '3px'; - div.style.left = '0px'; - div.style.position = 'fixed'; - div.style.zIndex = '100000'; - div.style.width = document.documentElement.clientWidth + 'px'; - div.style.height = document.documentElement.clientHeight + 'px'; - div.style.background = 'url(' + can.toDataURL('image/png') + ') left top repeat'; - document.body.appendChild(div); - return id; -}; - -// 该方法只允许调用一次 -watermark.set = (str) => { - let id = setWatermark(str); - setInterval(() => { - if (document.getElementById(id) === null) { - id = setWatermark(str); - } - }, 2000); - window.onresize = () => { - setWatermark(str); - }; -}; - -export default watermark; diff --git a/smart-admin-h5/src/main.js b/smart-admin-h5/src/main.js deleted file mode 100644 index 887c9198..00000000 --- a/smart-admin-h5/src/main.js +++ /dev/null @@ -1,62 +0,0 @@ -// vue 三大核心 -import Vue from 'vue'; -import router from '@/router'; -import store from '@/store'; - -// 更好的兼容性 -import 'core-js/stable'; -import 'regenerator-runtime/runtime'; -// 移动端适配 -import 'lib-flexible/flexible.js'; -import 'vant/lib/index.css'; -// 引入首个组件 -import App from './App.vue'; -// 引入自定义主题样式 -import './themes/index.scss'; -// 引入过滤器 -import './filters'; -// 引入配置信息 -import config from '@/config'; -// 引入自定义smart 插件 -import SmartPlugin from './plugins/smart'; -// Import component -import Loading from 'vue-loading-overlay'; -// Import stylesheet -import 'vue-loading-overlay/dist/vue-loading.css'; - -import Vant from 'vant'; -import 'vant/lib/index.css'; - -// sentry错误预警 -import SmartSentry from './plugins/smart-sentry'; - -import Enum from 'vue-enum'; - -import enumInfo from '@/constants'; - -import _ from 'lodash'; - -Vue.use(Vant); - -Vue.use(Loading); - -Vue.use(SmartPlugin); - -Vue.use(SmartSentry); - -Vue.prototype.$config = config; - -Vue.config.productionTip = false; - -Vue.use(Enum, { - enumInfo -}); - -window._ = _; - -new Vue({ - el: '#app', - router, - store, - render: h => h(App) -}); diff --git a/smart-admin-h5/src/plugins/smart-sentry.js b/smart-admin-h5/src/plugins/smart-sentry.js deleted file mode 100644 index b4ad2b09..00000000 --- a/smart-admin-h5/src/plugins/smart-sentry.js +++ /dev/null @@ -1,17 +0,0 @@ -import * as Sentry from '@sentry/browser'; - -const SmartSentry = {}; - -SmartSentry.install = function(Vue, options) { - Vue.prototype.$smartSentry = { - captureException: (error) => { - console.error(error); - if (error.config && error.data && error && error.headers && error.request && error.status) { - return; - } - Sentry.captureException(error); - } - }; -}; - -export default SmartSentry; diff --git a/smart-admin-h5/src/plugins/smart.js b/smart-admin-h5/src/plugins/smart.js deleted file mode 100644 index 5567acca..00000000 --- a/smart-admin-h5/src/plugins/smart.js +++ /dev/null @@ -1,24 +0,0 @@ -let loader = null; - -const SmartPlugin = {}; - -SmartPlugin.install = function(Vue, options) { - Vue.prototype.$smart = { - loading: (message) => { - if (loader) { - loader.hide(); - } - - loader = Vue.$loading.show({ - // Optional parameters - lockScroll: true, - color: '#1989fa' - }); - }, - loadingClear: () => { - loader.hide(); - } - }; -}; - -export default SmartPlugin; diff --git a/smart-admin-h5/src/plugins/vant.js b/smart-admin-h5/src/plugins/vant.js deleted file mode 100644 index 8daa8e3e..00000000 --- a/smart-admin-h5/src/plugins/vant.js +++ /dev/null @@ -1,8 +0,0 @@ -// 按需全局引入 vant组件 -import Vue from 'vue'; -import { Button, List, Cell, Tabbar, TabbarItem } from 'vant'; - -Vue.use(Button); -Vue.use(Cell); -Vue.use(List); -Vue.use(Tabbar).use(TabbarItem); diff --git a/smart-admin-h5/src/router/dashboard/index.js b/smart-admin-h5/src/router/dashboard/index.js deleted file mode 100644 index 69506bbe..00000000 --- a/smart-admin-h5/src/router/dashboard/index.js +++ /dev/null @@ -1,42 +0,0 @@ -import { ROUTER_PERMISSION_TYPE } from '@/router/router-const'; - -/** - * dashboard首页 - */ -export const dashboardRouter = [ - { - path: '/', - // redirect: '/dashboard/contact-company', - redirect: '/dashboard/user', - meta: { - title: '首页', - keepAlive: true, - permissionType: ROUTER_PERMISSION_TYPE.NEED_LOGIN.value - }, - component: () => import('@/views/dashboard/dashboard'), - children: [ - // { - // path: '/dashboard/contact-company', - // name: 'ContactCompany', - // meta: { - // title: '往来单位', - // keepAlive: true, - // showTabbar: true, - // permissionType: ROUTER_PERMISSION_TYPE.NEED_LOGIN.value - // }, - // component: () => import('@/views/erp/contact-company/contact-company') - // }, - { - path: '/dashboard/user', - name: 'Mine', - meta: { - title: '我的', - keepAlive: false, - showTabbar: true, - permissionType: ROUTER_PERMISSION_TYPE.NEED_LOGIN.value - }, - component: () => import('@/views/user/index') - } - ] - } -]; diff --git a/smart-admin-h5/src/router/develop/develop.js b/smart-admin-h5/src/router/develop/develop.js deleted file mode 100644 index a3220405..00000000 --- a/smart-admin-h5/src/router/develop/develop.js +++ /dev/null @@ -1,21 +0,0 @@ -import { ROUTER_PERMISSION_TYPE } from '@/router/router-const'; - -export const developRouter = [ - { - path: '/develop', - component: () => import('@/views/dashboard/dashboard'), - children: [ - { - path: '/develop/config', - name: 'DevelopConfig', - meta: { - title: '开发专用配置', - permissionType: ROUTER_PERMISSION_TYPE.NEED_LOGIN.value - }, - component: () => import('views/develop/config') - } - ] - } - -]; - diff --git a/smart-admin-h5/src/router/error/error.js b/smart-admin-h5/src/router/error/error.js deleted file mode 100644 index 982c0f96..00000000 --- a/smart-admin-h5/src/router/error/error.js +++ /dev/null @@ -1,26 +0,0 @@ -// 错误页 -import { ROUTER_PERMISSION_TYPE } from '@/router/router-const'; - -export const errorRouter = [ - { - path: '/404', - name: 'Error404', - meta: { - hideInMenu: true, - access: true, - permissionType: ROUTER_PERMISSION_TYPE.NO_VALID.value - }, - component: () => import('views/error/404.vue') - }, - { - path: '/500', - name: 'Error500', - meta: { - hideInMenu: true, - access: true, - noValidatePrivilege: true, - permissionType: ROUTER_PERMISSION_TYPE.NO_VALID.value - }, - component: () => import('views/error/404.vue') - } -]; diff --git a/smart-admin-h5/src/router/index.js b/smart-admin-h5/src/router/index.js deleted file mode 100644 index c47e1a4a..00000000 --- a/smart-admin-h5/src/router/index.js +++ /dev/null @@ -1,150 +0,0 @@ -import Vue from 'vue'; -import Router from 'vue-router'; -import { routers } from './routers'; -import cookie from '@/lib/cookie'; -import { ROUTER_PERMISSION_TYPE } from './router-const'; -import NProgress from 'nprogress'; -import 'nprogress/nprogress.css'; - -const projectConfig = require('@/config/index.js'); - -Vue.use(Router); - -/** - * 导入所有的router - * @type {VueRouter} - */ -const router = new Router({ - routes: routers -}); - -// 解决路由跳转相同的地址报错 -const originalPush = Router.prototype.push; -Router.prototype.push = function(location) { - try { - return originalPush.call(this, location).catch(err => err); - } catch (error) { - // TODO zhuoda sentry - console.error(error); - } -}; - -const LOGIN_PAGE_NAME = 'Login'; - -// --------------------- router 守卫 begin --------------------- - -router.beforeEach((to, from, next) => { - // 加载进度条 - NProgress.start(); - - // 权限 - const permissionType = to.meta.permissionType; - // 不需要验证,直接放行 - if (permissionType === ROUTER_PERMISSION_TYPE.NO_VALID.value) { - next(); - return; - } - - const token = cookie.getToken(); - // 需要登录 - if (permissionType === ROUTER_PERMISSION_TYPE.NEED_LOGIN.value) { - if (token) { - next(); - } else { - next({ - name: LOGIN_PAGE_NAME - }); - } - return; - } - - // 需要登录,且验证权限 - if (permissionType === ROUTER_PERMISSION_TYPE.VALIDATE_PERMISSION.value) { - if (!token) { - // TODO 验证权限 - next({ - name: LOGIN_PAGE_NAME - }); - return; - } - } - - next({ - name: 'Error404' - }); -}); - -router.afterEach(to => { - NProgress.done(); - window.scrollTo(0, 0); - if (to.meta.title) { - console.log(to.meta); - document.title = to.meta.title + ' ' + projectConfig.title; - } -}); - -// --------------------- router 守卫 end --------------------- - -/** - * router 检测 - * - * 如果存在相同的 path 或者 name 是一件非常恐怖的事情,所以在develop环境将所有router进行一次遍历
- * 检测内容如下:
- * 1、相同的router name - * 2、相同的router name - * 3、path没有以 / 开头 - * - */ - -const tempCheckObj = { - checkRouterNameMap: new Map(), - checkRouterPathMap: new Map() -}; - -function recursionCheckRouter(routerArray) { - for (const routerItem of routerArray) { - if (!routerItem.name) { - console.error('没有配置router name', routerItem); - } else { - const existNameRouter = tempCheckObj.checkRouterNameMap.get( - routerItem.name - ); - if (typeof existNameRouter !== 'undefined') { - console.error('存在相同的router name', routerItem, existNameRouter); - } else { - tempCheckObj.checkRouterNameMap.set(routerItem.name, routerItem); - } - } - - if (!routerItem.path) { - console.error('没有配置router path', routerItem); - } else { - // path必须以 / 开头 - if (routerItem.path !== '*' && routerItem.path.indexOf('/') !== 0) { - console.error('path 没有以/开头 ', routerItem); - } - - const existPathRouter = tempCheckObj.checkRouterPathMap.get( - routerItem.path - ); - if (typeof existPathRouter !== 'undefined') { - console.error('存在相同的router path', routerItem, existPathRouter); - } else { - tempCheckObj.checkRouterPathMap.set(routerItem.path, routerItem); - } - } - - if (routerItem.children) { - recursionCheckRouter(routerItem.children); - } - } -} - -// 如果是开发环境,需要检测router的规范性 -if (process.env.NODE_ENV === 'development') { - recursionCheckRouter(routers); - delete tempCheckObj.checkRouterNameMap; - delete tempCheckObj.checkRouterPathMap; -} - -export default router; diff --git a/smart-admin-h5/src/router/login/login.js b/smart-admin-h5/src/router/login/login.js deleted file mode 100644 index 7c9b6a53..00000000 --- a/smart-admin-h5/src/router/login/login.js +++ /dev/null @@ -1,15 +0,0 @@ -import { ROUTER_PERMISSION_TYPE } from '@/router/router-const'; - -export const loginRouter = [ - { - path: '/login', - name: 'Login', - meta: { - title: '登录', - keepAlive: false, - permissionType: ROUTER_PERMISSION_TYPE.NO_VALID.value - }, - component: () => import('@/views/login/login.vue') - } - -]; diff --git a/smart-admin-h5/src/router/router-const.js b/smart-admin-h5/src/router/router-const.js deleted file mode 100644 index 4d509cf8..00000000 --- a/smart-admin-h5/src/router/router-const.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * 权限类型 - */ -export const ROUTER_PERMISSION_TYPE = { - /** - * 不 验 证 - */ - NO_VALID: { - value: 1 - }, - /** - * 需要登录 - */ - NEED_LOGIN: { - value: 2 - }, - /** - * 需要验证权限 - */ - VALIDATE_PERMISSION: { - value: 3 - } -}; diff --git a/smart-admin-h5/src/router/routers.js b/smart-admin-h5/src/router/routers.js deleted file mode 100644 index e1c106e9..00000000 --- a/smart-admin-h5/src/router/routers.js +++ /dev/null @@ -1,32 +0,0 @@ -// 全局错误页面 -import { errorRouter } from './error/error'; -// 登录注册模块 -import { loginRouter } from './login/login'; -// tabbar dashboard 框架页面 -import { dashboardRouter } from './dashboard'; -// 用户相关 -import { userRouter } from './user/user'; -// 开发相关 -import { developRouter } from './develop/develop'; - -/** - * router meta 说明:
- * - * title: 为页面的title,会显示到浏览器的title上 - * permissionType: 具体使用 router-const.js中的 ROUTER_PERMISSION_TYPE 常量;情况有: 1)不验证 2)校验登录 3)登录后校验权限 - * keepAlive: true or false ; 是否进行页面keepalive, 如果想删除keepalive,可以使用vuex中的app module里有mutation - * showTabbar: true or false ; 是否展示 tabbar, 如果是true, 则会展示tabbar - * - */ -export const routers = [ - // 登录、注册 - ...loginRouter, - // 404、500、403等 - ...errorRouter, - // tab bar 页面 - ...dashboardRouter, - // 用户 - ...userRouter, - // 开发相关 - ...developRouter -]; diff --git a/smart-admin-h5/src/router/user/user.js b/smart-admin-h5/src/router/user/user.js deleted file mode 100644 index 901e5708..00000000 --- a/smart-admin-h5/src/router/user/user.js +++ /dev/null @@ -1,21 +0,0 @@ -import { ROUTER_PERMISSION_TYPE } from '@/router/router-const'; - -export const userRouter = [ - { - path: '/user', - component: () => import('@/views/dashboard/dashboard'), - children: [ - { - path: '/user/change-password', - name: 'UserChangePassword', - meta: { - title: '修改密码', - permissionType: ROUTER_PERMISSION_TYPE.NEED_LOGIN.value - }, - component: () => - import('views/user/change-password') - } - ] - } -]; - diff --git a/smart-admin-h5/src/store/index.js b/smart-admin-h5/src/store/index.js deleted file mode 100644 index 11c4962b..00000000 --- a/smart-admin-h5/src/store/index.js +++ /dev/null @@ -1,23 +0,0 @@ -import Vue from 'vue'; -import Vuex from 'vuex'; - -import user from './module/user'; -import app from './module/app'; - -Vue.use(Vuex); - -export default new Vuex.Store({ - state: { - // - }, - mutations: { - // - }, - actions: { - // - }, - modules: { - app, - user - } -}); diff --git a/smart-admin-h5/src/store/module/app.js b/smart-admin-h5/src/store/module/app.js deleted file mode 100644 index 486defe1..00000000 --- a/smart-admin-h5/src/store/module/app.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * 整个应用相关的状态信息 - * - * 比如: keepalive等 - */ -export default { - namespaced: true, - state: { - // 缓存路由 - keepAliveIncludes: [] - }, - - mutations: { - // 加入keep-alive缓存 - pushKeepAliveIncludes(state, val) { - if (state.keepAliveIncludes.length < 30) { - const number = state.keepAliveIncludes.findIndex(e => e === val); - if (number === -1) { - state.keepAliveIncludes.push(val); - } - } - }, - // 删除缓存 - deleteKeepAliveIncludes(state, val) { - const number = state.keepAliveIncludes.findIndex(e => e === val); - if (number !== -1) { - state.keepAliveIncludes.splice(number, 1); - } - } - } - -}; diff --git a/smart-admin-h5/src/store/module/user.js b/smart-admin-h5/src/store/module/user.js deleted file mode 100644 index 5f64b72e..00000000 --- a/smart-admin-h5/src/store/module/user.js +++ /dev/null @@ -1,41 +0,0 @@ -import cookie from '@/lib/cookie.js'; - -export default { - namespaced: true, - state: { - token: cookie.getToken(), - // session 信息 - sessionInfo: {}, - // 是否获取了session - isHaveGotSessionInfo: false, - // 权限集合 - privilegeKeySet: new Set() - - }, - mutations: { - clearSession() { - state.token = null; - state.sessionInfo = null; - state.privilegeKeySet = new Set(); - }, - updateSession(state, userLoginInfo) { - state.isHaveGotSessionInfo = true; - state.sessionInfo = userLoginInfo; - if (userLoginInfo.privilegeList) { - state.privilegeKeySet = new Set(userLoginInfo.privilegeList.map(e => e.key)); - } - } - }, - getters: { - // 用户菜单权限 - privilegeKeySet: state => state.privilegeKeySet, - isSuperMan: state => state.sessionInfo.isSuperMan, - actualName: state => state.sessionInfo.actualName, - loginUserId: state => state.sessionInfo.id - }, - actions: { - // 登录 - handleLogin({ commit }, params) { - } - } -}; diff --git a/smart-admin-h5/src/themes/index.scss b/smart-admin-h5/src/themes/index.scss deleted file mode 100644 index b540e422..00000000 --- a/smart-admin-h5/src/themes/index.scss +++ /dev/null @@ -1,6 +0,0 @@ - -html, -body { - font-family: Arial, Helvetica, 'STHeiti STXihei', 'Microsoft YaHei', Tohoma, sans-serif; - background-color: $background-color; -} diff --git a/smart-admin-h5/src/utils/index.js b/smart-admin-h5/src/utils/index.js deleted file mode 100644 index 37d915fc..00000000 --- a/smart-admin-h5/src/utils/index.js +++ /dev/null @@ -1,110 +0,0 @@ -/** - * Created by PanJiaChen on 16/11/18. - */ - -/** - * Parse the time to string - * @param {(Object|string|number)} time - * @param {string} cFormat - * @returns {string} - */ -export function parseTime(time, cFormat) { - if (arguments.length === 0) { - return null - } - const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}' - let date - if (typeof time === 'object') { - date = time - } else { - if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) { - time = parseInt(time) - } - if ((typeof time === 'number') && (time.toString().length === 10)) { - time = time * 1000 - } - date = new Date(time) - } - const formatObj = { - y: date.getFullYear(), - m: date.getMonth() + 1, - d: date.getDate(), - h: date.getHours(), - i: date.getMinutes(), - s: date.getSeconds(), - a: date.getDay() - } - const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => { - let value = formatObj[key] - // Note: getDay() returns 0 on Sunday - if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] } - if (result.length > 0 && value < 10) { - value = '0' + value - } - return value || 0 - }) - return time_str -} - -/** - * @param {number} time - * @param {string} option - * @returns {string} - */ -export function formatTime(time, option) { - if (('' + time).length === 10) { - time = parseInt(time) * 1000 - } else { - time = +time - } - const d = new Date(time) - const now = Date.now() - - const diff = (now - d) / 1000 - - if (diff < 30) { - return '刚刚' - } else if (diff < 3600) { - // less 1 hour - return Math.ceil(diff / 60) + '分钟前' - } else if (diff < 3600 * 24) { - return Math.ceil(diff / 3600) + '小时前' - } else if (diff < 3600 * 24 * 2) { - return '1天前' - } - if (option) { - return parseTime(time, option) - } else { - return ( - d.getMonth() + - 1 + - '月' + - d.getDate() + - '日' + - d.getHours() + - '时' + - d.getMinutes() + - '分' - ) - } -} - -/** - * @param {string} url - * @returns {Object} - */ -export function param2Obj(url) { - const search = url.split('?')[1] - if (!search) { - return {} - } - return JSON.parse( - '{"' + - decodeURIComponent(search) - .replace(/"/g, '\\"') - .replace(/&/g, '","') - .replace(/=/g, '":"') - .replace(/\+/g, ' ') + - '"}' - ) -} diff --git a/smart-admin-h5/src/utils/request.js b/smart-admin-h5/src/utils/request.js deleted file mode 100644 index 6788f91b..00000000 --- a/smart-admin-h5/src/utils/request.js +++ /dev/null @@ -1,58 +0,0 @@ -import axios from 'axios' -import store from '@/store' -import { Toast } from 'vant' -// 根据环境不同引入不同api地址 -import { baseApi } from '@/config' -// create an axios instance -const service = axios.create({ - baseURL: baseApi, // url = base api url + request url - withCredentials: true, // send cookies when cross-domain requests - timeout: 5000 // request timeout -}) - -// request拦截器 request interceptor -service.interceptors.request.use( - config => { - // 不传递默认开启loading - if (!config.hideloading) { - // loading - Toast.loading({ - forbidClick: true - }) - } - if (store.getters.token) { - config.headers['X-Token'] = '' - } - return config - }, - error => { - // do something with request error - console.log(error) // for debug - return Promise.reject(error) - } -) -// respone拦截器 -service.interceptors.response.use( - response => { - Toast.clear() - const res = response.data - if (res.status && res.status !== 200) { - // 登录超时,重新登录 - if (res.status === 401) { - store.dispatch('FedLogOut').then(() => { - location.reload() - }) - } - return Promise.reject(res || 'error') - } else { - return Promise.resolve(res) - } - }, - error => { - Toast.clear() - console.log('err' + error) // for debug - return Promise.reject(error) - } -) - -export default service diff --git a/smart-admin-h5/src/utils/validate.js b/smart-admin-h5/src/utils/validate.js deleted file mode 100644 index e9bd1bab..00000000 --- a/smart-admin-h5/src/utils/validate.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Created by Sunnie on 19/06/04. - */ - -/** - * @param {string} path - * @returns {Boolean} - */ -export function isExternal(path) { - return /^(https?:|mailto:|tel:)/.test(path) -} - -/** - * @param {string} str - * @returns {Boolean} - */ -export function validUsername(str) { - const valid_map = ['admin', 'editor'] - return valid_map.indexOf(str.trim()) >= 0 -} diff --git a/smart-admin-h5/src/views/dashboard/dashboard.vue b/smart-admin-h5/src/views/dashboard/dashboard.vue deleted file mode 100644 index 47b1ab24..00000000 --- a/smart-admin-h5/src/views/dashboard/dashboard.vue +++ /dev/null @@ -1,99 +0,0 @@ - - - - diff --git a/smart-admin-h5/src/views/develop/config.vue b/smart-admin-h5/src/views/develop/config.vue deleted file mode 100644 index 18b2ec08..00000000 --- a/smart-admin-h5/src/views/develop/config.vue +++ /dev/null @@ -1,47 +0,0 @@ - - - - diff --git a/smart-admin-h5/src/views/error/404.vue b/smart-admin-h5/src/views/error/404.vue deleted file mode 100644 index 66168409..00000000 --- a/smart-admin-h5/src/views/error/404.vue +++ /dev/null @@ -1,23 +0,0 @@ - - - - diff --git a/smart-admin-h5/src/views/login/login.vue b/smart-admin-h5/src/views/login/login.vue deleted file mode 100644 index 8fd8806f..00000000 --- a/smart-admin-h5/src/views/login/login.vue +++ /dev/null @@ -1,68 +0,0 @@ - - - - - diff --git a/smart-admin-h5/src/views/user/change-password.vue b/smart-admin-h5/src/views/user/change-password.vue deleted file mode 100644 index 08f4c4e8..00000000 --- a/smart-admin-h5/src/views/user/change-password.vue +++ /dev/null @@ -1,76 +0,0 @@ - - - - diff --git a/smart-admin-h5/src/views/user/index.vue b/smart-admin-h5/src/views/user/index.vue deleted file mode 100644 index be177fff..00000000 --- a/smart-admin-h5/src/views/user/index.vue +++ /dev/null @@ -1,79 +0,0 @@ - - - - diff --git a/smart-admin-h5/vue.config.js b/smart-admin-h5/vue.config.js deleted file mode 100644 index a31f3a23..00000000 --- a/smart-admin-h5/vue.config.js +++ /dev/null @@ -1,200 +0,0 @@ -const path = require('path'); -const CompressionWebpackPlugin = require('compression-webpack-plugin'); -const UglifyjsWebpackPlugin = require('uglifyjs-webpack-plugin'); -const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer'); -const ScriptExtHtmlWebpackPlugin = require('script-ext-html-webpack-plugin'); -const SentryPlugin = require('@sentry/webpack-plugin'); -const resolve = dir => path.join(__dirname, dir); -// 项目配置 -const projectConfig = require('./src/config/index.js'); - -// 生产环境,测试和正式 -const isProductionEnv = ['production'].includes(process.env.NODE_ENV); -const isProductionAppEnv = ['prod', 'pre'].includes(process.env.VUE_APP_ENV); - -module.exports = { - publicPath: projectConfig.publicPath, - // 生产环境构建文件的目录 - outputDir: 'dist', - // outputDir的静态资源(js、css、img、fonts)目录 - assetsDir: 'static', - // eslint检测 按需开启 - lintOnSave: !isProductionEnv, - // 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。 - productionSourceMap: false, - devServer: { - // 设置主机地址 - host: '0.0.0.0', - // 设置默认端口 - port: 8090, - // 禁用host验证 - disableHostCheck: true, - // 启动后打开浏览器 - open: true, - overlay: { - // 当出现编译器错误或警告时,在浏览器中显示全屏覆盖层 - warnings: false, - errors: true - } - // proxy: { - // //配置跨域 - // '/api': { - // // 接口前缀 - // target: "https://sit.smart-h5.1024lab.net/api", - // // ws:true, - // changOrigin:true, - // // 改写规则,把/api 替换为/ - // pathRewrite:{ - // '^/api':'/' - // } - // } - // } - }, - css: { - // 是否使用css分离插件 ExtractTextPlugin 是否将组件中的 CSS 提取至一个独立的 CSS 文件中 (而不是动态注入到 JavaScript 中的 inline 代码)。 - extract: isProductionEnv, - // 开启 CSS source maps - sourceMap: false, - // 使用vw布局去掉这个 - requireModuleExtension: true, - loaderOptions: { - // 引入全局变量 - scss: { - additionalData: `@import "@/assets/css/index";` // 全局引入 - } - } - }, - configureWebpack: config => { - config.name = projectConfig.title; - }, - - chainWebpack: config => { - // 移除资源预加载(路由懒加载才能正常使用) - config.plugins.delete('preload'); - config.plugins.delete('prefetch'); - - // 别名 alias - config.resolve.alias - .set('@', resolve('src')) - .set('assets', resolve('src/assets')) - .set('api', resolve('src/api')) - .set('views', resolve('src/views')) - .set('components', resolve('src/components')); - - // 应用名字 - config.plugin('html').tap(args => { - args[0].title = projectConfig.title; - return args; - }); - - // 设置保留空格 - config.module - .rule('vue') - .use('vue-loader') - .loader('vue-loader') - .tap(options => { - options.compilerOptions.preserveWhitespace = true; - return options; - }) - .end(); - - // ==================== 生产环境配置 begin ==================== - if (isProductionEnv) { - // 打包分析 - config.plugin('webpack-report').use(BundleAnalyzerPlugin, [ - { - analyzerMode: 'static' - } - ]); - // 不显示源码 - config.devtool('cheap-source-map'); - - // cdn - config.plugin('html').tap(args => { - args[0].cdn = projectConfig.cdn.cdnResource; - // 压缩html中的css - args[0].minify.minifyCSS = true; - return args; - }); - // 指定资源加载cdn - config.externals(projectConfig.cdn.externals); - - // 开启gzip , Nginx上也需要配置gzip才会生效 - config - .plugin('compression') - .use(CompressionWebpackPlugin) - .tap(() => [ - { - // 压缩 js 与 css - test: new RegExp( - '\\.(js|css)$' - ), - // 资源文件大于10240B=10kB时会被压缩 - threshold: 10240, - // 最小压缩比达到0.8时才会被压缩 - minRatio: 0.8 - } - ]); - - // sentry - if (isProductionAppEnv) { - config.plugin('sentry').use(SentryPlugin, [{ - ignore: ['node_modules'], - include: './dist', // 上传dist文件的js - configFile: './.sentryclirc' // 配置文件地址 - }]); - } - - config.optimization.minimizer = [ - new UglifyjsWebpackPlugin({ - // 生产环境推荐关闭 sourcemap 防止源码泄漏 - // 服务端通过前端发送的行列,根据 sourcemap 转为源文件位置 - sourceMap: false, - uglifyOptions: { - warnings: false, - compress: { - drop_console: true, - drop_debugger: true - } - } - }) - ]; - - config - .plugin('ScriptExtHtmlWebpackPlugin') - .after('html') - .use(ScriptExtHtmlWebpackPlugin, [ - { - // 将 runtime 作为内联引入不单独存在 - inline: /runtime\..*\.js$/ - } - ]) - .end(); - - config.optimization.splitChunks({ - chunks: 'all', - cacheGroups: { - commons: { - name: 'chunk-commons', - test: resolve('src/components'), - minChunks: 3, // 模块至少使用次数 - priority: 5, - reuseExistingChunk: true // 模块嵌套引入时,判断是否复用已经被打包的模块 - }, - node_vendors: { - name: 'chunk-libs', - chunks: 'initial', - test: /[\\/]node_modules[\\/]/, - priority: 10 - }, - vantUI: { - name: 'chunk-vantUI', - priority: 20, - test: /[\\/]node_modules[\\/]_?vant(.*)/ - } - } - }); - } - // ==================== 生产环境配置 end ==================== - } -}; diff --git a/smart-admin-service/.gitignore b/smart-admin-service/.gitignore deleted file mode 100644 index a2a3040a..00000000 --- a/smart-admin-service/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/** -!**/src/test/** - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ - -### VS Code ### -.vscode/ diff --git a/smart-admin-service/README.md b/smart-admin-service/README.md deleted file mode 100644 index 19273c14..00000000 --- a/smart-admin-service/README.md +++ /dev/null @@ -1,17 +0,0 @@ -### 部署说明 - -#### 下载代码 - -smart-admin-service - -将两个项目导入idea - -#### 创建数据库 - -先执行:src/main/resources/sql/smart-admin.sql - -再执行:src/main/resources/sql/quartz_mysql_2.3.0.sql - -#### 启动 - -运行 smart-admin-api项目 SmartAdminApplication类 diff --git a/smart-admin-service/pom.xml b/smart-admin-service/pom.xml deleted file mode 100644 index 39a6f3ce..00000000 --- a/smart-admin-service/pom.xml +++ /dev/null @@ -1,349 +0,0 @@ - - - 4.0.0 - - net.1024lab - smart-admin-service-parent - 1.0.0 - pom - - - smart-admin-api - - - - UTF-8 - UTF-8 - 1.8 - 3.1.1 - 2.10.0 - 2.2.5.RELEASE - 1.7 - 2.0 - 2.7.0 - 2.0.4 - 3.3.1 - 1.2.73 - 28.2-jre - 2.7.0 - [7.2.0, 7.2.99] - 0.9.1 - 1.1.21 - 3.9.1 - 1.4.2 - 4.1.2 - 1.3.1 - 3.3.2 - 1.9.3 - 2.8.0 - 2.3.2 - 4.2.2 - 8.0.19 - 1.21 - 1.18.8 - - - - - - - org.springframework.boot - spring-boot-dependencies - ${smartadmin.springboot.version} - pom - import - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - com.baomidou - mybatis-plus-boot-starter - ${mybatis-plus-boot.version} - - - - - velocity - org.apache.velocity - ${velocity.version} - - - org.apache.velocity - velocity-engine-core - ${velocity-engine-core.version} - - - - - - com.alibaba - fastjson - ${fastjson.version} - - - - - com.alibaba - druid - ${druid.version} - - - - - p6spy - p6spy - ${p6spy.version} - - - - - io.springfox - springfox-swagger2 - ${swagger.version} - - - io.springfox - springfox-swagger-ui - ${swagger.version} - - - - - - com.github.xiaoymin - knife4j-spring-boot-starter - ${knife4j.version} - - - - - - com.google.guava - guava - ${guava.version} - - - - - com.aliyun.oss - aliyun-sdk-oss - ${aliyun-oss.version} - - - com.qiniu - qiniu-java-sdk - ${qiniu-oss.version} - - - commons-fileupload - commons-fileupload - ${commons-fileupload.version} - - - - - - io.jsonwebtoken - jjwt - ${jjwt.version} - - - - - cn.afterturn - easypoi-spring-boot-starter - ${easypoi.version} - - - - - - mysql - mysql-connector-java - ${mysql.version} - - - - commons-beanutils - commons-beanutils - ${commons-beanutils.version} - - - - org.apache.commons - commons-pool2 - ${commons-pool2.version} - - - - com.github.penggle - kaptcha - ${kaptcha.version} - - - - com.googlecode.concurrentlinkedhashmap - concurrentlinkedhashmap-lru - ${concurrentlinkedhashmap.version} - - - - com.squareup.okhttp3 - okhttp - ${okhttp.version} - - - - eu.bitwalker - UserAgentUtils - ${user-agent-util.version} - - - - org.projectlombok - lombok - ${lombok.version} - provided - - - - - - - - - src/main/java - - **/*.* - - - - false - src/main/resources - - dev/* - sit/* - pre/* - prod/* - - - - src/main/resources/${profiles.active} - true - - *.properties - - - - src/main/resources/${profiles.active} - false - - *.* - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - ${java.version} - ${java.version} - UTF-8 - - - - org.springframework.boot - spring-boot-maven-plugin - ${smartadmin.springboot.version} - - ${main-class} - - - - - repackage - - - - - - - - - - - - dev - - dev - - - true - - - - telework - - telework - - - - sit - - sit - - - - pre - - pre - - - - prod - - prod - - - - \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/doc/readme.txt b/smart-admin-service/smart-admin-api/doc/readme.txt deleted file mode 100644 index f586e4b8..00000000 --- a/smart-admin-service/smart-admin-api/doc/readme.txt +++ /dev/null @@ -1,15 +0,0 @@ -1 超管默认账号 -sa/123456 - -2 执行脚本: -先执行:src/main/resources/sql/smart-admin.sql -再执行:src/main/resources/sql/quartz_mysql_2.3.0.sql - -3 除dev之外文件 - -4 刷新页面,获取权限是否走缓存 -LoginService.getSession - -5 test类中去掉代码生成run - -6 前端百度统计 \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/NoValidPrivilege.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/NoValidPrivilege.java deleted file mode 100644 index d37e63c2..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/NoValidPrivilege.java +++ /dev/null @@ -1,20 +0,0 @@ -package net.lab1024.smartadmin.common.anno; - -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; - -/** - * - * [ 不需要权限验证 ] - * - * @version 1.0 - * @since JDK1.8 - * @author yandanyang - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - */ -@Retention(RetentionPolicy.RUNTIME) -public @interface NoValidPrivilege { - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/OperateLog.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/OperateLog.java deleted file mode 100644 index 31dd3683..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/OperateLog.java +++ /dev/null @@ -1,20 +0,0 @@ -package net.lab1024.smartadmin.common.anno; - -import java.lang.annotation.*; - -/** - * [ 用户操作日志 ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 - */ -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -@Documented -public @interface OperateLog { - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/constant/CommentSortTypeEnum.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/constant/CommentSortTypeEnum.java deleted file mode 100644 index 1a4de4e4..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/constant/CommentSortTypeEnum.java +++ /dev/null @@ -1,57 +0,0 @@ -package net.lab1024.smartadmin.common.constant; - - -import net.lab1024.smartadmin.common.domain.BaseEnum; - -/** - * 全局排序枚举类 - * - * @author listen - * @date 2018/01/13 14:24 - */ -public enum CommentSortTypeEnum implements BaseEnum { - - /** - * 正序 ASC 1 - */ - ASC(1, "ASC"), - - /** - * 倒序 DESC 2 - */ - DESC(2, "DESC"); - - private Integer value; - - private String desc; - - /** - * 排序类型:1正序 | 2倒序 - */ - public static final String INFO = "排序类型:1正序 | 2倒序"; - - CommentSortTypeEnum(Integer value, String desc) { - this.value = value; - this.desc = desc; - } - - /** - * 获取枚举类的值 - * - * @return Integer - */ - @Override - public Integer getValue() { - return value; - } - - /** - * 获取枚举类的说明 - * - * @return String - */ - @Override - public String getDesc() { - return desc; - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/constant/JudgeEnum.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/constant/JudgeEnum.java deleted file mode 100644 index d7c55429..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/constant/JudgeEnum.java +++ /dev/null @@ -1,52 +0,0 @@ -package net.lab1024.smartadmin.common.constant; - -import net.lab1024.smartadmin.common.domain.BaseEnum; - -import java.util.Arrays; -import java.util.Optional; - -/** - * - * [ 是与否] - * - * @version 1.0 - * @since JDK1.8 - * @author yandanyang - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - */ -public enum JudgeEnum implements BaseEnum { - - NO(0, "否"), - - YES(1, "是"); - - private Integer value; - private String desc; - - JudgeEnum(Integer value, String desc) { - this.value = value; - this.desc = desc; - } - - @Override - public Integer getValue() { - return value; - } - @Override - public String getDesc() { - return desc; - } - - public static JudgeEnum valueOf(Integer status) { - JudgeEnum[] values = JudgeEnum.values(); - Optional first = Arrays.stream(values).filter(e -> e.getValue().equals(status)).findFirst(); - return !first.isPresent() ? null : first.get(); - } - - public static boolean isExist(Integer status) { - JudgeEnum judgeEnum = valueOf(status); - return judgeEnum != null; - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/constant/ResponseCodeConst.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/constant/ResponseCodeConst.java deleted file mode 100644 index c572eecd..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/constant/ResponseCodeConst.java +++ /dev/null @@ -1,181 +0,0 @@ -package net.lab1024.smartadmin.common.constant; - -import net.lab1024.smartadmin.module.system.department.DepartmentResponseCodeConst; -import net.lab1024.smartadmin.module.system.employee.constant.EmployeeResponseCodeConst; -import net.lab1024.smartadmin.module.support.file.constant.FileResponseCodeConst; -import net.lab1024.smartadmin.module.business.log.orderoperatelog.constant.OrderOperateLogOperateTypeConst; -import net.lab1024.smartadmin.module.system.login.LoginResponseCodeConst; -import net.lab1024.smartadmin.module.system.position.PositionResponseCodeConst; -import net.lab1024.smartadmin.module.system.privilege.constant.PrivilegeResponseCodeConst; -import net.lab1024.smartadmin.module.system.role.basic.RoleResponseCodeConst; -import net.lab1024.smartadmin.module.system.systemconfig.constant.SystemConfigResponseCodeConst; -import lombok.extern.slf4j.Slf4j; - -import java.lang.reflect.Field; -import java.util.HashMap; -import java.util.Map; - -/** - * 每个业务,100个范围值就够了. - */ -@Slf4j -public class ResponseCodeConst { - - // 范围声明 - static { - // 系统功能,从0开始,step=1000 - ResponseCodeContainer.register(ResponseCodeConst.class, 0, 1000); - ResponseCodeContainer.register(LoginResponseCodeConst.class, 1001, 1999); - ResponseCodeContainer.register(DepartmentResponseCodeConst.class, 2001, 2999); - ResponseCodeContainer.register(EmployeeResponseCodeConst.class, 3001, 3999); - ResponseCodeContainer.register(FileResponseCodeConst.class, 4001, 4999); - ResponseCodeContainer.register(SystemConfigResponseCodeConst.class, 5001, 5999); - ResponseCodeContainer.register(RoleResponseCodeConst.class, 6001, 6999); - ResponseCodeContainer.register(PrivilegeResponseCodeConst.class, 7001, 7999); - ResponseCodeContainer.register(OrderOperateLogOperateTypeConst.class, 8001, 8999); - ResponseCodeContainer.register(PositionResponseCodeConst.class, 13000, 13999); - - } - - public static final ResponseCodeConst SUCCESS = new ResponseCodeConst(1, "操作成功!", true); - - public static final ResponseCodeConst ERROR_PARAM = new ResponseCodeConst(101, "参数异常!"); - - public static final ResponseCodeConst ERROR_PARAM_ANY = new ResponseCodeConst(102, "%s参数异常!"); - - public static final ResponseCodeConst SYSTEM_ERROR = new ResponseCodeConst(111, "系统错误"); - - public static final ResponseCodeConst DEVELOPMENT = new ResponseCodeConst(112, "此功能正在开发中"); - - public static final ResponseCodeConst NOT_EXISTS = new ResponseCodeConst(113, "数据不存在"); - - public static ResponseCodeConst REQUEST_METHOD_ERROR = new ResponseCodeConst(114, "请求方式错误"); - - public static ResponseCodeConst JSON_FORMAT_ERROR = new ResponseCodeConst(115, "JSON格式错误"); - - protected int code; - - protected String msg; - - protected boolean success; - - public ResponseCodeConst() { - } - - protected ResponseCodeConst(int code, String msg) { - super(); - this.code = code; - this.msg = msg; - ResponseCodeContainer.put(this); - } - - protected ResponseCodeConst(int code, String msg, boolean success) { - super(); - this.code = code; - this.msg = msg; - this.success = success; - ResponseCodeContainer.put(this); - } - - protected ResponseCodeConst(int code) { - super(); - this.code = code; - ResponseCodeContainer.put(this); - } - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public String getMsg() { - return msg; - } - - public void setMsg(String msg) { - this.msg = msg; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static void init() { - log.info("ResponseCodeConst init...."); - } - - // =======================分割======================= - - /** - * 内部类,用于检测code范围 - * - * @author Anders - */ - @Slf4j - private static class ResponseCodeContainer { - - private static final Map RESPONSE_CODE_MAP = new HashMap<>(); - - private static final Map, int[]> RESPONSE_CODE_RANGE_MAP = new HashMap<>(); - - /** - * id的范围:[start, end]左闭右闭 - * - * @param clazz - * @param start - * @param end - */ - private static void register(Class clazz, int start, int end) { - if (start > end) { - throw new IllegalArgumentException(" start > end!"); - } - - if (RESPONSE_CODE_RANGE_MAP.containsKey(clazz)) { - throw new IllegalArgumentException(String.format(" Class:%s already exist!", clazz.getSimpleName())); - } - RESPONSE_CODE_RANGE_MAP.forEach((k, v) -> { - if ((start >= v[0] && start <= v[1]) || (end >= v[0] && end <= v[1])) { - throw new IllegalArgumentException(String.format(" Class:%s 's id range[%d,%d] has " + "intersection with " + "class:%s", clazz.getSimpleName(), start, end, - k.getSimpleName())); - } - }); - - RESPONSE_CODE_RANGE_MAP.put(clazz, new int[]{start, end}); - - // 提前初始化static变量,进行范围检测 - Field[] fields = clazz.getFields(); - if (fields.length != 0) { - try { - fields[0].get(clazz); - } catch (IllegalArgumentException | IllegalAccessException e) { - log.error("", e); - } - } - } - - public static void put(ResponseCodeConst codeConst) { - int[] idRange = RESPONSE_CODE_RANGE_MAP.get(codeConst.getClass()); - if (idRange == null) { - throw new IllegalArgumentException(String.format(" Class:%s has not been registered!", codeConst.getClass().getSimpleName())); - } - int code = codeConst.code; - if (code < idRange[0] || code > idRange[1]) { - throw new IllegalArgumentException(String.format(" Id(%d) out of range[%d,%d], " + "class:%s", code, idRange[0], idRange[1], codeConst.getClass().getSimpleName())); - } - if (RESPONSE_CODE_MAP.keySet().contains(code)) { - log.error(String.format(" Id(%d) out of range[%d,%d], " + "class:%s code is repeat!", code, idRange[0], idRange[1], codeConst.getClass().getSimpleName())); - System.exit(0); - } - RESPONSE_CODE_MAP.put(code, codeConst); - } - - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/controller/BaseController.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/controller/BaseController.java deleted file mode 100644 index 47b321aa..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/controller/BaseController.java +++ /dev/null @@ -1,42 +0,0 @@ -package net.lab1024.smartadmin.common.controller; - -import lombok.extern.slf4j.Slf4j; -import org.apache.poi.ss.usermodel.Workbook; - -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; - -/** - * @author: zhuoda - * @create: 2020-03-31 08:54 PM from win10 - */ - -@Slf4j -public class BaseController { - - /** - * 下载 Excel 消息头 - * @param fileName - * @param workbook - * @param response - */ - public void downloadExcel(String fileName, Workbook workbook, HttpServletResponse response) { - try { - fileName = URLEncoder.encode(fileName, "UTF-8"); - } catch (UnsupportedEncodingException e) { - log.error("", e); - } - response.setCharacterEncoding("utf-8"); - response.setHeader("Content-Type", "application/vnd.ms-excel"); - response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xls"); - try { - workbook.write(response.getOutputStream()); - workbook.close(); - } catch (IOException e) { - log.error("", e); - } - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/BaseEntity.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/BaseEntity.java deleted file mode 100644 index e6724c94..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/BaseEntity.java +++ /dev/null @@ -1,39 +0,0 @@ -package net.lab1024.smartadmin.common.domain; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import lombok.Data; - -import java.time.LocalDateTime; -import java.util.Date; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/3/27 0027 上午 11:15 - * @since JDK1.8 - */ -@Data -public class BaseEntity { - - /** - * 主键id - */ - @TableId(type = IdType.AUTO) - private Long id; - - /** - * 更新时间 - */ - private Date updateTime; - - /** - * 创建时间 - */ - private Date createTime; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/ITask.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/ITask.java deleted file mode 100644 index b6427c8e..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/ITask.java +++ /dev/null @@ -1,16 +0,0 @@ -package net.lab1024.smartadmin.common.domain; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/13 0013 下午 14:23 - * @since JDK1.8 - */ -public interface ITask { - - void execute(String paramJson) throws Exception; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/OrderItemDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/OrderItemDTO.java deleted file mode 100644 index 759bb93d..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/OrderItemDTO.java +++ /dev/null @@ -1,16 +0,0 @@ -package net.lab1024.smartadmin.common.domain; - -import lombok.Data; -import lombok.extern.slf4j.Slf4j; - -/** - * @author: zhuoda - * @create: 2020-03-20 09:07 PM from win10 - */ - -@Slf4j -@Data -public class OrderItemDTO { - private String column; - private boolean asc = true; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/PageParamDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/PageParamDTO.java deleted file mode 100644 index 73590fc5..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/PageParamDTO.java +++ /dev/null @@ -1,33 +0,0 @@ -package net.lab1024.smartadmin.common.domain; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.Max; -import javax.validation.constraints.NotNull; -import java.util.List; - -/** - * 分页基础参数 - * - * @author lihaifan - * @Date Created in 2017/10/28 16:19 - */ -@Data -public class PageParamDTO { - - @NotNull(message = "分页参数不能为空") - @ApiModelProperty(value = "页码(不能为空)", example = "1") - protected Integer pageNum; - - @NotNull(message = "每页数量不能为空") - @ApiModelProperty(value = "每页数量(不能为空)", example = "10") - @Max(value = 500, message = "每页最大为500") - protected Integer pageSize; - - @ApiModelProperty("是否查询总条数") - protected Boolean searchCount; - - @ApiModelProperty("排序") - protected List orders; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/ResponseDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/ResponseDTO.java deleted file mode 100644 index 92ec781e..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/ResponseDTO.java +++ /dev/null @@ -1,132 +0,0 @@ -package net.lab1024.smartadmin.common.domain; - - -import net.lab1024.smartadmin.common.constant.ResponseCodeConst; - -/** - * 返回类 - * - * @param - * @author zhuoda - */ -public class ResponseDTO { - - protected Integer code; - - protected String msg; - - protected Boolean success; - - protected T data; - - public ResponseDTO() { - } - - public ResponseDTO(ResponseCodeConst responseCodeConst, String msg) { - this.code = responseCodeConst.getCode(); - this.msg = msg; - this.success = responseCodeConst.isSuccess(); - } - - public ResponseDTO(ResponseCodeConst responseCodeConst, T data) { - super(); - this.code = responseCodeConst.getCode(); - this.msg = responseCodeConst.getMsg(); - this.data = data; - this.success = responseCodeConst.isSuccess(); - } - - public ResponseDTO(ResponseCodeConst responseCodeConst, T data, String msg) { - super(); - this.code = responseCodeConst.getCode(); - this.msg = msg; - this.data = data; - this.success = responseCodeConst.isSuccess(); - } - - private ResponseDTO(ResponseCodeConst responseCodeConst) { - this.code = responseCodeConst.getCode(); - this.msg = responseCodeConst.getMsg(); - this.success = responseCodeConst.isSuccess(); - } - - public ResponseDTO(ResponseDTO responseDTO) { - this.code = responseDTO.getCode(); - this.msg = responseDTO.getMsg(); - this.success = responseDTO.isSuccess(); - } - - public static ResponseDTO succ() { - return new ResponseDTO(ResponseCodeConst.SUCCESS); - } - - public static ResponseDTO succData(T data, String msg) { - return new ResponseDTO(ResponseCodeConst.SUCCESS, data, msg); - } - - public static ResponseDTO succData(T data) { - return new ResponseDTO(ResponseCodeConst.SUCCESS, data); - } - - public static ResponseDTO succMsg(String msg) { - return new ResponseDTO(ResponseCodeConst.SUCCESS, msg); - } - - - public static ResponseDTO wrap(ResponseCodeConst codeConst) { - return new ResponseDTO<>(codeConst); - } - - public static ResponseDTO wrap(ResponseCodeConst codeConst, T t) { - return new ResponseDTO(codeConst, t); - } - - public static ResponseDTO wrap(ResponseCodeConst codeConst, String msg) { - return new ResponseDTO(codeConst, msg); - } - - public static ResponseDTO wrapMsg(ResponseCodeConst codeConst, String msg) { - return new ResponseDTO(codeConst, msg); - } - - public String getMsg() { - return msg; - } - - public ResponseDTO setMsg(String msg) { - this.msg = msg; - return this; - } - - public int getCode() { - return code; - } - - public ResponseDTO setCode(Integer code) { - this.code = code; - return this; - } - - public T getData() { - return data; - } - - public ResponseDTO setData(T data) { - this.data = data; - return this; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - @Override - public String toString() { - return "ResponseDTO{" + "code=" + code + ", msg='" + msg + '\'' + ", success=" + success + ", data=" + data + - '}'; - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/exception/SmartBusinessException.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/exception/SmartBusinessException.java deleted file mode 100644 index 904f3a7b..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/exception/SmartBusinessException.java +++ /dev/null @@ -1,33 +0,0 @@ -package net.lab1024.smartadmin.common.exception; -/** - * - * [ 业务逻辑异常,全局异常拦截后统一返回ResponseCodeConst.SYSTEM_ERROR ] - * - * @version 1.0 - * @since JDK1.8 - * @author yandanyang - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - */ -public class SmartBusinessException extends RuntimeException { - - public SmartBusinessException() { - } - - public SmartBusinessException(String message) { - super(message); - } - - public SmartBusinessException(String message, Throwable cause) { - super(message, cause); - } - - public SmartBusinessException(Throwable cause) { - super(cause); - } - - public SmartBusinessException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { - super(message, cause, enableSuppression, writableStackTrace); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/exception/SmartResponseCodeException.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/exception/SmartResponseCodeException.java deleted file mode 100644 index f3c37ed2..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/exception/SmartResponseCodeException.java +++ /dev/null @@ -1,24 +0,0 @@ -package net.lab1024.smartadmin.common.exception; - -/** - * [ 全局异常拦截后保留ResponseCode码的异常] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/8/7 0007 下午 16:11 - * @since JDK1.8 - */ -public class SmartResponseCodeException extends RuntimeException{ - private Integer code; - - public SmartResponseCodeException(Integer code, String message) { - super(message); - this.code = code; - } - - public Integer getCode() { - return code; - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/AbstractHeartBeatCommand.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/AbstractHeartBeatCommand.java deleted file mode 100644 index c62fbc3d..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/AbstractHeartBeatCommand.java +++ /dev/null @@ -1,90 +0,0 @@ -package net.lab1024.smartadmin.common.heartbeat; - -import com.google.common.util.concurrent.ThreadFactoryBuilder; -import java.util.Date; -import java.util.List; -import java.util.concurrent.*; - - -/** -* @Description: 心跳服务 -* @Author: simajinqiang -* @Date: 2018/7/9 16:26 -*/ -public abstract class AbstractHeartBeatCommand implements HeartBeatRecordCommendInterface { - - - ScheduledExecutorService executorService; - - int threadNum = 1; - - /** - * 项目路径 - */ - private String projectPath; - /** - * 服务器ip(多网卡) - */ - private List serverIps; - /** - * 进程号 - */ - private Integer processNo; - /** - * 进程开启时间 - */ - private Date processStartTime; - - HeartBeatLogger logger; - - /** - * 初始化 - */ - public void init(HeartBeatConfig config, HeartBeatLogger logger){ - this.handlerHeartBeat(); - ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat("AbstractHeartBeatCommand-%s").build(); - executorService = Executors.newScheduledThreadPool(threadNum, threadFactory); - executorService.scheduleWithFixedDelay(new DoHeartBeat(), config.getDelayHandlerTime(), config.getIntervalTime(), TimeUnit.MILLISECONDS); - } - - public void handlerHeartBeat(){ - try { - projectPath = HeatBeatRecordHelper.getProjectPath(); - serverIps = IpUtil.getLocalIPS(); - processNo = HeatBeatRecordHelper.getProcessID(); - processStartTime = HeatBeatRecordHelper.getStartTime(); - }catch (Throwable e){ - logger.error("get heart beat info error.", e); - } - } - - /** - * 销毁线程池 - */ - public void destroy(){ - if (executorService != null && !executorService.isShutdown()) { - executorService.shutdown(); - executorService = null; - } - } - - public class DoHeartBeat implements Runnable{ - - @Override - public void run() { - try { - HeartBeatRecordDTO heartBeatRecord = new HeartBeatRecordDTO(); - heartBeatRecord.setProjectPath(projectPath); - heartBeatRecord.setServerIp(StringUtil.join(serverIps,";")); - heartBeatRecord.setProcessNo(processNo); - heartBeatRecord.setProcessStartTime(processStartTime); - heartBeatRecord.setHeartBeatTime(new Date()); - handler(heartBeatRecord); - }catch (Throwable t){ - logger.error("handler heartbeat error.", t); - } - - } - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeartBeatConfig.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeartBeatConfig.java deleted file mode 100644 index 3fa1ed84..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeartBeatConfig.java +++ /dev/null @@ -1,29 +0,0 @@ -package net.lab1024.smartadmin.common.heartbeat; - -import lombok.Builder; -import lombok.Data; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/8/8 0008 下午 16:22 - * @since JDK1.8 - */ -@Data -@Builder -public class HeartBeatConfig { - - /** - * 延迟执行时间 - */ - private Long delayHandlerTime; - - /** - * 间隔执行时间 - */ - private Long intervalTime; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeartBeatLogger.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeartBeatLogger.java deleted file mode 100644 index 0376b0f0..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeartBeatLogger.java +++ /dev/null @@ -1,20 +0,0 @@ -package net.lab1024.smartadmin.common.heartbeat; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/8/8 0008 下午 16:23 - * @since JDK1.8 - */ -public interface HeartBeatLogger { - - void error(String string); - - void error(String string, Throwable e); - - void info(String string); -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeartBeatRecordCommendInterface.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeartBeatRecordCommendInterface.java deleted file mode 100644 index e94369e3..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeartBeatRecordCommendInterface.java +++ /dev/null @@ -1,17 +0,0 @@ -package net.lab1024.smartadmin.common.heartbeat; - - - -/** -* @Description: -* @Author: simajinqiang -* @Date: 2018/7/9 14:06 -*/ -public interface HeartBeatRecordCommendInterface { - /** - * 处理 - * @param heartBeatRecord - */ - void handler(HeartBeatRecordDTO heartBeatRecord); - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeartBeatRecordDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeartBeatRecordDTO.java deleted file mode 100644 index b5f4e499..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeartBeatRecordDTO.java +++ /dev/null @@ -1,37 +0,0 @@ -package net.lab1024.smartadmin.common.heartbeat; - -import lombok.Data; - -import java.util.Date; - -/** -* @Description: 心跳记录日志 -* @Author: simajinqiang -* @Date: 2018/7/9 11:11 -*/ -@Data -public class HeartBeatRecordDTO { - - /** - * 项目名字 - */ - private String projectPath; - /** - * 服务器ip - */ - private String serverIp; - /** - * 进程号 - */ - private Integer processNo; - /** - * 进程开启时间 - */ - private Date processStartTime; - /** - * 心跳当前时间 - */ - private Date heartBeatTime; - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeatBeatRecordHelper.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeatBeatRecordHelper.java deleted file mode 100644 index ce3b04f7..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeatBeatRecordHelper.java +++ /dev/null @@ -1,45 +0,0 @@ -package net.lab1024.smartadmin.common.heartbeat; - - -import java.lang.management.ManagementFactory; -import java.lang.management.RuntimeMXBean; -import java.util.Date; - -/** -* @Description: 心跳工具类 -* @Author: simajinqiang -* @Date: 2018/7/9 11:48 -*/ -public class HeatBeatRecordHelper { - - /** - * 获取进程号 - * @return - */ - public static final Integer getProcessID() { - RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean(); - return Integer.valueOf(runtimeMXBean.getName().split("@")[0]) - .intValue(); - } - - /** - * 获取项目名称 - * @return - */ - public static final String getProjectPath(){ - return System.getProperty("user.dir"); - } - - /** - * 获取进程启动时间 - * @return - */ - public static final Date getStartTime(){ - RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean(); - return new Date(runtimeMXBean.getStartTime()); - } - - - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/IpUtil.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/IpUtil.java deleted file mode 100644 index e250f074..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/IpUtil.java +++ /dev/null @@ -1,81 +0,0 @@ -package net.lab1024.smartadmin.common.heartbeat; - -import java.net.InetAddress; -import java.net.NetworkInterface; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.List; - -/** -* @Description: ip工具类 -* @Author: sbq -* @CreateDate: 2019/8/8 10:33 -* @Version: 1.0 -*/ -public class IpUtil { - /** - * 获得服务器的IP地址 - */ - public static String getLocalIP() { - String sIP = ""; - InetAddress ip = null; - try { - boolean bFindIP = false; - Enumeration netInterfaces = (Enumeration) NetworkInterface - .getNetworkInterfaces(); - while (netInterfaces.hasMoreElements()) { - if (bFindIP) { - break; - } - NetworkInterface ni = (NetworkInterface) netInterfaces - .nextElement(); - Enumeration ips = ni.getInetAddresses(); - while (ips.hasMoreElements()) { - ip = (InetAddress) ips.nextElement(); - if (!ip.isLoopbackAddress() - && ip.getHostAddress().matches( - "(\\d{1,3}\\.){3}\\d{1,3}")) { - bFindIP = true; - break; - } - } - } - } catch (Exception e) { - } - if (null != ip) { - sIP = ip.getHostAddress(); - } - return sIP; - } - - /** - * @Description: 获得服务器的IP地址(多网卡) - * @Author: sbq - * @CreateDate: 2019/8/8 10:34 - * @Version: 1.0 - */ - public static List getLocalIPS() { - InetAddress ip = null; - List ipList = new ArrayList(); - try { - Enumeration netInterfaces = (Enumeration) NetworkInterface - .getNetworkInterfaces(); - while (netInterfaces.hasMoreElements()) { - NetworkInterface ni = (NetworkInterface) netInterfaces - .nextElement(); - Enumeration ips = ni.getInetAddresses(); - while (ips.hasMoreElements()) { - ip = (InetAddress) ips.nextElement(); - if (!ip.isLoopbackAddress() - && ip.getHostAddress().matches( - "(\\d{1,3}\\.){3}\\d{1,3}")) { - ipList.add(ip.getHostAddress()); - } - } - } - } catch (Exception e) { - } - return ipList; - } - -} \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/StringUtil.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/StringUtil.java deleted file mode 100644 index 9e0842ec..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/StringUtil.java +++ /dev/null @@ -1,60 +0,0 @@ -package net.lab1024.smartadmin.common.heartbeat; - -import java.util.Iterator; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/8/8 0008 下午 16:27 - * @since JDK1.8 - */ -public class StringUtil { - - - - public static String join(Iterable iterable, String separator) { - return iterable == null ? null : join(iterable.iterator(), separator); - } - - - public static String join(Iterator iterator, String separator) { - if (iterator == null) { - return null; - } else if (!iterator.hasNext()) { - return ""; - } else { - Object first = iterator.next(); - if (!iterator.hasNext()) { - String result = toString(first); - return result; - } else { - StringBuilder buf = new StringBuilder(256); - if (first != null) { - buf.append(first); - } - - while(iterator.hasNext()) { - if (separator != null) { - buf.append(separator); - } - - Object obj = iterator.next(); - if (obj != null) { - buf.append(obj); - } - } - - return buf.toString(); - } - } - } - - public static String toString(Object obj) { - return obj == null ? "" : obj.toString(); - } - -} \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/SmartReloadManager.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/SmartReloadManager.java deleted file mode 100644 index 1d4770c4..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/SmartReloadManager.java +++ /dev/null @@ -1,134 +0,0 @@ -package net.lab1024.smartadmin.common.reload; - -import net.lab1024.smartadmin.common.reload.annotation.SmartReload; -import net.lab1024.smartadmin.common.reload.domain.AbstractSmartReloadObject; -import net.lab1024.smartadmin.common.reload.domain.AnnotationReloadObject; -import net.lab1024.smartadmin.common.reload.domain.InterfaceReloadObject; -import net.lab1024.smartadmin.common.reload.domain.entity.ReloadItem; -import net.lab1024.smartadmin.common.reload.domain.entity.SmartReloadResult; -import net.lab1024.smartadmin.common.reload.interfaces.SmartReloadCommandInterface; -import net.lab1024.smartadmin.common.reload.interfaces.SmartReloadThreadLogger; -import net.lab1024.smartadmin.common.reload.interfaces.SmartReloadable; - -import java.lang.reflect.Method; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.TimeUnit; - -import static java.util.Objects.requireNonNull; - -/** - * SmartReloadManager 管理器 - *

- * 可以在此类中添加 检测任务 以及注册 处理程序 - * - * @author zhuoda - */ -public class SmartReloadManager { - - private Map tagReloadObject; - - private SmartReloadScheduler reloadScheduler; - - private SmartReloadThreadLogger logger; - - public SmartReloadManager(SmartReloadThreadLogger logger, int threadCount) { - this.tagReloadObject = new ConcurrentHashMap<>(); - if (logger == null) { - throw new ExceptionInInitializerError("SmartReloadLoggerImp cannot be null"); - } - - if (threadCount < 1) { - throw new ExceptionInInitializerError("threadCount must be greater than 1"); - } - - this.logger = logger; - this.reloadScheduler = new SmartReloadScheduler(this.logger, threadCount); - } - - /** - * 默认创建单个线程 - * - * @param logger - */ - public SmartReloadManager(SmartReloadThreadLogger logger) { - this(logger, 1); - } - - /** - * 停止 - */ - public void shutdown() { - reloadScheduler.shutdown(); - } - - /** - * 添加任务 - * - * @param command SmartReloadCommand实现类 - * @param initialDelay 第一次执行前的延迟时间 - * @param delay 任务间隔时间 - * @param unit 延迟单位 TimeUnit 天、小时、分、秒等 - */ - public void addCommand(SmartReloadCommandInterface command, long initialDelay, long delay, TimeUnit unit) { - reloadScheduler.addCommand(command, initialDelay, delay, unit); - } - - /** - * 注册 实现接口的方式 - * - * @param tag - * @param reloadable - */ - public void register(String tag, SmartReloadable reloadable) { - requireNonNull(reloadable); - requireNonNull(tag); - if (tagReloadObject.containsKey(tag)) { - logger.error("<> register duplicated tag reload : " + tag + " , and it will be cover!"); - } - tagReloadObject.put(tag, new InterfaceReloadObject(reloadable)); - } - - /** - * 注册 要求此类必须包含使用了SmartReload注解的方法 - * - * @param reloadObject - */ - public void register(Object reloadObject) { - requireNonNull(reloadObject); - Method[] declaredMethods = reloadObject.getClass().getDeclaredMethods(); - if (declaredMethods != null) { - for (int i = 0; i < declaredMethods.length; i++) { - Method method = declaredMethods[i]; - SmartReload annotation = method.getAnnotation(SmartReload.class); - if (annotation != null) { - String reloadTag = annotation.value(); - this.register(reloadTag, new AnnotationReloadObject(reloadObject, method)); - } - } - } - } - - private void register(String tag, AbstractSmartReloadObject reloadObject) { - if (tagReloadObject.containsKey(tag)) { - logger.error("<> register duplicated tag reload : " + tag + " , and it will be cover!"); - } - tagReloadObject.put(tag, reloadObject); - } - - /** - * Reload 已注册的ReloadItem - * - * @param reloadItem - * @return SmartReloadResult - */ - public SmartReloadResult doReload(ReloadItem reloadItem) { - AbstractSmartReloadObject reloadObject = tagReloadObject.get(reloadItem.getTag()); - if (reloadObject != null) { - return reloadObject.reload(reloadItem); - } - // 返回注册结果 - return new SmartReloadResult(reloadItem.getTag(), reloadItem.getArgs(), reloadItem.getIdentification(), false, "No registered reload handler was found"); - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/SmartReloadScheduler.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/SmartReloadScheduler.java deleted file mode 100644 index 121c3056..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/SmartReloadScheduler.java +++ /dev/null @@ -1,87 +0,0 @@ -package net.lab1024.smartadmin.common.reload; - -import net.lab1024.smartadmin.common.reload.interfaces.SmartReloadCommandInterface; -import net.lab1024.smartadmin.common.reload.interfaces.SmartReloadThreadLogger; - -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.ThreadFactory; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; - -/** - * Reload 调度器 - * - * @author zhuoda - */ -public class SmartReloadScheduler { - - private ScheduledThreadPoolExecutor executor; - - private SmartReloadThreadLogger logger; - - SmartReloadScheduler(SmartReloadThreadLogger logger, int threadCount) { - this.executor = new ScheduledThreadPoolExecutor(threadCount, new SmartReloadSchedulerThreadFactory()); - this.logger = logger; - } - - void shutdown() { - try { - executor.shutdown(); - } catch (Throwable e) { - logger.error("<> shutdown ", e); - } - } - - void addCommand(SmartReloadCommandInterface command, long initialDelay, long delay, TimeUnit unit) { - executor.scheduleWithFixedDelay(new ScheduleRunnable(command, this.logger), initialDelay, delay, unit); - } - - static class ScheduleRunnable implements Runnable { - - private SmartReloadCommandInterface command; - - private SmartReloadThreadLogger logger; - - public ScheduleRunnable(SmartReloadCommandInterface command, SmartReloadThreadLogger logger) { - this.command = command; - this.logger = logger; - } - - @Override - public void run() { - try { - command.doTask(); - } catch (Throwable e) { - logger.error("", e); - } - } - } - - static class SmartReloadSchedulerThreadFactory implements ThreadFactory { - - private static final AtomicInteger poolNumber = new AtomicInteger(1); - - private final ThreadGroup group; - - private final AtomicInteger threadNumber = new AtomicInteger(1); - - private final String namePrefix; - - SmartReloadSchedulerThreadFactory() { - SecurityManager s = System.getSecurityManager(); - group = (s != null) ? s.getThreadGroup() : Thread.currentThread().getThreadGroup(); - namePrefix = "smartreload-" + poolNumber.getAndIncrement() + "-thread-"; - } - - @Override - public Thread newThread(Runnable r) { - Thread t = new Thread(group, r, namePrefix + threadNumber.getAndIncrement(), 0); - if (t.isDaemon()) - t.setDaemon(false); - if (t.getPriority() != Thread.NORM_PRIORITY) - t.setPriority(Thread.NORM_PRIORITY); - return t; - } - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/abstracts/AbstractSmartReloadCommand.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/abstracts/AbstractSmartReloadCommand.java deleted file mode 100644 index 8e1dc3ed..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/abstracts/AbstractSmartReloadCommand.java +++ /dev/null @@ -1,66 +0,0 @@ -package net.lab1024.smartadmin.common.reload.abstracts; - -import net.lab1024.smartadmin.common.reload.SmartReloadManager; -import net.lab1024.smartadmin.common.reload.domain.entity.ReloadItem; -import net.lab1024.smartadmin.common.reload.interfaces.SmartReloadCommandInterface; - -import java.util.List; -import java.util.concurrent.ConcurrentHashMap; - -/** - * 检测是否 Reload 的类 - * - * @author zhuoda - */ -public abstract class AbstractSmartReloadCommand implements SmartReloadCommandInterface { - - /** - * 当前ReloadItem的存储器 - */ - private ConcurrentHashMap currentTags = null; - - /** - * Reload的执行类 - */ - private SmartReloadManager reloadManager; - - public AbstractSmartReloadCommand(SmartReloadManager reloadManager) { - this.reloadManager = reloadManager; - this.currentTags = new ConcurrentHashMap<>(); - // 初始获取ReloadItem数据 - List readTagStatesFromDb = readReloadItem(); - if (readTagStatesFromDb != null) { - for (ReloadItem reloadItem : readTagStatesFromDb) { - String tag = reloadItem.getTag(); - String tagChangeIdentifier = reloadItem.getIdentification(); - this.currentTags.put(tag, tagChangeIdentifier); - } - } - } - /** - * 任务: - * 读取数据库中 ReloadItem 数据 - * 校验是否发生变化 - * 执行重加载动作 - */ - @Override - public void doTask() { - // 获取数据库数据 - List readTagStatesFromDb = readReloadItem(); - String tag; - String tagIdentifier; - String preTagChangeIdentifier; - for (ReloadItem reloadItem : readTagStatesFromDb) { - tag = reloadItem.getTag(); - tagIdentifier = reloadItem.getIdentification(); - preTagChangeIdentifier = currentTags.get(tag); - // 数据不一致 - if (preTagChangeIdentifier == null || ! preTagChangeIdentifier.equals(tagIdentifier)) { - // 更新map数据 - currentTags.put(tag, tagIdentifier); - // 执行重新加载此项的动作 - handleReloadResult(this.reloadManager.doReload(reloadItem)); - } - } - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/abstracts/AbstractSmartReloadCommand4Spring.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/abstracts/AbstractSmartReloadCommand4Spring.java deleted file mode 100644 index 60f34a9c..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/abstracts/AbstractSmartReloadCommand4Spring.java +++ /dev/null @@ -1,67 +0,0 @@ -package net.lab1024.smartadmin.common.reload.abstracts; - -import net.lab1024.smartadmin.common.reload.SmartReloadManager; -import net.lab1024.smartadmin.common.reload.domain.entity.ReloadItem; -import net.lab1024.smartadmin.common.reload.interfaces.SmartReloadCommandInterface; -import org.springframework.beans.factory.annotation.Autowired; - -import java.util.List; -import java.util.concurrent.ConcurrentHashMap; - -/** - * 检测是否 Reload 的类 - * - * @author zhuoda - */ -public abstract class AbstractSmartReloadCommand4Spring implements SmartReloadCommandInterface { - - /** - * 当前ReloadItem的存储器 - */ - protected ConcurrentHashMap currentTags = new ConcurrentHashMap<>(); - - /** - * Reload的执行类 - */ - @Autowired - protected SmartReloadManager reloadManager; - -// @PostConstruct - public void init() { - List readTagStatesFromDb = readReloadItem(); - if (readTagStatesFromDb != null) { - for (ReloadItem reloadItem : readTagStatesFromDb) { - String tag = reloadItem.getTag(); - String tagChangeIdentifier = reloadItem.getIdentification(); - this.currentTags.put(tag, tagChangeIdentifier); - } - } - } - - /** - * 任务: - * 读取数据库中 ReloadItem 数据 - * 校验是否发生变化 - * 执行重加载动作 - */ - @Override - public void doTask() { - // 获取数据库数据 - List readTagStatesFromDb = readReloadItem(); - String tag; - String tagIdentifier; - String preTagChangeIdentifier; - for (ReloadItem reloadItem : readTagStatesFromDb) { - tag = reloadItem.getTag(); - tagIdentifier = reloadItem.getIdentification(); - preTagChangeIdentifier = currentTags.get(tag); - // 数据不一致 - if (preTagChangeIdentifier == null || ! preTagChangeIdentifier.equals(tagIdentifier)) { - // 更新map数据 - currentTags.put(tag, tagIdentifier); - // 执行重新加载此项的动作 - handleReloadResult(this.reloadManager.doReload(reloadItem)); - } - } - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/AbstractSmartReloadObject.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/AbstractSmartReloadObject.java deleted file mode 100644 index 907d37da..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/AbstractSmartReloadObject.java +++ /dev/null @@ -1,31 +0,0 @@ -package net.lab1024.smartadmin.common.reload.domain; - -import net.lab1024.smartadmin.common.reload.domain.entity.ReloadItem; -import net.lab1024.smartadmin.common.reload.domain.entity.SmartReloadResult; - -import java.io.PrintWriter; -import java.io.StringWriter; -/** - * AbstractSmartReloadObject 处理程序的抽象类 - * - * @author zhuoda - */ -public abstract class AbstractSmartReloadObject { - - protected String getStackTrace(Throwable e) { - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - e.printStackTrace(pw); - return sw.toString(); - } - - /** - * 通过reloadItem参数reload,获得结果 - * - * @param reloadItem - * @return boolean - * @author zhuokongming - * @date 2016年10月21日 下午2:09:44 - */ - public abstract SmartReloadResult reload(ReloadItem reloadItem); -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/AnnotationReloadObject.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/AnnotationReloadObject.java deleted file mode 100644 index da19bcb9..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/AnnotationReloadObject.java +++ /dev/null @@ -1,44 +0,0 @@ -package net.lab1024.smartadmin.common.reload.domain; - -import net.lab1024.smartadmin.common.reload.annotation.SmartReload; -import net.lab1024.smartadmin.common.reload.domain.entity.ReloadItem; -import net.lab1024.smartadmin.common.reload.domain.entity.SmartReloadResult; - -import java.lang.reflect.Method; - -/** - * Reload 处理程序的实现类 - * 用于包装以注解 SmartReload 实现的处理类 - * - * @author zhuoda - */ -public class AnnotationReloadObject extends AbstractSmartReloadObject { - - private Object reloadObject; - - private Method method; - - public AnnotationReloadObject(Object reloadObject, Method method) { - super(); - this.reloadObject = reloadObject; - this.method = method; - this.method.setAccessible(true); - } - - @Override - public SmartReloadResult reload(ReloadItem reloadItem) { - SmartReloadResult result = new SmartReloadResult(); - String tag = method.getAnnotation(SmartReload.class).value(); - result.setTag(tag); - result.setArgs(reloadItem.getArgs()); - result.setIdentification(reloadItem.getIdentification()); - try { - Object invoke = method.invoke(reloadObject, reloadItem.getArgs()); - result.setResult((Boolean) invoke); - } catch (Throwable e) { - result.setException(getStackTrace(e)); - } - return result; - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/InterfaceReloadObject.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/InterfaceReloadObject.java deleted file mode 100644 index e0f75ba0..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/InterfaceReloadObject.java +++ /dev/null @@ -1,37 +0,0 @@ -package net.lab1024.smartadmin.common.reload.domain; - -import net.lab1024.smartadmin.common.reload.domain.entity.ReloadItem; -import net.lab1024.smartadmin.common.reload.domain.entity.SmartReloadResult; -import net.lab1024.smartadmin.common.reload.interfaces.SmartReloadable; - -/** - * Reload 处理程序的实现类 - * 用于处理以接口实现的处理类 - * - * @author zhuoda - */ -public class InterfaceReloadObject extends AbstractSmartReloadObject { - - private SmartReloadable object; - - public InterfaceReloadObject(SmartReloadable object) { - super(); - this.object = object; - } - - @Override - public SmartReloadResult reload(ReloadItem reloadItem) { - SmartReloadResult reloadResult = new SmartReloadResult(); - reloadResult.setArgs(reloadItem.getArgs()); - reloadResult.setIdentification(reloadItem.getIdentification()); - reloadResult.setTag(reloadItem.getTag()); - try { - boolean res = object.reload(reloadItem); - reloadResult.setResult(res); - } catch (Throwable e) { - reloadResult.setException(getStackTrace(e)); - } - return reloadResult; - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/entity/ReloadItem.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/entity/ReloadItem.java deleted file mode 100644 index 66a89b60..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/entity/ReloadItem.java +++ /dev/null @@ -1,55 +0,0 @@ -package net.lab1024.smartadmin.common.reload.domain.entity; -/** - * ReloadItem 类 - * - * @author zhuoda - */ -public class ReloadItem { - - /** - * 项名称 - */ - private String tag; - - /** - * 参数 - */ - private String args; - - /** - * 标识 - */ - private String identification; - - public ReloadItem() { - - } - public ReloadItem(String tag, String identification, String args) { - this.tag = tag; - this.identification = identification; - this.args = args; - } - - public String getTag() { - return tag; - } - public void setTag(String tag) { - this.tag = tag; - } - public String getIdentification() { - return identification; - } - public void setIdentification(String identification) { - this.identification = identification; - } - public String getArgs() { - return args; - } - public void setArgs(String args) { - this.args = args; - } - @Override - public String toString() { - return "ReloadItem{" + "tag='" + tag + '\'' + ", identification='" + identification + '\'' + ", args='" + args + '\'' + '}'; - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/entity/SmartReloadResult.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/entity/SmartReloadResult.java deleted file mode 100644 index 07c6d2d5..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/entity/SmartReloadResult.java +++ /dev/null @@ -1,102 +0,0 @@ -package net.lab1024.smartadmin.common.reload.domain.entity; -/** - * t_reload_result 表 实体类 - * - * @author zhuoda - */ -public class SmartReloadResult { - - /** - * 项名称 - */ - private String tag; - - /** - * 参数 - */ - private String args; - - /** - * 标识 - */ - private String identification; - - /** - * 处理结果 - */ - private boolean result; - - /** - * 异常说明 - */ - private String exception; - - public SmartReloadResult() { - } - - public SmartReloadResult(String tag, String args, boolean result, String exception) { - this.tag = tag; - this.args = args; - this.result = result; - this.exception = exception; - } - - public SmartReloadResult(String tag, String args, String identification, boolean result, String exception) { - this.tag = tag; - this.args = args; - this.identification = identification; - this.result = result; - this.exception = exception; - } - - public void setTag(String tag) { - this.tag = tag; - } - - public void setArgs(String args) { - this.args = args; - } - - public void setIdentification(String identification) { - this.identification = identification; - } - - public void setResult(boolean result) { - this.result = result; - } - - public void setException(String exception) { - this.exception = exception; - } - - public String getTag() { - return tag; - } - - public String getArgs() { - return args; - } - - public String getIdentification() { - return identification; - } - - public boolean isResult() { - return result; - } - - public String getException() { - return exception; - } - - @Override - public String toString() { - return "SmartReloadResult{" + - "tag='" + tag + '\'' + - ", args='" + args + '\'' + - ", identification='" + identification + '\'' + - ", result=" + result + - ", exception='" + exception + '\'' + - '}'; - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/interfaces/SmartReloadCommandInterface.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/interfaces/SmartReloadCommandInterface.java deleted file mode 100644 index c9e04237..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/interfaces/SmartReloadCommandInterface.java +++ /dev/null @@ -1,38 +0,0 @@ -package net.lab1024.smartadmin.common.reload.interfaces; - -import net.lab1024.smartadmin.common.reload.domain.entity.ReloadItem; -import net.lab1024.smartadmin.common.reload.domain.entity.SmartReloadResult; - -import java.util.List; - -/** - * 检测是否 Reload 的类 - * - * @author zhuoda - */ -public interface SmartReloadCommandInterface { - - /** - * 任务: - * 读取数据库中 ReloadItem 数据 - * 校验是否发生变化 - * 执行重加载动作 - */ - void doTask(); - - /** - * 该方法返回一个List:
- * ReloadItem对象的tagIdentify为:该tag的 状态(状态其实就是个字符串,如果该字符串跟上次有变化则进行reload操作)
- * ReloadItem对象的args为: reload操作需要的参数

- * - * @return List - */ - List readReloadItem(); - - /** - * 处理Reload结果 - * - * @param reloadResult - */ - void handleReloadResult(SmartReloadResult reloadResult); -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/interfaces/SmartReloadThreadLogger.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/interfaces/SmartReloadThreadLogger.java deleted file mode 100644 index e03c9ad7..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/interfaces/SmartReloadThreadLogger.java +++ /dev/null @@ -1,12 +0,0 @@ -package net.lab1024.smartadmin.common.reload.interfaces; - -/** - * SmartReloadThreadLogger 日志类 - */ -public interface SmartReloadThreadLogger { - - void error(String string); - - void error(String string, Throwable e); - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/interfaces/SmartReloadable.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/interfaces/SmartReloadable.java deleted file mode 100644 index 85473d5f..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/interfaces/SmartReloadable.java +++ /dev/null @@ -1,19 +0,0 @@ -package net.lab1024.smartadmin.common.reload.interfaces; - -import net.lab1024.smartadmin.common.reload.domain.entity.ReloadItem; - -/** - * reload 接口
- * 需要reload的业务实现类 - */ -@FunctionalInterface -public interface SmartReloadable { - - /** - * reload - * - * @param reloadItem - * @return boolean - */ - boolean reload(ReloadItem reloadItem); -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/bigdecimal/BigDecimalValidator.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/bigdecimal/BigDecimalValidator.java deleted file mode 100644 index 5ba85bf7..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/bigdecimal/BigDecimalValidator.java +++ /dev/null @@ -1,73 +0,0 @@ -package net.lab1024.smartadmin.common.validator.bigdecimal; - -import net.lab1024.smartadmin.util.SmartBigDecimalUtil; - -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; -import java.math.BigDecimal; - -/** - * BigDecimal 类校验器 - * - * @author listen - * @date 2018年3月20日 13:51:46 - */ -public class BigDecimalValidator implements ConstraintValidator { - - /** - * 获取定义的数值 - */ - private BigDecimal value; - - /** - * 获取比较符 - */ - private ComparisonSymbolEnum symbolEnum; - - /** - * 是否必须 - */ - private boolean required; - - @Override - public void initialize(CheckBigDecimal constraintAnnotation) { - // 初始化属性 - value = new BigDecimal(constraintAnnotation.value()); - symbolEnum = constraintAnnotation.symbolEnum(); - required = constraintAnnotation.required(); - } - - @Override - public boolean isValid(BigDecimal decimal, ConstraintValidatorContext constraintValidatorContext) { - - // 如果数值为空,校验是否必须 - if (null == decimal) { - return ! required; - } - - // 根据操作符,校验结果 - switch (symbolEnum) { - // 等于 - case EQUAL: - return SmartBigDecimalUtil.equals(decimal, value); - // 不等于 - case NOT_EQUAL: - return ! SmartBigDecimalUtil.equals(decimal, value); - // 小于 - case LESS_THAN: - return SmartBigDecimalUtil.isLessThan(decimal, value); - // 小于等于 - case LESS_THAN_OR_EQUAL: - return SmartBigDecimalUtil.isLessThan(decimal, value) || SmartBigDecimalUtil.equals(decimal, value); - // 大于 - case GREATER_THAN: - return SmartBigDecimalUtil.isGreaterThan(decimal, value); - // 大于等于 - case GREATER_THAN_OR_EQUAL: - return SmartBigDecimalUtil.isGreaterThan(decimal, value) || SmartBigDecimalUtil.equals(decimal, value); - default: - } - - return false; - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/bigdecimal/CheckBigDecimal.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/bigdecimal/CheckBigDecimal.java deleted file mode 100644 index 73ef5668..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/bigdecimal/CheckBigDecimal.java +++ /dev/null @@ -1,53 +0,0 @@ -package net.lab1024.smartadmin.common.validator.bigdecimal; - -import javax.validation.Constraint; -import javax.validation.Payload; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * 自定义的属性校验注解 - * - * @author listen - * @date 2018年3月20日 13:53:33 - */ -@Target(ElementType.FIELD) -@Retention(RetentionPolicy.RUNTIME) -@Constraint(validatedBy = BigDecimalValidator.class)// 自定义验证的处理类 -public @interface CheckBigDecimal { - - /** - * 与这个数值校验 - * - * @return - */ - String value(); - - /** - * 比较符 请使用 ComparisonSymbolEnum 枚举类 - * - * @return - */ - ComparisonSymbolEnum symbolEnum(); - - /** - * 默认的错误提示信息 - * - * @return String - */ - String message() default "非法的数值"; - - /** - * 是否必须 : 默认 true - * - * @return boolean - */ - boolean required() default true; - - //下面这两个属性必须添加 :不然会报错 - Class[] groups() default {}; - - Class[] payload() default {}; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/bigdecimal/ComparisonSymbolEnum.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/bigdecimal/ComparisonSymbolEnum.java deleted file mode 100644 index e59d0bf3..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/bigdecimal/ComparisonSymbolEnum.java +++ /dev/null @@ -1,40 +0,0 @@ -package net.lab1024.smartadmin.common.validator.bigdecimal; - -/** - * 比较符枚举类 - * - * @author listen - * @date 2018/03/20 14:01 - */ -public enum ComparisonSymbolEnum { - - /** - * 等于 - */ - EQUAL, - - /** - * 不等于 - */ - NOT_EQUAL, - - /** - * 小于 - */ - LESS_THAN, - - /** - * 小于等于 - */ - LESS_THAN_OR_EQUAL, - - /** - * 大于 - */ - GREATER_THAN, - - /** - * 大于等于 - */ - GREATER_THAN_OR_EQUAL, -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartAdminWebAppConfig.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartAdminWebAppConfig.java deleted file mode 100644 index 04d30c67..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartAdminWebAppConfig.java +++ /dev/null @@ -1,25 +0,0 @@ -package net.lab1024.smartadmin.config; - -import net.lab1024.smartadmin.interceptor.SmartAuthenticationInterceptor; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.*; - -@Configuration -public class SmartAdminWebAppConfig implements WebMvcConfigurer { - - @Autowired - private SmartAuthenticationInterceptor smartAuthenticationInterceptor; - - @Override - public void addInterceptors(InterceptorRegistry registry) { - registry.addInterceptor(smartAuthenticationInterceptor).addPathPatterns("/**"); - } - - - @Override - public void addViewControllers(ViewControllerRegistry registry) { - registry.addViewController("/druidMonitor").setViewName("redirect:/druid/index.html"); - registry.addViewController("/swaggerApi").setViewName("redirect:/swagger-ui.html"); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartHeartBeatConfig.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartHeartBeatConfig.java deleted file mode 100644 index 14517a8f..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartHeartBeatConfig.java +++ /dev/null @@ -1,33 +0,0 @@ -package net.lab1024.smartadmin.config; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -/** - * - * [ ] - * - * @version 1.0 - * @since JDK1.8 - * @author yandanyang - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - */ -@Data -@Configuration -public class SmartHeartBeatConfig { - - /** - * 延迟执行时间 - */ - @Value("${heart-beat.delayHandlerTime}") - private Long delayHandlerTime; - - /** - * 间隔执行时间 - */ - @Value("${heart-beat.intervalTime}") - private Long intervalTime; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartMybatisPlusConfig.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartMybatisPlusConfig.java deleted file mode 100644 index 6bdcfb08..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartMybatisPlusConfig.java +++ /dev/null @@ -1,27 +0,0 @@ -package net.lab1024.smartadmin.config; - -import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; -import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * @author zhuoda - */ -@EnableTransactionManagement -@Configuration -@MapperScan(basePackages = {"net.lab1024.smartadmin.module.*"}) -public class SmartMybatisPlusConfig { - - /** - * 分页插件 - */ - @Bean - public PaginationInterceptor paginationInterceptor() { - // 开启 count 的 join 优化,只针对 left join !!! - return new PaginationInterceptor().setCountSqlParser(new JsqlParserCountOptimize(true)); - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartReloadConfig.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartReloadConfig.java deleted file mode 100644 index bf5defdd..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartReloadConfig.java +++ /dev/null @@ -1,45 +0,0 @@ -package net.lab1024.smartadmin.config; - -import net.lab1024.smartadmin.common.reload.SmartReloadManager; -import net.lab1024.smartadmin.common.reload.interfaces.SmartReloadThreadLogger; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/3/28 0028 下午 20:15 - * @since JDK1.8 - */ -@Slf4j -@Configuration -public class SmartReloadConfig { - - @Value("${smart-reload.thread-count}") - private Integer threadCount; - - @Bean - public SmartReloadManager initSmartReloadManager() { - /** - * 创建 Reload Manager 调度器 - */ - SmartReloadManager smartReloadManager = new SmartReloadManager(new SmartReloadThreadLogger() { - @Override - public void error(String string) { - log.error(string); - } - - @Override - public void error(String string, Throwable e) { - log.error(string, e); - } - }, threadCount); - return smartReloadManager; - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartRestTemplateConfig.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartRestTemplateConfig.java deleted file mode 100644 index 70d9624c..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartRestTemplateConfig.java +++ /dev/null @@ -1,109 +0,0 @@ -package net.lab1024.smartadmin.config; - -import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; -import org.apache.http.client.HttpClient; -import org.apache.http.client.config.RequestConfig; -import org.apache.http.config.Registry; -import org.apache.http.config.RegistryBuilder; -import org.apache.http.conn.socket.ConnectionSocketFactory; -import org.apache.http.conn.socket.PlainConnectionSocketFactory; -import org.apache.http.conn.ssl.SSLConnectionSocketFactory; -import org.apache.http.impl.client.HttpClientBuilder; -import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.MediaType; -import org.springframework.http.client.ClientHttpRequestFactory; -import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; -import org.springframework.http.converter.FormHttpMessageConverter; -import org.springframework.http.converter.HttpMessageConverter; -import org.springframework.http.converter.StringHttpMessageConverter; -import org.springframework.web.client.RestTemplate; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.List; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 - */ -@Configuration -public class SmartRestTemplateConfig { - - - @Value("${http.pool.max-total}") - private Integer maxTotal; - @Value("${http.pool.default-max-per-route}") - private Integer defaultMaxPerRoute; - @Value("${http.pool.socket-timeout}") - private Integer socketTimeout; - @Value("${http.pool.connect-timeout}") - private Integer connectTimeout; - @Value("${http.pool.connection-request-timeout}") - private Integer connectionRequestTimeout; - - - @Bean - public RestTemplate restTemplate(ClientHttpRequestFactory factory) { - return new RestTemplate(factory); - } - - @Bean - public ClientHttpRequestFactory httpRequestFactory() { - HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient()); - return factory; - } - - /** - * fastJsonRestTemplate - * - * @return - */ - @Bean(name = "fastJsonRestTemplate") - public RestTemplate fastJsonRestTemplate() { - RestTemplate restTemplate = new RestTemplate(httpRequestFactory()); - - HttpMessageConverter converter = new StringHttpMessageConverter(Charset.forName("UTF-8")); - - FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); - List fastMediaTypes = new ArrayList<>(); - fastMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED); - fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); - fastConverter.setSupportedMediaTypes(fastMediaTypes); - List> converters = restTemplate.getMessageConverters(); - converters.add(1,converter); - converters.add(fastConverter); - return restTemplate; - } - - - @Bean - public HttpClient httpClient() { - Registry registry = RegistryBuilder.create() - .register("http", PlainConnectionSocketFactory.getSocketFactory()) - .register("https", SSLConnectionSocketFactory.getSocketFactory()) - .build(); - PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry); - connectionManager.setMaxTotal(maxTotal); - connectionManager.setDefaultMaxPerRoute(defaultMaxPerRoute); - - RequestConfig requestConfig = RequestConfig.custom() - .setSocketTimeout(socketTimeout) - .setConnectTimeout(connectTimeout) - .setConnectionRequestTimeout(connectionRequestTimeout) - .build(); - return HttpClientBuilder.create() - .setDefaultRequestConfig(requestConfig) - .setConnectionManager(connectionManager) - .build(); - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartSwaggerApiModelEnumConfig.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartSwaggerApiModelEnumConfig.java deleted file mode 100644 index 93e45791..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartSwaggerApiModelEnumConfig.java +++ /dev/null @@ -1,29 +0,0 @@ -package net.lab1024.smartadmin.config; - -import net.lab1024.smartadmin.common.swagger.SmartSwaggerApiModelEnumPlugin; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; -import org.springframework.core.annotation.Order; -import springfox.documentation.swagger.common.SwaggerPluginSupport; - -/** - * [ 对于枚举类进行swagger注解,与前端的vue-enum相匹配 ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/8/9 0009 上午 9:46 - * @since JDK1.8 - */ -@Configuration -@Profile({"dev", "sit", "pre", "prod"}) -public class SmartSwaggerApiModelEnumConfig { - - @Bean - @Order(SwaggerPluginSupport.SWAGGER_PLUGIN_ORDER + 1) - public SmartSwaggerApiModelEnumPlugin swaggerEnum(){ - return new SmartSwaggerApiModelEnumPlugin(); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartSwaggerDynamicGroupConfig.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartSwaggerDynamicGroupConfig.java deleted file mode 100644 index aad7b175..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartSwaggerDynamicGroupConfig.java +++ /dev/null @@ -1,236 +0,0 @@ -package net.lab1024.smartadmin.config; - -import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; -import com.google.common.base.Optional; -import com.google.common.base.Predicate; -import com.google.common.base.Predicates; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import io.swagger.annotations.Api; -import lombok.extern.slf4j.Slf4j; -import net.lab1024.smartadmin.constant.SwaggerTagConst; -import net.lab1024.smartadmin.interceptor.SmartAuthenticationInterceptor; -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.config.BeanDefinition; -import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; -import org.springframework.beans.factory.support.BeanDefinitionBuilder; -import org.springframework.beans.factory.support.BeanDefinitionRegistry; -import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor; -import org.springframework.context.EnvironmentAware; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; -import org.springframework.core.env.Environment; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; -import springfox.documentation.RequestHandler; -import springfox.documentation.builders.ApiInfoBuilder; -import springfox.documentation.builders.ParameterBuilder; -import springfox.documentation.builders.PathSelectors; -import springfox.documentation.builders.RequestHandlerSelectors; -import springfox.documentation.schema.ModelRef; -import springfox.documentation.service.*; -import springfox.documentation.spi.DocumentationType; -import springfox.documentation.spi.service.contexts.SecurityContext; -import springfox.documentation.spring.web.plugins.Docket; -import springfox.documentation.swagger2.annotations.EnableSwagger2; - -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; - -/** - * [ 根据SwaggerTagConst内部类动态生成Swagger group ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/8/7 0007 下午 19:20 - * @since JDK1.8 - */ -@Slf4j -@EnableSwagger2 -@EnableKnife4j -@Configuration -@Profile({"dev", "sit", "pre", "prod"}) -public class SmartSwaggerDynamicGroupConfig implements EnvironmentAware, BeanDefinitionRegistryPostProcessor { - - /** - * 分组名称 - */ - private String apiGroupName; - - /** - * 文档标题 - */ - private String title; - - /** - * 文档描述 - */ - private String description; - - /** - * api版本 - */ - private String version; - - /** - * service url - */ - private String serviceUrl; - - /** - * controller 包路径 - */ - private String packAge; - - private int groupIndex = 0; - - private String groupName = "default"; - - private final List groupList = Lists.newArrayList(); - - private final Map> groupMap = Maps.newHashMap(); - - @Override - public void setEnvironment(Environment environment) { - this.apiGroupName = environment.getProperty("swagger.apiGroupName"); - this.title = environment.getProperty("swagger.title"); - this.description = environment.getProperty("swagger.description"); - this.version = environment.getProperty("swagger.version"); - this.serviceUrl = environment.getProperty("swagger.serviceUrl"); - this.packAge = environment.getProperty("swagger.packAge"); - } - - @Override - public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException { - this.groupBuild(); - for (Map.Entry> entry : groupMap.entrySet()) { - String group = entry.getKey(); - BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(Docket.class, this::baseDocket); - BeanDefinition beanDefinition = builder.getRawBeanDefinition(); - registry.registerBeanDefinition(group + "Api", beanDefinition); - } - } - - private void groupBuild() { - Class clazz = SwaggerTagConst.class; - Class[] innerClazz = clazz.getDeclaredClasses(); - for (Class cls : innerClazz) { - String group = cls.getSimpleName(); - List apiTags = Lists.newArrayList(); - Field[] fields = cls.getDeclaredFields(); - for (Field field : fields) { - boolean isFinal = Modifier.isFinal(field.getModifiers()); - if (isFinal) { - try { - apiTags.add(field.get(null).toString()); - } catch (Exception e) { - log.error("", e); - } - } - } - groupList.add(group); - groupMap.put(group, apiTags); - } - } - - private Docket baseDocket() { - // 配置全局参数 token - ParameterBuilder tokenPar = new ParameterBuilder(); - Parameter parameter = tokenPar.name(SmartAuthenticationInterceptor.TOKEN_NAME) - .description("token") - .modelRef(new ModelRef("string")) - .parameterType("header") - .defaultValue("") - .required(false) - .build(); - - // 请求类型过滤规则 - Predicate controllerPredicate = getControllerPredicate(); - // controller 包路径 - Predicate controllerPackage = RequestHandlerSelectors.basePackage(packAge); - return new Docket(DocumentationType.SWAGGER_2) - .groupName(groupName) - .forCodeGeneration(true) - .select() - .apis(controllerPackage) - .apis(controllerPredicate) - .paths(PathSelectors.any()) - .build() - .apiInfo(this.serviceApiInfo()) - .securitySchemes(securitySchemes()) - .securityContexts(securityContexts()) - .globalOperationParameters(Lists.newArrayList(parameter)); - } - - private List securitySchemes() { - List apiKeyList = new ArrayList<>(); - apiKeyList.add(new ApiKey("x-access-token", "x-access-token", "header")); - return apiKeyList; - } - - private List securityContexts() { - List securityContexts = new ArrayList<>(); - securityContexts.add( - SecurityContext.builder() - .securityReferences(defaultAuth()) - .forPaths(PathSelectors.any()) - .build()); - return securityContexts; - } - - List defaultAuth() { - AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); - AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; - authorizationScopes[0] = authorizationScope; - List securityReferences = new ArrayList<>(); - securityReferences.add(new SecurityReference("x-access-token", authorizationScopes)); - return securityReferences; - } - - private Predicate getControllerPredicate() { - groupName = groupList.get(groupIndex); - List apiTags = groupMap.get(groupName); - Predicate methodPredicate = (input) -> { - Api api = null; - Optional apiOptional = input.findControllerAnnotation(Api.class); - if (apiOptional.isPresent()) { - api = apiOptional.get(); - } - List tags = Arrays.asList(api.tags()); - if (api != null && apiTags.containsAll(tags)) { - return true; - } - return false; - }; - groupIndex++; - return Predicates.or( - Predicates.and(RequestHandlerSelectors.withClassAnnotation(RestController.class), methodPredicate), - Predicates.and( - RequestHandlerSelectors.withMethodAnnotation(ResponseBody.class), methodPredicate) - ); - } - - private ApiInfo serviceApiInfo() { - return new ApiInfoBuilder() - .title(title) - .description(description) - .version(version) - .license("Apache License Version 2.0") - .contact(new Contact("1024创新实验室", "http://www.1024lab.net", "")) - .termsOfServiceUrl(serviceUrl) - .build(); - } - - @Override - public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException { - - } - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartWebSocketConfig.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartWebSocketConfig.java deleted file mode 100644 index f431fdac..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartWebSocketConfig.java +++ /dev/null @@ -1,25 +0,0 @@ -package net.lab1024.smartadmin.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.socket.server.standard.ServerEndpointExporter; - -/** - * [ WebSocketConfig ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/7/10 0010 下午 16:07 - * @since JDK1.8 - */ -@Configuration -public class SmartWebSocketConfig { - - @Bean - public ServerEndpointExporter serverEndpointExporter() { - return new ServerEndpointExporter(); - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SystemEnvironmentCondition.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SystemEnvironmentCondition.java deleted file mode 100644 index 63c2a5ed..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SystemEnvironmentCondition.java +++ /dev/null @@ -1,22 +0,0 @@ -package net.lab1024.smartadmin.config; -import net.lab1024.smartadmin.constant.SystemEnvironmentEnum; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Condition; -import org.springframework.context.annotation.ConditionContext; -import org.springframework.core.type.AnnotatedTypeMetadata; -/** - * 是否是正式环境 - * - * @author listen - * @date 2019/08/27 08:56 - */ -public class SystemEnvironmentCondition implements Condition { - - @Value("${spring.profiles.active}") - private String systemEnvironment; - - @Override - public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) { - return ! SystemEnvironmentEnum.PROD.equalsValue(systemEnvironment); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/constant/CommonConst.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/constant/CommonConst.java deleted file mode 100644 index b2c4a63f..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/constant/CommonConst.java +++ /dev/null @@ -1,51 +0,0 @@ -package net.lab1024.smartadmin.constant; - -import com.google.common.collect.ImmutableSet; -import org.apache.commons.collections4.CollectionUtils; - -import java.util.Set; - -/** - * - * [ 通用常量 ] - * - * @version 1.0 - * @since JDK1.8 - * @author yandanyang - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - */ -public class CommonConst { - - - public static final class Page { - public static final Integer SIZE = 10; - } - - public static final class Password { - public static final String DEFAULT = "123456"; - public static final String SALT_FORMAT = "smart_%s_admin"; - } - - public static final String IGNORE_H5_URL_MAPPING = "/h5/api"; - - public static final class CommonCollection { - public static final Set IGNORE_URL = ImmutableSet.of("/swagger", "Excel"); - - public static final Set IGNORE_URL_MAPPING = ImmutableSet.of(IGNORE_H5_URL_MAPPING); - - public static Boolean contain(Set ignores, String uri) { - if (CollectionUtils.isEmpty(ignores)) { - return false; - } - for (String ignoreUrl : ignores) { - if (uri.startsWith(ignoreUrl)) { - return true; - } - } - return false; - } - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/constant/SmartReloadTagConst.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/constant/SmartReloadTagConst.java deleted file mode 100644 index 0799bd66..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/constant/SmartReloadTagConst.java +++ /dev/null @@ -1,16 +0,0 @@ -package net.lab1024.smartadmin.constant; -/** - * smart initDefines 项 常量 - * - * @author listen - * @date 2018/02/10 14:29 - */ -public class SmartReloadTagConst { - - /** - * 系统环境设置 DEMO - */ - public static final String SYSTEM_CONFIG = "system_config"; - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/constant/SwaggerTagConst.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/constant/SwaggerTagConst.java deleted file mode 100644 index 559f9a30..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/constant/SwaggerTagConst.java +++ /dev/null @@ -1,69 +0,0 @@ -package net.lab1024.smartadmin.constant; - -/** - * [] - * - * @author yandanyang - * @version 1.0 - * @since JDK1.8 - */ -public class SwaggerTagConst { - - - public static class Admin { - public static final String MANAGER_SYSTEM_CONFIG = "管理端-系统配置"; - - public static final String MANAGER_USER = "管理端-用户"; - - public static final String MANAGER_USER_LOGIN = "管理端-用户登录"; - - public static final String MANAGER_DEPARTMENT = "管理端-部门"; - - public static final String MANAGER_ROLE = "管理端-角色"; - - public static final String MANAGER_ROLE_USER = "管理端-角色用户"; - - public static final String MANAGER_ROLE_PRIVILEGE = "管理端-角色权限"; - - public static final String MANAGER_SMART_RELOAD = "管理端-smart reload"; - - public static final String MANAGER_ORDER_OPERATE_LOG = "管理端-单据操作日志"; - - public static final String MANAGER_TASK_SCHEDULER = "管理端-任务调度"; - - public static final String MANAGER_USER_LOGIN_LOG = "管理端-用户登录日志"; - - public static final String MANAGER_USER_OPERATE_LOG = "管理端-用户操作日志"; - - public static final String MANAGER_DATA_SCOPE = "管理端-数据范围"; - - public static final String MANAGER_JOB = "管理端-岗位"; - - public static final String MANAGER_NOTICE = "管理端-系统通知"; - - public static final String MANAGER_FILE = "通用-文件服务"; - - public static final String MANAGER_PRIVILEGE = "通用-权限"; - - public static final String MANAGER_EMAIL = "通用-邮件发送"; - - public static final String MANAGER_HEART_BEAT = "通用-心跳服务"; - } - - /** - * 自定义分组2 - */ - public static class Group2 { - - - } - - /** - * 自定义分组2 - */ - public static class Group3 { - - } - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/constant/SystemEnvironmentEnum.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/constant/SystemEnvironmentEnum.java deleted file mode 100644 index e8d0fd75..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/constant/SystemEnvironmentEnum.java +++ /dev/null @@ -1,67 +0,0 @@ -package net.lab1024.smartadmin.constant; - -import net.lab1024.smartadmin.common.domain.BaseEnum; - -/** - * 系统环境枚举类 - * - * @author listen - * @date 2019年4月11日 17:34:59 - */ -public enum SystemEnvironmentEnum implements BaseEnum { - - - /** - * dev - */ - DEV("dev", "开发环境"), - - /** - * sit - */ - SIT("sit", "测试环境"), - - /** - * pre - */ - PRE("pre", "预发布环境"), - - /** - * prod - */ - PROD("prod", "生产环境"); - - - public static final String DEV_ENV = "dev"; - - - private String value; - - private String desc; - - SystemEnvironmentEnum(String value, String desc) { - this.value = value; - this.desc = desc; - } - - /** - * 获取定义枚举value值 - * - * @return Integer - */ - @Override - public String getValue() { - return value; - } - - /** - * 获取枚举类的说明 - * - * @return String - */ - @Override - public String getDesc() { - return desc; - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/handler/SmartGlobalExceptionHandler.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/handler/SmartGlobalExceptionHandler.java deleted file mode 100644 index dabd6fd9..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/handler/SmartGlobalExceptionHandler.java +++ /dev/null @@ -1,73 +0,0 @@ -package net.lab1024.smartadmin.handler; - -import net.lab1024.smartadmin.common.constant.ResponseCodeConst; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.common.exception.SmartBusinessException; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.TypeMismatchException; -import org.springframework.http.converter.HttpMessageNotReadableException; -import org.springframework.validation.FieldError; -import org.springframework.web.HttpRequestMethodNotSupportedException; -import org.springframework.web.bind.MethodArgumentNotValidException; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.util.List; -import java.util.stream.Collectors; - -/** - * [ 全局异常拦截 ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 - */ -@Slf4j -@ControllerAdvice -public class SmartGlobalExceptionHandler { - - /** - * 添加全局异常处理流程 - * - * @param e - * @return - * @throws Exception - */ - @ResponseBody - @ExceptionHandler(Exception.class) - public ResponseDTO exceptionHandler(Exception e) { - log.error("error:", e); - - // http 请求方式错误 - if (e instanceof HttpRequestMethodNotSupportedException) { - return ResponseDTO.wrap(ResponseCodeConst.REQUEST_METHOD_ERROR); - } - - // 参数类型错误 - if (e instanceof TypeMismatchException) { - return ResponseDTO.wrap(ResponseCodeConst.ERROR_PARAM); - } - - // json 格式错误 - if (e instanceof HttpMessageNotReadableException) { - return ResponseDTO.wrap(ResponseCodeConst.JSON_FORMAT_ERROR); - } - - // 参数校验未通过 - if (e instanceof MethodArgumentNotValidException) { - List fieldErrors = ((MethodArgumentNotValidException) e).getBindingResult().getFieldErrors(); - List msgList = fieldErrors.stream().map(FieldError :: getDefaultMessage).collect(Collectors.toList()); - return ResponseDTO.wrap(ResponseCodeConst.ERROR_PARAM, String.join(",", msgList)); - } - - if (e instanceof SmartBusinessException) { - return ResponseDTO.wrap(ResponseCodeConst.SYSTEM_ERROR); - } - - return ResponseDTO.wrap(ResponseCodeConst.SYSTEM_ERROR); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/handler/SmartOperateLogAspect.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/handler/SmartOperateLogAspect.java deleted file mode 100644 index 0dd49cd2..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/handler/SmartOperateLogAspect.java +++ /dev/null @@ -1,167 +0,0 @@ -package net.lab1024.smartadmin.handler; - -import com.alibaba.fastjson.JSON; -import net.lab1024.smartadmin.common.anno.OperateLog; -import net.lab1024.smartadmin.common.constant.JudgeEnum; -import net.lab1024.smartadmin.module.business.log.LogService; -import net.lab1024.smartadmin.module.business.log.useroperatelog.domain.UserOperateLogEntity; -import net.lab1024.smartadmin.module.system.login.domain.RequestTokenBO; -import net.lab1024.smartadmin.util.SmartRequestTokenUtil; -import net.lab1024.smartadmin.util.SmartStringUtil; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import lombok.extern.slf4j.Slf4j; -import org.aspectj.lang.JoinPoint; -import org.aspectj.lang.Signature; -import org.aspectj.lang.annotation.AfterReturning; -import org.aspectj.lang.annotation.AfterThrowing; -import org.aspectj.lang.annotation.Aspect; -import org.aspectj.lang.annotation.Pointcut; -import org.aspectj.lang.reflect.MethodSignature; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.annotation.AnnotationUtils; -import org.springframework.stereotype.Component; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; - -import javax.servlet.http.HttpServletRequest; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.lang.reflect.Method; -/** - * [ 操作日志记录处理,对所有OperateLog注解的Controller进行操作日志监控 ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 - */ -@Slf4j -@Aspect -@Component -public class SmartOperateLogAspect { - - @Autowired - private LogService logService; - - @Pointcut("execution(* net.lab1024.smartadmin.module..*Controller.*(..)))") - public void logPointCut() { - } - - @AfterReturning(pointcut = "logPointCut()") - public void doAfterReturning(JoinPoint joinPoint) { - handleLog(joinPoint, null); - } - - @AfterThrowing(value = "logPointCut()", throwing = "e") - public void doAfterThrowing(JoinPoint joinPoint, Exception e) { - handleLog(joinPoint, e); - } - - protected void handleLog(final JoinPoint joinPoint, final Exception e) { - try { - HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); - OperateLog operateLog = this.getAnnotationLog(joinPoint); - if (operateLog == null) { - return; - } - RequestTokenBO requestToken = SmartRequestTokenUtil.getRequestUser(); - if (requestToken == null) { - return; - } - // 设置方法名称 - String className = joinPoint.getTarget().getClass().getName(); - String methodName = joinPoint.getSignature().getName(); - String operateMethod = className + "." + methodName; - Object[] args = joinPoint.getArgs(); - StringBuilder sb = new StringBuilder(); - for (Object obj : args) { - sb.append(obj.getClass().getSimpleName()); - sb.append("["); - sb.append(JSON.toJSONString(obj)); - sb.append("]"); - } - String params = sb.toString(); - String failReason = null; - Integer result = JudgeEnum.YES.getValue(); - if (e != null) { - result = JudgeEnum.NO.getValue(); - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw, true); - e.printStackTrace(pw); - failReason = sw.toString(); - pw.flush(); - pw.close(); - sw.flush(); - sw.close(); - } - UserOperateLogEntity operateLogEntity = - UserOperateLogEntity.builder().userId(requestToken.getRequestUserId()).userName(requestToken.getEmployeeBO().getActualName()).url(request.getRequestURI()).method(operateMethod).param(params).failReason(failReason).result(result).build(); - ApiOperation apiOperation = this.getApiOperation(joinPoint); - if (apiOperation != null) { - operateLogEntity.setContent(apiOperation.value()); - } - Api api = this.getApi(joinPoint); - if (api != null) { - String[] tags = api.tags(); - operateLogEntity.setModule(SmartStringUtil.join(tags, ",")); - } - logService.addLog(operateLogEntity); - } catch (Exception exp) { - log.error("保存操作日志异常:{}", exp.getMessage()); - exp.printStackTrace(); - } - } - - private OperateLog getAnnotationLog(JoinPoint joinPoint) throws Exception { - Signature signature = joinPoint.getSignature(); - MethodSignature methodSignature = (MethodSignature) signature; - Method method = methodSignature.getMethod(); - OperateLog classAnnotation = AnnotationUtils.findAnnotation(method.getDeclaringClass(), OperateLog.class); - - if (method != null) { - return classAnnotation; - } - return null; - } - - /** - * swagger API - * - * @param joinPoint - * @return - * @throws Exception - */ - private Api getApi(JoinPoint joinPoint) { - Signature signature = joinPoint.getSignature(); - MethodSignature methodSignature = (MethodSignature) signature; - Method method = methodSignature.getMethod(); - Api classAnnotation = AnnotationUtils.findAnnotation(method.getDeclaringClass(), Api.class); - - if (method != null) { - return classAnnotation; - } - return null; - } - - /** - * swagger ApiOperation - * - * @param joinPoint - * @return - * @throws Exception - */ - private ApiOperation getApiOperation(JoinPoint joinPoint) { - Signature signature = joinPoint.getSignature(); - MethodSignature methodSignature = (MethodSignature) signature; - Method method = methodSignature.getMethod(); - - if (method != null) { - return method.getAnnotation(ApiOperation.class); - } - return null; - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/interceptor/SmartAuthenticationInterceptor.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/interceptor/SmartAuthenticationInterceptor.java deleted file mode 100644 index 30f299f9..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/interceptor/SmartAuthenticationInterceptor.java +++ /dev/null @@ -1,158 +0,0 @@ -package net.lab1024.smartadmin.interceptor; - -import com.alibaba.fastjson.JSONObject; -import net.lab1024.smartadmin.common.anno.NoNeedLogin; -import net.lab1024.smartadmin.common.anno.NoValidPrivilege; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.constant.CommonConst; -import net.lab1024.smartadmin.module.system.login.LoginResponseCodeConst; -import net.lab1024.smartadmin.module.system.login.LoginTokenService; -import net.lab1024.smartadmin.module.system.login.domain.RequestTokenBO; -import net.lab1024.smartadmin.module.system.privilege.service.PrivilegeEmployeeService; -import net.lab1024.smartadmin.util.SmartRequestTokenUtil; -import net.lab1024.smartadmin.util.SmartStringUtil; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; -import org.springframework.web.method.HandlerMethod; -import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.lang.reflect.Method; -import java.util.List; - -/** - * [ 登录拦截器 ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 - */ -@Component -public class SmartAuthenticationInterceptor extends HandlerInterceptorAdapter { - - public static final String TOKEN_NAME = "x-access-token"; - - @Value("${access-control-allow-origin}") - private String accessControlAllowOrigin; - - @Autowired - private LoginTokenService loginTokenService; - - @Autowired - private PrivilegeEmployeeService privilegeEmployeeService; - - /** - * 拦截服务器端响应处理ajax请求返回结果 - * - * @param request - * @param response - * @param handler - * @return - * @throws Exception - */ - @Override - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { - //跨域设置 - this.crossDomainConfig(response); - boolean isHandlerMethod = handler instanceof HandlerMethod; - if (! isHandlerMethod) { - return true; - } - - //不需要登录的注解 - Boolean isNoNeedLogin = ((HandlerMethod) handler).getMethodAnnotation(NoNeedLogin.class) != null; - if (isNoNeedLogin) { - return true; - } - - //放行的Uri前缀 - String uri = request.getRequestURI(); - String contextPath = request.getContextPath(); - String target = uri.replaceFirst(contextPath, ""); - if (CommonConst.CommonCollection.contain(CommonConst.CommonCollection.IGNORE_URL, target)) { - return true; - } - - //需要做token校验, 消息头的token优先于请求query参数的token - String xHeaderToken = request.getHeader(TOKEN_NAME); - String xRequestToken = request.getParameter(TOKEN_NAME); - String xAccessToken = null != xHeaderToken ? xHeaderToken : xRequestToken; - if (null == xAccessToken) { - this.outputResult(response, LoginResponseCodeConst.LOGIN_ERROR); - return false; - } - - //根据token获取登录用户 - RequestTokenBO requestToken = loginTokenService.getEmployeeTokenInfo(xAccessToken); - if (null == requestToken) { - this.outputResult(response, LoginResponseCodeConst.LOGIN_ERROR); - return false; - } - - //判断接口权限 - String methodName = ((HandlerMethod) handler).getMethod().getName(); - String className = ((HandlerMethod) handler).getBeanType().getName(); - List list = SmartStringUtil.splitConvertToList(className, "\\."); - String controllerName = list.get(list.size() - 1); - Method m = ((HandlerMethod) handler).getMethod(); - Class cls = ((HandlerMethod) handler).getBeanType(); - boolean isClzAnnotation = cls.isAnnotationPresent(NoValidPrivilege.class); - boolean isMethodAnnotation = m.isAnnotationPresent(NoValidPrivilege.class); - NoValidPrivilege noValidPrivilege = null; - if (isClzAnnotation) { - noValidPrivilege = cls.getAnnotation(NoValidPrivilege.class); - } else if (isMethodAnnotation) { - noValidPrivilege = m.getAnnotation(NoValidPrivilege.class); - } - //不需验证权限 - if (noValidPrivilege != null) { - SmartRequestTokenUtil.setUser(request, requestToken); - return true; - } - //需要验证权限 - Boolean privilegeValidPass = privilegeEmployeeService.checkEmployeeHavePrivilege(requestToken, controllerName, methodName); - if (! privilegeValidPass) { - this.outputResult(response, LoginResponseCodeConst.NOT_HAVE_PRIVILEGES); - return false; - } - SmartRequestTokenUtil.setUser(request, requestToken); - return true; - } - - /** - * 配置跨域 - * - * @param response - */ - private void crossDomainConfig(HttpServletResponse response) { - response.setHeader("Access-Control-Allow-Origin", accessControlAllowOrigin); - response.setHeader("Access-Control-Allow-Credentials", "true"); - response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE, PATCH"); - response.setHeader("Access-Control-Expose-Headers", "*"); - response.setHeader("Access-Control-Allow-Headers", "Authentication,Origin, X-Requested-With, Content-Type, " + "Accept, x-access-token"); - response.setHeader("Cache-Control", "no-cache"); - response.setHeader("Pragma", "no-cache"); - response.setHeader("Expires ", "-1"); - } - - /** - * 错误输出 - * - * @param response - * @param responseCodeConst - * @throws IOException - */ - private void outputResult(HttpServletResponse response, LoginResponseCodeConst responseCodeConst) throws IOException { - ResponseDTO wrap = ResponseDTO.wrap(responseCodeConst); - String msg = JSONObject.toJSONString(wrap); - response.setContentType("application/json;charset=UTF-8"); - response.getWriter().write(msg); - response.flushBuffer(); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/listener/SmartAdminStartupRunner.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/listener/SmartAdminStartupRunner.java deleted file mode 100644 index 9205fa5b..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/listener/SmartAdminStartupRunner.java +++ /dev/null @@ -1,22 +0,0 @@ -package net.lab1024.smartadmin.listener; - -import net.lab1024.smartadmin.common.constant.ResponseCodeConst; -import org.springframework.boot.CommandLineRunner; -import org.springframework.stereotype.Component; - -/** - * 应用启动以后检测code码 - * - * @author zhuo - * @version 1.0 - * @since JDK1.8 - */ - -@Component -public class SmartAdminStartupRunner implements CommandLineRunner { - - @Override - public void run(String... args) { - ResponseCodeConst.init(); - } -} \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/EmailController.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/EmailController.java deleted file mode 100644 index b7e350bd..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/EmailController.java +++ /dev/null @@ -1,81 +0,0 @@ -package net.lab1024.smartadmin.module.business.email; - -import net.lab1024.smartadmin.common.anno.NoValidPrivilege; -import net.lab1024.smartadmin.common.anno.OperateLog; -import net.lab1024.smartadmin.common.domain.PageResultDTO; -import net.lab1024.smartadmin.constant.SwaggerTagConst; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.module.business.email.domain.dto.EmailDTO; -import net.lab1024.smartadmin.module.business.email.domain.dto.EmailQueryDTO; -import net.lab1024.smartadmin.module.business.email.domain.dto.EmailVO; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date 2019-05-13 17:10:16 - * @since JDK1.8 - */ -@RestController -@OperateLog -@Api(tags = {SwaggerTagConst.Admin.MANAGER_EMAIL}) -public class EmailController { - - @Autowired - private EmailService emailService; - - @ApiOperation(value = "分页查询",notes = "@author yandanyang") - @PostMapping("/email/page/query") - @NoValidPrivilege - public ResponseDTO> queryByPage(@RequestBody @Validated EmailQueryDTO queryDTO) { - return emailService.queryByPage(queryDTO); - } - - @ApiOperation(value = "添加",notes = "@author yandanyang") - @PostMapping("/email/add") - @NoValidPrivilege - public ResponseDTO add(@RequestBody @Valid EmailDTO addTO){ - return emailService.add(addTO); - } - - @ApiOperation(value="修改",notes = "@author yandanyang") - @PostMapping("/email/update") - @NoValidPrivilege - public ResponseDTO update(@RequestBody @Valid EmailDTO updateDTO){ - return emailService.update(updateDTO); - } - - - @ApiOperation(value="删除",notes = "@author yandanyang") - @GetMapping("/email/delete/{id}") - @NoValidPrivilege - public ResponseDTO delete(@PathVariable("id") Long id){ - return emailService.delete(id); - } - - - @ApiOperation(value="详情",notes = "@author yandanyang") - @GetMapping("/email/detail/{id}") - @NoValidPrivilege - public ResponseDTO detail(@PathVariable("id") Long id){ - return emailService.detail(id); - } - - - @ApiOperation(value="发送",notes = "@author yandanyang") - @GetMapping("/email/send/{id}") - @NoValidPrivilege - public ResponseDTO send(@PathVariable("id") Long id){ - return emailService.send(id); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/EmailDao.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/EmailDao.java deleted file mode 100644 index 76a7dea5..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/EmailDao.java +++ /dev/null @@ -1,47 +0,0 @@ -package net.lab1024.smartadmin.module.business.email; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import net.lab1024.smartadmin.module.business.email.domain.dto.EmailQueryDTO; -import net.lab1024.smartadmin.module.business.email.domain.entity.EmailEntity; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; -import org.springframework.stereotype.Component; - -import java.util.List; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019-05-13 17:10:16 - * @since JDK1.8 - */ -@Mapper -@Component -public interface EmailDao extends BaseMapper { - - /** - * 分页查询 - * @param queryDTO - * @return EmailEntity - */ - List queryByPage(Page page, @Param("queryDTO") EmailQueryDTO queryDTO); - - /** - * 根据id删除 - * @param id - * @return - */ - void deleteById(@Param("id") Long id); - - /** - * 批量删除 - * @param idList - * @return - */ - void deleteByIds(@Param("idList") List idList); -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/EmailSendStatusEnum.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/EmailSendStatusEnum.java deleted file mode 100644 index a6cf0c44..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/EmailSendStatusEnum.java +++ /dev/null @@ -1,37 +0,0 @@ -package net.lab1024.smartadmin.module.business.email; - - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/28 0028 下午 15:37 - * @since JDK1.8 - */ -public enum EmailSendStatusEnum { - - NOT_SEND(0,"未发送"), - - SEND(1,"已发送"); - - private Integer type; - private String desc; - - EmailSendStatusEnum(Integer type, String desc) { - this.type = type; - this.desc = desc; - } - - public Integer getType() { - return type; - } - - public String getDesc() { - return desc; - } - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/EmailService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/EmailService.java deleted file mode 100644 index 6b7e5b7d..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/EmailService.java +++ /dev/null @@ -1,122 +0,0 @@ -package net.lab1024.smartadmin.module.business.email; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import net.lab1024.smartadmin.common.constant.ResponseCodeConst; -import net.lab1024.smartadmin.common.domain.PageResultDTO; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.module.business.email.domain.dto.EmailConfigDTO; -import net.lab1024.smartadmin.module.business.email.domain.dto.EmailDTO; -import net.lab1024.smartadmin.module.business.email.domain.dto.EmailQueryDTO; -import net.lab1024.smartadmin.module.business.email.domain.dto.EmailVO; -import net.lab1024.smartadmin.module.business.email.domain.entity.EmailEntity; -import net.lab1024.smartadmin.module.system.systemconfig.SystemConfigService; -import net.lab1024.smartadmin.module.system.systemconfig.constant.SystemConfigEnum; -import net.lab1024.smartadmin.util.SmartBeanUtil; -import net.lab1024.smartadmin.util.SmartPageUtil; -import net.lab1024.smartadmin.util.SmartSendMailUtil; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date 2019-05-13 17:10:16 - * @since JDK1.8 - */ -@Service -public class EmailService { - - @Autowired - private EmailDao emailDao; - - @Autowired - private SystemConfigService systemConfigService; - - /** - * @author yandanyang - * @description 分页查询 - * @date 2019-05-13 17:10:16 - */ - public ResponseDTO> queryByPage(EmailQueryDTO queryDTO) { - Page page = SmartPageUtil.convert2QueryPage(queryDTO); - List entities = emailDao.queryByPage(page, queryDTO); - List dtoList = SmartBeanUtil.copyList(entities, EmailVO.class); - page.setRecords(dtoList); - PageResultDTO pageResultDTO = SmartPageUtil.convert2PageResult(page); - return ResponseDTO.succData(pageResultDTO); - } - - /** - * @author yandanyang - * @description 添加 - * @date 2019-05-13 17:10:16 - */ - public ResponseDTO add(EmailDTO addDTO) { - EmailEntity entity = SmartBeanUtil.copy(addDTO, EmailEntity.class); - emailDao.insert(entity); - return ResponseDTO.succData(entity.getId()); - } - - /** - * @author yandanyang - * @description 编辑 - * @date 2019-05-13 17:10:16 - */ - @Transactional(rollbackFor = Exception.class) - public ResponseDTO update(EmailDTO updateDTO) { - EmailEntity entity = SmartBeanUtil.copy(updateDTO, EmailEntity.class); - emailDao.updateById(entity); - return ResponseDTO.succData(entity.getId()); - } - - /** - * @author yandanyang - * @description 删除 - * @date 2019-05-13 17:10:16 - */ - @Transactional(rollbackFor = Exception.class) - public ResponseDTO delete(Long id) { - emailDao.deleteById(id); - return ResponseDTO.succ(); - } - - /** - * @author yandanyang - * @description 根据ID查询 - * @date 2019-05-13 17:10:16 - */ - public ResponseDTO detail(Long id) { - EmailEntity entity = emailDao.selectById(id); - EmailVO dto = SmartBeanUtil.copy(entity, EmailVO.class); - return ResponseDTO.succData(dto); - } - - /** - * 发送某个已创建的邮件 - * - * @param id - * @return - */ - public ResponseDTO send(Long id) { - EmailEntity entity = emailDao.selectById(id); - EmailConfigDTO emailConfig = systemConfigService.selectByKey2Obj(SystemConfigEnum.Key.EMAIL_CONFIG.name(), EmailConfigDTO.class); - String toEmails = entity.getToEmails(); - if (StringUtils.isEmpty(toEmails)) { - return ResponseDTO.wrap(ResponseCodeConst.ERROR_PARAM, "收件人信息为空"); - } - String[] emails = toEmails.split(";"); - SmartSendMailUtil.sendMail(emailConfig.getUsername(), emailConfig.getPassword(), emailConfig.getUsername(), emails, "", emailConfig.getSmtpHost(), entity.getTitle(), entity.getContent()); - entity.setSendStatus(EmailSendStatusEnum.SEND.getType()); - emailDao.updateById(entity); - return ResponseDTO.succ(); - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/dto/EmailConfigDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/dto/EmailConfigDTO.java deleted file mode 100644 index 87f0e413..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/dto/EmailConfigDTO.java +++ /dev/null @@ -1,30 +0,0 @@ -package net.lab1024.smartadmin.module.business.email.domain.dto; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/5/13 0013 下午 16:52 - * @since JDK1.8 - */ -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class EmailConfigDTO { - - private String smtpHost; - - private String username; - - private String password; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/dto/EmailDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/dto/EmailDTO.java deleted file mode 100644 index 8300a3f5..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/dto/EmailDTO.java +++ /dev/null @@ -1,44 +0,0 @@ -package net.lab1024.smartadmin.module.business.email.domain.dto; -import lombok.Data; -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; -import io.swagger.annotations.ApiModelProperty; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/3/27 0027 下午 12:27 - * @since JDK1.8 - */ -@Data -public class EmailDTO { - - @ApiModelProperty("主键") - private Long id; - - @ApiModelProperty("标题") - private String title; - - @ApiModelProperty("收件人") - private String toEmails; - - @ApiModelProperty("发送状态 0未发送 1已发送") - private Integer sendStatus; - - @ApiModelProperty("邮件内容") - private String content; - - @ApiModelProperty("创建时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private Date createTime; - - @ApiModelProperty("更新时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private Date updateTime; - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/dto/EmailQueryDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/dto/EmailQueryDTO.java deleted file mode 100644 index 6768dc4f..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/dto/EmailQueryDTO.java +++ /dev/null @@ -1,35 +0,0 @@ -package net.lab1024.smartadmin.module.business.email.domain.dto; - -import net.lab1024.smartadmin.common.domain.PageParamDTO; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date 2019-05-13 17:10:16 - * @since JDK1.8 - */ -@Data -public class EmailQueryDTO extends PageParamDTO { - - - @ApiModelProperty("开始日期") - private String startDate; - - @ApiModelProperty("结束日期") - private String endDate; - - - @ApiModelProperty("标题") - private String title; - - - @ApiModelProperty("发送状态 0未发送 1已发送") - private Integer sendStatus; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/dto/EmailVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/dto/EmailVO.java deleted file mode 100644 index 4686efad..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/dto/EmailVO.java +++ /dev/null @@ -1,45 +0,0 @@ -package net.lab1024.smartadmin.module.business.email.domain.dto; - -import com.fasterxml.jackson.annotation.JsonFormat; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.Date; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/3/27 0027 下午 12:27 - * @since JDK1.8 - */ -@Data -public class EmailVO { - - @ApiModelProperty("主键") - private Long id; - - @ApiModelProperty("标题") - private String title; - - @ApiModelProperty("收件人") - private String toEmails; - - @ApiModelProperty("发送状态 0未发送 1已发送") - private Integer sendStatus; - - @ApiModelProperty("邮件内容") - private String content; - - @ApiModelProperty("创建时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private Date createTime; - - @ApiModelProperty("更新时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private Date updateTime; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/entity/EmailEntity.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/entity/EmailEntity.java deleted file mode 100644 index d7c0da18..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/entity/EmailEntity.java +++ /dev/null @@ -1,40 +0,0 @@ -package net.lab1024.smartadmin.module.business.email.domain.entity; -import com.baomidou.mybatisplus.annotation.TableName; -import net.lab1024.smartadmin.common.domain.BaseEntity; -import lombok.Data; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019-05-13 17:10:16 - * @since JDK1.8 - */ -@Data -@TableName("t_email") -public class EmailEntity extends BaseEntity { - - /** - * 标题 - */ - private String title; - - /** - * 收件人 - */ - private String toEmails; - - /** - * 发送状态 0未发送 1已发送 - */ - private Integer sendStatus; - - /** - * 邮件内容 - */ - private String content; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/LogService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/LogService.java deleted file mode 100644 index 9aae836c..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/LogService.java +++ /dev/null @@ -1,75 +0,0 @@ -package net.lab1024.smartadmin.module.business.log; - -import net.lab1024.smartadmin.module.business.log.orderoperatelog.OrderOperateLogDao; -import net.lab1024.smartadmin.module.business.log.orderoperatelog.domain.entity.OrderOperateLogEntity; -import net.lab1024.smartadmin.module.business.log.userloginlog.UserLoginLogDao; -import net.lab1024.smartadmin.module.business.log.userloginlog.domain.UserLoginLogEntity; -import net.lab1024.smartadmin.module.business.log.useroperatelog.UserOperateLogDao; -import net.lab1024.smartadmin.module.business.log.useroperatelog.domain.UserOperateLogEntity; -import net.lab1024.smartadmin.util.SmartThreadFactory; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/4 0004 下午 16:19 - * @since JDK1.8 - */ -@Slf4j -@Service -public class LogService { - - private ThreadPoolExecutor threadPoolExecutor; - - @Autowired - private UserLoginLogDao userLoginLogDao; - - @Autowired - private OrderOperateLogDao orderOperateLogDao; - - @Autowired - private UserOperateLogDao userOperateLogDao; - - @PostConstruct - void init() { - if (threadPoolExecutor == null) { - threadPoolExecutor = new ThreadPoolExecutor(1, 1, 10L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(2000), SmartThreadFactory.create("LogAspect")); - } - } - - @PreDestroy - void destroy() { - if (threadPoolExecutor != null) { - threadPoolExecutor.shutdown(); - threadPoolExecutor = null; - } - } - - public void addLog(Object object) { - try { - if (object instanceof UserLoginLogEntity) { - threadPoolExecutor.execute(() -> userLoginLogDao.insert((UserLoginLogEntity) object)); - } - if (object instanceof OrderOperateLogEntity) { - threadPoolExecutor.execute(() -> orderOperateLogDao.insert((OrderOperateLogEntity) object)); - } - if (object instanceof UserOperateLogEntity) { - threadPoolExecutor.execute(() -> userOperateLogDao.insert((UserOperateLogEntity) object)); - } - } catch (Throwable e) { - log.error("userLogAfterAdvice:{}", e); - } - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/OrderOperateLogController.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/OrderOperateLogController.java deleted file mode 100644 index 5f84c7ab..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/OrderOperateLogController.java +++ /dev/null @@ -1,44 +0,0 @@ -package net.lab1024.smartadmin.module.business.log.orderoperatelog; - -import net.lab1024.smartadmin.common.anno.OperateLog; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.constant.SwaggerTagConst; -import net.lab1024.smartadmin.module.business.log.orderoperatelog.constant.OrderOperateLogOrderTypeEnum; -import net.lab1024.smartadmin.module.business.log.orderoperatelog.domain.vo.OrderOperateLogVO; -import net.lab1024.smartadmin.util.SmartStringUtil; -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.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RestController; - -import java.util.List; -import java.util.stream.Collectors; - -/** - * 单据操作记录Controller - * - * @author lidoudou - * @date: 2018/1/31 16:56 - */ - -@Api(tags = {SwaggerTagConst.Admin.MANAGER_ORDER_OPERATE_LOG}) -@OperateLog -@RestController -public class OrderOperateLogController { - - @Autowired - private OrderOperateLogService orderOperateLogService; - - @ApiOperation(value = "查询单据操作日志", notes = "查询单据操作日志") - @GetMapping("/orderOperateLog/list/{orderId}") - @ApiImplicitParams({@ApiImplicitParam(name = "orderId", value = "业务id", paramType = "path"), @ApiImplicitParam(name = "orderType", value = "业务类型" + OrderOperateLogOrderTypeEnum.INFO, paramType - = "query")}) - public ResponseDTO> list(@PathVariable Long orderId, String orderType) { - List orderTypeList = SmartStringUtil.splitConverToIntSet(orderType, ",").stream().collect(Collectors.toList()); - return orderOperateLogService.listOrderOperateLogsByOrderTypeAndOrderId(orderId, orderTypeList); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/OrderOperateLogDao.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/OrderOperateLogDao.java deleted file mode 100644 index a720f5c5..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/OrderOperateLogDao.java +++ /dev/null @@ -1,30 +0,0 @@ -package net.lab1024.smartadmin.module.business.log.orderoperatelog; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import net.lab1024.smartadmin.module.business.log.orderoperatelog.domain.entity.OrderOperateLogEntity; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; -import org.springframework.stereotype.Component; - -import java.util.List; - -/** - *

- * 各种单据操作记录 - * Mapper 接口 - *

- * - * @author anders - * @since 2018-01-09 - */ -@Mapper -@Component -public interface OrderOperateLogDao extends BaseMapper { - - List listOrderOperateLogsByOrderTypeAndOrderId(@Param("orderId") Long orderId, @Param("orderTypeList") List orderTypeList); - - List listOrderOperateLogsByOrderTypeAndOrderIds(@Param("orderIds") List orderIds, @Param("orderTypeList") List orderTypeList); - - void batchInsert(List list); - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/OrderOperateLogService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/OrderOperateLogService.java deleted file mode 100644 index 601b8cef..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/OrderOperateLogService.java +++ /dev/null @@ -1,64 +0,0 @@ -package net.lab1024.smartadmin.module.business.log.orderoperatelog; - -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.module.business.log.orderoperatelog.domain.dto.OrderOperateLogSaveDTO; -import net.lab1024.smartadmin.module.business.log.orderoperatelog.domain.entity.OrderOperateLogEntity; -import net.lab1024.smartadmin.module.business.log.orderoperatelog.domain.vo.OrderOperateLogVO; -import net.lab1024.smartadmin.util.SmartBeanUtil; -import net.lab1024.smartadmin.util.SmartStringUtil; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.stream.Collectors; - -/** - *

- * 各种单据操作记录 - * 服务实现类 - *

- * - * @author anders - * @since 2018-01-09 - */ -@Service -public class OrderOperateLogService { - - @Autowired - private OrderOperateLogDao orderOperateLogDao; - - public void batchSaveOrderOperateLog(List orderOperateLogSaveDTOList) { - List entityList = new ArrayList<>(); - orderOperateLogSaveDTOList.forEach(e -> { - OrderOperateLogEntity orderOperateLogEntity = SmartBeanUtil.copy(e, OrderOperateLogEntity.class); - orderOperateLogEntity.setOperateType(e.getOperateType().getCode()); - if (SmartStringUtil.isNotBlank(e.getOperateContent())) { - orderOperateLogEntity.setOperateContent(e.getOperateContent()); - } else { - orderOperateLogEntity.setOperateContent(e.getOperateType().getMsg()); - } - orderOperateLogEntity.setOperateRemark(e.getOperateRemark()); - orderOperateLogEntity.setExtData(e.getExtData()); - orderOperateLogEntity.setCreateTime(new Date()); - orderOperateLogEntity.setOrderType(e.getOrderType().getType()); - entityList.add(orderOperateLogEntity); - }); - //批量添加 - orderOperateLogDao.batchInsert(entityList); - } - - public ResponseDTO> listOrderOperateLogsByOrderTypeAndOrderId(Long orderId, List orderTypeList) { - List orderOperateLogEntities = orderOperateLogDao.listOrderOperateLogsByOrderTypeAndOrderId(orderId, orderTypeList); - List dtoList = orderOperateLogEntities.stream().map(e -> SmartBeanUtil.copy(e, OrderOperateLogVO.class)).collect(Collectors.toList()); - return ResponseDTO.succData(dtoList); - } - - public ResponseDTO> listOrderOperateLogsByOrderTypeAndOrderIds(List orderIds, List orderTypeList) { - List orderOperateLogEntities = orderOperateLogDao.listOrderOperateLogsByOrderTypeAndOrderIds(orderIds, orderTypeList); - List dtoList = orderOperateLogEntities.stream().map(e -> SmartBeanUtil.copy(e, OrderOperateLogVO.class)).collect(Collectors.toList()); - return ResponseDTO.succData(dtoList); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/constant/OrderOperateLogDefaultEmpEnum.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/constant/OrderOperateLogDefaultEmpEnum.java deleted file mode 100644 index c088322d..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/constant/OrderOperateLogDefaultEmpEnum.java +++ /dev/null @@ -1,37 +0,0 @@ -package net.lab1024.smartadmin.module.business.log.orderoperatelog.constant; - -/** - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 - */ -public enum OrderOperateLogDefaultEmpEnum { - - DEFAULT_EMP(0,"系统"); - - - private Integer empId; - - private String empName; - - OrderOperateLogDefaultEmpEnum(Integer empId,String empName) { - this.empId = empId; - this.empName = empName; - } - - public int getEmpId() { - return empId; - } - - public String getEmpName() { - return empName; - } - - - -} - diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/constant/OrderOperateLogOperateTypeConst.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/constant/OrderOperateLogOperateTypeConst.java deleted file mode 100644 index d5d14b63..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/constant/OrderOperateLogOperateTypeConst.java +++ /dev/null @@ -1,30 +0,0 @@ -package net.lab1024.smartadmin.module.business.log.orderoperatelog.constant; - -import net.lab1024.smartadmin.common.constant.ResponseCodeConst; - -/** - * [ 8001 -8999 ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 - */ -public class OrderOperateLogOperateTypeConst extends ResponseCodeConst { - - - public static final OrderOperateLogOperateTypeConst ADD = new OrderOperateLogOperateTypeConst(8001, "创建并提交"); - - public static final OrderOperateLogOperateTypeConst UPDATE = new OrderOperateLogOperateTypeConst(8002, "修改并提交"); - - public static final OrderOperateLogOperateTypeConst DELETE = new OrderOperateLogOperateTypeConst(8003, "删除"); - - - private OrderOperateLogOperateTypeConst(int code, String msg) { - super(code, msg); - } - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/constant/OrderOperateLogOrderTypeEnum.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/constant/OrderOperateLogOrderTypeEnum.java deleted file mode 100644 index 9674836e..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/constant/OrderOperateLogOrderTypeEnum.java +++ /dev/null @@ -1,51 +0,0 @@ -package net.lab1024.smartadmin.module.business.log.orderoperatelog.constant; - -import java.util.Arrays; -import java.util.Optional; - -/** - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 - */ -public enum OrderOperateLogOrderTypeEnum { - - EXAMPLE(1, "样例"); - - - public static final String INFO = ""; - - private int type; - - private String typeName; - - OrderOperateLogOrderTypeEnum(int type, String typeName) { - this.type = type; - this.typeName = typeName; - } - - public int getType() { - return type; - } - - public String getTypeName() { - return typeName; - } - - public static OrderOperateLogOrderTypeEnum getValueByName(String name) { - OrderOperateLogOrderTypeEnum[] values = OrderOperateLogOrderTypeEnum.values(); - Optional first = Arrays.stream(values).filter(e -> e.getTypeName().equals(name)).findFirst(); - if (!first.isPresent()) { - return null; - } - if (!first.isPresent()) { - return null; - } - OrderOperateLogOrderTypeEnum orderType = first.get(); - return orderType; - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/domain/dto/OrderOperateLogSaveDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/domain/dto/OrderOperateLogSaveDTO.java deleted file mode 100644 index a9861bdc..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/domain/dto/OrderOperateLogSaveDTO.java +++ /dev/null @@ -1,80 +0,0 @@ -package net.lab1024.smartadmin.module.business.log.orderoperatelog.domain.dto; - - -import net.lab1024.smartadmin.module.business.log.orderoperatelog.constant.OrderOperateLogOperateTypeConst; -import net.lab1024.smartadmin.module.business.log.orderoperatelog.constant.OrderOperateLogOrderTypeEnum; -import lombok.Data; - -/** - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 - */ -@Data -public class OrderOperateLogSaveDTO { - - /** - * 各种单据的id - */ - private Long orderId; - - /** - * 单据类型 - */ - private OrderOperateLogOrderTypeEnum orderType; - - /** - * 操作类型 - */ - private OrderOperateLogOperateTypeConst operateType; - - /** - *操作类型 对应的中文 - */ - private String operateContent; - - /** - * 操作备注 - */ - private String operateRemark; - - /** - * 员工id - */ - private Long employeeId; - - /** - * 员工名称 - */ - private String employeeName; - - /** - * 额外信息 - */ - private String extData; - - public OrderOperateLogSaveDTO() { - } - - public OrderOperateLogSaveDTO(Long orderId, OrderOperateLogOrderTypeEnum orderType, OrderOperateLogOperateTypeConst operateType, String - operateRemark, Long employeeId, String employeeName, String extData) { - this.orderId = orderId; - this.orderType = orderType; - this.operateType = operateType; - this.operateRemark = operateRemark; - this.employeeId = employeeId; - this.employeeName = employeeName; - this.extData = extData; - } - - @Override - public String toString() { - return "OrderOperateLogSaveDTO{" + "orderId=" + orderId + ", orderType=" + orderType + ", operateType=" + operateType + ", operateRemark='" - + operateRemark + '\'' + ", employeeId=" + employeeId + ", employeeName='" + employeeName + '\'' + ", extData='" + extData + '\'' + '}'; - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/domain/dto/SupplierOrderOperateVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/domain/dto/SupplierOrderOperateVO.java deleted file mode 100644 index 9633527f..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/domain/dto/SupplierOrderOperateVO.java +++ /dev/null @@ -1,44 +0,0 @@ -package net.lab1024.smartadmin.module.business.log.orderoperatelog.domain.dto; - -import lombok.Data; - -import java.math.BigDecimal; -import java.util.Date; - -/** - * 预存款申请/提取单流水临时文件 - * @author zzr - */ -@Data -public class SupplierOrderOperateVO { - - /** - * 流水类型 - */ - private Integer tradingType; - - /** - * 总重 - */ - private BigDecimal totalWeight; - - /** - * 金额 - */ - private BigDecimal amount; - - /** - * 操作人名称 - */ - private String buyerName; - - /** - * 备注 - */ - private String remark; - - /** - * 创建时间 - */ - private Date createTime; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/domain/entity/OrderOperateLogEntity.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/domain/entity/OrderOperateLogEntity.java deleted file mode 100644 index 8f61f3ec..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/domain/entity/OrderOperateLogEntity.java +++ /dev/null @@ -1,58 +0,0 @@ -package net.lab1024.smartadmin.module.business.log.orderoperatelog.domain.entity; - -import com.baomidou.mybatisplus.annotation.TableName; -import net.lab1024.smartadmin.common.domain.BaseEntity; -import lombok.Builder; -import lombok.Data; - -/** - *

- * 各种单据操作记录 - * - *

- * - * @author anders - * @since 2018-01-09 - */ - -@Data -@Builder -@TableName("t_order_operate_log") -public class OrderOperateLogEntity extends BaseEntity { - - /** - * 各种单据的id - */ - private Long orderId; - /** - * 单据类型 - */ - private Integer orderType; - /** - * 操作类型 - */ - private Integer operateType; - /** - * 操作类型 对应的中文 - */ - private String operateContent; - /** - * 操作备注 - */ - private String operateRemark; - /** - * 员工id - */ - private Long employeeId; - /** - * 员工名称 - */ - private String employeeName; - /** - * 额外信息 - */ - private String extData; - - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/domain/vo/OrderOperateLogVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/domain/vo/OrderOperateLogVO.java deleted file mode 100644 index ab565691..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/domain/vo/OrderOperateLogVO.java +++ /dev/null @@ -1,69 +0,0 @@ -package net.lab1024.smartadmin.module.business.log.orderoperatelog.domain.vo; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.Date; - -/** - * @author bhr - * @Description: 操作日志 - * @date 2019/8/28 9:31 - */ -@Data -public class OrderOperateLogVO { - - private Long id; - /** - * 各种单据的id - */ - @ApiModelProperty("各种单据的id") - private Long orderId; - /** - * 单据类型 - */ - @ApiModelProperty("单据类型") - private Integer orderType; - /** - * 操作类型 - */ - @ApiModelProperty("操作类型") - private Integer operateType; - /** - * 操作类型 对应的中文 - */ - @ApiModelProperty("操作类型 对应的中文") - private String operateContent; - /** - * 操作备注 - */ - @ApiModelProperty("操作备注") - private String operateRemark; - @ApiModelProperty("操作备注,包含审批人名使用别名显示") - private String operateSecondRemark; - /** - * 员工id - */ - @ApiModelProperty("员工id") - private Long employeeId; - /** - * 员工名称 - */ - @ApiModelProperty("员工名称") - private String employeeName; - /** - * 员工名称 - */ - @ApiModelProperty("员工别名") - private String employeeSecondName; - /** - * 额外信息 - */ - @ApiModelProperty("额外信息") - private String extData; - /** - * 创建时间 - */ - @ApiModelProperty("创建时间") - private Date createTime; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/UserLoginLogController.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/UserLoginLogController.java deleted file mode 100644 index eccf2e69..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/UserLoginLogController.java +++ /dev/null @@ -1,54 +0,0 @@ -package net.lab1024.smartadmin.module.business.log.userloginlog; - -import net.lab1024.smartadmin.common.anno.OperateLog; -import net.lab1024.smartadmin.common.domain.PageResultDTO; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.constant.SwaggerTagConst; -import net.lab1024.smartadmin.module.system.employee.domain.dto.EmployeeQueryDTO; -import net.lab1024.smartadmin.module.system.employee.domain.vo.EmployeeVO; -import net.lab1024.smartadmin.module.business.log.userloginlog.domain.UserLoginLogDTO; -import net.lab1024.smartadmin.module.business.log.userloginlog.domain.UserLoginLogQueryDTO; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; - -/** - * [ 用户登录日志 ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date 2019-05-15 10:25:21 - * @since JDK1.8 - */ -@RestController -@Api(tags = {SwaggerTagConst.Admin.MANAGER_USER_LOGIN_LOG}) -@OperateLog -public class UserLoginLogController { - - @Autowired - private UserLoginLogService userLoginLogService; - - @ApiOperation(value = "分页查询用户登录日志", notes = "@author yandanyang") - @PostMapping("/userLoginLog/page/query") - public ResponseDTO> queryByPage(@RequestBody UserLoginLogQueryDTO queryDTO) { - return userLoginLogService.queryByPage(queryDTO); - } - - @ApiOperation(value = "删除用户登录日志", notes = "@author yandanyang") - @GetMapping("/userLoginLog/delete/{id}") - public ResponseDTO delete(@PathVariable("id") Long id) { - return userLoginLogService.delete(id); - } - - @ApiOperation(value = "查询员工在线状态", notes = "@author zzr") - @PostMapping("/userOnLine/query") - public ResponseDTO> queryUserOnLine(@RequestBody @Valid EmployeeQueryDTO queryDTO) { - return userLoginLogService.queryUserOnLine(queryDTO); - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/UserLoginLogDao.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/UserLoginLogDao.java deleted file mode 100644 index ab585690..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/UserLoginLogDao.java +++ /dev/null @@ -1,47 +0,0 @@ -package net.lab1024.smartadmin.module.business.log.userloginlog; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import net.lab1024.smartadmin.module.business.log.userloginlog.domain.UserLoginLogQueryDTO; -import net.lab1024.smartadmin.module.business.log.userloginlog.domain.UserLoginLogEntity; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; -import org.springframework.stereotype.Component; - -import java.util.List; - -/** - * [ 用户登录日志 ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019-05-15 10:25:21 - * @since JDK1.8 - */ -@Mapper -@Component -public interface UserLoginLogDao extends BaseMapper { - - /** - * 分页查询 - * @param queryDTO - * @return UserLoginLogEntity - */ - List queryByPage(Page page, @Param("queryDTO") UserLoginLogQueryDTO queryDTO); - - /** - * 根据id删除 - * @param id - * @return - */ - void deleteById(@Param("id") Long id); - - /** - * 批量删除 - * @param idList - * @return - */ - void deleteByIds(@Param("idList") List idList); -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/UserLoginLogService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/UserLoginLogService.java deleted file mode 100644 index 0d096fe3..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/UserLoginLogService.java +++ /dev/null @@ -1,82 +0,0 @@ -package net.lab1024.smartadmin.module.business.log.userloginlog; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import net.lab1024.smartadmin.common.domain.PageResultDTO; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.module.system.employee.EmployeeService; -import net.lab1024.smartadmin.module.system.employee.domain.dto.EmployeeQueryDTO; -import net.lab1024.smartadmin.module.system.employee.domain.vo.EmployeeVO; -import net.lab1024.smartadmin.module.business.log.userloginlog.domain.UserLoginLogDTO; -import net.lab1024.smartadmin.module.business.log.userloginlog.domain.UserLoginLogEntity; -import net.lab1024.smartadmin.module.business.log.userloginlog.domain.UserLoginLogQueryDTO; -import net.lab1024.smartadmin.module.support.websocket.WebSocketServer; -import net.lab1024.smartadmin.util.SmartBeanUtil; -import net.lab1024.smartadmin.util.SmartPageUtil; -import org.apache.commons.collections.CollectionUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -/** - * [ 用户登录日志 ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date 2019-05-15 10:25:21 - * @since JDK1.8 - */ -@Service -public class UserLoginLogService { - - @Autowired - private UserLoginLogDao userLoginLogDao; - - @Autowired - private EmployeeService employeeService; - - /** - * @author yandanyang - * @description 分页查询 - * @date 2019-05-15 10:25:21 - */ - public ResponseDTO> queryByPage(UserLoginLogQueryDTO queryDTO) { - Page page = SmartPageUtil.convert2QueryPage(queryDTO); - List entities = userLoginLogDao.queryByPage(page, queryDTO); - List dtoList = SmartBeanUtil.copyList(entities, UserLoginLogDTO.class); - page.setRecords(dtoList); - PageResultDTO pageResultDTO = SmartPageUtil.convert2PageResult(page); - return ResponseDTO.succData(pageResultDTO); - } - - /** - * @author yandanyang - * @description 删除 - * @date 2019-05-15 10:25:21 - */ - @Transactional(rollbackFor = Exception.class) - public ResponseDTO delete(Long id) { - userLoginLogDao.deleteById(id); - return ResponseDTO.succ(); - } - - /** - * 查询员工在线状态 - * - * @param queryDTO - * @return - */ - public ResponseDTO> queryUserOnLine(EmployeeQueryDTO queryDTO) { - List onLineUserList = WebSocketServer.getOnLineUserList(); - if (CollectionUtils.isEmpty(onLineUserList)) { - return ResponseDTO.succ(); - } - queryDTO.setEmployeeIds(onLineUserList); - ResponseDTO> employeeList = employeeService.selectEmployeeList(queryDTO); - return employeeList; - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/domain/UserLoginLogDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/domain/UserLoginLogDTO.java deleted file mode 100644 index efeb14de..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/domain/UserLoginLogDTO.java +++ /dev/null @@ -1,53 +0,0 @@ -package net.lab1024.smartadmin.module.business.log.userloginlog.domain; -import lombok.Data; -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; -import io.swagger.annotations.ApiModelProperty; - -/** - * [ 用户登录日志 ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/3/27 0027 下午 12:27 - * @since JDK1.8 - */ -@Data -public class UserLoginLogDTO { - - @ApiModelProperty("主键") - private Long id; - - @ApiModelProperty("员工id") - private Long userId; - - @ApiModelProperty("用户名") - private String userName; - - @ApiModelProperty("用户ip") - private String remoteIp; - - @ApiModelProperty("用户端口") - private Integer remotePort; - - @ApiModelProperty("浏览器") - private String remoteBrowser; - - @ApiModelProperty("操作系统") - private String remoteOs; - - @ApiModelProperty("登录状态") - private Integer loginStatus; - - @ApiModelProperty("更新时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private Date updateTime; - - @ApiModelProperty("创建时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private Date createTime; - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/domain/UserLoginLogEntity.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/domain/UserLoginLogEntity.java deleted file mode 100644 index b0d02ac9..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/domain/UserLoginLogEntity.java +++ /dev/null @@ -1,60 +0,0 @@ -package net.lab1024.smartadmin.module.business.log.userloginlog.domain; -import com.baomidou.mybatisplus.annotation.TableName; -import net.lab1024.smartadmin.common.domain.BaseEntity; -import lombok.*; - - -/** - * [ 用户登录日志] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019-05-15 10:25:21 - * @since JDK1.8 - */ -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -@TableName("t_user_login_log") -public class UserLoginLogEntity extends BaseEntity { - - /** - * 员工id - */ - private Long userId; - - /** - * 用户名 - */ - private String userName; - /** - * 用户ip - */ - private String remoteIp; - - /** - * 用户端口 - */ - private Integer remotePort; - - /** - * 浏览器 - */ - private String remoteBrowser; - - /** - * 操作系统 - */ - private String remoteOs; - - /** - * 登录状态 - */ - private Integer loginStatus; - - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/domain/UserLoginLogQueryDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/domain/UserLoginLogQueryDTO.java deleted file mode 100644 index 726797cc..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/domain/UserLoginLogQueryDTO.java +++ /dev/null @@ -1,31 +0,0 @@ -package net.lab1024.smartadmin.module.business.log.userloginlog.domain; - -import net.lab1024.smartadmin.common.domain.PageParamDTO; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * [ 用户登录日志 ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date 2019-05-15 10:25:21 - * @since JDK1.8 - */ -@Data -public class UserLoginLogQueryDTO extends PageParamDTO { - - - @ApiModelProperty("开始日期") - private String startDate; - - @ApiModelProperty("结束日期") - private String endDate; - - - @ApiModelProperty("用户名") - private String userName; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/UserOperateLogController.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/UserOperateLogController.java deleted file mode 100644 index e1c2d775..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/UserOperateLogController.java +++ /dev/null @@ -1,50 +0,0 @@ -package net.lab1024.smartadmin.module.business.log.useroperatelog; - -import net.lab1024.smartadmin.common.anno.OperateLog; -import net.lab1024.smartadmin.common.domain.PageResultDTO; -import net.lab1024.smartadmin.constant.SwaggerTagConst; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.module.business.log.useroperatelog.domain.UserOperateLogDTO; -import net.lab1024.smartadmin.module.business.log.useroperatelog.domain.UserOperateLogQueryDTO; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date 2019-05-15 11:32:14 - * @since JDK1.8 - */ -@RestController -@Api(tags = {SwaggerTagConst.Admin.MANAGER_USER_OPERATE_LOG}) -@OperateLog -public class UserOperateLogController { - - @Autowired - private UserOperateLogService userOperateLogService; - - @ApiOperation(value = "分页查询",notes = "@author yandanyang") - @PostMapping("/userOperateLog/page/query") - public ResponseDTO> queryByPage(@RequestBody UserOperateLogQueryDTO queryDTO) { - return userOperateLogService.queryByPage(queryDTO); - } - - @ApiOperation(value="删除",notes = "@author yandanyang") - @GetMapping("/userOperateLog/delete/{id}") - public ResponseDTO delete(@PathVariable("id") Long id){ - return userOperateLogService.delete(id); - } - - - @ApiOperation(value="详情",notes = "@author yandanyang") - @GetMapping("/userOperateLog/detail/{id}") - public ResponseDTO detail(@PathVariable("id") Long id){ - return userOperateLogService.detail(id); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/UserOperateLogDao.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/UserOperateLogDao.java deleted file mode 100644 index 8959bbed..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/UserOperateLogDao.java +++ /dev/null @@ -1,47 +0,0 @@ -package net.lab1024.smartadmin.module.business.log.useroperatelog; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import net.lab1024.smartadmin.module.business.log.useroperatelog.domain.UserOperateLogQueryDTO; -import net.lab1024.smartadmin.module.business.log.useroperatelog.domain.UserOperateLogEntity; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; -import org.springframework.stereotype.Component; - -import java.util.List; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019-05-15 11:32:14 - * @since JDK1.8 - */ -@Mapper -@Component -public interface UserOperateLogDao extends BaseMapper { - - /** - * 分页查询 - * @param queryDTO - * @return UserOperateLogEntity - */ - List queryByPage(Page page, @Param("queryDTO") UserOperateLogQueryDTO queryDTO); - - /** - * 根据id删除 - * @param id - * @return - */ - void deleteById(@Param("id") Long id); - - /** - * 批量删除 - * @param idList - * @return - */ - void deleteByIds(@Param("idList") List idList); -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/UserOperateLogService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/UserOperateLogService.java deleted file mode 100644 index 772504ce..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/UserOperateLogService.java +++ /dev/null @@ -1,91 +0,0 @@ -package net.lab1024.smartadmin.module.business.log.useroperatelog; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import net.lab1024.smartadmin.common.domain.PageResultDTO; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.module.business.log.useroperatelog.domain.UserOperateLogDTO; -import net.lab1024.smartadmin.module.business.log.useroperatelog.domain.UserOperateLogEntity; -import net.lab1024.smartadmin.module.business.log.useroperatelog.domain.UserOperateLogQueryDTO; -import net.lab1024.smartadmin.util.SmartBeanUtil; -import net.lab1024.smartadmin.util.SmartPageUtil; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date 2019-05-15 11:32:14 - * @since JDK1.8 - */ -@Service -public class UserOperateLogService { - - @Autowired - private UserOperateLogDao userOperateLogDao; - - /** - * @author yandanyang - * @description 分页查询 - * @date 2019-05-15 11:32:14 - */ - public ResponseDTO> queryByPage(UserOperateLogQueryDTO queryDTO) { - Page page = SmartPageUtil.convert2QueryPage(queryDTO); - List entities = userOperateLogDao.queryByPage(page, queryDTO); - List dtoList = SmartBeanUtil.copyList(entities, UserOperateLogDTO.class); - page.setRecords(dtoList); - PageResultDTO pageResultDTO = SmartPageUtil.convert2PageResult(page); - return ResponseDTO.succData(pageResultDTO); - } - - /** - * @author yandanyang - * @description 添加 - * @date 2019-05-15 11:32:14 - */ - public ResponseDTO add(UserOperateLogDTO addDTO) { - UserOperateLogEntity entity = SmartBeanUtil.copy(addDTO, UserOperateLogEntity.class); - userOperateLogDao.insert(entity); - return ResponseDTO.succ(); - } - - /** - * @author yandanyang - * @description 编辑 - * @date 2019-05-15 11:32:14 - */ - @Transactional(rollbackFor = Exception.class) - public ResponseDTO update(UserOperateLogDTO updateDTO) { - UserOperateLogEntity entity = SmartBeanUtil.copy(updateDTO, UserOperateLogEntity.class); - userOperateLogDao.updateById(entity); - return ResponseDTO.succ(); - } - - /** - * @author yandanyang - * @description 删除 - * @date 2019-05-15 11:32:14 - */ - @Transactional(rollbackFor = Exception.class) - public ResponseDTO delete(Long id) { - userOperateLogDao.deleteById(id); - return ResponseDTO.succ(); - } - - /** - * @author yandanyang - * @description 根据ID查询 - * @date 2019-05-15 11:32:14 - */ - public ResponseDTO detail(Long id) { - UserOperateLogEntity entity = userOperateLogDao.selectById(id); - UserOperateLogDTO dto = SmartBeanUtil.copy(entity, UserOperateLogDTO.class); - return ResponseDTO.succData(dto); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/domain/UserOperateLogEntity.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/domain/UserOperateLogEntity.java deleted file mode 100644 index 467ce769..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/domain/UserOperateLogEntity.java +++ /dev/null @@ -1,74 +0,0 @@ -package net.lab1024.smartadmin.module.business.log.useroperatelog.domain; -import com.baomidou.mybatisplus.annotation.TableName; -import net.lab1024.smartadmin.common.domain.BaseEntity; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019-05-15 11:32:14 - * @since JDK1.8 - */ -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -@TableName("t_user_operate_log") -public class UserOperateLogEntity extends BaseEntity { - - - - /** - * 用户id - */ - private Long userId; - - /** - * 用户名称 - */ - private String userName; - /** - * 操作模块 - */ - private String module; - - /** - * 操作内容 - */ - private String content; - - /** - * 请求路径 - */ - private String url; - - /** - * 请求方法 - */ - private String method; - - /** - * 请求参数 - */ - private String param; - - /** - * 请求结果 0失败 1成功 - */ - private Integer result; - - /** - * 失败原因 - */ - private String failReason; - - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/domain/UserOperateLogQueryDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/domain/UserOperateLogQueryDTO.java deleted file mode 100644 index cee24b7d..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/domain/UserOperateLogQueryDTO.java +++ /dev/null @@ -1,34 +0,0 @@ -package net.lab1024.smartadmin.module.business.log.useroperatelog.domain; - -import net.lab1024.smartadmin.common.domain.PageParamDTO; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date 2019-05-15 11:32:14 - * @since JDK1.8 - */ -@Data -public class UserOperateLogQueryDTO extends PageParamDTO { - - - @ApiModelProperty("开始日期") - private String startDate; - - @ApiModelProperty("结束日期") - private String endDate; - - - @ApiModelProperty("用户名称") - private String userName; - - @ApiModelProperty("请求结果 0失败 1成功") - private Integer resultFlag; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/NoticeController.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/NoticeController.java deleted file mode 100644 index 5d42d5d9..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/NoticeController.java +++ /dev/null @@ -1,96 +0,0 @@ -package net.lab1024.smartadmin.module.business.notice; - -import net.lab1024.smartadmin.common.anno.NoValidPrivilege; -import net.lab1024.smartadmin.common.domain.PageParamDTO; -import net.lab1024.smartadmin.common.domain.PageResultDTO; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.constant.SwaggerTagConst; -import net.lab1024.smartadmin.module.business.notice.domain.dto.*; -import net.lab1024.smartadmin.util.SmartRequestTokenUtil; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date 2019-07-11 16:19:48 - * @since JDK1.8 - */ -@RestController -@Api(tags = {SwaggerTagConst.Admin.MANAGER_NOTICE}) -public class NoticeController { - - @Autowired - private NoticeService noticeService; - - @ApiOperation(value = "分页查询全部消息", notes = "@author yandanyang") - @PostMapping("/notice/page/query") - @NoValidPrivilege - public ResponseDTO> queryByPage(@RequestBody NoticeQueryDTO queryDTO) { - return noticeService.queryByPage(queryDTO); - } - - @ApiOperation(value = "获取已收取的所有消息", notes = "@author yandanyang") - @PostMapping("/notice/receive/page/query") - @NoValidPrivilege - public ResponseDTO> queryReceiveByPage(@RequestBody NoticeReceiveQueryDTO queryDTO) { - return noticeService.queryReceiveByPage(queryDTO, SmartRequestTokenUtil.getRequestUser()); - } - - @ApiOperation(value = "分页查询未读消息", notes = "@author yandanyang") - @PostMapping("/notice/unread/page/query") - @NoValidPrivilege - public ResponseDTO> queryUnreadByPage(@RequestBody PageParamDTO queryDTO) { - return noticeService.queryUnreadByPage(queryDTO, SmartRequestTokenUtil.getRequestUser()); - } - - @ApiOperation(value = "添加", notes = "@author yandanyang") - @PostMapping("/notice/add") - @NoValidPrivilege - public ResponseDTO add(@RequestBody @Valid NoticeAddDTO addTO) { - return noticeService.add(addTO, SmartRequestTokenUtil.getRequestUser()); - } - - @ApiOperation(value = "修改", notes = "@author yandanyang") - @PostMapping("/notice/update") - @NoValidPrivilege - public ResponseDTO update(@RequestBody @Valid NoticeUpdateDTO updateDTO) { - return noticeService.update(updateDTO); - } - - @ApiOperation(value = "删除", notes = "@author yandanyang") - @GetMapping("/notice/delete/{id}") - @NoValidPrivilege - public ResponseDTO delete(@PathVariable("id") Long id) { - return noticeService.delete(id); - } - - @ApiOperation(value = "详情", notes = "@author yandanyang") - @GetMapping("/notice/detail/{id}") - @NoValidPrivilege - public ResponseDTO detail(@PathVariable("id") Long id) { - return noticeService.detail(id); - } - - @ApiOperation(value = "发送", notes = "@author yandanyang") - @GetMapping("/notice/send/{id}") - @NoValidPrivilege - public ResponseDTO send(@PathVariable("id") Long id) { - return noticeService.send(id, SmartRequestTokenUtil.getRequestUser()); - } - - @ApiOperation(value = "读取消息", notes = "@author yandanyang") - @GetMapping("/notice/read/{id}") - @NoValidPrivilege - public ResponseDTO read(@PathVariable("id") Long id) { - return noticeService.read(id, SmartRequestTokenUtil.getRequestUser()); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/NoticeManage.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/NoticeManage.java deleted file mode 100644 index 7f65e416..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/NoticeManage.java +++ /dev/null @@ -1,97 +0,0 @@ -package net.lab1024.smartadmin.module.business.notice; - -import net.lab1024.smartadmin.common.constant.JudgeEnum; -import net.lab1024.smartadmin.module.system.login.domain.RequestTokenBO; -import net.lab1024.smartadmin.module.business.notice.dao.NoticeDao; -import net.lab1024.smartadmin.module.business.notice.dao.NoticeReceiveRecordDao; -import net.lab1024.smartadmin.module.business.notice.domain.dto.NoticeUpdateDTO; -import net.lab1024.smartadmin.module.business.notice.domain.entity.NoticeEntity; -import net.lab1024.smartadmin.module.business.notice.domain.entity.NoticeReceiveRecordEntity; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.time.LocalDateTime; -import java.util.Date; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/7/13 0013 下午 17:33 - * @since JDK1.8 - */ -@Service -public class NoticeManage { - - @Autowired - private NoticeDao noticeDao; - @Autowired - private NoticeReceiveRecordDao noticeReceiveRecordDao; - - /** - * 发送消息 - * @param entity - * @param requestToken - */ - @Transactional(rollbackFor = Exception.class) - public void send(NoticeEntity entity, RequestTokenBO requestToken){ - - entity.setSendStatus(JudgeEnum.YES.getValue()); - noticeDao.updateById(entity); - //默认发件人 已读此消息 - NoticeReceiveRecordEntity recordEntity = new NoticeReceiveRecordEntity(); - recordEntity.setEmployeeId(requestToken.getRequestUserId()); - recordEntity.setNoticeId(entity.getId()); - recordEntity.setCreateTime(new Date()); - recordEntity.setUpdateTime(new Date()); - noticeReceiveRecordDao.insert(recordEntity); - } - - - /** - * 保存读取记录 - * @param noticeId - * @param requestToken - */ - public void saveReadRecord(Long noticeId, RequestTokenBO requestToken){ - NoticeReceiveRecordEntity recordEntity = new NoticeReceiveRecordEntity(); - recordEntity.setEmployeeId(requestToken.getRequestUserId()); - recordEntity.setNoticeId(noticeId); - recordEntity.setCreateTime(new Date()); - recordEntity.setUpdateTime(new Date()); - noticeReceiveRecordDao.insert(recordEntity); - } - - - /** - * 消息删除 - * @param entity - */ - @Transactional(rollbackFor = Exception.class) - public void delete(NoticeEntity entity) { - if(JudgeEnum.YES.getValue().equals(entity.getSendStatus())){ - //消息已发送 执行逻辑删除 - noticeDao.logicDeleteById(entity.getId(),JudgeEnum.YES.getValue()); - }else{ - //消息未发送 执行真实删除 - noticeDao.deleteById(entity.getId()); - } - } - - /** - * 更新消息 - * @param entity - * @param updateDTO - */ - public void update(NoticeEntity entity,NoticeUpdateDTO updateDTO) { - entity.setTitle(updateDTO.getTitle()); - entity.setContent(updateDTO.getContent()); - entity.setSendStatus(JudgeEnum.NO.getValue()); - entity.setDeleted(JudgeEnum.NO.getValue()); - noticeDao.updateById(entity); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/NoticeService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/NoticeService.java deleted file mode 100644 index 113c285c..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/NoticeService.java +++ /dev/null @@ -1,235 +0,0 @@ -package net.lab1024.smartadmin.module.business.notice; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import net.lab1024.smartadmin.common.constant.JudgeEnum; -import net.lab1024.smartadmin.common.constant.ResponseCodeConst; -import net.lab1024.smartadmin.common.domain.PageParamDTO; -import net.lab1024.smartadmin.common.domain.PageResultDTO; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.module.system.login.domain.RequestTokenBO; -import net.lab1024.smartadmin.module.business.notice.dao.NoticeDao; -import net.lab1024.smartadmin.module.business.notice.dao.NoticeReceiveRecordDao; -import net.lab1024.smartadmin.module.business.notice.domain.dto.*; -import net.lab1024.smartadmin.module.business.notice.domain.entity.NoticeEntity; -import net.lab1024.smartadmin.module.business.notice.domain.entity.NoticeReceiveRecordEntity; -import net.lab1024.smartadmin.module.support.websocket.WebSocketServer; -import net.lab1024.smartadmin.util.SmartBeanUtil; -import net.lab1024.smartadmin.util.SmartPageUtil; -import org.apache.commons.collections.CollectionUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.time.LocalDateTime; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date 2019-07-11 16:19:48 - * @since JDK1.8 - */ -@Service -public class NoticeService { - - @Autowired - private NoticeDao noticeDao; - - @Autowired - private NoticeReceiveRecordDao noticeReceiveRecordDao; - - @Autowired - private NoticeManage noticeManage; - - /** - * @author yandanyang - * @description 分页查询 - * @date 2019-07-11 16:19:48 - */ - public ResponseDTO> queryByPage(NoticeQueryDTO queryDTO) { - queryDTO.setDeleted(JudgeEnum.NO.getValue()); - Page page = SmartPageUtil.convert2QueryPage(queryDTO); - List dtoList = noticeDao.queryByPage(page, queryDTO); - page.setRecords(dtoList); - PageResultDTO pageResultDTO = SmartPageUtil.convert2PageResult(page); - return ResponseDTO.succData(pageResultDTO); - } - - /** - * 获取当前登录人的消息列表 - * - * @param queryDTO - * @param requestToken - * @return - */ - public ResponseDTO> queryReceiveByPage(NoticeReceiveQueryDTO queryDTO, RequestTokenBO requestToken) { - queryDTO.setEmployeeId(requestToken.getRequestUserId()); - queryDTO.setSendStatus(JudgeEnum.YES.getValue()); - Page page = SmartPageUtil.convert2QueryPage(queryDTO); - List dtoList = noticeDao.queryReceiveByPage(page, queryDTO); - dtoList.forEach(e -> { - if (e.getReceiveTime() == null) { - e.setReadStatus(JudgeEnum.NO.getValue()); - } else { - e.setReadStatus(JudgeEnum.YES.getValue()); - } - }); - page.setRecords(dtoList); - PageResultDTO pageResultDTO = SmartPageUtil.convert2PageResult(page); - return ResponseDTO.succData(pageResultDTO); - } - - /** - * 获取我的未读消息 - * - * @param queryDTO - * @param requestToken - * @return - */ - public ResponseDTO> queryUnreadByPage(PageParamDTO queryDTO, RequestTokenBO requestToken) { - Page page = SmartPageUtil.convert2QueryPage(queryDTO); - List dtoList = noticeDao.queryUnreadByPage(page, requestToken.getRequestUserId(), JudgeEnum.YES.getValue()); - page.setRecords(dtoList); - PageResultDTO pageResultDTO = SmartPageUtil.convert2PageResult(page); - return ResponseDTO.succData(pageResultDTO); - } - - /** - * @author yandanyang - * @description 添加 - * @date 2019-07-11 16:19:48 - */ - public ResponseDTO add(NoticeAddDTO addDTO, RequestTokenBO requestToken) { - NoticeEntity entity = SmartBeanUtil.copy(addDTO, NoticeEntity.class); - entity.setCreateTime(new Date()); - entity.setUpdateTime(new Date()); - entity.setCreateUser(requestToken.getRequestUserId()); - entity.setSendStatus(JudgeEnum.NO.getValue()); - entity.setDeleted(JudgeEnum.NO.getValue()); - noticeDao.insert(entity); - return ResponseDTO.succ(); - } - - /** - * @author yandanyang - * @description 编辑 - * @date 2019-07-11 16:19:48 - */ - @Transactional(rollbackFor = Exception.class) - public ResponseDTO update(NoticeUpdateDTO updateDTO) { - NoticeEntity entity = noticeDao.selectById(updateDTO.getId()); - if (entity == null) { - return ResponseDTO.wrap(ResponseCodeConst.ERROR_PARAM, "此系统通知不存在"); - } - if (JudgeEnum.YES.getValue().equals(entity.getSendStatus())) { - return ResponseDTO.wrap(ResponseCodeConst.ERROR_PARAM, "此系统通知已发送无法修改"); - } - noticeManage.update(entity, updateDTO); - return ResponseDTO.succ(); - } - - /** - * @author yandanyang - * @description 删除 - * @date 2019-07-11 16:19:48 - */ - public ResponseDTO delete(Long id) { - NoticeEntity entity = noticeDao.selectById(id); - if (entity == null) { - return ResponseDTO.wrap(ResponseCodeConst.ERROR_PARAM, "此系统通知不存在"); - } - noticeManage.delete(entity); - return ResponseDTO.succ(); - } - - /** - * @author yandanyang - * @description 根据ID查询 - * @date 2019-07-11 16:19:48 - */ - public ResponseDTO detail(Long id) { - NoticeDetailVO noticeDTO = noticeDao.detail(id); - return ResponseDTO.succData(noticeDTO); - } - - /** - * 获取某人的未读消息数 - * - * @param employeeId - * @return - */ - private Integer getUnreadCount(Long employeeId) { - return noticeDao.noticeUnreadCount(employeeId, JudgeEnum.YES.getValue()); - } - - /** - * 发送给所有在线用户未读消息数 - * - * @param id - * @param requestToken - * @return - */ - public ResponseDTO send(Long id, RequestTokenBO requestToken) { - NoticeEntity entity = noticeDao.selectById(id); - if (entity == null) { - return ResponseDTO.wrap(ResponseCodeConst.ERROR_PARAM, "此系统通知不存在"); - } - noticeManage.send(entity, requestToken); - this.sendMessage(requestToken); - return ResponseDTO.succ(); - } - - /** - * 发送系统通知 ,发送人不进行接收,需再事务外调用 以防止数据隔离级别不同造成未读消息数异常 - * - * @param requestToken - */ - private void sendMessage(RequestTokenBO requestToken) { - List onLineEmployeeIds = WebSocketServer.getOnLineUserList(); - if (CollectionUtils.isEmpty(onLineEmployeeIds)) { - return; - } - //在线用户已读消息数 - Map readCountMap = new HashMap<>(); - List readCountList = noticeDao.readCount(onLineEmployeeIds); - if (CollectionUtils.isNotEmpty(readCountList)) { - readCountMap = readCountList.stream().collect(Collectors.toMap(NoticeReadCountDTO :: getEmployeeId, NoticeReadCountDTO :: getReadCount)); - } - //已发送消息数 - Integer noticeCount = noticeDao.noticeCount(JudgeEnum.YES.getValue()); - for (Long employeeId : onLineEmployeeIds) { - Integer readCount = readCountMap.get(employeeId) == null ? 0 : readCountMap.get(employeeId); - Integer unReadCount = noticeCount - readCount; - if (! requestToken.getRequestUserId().equals(employeeId)) { - WebSocketServer.sendOneOnLineUser(unReadCount.toString(), employeeId); - } - } - } - - /** - * 读取消息 - * - * @param id - * @param requestToken - * @return - */ - public ResponseDTO read(Long id, RequestTokenBO requestToken) { - NoticeDetailVO noticeDTO = noticeDao.detail(id); - - NoticeReceiveRecordEntity recordEntity = noticeReceiveRecordDao.selectByEmployeeAndNotice(requestToken.getRequestUserId(), id); - if (recordEntity != null) { - return ResponseDTO.succData(noticeDTO); - } - noticeManage.saveReadRecord(id, requestToken); - this.sendMessage(requestToken); - return ResponseDTO.succData(noticeDTO); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/dao/NoticeDao.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/dao/NoticeDao.java deleted file mode 100644 index de7caec5..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/dao/NoticeDao.java +++ /dev/null @@ -1,103 +0,0 @@ -package net.lab1024.smartadmin.module.business.notice.dao; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import net.lab1024.smartadmin.common.anno.DataScope; -import net.lab1024.smartadmin.module.business.notice.domain.dto.*; -import net.lab1024.smartadmin.module.business.notice.domain.entity.NoticeEntity; -import net.lab1024.smartadmin.module.system.datascope.constant.DataScopeWhereInTypeEnum; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; -import org.springframework.stereotype.Component; - -import java.util.List; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019-07-11 16:19:48 - * @since JDK1.8 - */ -@Mapper -@Component -public interface NoticeDao extends BaseMapper { - - /** - * 分页查询 - * @param queryDTO - * @return NoticeEntity - */ - @DataScope(joinSql = "n.create_user in (#employeeIds)", whereInType = DataScopeWhereInTypeEnum.EMPLOYEE) - List queryByPage(Page page, @Param("queryDTO") NoticeQueryDTO queryDTO); - - - /** - * 获取某人的未读消息 - * @param page - * @param employeeId - * @return - */ - @DataScope(joinSql = "e.department_id in (#departmentIds)", whereInType = DataScopeWhereInTypeEnum.DEPARTMENT) - List queryUnreadByPage(Page page, @Param("employeeId") Long employeeId, @Param("sendStatus") Integer sendStatus); - - - /** - * 获取 - * @param page - * @param queryDTO - * @return - */ - List queryReceiveByPage(Page page, @Param("queryDTO") NoticeReceiveQueryDTO queryDTO); - - /** - * 详情 - * @param id - * @return - */ - NoticeDetailVO detail(@Param("id") Long id); - - /** - * 根据id删除 逻辑删除 - * @param id - * @param deletedFlag - */ - void logicDeleteById(@Param("id") Long id,@Param("deletedFlag") Integer deletedFlag); - - - - /** - * 批量逻辑删除 - * @param idList - * @param deletedFlag - * @return - */ - void logicDeleteByIds(@Param("idList") List idList,@Param("deletedFlag") Integer deletedFlag); - - /** - * 获取消息总数 - * @return - */ - Integer noticeCount(@Param("sendStatus") Integer sendStatus); - - - /** - * 获取已读消息数 - * @param employeeIds - * @return - */ - List readCount(@Param("employeeIds") List employeeIds); - - - /** - * 获取某人的未读消息数 - * @param employeeId - * @param sendStatus - * @return - */ - Integer noticeUnreadCount(@Param("employeeId") Long employeeId, @Param("sendStatus") Integer sendStatus); - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/dao/NoticeReceiveRecordDao.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/dao/NoticeReceiveRecordDao.java deleted file mode 100644 index 682e0d74..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/dao/NoticeReceiveRecordDao.java +++ /dev/null @@ -1,48 +0,0 @@ -package net.lab1024.smartadmin.module.business.notice.dao; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import net.lab1024.smartadmin.module.business.notice.domain.entity.NoticeReceiveRecordEntity; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; -import org.springframework.stereotype.Component; - -import java.util.List; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019-07-11 16:19:48 - * @since JDK1.8 - */ -@Mapper -@Component -public interface NoticeReceiveRecordDao extends BaseMapper { - - /** - * 批量删除 - * - * @param noticeId - * @return - */ - void deleteByNoticeId(@Param("noticeId") Long noticeId); - - /** - * 批量插入 - * - * @param rolePrivilegeList - */ - void batchInsert(List rolePrivilegeList); - - /** - * 根据员工和系统通知获取读取记录 - * - * @param employeeId - * @param noticeId - * @return - */ - NoticeReceiveRecordEntity selectByEmployeeAndNotice(@Param("employeeId") Long employeeId, @Param("noticeId") Long noticeId); -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeAddDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeAddDTO.java deleted file mode 100644 index 572817d1..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeAddDTO.java +++ /dev/null @@ -1,28 +0,0 @@ -package net.lab1024.smartadmin.module.business.notice.domain.dto; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import org.hibernate.validator.constraints.Length; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/3/27 0027 下午 12:27 - * @since JDK1.8 - */ -@Data -public class NoticeAddDTO { - - @ApiModelProperty("消息标题") - @Length(max = 200) - private String title; - - @ApiModelProperty("消息内容") - @Length(max = 5000) - private String content; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeDetailVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeDetailVO.java deleted file mode 100644 index 097317cd..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeDetailVO.java +++ /dev/null @@ -1,30 +0,0 @@ -package net.lab1024.smartadmin.module.business.notice.domain.dto; - -import com.fasterxml.jackson.annotation.JsonFormat; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.Date; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/3/27 0027 下午 12:27 - * @since JDK1.8 - */ -@Data -public class NoticeDetailVO extends NoticeVO { - - - @ApiModelProperty("消息内容") - private String content; - - @ApiModelProperty("更新时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private Date updateTime; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeQueryDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeQueryDTO.java deleted file mode 100644 index b68feb4f..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeQueryDTO.java +++ /dev/null @@ -1,34 +0,0 @@ -package net.lab1024.smartadmin.module.business.notice.domain.dto; - -import net.lab1024.smartadmin.common.domain.PageParamDTO; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date 2019-07-11 16:19:48 - * @since JDK1.8 - */ -@Data -public class NoticeQueryDTO extends PageParamDTO { - - - @ApiModelProperty("开始日期") - private String startDate; - - @ApiModelProperty("结束日期") - private String endDate; - - - @ApiModelProperty("消息标题") - private String title; - - @ApiModelProperty(value = "是否删除",hidden = true) - private Integer deleted; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeReadCountDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeReadCountDTO.java deleted file mode 100644 index 7821cf76..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeReadCountDTO.java +++ /dev/null @@ -1,26 +0,0 @@ -package net.lab1024.smartadmin.module.business.notice.domain.dto; - -import lombok.Data; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/7/12 0012 上午 8:11 - * @since JDK1.8 - */ -@Data -public class NoticeReadCountDTO { - /** - * 员工id - */ - private Long employeeId; - /** - * 已读消息数 - */ - private Integer readCount; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeReceiveDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeReceiveDTO.java deleted file mode 100644 index aa4aa7ad..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeReceiveDTO.java +++ /dev/null @@ -1,43 +0,0 @@ -package net.lab1024.smartadmin.module.business.notice.domain.dto; - -import com.fasterxml.jackson.annotation.JsonFormat; -import net.lab1024.smartadmin.common.anno.ApiModelPropertyEnum; -import net.lab1024.smartadmin.common.constant.JudgeEnum; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.Date; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/7/12 0012 上午 11:53 - * @since JDK1.8 - */ -@Data -public class NoticeReceiveDTO{ - - @ApiModelProperty("id") - private Long id; - - @ApiModelProperty("消息标题") - private String title; - - - @ApiModelProperty("消息创建人") - private Long createUser; - - @ApiModelProperty("消息创建人名称") - private String createUserName; - - @ApiModelProperty("结束时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private Date receiveTime; - - @ApiModelPropertyEnum(enumDesc = "读取状态",value = JudgeEnum.class) - private Integer readStatus; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeReceiveQueryDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeReceiveQueryDTO.java deleted file mode 100644 index 63bbc87b..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeReceiveQueryDTO.java +++ /dev/null @@ -1,25 +0,0 @@ -package net.lab1024.smartadmin.module.business.notice.domain.dto; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/7/12 0012 下午 12:32 - * @since JDK1.8 - */ -@Data -public class NoticeReceiveQueryDTO extends NoticeQueryDTO{ - - @ApiModelProperty(value = "当前登录人",hidden = true) - private Long employeeId; - - @ApiModelProperty(value = "发送状态",hidden = true) - private Integer sendStatus; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeUpdateDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeUpdateDTO.java deleted file mode 100644 index d62c00ca..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeUpdateDTO.java +++ /dev/null @@ -1,21 +0,0 @@ -package net.lab1024.smartadmin.module.business.notice.domain.dto; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/7/11 0011 下午 16:24 - * @since JDK1.8 - */ -@Data -public class NoticeUpdateDTO extends NoticeAddDTO{ - - @ApiModelProperty("id") - private Long id; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeVO.java deleted file mode 100644 index 04fc5fbb..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeVO.java +++ /dev/null @@ -1,42 +0,0 @@ -package net.lab1024.smartadmin.module.business.notice.domain.dto; -import net.lab1024.smartadmin.common.anno.ApiModelPropertyEnum; -import net.lab1024.smartadmin.common.constant.JudgeEnum; -import lombok.Data; -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; -import io.swagger.annotations.ApiModelProperty; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/3/27 0027 下午 12:27 - * @since JDK1.8 - */ -@Data -public class NoticeVO { - - @ApiModelProperty("id") - private Long id; - - @ApiModelProperty("消息标题") - private String title; - - - @ApiModelProperty("消息创建人") - private Long createUser; - - @ApiModelPropertyEnum(enumDesc = "发送状态",value = JudgeEnum.class) - private Integer sendStatus; - - @ApiModelProperty("消息创建人名称") - private String createUserName; - - @ApiModelProperty("创建时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private Date createTime; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/entity/NoticeEntity.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/entity/NoticeEntity.java deleted file mode 100644 index 4caeca22..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/entity/NoticeEntity.java +++ /dev/null @@ -1,45 +0,0 @@ -package net.lab1024.smartadmin.module.business.notice.domain.entity; -import com.baomidou.mybatisplus.annotation.TableName; -import net.lab1024.smartadmin.common.domain.BaseEntity; -import lombok.Data; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019-07-11 16:19:48 - * @since JDK1.8 - */ -@Data -@TableName("t_notice") -public class NoticeEntity extends BaseEntity { - - /** - * 消息标题 - */ - private String title; - - /** - * 消息内容 - */ - private String content; - - /** - * 消息创建人 - */ - private Long createUser; - - /** - * 发送状态 - */ - private Integer sendStatus; - - /** - * 删除状态 - */ - private Integer deleted; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/entity/NoticeReceiveRecordEntity.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/entity/NoticeReceiveRecordEntity.java deleted file mode 100644 index 74f5f3e7..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/entity/NoticeReceiveRecordEntity.java +++ /dev/null @@ -1,33 +0,0 @@ -package net.lab1024.smartadmin.module.business.notice.domain.entity; -import com.baomidou.mybatisplus.annotation.TableName; -import net.lab1024.smartadmin.common.domain.BaseEntity; -import lombok.Data; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019-07-11 16:19:48 - * @since JDK1.8 - */ -@Data -@TableName("t_notice_receive_record") -public class NoticeReceiveRecordEntity extends BaseEntity { - - - /** - * 消息id - */ - private Long noticeId; - - /** - * 消息接收人 - */ - private Long employeeId; - - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/controller/PeonyController.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/controller/PeonyController.java deleted file mode 100644 index 08b12c62..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/controller/PeonyController.java +++ /dev/null @@ -1,88 +0,0 @@ -package net.lab1024.smartadmin.module.business.peony.controller; - -import net.lab1024.smartadmin.common.domain.PageResultDTO; -import net.lab1024.smartadmin.common.controller.BaseController; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.common.domain.ValidateList; -import net.lab1024.smartadmin.module.business.peony.domain.dto.PeonyAddDTO; -import net.lab1024.smartadmin.module.business.peony.domain.dto.PeonyUpdateDTO; -import net.lab1024.smartadmin.module.business.peony.domain.dto.PeonyQueryDTO; -import net.lab1024.smartadmin.module.business.peony.domain.vo.PeonyVO; -import net.lab1024.smartadmin.module.business.peony.domain.vo.PeonyExcelVO; -import net.lab1024.smartadmin.module.business.peony.service.PeonyService; -import cn.afterturn.easypoi.excel.ExcelExportUtil; -import cn.afterturn.easypoi.excel.entity.ExportParams; -import org.apache.poi.ss.usermodel.Workbook; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import javax.servlet.http.HttpServletResponse; -import java.util.List; - -/** - * [ 牡丹花 ] - * - * @author 卓大 - * @version 1.0 - * @company 1024创新实验室( www.1024lab.net ) - * @copyright (c) 1024创新实验室( www.1024lab.net )Inc. All rights reserved. - * @date 2020-04-06 18:17:56 - * @since JDK1.8 - */ -@RestController -@Api(tags = {"牡丹花"}) -public class PeonyController extends BaseController { - - @Autowired - private PeonyService peonyService; - - @ApiOperation(value = "分页查询牡丹花",notes = "@author 卓大") - @PostMapping("/peony/page/query") - public ResponseDTO> queryByPage(@RequestBody PeonyQueryDTO queryDTO) { - return peonyService.queryByPage(queryDTO); - } - - @ApiOperation(value = "添加牡丹花",notes = "@author 卓大") - @PostMapping("/peony/add") - public ResponseDTO add(@RequestBody @Validated PeonyAddDTO addTO){ - return peonyService.add(addTO); - } - - @ApiOperation(value="修改牡丹花",notes = "@author 卓大") - @PostMapping("/peony/update") - public ResponseDTO update(@RequestBody @Validated PeonyUpdateDTO updateDTO){ - return peonyService.update(updateDTO); - } - - @ApiOperation(value="批量删除牡丹花",notes = "@author 卓大") - @PostMapping("/peony/deleteByIds") - public ResponseDTO delete(@RequestBody @Validated ValidateList idList) { - return peonyService.deleteByIds(idList); - } - - @ApiOperation(value = "批量导出", notes = "@author 卓大") - @PostMapping("/peony/export/batch") - public void batchExport(@RequestBody @Validated ValidateList idList, HttpServletResponse response) { - //查询数据 - List peonyList = peonyService.queryBatchExportData(idList); - //导出操作 - ExportParams ex = new ExportParams("牡丹花", "Sheet1"); - Workbook workbook = ExcelExportUtil.exportExcel(ex, PeonyExcelVO.class, peonyList); - downloadExcel("牡丹花", workbook, response); - } - - @ApiOperation(value = "导出全部", notes = "@author 卓大") - @PostMapping("/peony/export/all") - public void exportAll(@RequestBody @Validated PeonyQueryDTO queryDTO, HttpServletResponse response) { - //查询数据 - List peonyList = peonyService.queryAllExportData(queryDTO); - //导出操作 - ExportParams ex = new ExportParams("牡丹花", "Sheet1"); - Workbook workbook = ExcelExportUtil.exportExcel(ex, PeonyExcelVO.class, peonyList); - downloadExcel("牡丹花", workbook, response); - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/dao/PeonyDao.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/dao/PeonyDao.java deleted file mode 100644 index bc131bb3..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/dao/PeonyDao.java +++ /dev/null @@ -1,64 +0,0 @@ -package net.lab1024.smartadmin.module.business.peony.dao; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.core.metadata.IPage; -import net.lab1024.smartadmin.module.business.peony.domain.dto.PeonyQueryDTO; -import net.lab1024.smartadmin.module.business.peony.domain.entity.PeonyEntity; -import net.lab1024.smartadmin.module.business.peony.domain.vo.PeonyVO; -import net.lab1024.smartadmin.module.business.peony.domain.vo.PeonyExcelVO; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; -import org.springframework.stereotype.Component; - -import java.util.List; - -/** - * [ 牡丹花 ] - * - * @author 卓大 - * @version 1.0 - * @company 1024创新实验室( www.1024lab.net ) - * @copyright (c) 1024创新实验室( www.1024lab.net )Inc. All rights reserved. - * @date 2020-04-06 18:17:56 - * @since JDK1.8 - */ -@Mapper -@Component -public interface PeonyDao extends BaseMapper { - - /** - * 分页查询 - * @param queryDTO - * @return PeonyVO - */ - IPage queryByPage(Page page, @Param("queryDTO") PeonyQueryDTO queryDTO); - - /** - * 根据id删除 - * @param id - * @return - */ - void deleteById(@Param("id") Long id); - - /** - * 根据id批量删除 - * @param idList - * @return - */ - void deleteByIdList(@Param("idList") List idList); - - /** - * 查询所有导出数据 - * @param queryDTO - * @return - */ - List queryAllExportData(@Param("queryDTO") PeonyQueryDTO queryDTO); - - /** - * 查询批量导出数据 - * @param idList - * @return - */ - List queryBatchExportData(@Param("idList") List idList); -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/dto/PeonyAddDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/dto/PeonyAddDTO.java deleted file mode 100644 index 976a2593..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/dto/PeonyAddDTO.java +++ /dev/null @@ -1,41 +0,0 @@ -package net.lab1024.smartadmin.module.business.peony.domain.dto; - -import lombok.Data; -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; -import io.swagger.annotations.ApiModelProperty; - -/** - * 新建 [ 牡丹花 ] - * - * @author 卓大 - * @version 1.0 - * @company 1024创新实验室( www.1024lab.net ) - * @copyright (c) 2018 1024创新实验室( www.1024lab.net )Inc. All rights reserved. - * @date 2020-04-06 18:17:56 - * @since JDK1.8 - */ -@Data -public class PeonyAddDTO { - @ApiModelProperty("品种") - private String kind; - - @ApiModelProperty("名字") - private String name; - - @ApiModelProperty("颜色") - private String color; - - @ApiModelProperty("图片链接") - private String imageUrl; - - @ApiModelProperty("创建时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private Date createTime; - - @ApiModelProperty("更新时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private Date updateTime; - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/dto/PeonyQueryDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/dto/PeonyQueryDTO.java deleted file mode 100644 index 9841f01d..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/dto/PeonyQueryDTO.java +++ /dev/null @@ -1,44 +0,0 @@ -package net.lab1024.smartadmin.module.business.peony.domain.dto; - -import net.lab1024.smartadmin.common.domain.PageParamDTO; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import java.util.Date; - -/** - * [ 牡丹花 ] - * - * @author 卓大 - * @version 1.0 - * @company 1024创新实验室( www.1024lab.net ) - * @copyright (c) 1024创新实验室( www.1024lab.net )Inc. All rights reserved. - * @date 2020-04-06 18:17:56 - * @since JDK1.8 - */ -@Data -public class PeonyQueryDTO extends PageParamDTO { - - @ApiModelProperty("ID") - private Long id; - - @ApiModelProperty("品种") - private String kind; - - @ApiModelProperty("名字") - private String name; - - @ApiModelProperty("颜色") - private String color; - - @ApiModelProperty("创建时间-开始") - private Date createTimeBegin; - - @ApiModelProperty("创建时间-截止") - private Date createTimeEnd; - - @ApiModelProperty("上次更新时间-开始") - private Date updateTimeBegin; - - @ApiModelProperty("上次更新创建时间-开始") - private Date updateTimeEnd; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/dto/PeonyUpdateDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/dto/PeonyUpdateDTO.java deleted file mode 100644 index 7d7ca820..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/dto/PeonyUpdateDTO.java +++ /dev/null @@ -1,20 +0,0 @@ -package net.lab1024.smartadmin.module.business.peony.domain.dto; - -import lombok.Data; - -/** - * 更新 [ 牡丹花 ] - * - * @author 卓大 - * @version 1.0 - * @company 1024创新实验室( www.1024lab.net ) - * @copyright (c) 2018 1024创新实验室( www.1024lab.net )Inc. All rights reserved. - * @date 2020-04-06 18:17:56 - * @since JDK1.8 - */ -@Data -public class PeonyUpdateDTO extends PeonyAddDTO { - - private Long id; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/entity/PeonyEntity.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/entity/PeonyEntity.java deleted file mode 100644 index 48eb9d56..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/entity/PeonyEntity.java +++ /dev/null @@ -1,44 +0,0 @@ -package net.lab1024.smartadmin.module.business.peony.domain.entity; - -import com.baomidou.mybatisplus.annotation.TableName; -import net.lab1024.smartadmin.common.domain.BaseEntity; -import lombok.Data; - -/** - * [ 牡丹花 ] - * - * @author 卓大 - * @version 1.0 - * @company 1024创新实验室( www.1024lab.net ) - * @copyright (c) 1024创新实验室( www.1024lab.net )Inc. All rights reserved. - * @date 2020-04-06 18:17:56 - * @since JDK1.8 - */ -@Data -@TableName("t_peony") -public class PeonyEntity extends BaseEntity{ - - - /** - * 品种 - */ - private String kind; - - /** - * 名字 - */ - private String name; - - /** - * 颜色 - */ - private String color; - - /** - * 图片链接 - */ - private String imageUrl; - - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/vo/PeonyExcelVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/vo/PeonyExcelVO.java deleted file mode 100644 index 8964433f..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/vo/PeonyExcelVO.java +++ /dev/null @@ -1,42 +0,0 @@ -package net.lab1024.smartadmin.module.business.peony.domain.vo; - -import cn.afterturn.easypoi.excel.annotation.Excel; -import lombok.Data; -import java.util.Date; - -/** - * [ 牡丹花 ] - * - * @author 卓大 - * @version 1.0 - * @company 1024创新实验室( www.1024lab.net ) - * @copyright (c) 1024创新实验室( www.1024lab.net )Inc. All rights reserved. - * @date 2020-04-06 18:17:56 - * @since JDK1.8 - */ -@Data -public class PeonyExcelVO { - @Excel(name = "ID") - private Long id; - - @Excel(name = "品种") - private String kind; - - @Excel(name = "名字") - private String name; - - @Excel(name = "颜色") - private String color; - - @Excel(name = "图片链接") - private String imageUrl; - - @Excel(name = "创建时间", format = "yyyy-MM-dd HH:mm:ss") - private Date createTime; - - @Excel(name = "更新时间", format = "yyyy-MM-dd HH:mm:ss") - private Date updateTime; - - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/vo/PeonyVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/vo/PeonyVO.java deleted file mode 100644 index 06590916..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/vo/PeonyVO.java +++ /dev/null @@ -1,45 +0,0 @@ -package net.lab1024.smartadmin.module.business.peony.domain.vo; - -import lombok.Data; -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; -import io.swagger.annotations.ApiModelProperty; - -/** - * [ 牡丹花 ] - * - * @author 卓大 - * @version 1.0 - * @company 1024创新实验室( www.1024lab.net ) - * @copyright (c) 1024创新实验室( www.1024lab.net )Inc. All rights reserved. - * @date 2020-04-06 18:17:56 - * @since JDK1.8 - */ -@Data -public class PeonyVO { - @ApiModelProperty("ID") - private Long id; - - @ApiModelProperty("品种") - private String kind; - - @ApiModelProperty("名字") - private String name; - - @ApiModelProperty("颜色") - private String color; - - @ApiModelProperty("图片链接") - private String imageUrl; - - @ApiModelProperty("创建时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private Date createTime; - - @ApiModelProperty("更新时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private Date updateTime; - - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/service/PeonyService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/service/PeonyService.java deleted file mode 100644 index 50bfbb44..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/service/PeonyService.java +++ /dev/null @@ -1,108 +0,0 @@ -package net.lab1024.smartadmin.module.business.peony.service; - -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import net.lab1024.smartadmin.common.domain.PageResultDTO; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.module.business.peony.dao.PeonyDao; -import net.lab1024.smartadmin.module.business.peony.domain.dto.PeonyAddDTO; -import net.lab1024.smartadmin.module.business.peony.domain.dto.PeonyUpdateDTO; -import net.lab1024.smartadmin.module.business.peony.domain.dto.PeonyQueryDTO; -import net.lab1024.smartadmin.module.business.peony.domain.entity.PeonyEntity; -import net.lab1024.smartadmin.module.business.peony.domain.vo.PeonyVO; -import net.lab1024.smartadmin.module.business.peony.domain.vo.PeonyExcelVO; -import net.lab1024.smartadmin.util.SmartPageUtil; -import net.lab1024.smartadmin.util.SmartBeanUtil; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -/** - * [ 牡丹花 ] - * - * @author 卓大 - * @version 1.0 - * @company 1024创新实验室( www.1024lab.net ) - * @copyright (c) 1024创新实验室( www.1024lab.net )Inc. All rights reserved. - * @date 2020-04-06 18:17:56 - * @since JDK1.8 - */ -@Service -public class PeonyService { - - @Autowired - private PeonyDao peonyDao; - - /** - * 根据id查询 - */ - public PeonyEntity getById(Long id){ - return peonyDao.selectById(id); - } - - /** - * 分页查询 - * @author 卓大 - * @date 2020-04-06 18:17:56 - */ - public ResponseDTO> queryByPage(PeonyQueryDTO queryDTO) { - Page page = SmartPageUtil.convert2QueryPage(queryDTO); - IPage voList = peonyDao.queryByPage(page, queryDTO); - PageResultDTO pageResultDTO = SmartPageUtil.convert2PageResult(voList); - return ResponseDTO.succData(pageResultDTO); - } - - /** - * 添加 - * @author 卓大 - * @date 2020-04-06 18:17:56 - */ - public ResponseDTO add(PeonyAddDTO addDTO) { - PeonyEntity entity = SmartBeanUtil.copy(addDTO, PeonyEntity.class); - peonyDao.insert(entity); - return ResponseDTO.succ(); - } - - /** - * 编辑 - * @author 卓大 - * @date 2020-04-06 18:17:56 - */ - @Transactional(rollbackFor = Exception.class) - public ResponseDTO update(PeonyUpdateDTO updateDTO) { - PeonyEntity entity = SmartBeanUtil.copy(updateDTO, PeonyEntity.class); - peonyDao.updateById(entity); - return ResponseDTO.succ(); - } - - /** - * 删除 - * @author 卓大 - * @date 2020-04-06 18:17:56 - */ - @Transactional(rollbackFor = Exception.class) - public ResponseDTO deleteByIds(List idList) { - peonyDao.deleteByIdList(idList); - return ResponseDTO.succ(); - } - - /** - * 查询全部导出对象 - * @author 卓大 - * @date 2020-04-06 18:17:56 - */ - public List queryAllExportData(PeonyQueryDTO queryDTO) { - return peonyDao.queryAllExportData( queryDTO); - } - - /** - * 批量查询导出对象 - * @author 卓大 - * @date 2020-04-06 18:17:56 - */ - public List queryBatchExportData(List idList) { - return peonyDao.queryBatchExportData(idList); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/constant/SqlOperateTypeEnum.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/constant/SqlOperateTypeEnum.java deleted file mode 100644 index 943e1c36..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/constant/SqlOperateTypeEnum.java +++ /dev/null @@ -1,34 +0,0 @@ -package net.lab1024.smartadmin.module.support.codegenerator.constant; - - -/** - * [ gt,lt 目前只支持Date] - * - * @author yandanyang - * @version 1.0 - * @since JDK1.8 - */ -public enum SqlOperateTypeEnum{ - - - LIKE(1, "like"), - EQUALS(2, "equals"), - IN(3, "in"); - - private Integer type; - - private String name; - - SqlOperateTypeEnum(Integer type, String name) { - this.type = type; - this.name = name; - } - - public Integer getType() { - return type; - } - - public String getName() { - return name; - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/dao/TableDao.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/dao/TableDao.java deleted file mode 100644 index f8d005ab..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/dao/TableDao.java +++ /dev/null @@ -1,40 +0,0 @@ -package net.lab1024.smartadmin.module.support.codegenerator.dao; - -import net.lab1024.smartadmin.module.support.codegenerator.domain.ColumnVO; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; -import org.springframework.stereotype.Component; - -import java.util.List; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/5/10 0010 下午 18:59 - * @since JDK1.8 - */ -@Mapper -@Component -public interface TableDao { - - - /** - * 查询表描述 - * @param tableName - * @return - */ - String selectTableDesc(@Param("tableName") String tableName); - - /** - * 查询表列信息 - * @param tableName - * @return - */ - List selectTableColumn(@Param("tableName") String tableName); - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/domain/CodeGeneratorDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/domain/CodeGeneratorDTO.java deleted file mode 100644 index 4995aa57..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/domain/CodeGeneratorDTO.java +++ /dev/null @@ -1,56 +0,0 @@ -package net.lab1024.smartadmin.module.support.codegenerator.domain; - -import lombok.Builder; -import lombok.Data; - -import java.util.List; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/5/11 0011 上午 10:12 - * @since JDK1.8 - */ -@Data -@Builder -public class CodeGeneratorDTO { - - /** - * 需要生成代码的表名 - */ - private String tableName; - - /** - * 表前缀 - */ - private String tablePrefix; - - /** - * 基础包路径 - */ - private String basePackage; - - /** - * module下的子包 - */ - private String modulePackage; - - /** - * 公司 - */ - private String company; - - /** - * 作者 - */ - private String author; - - /** - * 需要构建查询方法的列 - */ - private List queryColumnList; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/domain/CodeGeneratorQueryColumnDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/domain/CodeGeneratorQueryColumnDTO.java deleted file mode 100644 index 9e1bd054..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/domain/CodeGeneratorQueryColumnDTO.java +++ /dev/null @@ -1,30 +0,0 @@ -package net.lab1024.smartadmin.module.support.codegenerator.domain; - -import net.lab1024.smartadmin.module.support.codegenerator.constant.SqlOperateTypeEnum; -import lombok.Builder; -import lombok.Data; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/5/11 0011 上午 10:13 - * @since JDK1.8 - */ -@Data -@Builder -public class CodeGeneratorQueryColumnDTO { - - /** - * 生成查询方法的查询列名 - */ - private String columnName; - - /** - * 此列的查询动作 - */ - private SqlOperateTypeEnum sqlOperate; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/domain/ColumnVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/domain/ColumnVO.java deleted file mode 100644 index 9bec4d9f..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/domain/ColumnVO.java +++ /dev/null @@ -1,36 +0,0 @@ -package net.lab1024.smartadmin.module.support.codegenerator.domain; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/5/10 0010 下午 17:55 - * @since JDK1.8 - */ -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class ColumnVO { - - private String columnName; - - private String columnType; - - private String columnDesc; - - private String fieldType; - - private String fieldName; - - private Boolean isNumber; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/domain/QueryFieldVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/domain/QueryFieldVO.java deleted file mode 100644 index c2afcc53..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/domain/QueryFieldVO.java +++ /dev/null @@ -1,30 +0,0 @@ -package net.lab1024.smartadmin.module.support.codegenerator.domain; - -import lombok.Builder; -import lombok.Data; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/5/10 0010 下午 17:56 - * @since JDK1.8 - */ -@Data -@Builder -public class QueryFieldVO { - - private String fieldName; - - private String columnName; - - private String columnDesc; - - private String fieldType; - - private String sqlOperate; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/service/CodeGeneratorComponent.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/service/CodeGeneratorComponent.java deleted file mode 100644 index 37ee4e87..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/service/CodeGeneratorComponent.java +++ /dev/null @@ -1,92 +0,0 @@ -package net.lab1024.smartadmin.module.support.codegenerator.service; - -import com.google.common.base.CaseFormat; -import org.springframework.stereotype.Component; - -import java.io.File; -import java.util.HashMap; -import java.util.Map; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/5/11 0011 上午 8:33 - * @since JDK1.8 - */ -@Component -public class CodeGeneratorComponent { - - private static Map dataMap = new HashMap<>(16); - private static Map numberTypeMap = new HashMap<>(16); - - static { - dataMap(); - } - - public static void dataMap() { - numberTypeMap.put("int", "Integer"); - numberTypeMap.put("tinyint", "Integer"); - numberTypeMap.put("smallint", "Integer"); - numberTypeMap.put("integer", "Integer"); - numberTypeMap.put("bigint", "Long"); - numberTypeMap.put("float", "Float"); - numberTypeMap.put("double", "Double"); - numberTypeMap.put("decimal", "BigDecimal"); - - dataMap.put("char", "String"); - dataMap.put("varchar", "String"); - dataMap.put("tinytext", "String"); - dataMap.put("text", "String"); - dataMap.put("longtext", "String"); - - dataMap.put("date", "Date"); - dataMap.put("datetime", "Date"); - dataMap.put("timestamp", "Date"); - - } - - - public Map codeTemplates(String moduleClass, String basePackage, String modulePackage) { - String modulePath = modulePackage.replaceAll("\\.", "/"); - String javaPackagePath = "java/" + modulePath + File.separator; - String xmlPackagePath = "mapper/" + modulePath + File.separator; - String frontPackagePath = "web" + File.separator; - Map templateMap = new HashMap<>(); - //后端 - templateMap.put("templates/codegenerator/java/Controller.java.vm", javaPackagePath + "controller" + File.separator + moduleClass + "Controller.java"); - templateMap.put("templates/codegenerator/java/Dao.java.vm", javaPackagePath + "dao" + File.separator + moduleClass + "Dao.java"); - templateMap.put("templates/codegenerator/java/Dao.xml.vm", xmlPackagePath + moduleClass + "Mapper.xml"); - templateMap.put("templates/codegenerator/java/AddDTO.java.vm", javaPackagePath + "domain" + File.separator + "dto" + File.separator + moduleClass + "AddDTO.java"); - templateMap.put("templates/codegenerator/java/UpdateDTO.java.vm", javaPackagePath + "domain" + File.separator + "dto" + File.separator + moduleClass + "UpdateDTO.java"); - templateMap.put("templates/codegenerator/java/Entity.java.vm", javaPackagePath + "domain" + File.separator + "entity" + File.separator + moduleClass + "Entity.java"); - templateMap.put("templates/codegenerator/java/VO.java.vm", javaPackagePath + "domain" + File.separator + "vo" + File.separator + moduleClass + "VO.java"); - templateMap.put("templates/codegenerator/java/ExcelVO.java.vm", javaPackagePath + "domain" + File.separator + "vo" + File.separator + moduleClass + "ExcelVO.java"); - templateMap.put("templates/codegenerator/java/QueryDTO.java.vm", javaPackagePath + "domain" + File.separator + "dto" + File.separator + moduleClass + "QueryDTO.java"); - templateMap.put("templates/codegenerator/java/Service.java.vm", javaPackagePath + "service" + File.separator + moduleClass + "Service.java"); - //前端 - String webPackageName = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, moduleClass).replaceAll("_", "-"); - templateMap.put("templates/codegenerator/web/Api.js.vm", frontPackagePath + "api" + File.separator + webPackageName + ".js"); - templateMap.put("templates/codegenerator/web/Router.js.vm", frontPackagePath + "router" + File.separator + webPackageName + ".js"); - templateMap.put("templates/codegenerator/web/List.vue.vm", frontPackagePath + webPackageName + File.separator + webPackageName + "-list.vue"); - templateMap.put("templates/codegenerator/web/ListForm.vue.vm", frontPackagePath + webPackageName + File.separator + "components" + File.separator + webPackageName + "-list-form.vue"); - return templateMap; - } - - public String getJavaType(String mysqlType) { - String javaType = dataMap.get(mysqlType); - if (javaType == null) { - javaType = numberTypeMap.get(mysqlType); - } - return javaType; - } - - public boolean isNumber(String mysqlType) { - return numberTypeMap.containsKey(mysqlType); - } - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/service/CodeGeneratorService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/service/CodeGeneratorService.java deleted file mode 100644 index b2b6585d..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/service/CodeGeneratorService.java +++ /dev/null @@ -1,336 +0,0 @@ -package net.lab1024.smartadmin.module.support.codegenerator.service; - -import com.google.common.base.CaseFormat; -import net.lab1024.smartadmin.module.support.codegenerator.dao.TableDao; -import net.lab1024.smartadmin.module.support.codegenerator.domain.CodeGeneratorDTO; -import net.lab1024.smartadmin.module.support.codegenerator.domain.CodeGeneratorQueryColumnDTO; -import net.lab1024.smartadmin.module.support.codegenerator.domain.ColumnVO; -import net.lab1024.smartadmin.module.support.codegenerator.domain.QueryFieldVO; -import net.lab1024.smartadmin.util.SmartDateUtil; -import com.google.common.collect.Lists; -import lombok.extern.slf4j.Slf4j; -import net.lab1024.smartadmin.util.SmartStringUtil; -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.lang.WordUtils; -import org.apache.commons.lang3.StringUtils; -import org.apache.velocity.Template; -import org.apache.velocity.VelocityContext; -import org.apache.velocity.app.Velocity; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.util.ResourceUtils; - -import javax.swing.filechooser.FileSystemView; -import java.io.File; -import java.io.FileWriter; -import java.util.*; -import java.util.Map.Entry; -import java.util.stream.Collectors; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/5/11 0011 上午 9:36 - * @since JDK1.8 - */ -@Slf4j -@Service -public class CodeGeneratorService { - - @Autowired - private TableDao tableDao; - - @Autowired - private CodeGeneratorComponent codeGeneratorComponent; - - /** - * 大家注意了开始生成代码了 - * - * @param codeGenerator - * @throws Exception - */ - public void codeGenerator(CodeGeneratorDTO codeGenerator) throws Exception { - this.basicValid(codeGenerator); - String date = SmartDateUtil.formatYMDHMS(new Date()); - String tableDesc = this.getTableDesc(codeGenerator.getTableName()); - String author = codeGenerator.getAuthor(); - String basePackage = codeGenerator.getBasePackage(); - if (StringUtils.isEmpty(basePackage)) { - basePackage = "net.lab1024.smartadmin"; - } - String moduleClass = this.tableName2Class(codeGenerator.getTableName(), codeGenerator.getTablePrefix()); - String moduleVar = this.tableName2Var(codeGenerator.getTableName(), codeGenerator.getTablePrefix()); - String modulePackage = codeGenerator.getModulePackage(); - - List columnList = this.columnList(codeGenerator.getTableName()); - List queryFieldList = this.buildQueryField(codeGenerator, columnList); - Map codeTemplates = codeGeneratorComponent.codeTemplates(moduleClass, basePackage, modulePackage); - List queryImports = this.buildQueryImport(queryFieldList); - List dtoImports = this.buildDTOImport(columnList); - List entityImports = this.buildEntityImport(columnList); - Properties p = new Properties(); - p.put("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); - p.put("directive.foreach.counter.name", "velocityCount"); - p.put("directive.foreach.counter.initial.value", "1"); - Velocity.init(p); - Map map = new HashMap<>(); - map.put("company", codeGenerator.getCompany()); - map.put("tableName", codeGenerator.getTableName()); - map.put("basePackage", basePackage); - map.put("modulePackage", modulePackage); - map.put("moduleClass", moduleClass); - map.put("tableDesc", tableDesc); - map.put("author", author); - map.put("date", date); - map.put("moduleVar", moduleVar); - map.put("columnList", columnList); - map.put("queryFieldList", queryFieldList); - map.put("queryImports", queryImports); - map.put("dtoImports", dtoImports); - map.put("entityImports", entityImports); - map.put("webModuleName", CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, moduleClass).replaceAll("_", "-")); - map.put("upperCamel", CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_CAMEL, moduleClass)); - //前端的变量 - map.put("ViewUIMessage", "$Message"); - map.put("VueRefs", "$refs"); - VelocityContext context = new VelocityContext(map); - this.codeGenerator(context, codeTemplates); - } - - private List buildQueryImport(List queryFieldList) { - List queryImports = Lists.newArrayList(); - if (CollectionUtils.isNotEmpty(queryFieldList)) { - queryFieldList.forEach(e -> { - importPackage(queryImports, e.getFieldType()); - if ("in".equals(e.getSqlOperate())) { - queryImports.add("import java.util.List;"); - } - }); - } - return queryImports; - } - - private List buildDTOImport(List columnList) { - List dtoImports = Lists.newArrayList(); - if (CollectionUtils.isNotEmpty(columnList)) { - columnList.forEach(e -> { - importPackage(dtoImports, e.getFieldType()); - }); - } - return dtoImports; - } - - private List buildEntityImport(List columnList) { - List entityImports = Lists.newArrayList(); - if (CollectionUtils.isNotEmpty(columnList)) { - columnList.forEach(e -> { - if (!e.getFieldName().equals("createTime") && !e.getFieldName().equals("updateTime") && !e.getFieldName().equals("id")) { - importPackage(entityImports, e.getFieldType()); - } - }); - } - return entityImports; - } - - private void importPackage(List imports, String fieldType) { - if ("Date".equals(fieldType) && !imports.contains("import java.util.Date;")) { - imports.add("import java.util.Date;"); - } - if ("BigDecimal".equals(fieldType) && !imports.contains("import java.math.BigDecimal;")) { - imports.add("import java.math.BigDecimal;"); - } - } - - private String getOutputDir() { - File desktopDir = FileSystemView.getFileSystemView().getHomeDirectory(); - return desktopDir.getAbsolutePath() + File.separator + "smart-admin" + File.separator; - } - - /** - * 生成代码 - * - * @param context - * @param codeTemplates - */ - private void codeGenerator(VelocityContext context, Map codeTemplates) throws Exception { - String projectPath = getOutputDir(); - - Velocity.setProperty("input.encoding", "UTF-8"); - Velocity.setProperty("output.encoding", "UTF-8"); - - for (Entry entry : codeTemplates.entrySet()) { - String template = entry.getKey(); - String filePath = projectPath + entry.getValue(); - String fileName = filePath.substring(filePath.lastIndexOf(File.separator) + 1); - String fileDir = filePath.replace(fileName, ""); - File directory = new File(fileDir); - if (!directory.exists()) { - directory.mkdirs(); - } - FileWriter writer; - try { - writer = new FileWriter(filePath); - Template tpl = Velocity.getTemplate(template, "UTF-8"); - tpl.merge(context, writer); - writer.flush(); - writer.close(); - } catch (Exception e) { - log.error("", e); - } - } - - log.info("------------------------------ 代 码 生 成 完 毕 ! ------------------------------"); - log.info("代码目录:{}", projectPath); - log.info("------------------------------ 代 码 生 成 完 毕 ! ------------------------------"); - - } - - public static void main(String[] args) { - try { - int i = 1 / 0; - } catch (Exception e) { - log.error("", e); - } - } - - private void basicValid(CodeGeneratorDTO codeGenerator) throws Exception { - if (StringUtils.isEmpty(codeGenerator.getTableName())) { - throw new Exception("你没建表吗?"); - } - if (StringUtils.isEmpty(codeGenerator.getTablePrefix())) { - throw new Exception("你的表没前缀吗?"); - } - if (StringUtils.isEmpty(codeGenerator.getAuthor())) { - throw new Exception("输入下你的大名"); - } - } - - /** - * 构建查询集合 - * - * @param codeGenerator - * @param columnList - * @return - * @throws Exception - */ - private List buildQueryField(CodeGeneratorDTO codeGenerator, List columnList) throws Exception { - List queryFieldList = Lists.newArrayList(); - Map storageMap = columnList.stream().collect(Collectors.toMap(ColumnVO::getColumnName, e -> e)); - List queryColumnList = codeGenerator.getQueryColumnList(); - if (CollectionUtils.isEmpty(queryColumnList)) { - return queryFieldList; - } - for (CodeGeneratorQueryColumnDTO queryColumn : queryColumnList) { - ColumnVO columnDTO = storageMap.get(queryColumn.getColumnName()); - if (columnDTO == null) { - String errorMsg = "sql列[" + queryColumn.getColumnName() + "]在表[" + codeGenerator.getTableName() + "]中不存在。"; - log.error(errorMsg); - throw new Exception(errorMsg); - } - QueryFieldVO queryField = - QueryFieldVO.builder().fieldName(columnDTO.getFieldName()).fieldType(columnDTO.getFieldType()).columnName(columnDTO.getColumnName()).columnDesc(columnDTO.getColumnDesc()).sqlOperate(queryColumn.getSqlOperate().getName()).build(); - queryFieldList.add(queryField); - } - return queryFieldList; - } - - /** - * 列数据 组合 - * - * @param tableName - * @return - * @throws Exception - */ - private List columnList(String tableName) throws Exception { - List list = tableDao.selectTableColumn(tableName); - for (ColumnVO column : list) { - String javaType = codeGeneratorComponent.getJavaType(column.getColumnType()); - if (StringUtils.isEmpty(javaType)) { - String errorMsg = "sql数据类型[" + column.getColumnType() + "]缺少对应的java类型。"; - log.error(errorMsg); - throw new Exception(errorMsg); - } - if ("Integer".equals(javaType) && column.getColumnName().contains("id")) { - column.setFieldType("Long"); - } else { - column.setFieldType(javaType); - } - column.setFieldName(this.columnName2Field(column.getColumnName())); - if (SmartStringUtil.isBlank(column.getColumnDesc())) { - column.setColumnDesc(column.getColumnName()); - } - - column.setIsNumber(codeGeneratorComponent.isNumber(column.getColumnType())); - } - return list; - } - - /** - * 获取列注释为类描述 - * - * @param tableName - * @return - */ - private String getTableDesc(String tableName) { - return tableDao.selectTableDesc(tableName); - } - - /** - * 列名转字段名 - * - * @param columnName - * @return - */ - private String columnName2Field(String columnName) { - String transName = WordUtils.capitalizeFully(columnName, new char[]{'_'}).replace("_", ""); - return WordUtils.uncapitalize(transName); - } - - /** - * 表名转类名前缀 - * - * @param tableName - * @param tablePrefix - * @return - */ - private String tableName2Class(String tableName, String tablePrefix) { - if (StringUtils.isNotBlank(tablePrefix)) { - tableName = tableName.replaceFirst(tablePrefix, ""); - } - return WordUtils.capitalizeFully(tableName, new char[]{'_'}).replace("_", ""); - } - - /** - * 表名转包名 - * - * @param tableName - * @param tablePrefix - * @return - */ - private String tableName2Package(String tableName, String tablePrefix) { - if (StringUtils.isNotBlank(tablePrefix)) { - tableName = tableName.replaceFirst(tablePrefix, ""); - } - return tableName.replace("_", ""); - } - - /** - * 表名转 java变量前缀 - * - * @param tableName - * @param tablePrefix - * @return - */ - private String tableName2Var(String tableName, String tablePrefix) { - if (StringUtils.isNotBlank(tablePrefix)) { - tableName = tableName.replaceFirst(tablePrefix, ""); - } - String transName = WordUtils.capitalizeFully(tableName, new char[]{'_'}).replace("_", ""); - return WordUtils.uncapitalize(transName); - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/FileController.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/FileController.java deleted file mode 100644 index 001e99d2..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/FileController.java +++ /dev/null @@ -1,93 +0,0 @@ -package net.lab1024.smartadmin.module.support.file; - -import net.lab1024.smartadmin.common.anno.NoNeedLogin; -import net.lab1024.smartadmin.common.domain.PageResultDTO; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.constant.SwaggerTagConst; -import net.lab1024.smartadmin.module.support.file.constant.FileServiceTypeEnum; -import net.lab1024.smartadmin.module.support.file.domain.dto.FileAddDTO; -import net.lab1024.smartadmin.module.support.file.domain.dto.FileQueryDTO; -import net.lab1024.smartadmin.module.support.file.domain.vo.FileVO; -import net.lab1024.smartadmin.module.support.file.domain.vo.UploadVO; -import net.lab1024.smartadmin.module.support.file.service.FileService; -import net.lab1024.smartadmin.module.system.login.domain.RequestTokenBO; -import net.lab1024.smartadmin.util.SmartRequestTokenUtil; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; - -import javax.servlet.http.HttpServletRequest; -import javax.validation.Valid; - -/** - * @Description: 文件服务 - * @Author: sbq - * @CreateDate: 2019/7/18 9:36 - * @Version: 1.0 - */ -@RestController -@Api(tags = {SwaggerTagConst.Admin.MANAGER_FILE}) -public class FileController { - - @Autowired - private FileService fileService; - - @ApiOperation(value = "文件本地上传", notes = "文件本地上传") - @PostMapping("/api/file/localUpload/{moduleType}") - public ResponseDTO localUpload(MultipartFile file, @PathVariable Integer moduleType) throws Exception { - return fileService.fileUpload(file, FileServiceTypeEnum.LOCAL, moduleType); - } - - @ApiOperation(value = "获取本地文件URL", notes = "获取文件URL") - @PostMapping("/api/file/get") - public ResponseDTO localGetFile(String path) { - return fileService.getFileUrl(path, FileServiceTypeEnum.LOCAL); - } - - @ApiOperation(value = "文件阿里云上传", notes = "文件阿里云上传") - @PostMapping("/api/file/aliYunUpload/{moduleType}") - public ResponseDTO aliYunUpload(MultipartFile file, @PathVariable Integer moduleType) throws Exception { - return fileService.fileUpload(file, FileServiceTypeEnum.ALI_OSS, moduleType); - } - - @ApiOperation(value = "获取阿里云文件URL", notes = "获取阿里云文件URL") - @PostMapping("/api/file/aliYunGet") - public ResponseDTO aliYunGet(String path) { - return fileService.getFileUrl(path, FileServiceTypeEnum.ALI_OSS); - } - - @ApiOperation(value = "文件七牛云上传", notes = "文件七牛云上传") - @PostMapping("/api/file/qiNiuUpload/{moduleType}") - public ResponseDTO qiNiuUpload(MultipartFile file, @PathVariable Integer moduleType) throws Exception { - return fileService.fileUpload(file, FileServiceTypeEnum.QI_NIU_OSS, moduleType); - } - - @ApiOperation(value = "获取七牛云文件URL", notes = "获取七牛云URL") - @PostMapping("/api/file/qiNiuGet") - public ResponseDTO qiNiuGet(String path) { - return fileService.getFileUrl(path, FileServiceTypeEnum.QI_NIU_OSS); - } - - @ApiOperation(value = "系统文件查询") - @PostMapping("/api/file/query") - public ResponseDTO> queryListByPage(@RequestBody FileQueryDTO queryDTO) { - return fileService.queryListByPage(queryDTO); - } - - @ApiOperation(value = "系统文件下载通用接口(流下载)") - @GetMapping("/api/file/downLoad") - @NoNeedLogin - public ResponseEntity downLoadById(Long id, HttpServletRequest request) { - return fileService.downLoadById(id, request); - } - - @ApiOperation(value = "系统文件保存通用接口") - @PostMapping("/api/file/save") - public ResponseDTO saveFile(@Valid @RequestBody FileAddDTO addDTO) { - RequestTokenBO requestToken = SmartRequestTokenUtil.getRequestUser(); - return fileService.saveFile(addDTO,requestToken); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/FileDao.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/FileDao.java deleted file mode 100644 index 3155bf25..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/FileDao.java +++ /dev/null @@ -1,72 +0,0 @@ -package net.lab1024.smartadmin.module.support.file; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import net.lab1024.smartadmin.module.support.file.domain.dto.FileDTO; -import net.lab1024.smartadmin.module.support.file.domain.dto.FileQueryDTO; -import net.lab1024.smartadmin.module.support.file.domain.entity.FileEntity; -import net.lab1024.smartadmin.module.support.file.domain.vo.FileVO; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; -import org.springframework.stereotype.Component; - -import java.util.List; - -/** - * @author cyj - * @date 2018-01-05 上午 9:49 - */ -@Mapper -@Component -public interface FileDao extends BaseMapper { - - /** - * 批量添加上传文件 - * - * @param fileDTOList - * @return - */ - Integer insertFileBatch(List fileDTOList); - - - /** - * 批量添加上传文件 - * - * @param fileDTOList - * @return - */ - Integer insertFileEntityBatch(List fileDTOList); - - /** - * 批量删除 - * - * @param moduleId - * @return - */ - Integer deleteFilesByModuleId(@Param("moduleId") String moduleId); - - /** - * 批量删除 - * - * @param moduleId - * @param moduleType - * @return - */ - Integer deleteFilesByModuleIdAndModuleType(@Param("moduleId") String moduleId, @Param("moduleType") String moduleType); - - /** - * @param moduleId - * @return - */ - List listFilesByModuleId(@Param("moduleId") String moduleId); - - List listFilesByFileIds(@Param("fileIds") List fileIds); - - List listFilesByModuleIdAndModuleType(@Param("moduleId") String moduleId, @Param("moduleType") String moduleType); - - List listFilesByModuleIdAndModuleTypes(@Param("moduleId") String moduleId, @Param("moduleTypes") List moduleTypes); - - List listFilesByModuleIdsAndModuleType(@Param("moduleIds") List moduleIds, @Param("moduleType") String moduleType); - - List queryListByPage(Page page, @Param("queryDTO") FileQueryDTO queryDTO); -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/constant/FileModuleTypeEnum.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/constant/FileModuleTypeEnum.java deleted file mode 100644 index 8052b767..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/constant/FileModuleTypeEnum.java +++ /dev/null @@ -1,47 +0,0 @@ -package net.lab1024.smartadmin.module.support.file.constant; - -import net.lab1024.smartadmin.common.domain.BaseEnum; - -/** - * [] - * - * @author yandanyang - * @version 1.0 - * @since JDK1.8 - */ -public enum FileModuleTypeEnum implements BaseEnum { - - /** - * path 首字符不能包含\ 或者/ - */ - - BACK_USER(1, "backUser/config", "backUser"), - - CODE_REVIEW(2, "codeReview", "CodeReview"); - - private Integer value; - - private String path; - - private String desc; - - FileModuleTypeEnum(Integer value, String path, String desc) { - this.value = value; - this.path = path; - this.desc = desc; - } - - public String getPath() { - return path; - } - - @Override - public Integer getValue() { - return this.value; - } - - @Override - public String getDesc() { - return this.desc; - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/constant/FileResponseCodeConst.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/constant/FileResponseCodeConst.java deleted file mode 100644 index fd5abfb9..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/constant/FileResponseCodeConst.java +++ /dev/null @@ -1,37 +0,0 @@ -package net.lab1024.smartadmin.module.support.file.constant; - -import net.lab1024.smartadmin.common.constant.ResponseCodeConst; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 - */ -public class FileResponseCodeConst extends ResponseCodeConst { - - /** - * 4001 -4999 - */ - public static final FileResponseCodeConst FILE_EMPTY = new FileResponseCodeConst(4001, "上传文件不存在!"); - - public static final FileResponseCodeConst FILE_SIZE_ERROR = new FileResponseCodeConst(4002, "上传文件超过%s,请重新上传!"); - - public static final FileResponseCodeConst UNKNOWN_FILE_TYPE = new FileResponseCodeConst(4003, "未知的文件类型!"); - - public static final FileResponseCodeConst LOCAL_UPDATE_PREFIX_ERROR = new FileResponseCodeConst(4004, "文件本地上传缺少URL前缀配置[local_upload_url_prefix]"); - - public static final FileResponseCodeConst UPLOAD_ERROR = new FileResponseCodeConst(4005, "上传失败"); - - public static final FileResponseCodeConst URL_ERROR = new FileResponseCodeConst(4006, "获取URL失败"); - - public static final FileResponseCodeConst FILE_MODULE_ERROR = new FileResponseCodeConst(4007, "文件目录类型错误"); - - public FileResponseCodeConst(int code, String msg) { - super(code, msg); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/constant/FileServiceNameConst.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/constant/FileServiceNameConst.java deleted file mode 100644 index 012cffbf..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/constant/FileServiceNameConst.java +++ /dev/null @@ -1,24 +0,0 @@ -package net.lab1024.smartadmin.module.support.file.constant; -/** - * 文件服务名称常量 - * - * @author listen - * @date 2019/08/27 15:24 - */ -public class FileServiceNameConst { - - /** - * 阿里OSS文件服务 - */ - public static final String ALI_OSS = "ali_oss"; - - /** - * 七牛文件服务 - */ - public static final String QI_NIU_OSS = "qi_niu_oss"; - - /** - * 本地文件服务 - */ - public static final String LOCAL = "local"; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/constant/FileServiceTypeEnum.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/constant/FileServiceTypeEnum.java deleted file mode 100644 index 793503fc..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/constant/FileServiceTypeEnum.java +++ /dev/null @@ -1,52 +0,0 @@ -package net.lab1024.smartadmin.module.support.file.constant; - -import net.lab1024.smartadmin.common.domain.BaseEnum; - -/** - * 文件服务枚举类 - * - * @author listen - * @date 2019年8月27日 14:27:16 - */ -public enum FileServiceTypeEnum implements BaseEnum { - - /** - * 本地文件服务 - */ - LOCAL(1, FileServiceNameConst.LOCAL, "本地文件服务"), - - /** - * 阿里OSS文件服务 - */ - ALI_OSS(2, FileServiceNameConst.ALI_OSS, "阿里OSS文件服务"), - - /** - * 七牛文件服务 - */ - QI_NIU_OSS(3, FileServiceNameConst.QI_NIU_OSS, "七牛文件服务"); - - private Integer locationType; - - private String serviceName; - - private String desc; - - FileServiceTypeEnum(Integer locationType, String serviceName, String desc) { - this.locationType = locationType; - this.serviceName = serviceName; - this.desc = desc; - } - - public String getServiceName() { - return serviceName; - } - @Override - public Integer getValue() { - return this.locationType; - } - - @Override - public String getDesc() { - return this.desc; - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/dto/FileAddDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/dto/FileAddDTO.java deleted file mode 100644 index b097df0a..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/dto/FileAddDTO.java +++ /dev/null @@ -1,39 +0,0 @@ -package net.lab1024.smartadmin.module.support.file.domain.dto; - -import net.lab1024.smartadmin.common.anno.ApiModelPropertyEnum; -import net.lab1024.smartadmin.common.validator.en.CheckEnum; -import net.lab1024.smartadmin.module.support.file.constant.FileServiceTypeEnum; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotBlank; - -/** -* @Description: 文件保存DTO -* @Author: sbq -* @CreateDate: 2019/9/11 15:05 -* @Version: 1.0 -*/ -@Data -public class FileAddDTO { - - @ApiModelProperty("相关业务id(无业务可写死一个id)") - @NotBlank(message = "相关业务id不能为空") - private String moduleId; - - @ApiModelProperty("相关业务类型(无模块写1)") - @NotBlank(message = "相关业务类型不能为空") - private String moduleType; - - @ApiModelPropertyEnum(enumDesc = "文件类型",value = FileServiceTypeEnum.class) - @CheckEnum(enumClazz = FileServiceTypeEnum.class,message = "文件类型错误") - private Integer fileLocationType; - - @ApiModelProperty("文件名称") - @NotBlank(message = "文件名称不能为空") - private String fileName; - - @ApiModelProperty("文件路径") - @NotBlank(message = "文件路径不能为空") - private String filePath; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/dto/FileDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/dto/FileDTO.java deleted file mode 100644 index 16491d85..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/dto/FileDTO.java +++ /dev/null @@ -1,58 +0,0 @@ -package net.lab1024.smartadmin.module.support.file.domain.dto; - -import net.lab1024.smartadmin.common.anno.ApiModelPropertyEnum; -import net.lab1024.smartadmin.module.support.file.constant.FileServiceTypeEnum; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.sql.Date; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 - */ -@Data -public class FileDTO { - - @ApiModelProperty("主键") - private Long id; - - @ApiModelProperty("相关业务id") - private String moduleId; - - @ApiModelProperty("相关业务类型") - private String moduleType; - - @ApiModelPropertyEnum(FileServiceTypeEnum.class) - private Integer fileLocationType; - - @ApiModelProperty("文件名称") - private String fileName; - - @ApiModelProperty("文件大小") - private String fileSize; - - @ApiModelProperty("文件类型") - private String fileType; - - @ApiModelProperty("文件路径") - private String filePath; - - @ApiModelProperty("上传人") - private Long createUser; - - @ApiModelProperty("updateTime") - private Date updateTime; - - @ApiModelProperty("创建时间") - private Date createTime; - - @ApiModelProperty("文件展示url(可用于下载,注:七牛云下载url要拼接 ?attname=文件名.jpg)") - private String fileUrl; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/dto/FileQueryDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/dto/FileQueryDTO.java deleted file mode 100644 index 85df6375..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/dto/FileQueryDTO.java +++ /dev/null @@ -1,33 +0,0 @@ -package net.lab1024.smartadmin.module.support.file.domain.dto; - -import net.lab1024.smartadmin.common.anno.ApiModelPropertyEnum; -import net.lab1024.smartadmin.common.domain.PageParamDTO; -import net.lab1024.smartadmin.common.validator.en.CheckEnum; -import net.lab1024.smartadmin.module.support.file.constant.FileModuleTypeEnum; -import net.lab1024.smartadmin.module.support.file.constant.FileServiceTypeEnum; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @Description: 文件信息查询dto - * @Author: sbq - * @CreateDate: 2019/7/3 17:38 - * @Version: 1.0 - */ -@Data -public class FileQueryDTO extends PageParamDTO { - - @ApiModelProperty(value = "文件名称") - private String fileName; - - @ApiModelProperty(value = "业务类型") - @ApiModelPropertyEnum(FileModuleTypeEnum.class) - @CheckEnum(enumClazz = FileModuleTypeEnum.class, message = "文件业务类型错误") - private Integer moduleType; - - @ApiModelProperty(value = "文件位置") - @ApiModelPropertyEnum(FileServiceTypeEnum.class) - @CheckEnum(enumClazz = FileServiceTypeEnum.class, message = "文件位置类型错误") - private Integer fileLocationType; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/dto/OSSConfig.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/dto/OSSConfig.java deleted file mode 100644 index 112ad4eb..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/dto/OSSConfig.java +++ /dev/null @@ -1,35 +0,0 @@ -package net.lab1024.smartadmin.module.support.file.domain.dto; - -import lombok.Data; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/5/11 0011 下午 16:05 - * @since JDK1.8 - */ -@Data -public class OSSConfig { - - private String endpoint; - - private String accessKeyId; - - private String accessKeySecret; - - private String bucketName; - - @Override - public String toString() { - return "OSSConfig{" + - "endpoint='" + endpoint + '\'' + - ", accessKeyId='" + accessKeyId + '\'' + - ", accessKeySecret='" + accessKeySecret + '\'' + - ", bucketName='" + bucketName + '\'' + - '}'; - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/entity/FileEntity.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/entity/FileEntity.java deleted file mode 100644 index 38b0db3d..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/entity/FileEntity.java +++ /dev/null @@ -1,58 +0,0 @@ -package net.lab1024.smartadmin.module.support.file.domain.entity; - -import com.baomidou.mybatisplus.annotation.TableName; -import net.lab1024.smartadmin.common.domain.BaseEntity; -import lombok.Data; - - -/** - * - * [ ] - * - * @version 1.0 - * @since JDK1.8 - * @author yandanyang - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - */ -@Data -@TableName(value = "t_file") -public class FileEntity extends BaseEntity { - - - /** - * 相关业务id - */ - private String moduleId; - /** - * 相关业务类型 - */ - private String moduleType; - /** - * 文件位置类型 - */ - private Integer fileLocationType; - /** - * 文件名称 - */ - private String fileName; - /** - * 文件大小 - */ - private String fileSize; - /** - * 文件类型,程序中枚举控制,文件类型:如身份证正面,三证合一等等 - */ - private String fileType; - /** - * 文件key,用于文件下载 - */ - private String filePath; - /** - * 创建人,即上传人 - */ - private Long createrUser; - -} - diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/vo/FileVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/vo/FileVO.java deleted file mode 100644 index 7f101482..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/vo/FileVO.java +++ /dev/null @@ -1,58 +0,0 @@ -package net.lab1024.smartadmin.module.support.file.domain.vo; - -import net.lab1024.smartadmin.common.anno.ApiModelPropertyEnum; -import net.lab1024.smartadmin.module.support.file.constant.FileServiceTypeEnum; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.sql.Date; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 - */ -@Data -public class FileVO { - - @ApiModelProperty("主键") - private Long id; - - @ApiModelProperty("相关业务id") - private String moduleId; - - @ApiModelProperty("相关业务类型") - private String moduleType; - - @ApiModelPropertyEnum(FileServiceTypeEnum.class) - private Integer fileLocationType; - - @ApiModelProperty("文件名称") - private String fileName; - - @ApiModelProperty("文件大小") - private String fileSize; - - @ApiModelProperty("文件类型") - private String fileType; - - @ApiModelProperty("文件路径") - private String filePath; - - @ApiModelProperty("上传人") - private Long createUser; - - @ApiModelProperty("updateTime") - private Date updateTime; - - @ApiModelProperty("创建时间") - private Date createTime; - - @ApiModelProperty("文件展示url(可用于下载,注:七牛云下载url要拼接 ?attname=文件名.jpg)") - private String fileUrl; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/vo/UploadVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/vo/UploadVO.java deleted file mode 100644 index f878e7a7..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/vo/UploadVO.java +++ /dev/null @@ -1,27 +0,0 @@ -package net.lab1024.smartadmin.module.support.file.domain.vo; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2018/12/11 0011 上午 10:57 - * @since JDK1.8 - */ -@Data -public class UploadVO { - - @ApiModelProperty(value = "文件名称") - private String fileName; - @ApiModelProperty(value = "url") - private String url; - @ApiModelProperty(value = "filePath") - private String filePath; - @ApiModelProperty(value = "文件大小") - private Long fileSize; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/FileService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/FileService.java deleted file mode 100644 index 9f645620..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/FileService.java +++ /dev/null @@ -1,198 +0,0 @@ -package net.lab1024.smartadmin.module.support.file.service; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import net.lab1024.smartadmin.common.domain.PageResultDTO; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.module.support.file.FileDao; -import net.lab1024.smartadmin.module.support.file.constant.FileModuleTypeEnum; -import net.lab1024.smartadmin.module.support.file.constant.FileResponseCodeConst; -import net.lab1024.smartadmin.module.support.file.constant.FileServiceTypeEnum; -import net.lab1024.smartadmin.module.support.file.domain.dto.FileAddDTO; -import net.lab1024.smartadmin.module.support.file.domain.dto.FileDTO; -import net.lab1024.smartadmin.module.support.file.domain.dto.FileQueryDTO; -import net.lab1024.smartadmin.module.support.file.domain.entity.FileEntity; -import net.lab1024.smartadmin.module.support.file.domain.vo.FileVO; -import net.lab1024.smartadmin.module.support.file.domain.vo.UploadVO; -import net.lab1024.smartadmin.module.system.login.domain.RequestTokenBO; -import net.lab1024.smartadmin.util.SmartBaseEnumUtil; -import net.lab1024.smartadmin.util.SmartBeanUtil; -import net.lab1024.smartadmin.util.SmartPageUtil; -import com.google.common.collect.Lists; -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Service; -import org.springframework.web.multipart.MultipartFile; - -import javax.servlet.http.HttpServletRequest; -import java.time.LocalDateTime; -import java.util.Arrays; -import java.util.Date; -import java.util.List; -import java.util.stream.Collectors; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 - */ -@Service -public class FileService { - - @Autowired - private FileDao fileDao; - - @Autowired - private java.util.Map fileServiceMap; - - /** - * 获取文件服务实现 - * - * @param typeEnum - * @return - */ - private IFileService getFileService(FileServiceTypeEnum typeEnum) { - /** - * 获取文件服务 - */ - String serviceName = typeEnum.getServiceName(); - IFileService fileService = fileServiceMap.get(serviceName); - if (null == fileService) { - throw new RuntimeException("未找到文件服务实现类:" + serviceName); - } - return fileService; - } - - /** - * 文件上传服务 - * - * @param file - * @param typeEnum 文件服务类型枚举类 - * @param moduleType 文件夹类型 - * @return - */ - public ResponseDTO fileUpload(MultipartFile file, FileServiceTypeEnum typeEnum, Integer moduleType) { - FileModuleTypeEnum moduleTypeEnum = SmartBaseEnumUtil.getEnumByValue(moduleType, FileModuleTypeEnum.class); - if (null == moduleTypeEnum) { - return ResponseDTO.wrap(FileResponseCodeConst.FILE_MODULE_ERROR); - } - // 获取文件服务 - IFileService fileService = this.getFileService(typeEnum); - ResponseDTO response = fileService.fileUpload(file, moduleTypeEnum.getPath()); - return response; - } - - /** - * 根据文件绝对路径 获取文件URL - * - * @param path - * @return - */ - public ResponseDTO getFileUrl(String path, FileServiceTypeEnum typeEnum) { - IFileService fileService = this.getFileService(typeEnum); - return fileService.getFileUrl(path); - } - - /** - * 批量插入 - * - * @param fileDTOList - */ - public void insertFileBatch(List fileDTOList) { - fileDao.insertFileBatch(fileDTOList); - } - - /** - * 根据module 删除文件信息 - * - * @param moduleId - * @return - */ - public void deleteFilesByModuleId(String moduleId) { - fileDao.deleteFilesByModuleId(moduleId); - } - - /** - * 根据module 获取文件信息 - * - * @param moduleId - * @return - */ - public List listFilesByModuleId(String moduleId) { - return fileDao.listFilesByModuleId(moduleId); - } - - /** - * @param filesStr 逗号分隔文件id字符串 - * @return - */ - public List getFileDTOList(String filesStr) { - if (StringUtils.isEmpty(filesStr)) { - return Lists.newArrayList(); - } - String[] fileIds = filesStr.split(","); - List fileIdList = Arrays.asList(fileIds).stream().map(e -> Long.valueOf(e)).collect(Collectors.toList()); - List files = fileDao.listFilesByFileIds(fileIdList); - return files; - } - - /** - * 分页查询文件列表 - * - * @param queryDTO - * @return - */ - public ResponseDTO> queryListByPage(FileQueryDTO queryDTO) { - Page page = SmartPageUtil.convert2QueryPage(queryDTO); - List fileList = fileDao.queryListByPage(page, queryDTO); - if (CollectionUtils.isNotEmpty(fileList)) { - fileList.forEach(e -> { - // 根据文件服务类 获取对应文件服务 查询 url - FileServiceTypeEnum serviceTypeEnum = SmartBaseEnumUtil.getEnumByValue(e.getFileLocationType(), FileServiceTypeEnum.class); - IFileService fileService = this.getFileService(serviceTypeEnum); - e.setFileUrl(fileService.getFileUrl(e.getFilePath()).getData()); - }); - } - PageResultDTO pageResultDTO = SmartPageUtil.convert2PageResult(page, fileList); - return ResponseDTO.succData(pageResultDTO); - } - - /** - * 根据id 下载文件 - * - * @param id - * @param request - * @return - */ - public ResponseEntity downLoadById(Long id, HttpServletRequest request) { - FileEntity entity = fileDao.selectById(id); - if (null == entity) { - throw new RuntimeException("文件信息不存在"); - } - - // 根据文件服务类 获取对应文件服务 查询 url - FileServiceTypeEnum serviceTypeEnum = SmartBaseEnumUtil.getEnumByValue(entity.getFileLocationType(), FileServiceTypeEnum.class); - IFileService fileService = this.getFileService(serviceTypeEnum); - ResponseEntity stream = fileService.fileDownload(entity.getFilePath(), entity.getFileName(), request); - return stream; - } - - /** - * 系统文件保存通用接口 - * @param addDTO - * @return - */ - public ResponseDTO saveFile(FileAddDTO addDTO, RequestTokenBO requestToken) { - FileEntity entity = SmartBeanUtil.copy(addDTO,FileEntity.class); - entity.setCreaterUser(requestToken.getRequestUserId()); - entity.setCreateTime(new Date()); - fileDao.insert(entity); - return ResponseDTO.succ(); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/FileServiceAliYun.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/FileServiceAliYun.java deleted file mode 100644 index 15ae3feb..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/FileServiceAliYun.java +++ /dev/null @@ -1,182 +0,0 @@ -package net.lab1024.smartadmin.module.support.file.service; - -import com.aliyun.oss.OSSClient; -import com.aliyun.oss.model.OSSObject; -import com.aliyun.oss.model.ObjectMetadata; -import com.aliyun.oss.model.PutObjectRequest; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.module.support.file.constant.FileResponseCodeConst; -import net.lab1024.smartadmin.module.support.file.constant.FileServiceNameConst; -import net.lab1024.smartadmin.module.support.file.domain.dto.OSSConfig; -import net.lab1024.smartadmin.module.support.file.domain.vo.UploadVO; -import net.lab1024.smartadmin.module.system.systemconfig.SystemConfigService; -import net.lab1024.smartadmin.module.system.systemconfig.constant.SystemConfigEnum; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Service; -import org.springframework.util.FileCopyUtils; -import org.springframework.web.multipart.MultipartFile; - -import javax.servlet.http.HttpServletRequest; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/5/10 0010 上午 8:29 - * @since JDK1.8 - */ -@Slf4j -@Service(FileServiceNameConst.ALI_OSS) -public class FileServiceAliYun implements IFileService { - - @Autowired - private SystemConfigService systemConfigService; - - OSSClient ossClient = null; - - String accessConfig = null; - - @Override - public ResponseDTO fileUpload(MultipartFile multipartFile, String path) { - OSSConfig ossConfig = systemConfigService.selectByKey2Obj(SystemConfigEnum.Key.ALI_OSS.name(), OSSConfig.class); - try { - InputStream inputStream = new ByteArrayInputStream(multipartFile.getBytes()); - if (! ossConfig.toString().equals(accessConfig)) { - //accessKeyId 发生变动自动创建新的 - if (ossClient != null) { - ossClient.shutdown(); - } - ossClient = new OSSClient(ossConfig.getEndpoint(), ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret()); - accessConfig = ossConfig.toString(); - } - String uuid = UUID.randomUUID().toString().replace("-", ""); - String ossPath = path + "/" + uuid; - String fileName = multipartFile.getOriginalFilename(); - String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1); - ObjectMetadata meta = new ObjectMetadata(); - meta.setContentDisposition("attachment;filename=" + fileName); - Map userMetadata = new HashMap(); - userMetadata.put("fileName", fileName); - userMetadata.put("fileExt", fileExt); - userMetadata.put("fileSize", String.valueOf(multipartFile.getSize())); - meta.setUserMetadata(userMetadata); - meta.setContentType(this.getContentType(fileExt)); - PutObjectRequest putObjectRequest = new PutObjectRequest(ossConfig.getBucketName(), ossPath, inputStream, meta); - ossClient.putObject(putObjectRequest); - UploadVO localUploadVO = new UploadVO(); - localUploadVO.setUrl(this.getUrl(ossPath, ossConfig.getBucketName(), ossClient)); - localUploadVO.setFileName(fileName); - localUploadVO.setFilePath(ossPath); - localUploadVO.setFileSize(multipartFile.getSize()); - return ResponseDTO.succData(localUploadVO); - } catch (Exception e) { - log.error("ALI UPLOAD ERROR : {}", e); - } - return ResponseDTO.wrap(FileResponseCodeConst.UPLOAD_ERROR); - } - - @Override - public ResponseDTO getFileUrl(String path) { - OSSConfig ossConfig = systemConfigService.selectByKey2Obj(SystemConfigEnum.Key.ALI_OSS.name(), OSSConfig.class); - try { - if (! ossConfig.toString().equals(accessConfig)) { - //accessKeyId 发生变动自动创建新的 - if (ossClient != null) { - ossClient.shutdown(); - } - ossClient = new OSSClient(ossConfig.getEndpoint(), ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret()); - accessConfig = ossConfig.toString(); - } - String url = this.getUrl(path, ossConfig.getBucketName(), ossClient); - return ResponseDTO.succData(url); - } catch (Exception e) { - log.error("ALI getFileUrl ERROR : {}", e); - } - return ResponseDTO.wrap(FileResponseCodeConst.URL_ERROR); - } - - private String getUrl(String path, String bucketName, OSSClient ossClient) { - Date expiration = new Date(System.currentTimeMillis() + (60 * 60 * 1000)); - URL url = ossClient.generatePresignedUrl(bucketName, path, expiration); - return url.toString(); - } - - /** - * 流式下载(名称为原文件) - */ - @Override - public ResponseEntity fileDownload(String key, String fileName, HttpServletRequest request) { - File file = this.getFile(key, fileName); - if (file == null) { - throw new RuntimeException("文件不存在"); - } - return this.downloadMethod(file, request); - } - - /** - * 根据osskey获取文件 - * - * @param key - * @return - */ - public File getFile(String key, String fileName) { - OSSConfig ossConfig = systemConfigService.selectByKey2Obj(SystemConfigEnum.Key.ALI_OSS.name(), OSSConfig.class); - if (! ossConfig.toString().equals(accessConfig)) { - //accessKeyId 发生变动自动创建新的 - if (ossClient != null) { - ossClient.shutdown(); - } - ossClient = new OSSClient(ossConfig.getEndpoint(), ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret()); - accessConfig = ossConfig.toString(); - } - //获取oss对象 - OSSObject ossObject = ossClient.getObject(ossConfig.getBucketName(), key); - if (StringUtils.isBlank(fileName)) { - // 获取元信息 - ObjectMetadata objectMetadata = ossObject.getObjectMetadata(); - // 获取下载时文件名 - Map userMetadata = objectMetadata.getUserMetadata(); - fileName = userMetadata == null ? "" : userMetadata.get("filename"); - if (StringUtils.isBlank(fileName)) { - fileName = objectMetadata.getContentDisposition(); - } - } - // 创建文件 - File file = new File(fileName); - // 获得输入流 - InputStream objectContent = ossObject.getObjectContent(); - try { - // 输入流转换为字节流 - byte[] buffer = FileCopyUtils.copyToByteArray(objectContent); - // 字节流写入文件 - FileCopyUtils.copy(buffer, file); - // 关闭输入流 - objectContent.close(); - } catch (IOException e) { - log.error("文件获取失败:" + e); - return null; - } finally { - try { - ossObject.close(); - } catch (IOException e) { - log.error("", e); - } - } - return file; - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/FileServiceLocal.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/FileServiceLocal.java deleted file mode 100644 index 08aac36d..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/FileServiceLocal.java +++ /dev/null @@ -1,123 +0,0 @@ -package net.lab1024.smartadmin.module.support.file.service; - -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.module.support.file.constant.FileResponseCodeConst; -import net.lab1024.smartadmin.module.support.file.constant.FileServiceNameConst; -import net.lab1024.smartadmin.module.support.file.domain.vo.UploadVO; -import net.lab1024.smartadmin.module.system.systemconfig.SystemConfigDao; -import net.lab1024.smartadmin.module.system.systemconfig.constant.SystemConfigEnum; -import net.lab1024.smartadmin.module.system.systemconfig.domain.entity.SystemConfigEntity; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Service; -import org.springframework.web.multipart.MultipartFile; - -import javax.servlet.http.HttpServletRequest; -import java.io.File; -import java.io.IOException; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/5/11 0011 下午 16:15 - * @since JDK1.8 - */ -@Slf4j -@Service(FileServiceNameConst.LOCAL) -public class FileServiceLocal implements IFileService { - - @Autowired - private SystemConfigDao systemConfigDao; - - @Value("${spring.servlet.multipart.max-file-size}") - private String maxFileSize; - - @Value("${file-upload-service.path}") - private String fileParentPath; - - private static final Long DEFAULT_SIZE = 10 * 1024 * 1024L; - - @Override - public ResponseDTO fileUpload(MultipartFile multipartFile, String path) { - if (null == multipartFile) { - return ResponseDTO.wrap(FileResponseCodeConst.FILE_EMPTY); - } - Long maxSize = DEFAULT_SIZE; - if (StringUtils.isNotEmpty(maxFileSize)) { - String maxSizeStr = maxFileSize.toLowerCase().replace("mb", ""); - maxSize = Integer.valueOf(maxSizeStr) * 1024 * 1024L; - } - if (multipartFile.getSize() > maxSize) { - return ResponseDTO.wrap(FileResponseCodeConst.FILE_SIZE_ERROR, String.format(FileResponseCodeConst.FILE_SIZE_ERROR.getMsg(), maxFileSize)); - } - String filePath = fileParentPath; - String urlParent = this.localUrlPrefix(); - if (urlParent == null) { - return ResponseDTO.wrap(FileResponseCodeConst.LOCAL_UPDATE_PREFIX_ERROR); - } - if (StringUtils.isNotEmpty(path)) { - filePath = filePath + path + "/"; - urlParent = urlParent + path + "/"; - } - File directory = new File(filePath); - if (!directory.exists()) { - // 目录不存在,新建 - directory.mkdirs(); - } - UploadVO localUploadVO = new UploadVO(); - String newFileName; - File fileTemp; - String originalFileName; - originalFileName = multipartFile.getOriginalFilename(); - newFileName = this.generateFileName(originalFileName); - fileTemp = new File(new File(filePath + newFileName).getAbsolutePath()); - try { - multipartFile.transferTo(fileTemp); - localUploadVO.setUrl(urlParent + newFileName); - localUploadVO.setFileName(newFileName); - localUploadVO.setFilePath(path + "/" + newFileName); - localUploadVO.setFileSize(multipartFile.getSize()); - } catch (IOException e) { - if (fileTemp.exists() && fileTemp.isFile()) { - fileTemp.delete(); - } - log.error("", e); - return ResponseDTO.wrap(FileResponseCodeConst.UPLOAD_ERROR); - } - return ResponseDTO.succData(localUploadVO); - } - - @Override - public ResponseDTO getFileUrl(String path) { - String urlParent = this.localUrlPrefix(); - if (urlParent == null) { - return ResponseDTO.wrap(FileResponseCodeConst.LOCAL_UPDATE_PREFIX_ERROR); - } - String url = urlParent + path; - return ResponseDTO.succData(url); - } - - private String localUrlPrefix() { - SystemConfigEntity configEntity = systemConfigDao.getByKey(SystemConfigEnum.Key.LOCAL_UPLOAD_URL_PREFIX.name()); - if (configEntity == null) { - return null; - } - return configEntity.getConfigValue(); - } - - @Override - public ResponseEntity fileDownload(String key, String fileName, HttpServletRequest request) { - - String url = fileParentPath + key; - // 创建文件 - File file = new File(url); - return this.downloadMethod(file, request); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/FileServiceQiNiuYun.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/FileServiceQiNiuYun.java deleted file mode 100644 index 394b7af8..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/FileServiceQiNiuYun.java +++ /dev/null @@ -1,175 +0,0 @@ -package net.lab1024.smartadmin.module.support.file.service; - -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.module.support.file.constant.FileResponseCodeConst; -import net.lab1024.smartadmin.module.support.file.constant.FileServiceNameConst; -import net.lab1024.smartadmin.module.support.file.domain.dto.OSSConfig; -import net.lab1024.smartadmin.module.support.file.domain.vo.UploadVO; -import net.lab1024.smartadmin.module.system.systemconfig.SystemConfigService; -import net.lab1024.smartadmin.module.system.systemconfig.constant.SystemConfigEnum; -import com.qiniu.http.Response; -import com.qiniu.storage.Configuration; -import com.qiniu.storage.UploadManager; -import com.qiniu.util.Auth; -import lombok.extern.slf4j.Slf4j; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.ResponseBody; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Service; -import org.springframework.util.FileCopyUtils; -import org.springframework.web.multipart.MultipartFile; - -import javax.servlet.http.HttpServletRequest; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.net.URLEncoder; -import java.util.UUID; - -/** - * [ 七牛云 ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/5/10 0010 上午 8:30 - * @since JDK1.8 - */ -@Slf4j -@Service(FileServiceNameConst.QI_NIU_OSS) -public class FileServiceQiNiuYun implements IFileService { - - //1小时,可以自定义链接过期时间 - private static final Long expireInSeconds = 3600L; - - @Autowired - private SystemConfigService systemConfigService; - - UploadManager ossClient = null; - - String accessConfig = null; - - String token = null; - - @Override - public ResponseDTO fileUpload(MultipartFile multipartFile, String path) { - OSSConfig ossConfig = systemConfigService.selectByKey2Obj(SystemConfigEnum.Key.QI_NIU_OSS.name(), OSSConfig.class); - try { - InputStream inputStream = new ByteArrayInputStream(multipartFile.getBytes()); - if (! ossConfig.toString().equals(accessConfig)) { - //accessKeyId 发生变动自动重新创建新的UploadManager - ossClient = new UploadManager(new Configuration()); - token = Auth.create(ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret()). - uploadToken(ossConfig.getBucketName()); - accessConfig = ossConfig.toString(); - } - String uuid = UUID.randomUUID().toString().replace("-", ""); - String ossPath = path + "/" + uuid; - String fileName = multipartFile.getOriginalFilename(); - String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1); - String mime = this.getContentType(fileExt); - Response res = ossClient.put(inputStream, ossPath, token, null, mime); - if (! res.isOK()) { - log.error("QINIU fileUpload ERROR : {}", res.toString()); - return ResponseDTO.wrap(FileResponseCodeConst.UPLOAD_ERROR); - } - UploadVO localUploadVO = new UploadVO(); - localUploadVO.setUrl(this.getFileUrl(ossPath).getData()); - localUploadVO.setFileName(fileName); - localUploadVO.setFilePath(ossPath); - localUploadVO.setFileSize(multipartFile.getSize()); - return ResponseDTO.succData(localUploadVO); - } catch (Exception e) { - log.error("QINIU fileUpload ERROR : {}", e); - } - return ResponseDTO.wrap(FileResponseCodeConst.UPLOAD_ERROR); - } - - @Override - public ResponseDTO getFileUrl(String path) { - OSSConfig ossConfig = systemConfigService.selectByKey2Obj(SystemConfigEnum.Key.QI_NIU_OSS.name(), OSSConfig.class); - try { - if (! ossConfig.toString().equals(accessConfig)) { - //accessKeyId 发生变动自动重新创建新的UploadManager - ossClient = new UploadManager(new Configuration()); - token = Auth.create(ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret()). - uploadToken(ossConfig.getBucketName()); - accessConfig = ossConfig.toString(); - } - String encodedFileName = URLEncoder.encode(path, "utf-8"); - String domainOfBucket = ossConfig.getEndpoint(); - String publicUrl = String.format("%s/%s", domainOfBucket, encodedFileName); - String accessKey = ossConfig.getAccessKeyId(); - String secretKey = ossConfig.getAccessKeySecret(); - Auth auth = Auth.create(accessKey, secretKey); - //1小时,可以自定义链接过期时间 - long expireInSeconds = 3600; - String finalUrl = auth.privateDownloadUrl(publicUrl, expireInSeconds); - return ResponseDTO.succData(finalUrl); - } catch (Exception e) { - log.error("QINIU getFileUrl ERROR : {}", e); - } - return ResponseDTO.wrap(FileResponseCodeConst.URL_ERROR); - } - - @Override - public ResponseEntity fileDownload(String key, String fileName, HttpServletRequest request) { - File file = this.getFile(key, fileName); - if (file == null) { - throw new RuntimeException("文件不存在"); - } - return this.downloadMethod(file, request); - } - - /** - * 获取下载路径 - */ - public String getDownloadUrl(String key) { - OSSConfig ossConfig = systemConfigService.selectByKey2Obj(SystemConfigEnum.Key.QI_NIU_OSS.name(), OSSConfig.class); - String domainOfBucket = ossConfig.getEndpoint(); - String finalUrl = ""; - try { - String encodedFileName = URLEncoder.encode(key, "utf-8").replace("+", "%20"); - String publicUrl = String.format("%s/%s", domainOfBucket, encodedFileName); - Auth auth = Auth.create(ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret()); - finalUrl = auth.privateDownloadUrl(publicUrl, expireInSeconds); - } catch (Exception e) { - log.error("QINIU download ERROR : {}", e); - } - return finalUrl; - } - - /** - * 获取文件 - */ - public File getFile(String key, String fileName) { - String finalUrl = getDownloadUrl(key); - OkHttpClient client = new OkHttpClient(); - Request req = new Request.Builder().url(finalUrl).build(); - okhttp3.Response resp = null; - File file = new File(fileName); - try { - resp = client.newCall(req).execute(); - if (resp.isSuccessful()) { - ResponseBody body = resp.body(); - InputStream objectContent = body.byteStream(); - // 输入流转换为字节流 - byte[] buffer = FileCopyUtils.copyToByteArray(objectContent); - // 字节流写入文件 - FileCopyUtils.copy(buffer, file); - // 关闭输入流 - objectContent.close(); - } - - } catch (IOException e) { - log.error("文件获取失败:" + e); - return null; - } finally { - } - return file; - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/IFileService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/IFileService.java deleted file mode 100644 index a818ae42..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/IFileService.java +++ /dev/null @@ -1,152 +0,0 @@ -package net.lab1024.smartadmin.module.support.file.service; - -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.module.support.file.domain.vo.UploadVO; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.util.FileCopyUtils; -import org.springframework.web.multipart.MultipartFile; - -import javax.servlet.http.HttpServletRequest; -import java.io.File; -import java.io.FileInputStream; -import java.io.InputStream; -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.UUID; - -/** - * 文件服务接口 - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/5/11 0011 下午 16:42 - * @since JDK1.8 - */ -public interface IFileService { - - /** - * 文件上传 - * - * @param multipartFile - * @param path - * @return - */ - ResponseDTO fileUpload(MultipartFile multipartFile, String path); - - /** - * 获取文件url - * - * @param path - * @return - */ - ResponseDTO getFileUrl(String path); - - /** - * 文件下载 - * - * @param key - * @param fileName - * @param request - * @return - */ - ResponseEntity fileDownload(String key, String fileName, HttpServletRequest request); - - /** - * 生成文件名字 - * 当前年月日时分秒 +32位 uuid + 文件格式后缀 - * - * @param originalFileName - * @return String - */ - default String generateFileName(String originalFileName) { - String time = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddhhmms")); - String uuid = UUID.randomUUID().toString().replaceAll("-", ""); - String fileType = originalFileName.substring(originalFileName.lastIndexOf(".")); - return time + uuid + fileType; - } - - /** - * 获取文件类型 - * - * @param fileExt - * @return - */ - default String getContentType(String fileExt) { - // 文件的后缀名 - if ("bmp".equalsIgnoreCase(fileExt)) { - return "image/bmp"; - } - if ("gif".equalsIgnoreCase(fileExt)) { - return "image/gif"; - } - if ("jpeg".equalsIgnoreCase(fileExt) || "jpg".equalsIgnoreCase(fileExt) || ".png".equalsIgnoreCase(fileExt)) { - return "image/jpeg"; - } - if ("png".equalsIgnoreCase(fileExt)) { - return "image/png"; - } - if ("html".equalsIgnoreCase(fileExt)) { - return "text/html"; - } - if ("txt".equalsIgnoreCase(fileExt)) { - return "text/plain"; - } - if ("vsd".equalsIgnoreCase(fileExt)) { - return "application/vnd.visio"; - } - if ("ppt".equalsIgnoreCase(fileExt) || "pptx".equalsIgnoreCase(fileExt)) { - return "application/vnd.ms-powerpoint"; - } - if ("doc".equalsIgnoreCase(fileExt) || "docx".equalsIgnoreCase(fileExt)) { - return "application/msword"; - } - if ("xml".equalsIgnoreCase(fileExt)) { - return "text/xml"; - } - return ""; - } - - default ResponseEntity downloadMethod(File file, HttpServletRequest request) { - HttpHeaders heads = new HttpHeaders(); - heads.add(HttpHeaders.CONTENT_TYPE, "application/octet-stream; charset=utf-8"); - String fileName = file.getName(); - try { - if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0) { - // firefox浏览器 - fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1"); - } else if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) { - // IE浏览器 - fileName = URLEncoder.encode(fileName, "UTF-8"); - } else if (request.getHeader("User-Agent").toUpperCase().indexOf("EDGE") > 0) { - // WIN10浏览器 - fileName = URLEncoder.encode(fileName, "UTF-8"); - } else if (request.getHeader("User-Agent").toUpperCase().indexOf("CHROME") > 0) { - // 谷歌 - fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1"); - } else { - //万能乱码问题解决 - fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1"); - } - } catch (UnsupportedEncodingException e) { - // log.error("", e); - } - heads.add(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + fileName); - try { - InputStream in = new FileInputStream(file); - // 输入流转换为字节流 - byte[] buffer = FileCopyUtils.copyToByteArray(in); - ResponseEntity responseEntity = new ResponseEntity<>(buffer, heads, HttpStatus.OK); - //file.delete(); - return responseEntity; - } catch (Exception e) { - // log.error("", e); - } - return null; - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatController.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatController.java deleted file mode 100644 index a9671255..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatController.java +++ /dev/null @@ -1,32 +0,0 @@ -package net.lab1024.smartadmin.module.support.heartbeat; - -import net.lab1024.smartadmin.common.anno.OperateLog; -import net.lab1024.smartadmin.common.domain.PageParamDTO; -import net.lab1024.smartadmin.common.domain.PageResultDTO; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.constant.SwaggerTagConst; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; - -import javax.validation.Valid; - - -@Api(tags = {SwaggerTagConst.Admin.MANAGER_HEART_BEAT}) -@OperateLog -@RestController -public class HeartBeatController { - - @Autowired - private HeartBeatService heartBeatService; - - @PostMapping("/heartBeat/query") - @ApiOperation("查询心跳记录 @author zhuoda") - public ResponseDTO> query(@RequestBody @Valid PageParamDTO pageParamDTO){ - return heartBeatService.pageQuery(pageParamDTO); - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatRecordDao.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatRecordDao.java deleted file mode 100644 index e10c8e8c..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatRecordDao.java +++ /dev/null @@ -1,52 +0,0 @@ -package net.lab1024.smartadmin.module.support.heartbeat; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; -import org.springframework.stereotype.Component; - -import java.util.Date; -import java.util.List; - -/** - * 心跳日志数据库操作 - * - * @author : simajinqiang - * Date: 2018/7/9 - * Time: 17:37 - */ -@Component -@Mapper -public interface HeartBeatRecordDao extends BaseMapper { - - /** - * 新增心跳日志 - * - * @param heartBeatRecordEntity - */ - void insertHeartBeat(HeartBeatRecordEntity heartBeatRecordEntity); - - /** - * 更新心跳日志 - * - * @param id - * @param heartBeatTime - */ - void updateHeartBeatTimeById(@Param("id") Long id, @Param("heartBeatTime") Date heartBeatTime); - - /** - * 查询心跳日志 - * - * @param heartBeatRecordEntity - * @return - */ - HeartBeatRecordEntity query(HeartBeatRecordEntity heartBeatRecordEntity); - - - /** - * 分页查询心跳记录 - * @return - */ - List pageQuery(Page page); -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatRecordEntity.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatRecordEntity.java deleted file mode 100644 index 694eb936..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatRecordEntity.java +++ /dev/null @@ -1,42 +0,0 @@ -package net.lab1024.smartadmin.module.support.heartbeat; - -import com.baomidou.mybatisplus.annotation.TableName; -import net.lab1024.smartadmin.common.domain.BaseEntity; -import lombok.Data; - -import java.io.Serializable; -import java.util.Date; - -/** - * 心跳记录日志 - * User: simajinqiang - * Date: 2018/7/9 - * Time: 11:11 - */ -@Data -@TableName(value = "t_heart_beat_record") -public class HeartBeatRecordEntity extends BaseEntity implements Serializable { - - /** - * 项目名字 - */ - private String projectPath; - /** - * 服务器ip - */ - private String serverIp; - /** - * 进程号 - */ - private Integer processNo; - /** - * 进程开启时间 - */ - private Date processStartTime; - /** - * 心跳当前时间 - */ - private Date heartBeatTime; - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatService.java deleted file mode 100644 index b474c174..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatService.java +++ /dev/null @@ -1,90 +0,0 @@ -package net.lab1024.smartadmin.module.support.heartbeat; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import net.lab1024.smartadmin.common.domain.PageParamDTO; -import net.lab1024.smartadmin.common.domain.PageResultDTO; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.common.heartbeat.AbstractHeartBeatCommand; -import net.lab1024.smartadmin.common.heartbeat.HeartBeatConfig; -import net.lab1024.smartadmin.common.heartbeat.HeartBeatLogger; -import net.lab1024.smartadmin.common.heartbeat.HeartBeatRecordDTO; -import net.lab1024.smartadmin.config.SmartHeartBeatConfig; -import net.lab1024.smartadmin.util.SmartBeanUtil; -import net.lab1024.smartadmin.util.SmartPageUtil; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; -import java.util.List; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 - */ -@Slf4j -@Service -public class HeartBeatService extends AbstractHeartBeatCommand { - - @Autowired - private HeartBeatRecordDao heartBeatRecordDao; - - @Autowired - private SmartHeartBeatConfig heartBeatConfig; - - @PostConstruct - public void init() { - - HeartBeatConfig config = HeartBeatConfig.builder().delayHandlerTime(heartBeatConfig.getDelayHandlerTime()).intervalTime(heartBeatConfig.getIntervalTime()).build(); - - super.init(config, new HeartBeatLogger() { - @Override - public void error(String string) { - log.error(string); - } - - @Override - public void error(String string, Throwable e) { - log.error(string, e); - } - - @Override - public void info(String string) { - log.info(string); - } - }); - } - - @PreDestroy - @Override - public void destroy() { - super.destroy(); - } - - @Override - public void handler(HeartBeatRecordDTO heartBeatRecordDTO) { - HeartBeatRecordEntity heartBeatRecordEntity = SmartBeanUtil.copy(heartBeatRecordDTO, HeartBeatRecordEntity.class); - HeartBeatRecordEntity heartBeatRecordOld = heartBeatRecordDao.query(heartBeatRecordEntity); - if (heartBeatRecordOld == null) { - heartBeatRecordDao.insertHeartBeat(heartBeatRecordEntity); - } else { - heartBeatRecordDao.updateHeartBeatTimeById(heartBeatRecordOld.getId(), heartBeatRecordEntity.getHeartBeatTime()); - } - - } - - public ResponseDTO> pageQuery(PageParamDTO pageParamDTO) { - Page pageQueryInfo = SmartPageUtil.convert2QueryPage(pageParamDTO); - List recordVOList = heartBeatRecordDao.pageQuery(pageQueryInfo); - PageResultDTO pageResultDTO = SmartPageUtil.convert2PageResult(pageQueryInfo, recordVOList); - return ResponseDTO.succData(pageResultDTO); - - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/IdGeneratorDao.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/IdGeneratorDao.java deleted file mode 100644 index e6e1341e..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/IdGeneratorDao.java +++ /dev/null @@ -1,36 +0,0 @@ -package net.lab1024.smartadmin.module.support.idgenerator; - - -import net.lab1024.smartadmin.module.support.idgenerator.domain.IdGeneratorEntity; -import net.lab1024.smartadmin.module.support.idgenerator.domain.IdGeneratorLastNumberDTO; -import net.lab1024.smartadmin.module.support.idgenerator.domain.IdGeneratorRecordDTO; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; - -import java.util.List; - -/** - * - * zhuo - */ -@Mapper -public interface IdGeneratorDao { - - IdGeneratorLastNumberDTO selectLastNumber(Long id); - - List selectAll(); - - void updateLastNumber(@Param("generatorId") Long generatorId, @Param("lastNumber") Long lastNumber); - - int replaceIdGeneratorRecord(@Param("generatorId") Long generatorId,// - @Param("year") int year,// - @Param("month") int month,// - @Param("day") int day,// - @Param("lastNumber") Long lastNumber); - - IdGeneratorRecordDTO selectHistoryLastNumber(@Param("generatorId") Long generatorId, - @Param("year") int year, - @Param("month") int month, - @Param("day") int day); - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/IdGeneratorManager.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/IdGeneratorManager.java deleted file mode 100644 index 1b2a926d..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/IdGeneratorManager.java +++ /dev/null @@ -1,66 +0,0 @@ -package net.lab1024.smartadmin.module.support.idgenerator; - -import net.lab1024.smartadmin.common.exception.SmartBusinessException; -import net.lab1024.smartadmin.module.support.idgenerator.domain.IdGeneratorLastNumberDTO; -import net.lab1024.smartadmin.module.support.idgenerator.domain.IdGeneratorPOJO; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.text.SimpleDateFormat; -import java.time.LocalDate; -import java.util.Date; - -/** - * 全局id生成器 - * zhuo - */ -@Service -public class IdGeneratorManager { - - @Autowired - private IdGeneratorDao idGeneratorDao; - - @Transactional(rollbackFor = Exception.class) - public long[] generate(IdGeneratorPOJO idGeneratorPOJO, int stepLength) { - IdGeneratorLastNumberDTO idGeneratorLastNumberDTO = idGeneratorDao.selectLastNumber(idGeneratorPOJO.getIdGeneratorEntity().getId()); - if (idGeneratorLastNumberDTO == null) { - throw new SmartBusinessException("IdGenerator, id 数据库不存在" + idGeneratorPOJO.getIdGeneratorEntity().getId()); - } - - Long lastNumber = idGeneratorLastNumberDTO.getLastNumber(); - if (lastNumber == null) { - lastNumber = idGeneratorPOJO.getIdGeneratorEntity().getInitNumber(); - } else { - lastNumber = lastNumber + 1; - } - - Date updateTime = idGeneratorLastNumberDTO.getUpdateTime(); - if (updateTime == null) { - updateTime = idGeneratorLastNumberDTO.getDatabaseTime(); - } - - Long startValue = -1L, endValue = -1L; - switch (idGeneratorPOJO.getIdGeneratorRuleTypeEnum()) { - case NO_CYCLE: - startValue = lastNumber.longValue(); - endValue = startValue + stepLength; - break; - default: - SimpleDateFormat format = new SimpleDateFormat(idGeneratorPOJO.getIdGeneratorRuleTypeEnum().getExt()); - if (format.format(idGeneratorLastNumberDTO.getDatabaseTime()).equals(format.format(updateTime))) { - startValue = lastNumber.longValue(); - endValue = startValue + stepLength; - } else { - startValue = idGeneratorPOJO.getIdGeneratorEntity().getInitNumber(); - endValue = startValue + stepLength; - } - break; - } - - idGeneratorDao.updateLastNumber(idGeneratorPOJO.getIdGeneratorEntity().getId(), endValue - 1); - LocalDate localDate = LocalDate.now(); - idGeneratorDao.replaceIdGeneratorRecord(idGeneratorPOJO.getIdGeneratorEntity().getId(), localDate.getYear(), localDate.getMonthValue(), localDate.getDayOfMonth(), endValue - 1); - return new long[]{startValue, endValue}; - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/IdGeneratorService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/IdGeneratorService.java deleted file mode 100644 index ca5d581b..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/IdGeneratorService.java +++ /dev/null @@ -1,140 +0,0 @@ -package net.lab1024.smartadmin.module.support.idgenerator; - -import net.lab1024.smartadmin.common.exception.SmartBusinessException; -import net.lab1024.smartadmin.module.support.idgenerator.constant.IdGeneratorEnum; -import net.lab1024.smartadmin.module.support.idgenerator.constant.IdGeneratorRuleTypeEnum; -import net.lab1024.smartadmin.module.support.idgenerator.domain.IdGeneratorEntity; -import net.lab1024.smartadmin.module.support.idgenerator.domain.IdGeneratorPOJO; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import javax.annotation.PostConstruct; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -/** - * 全局id生成器 - * zhuo - */ -@Slf4j -@Service -public class IdGeneratorService { - - private Map idGeneratorMap; - - @Autowired - private IdGeneratorDao idGeneratorDao; - - @Autowired - private IdGeneratorManager idGeneratorManager; - - @PostConstruct - void init() { - this.idGeneratorMap = new ConcurrentHashMap<>(); - List idGeneratorEntities = idGeneratorDao.selectAll(); - if (idGeneratorEntities != null) { - idGeneratorEntities.forEach(e -> { - IdGeneratorRuleTypeEnum idGeneratorRuleTypeEnum = this.getIdGeneratorRuleTypeEnum(e.getRuleType()); - if (idGeneratorRuleTypeEnum != null) { - IdGeneratorPOJO idGeneratorPOJO = new IdGeneratorPOJO(idGeneratorRuleTypeEnum, e); - String ruleFormat = e.getRuleFormat(); - int startNInx = ruleFormat.indexOf("[n"); - int endNInx = ruleFormat.indexOf("n]"); - idGeneratorPOJO.setNumberCount(endNInx - startNInx); - idGeneratorPOJO.setHaveDay(ruleFormat.contains("[dd]")); - idGeneratorPOJO.setHaveMonth(ruleFormat.contains("[mm]")); - idGeneratorPOJO.setHaveYear(ruleFormat.contains("[yyyy]")); - this.idGeneratorMap.put(e.getId(), idGeneratorPOJO); - } else { - log.error("cannot find rule type , id : {}, key name : {} ", e.getId(), e.getKeyName()); - } - }); - } - } - - public String generate(IdGeneratorEnum idGeneratorEnum) { - return generate(idGeneratorEnum, 1).get(0); - } - - /** - * @param idGeneratorEnum - * @param stepLength - * @return - */ - public List generate(IdGeneratorEnum idGeneratorEnum, int stepLength) { - IdGeneratorPOJO idGeneratorPOJO = validateParams(idGeneratorEnum, stepLength); - long[] generateIds = idGeneratorManager.generate(idGeneratorPOJO, stepLength); - Long startValue = generateIds[0], endValue = generateIds[1]; - LocalDate now = LocalDate.now(); - String year = String.valueOf(now.getYear()); - String month = now.getMonthValue() > 9 ? String.valueOf(now.getMonthValue()) : "0" + now.getMonthValue(); - String day = now.getDayOfMonth() > 9 ? String.valueOf(now.getDayOfMonth()) : "0" + now.getDayOfMonth(); - ArrayList codeList = new ArrayList<>(); - for (long loop = startValue; loop < endValue; loop++) { - String generateBillCode = this.replaceAndFill(idGeneratorPOJO, loop, year, month, day); - codeList.add(generateBillCode); - } - return codeList; - } - - private IdGeneratorRuleTypeEnum getIdGeneratorRuleTypeEnum(String ruleType) { - for (IdGeneratorRuleTypeEnum en : IdGeneratorRuleTypeEnum.values()) { - if (en.name().equalsIgnoreCase(ruleType)) { - return en; - } - } - return null; - } - - private IdGeneratorPOJO validateParams(IdGeneratorEnum idGeneratorEnum, int stepLength) { - if (stepLength < 1) { - throw new SmartBusinessException("IdGenerator, step过短" + stepLength); - } - - IdGeneratorPOJO idGeneratorPOJO = this.idGeneratorMap.get(idGeneratorEnum.getId()); - if (idGeneratorPOJO == null) { - throw new SmartBusinessException("IdGenerator, id 不存在" + idGeneratorEnum); - } - return idGeneratorPOJO; - } - - /** - * 替换特殊rule,即替换[yyyy][mm][dd][nnn]等规则 - */ - private String replaceAndFill(IdGeneratorPOJO idGeneratorPOJO, Long number, String year, String month, String day) { - StringBuilder numberStringBuilder = new StringBuilder(); - int curNumberCount = String.valueOf(number).length(); - - if (idGeneratorPOJO.getNumberCount() > curNumberCount) { - int remain = idGeneratorPOJO.getNumberCount() - curNumberCount; - for (int i = 0; i < remain; i++) { - numberStringBuilder.append(0); - } - } - numberStringBuilder.append(number); - - StringBuilder nStringBuilder = new StringBuilder(); - nStringBuilder.append("\\["); - for (int i = 0; i < idGeneratorPOJO.getNumberCount(); i++) { - nStringBuilder.append("n"); - } - nStringBuilder.append("\\]"); - - String tempRuleFormat = new String(idGeneratorPOJO.getIdGeneratorEntity().getRuleFormat().getBytes()); - if (idGeneratorPOJO.isHaveYear()) { - tempRuleFormat = tempRuleFormat.replaceAll("\\[yyyy\\]", year); - } - if (idGeneratorPOJO.isHaveMonth()) { - tempRuleFormat = tempRuleFormat.replaceAll("\\[mm\\]", month); - } - if (idGeneratorPOJO.isHaveDay()) { - tempRuleFormat = tempRuleFormat.replaceAll("\\[dd\\]", day); - } - - return tempRuleFormat.replaceAll(nStringBuilder.toString(), numberStringBuilder.toString()); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/constant/IdGeneratorEnum.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/constant/IdGeneratorEnum.java deleted file mode 100644 index 79cebd0e..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/constant/IdGeneratorEnum.java +++ /dev/null @@ -1,45 +0,0 @@ -package net.lab1024.smartadmin.module.support.idgenerator.constant; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/3/8 0008 下午 13:43 - * @since JDK1.8 - */ -public enum IdGeneratorEnum { - - - /** - * 测试generate - */ - TEST_ID_GENERATOR(2, "testIdGenerator"), - - - ORDER(1, "order"); - - private long id; - private String keyName; - - IdGeneratorEnum(int id, String keyName) { - this.id = id; - this.keyName = keyName; - } - - @Override - public String toString() { - return "IdGeneratorEnum{" + "id=" + id + ", keyName='" + keyName + '\'' + '}'; - } - - public long getId() { - return id; - } - - public String getKeyName() { - return keyName; - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/constant/IdGeneratorRuleTypeEnum.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/constant/IdGeneratorRuleTypeEnum.java deleted file mode 100644 index c2dad2da..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/constant/IdGeneratorRuleTypeEnum.java +++ /dev/null @@ -1,40 +0,0 @@ -package net.lab1024.smartadmin.module.support.idgenerator.constant; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/3/8 0008 下午 13:43 - * @since JDK1.8 - */ -public enum IdGeneratorRuleTypeEnum { - /** - * 没有周期 - */ - NO_CYCLE(""), - /** - * 年周期 - */ - YEAR_CYCLE("yyyy"), - /** - * 月周期 - */ - MONTH_CYCLE("yyyyMM"), - /** - * 日周期 - */ - DAY_CYCLE("yyyyMMdd"); - - private String ext; - - IdGeneratorRuleTypeEnum(String ext) { - this.ext = ext; - } - - public String getExt() { - return ext; - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/domain/IdGeneratorEntity.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/domain/IdGeneratorEntity.java deleted file mode 100644 index e1d64ffc..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/domain/IdGeneratorEntity.java +++ /dev/null @@ -1,45 +0,0 @@ -package net.lab1024.smartadmin.module.support.idgenerator.domain; - -import com.baomidou.mybatisplus.annotation.TableName; -import net.lab1024.smartadmin.common.domain.BaseEntity; -import lombok.Data; - -import java.io.Serializable; -import java.util.Date; - -/** - * @author sun - * @Auther: anders - * @Date: 2018/8/7 0007 13:33 - * @Description: - */ -@Data -@TableName(value = "t_id_generator") -public class IdGeneratorEntity extends BaseEntity implements Serializable { - - private static final long serialVersionUID = 5582354131134766548L; - /** - * 英文key - */ - private String keyName; - /** - * 规则格式 - */ - private String ruleFormat; - /** - * 类型 - */ - private String ruleType; - /** - * 初始值 - */ - private Long initNumber; - /** - * 上次产生的id - */ - private Long lastNumber; - /** - * 备注 - */ - private String remark; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/domain/IdGeneratorLastNumberDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/domain/IdGeneratorLastNumberDTO.java deleted file mode 100644 index 69af325e..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/domain/IdGeneratorLastNumberDTO.java +++ /dev/null @@ -1,38 +0,0 @@ -package net.lab1024.smartadmin.module.support.idgenerator.domain; - -import java.util.Date; - -/** - * @Auther: yandanyang - * @Date: 2018/8/7 0007 13:33 - * @Description: - */ -public class IdGeneratorLastNumberDTO { - private Date updateTime; - private Long lastNumber; - private Date databaseTime; - - public Date getUpdateTime() { - return updateTime; - } - - public void setUpdateTime(Date updateTime) { - this.updateTime = updateTime; - } - - public Long getLastNumber() { - return lastNumber; - } - - public void setLastNumber(Long lastNumber) { - this.lastNumber = lastNumber; - } - - public Date getDatabaseTime() { - return databaseTime; - } - - public void setDatabaseTime(Date databaseTime) { - this.databaseTime = databaseTime; - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/domain/IdGeneratorPOJO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/domain/IdGeneratorPOJO.java deleted file mode 100644 index 6cd93931..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/domain/IdGeneratorPOJO.java +++ /dev/null @@ -1,71 +0,0 @@ -package net.lab1024.smartadmin.module.support.idgenerator.domain; - -import net.lab1024.smartadmin.module.support.idgenerator.constant.IdGeneratorRuleTypeEnum; - -/** - * @Auther: yandanyang - * @Date: 2018/8/7 0007 13:33 - * @Description: - */ -public class IdGeneratorPOJO { - - private IdGeneratorRuleTypeEnum idGeneratorRuleTypeEnum; - private IdGeneratorEntity idGeneratorEntity; - private int numberCount = 0; - private boolean haveYear = false; - private boolean haveMonth = false; - private boolean haveDay = false; - - public IdGeneratorPOJO(IdGeneratorRuleTypeEnum idGeneratorRuleTypeEnum, IdGeneratorEntity idGeneratorEntity) { - this.idGeneratorRuleTypeEnum = idGeneratorRuleTypeEnum; - this.idGeneratorEntity = idGeneratorEntity; - } - - public IdGeneratorRuleTypeEnum getIdGeneratorRuleTypeEnum() { - return idGeneratorRuleTypeEnum; - } - - public void setIdGeneratorRuleTypeEnum(IdGeneratorRuleTypeEnum idGeneratorRuleTypeEnum) { - this.idGeneratorRuleTypeEnum = idGeneratorRuleTypeEnum; - } - - public IdGeneratorEntity getIdGeneratorEntity() { - return idGeneratorEntity; - } - - public void setIdGeneratorEntity(IdGeneratorEntity idGeneratorEntity) { - this.idGeneratorEntity = idGeneratorEntity; - } - - public int getNumberCount() { - return numberCount; - } - - public void setNumberCount(int numberCount) { - this.numberCount = numberCount; - } - - public boolean isHaveYear() { - return haveYear; - } - - public void setHaveYear(boolean haveYear) { - this.haveYear = haveYear; - } - - public boolean isHaveMonth() { - return haveMonth; - } - - public void setHaveMonth(boolean haveMonth) { - this.haveMonth = haveMonth; - } - - public boolean isHaveDay() { - return haveDay; - } - - public void setHaveDay(boolean haveDay) { - this.haveDay = haveDay; - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/domain/IdGeneratorRecordDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/domain/IdGeneratorRecordDTO.java deleted file mode 100644 index 50f79b1e..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/domain/IdGeneratorRecordDTO.java +++ /dev/null @@ -1,22 +0,0 @@ -package net.lab1024.smartadmin.module.support.idgenerator.domain; - -import lombok.Data; - -/** - * @Auther: yandanyang - * @Date: 2018/8/7 0007 13:33 - * @Description: - */ -@Data -public class IdGeneratorRecordDTO { - - private Long generatorId; - - private Integer year; - - private Integer month; - - private Integer day; - - private Long lastNumber; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/constant/QuartzConst.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/constant/QuartzConst.java deleted file mode 100644 index 949da2bc..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/constant/QuartzConst.java +++ /dev/null @@ -1,17 +0,0 @@ -package net.lab1024.smartadmin.module.support.quartz.constant; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/13 0013 下午 15:21 - * @since JDK1.8 - */ -public class QuartzConst { - public static final String QUARTZ_PARAMS_KEY="TASK_PARAMS"; - public static final String JOB_KEY_PREFIX="TASK_"; - public static final String TRIGGER_KEY_PREFIX="TRIGGER_"; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/constant/TaskResultEnum.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/constant/TaskResultEnum.java deleted file mode 100644 index df5fbc5d..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/constant/TaskResultEnum.java +++ /dev/null @@ -1,47 +0,0 @@ -package net.lab1024.smartadmin.module.support.quartz.constant; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/13 0013 下午 14:19 - * @since JDK1.8 - */ -public enum TaskResultEnum { - - SUCCESS(0,"成功"), - /** - * - */ - FAIL(1,"失败"); - - public static final String INFO="0:成功,1:失败"; - - private Integer status; - - private String desc; - - TaskResultEnum(Integer status , String desc) { - this.status = status; - this.desc = desc; - } - - public Integer getStatus() { - return status; - } - - public void setStatus(Integer status) { - this.status = status; - } - - public String getDesc() { - return desc; - } - - public void setDesc(String desc) { - this.desc = desc; - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/constant/TaskStatusEnum.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/constant/TaskStatusEnum.java deleted file mode 100644 index 9a7f9bd7..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/constant/TaskStatusEnum.java +++ /dev/null @@ -1,47 +0,0 @@ -package net.lab1024.smartadmin.module.support.quartz.constant; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/13 0013 下午 14:19 - * @since JDK1.8 - */ -public enum TaskStatusEnum { - - NORMAL(0,"正常"), - /** - * - */ - PAUSE(1,"暂停"); - - public static final String INFO="0:正常,1:暂停"; - - private Integer status; - - private String desc; - - TaskStatusEnum(Integer status ,String desc) { - this.status = status; - this.desc = desc; - } - - public Integer getStatus() { - return status; - } - - public void setStatus(Integer status) { - this.status = status; - } - - public String getDesc() { - return desc; - } - - public void setDesc(String desc) { - this.desc = desc; - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/controller/QuartzController.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/controller/QuartzController.java deleted file mode 100644 index 59a71ad3..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/controller/QuartzController.java +++ /dev/null @@ -1,81 +0,0 @@ -package net.lab1024.smartadmin.module.support.quartz.controller; - -import net.lab1024.smartadmin.common.anno.NoValidPrivilege; -import net.lab1024.smartadmin.common.anno.OperateLog; -import net.lab1024.smartadmin.common.domain.PageResultDTO; -import net.lab1024.smartadmin.constant.SwaggerTagConst; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.module.support.quartz.service.QuartzTaskService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import net.lab1024.smartadmin.module.support.quartz.domain.dto.*; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; - -/** - * - * [ ] - * - * @version 1.0 - * @since JDK1.8 - * @author yandanyang - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - */ -@OperateLog -@RestController -@Api(tags = {SwaggerTagConst.Admin.MANAGER_TASK_SCHEDULER}) -public class QuartzController { - - @Autowired - private QuartzTaskService quartzTaskService; - - - @PostMapping("/quartz/task/query") - @ApiOperation(value = "查询任务") - @NoValidPrivilege - public ResponseDTO> query(@RequestBody @Valid QuartzQueryDTO queryDTO){ - return quartzTaskService.query(queryDTO); - } - - - @PostMapping("/quartz/task/queryLog") - @ApiOperation(value = "查询任务运行日志") - @NoValidPrivilege - public ResponseDTO> queryLog(@RequestBody @Valid QuartzLogQueryDTO queryDTO){ - return quartzTaskService.queryLog(queryDTO); - } - - @PostMapping("/quartz/task/saveOrUpdate") - @ApiOperation(value = "新建更新任务") - public ResponseDTO saveOrUpdateTask(@RequestBody @Valid QuartzTaskDTO quartzTaskDTO)throws Exception{ - return quartzTaskService.saveOrUpdateTask(quartzTaskDTO); - } - - @GetMapping("/quartz/task/run/{taskId}") - @ApiOperation(value = "立即运行某个任务") - public ResponseDTO runTask(@PathVariable("taskId") Long taskId)throws Exception{ - return quartzTaskService.runTask(taskId); - } - - @GetMapping("/quartz/task/pause/{taskId}") - @ApiOperation(value = "暂停某个任务") - public ResponseDTO pauseTask(@PathVariable("taskId")Long taskId)throws Exception{ - return quartzTaskService.pauseTask(taskId); - } - - @GetMapping("/quartz/task/resume/{taskId}") - @ApiOperation(value = "恢复某个任务") - public ResponseDTO resumeTask(@PathVariable("taskId")Long taskId)throws Exception{ - return quartzTaskService.resumeTask(taskId); - } - - @GetMapping("/quartz/task/delete/{taskId}") - @ApiOperation(value = "删除某个任务") - public ResponseDTO deleteTask(@PathVariable("taskId")Long taskId)throws Exception{ - return quartzTaskService.deleteTask(taskId); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/dao/QuartzTaskDao.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/dao/QuartzTaskDao.java deleted file mode 100644 index f9153e9e..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/dao/QuartzTaskDao.java +++ /dev/null @@ -1,42 +0,0 @@ -package net.lab1024.smartadmin.module.support.quartz.dao; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import net.lab1024.smartadmin.module.support.quartz.domain.dto.QuartzQueryDTO; -import net.lab1024.smartadmin.module.support.quartz.domain.dto.QuartzTaskVO; -import net.lab1024.smartadmin.module.support.quartz.domain.entity.QuartzTaskEntity; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; -import org.springframework.stereotype.Component; - -import java.util.List; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/13 0013 下午 14:35 - * @since JDK1.8 - */ -@Mapper -@Component -public interface QuartzTaskDao extends BaseMapper { - - /** - * 更新任务状态 - * @param taskId - * @param taskStatus - */ - void updateStatus(@Param("taskId") Integer taskId,@Param("taskStatus") Integer taskStatus); - - /** - * 查询列表 - * @param queryDTO - * @return - */ - List queryList(Page page, @Param("queryDTO")QuartzQueryDTO queryDTO); - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/dao/QuartzTaskLogDao.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/dao/QuartzTaskLogDao.java deleted file mode 100644 index b2e9cb04..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/dao/QuartzTaskLogDao.java +++ /dev/null @@ -1,35 +0,0 @@ -package net.lab1024.smartadmin.module.support.quartz.dao; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import net.lab1024.smartadmin.module.support.quartz.domain.dto.QuartzLogQueryDTO; -import net.lab1024.smartadmin.module.support.quartz.domain.dto.QuartzTaskLogVO; -import net.lab1024.smartadmin.module.support.quartz.domain.entity.QuartzTaskLogEntity; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; -import org.springframework.stereotype.Component; - -import java.util.List; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/13 0013 下午 14:35 - * @since JDK1.8 - */ -@Mapper -@Component -public interface QuartzTaskLogDao extends BaseMapper{ - - - /** - * 查询列表 - * @param queryDTO - * @return - */ - List queryList(Page page, @Param("queryDTO")QuartzLogQueryDTO queryDTO); -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzLogQueryDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzLogQueryDTO.java deleted file mode 100644 index 84b8564e..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzLogQueryDTO.java +++ /dev/null @@ -1,25 +0,0 @@ -package net.lab1024.smartadmin.module.support.quartz.domain.dto; - -import net.lab1024.smartadmin.common.domain.PageParamDTO; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotNull; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/15 0015 上午 11:29 - * @since JDK1.8 - */ -@Data -public class QuartzLogQueryDTO extends PageParamDTO { - - @ApiModelProperty(value = "任务Id(不能为空)") - @NotNull(message = "任务Id不能为空") - private Integer taskId; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzQueryDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzQueryDTO.java deleted file mode 100644 index 51e6b584..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzQueryDTO.java +++ /dev/null @@ -1,16 +0,0 @@ -package net.lab1024.smartadmin.module.support.quartz.domain.dto; - -import net.lab1024.smartadmin.common.domain.PageParamDTO; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/15 0015 上午 11:29 - * @since JDK1.8 - */ -public class QuartzQueryDTO extends PageParamDTO { -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzTaskDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzTaskDTO.java deleted file mode 100644 index 5fb303fc..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzTaskDTO.java +++ /dev/null @@ -1,45 +0,0 @@ -package net.lab1024.smartadmin.module.support.quartz.domain.dto; - -import net.lab1024.smartadmin.module.support.quartz.constant.TaskStatusEnum; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotNull; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/13 0013 下午 15:42 - * @since JDK1.8 - */ -@Data -public class QuartzTaskDTO { - - @ApiModelProperty("id") - private Long id; - - @ApiModelProperty("任务名称") - @NotNull(message = "任务名称不能为空") - private String taskName; - - @ApiModelProperty("任务Bean") - @NotNull(message = "任务Bean不能为空") - private String taskBean; - - @ApiModelProperty("任务参数") - private String taskParams; - - @ApiModelProperty("cron") - @NotNull(message = "cron表达式不能为空") - private String taskCron; - - @ApiModelProperty("任务状态:"+ TaskStatusEnum.INFO) - private Integer taskStatus; - - @ApiModelProperty("任务备注") - private String remark; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzTaskLogVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzTaskLogVO.java deleted file mode 100644 index 23cd35fc..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzTaskLogVO.java +++ /dev/null @@ -1,49 +0,0 @@ -package net.lab1024.smartadmin.module.support.quartz.domain.dto; - -import net.lab1024.smartadmin.module.support.quartz.constant.TaskResultEnum; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.Date; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/13 0013 下午 15:42 - * @since JDK1.8 - */ -@Data -public class QuartzTaskLogVO { - - @ApiModelProperty("id") - private Long id; - - @ApiModelProperty("任务id") - private Long taskId; - - @ApiModelProperty("任务名称") - private String taskName; - - @ApiModelProperty("任务参数") - private String taskParams; - - @ApiModelProperty("任务处理状态:"+ TaskResultEnum.INFO) - private Integer processStatus; - - @ApiModelProperty("任务时长ms") - private Long processDuration; - - @ApiModelProperty("处理日志") - private String processLog; - - @ApiModelProperty("创建时间") - private Date createTime; - - - @ApiModelProperty("主机ip") - private String ipAddress; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzTaskVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzTaskVO.java deleted file mode 100644 index b588c532..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzTaskVO.java +++ /dev/null @@ -1,45 +0,0 @@ -package net.lab1024.smartadmin.module.support.quartz.domain.dto; - -import net.lab1024.smartadmin.module.support.quartz.constant.TaskStatusEnum; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotNull; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/13 0013 下午 15:42 - * @since JDK1.8 - */ -@Data -public class QuartzTaskVO { - - @ApiModelProperty("id") - private Long id; - - @ApiModelProperty("任务名称") - @NotNull(message = "任务名称不能为空") - private String taskName; - - @ApiModelProperty("任务Bean") - @NotNull(message = "任务Bean不能为空") - private String taskBean; - - @ApiModelProperty("任务参数") - private String taskParams; - - @ApiModelProperty("cron") - @NotNull(message = "cron表达式不能为空") - private String taskCron; - - @ApiModelProperty("任务状态:"+ TaskStatusEnum.INFO) - private Integer taskStatus; - - @ApiModelProperty("任务备注") - private String remark; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/entity/QuartzTaskEntity.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/entity/QuartzTaskEntity.java deleted file mode 100644 index cb419b84..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/entity/QuartzTaskEntity.java +++ /dev/null @@ -1,50 +0,0 @@ -package net.lab1024.smartadmin.module.support.quartz.domain.entity; - -import com.baomidou.mybatisplus.annotation.TableName; -import net.lab1024.smartadmin.common.domain.BaseEntity; -import lombok.Data; - - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/13 0013 下午 13:45 - * @since JDK1.8 - */ -@Data -@TableName("t_quartz_task") -public class QuartzTaskEntity extends BaseEntity { - /** - * 任务名称参数 - */ - private String taskName; - /** - * 任务类 - */ - private String taskBean; - - /** - * 任务参数 - */ - private String taskParams; - - /** - * cron - */ - private String taskCron; - - /** - * 任务状态 - */ - private Integer taskStatus; - - /** - * 备注 - */ - private String remark; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/entity/QuartzTaskLogEntity.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/entity/QuartzTaskLogEntity.java deleted file mode 100644 index 9d728416..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/entity/QuartzTaskLogEntity.java +++ /dev/null @@ -1,50 +0,0 @@ -package net.lab1024.smartadmin.module.support.quartz.domain.entity; - -import com.baomidou.mybatisplus.annotation.TableName; -import net.lab1024.smartadmin.common.domain.BaseEntity; -import lombok.Data; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/13 0013 下午 13:45 - * @since JDK1.8 - */ -@Data -@TableName("t_quartz_task_log") -public class QuartzTaskLogEntity extends BaseEntity { - /** - * 任务名称参数 - */ - private Long taskId; - /** - * 任务名称 - */ - private String taskName; - /** - * 任务参数 - */ - private String taskParams; - /** - * 任务处理状态 - */ - private Integer processStatus; - - /** - * 任务时长ms - */ - private Long processDuration; - - /** - * 处理日志 - */ - private String processLog; - - - private String ipAddress; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/service/QuartzTask.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/service/QuartzTask.java deleted file mode 100644 index 4b327d1f..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/service/QuartzTask.java +++ /dev/null @@ -1,85 +0,0 @@ -package net.lab1024.smartadmin.module.support.quartz.service; - -import lombok.extern.slf4j.Slf4j; -import net.lab1024.smartadmin.common.domain.ITask; -import net.lab1024.smartadmin.module.support.quartz.constant.QuartzConst; -import net.lab1024.smartadmin.module.support.quartz.constant.TaskResultEnum; -import net.lab1024.smartadmin.module.support.quartz.domain.entity.QuartzTaskEntity; -import net.lab1024.smartadmin.module.support.quartz.domain.entity.QuartzTaskLogEntity; -import net.lab1024.smartadmin.third.SmartApplicationContext; -import net.lab1024.smartadmin.util.SmartIPUtil; -import net.lab1024.smartadmin.util.SmartQuartzUtil; -import org.quartz.JobDetail; -import org.quartz.JobExecutionContext; -import org.quartz.JobExecutionException; -import org.quartz.JobKey; -import org.springframework.scheduling.quartz.QuartzJobBean; - -import java.io.PrintWriter; -import java.io.StringWriter; -import java.util.Date; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 - */ -@Slf4j -public class QuartzTask extends QuartzJobBean { - - @Override - protected void executeInternal(JobExecutionContext context) throws JobExecutionException { - JobDetail jobDetail = context.getJobDetail(); - Object params = context.getMergedJobDataMap().get(QuartzConst.QUARTZ_PARAMS_KEY); - JobKey jobKey = jobDetail.getKey(); - - Long taskId = SmartQuartzUtil.getTaskIdByJobKey(jobKey); - QuartzTaskService quartzTaskService = (QuartzTaskService) SmartApplicationContext.getBean("quartzTaskService"); - QuartzTaskEntity quartzTaskEntity = quartzTaskService.getByTaskId(taskId); - - QuartzTaskLogService quartzTaskLogService = (QuartzTaskLogService) SmartApplicationContext.getBean("quartzTaskLogService"); - - QuartzTaskLogEntity taskLogEntity = new QuartzTaskLogEntity(); - taskLogEntity.setTaskId(taskId); - taskLogEntity.setIpAddress(SmartIPUtil.getLocalHostIP()); - try { - taskLogEntity.setTaskName(quartzTaskEntity.getTaskName()); - } catch (Exception e) { - e.printStackTrace(); - } - String paramsStr = null; - if (params != null) { - paramsStr = params.toString(); - taskLogEntity.setTaskParams(paramsStr); - } - taskLogEntity.setUpdateTime(new Date()); - taskLogEntity.setCreateTime(new Date()); - //任务开始时间 - long startTime = System.currentTimeMillis(); - try { - ITask taskClass = (ITask) SmartApplicationContext.getBean(quartzTaskEntity.getTaskBean()); - taskClass.execute(paramsStr); - taskLogEntity.setProcessStatus(TaskResultEnum.SUCCESS.getStatus()); - } catch (Exception e) { - log.error("", e); - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw, true); - e.printStackTrace(pw); - pw.flush(); - sw.flush(); - taskLogEntity.setProcessStatus(TaskResultEnum.FAIL.getStatus()); - taskLogEntity.setProcessLog(sw.toString()); - } finally { - long times = System.currentTimeMillis() - startTime; - taskLogEntity.setProcessDuration(times); - quartzTaskLogService.save(taskLogEntity); - } - - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/service/QuartzTaskLogService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/service/QuartzTaskLogService.java deleted file mode 100644 index e54c483c..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/service/QuartzTaskLogService.java +++ /dev/null @@ -1,28 +0,0 @@ -package net.lab1024.smartadmin.module.support.quartz.service; - -import net.lab1024.smartadmin.module.support.quartz.dao.QuartzTaskLogDao; -import net.lab1024.smartadmin.module.support.quartz.domain.entity.QuartzTaskLogEntity; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/13 0013 下午 14:50 - * @since JDK1.8 - */ -@Service -public class QuartzTaskLogService { - - @Autowired - private QuartzTaskLogDao quartzTaskLogDao; - - - public void save(QuartzTaskLogEntity logEntity){ - quartzTaskLogDao.insert(logEntity); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/service/QuartzTaskService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/service/QuartzTaskService.java deleted file mode 100644 index 9f88132a..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/service/QuartzTaskService.java +++ /dev/null @@ -1,349 +0,0 @@ -package net.lab1024.smartadmin.module.support.quartz.service; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import net.lab1024.smartadmin.common.constant.ResponseCodeConst; -import net.lab1024.smartadmin.common.domain.PageResultDTO; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.module.support.quartz.constant.QuartzConst; -import net.lab1024.smartadmin.module.support.quartz.constant.TaskStatusEnum; -import net.lab1024.smartadmin.module.support.quartz.dao.QuartzTaskDao; -import net.lab1024.smartadmin.module.support.quartz.dao.QuartzTaskLogDao; -import net.lab1024.smartadmin.module.support.quartz.domain.entity.QuartzTaskEntity; -import net.lab1024.smartadmin.third.SmartApplicationContext; -import net.lab1024.smartadmin.util.SmartBeanUtil; -import net.lab1024.smartadmin.util.SmartPageUtil; -import net.lab1024.smartadmin.util.SmartQuartzUtil; -import lombok.extern.slf4j.Slf4j; -import net.lab1024.smartadmin.module.support.quartz.domain.dto.*; -import org.quartz.*; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.time.LocalDateTime; -import java.util.Date; -import java.util.List; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/13 0013 下午 14:50 - * @since JDK1.8 - */ -@Slf4j -@Service -public class QuartzTaskService { - - @Autowired - private QuartzTaskDao quartzTaskDao; - - @Autowired - private QuartzTaskLogDao quartzTaskLogDao; - - @Autowired - private Scheduler scheduler; - - /** - * 查询列表 - * - * @param queryDTO - * @return - */ - public ResponseDTO> query(QuartzQueryDTO queryDTO) { - Page pageParam = SmartPageUtil.convert2QueryPage(queryDTO); - List taskList = quartzTaskDao.queryList(pageParam, queryDTO); - pageParam.setRecords(taskList); - return ResponseDTO.succData(SmartPageUtil.convert2PageResult(pageParam)); - } - - /** - * 查询运行日志 - * - * @param queryDTO - * @return - */ - public ResponseDTO> queryLog(QuartzLogQueryDTO queryDTO) { - Page pageParam = SmartPageUtil.convert2QueryPage(queryDTO); - List taskList = quartzTaskLogDao.queryList(pageParam, queryDTO); - pageParam.setRecords(taskList); - return ResponseDTO.succData(SmartPageUtil.convert2PageResult(pageParam)); - } - - /** - * 保存或更新 - * - * @param quartzTaskDTO - * @return - * @throws Exception - */ - @Transactional(rollbackFor = Throwable.class) - public ResponseDTO saveOrUpdateTask(QuartzTaskDTO quartzTaskDTO) throws Exception { - ResponseDTO baseValid = this.baseValid(quartzTaskDTO); - if (!baseValid.isSuccess()) { - return baseValid; - } - Long taskId = quartzTaskDTO.getId(); - if (taskId == null) { - return this.saveTask(quartzTaskDTO); - } else { - return this.updateTask(quartzTaskDTO); - } - } - - private ResponseDTO baseValid(QuartzTaskDTO quartzTaskDTO) { - Object taskBean = null; - try { - taskBean = SmartApplicationContext.getBean(quartzTaskDTO.getTaskBean()); - } catch (Exception e) { - log.error("taskBean 不存在{}", e); - } - if (taskBean == null) { - return ResponseDTO.wrap(ResponseCodeConst.ERROR_PARAM, "taskBean 不存在"); - } - if (!CronExpression.isValidExpression(quartzTaskDTO.getTaskCron())) { - return ResponseDTO.wrap(ResponseCodeConst.ERROR_PARAM, "请传入正确的正则表达式"); - } - return ResponseDTO.succ(); - } - - private ResponseDTO saveTask(QuartzTaskDTO quartzTaskDTO) throws Exception { - QuartzTaskEntity taskEntity = SmartBeanUtil.copy(quartzTaskDTO, QuartzTaskEntity.class); - taskEntity.setTaskStatus(TaskStatusEnum.NORMAL.getStatus()); - taskEntity.setUpdateTime(new Date()); - taskEntity.setCreateTime(new Date()); - quartzTaskDao.insert(taskEntity); - this.createQuartzTask(scheduler, taskEntity); - return ResponseDTO.succ(); - } - - private ResponseDTO updateTask(QuartzTaskDTO quartzTaskDTO) throws Exception { - QuartzTaskEntity updateEntity = quartzTaskDao.selectById(quartzTaskDTO.getId()); - if (updateEntity == null) { - return ResponseDTO.wrap(ResponseCodeConst.ERROR_PARAM, "task不存在"); - } - QuartzTaskEntity taskEntity = SmartBeanUtil.copy(quartzTaskDTO, QuartzTaskEntity.class); - //任务状态不能更新 - taskEntity.setTaskStatus(updateEntity.getTaskStatus()); - taskEntity.setUpdateTime(new Date()); - quartzTaskDao.updateById(taskEntity); - if(this.checkExist(taskEntity.getId())){ - this.updateQuartzTask(scheduler, taskEntity); - }else{ - this.createQuartzTask(scheduler,taskEntity); - } - - return ResponseDTO.succ(); - } - - /** - * 立即运行 - * - * @param taskId - * @return - * @throws Exception - */ - public ResponseDTO runTask(Long taskId) throws Exception { - QuartzTaskEntity quartzTaskEntity = quartzTaskDao.selectById(taskId); - if (quartzTaskEntity == null) { - return ResponseDTO.wrap(ResponseCodeConst.ERROR_PARAM, "task不存在"); - } - this.runQuartzTask(scheduler, quartzTaskEntity); - return ResponseDTO.succ(); - } - - /** - * 暂停运行 - * - * @param taskId - * @return - * @throws Exception - */ - @Transactional(rollbackFor = Throwable.class) - public ResponseDTO pauseTask(Long taskId) throws Exception { - QuartzTaskEntity quartzTaskEntity = quartzTaskDao.selectById(taskId); - if (quartzTaskEntity == null) { - return ResponseDTO.wrap(ResponseCodeConst.ERROR_PARAM, "task不存在"); - } - quartzTaskEntity.setTaskStatus(TaskStatusEnum.PAUSE.getStatus()); - quartzTaskDao.updateById(quartzTaskEntity); - this.pauseQuartzTask(scheduler, quartzTaskEntity); - return ResponseDTO.succ(); - } - - /** - * 恢复任务 - * - * @param taskId - * @return - * @throws Exception - */ - @Transactional(rollbackFor = Throwable.class) - public ResponseDTO resumeTask(Long taskId) throws Exception { - QuartzTaskEntity quartzTaskEntity = quartzTaskDao.selectById(taskId); - if (quartzTaskEntity == null) { - return ResponseDTO.wrap(ResponseCodeConst.ERROR_PARAM, "task不存在"); - } - quartzTaskEntity.setTaskStatus(TaskStatusEnum.NORMAL.getStatus()); - quartzTaskDao.updateById(quartzTaskEntity); - this.resumeQuartzTask(scheduler, quartzTaskEntity); - return ResponseDTO.succ(); - } - - /** - * 删除任务 - * - * @param taskId - * @return - * @throws Exception - */ - public ResponseDTO deleteTask(Long taskId) throws Exception { - QuartzTaskEntity quartzTaskEntity = quartzTaskDao.selectById(taskId); - if (quartzTaskEntity == null) { - return ResponseDTO.wrap(ResponseCodeConst.ERROR_PARAM, "task不存在"); - } - quartzTaskDao.deleteById(taskId); - this.deleteQuartzTask(scheduler, taskId); - return ResponseDTO.succ(); - } - - /** - * 通过任务Id 获取任务实体 - * - * @param taskId - * @return - */ - public QuartzTaskEntity getByTaskId(Long taskId) { - return quartzTaskDao.selectById(taskId); - } - - /** - * 创建任务 - * - * @param scheduler - * @param taskEntity - * @throws Exception - */ - public void createQuartzTask(Scheduler scheduler, QuartzTaskEntity taskEntity) throws Exception { - JobKey jobKey = SmartQuartzUtil.getJobKey(taskEntity.getId()); - JobDetail jobDetail = JobBuilder.newJob(QuartzTask.class).withIdentity(jobKey).build(); - - CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(taskEntity.getTaskCron()).withMisfireHandlingInstructionDoNothing(); - - TriggerKey triggerKey = SmartQuartzUtil.getTriggerKey(Long.valueOf(taskEntity.getId())); - CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(scheduleBuilder).build(); - - jobDetail.getJobDataMap().put(QuartzConst.QUARTZ_PARAMS_KEY, taskEntity.getTaskParams()); - scheduler.scheduleJob(jobDetail, trigger); - //如果任务是暂停状态,则暂停任务 - if (TaskStatusEnum.PAUSE.getStatus().equals(taskEntity.getTaskStatus())) { - this.pauseQuartzTask(scheduler, taskEntity); - } - } - - /** - * 更新任务 - * - * @param scheduler - * @param taskEntity - * @throws Exception - */ - private void updateQuartzTask(Scheduler scheduler, QuartzTaskEntity taskEntity) throws Exception { - TriggerKey triggerKey = SmartQuartzUtil.getTriggerKey(Long.valueOf(taskEntity.getId())); - - CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(taskEntity.getTaskCron()).withMisfireHandlingInstructionDoNothing(); - - CronTrigger trigger = this.getCronTrigger(scheduler, Long.valueOf(taskEntity.getId())); - - trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build(); - - trigger.getJobDataMap().put(QuartzConst.QUARTZ_PARAMS_KEY, taskEntity.getTaskParams()); - - scheduler.rescheduleJob(triggerKey, trigger); - //如果更新之前任务是暂停状态,此时再次暂停任务 - if (TaskStatusEnum.PAUSE.getStatus().equals(taskEntity.getTaskStatus())) { - this.pauseQuartzTask(scheduler, taskEntity); - } - } - - private CronTrigger getCronTrigger(Scheduler scheduler, Long taskId) throws Exception { - TriggerKey triggerKey = SmartQuartzUtil.getTriggerKey(taskId); - return (CronTrigger) scheduler.getTrigger(triggerKey); - } - - /** - * 立即运行 - * - * @param scheduler - * @param taskEntity - * @throws Exception - */ - private void runQuartzTask(Scheduler scheduler, QuartzTaskEntity taskEntity) throws Exception { - JobDataMap dataMap = new JobDataMap(); - dataMap.put(QuartzConst.QUARTZ_PARAMS_KEY, taskEntity.getTaskParams()); - JobKey jobKey = SmartQuartzUtil.getJobKey(taskEntity.getId()); - if(!scheduler.checkExists(jobKey)){ - this.createQuartzTask(scheduler,taskEntity); - scheduler.triggerJob(jobKey, dataMap); - return; - } - scheduler.triggerJob(jobKey, dataMap); - } - - /** - * 暂停任务 - * - * @param scheduler - * @param quartzTaskEntity - * @throws Exception - */ - private void pauseQuartzTask(Scheduler scheduler, QuartzTaskEntity quartzTaskEntity) throws Exception { - JobKey jobKey = SmartQuartzUtil.getJobKey(quartzTaskEntity.getId()); - if(!scheduler.checkExists(jobKey)){ - this.createQuartzTask(scheduler,quartzTaskEntity); - scheduler.pauseJob(jobKey); - return; - } - scheduler.pauseJob(jobKey); - } - - /** - * 恢复任务 - * - * @param scheduler - * @param quartzTaskEntity - * @throws Exception - */ - private void resumeQuartzTask(Scheduler scheduler, QuartzTaskEntity quartzTaskEntity) throws Exception { - JobKey jobKey = SmartQuartzUtil.getJobKey(quartzTaskEntity.getId()); - if(!scheduler.checkExists(jobKey)){ - this.createQuartzTask(scheduler,quartzTaskEntity); - return; - } - scheduler.resumeJob(jobKey); - } - - /** - * 删除任务 - * - * @param scheduler - * @param taskId - * @throws Exception - */ - private void deleteQuartzTask(Scheduler scheduler, Long taskId) throws Exception { - JobKey jobKey = SmartQuartzUtil.getJobKey(taskId); - if(!scheduler.checkExists(jobKey)){ - return; - } - scheduler.deleteJob(jobKey); - } - - - private Boolean checkExist(Long taskId) throws Exception{ - JobKey jobKey = SmartQuartzUtil.getJobKey(taskId); - return scheduler.checkExists(jobKey); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/task/test/Example.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/task/test/Example.java deleted file mode 100644 index f62d22b5..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/task/test/Example.java +++ /dev/null @@ -1,28 +0,0 @@ -package net.lab1024.smartadmin.module.support.quartz.task.test; - -import lombok.extern.slf4j.Slf4j; -import net.lab1024.smartadmin.common.domain.ITask; -import net.lab1024.smartadmin.util.SmartDateUtil; -import org.springframework.stereotype.Component; - -import java.util.Date; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/13 0013 下午 14:26 - * @since JDK1.8 - */ -@Slf4j -@Component("exampleTask") -public class Example implements ITask { - - @Override - public void execute(String paramJson) throws Exception { - log.warn("{}-今天搬了{}块砖,paramJson:{}",SmartDateUtil.formatYMDHMS(new Date()),System.currentTimeMillis(),paramJson ); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/SmartReloadCommand.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/SmartReloadCommand.java deleted file mode 100644 index 2535efdd..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/SmartReloadCommand.java +++ /dev/null @@ -1,52 +0,0 @@ -package net.lab1024.smartadmin.module.support.smartreload; - -import net.lab1024.smartadmin.common.reload.abstracts.AbstractSmartReloadCommand4Spring; -import net.lab1024.smartadmin.common.reload.domain.entity.ReloadItem; -import net.lab1024.smartadmin.common.reload.domain.entity.SmartReloadResult; -import net.lab1024.smartadmin.module.support.smartreload.dao.ReloadItemDao; -import net.lab1024.smartadmin.module.support.smartreload.dao.ReloadResultDao; -import net.lab1024.smartadmin.module.support.smartreload.domain.entity.ReloadItemEntity; -import net.lab1024.smartadmin.module.support.smartreload.domain.entity.ReloadResultEntity; -import net.lab1024.smartadmin.util.SmartBeanUtil; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.List; - -/** - * Smart Reload 业务 - * - * @author listen - * @date 2018/02/10 09:18 - */ -@Component -public class SmartReloadCommand extends AbstractSmartReloadCommand4Spring { - - @Autowired - private ReloadItemDao reloadItemDao; - - @Autowired - private ReloadResultDao reloadResultDao; - - /** - * 读取数据库中SmartReload项 - * - * @return List - */ - @Override - public List readReloadItem() { - List reloadItemEntityList = reloadItemDao.selectList(null); - return SmartBeanUtil.copyList(reloadItemEntityList, ReloadItem.class); - } - - /** - * 保存reload结果 - * - * @param smartReloadResult - */ - @Override - public void handleReloadResult(SmartReloadResult smartReloadResult) { - ReloadResultEntity reloadResultEntity = SmartBeanUtil.copy(smartReloadResult, ReloadResultEntity.class); - reloadResultDao.insert(reloadResultEntity); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/SmartReloadController.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/SmartReloadController.java deleted file mode 100644 index 2d6e9560..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/SmartReloadController.java +++ /dev/null @@ -1,52 +0,0 @@ -package net.lab1024.smartadmin.module.support.smartreload; - -import net.lab1024.smartadmin.common.anno.NoValidPrivilege; -import net.lab1024.smartadmin.common.anno.OperateLog; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.constant.SwaggerTagConst; -import net.lab1024.smartadmin.module.support.smartreload.domain.dto.ReloadItemUpdateDTO; -import net.lab1024.smartadmin.module.support.smartreload.domain.dto.ReloadItemVO; -import net.lab1024.smartadmin.module.support.smartreload.domain.dto.ReloadResultVO; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; -import java.util.List; - -/** - * Smart Reload 路由 - * - * @author listen - * @date 2018/02/10 09:18 - */ -@Api(tags = {SwaggerTagConst.Admin.MANAGER_SMART_RELOAD}) -@OperateLog -@RestController -public class SmartReloadController { - - @Autowired - private SmartReloadService smartReloadService; - - @ApiOperation(value = "获取全部Smart-reload项", notes = "获取全部Smart-reload项") - @GetMapping("/smartReload/all") - @NoValidPrivilege - public ResponseDTO> listAllReloadItem() { - return smartReloadService.listAllReloadItem(); - } - - @ApiOperation(value = "获取reload result", notes = "获取reload result") - @GetMapping("/smartReload/result/{tag}") - @NoValidPrivilege - public ResponseDTO> queryReloadResult(@PathVariable("tag") String tag) { - return smartReloadService.listReloadItemResult(tag); - } - - @ApiOperation("通过tag更新标识") - @PostMapping("/smartReload/update") - @NoValidPrivilege - public ResponseDTO updateByTag(@RequestBody @Valid ReloadItemUpdateDTO updateDTO) { - return smartReloadService.updateByTag(updateDTO); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/SmartReloadService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/SmartReloadService.java deleted file mode 100644 index 78778659..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/SmartReloadService.java +++ /dev/null @@ -1,103 +0,0 @@ -package net.lab1024.smartadmin.module.support.smartreload; - -import net.lab1024.smartadmin.common.constant.ResponseCodeConst; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.common.reload.SmartReloadManager; -import net.lab1024.smartadmin.module.support.smartreload.dao.ReloadItemDao; -import net.lab1024.smartadmin.module.support.smartreload.dao.ReloadResultDao; -import net.lab1024.smartadmin.module.support.smartreload.domain.dto.ReloadItemUpdateDTO; -import net.lab1024.smartadmin.module.support.smartreload.domain.dto.ReloadItemVO; -import net.lab1024.smartadmin.module.support.smartreload.domain.dto.ReloadResultVO; -import net.lab1024.smartadmin.module.support.smartreload.domain.entity.ReloadItemEntity; -import net.lab1024.smartadmin.module.support.smartreload.domain.entity.ReloadResultEntity; -import net.lab1024.smartadmin.util.SmartBeanUtil; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; - -import javax.annotation.PostConstruct; -import java.sql.Timestamp; -import java.util.List; -import java.util.concurrent.TimeUnit; - -/** - * Smart initDefines 业务 - * - * @author listen - * @date 2018/02/10 13:49 - */ -@Service -public class SmartReloadService { - - @Autowired - private SmartReloadManager smartReloadManager; - - @Autowired - private SmartReloadCommand smartReloadCommand; - - @Autowired - private ReloadItemDao reloadItemDao; - - @Autowired - private ReloadResultDao reloadResultDao; - - @Value("${smart-reload.time-interval}") - private Long timeInterval; - - @PostConstruct - public void init() { - smartReloadManager.addCommand(smartReloadCommand, 10, timeInterval, TimeUnit.SECONDS); - } - - /** - * 注册到SmartReload里 - */ - public void register(Object reload) { - smartReloadManager.register(reload); - } - - /** - * 获取所有 initDefines 项 - * - * @return - */ - public ResponseDTO> listAllReloadItem() { - List reloadItemEntityList = reloadItemDao.selectList(null); - List reloadItemDTOList = SmartBeanUtil.copyList(reloadItemEntityList, ReloadItemVO.class); - return ResponseDTO.succData(reloadItemDTOList); - } - - /** - * 根据 tag - * 获取所有 initDefines 运行结果 - * - * @return ResponseDTO - */ - public ResponseDTO> listReloadItemResult(String tag) { - ReloadResultEntity query = new ReloadResultEntity(); - query.setTag(tag); - List reloadResultEntityList = reloadResultDao.query(tag); - List reloadResultDTOList = SmartBeanUtil.copyList(reloadResultEntityList, ReloadResultVO.class); - return ResponseDTO.succData(reloadResultDTOList); - } - - /** - * 通过标签更新标识符 - * - * @param updateDTO - * @return - */ - public ResponseDTO updateByTag(ReloadItemUpdateDTO updateDTO) { - ReloadItemEntity entity = new ReloadItemEntity(); - entity.setTag(updateDTO.getTag()); - ReloadItemEntity reloadItemEntity = reloadItemDao.selectById(entity.getTag()); - if (null == reloadItemEntity) { - return ResponseDTO.wrap(ResponseCodeConst.NOT_EXISTS); - } - reloadItemEntity.setIdentification(updateDTO.getIdentification()); - reloadItemEntity.setUpdateTime(new Timestamp(System.currentTimeMillis())); - reloadItemEntity.setArgs(updateDTO.getArgs()); - reloadItemDao.updateById(reloadItemEntity); - return ResponseDTO.succ(); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/dao/ReloadItemDao.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/dao/ReloadItemDao.java deleted file mode 100644 index c497ebbc..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/dao/ReloadItemDao.java +++ /dev/null @@ -1,15 +0,0 @@ -package net.lab1024.smartadmin.module.support.smartreload.dao; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import net.lab1024.smartadmin.module.support.smartreload.domain.entity.ReloadItemEntity; -import org.apache.ibatis.annotations.Mapper; -import org.springframework.stereotype.Component; - -/** - * t_reload_item 数据表dao - * - * @author listen - * @date 2018/02/10 09:23 - */ -@Component -@Mapper -public interface ReloadItemDao extends BaseMapper {} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/dao/ReloadResultDao.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/dao/ReloadResultDao.java deleted file mode 100644 index dc4d2d69..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/dao/ReloadResultDao.java +++ /dev/null @@ -1,23 +0,0 @@ -package net.lab1024.smartadmin.module.support.smartreload.dao; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import net.lab1024.smartadmin.module.support.smartreload.domain.entity.ReloadResultEntity; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; -import org.springframework.stereotype.Component; - -import java.util.List; - -/** - * t_reload_result 数据表dao - * - * @author listen - * @date 2018/02/10 09:23 - */ -@Component -@Mapper -public interface ReloadResultDao extends BaseMapper { - - - List query(@Param("tag") String tag); -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/dto/ReloadItemVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/dto/ReloadItemVO.java deleted file mode 100644 index 8f462297..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/dto/ReloadItemVO.java +++ /dev/null @@ -1,46 +0,0 @@ -package net.lab1024.smartadmin.module.support.smartreload.domain.dto; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.Date; - -/** - * initDefines 项 DTO 类 - * - * @author listen - * @date 2018/02/10 09:29 - */ -@Data -public class ReloadItemVO { - - /** - * 加载项标签 - */ - @ApiModelProperty("加载项标签") - private String tag; - - /** - * 参数 - */ - @ApiModelProperty("参数") - private String args; - - /** - * 状态标识 - */ - @ApiModelProperty("状态标识") - private String identification; - - /** - * 更新时间 - */ - @ApiModelProperty("最后更新时间") - private Date updateTime; - - /** - * 创建时间 - */ - @ApiModelProperty("创建时间") - private Date createTime; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/dto/ReloadResultVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/dto/ReloadResultVO.java deleted file mode 100644 index 56b388a3..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/dto/ReloadResultVO.java +++ /dev/null @@ -1,45 +0,0 @@ -package net.lab1024.smartadmin.module.support.smartreload.domain.dto; -import lombok.Data; - -import java.util.Date; - -/** - * reload_result DTO 类 - * - * @author listen - * @date 2018/02/10 09:29 - */ -@Data -public class ReloadResultVO { - - /** - * 加载项标签 - */ - private String tag; - - /** - * 参数 - */ - private String args; - - /** - * 状态标识 - */ - private String identification; - - /** - * 运行结果 - */ - private Boolean result; - - /** - * 异常 - */ - private String exception; - - /** - * 创建时间 - */ - private Date createTime; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/MessageTypeEnum.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/MessageTypeEnum.java deleted file mode 100644 index eda10334..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/MessageTypeEnum.java +++ /dev/null @@ -1,44 +0,0 @@ -package net.lab1024.smartadmin.module.support.websocket; - -import net.lab1024.smartadmin.common.domain.BaseEnum; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/7/10 0010 下午 19:11 - * @since JDK1.8 - */ -public enum MessageTypeEnum implements BaseEnum{ - - SYS_NOTICE(1,"系统通知"), - - PRIVATE_LETTER(2,"私信"), - - HEART_BEAT(3,"心跳"); - - - private Integer value; - - private String desc; - - - MessageTypeEnum(Integer value,String desc){ - this.value = value; - this.desc = desc; - } - - - @Override - public Integer getValue() { - return this.value; - } - - @Override - public String getDesc() { - return this.desc; - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/WebSocketServer.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/WebSocketServer.java deleted file mode 100644 index a26489c8..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/WebSocketServer.java +++ /dev/null @@ -1,199 +0,0 @@ -package net.lab1024.smartadmin.module.support.websocket; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.TypeReference; -import net.lab1024.smartadmin.module.support.websocket.domain.MessageCommonDTO; -import net.lab1024.smartadmin.module.support.websocket.domain.MessageDTO; -import net.lab1024.smartadmin.module.support.websocket.domain.WebSocketHeartBeatDTO; -import com.google.common.collect.Lists; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; - -import javax.websocket.*; -import javax.websocket.server.PathParam; -import javax.websocket.server.ServerEndpoint; -import java.io.IOException; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.concurrent.ConcurrentHashMap; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/7/10 0010 下午 16:09 - * @since JDK1.8 - */ -@Slf4j -@ServerEndpoint("/webSocket/{employeeId}") -@Component -public class WebSocketServer { - - /** - * 当前在线用户 employee,expireTime - */ - private static ConcurrentHashMap onLineUser = new ConcurrentHashMap<>(); - - /** - * 当前在线用户所对应的 socket session信息 - */ - private static ConcurrentHashMap webSocketSession = new ConcurrentHashMap<>(); - - @OnOpen - public void onOpen(Session session, @PathParam("employeeId") Long employeeId) { - if (employeeId == null) { - return; - } - webSocketSession.put(employeeId, session); - log.info("连接打开"); - } - - /** - * 不做处理如果 前台可以监听到浏览器关闭 此处处理在线人数也可 - * - * @param session - */ - @OnClose - public void onClose(Session session) { - - log.info("连接关闭"); - } - - @OnError - public void onError(Session session, Throwable error) { - log.error("socket error,{}", error); - error.printStackTrace(); - } - - /** - * 此方法接收 前台信息 - * - * @param message - * @param session - */ - @OnMessage - public void onMessage(String message, Session session) { - if (StringUtils.isEmpty(message)) { - return; - } - MessageCommonDTO messageCommonDTO = JSON.parseObject(message, new TypeReference() {}); - if (MessageTypeEnum.HEART_BEAT.getValue().equals(messageCommonDTO.getMessageType())) { - this.heartBeatHandle(messageCommonDTO.getJsonStr()); - } - } - - /** - * 更新用户过期时间 - * - * @param json - */ - private void heartBeatHandle(String json) { - Long currentDate = System.currentTimeMillis(); - Long expireTime = currentDate + 5 * 1000; - WebSocketHeartBeatDTO heartBeatDTO = JSON.parseObject(json, new TypeReference() {}); - Long employeeId = heartBeatDTO.getEmployeeId(); - onLineUser.put(employeeId, expireTime); - } - - /** - * 移除过期用户,如果用户超过5s未获取到心跳列表则清除在线用户信息 - */ - @Scheduled(cron = "0/5 * * * * ?") - private void removeOnLineUser() { - Long currentDate = System.currentTimeMillis(); - Iterator> it = onLineUser.entrySet().iterator(); - while (it.hasNext()) { - Map.Entry entry = it.next(); - Long key = entry.getKey(); - Long value = entry.getValue(); - Long userExpireTime = value + 5 * 1000; - if (currentDate > userExpireTime) { - onLineUser.remove(key); - webSocketSession.remove(key); - } - } - } - - /** - * 此方法用户后台发送消息 - * - * @param messageDTO - */ - public static void sendMessage(MessageDTO messageDTO) { - //系统通知 - if (MessageTypeEnum.SYS_NOTICE.getValue().equals(messageDTO.getMessageType())) { - sendAllOnLineUser(messageDTO.getMessage(), messageDTO.getFromUserId()); - } - //站内信 - if (MessageTypeEnum.PRIVATE_LETTER.getValue().equals(messageDTO.getMessageType())) { - sendOneOnLineUser(messageDTO.getMessage(), messageDTO.getToUserId()); - } - } - - /** - * 通知所有在线用户 - * - * @param message - */ - public static void sendAllOnLineUser(String message, Long fromUserId) { - for (Entry entry : webSocketSession.entrySet()) { - Session session = entry.getValue(); - Long userId = entry.getKey(); - try { - //不想消息创建人推送消息 - if (! userId.equals(fromUserId)) { - session.getBasicRemote().sendText(message); - } - } catch (IOException e) { - log.error("推送消息到{},发送错误{}", userId, e); - log.error("", e); - } - - } - } - - /** - * 通知某人 - * - * @param message - * @param toUserId - */ - public static void sendOneOnLineUser(String message, Long toUserId) { - Session session = webSocketSession.get(toUserId); - if (session == null) { - log.error("推送消息到{},用户不在线", toUserId); - } - try { - session.getBasicRemote().sendText(message); - } catch (IOException e) { - log.error("推送消息到{},发送错误{}", toUserId, e); - log.error("", e); - } - } - - /** - * 获取所有在线用户id - * - * @return - */ - public static List getOnLineUserList() { - return Lists.newArrayList(onLineUser.keySet()); - } - - /** - * 获取当前在线用户数 - * - * @return - */ - public static Integer getOnLineUserCount() { - return onLineUser.entrySet().size(); - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/domain/MessageCommonDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/domain/MessageCommonDTO.java deleted file mode 100644 index 43828b38..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/domain/MessageCommonDTO.java +++ /dev/null @@ -1,29 +0,0 @@ -package net.lab1024.smartadmin.module.support.websocket.domain; - -import net.lab1024.smartadmin.module.support.websocket.MessageTypeEnum; -import lombok.Data; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/7/13 0013 下午 14:37 - * @since JDK1.8 - */ -@Data -public class MessageCommonDTO { - /** - * 消息类型 {@link MessageTypeEnum} - */ - private Integer messageType; - - /** - * 具体消息内容 - */ - private String jsonStr; - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/domain/MessageDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/domain/MessageDTO.java deleted file mode 100644 index 23fc615f..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/domain/MessageDTO.java +++ /dev/null @@ -1,41 +0,0 @@ -package net.lab1024.smartadmin.module.support.websocket.domain; - -import net.lab1024.smartadmin.module.support.websocket.MessageTypeEnum; -import lombok.Builder; -import lombok.Data; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/7/10 0010 下午 18:50 - * @since JDK1.8 - */ -@Data -@Builder -public class MessageDTO { - - /** - * 消息类型 {@link MessageTypeEnum} - */ - private Integer messageType; - - /** - * 消息体 - */ - private String message; - - /** - * 发送者 - */ - private Long fromUserId; - - /** - * 接收者,系统通知可为null - */ - private Long toUserId; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/domain/WebSocketHeartBeatDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/domain/WebSocketHeartBeatDTO.java deleted file mode 100644 index 90f8c78f..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/domain/WebSocketHeartBeatDTO.java +++ /dev/null @@ -1,23 +0,0 @@ -package net.lab1024.smartadmin.module.support.websocket.domain; - -import lombok.Data; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/7/13 0013 下午 14:39 - * @since JDK1.8 - */ -@Data -public class WebSocketHeartBeatDTO { - - /** - * 当前登录人id - */ - private Long employeeId; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/DataScopeController.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/DataScopeController.java deleted file mode 100644 index 75a5eec4..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/DataScopeController.java +++ /dev/null @@ -1,59 +0,0 @@ -package net.lab1024.smartadmin.module.system.datascope; - -import net.lab1024.smartadmin.common.anno.NoValidPrivilege; -import net.lab1024.smartadmin.common.anno.OperateLog; -import net.lab1024.smartadmin.constant.SwaggerTagConst; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.module.system.datascope.domain.dto.DataScopeAndViewTypeVO; -import net.lab1024.smartadmin.module.system.datascope.domain.dto.DataScopeBatchSetRoleDTO; -import net.lab1024.smartadmin.module.system.datascope.domain.dto.DataScopeSelectVO; -import net.lab1024.smartadmin.module.system.datascope.service.DataScopeService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; -import java.util.List; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/27 0027 下午 15:12 - * @since JDK1.8 - */ -@Api(tags = {SwaggerTagConst.Admin.MANAGER_DATA_SCOPE}) -@OperateLog -@RestController -public class DataScopeController { - - @Autowired - private DataScopeService dataScopeService; - - @ApiOperation(value = "获取当前系统所配置的所有数据范围") - @GetMapping("/dataScope/list") - @NoValidPrivilege - public ResponseDTO> dataScopeList() { - return dataScopeService.dataScopeList(); - } - - @ApiOperation(value = "获取某角色所设置的数据范围") - @GetMapping("/dataScope/listByRole/{roleId}") - @NoValidPrivilege - public ResponseDTO> dataScopeListByRole(@PathVariable Long roleId) { - return dataScopeService.dataScopeListByRole(roleId); - } - - @ApiOperation(value = "批量设置某角色数据范围") - @PostMapping("/dataScope/batchSet") - @NoValidPrivilege - public ResponseDTO dataScopeBatchSet(@RequestBody @Valid DataScopeBatchSetRoleDTO batchSetRoleDTO) { - return dataScopeService.dataScopeBatchSet(batchSetRoleDTO); - } - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/DataScopeRoleDao.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/DataScopeRoleDao.java deleted file mode 100644 index 1b926a7b..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/DataScopeRoleDao.java +++ /dev/null @@ -1,52 +0,0 @@ -package net.lab1024.smartadmin.module.system.datascope; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import net.lab1024.smartadmin.module.system.datascope.domain.entity.DataScopeRoleEntity; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; -import org.springframework.stereotype.Component; - -import java.util.List; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/27 0027 下午 14:41 - * @since JDK1.8 - */ -@Mapper -@Component -public interface DataScopeRoleDao extends BaseMapper { - - /** - * 获取某个角色的设置信息 - * @param roleId - * @return - */ - List listByRoleId(@Param("roleId") Long roleId); - - /** - * 获取某批角色的所有数据范围配置信息 - * @param roleIdList - * @return - */ - List listByRoleIdList(@Param("roleIdList") List roleIdList); - - /** - * 删除某个角色的设置信息 - * @param roleId - * @return - */ - void deleteByRoleId(@Param("roleId") Long roleId); - - - /** - * 批量添加设置信息 - * @param list - */ - void batchInsert(@Param("list")List list); -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/constant/DataScopeViewTypeEnum.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/constant/DataScopeViewTypeEnum.java deleted file mode 100644 index 75ddf0c9..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/constant/DataScopeViewTypeEnum.java +++ /dev/null @@ -1,54 +0,0 @@ -package net.lab1024.smartadmin.module.system.datascope.constant; - - -import net.lab1024.smartadmin.common.domain.BaseEnum; - -import java.util.Arrays; -import java.util.Optional; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/28 0028 下午 15:37 - * @since JDK1.8 - */ -public enum DataScopeViewTypeEnum implements BaseEnum { - - ME(0,0,"本人"), - - DEPARTMENT(1,5,"本部门"), - - DEPARTMENT_AND_SUB(2,10,"本部门及下属子部门"), - - ALL(3,15,"全部"); - - private Integer value; - private Integer level; - private String desc; - - DataScopeViewTypeEnum(Integer value,Integer level, String desc) { - this.value = value; - this.level = level; - this.desc = desc; - } - - @Override - public Integer getValue() { - return value; - } - - public Integer getLevel() { - return level; - } - - @Override - public String getDesc() { - return desc; - } - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/constant/DataScopeWhereInTypeEnum.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/constant/DataScopeWhereInTypeEnum.java deleted file mode 100644 index e9037373..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/constant/DataScopeWhereInTypeEnum.java +++ /dev/null @@ -1,42 +0,0 @@ -package net.lab1024.smartadmin.module.system.datascope.constant; - -import net.lab1024.smartadmin.common.domain.BaseEnum; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/5/8 0008 下午 16:00 - * @since JDK1.8 - */ -public enum DataScopeWhereInTypeEnum implements BaseEnum { - - EMPLOYEE(0,"以员工IN"), - - DEPARTMENT(1,"以部门IN"), - - CUSTOM_STRATEGY(2,"自定义策略"); - - private Integer value; - private String desc; - - DataScopeWhereInTypeEnum(Integer value, String desc) { - this.value = value; - this.desc = desc; - } - - @Override - public Integer getValue() { - return value; - } - - @Override - public String getDesc() { - return desc; - } - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeBatchSetDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeBatchSetDTO.java deleted file mode 100644 index 6ff9fc92..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeBatchSetDTO.java +++ /dev/null @@ -1,28 +0,0 @@ -package net.lab1024.smartadmin.module.system.datascope.domain.dto; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotNull; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/27 0027 下午 16:51 - * @since JDK1.8 - */ -@Data -public class DataScopeBatchSetDTO { - - @ApiModelProperty("数据范围类型") - @NotNull(message = "数据范围类型不能为空") - private Integer dataScopeType; - - @ApiModelProperty("可见范围") - @NotNull(message = "可见范围不能为空") - private Integer viewType; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeBatchSetRoleDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeBatchSetRoleDTO.java deleted file mode 100644 index 215ab664..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeBatchSetRoleDTO.java +++ /dev/null @@ -1,30 +0,0 @@ -package net.lab1024.smartadmin.module.system.datascope.domain.dto; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import java.util.List; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/27 0027 下午 16:47 - * @since JDK1.8 - */ -@Data -public class DataScopeBatchSetRoleDTO { - - @ApiModelProperty("角色id") - @NotNull(message = "角色id不能为空") - private Long roleId; - - @ApiModelProperty("设置信息") - @Valid - private List batchSetList; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeSelectVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeSelectVO.java deleted file mode 100644 index 5d0a3aa8..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeSelectVO.java +++ /dev/null @@ -1,24 +0,0 @@ -package net.lab1024.smartadmin.module.system.datascope.domain.dto; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/27 0027 下午 16:43 - * @since JDK1.8 - */ -@Data -public class DataScopeSelectVO { - - @ApiModelProperty("数据范围id") - private Integer dataScopeType; - - @ApiModelProperty("可见范围") - private Integer viewType; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeSqlConfigDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeSqlConfigDTO.java deleted file mode 100644 index 422933de..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeSqlConfigDTO.java +++ /dev/null @@ -1,40 +0,0 @@ -package net.lab1024.smartadmin.module.system.datascope.domain.dto; - -import lombok.Data; -import net.lab1024.smartadmin.module.system.datascope.constant.DataScopeTypeEnum; -import net.lab1024.smartadmin.module.system.datascope.constant.DataScopeWhereInTypeEnum; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/28 0028 下午 17:21 - * @since JDK1.8 - */ -@Data -public class DataScopeSqlConfigDTO { - - /** - * 数据范围类型 - * {@link DataScopeTypeEnum} - */ - private DataScopeTypeEnum dataScopeType; - - /** - * join sql 具体实现类 - */ - private Class joinSqlImplClazz; - - private String joinSql; - - private Integer whereIndex; - - /** - * whereIn类型 - * {@link DataScopeWhereInTypeEnum} - */ - private DataScopeWhereInTypeEnum dataScopeWhereInType; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/entity/DataScopeRoleEntity.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/entity/DataScopeRoleEntity.java deleted file mode 100644 index 016f05bf..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/entity/DataScopeRoleEntity.java +++ /dev/null @@ -1,33 +0,0 @@ -package net.lab1024.smartadmin.module.system.datascope.domain.entity; - -import com.baomidou.mybatisplus.annotation.TableName; -import net.lab1024.smartadmin.common.domain.BaseEntity; -import lombok.Data; - -/** - * [ 数据范围与角色关系 ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/27 0027 下午 14:43 - * @since JDK1.8 - */ -@Data -@TableName("t_role_data_scope") -public class DataScopeRoleEntity extends BaseEntity { - - /** - * 数据范围id - */ - private Integer dataScopeType; - /** - * 数据范围类型 - */ - private Integer viewType; - /** - * 角色id - */ - private Long roleId; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/service/DataScopeService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/service/DataScopeService.java deleted file mode 100644 index 46b80bd4..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/service/DataScopeService.java +++ /dev/null @@ -1,118 +0,0 @@ -package net.lab1024.smartadmin.module.system.datascope.service; - -import net.lab1024.smartadmin.common.constant.ResponseCodeConst; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.module.system.datascope.DataScopeRoleDao; -import net.lab1024.smartadmin.module.system.datascope.constant.DataScopeTypeEnum; -import net.lab1024.smartadmin.module.system.datascope.constant.DataScopeViewTypeEnum; -import net.lab1024.smartadmin.module.system.datascope.domain.entity.DataScopeRoleEntity; -import net.lab1024.smartadmin.util.SmartBeanUtil; -import com.google.common.collect.Lists; -import net.lab1024.smartadmin.module.system.datascope.domain.dto.*; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.CollectionUtils; - -import java.util.Comparator; -import java.util.List; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/27 0027 下午 14:52 - * @since JDK1.8 - */ -@Service -public class DataScopeService { - - @Autowired - private DataScopeRoleDao dataScopeRoleDao; - - /** - * 获取所有可以进行数据范围配置的信息 - * - * @return - */ - public ResponseDTO> dataScopeList() { - List dataScopeList = this.getDataScopeType(); - List dataScopeAndTypeList = SmartBeanUtil.copyList(dataScopeList, DataScopeAndViewTypeVO.class); - List typeList = this.getViewType(); - dataScopeAndTypeList.forEach(e -> { - e.setViewTypeList(typeList); - }); - return ResponseDTO.succData(dataScopeAndTypeList); - } - - /** - * 获取当前系统存在的数据可见范围 - * - * @return - */ - public List getViewType() { - List viewTypeList = Lists.newArrayList(); - DataScopeViewTypeEnum[] enums = DataScopeViewTypeEnum.class.getEnumConstants(); - DataScopeViewTypeVO dataScopeViewTypeDTO; - for (DataScopeViewTypeEnum viewTypeEnum : enums) { - dataScopeViewTypeDTO = DataScopeViewTypeVO.builder().viewType(viewTypeEnum.getValue()).viewTypeLevel(viewTypeEnum.getLevel()).viewTypeName(viewTypeEnum.getDesc()).build(); - viewTypeList.add(dataScopeViewTypeDTO); - } - Comparator comparator = (h1, h2) -> h1.getViewTypeLevel().compareTo(h2.getViewTypeLevel()); - viewTypeList.sort(comparator); - return viewTypeList; - } - - public List getDataScopeType() { - List dataScopeTypeList = Lists.newArrayList(); - DataScopeTypeEnum[] enums = DataScopeTypeEnum.class.getEnumConstants(); - DataScopeDTO dataScopeDTO; - for (DataScopeTypeEnum typeEnum : enums) { - dataScopeDTO = - DataScopeDTO.builder().dataScopeType(typeEnum.getValue()).dataScopeTypeDesc(typeEnum.getDesc()).dataScopeTypeName(typeEnum.getName()).dataScopeTypeSort(typeEnum.getSort()).build(); - dataScopeTypeList.add(dataScopeDTO); - } - Comparator comparator = (h1, h2) -> h1.getDataScopeTypeSort().compareTo(h2.getDataScopeTypeSort()); - dataScopeTypeList.sort(comparator); - return dataScopeTypeList; - } - - /** - * 获取某个角色的数据范围设置信息 - * - * @param roleId - * @return - */ - public ResponseDTO> dataScopeListByRole(Long roleId) { - - List dataScopeRoleEntityList = dataScopeRoleDao.listByRoleId(roleId); - if (CollectionUtils.isEmpty(dataScopeRoleEntityList)) { - return ResponseDTO.succData(Lists.newArrayList()); - } - List dataScopeSelects = SmartBeanUtil.copyList(dataScopeRoleEntityList, DataScopeSelectVO.class); - return ResponseDTO.succData(dataScopeSelects); - } - - /** - * 批量设置某个角色的数据范围设置信息 - * - * @param batchSetRoleDTO - * @return - */ - @Transactional(rollbackFor = Exception.class) - public ResponseDTO dataScopeBatchSet(DataScopeBatchSetRoleDTO batchSetRoleDTO) { - List batchSetList = batchSetRoleDTO.getBatchSetList(); - if (CollectionUtils.isEmpty(batchSetList)) { - return ResponseDTO.wrap(ResponseCodeConst.ERROR_PARAM, "缺少配置信息"); - } - List dataScopeRoleEntityList = SmartBeanUtil.copyList(batchSetList, DataScopeRoleEntity.class); - dataScopeRoleEntityList.forEach(e -> e.setRoleId(batchSetRoleDTO.getRoleId())); - dataScopeRoleDao.deleteByRoleId(batchSetRoleDTO.getRoleId()); - dataScopeRoleDao.batchInsert(dataScopeRoleEntityList); - return ResponseDTO.succ(); - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/strategy/DataScopePowerStrategy.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/strategy/DataScopePowerStrategy.java deleted file mode 100644 index d12cbf15..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/strategy/DataScopePowerStrategy.java +++ /dev/null @@ -1,24 +0,0 @@ -package net.lab1024.smartadmin.module.system.datascope.strategy; -import net.lab1024.smartadmin.module.system.datascope.constant.DataScopeViewTypeEnum; -import net.lab1024.smartadmin.module.system.datascope.domain.dto.DataScopeSqlConfigDTO; - -/** - * [ 数据范围策略 ,使用DataScopeWhereInTypeEnum.CUSTOM_STRATEGY类型,DataScope注解的joinSql属性无用] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2020/11/28 0008 下午 16:00 - * @since JDK1.8 - */ -public abstract class DataScopePowerStrategy { - - /** - * 获取joinsql 字符串 - * @param viewTypeEnum 查看的类型 - * @param sqlConfigDTO - * @return - */ - public abstract String getCondition(DataScopeViewTypeEnum viewTypeEnum, DataScopeSqlConfigDTO sqlConfigDTO); -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentController.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentController.java deleted file mode 100644 index 1a070773..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentController.java +++ /dev/null @@ -1,99 +0,0 @@ -package net.lab1024.smartadmin.module.system.department; - -import net.lab1024.smartadmin.common.anno.OperateLog; -import net.lab1024.smartadmin.constant.SwaggerTagConst; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.module.system.department.domain.dto.DepartmentCreateDTO; -import net.lab1024.smartadmin.module.system.department.domain.dto.DepartmentUpdateDTO; -import net.lab1024.smartadmin.module.system.department.domain.dto.DepartmentVO; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; -import java.util.List; - -/** - * 部门管理路由器 - * - * @author listen - * @date 2017/12/19 14:29 - */ -@Api(tags = {SwaggerTagConst.Admin.MANAGER_DEPARTMENT}) -@OperateLog -@RestController -public class DepartmentController { - - @Autowired - private DepartmentService departmentService; - - @ApiOperation(value = "查询部门树形列表", notes = "查询部门列表") - @GetMapping("/department/list") - public ResponseDTO> listDepartment() { - return departmentService.listDepartment(); - } - - @ApiOperation(value = "查询部门及员工列表", notes = "查询部门及员工列表") - @GetMapping("/department/listEmployee") - public ResponseDTO> listDepartmentEmployee() { - return departmentService.listAllDepartmentEmployee(null); - } - - @ApiOperation(value = "根据部门名称查询部门及员工列表", notes = "根据部门名称查询部门及员工列表") - @GetMapping("/department/listEmployeeByDepartmentName") - public ResponseDTO> listDepartmentEmployee(String departmentName) { - return departmentService.listAllDepartmentEmployee(departmentName); - } - - @ApiOperation(value = "添加部门", notes = "添加部门") - @PostMapping("/department/add") - public ResponseDTO addDepartment(@Valid @RequestBody DepartmentCreateDTO departmentCreateDTO) { - return departmentService.addDepartment(departmentCreateDTO); - } - - @ApiOperation(value = "更新部门信息", notes = "更新部门信息") - @PostMapping("/department/update") - public ResponseDTO updateDepartment(@Valid @RequestBody DepartmentUpdateDTO departmentUpdateDTO) { - return departmentService.updateDepartment(departmentUpdateDTO); - } - - @ApiOperation(value = "删除部门", notes = "删除部门") - @PostMapping("/department/delete/{deptId}") - public ResponseDTO delDepartment(@PathVariable Long deptId) { - return departmentService.delDepartment(deptId); - } - - @ApiOperation(value = "获取部门信息", notes = "获取部门") - @GetMapping("/department/query/{deptId}") - public ResponseDTO getDepartment(@PathVariable Long deptId) { - return departmentService.getDepartmentById(deptId); - } - - @ApiOperation(value = "查询部门列表", notes = "查询部门列表") - @GetMapping("/department/listAll") - public ResponseDTO> listAll() { - return departmentService.listAll(); - } - - - @ApiOperation(value = "上下移动") - @GetMapping("/department/upOrDown/{deptId}/{swapId}") - public ResponseDTO upOrDown(@PathVariable Long deptId, @PathVariable Long swapId) { - return departmentService.upOrDown(deptId, swapId); - } - - @ApiOperation(value = "升级") - @GetMapping("/department/upgrade/{deptId}") - public ResponseDTO upgrade(@PathVariable Long deptId) { - return departmentService.upgrade(deptId); - } - - @ApiOperation(value = "降级") - @GetMapping("/department/downgrade/{deptId}/{preId}") - public ResponseDTO downgrade(@PathVariable Long deptId, @PathVariable Long preId) { - return departmentService.downgrade(deptId, preId); - } - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentDao.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentDao.java deleted file mode 100644 index d7bc2f77..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentDao.java +++ /dev/null @@ -1,47 +0,0 @@ -package net.lab1024.smartadmin.module.system.department; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import net.lab1024.smartadmin.module.system.department.domain.dto.DepartmentVO; -import net.lab1024.smartadmin.module.system.department.domain.entity.DepartmentEntity; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; -import org.springframework.stereotype.Component; - -import java.util.List; - -/** - * t_department dao接口 - * - * @author listen - * @date 2017/12/19 10:58 - */ -@Component -@Mapper -public interface DepartmentDao extends BaseMapper { - - /** - * 根据部门id,查询此部门直接子部门的数量 - * - * @param deptId - * @return int 子部门的数量 - */ - Integer countSubDepartment(@Param("deptId") Long deptId); - - /** - * 获取全部部门列表 - * - * @return List - */ - List listAll(); - - /** - * 功能描述: 根据父部门id查询 - * - * @param - * @return - * @auther yandanyang - * @date 2018/8/25 0025 上午 9:46 - */ - List selectByParentId(@Param("departmentId") Long departmentId); - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentResponseCodeConst.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentResponseCodeConst.java deleted file mode 100644 index a7a219e0..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentResponseCodeConst.java +++ /dev/null @@ -1,39 +0,0 @@ -package net.lab1024.smartadmin.module.system.department; - -import net.lab1024.smartadmin.common.constant.ResponseCodeConst; - -/** - * 部门返回信息常量类 - * 2001 - 2999 - * - * @author listen - * @date 2017/12/19 18:52 - */ -public class DepartmentResponseCodeConst extends ResponseCodeConst { - - /** - * 部门不存在 1001 - */ - public static final DepartmentResponseCodeConst DEPT_NOT_EXISTS = new DepartmentResponseCodeConst(2001, "部门不存在"); - - /** - * 当前部门有子级部门 不能删除 10003 - */ - public static final DepartmentResponseCodeConst CANNOT_DEL_DEPARTMENT_WITH_CHILD = new - DepartmentResponseCodeConst(2002, "当前部门有子级部门,无法删除!"); - - /** - * 当前部门有员工 不能删除 10004 - */ - public static final DepartmentResponseCodeConst CANNOT_DEL_DEPARTMENT_WITH_EMPLOYEE = new - DepartmentResponseCodeConst(2003, "当前部门有员工,无法删除!"); - - /** - * - */ - public static final DepartmentResponseCodeConst PARENT_ID_ERROR = new DepartmentResponseCodeConst(2004, "上级部门id不能等于当前部门id"); - - public DepartmentResponseCodeConst(int code, String msg) { - super(code, msg); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentService.java deleted file mode 100644 index b5b99ab0..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentService.java +++ /dev/null @@ -1,285 +0,0 @@ -package net.lab1024.smartadmin.module.system.department; - -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.module.system.department.domain.dto.DepartmentCreateDTO; -import net.lab1024.smartadmin.module.system.department.domain.dto.DepartmentUpdateDTO; -import net.lab1024.smartadmin.module.system.department.domain.dto.DepartmentVO; -import net.lab1024.smartadmin.module.system.department.domain.entity.DepartmentEntity; -import net.lab1024.smartadmin.module.system.employee.EmployeeDao; -import net.lab1024.smartadmin.module.system.employee.domain.dto.EmployeeDTO; -import net.lab1024.smartadmin.util.SmartBeanUtil; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; - -/** - * 部门管理业务类 - * - * @author listen - * @date 2017/12/19 14:25 - */ -@Service -public class DepartmentService { - - @Autowired - private DepartmentDao departmentDao; - - @Autowired - private EmployeeDao employeeDao; - - @Autowired - private DepartmentTreeService departmentTreeService; - - /** - * 获取部门树形结构 - * - * @return - */ - public ResponseDTO> listDepartment() { - List departmentVOList = departmentDao.listAll(); - List result = departmentTreeService.buildTree(departmentVOList); - return ResponseDTO.succData(result); - } - - /** - * 获取所有部门和员工信息 - * - * @param departmentName - * @return - */ - public ResponseDTO> listAllDepartmentEmployee(String departmentName) { - - // 获取全部部门列表 - List departmentVOList = departmentDao.listAll(); - if (StringUtils.isNotBlank(departmentName)) { - // 检索条件不为空的时候 过滤部门列表 - departmentVOList = filterDepartment(departmentVOList, departmentName); - } - - Map departmentMap = departmentVOList.stream().collect(Collectors.toMap(DepartmentVO::getId, Function.identity())); - // 获取全部员工列表 - List employeeList = employeeDao.listAll(); - employeeList.forEach(employeeDTO -> { - - DepartmentVO departmentVO = departmentMap.get(employeeDTO.getDepartmentId()); - if (null == departmentVO) { - return; - } - List employeeDTOList = departmentVO.getEmployees(); - if (null == employeeDTOList) { - employeeDTOList = new ArrayList<>(); - } - employeeDTOList.add(employeeDTO); - departmentVO.setEmployees(employeeDTOList); - }); - List result = departmentTreeService.buildTree(departmentVOList); - return ResponseDTO.succData(result); - } - - /** - * 过滤部门名称,获取过滤后的结果 - * - * @author lidoudou - * @date 2019/4/28 20:17 - */ - private List filterDepartment(List departmentVOList, String departmentName) { - Map departmentMap = new HashMap<>(); - departmentVOList.forEach(item -> { - if (item.getName().indexOf(departmentName) < 0) { - return; - } - // 当前部门包含关键字 - departmentMap.put(item.getId(), item); - Long parentId = item.getParentId(); - if (null != parentId) { - List filterResult = new ArrayList<>(); - getParentDepartment(departmentVOList, parentId, filterResult); - for (DepartmentVO dto : filterResult) { - if (!departmentMap.containsKey(dto.getId())) { - departmentMap.put(dto.getId(), dto); - } - } - } - }); - return departmentMap.values().stream().collect(Collectors.toList()); - } - - private List getParentDepartment(List departmentVOList, Long parentId, List result) { - List deptList = departmentVOList.stream().filter(e -> e.getId().equals(parentId)).collect(Collectors.toList()); - for (DepartmentVO item : deptList) { - result.add(item); - if (item.getParentId() != 0 && item.getParentId() != null) { - result.addAll(getParentDepartment(departmentVOList, item.getParentId(), result)); - } - } - return result; - } - - /** - * 新增添加部门 - * - * @param departmentCreateDTO - * @return AjaxResult - */ - @Transactional(rollbackFor = Exception.class) - public ResponseDTO addDepartment(DepartmentCreateDTO departmentCreateDTO) { - DepartmentEntity departmentEntity = SmartBeanUtil.copy(departmentCreateDTO, DepartmentEntity.class); - departmentEntity.setSort(0L); - departmentDao.insert(departmentEntity); - departmentEntity.setSort(departmentEntity.getId()); - departmentDao.updateById(departmentEntity); - return ResponseDTO.succ(); - } - - /** - * 更新部门信息 - * - * @param updateDTO - * @return AjaxResult - */ - @Transactional(rollbackFor = Exception.class) - public ResponseDTO updateDepartment(DepartmentUpdateDTO updateDTO) { - if (updateDTO.getParentId() == null) { - return ResponseDTO.wrap(DepartmentResponseCodeConst.PARENT_ID_ERROR); - } - DepartmentEntity entity = departmentDao.selectById(updateDTO.getId()); - if (entity == null) { - return ResponseDTO.wrap(DepartmentResponseCodeConst.NOT_EXISTS); - } - DepartmentEntity departmentEntity = SmartBeanUtil.copy(updateDTO, DepartmentEntity.class); - departmentEntity.setSort(entity.getSort()); - departmentDao.updateById(departmentEntity); - return ResponseDTO.succ(); - } - - /** - * 根据id删除部门 - * 1、需要判断当前部门是否有子部门,有子部门则不允许删除 - * 2、需要判断当前部门是否有员工,有员工则不能删除 - * - * @param deptId - * @return - */ - @Transactional(rollbackFor = Exception.class) - public ResponseDTO delDepartment(Long deptId) { - DepartmentEntity departmentEntity = departmentDao.selectById(deptId); - if (null == departmentEntity) { - return ResponseDTO.wrap(DepartmentResponseCodeConst.DEPT_NOT_EXISTS); - } - // 是否有子级部门 - int subDepartmentNum = departmentDao.countSubDepartment(deptId); - if (subDepartmentNum > 0) { - return ResponseDTO.wrap(DepartmentResponseCodeConst.CANNOT_DEL_DEPARTMENT_WITH_CHILD); - } - - // 是否有未删除员工 - int employeeNum = employeeDao.countByDepartmentId(deptId, false); - if (employeeNum > 0) { - return ResponseDTO.wrap(DepartmentResponseCodeConst.CANNOT_DEL_DEPARTMENT_WITH_EMPLOYEE); - } - departmentDao.deleteById(deptId); - return ResponseDTO.succ(); - } - - /** - * 根据id获取部门信息 - * - * @param departmentId - * @return AjaxResult - */ - public ResponseDTO getDepartmentById(Long departmentId) { - DepartmentEntity departmentEntity = departmentDao.selectById(departmentId); - if (departmentEntity == null) { - return ResponseDTO.wrap(DepartmentResponseCodeConst.DEPT_NOT_EXISTS); - } - DepartmentVO departmentVO = SmartBeanUtil.copy(departmentEntity, DepartmentVO.class); - return ResponseDTO.succData(departmentVO); - } - - /** - * 获取所有部门 - * - * @return - */ - public ResponseDTO> listAll() { - List departmentVOList = departmentDao.listAll(); - return ResponseDTO.succData(departmentVOList); - } - - /** - * 上下移动 - * - * @param departmentId - * @param swapId - * @return - */ - @Transactional(rollbackFor = Exception.class) - public ResponseDTO upOrDown(Long departmentId, Long swapId) { - DepartmentEntity departmentEntity = departmentDao.selectById(departmentId); - if (departmentEntity == null) { - return ResponseDTO.wrap(DepartmentResponseCodeConst.NOT_EXISTS); - } - DepartmentEntity swapEntity = departmentDao.selectById(swapId); - if (swapEntity == null) { - return ResponseDTO.wrap(DepartmentResponseCodeConst.NOT_EXISTS); - } - Long departmentSort = departmentEntity.getSort(); - departmentEntity.setSort(swapEntity.getSort()); - departmentDao.updateById(departmentEntity); - swapEntity.setSort(departmentSort); - departmentDao.updateById(swapEntity); - return ResponseDTO.succ(); - } - - /** - * 部门升级 - * - * @param departmentId - * @return - */ - @Transactional(rollbackFor = Exception.class) - public ResponseDTO upgrade(Long departmentId) { - DepartmentEntity departmentEntity = departmentDao.selectById(departmentId); - if (departmentEntity == null) { - return ResponseDTO.wrap(DepartmentResponseCodeConst.NOT_EXISTS); - } - if (departmentEntity.getParentId() == null || departmentEntity.getParentId().equals(0)) { - return ResponseDTO.wrap(DepartmentResponseCodeConst.ERROR_PARAM, "此部门已经是根节点无法移动"); - } - DepartmentEntity parentEntity = departmentDao.selectById(departmentEntity.getParentId()); - - departmentEntity.setParentId(parentEntity.getParentId()); - departmentDao.updateById(departmentEntity); - return ResponseDTO.succ(); - } - - /** - * 部门降级 - * - * @param departmentId - * @param preId - * @return - */ - @Transactional(rollbackFor = Exception.class) - public ResponseDTO downgrade(Long departmentId, Long preId) { - DepartmentEntity departmentEntity = departmentDao.selectById(departmentId); - if (departmentEntity == null) { - return ResponseDTO.wrap(DepartmentResponseCodeConst.NOT_EXISTS); - } - DepartmentEntity preEntity = departmentDao.selectById(preId); - if (preEntity == null) { - return ResponseDTO.wrap(DepartmentResponseCodeConst.NOT_EXISTS); - } - departmentEntity.setParentId(preEntity.getId()); - departmentDao.updateById(departmentEntity); - return ResponseDTO.succ(); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentTreeService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentTreeService.java deleted file mode 100644 index b34a2678..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentTreeService.java +++ /dev/null @@ -1,99 +0,0 @@ -package net.lab1024.smartadmin.module.system.department; - -import net.lab1024.smartadmin.module.system.department.domain.dto.DepartmentVO; -import com.google.common.collect.Lists; -import org.apache.commons.collections.CollectionUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; -import java.util.stream.Collectors; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/29 0029 下午 13:52 - * @since JDK1.8 - */ -@Service -public class DepartmentTreeService { - - @Autowired - private DepartmentDao departmentDao; - - /** - * 构建部门树结构 - * @param departmentVOList - * @return - */ - public List buildTree(List departmentVOList) { - if(CollectionUtils.isEmpty(departmentVOList)){ - return Lists.newArrayList(); - } - List list = departmentVOList.stream().filter(e -> e.getParentId() == null || e.getParentId() == 0).collect(Collectors.toList()); - if(CollectionUtils.isEmpty(list)){ - return Lists.newArrayList(); - } - this.buildTree(list,departmentVOList); - return list; - } - - private void buildTree(List nodeList,List departmentVOList){ - int nodeSize = nodeList.size(); - for(int i =0 ;i< nodeSize;i++){ - int preIndex = i-1; - int nextIndex = i+1; - DepartmentVO node = nodeList.get(i); - if(preIndex>-1){ - node.setPreId(nodeList.get(preIndex).getId()); - } - if(nextIndex departmentVOList) { - List children = getChildren(node, departmentVOList); - if (CollectionUtils.isNotEmpty(children)) { - node.setChildrenDepartment(children); - this.buildTree(children,departmentVOList); - } - } - - private List getChildren(DepartmentVO node, List departmentVOList) { - Long id = node.getId(); - return departmentVOList.stream().filter(e -> id.equals(e.getParentId())).collect(Collectors.toList()); - } - - - - /** - * 通过部门id,获取当前以及下属部门 - */ - public void buildIdList(Long deptId, List result) { - List departmentVOList = departmentDao.listAll(); - result.add(deptId); - if (null == deptId) { - result.addAll(departmentVOList.stream().map(DepartmentVO::getId).collect(Collectors.toList())); - return; - } - List children = getChildrenIdList(deptId, departmentVOList); - if (!children.isEmpty()) { - result.addAll(children.stream().map(DepartmentVO::getId).collect(Collectors.toList())); - for (DepartmentVO child : children) { - buildTree(child, departmentVOList); - } - } - } - - private List getChildrenIdList(Long deptId, List departmentVOList) { - return departmentVOList.stream().filter(e -> deptId.equals(e.getParentId())).collect(Collectors.toList()); - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/domain/dto/DepartmentUpdateDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/domain/dto/DepartmentUpdateDTO.java deleted file mode 100644 index f1b108a8..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/domain/dto/DepartmentUpdateDTO.java +++ /dev/null @@ -1,25 +0,0 @@ -package net.lab1024.smartadmin.module.system.department.domain.dto; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotNull; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 - */ -@Data -public class DepartmentUpdateDTO extends DepartmentCreateDTO { - - @ApiModelProperty("部门id") - @NotNull(message = "部门id不能为空") - private Long id; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/domain/dto/DepartmentVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/domain/dto/DepartmentVO.java deleted file mode 100644 index 067e174d..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/domain/dto/DepartmentVO.java +++ /dev/null @@ -1,58 +0,0 @@ -package net.lab1024.smartadmin.module.system.department.domain.dto; - -import com.fasterxml.jackson.annotation.JsonProperty; -import net.lab1024.smartadmin.module.system.employee.domain.dto.EmployeeDTO; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.Date; -import java.util.List; - -@Data -public class DepartmentVO { - - @ApiModelProperty("部门id") - private Long id; - - @ApiModelProperty("部门名称") - private String name; - - @ApiModelProperty("部门简称") - private String shortName; - - @ApiModelProperty("部门负责人姓名") - private String managerName; - - @ApiModelProperty("部门负责人id") - private Long managerId; - - @ApiModelProperty("子部门") - @JsonProperty("children") - private List childrenDepartment; - - @ApiModelProperty("父级部门id") - private Long parentId; - - @ApiModelProperty("同级上一个元素id") - private Long preId; - - @ApiModelProperty("同级下一个元素id") - private Long nextId; - - @ApiModelProperty("排序") - private Long sort; - - @ApiModelProperty("父级部门名称") - private String parentName; - - @ApiModelProperty("部门员工列表") - private List employees; - - @ApiModelProperty("上次更新时间") - private Date updateTime; - - @ApiModelProperty("创建时间") - private Date createTime; - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/domain/entity/DepartmentEntity.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/domain/entity/DepartmentEntity.java deleted file mode 100644 index 26023788..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/domain/entity/DepartmentEntity.java +++ /dev/null @@ -1,48 +0,0 @@ -package net.lab1024.smartadmin.module.system.department.domain.entity; - -import com.baomidou.mybatisplus.annotation.TableName; -import net.lab1024.smartadmin.common.domain.BaseEntity; -import lombok.Data; - -import java.io.Serializable; - -/** - * 部门实体类 - * t_department 数据表 - * - * @author listen - * @date 2017/12/19 10:45 - */ -@Data -@TableName(value = "t_department") -public class DepartmentEntity extends BaseEntity implements Serializable { - - private static final long serialVersionUID = -6787726615141147044L; - - /** - * 部门名称 - */ - private String name; - - /** - * 部门简称 - */ - private String shortName; - - /** - * 负责人员工 id - */ - private Long managerId; - - /** - * 部门父级id - */ - private Long parentId; - - /** - * 排序 - */ - private Long sort; - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/EmployeeController.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/EmployeeController.java deleted file mode 100644 index 33c788e1..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/EmployeeController.java +++ /dev/null @@ -1,103 +0,0 @@ -package net.lab1024.smartadmin.module.system.employee; - -import net.lab1024.smartadmin.common.anno.NoValidPrivilege; -import net.lab1024.smartadmin.common.anno.OperateLog; -import net.lab1024.smartadmin.common.domain.PageResultDTO; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.constant.SwaggerTagConst; -import net.lab1024.smartadmin.module.system.employee.domain.dto.*; -import net.lab1024.smartadmin.module.system.employee.domain.vo.EmployeeVO; -import net.lab1024.smartadmin.module.system.login.domain.RequestTokenBO; -import net.lab1024.smartadmin.util.SmartRequestTokenUtil; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; -import java.util.List; - -/** - * 员工管理 - * - * @author lidoudou - * @date 2017年12月19日上午11:34:52 - */ -@RestController -@Api(tags = {SwaggerTagConst.Admin.MANAGER_USER}) -@OperateLog -public class EmployeeController { - - @Autowired - private EmployeeService employeeService; - - @PostMapping("/employee/query") - @ApiOperation(value = "员工管理查询", notes = "员工管理查询 @author lidoudou") - public ResponseDTO> query(@RequestBody EmployeeQueryDTO query) { - return employeeService.selectEmployeeList(query); - } - - @GetMapping("/employee/get/all") - @ApiOperation(value = "查询所有员工基本信息,用于选择框", notes = "查询所有员工基本信息,用于选择框") - @NoValidPrivilege - public ResponseDTO> getAll() { - return ResponseDTO.succData(employeeService.getAllEmployee()); - } - - @ApiOperation(value = "添加员工", notes = "@author yandanyang") - @PostMapping("/employee/add") - public ResponseDTO addEmployee(@Valid @RequestBody EmployeeAddDTO emp) { - RequestTokenBO requestToken = SmartRequestTokenUtil.getRequestUser(); - return employeeService.addEmployee(emp, requestToken); - } - - @ApiOperation(value = "禁用单个员工", notes = "@author yandanyang") - @GetMapping("/employee/updateStatus/{employeeId}/{status}") - public ResponseDTO updateStatus(@PathVariable("employeeId") Long employeeId, @PathVariable("status") Integer status) { - return employeeService.updateStatus(employeeId, status); - } - - @ApiOperation(value = "批量禁用", notes = "@author yandanyang") - @PostMapping("/employee/batchUpdateStatus") - public ResponseDTO batchUpdateStatus(@Valid @RequestBody EmployeeBatchUpdateStatusDTO batchUpdateStatusDTO) { - return employeeService.batchUpdateStatus(batchUpdateStatusDTO); - } - - @ApiOperation(value = "更新员工信息", notes = "@author yandanyang") - @PostMapping("/employee/update") - public ResponseDTO updateEmployee(@Valid @RequestBody EmployeeUpdateDTO employeeUpdateDto) { - return employeeService.updateEmployee(employeeUpdateDto); - } - - @ApiOperation(value = "删除员工信息", notes = "@author yandanyang") - @PostMapping("/employee/delete/{employeeId}") - public ResponseDTO deleteEmployeeById(@PathVariable("employeeId") Long employeeId) { - return employeeService.deleteEmployeeById(employeeId); - } - - @ApiOperation(value = "单个员工角色授权", notes = "@author yandanyang") - @PostMapping("/employee/updateRoles") - public ResponseDTO updateRoles(@Valid @RequestBody EmployeeUpdateRolesDTO updateRolesDTO) { - return employeeService.updateRoles(updateRolesDTO); - } - - @ApiOperation(value = "修改密码", notes = "@author yandanyang") - @PostMapping("/employee/updatePwd") - public ResponseDTO updatePwd(@Valid @RequestBody EmployeeUpdatePwdDTO updatePwdDTO) { - RequestTokenBO requestToken = SmartRequestTokenUtil.getRequestUser(); - return employeeService.updatePwd(updatePwdDTO, requestToken); - } - - @ApiOperation(value = "通过部门id获取当前部门的人员&没有部门的人", notes = "@author yandanyang") - @GetMapping("/employee/listEmployeeByDeptId/{deptId}") - public ResponseDTO> listEmployeeByDeptId(@PathVariable Long deptId) { - return employeeService.getEmployeeByDeptId(deptId); - } - - @ApiOperation(value = "员工重置密码", notes = "@author lizongliang") - @GetMapping("/employee/resetPasswd/{employeeId}") - public ResponseDTO resetPasswd(@PathVariable("employeeId") Integer employeeId) { - return employeeService.resetPasswd(employeeId); - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/EmployeeDao.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/EmployeeDao.java deleted file mode 100644 index d77779ea..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/EmployeeDao.java +++ /dev/null @@ -1,138 +0,0 @@ -package net.lab1024.smartadmin.module.system.employee; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import net.lab1024.smartadmin.module.system.employee.domain.dto.EmployeeDTO; -import net.lab1024.smartadmin.module.system.employee.domain.dto.EmployeeQueryDTO; -import net.lab1024.smartadmin.module.system.employee.domain.dto.EmployeeQueryExportDTO; -import net.lab1024.smartadmin.module.system.employee.domain.entity.EmployeeEntity; -import net.lab1024.smartadmin.module.system.employee.domain.vo.EmployeeVO; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; -import org.springframework.stereotype.Component; - -import java.util.Collection; -import java.util.List; - -/** - * 员工dao接口 - * - * @author lidoudou - * @date 2017年12月19日下午1:36:30 - */ -@Mapper -@Component -public interface EmployeeDao extends BaseMapper { - /** - * 查询员工列表 - * - * @param page - * @param queryDTO - * @return - */ - List selectEmployeeList(Page page, @Param("queryDTO") EmployeeQueryDTO queryDTO); - - /** - * 不带分页查询员工列表 - * - * @param queryDTO - * @return - */ - List selectEmployeeList(@Param("queryDTO") EmployeeQueryExportDTO queryDTO); - - /** - * 批量更新禁用状态 - * - * @param employeeIds - * @param isDisabled - */ - void batchUpdateStatus(@Param("employeeIds") List employeeIds, @Param("isDisabled") Integer isDisabled); - - /** - * 登录 - * - * @param loginName - * @param loginPwd - * @return - */ - EmployeeDTO login(@Param("loginName") String loginName, @Param("loginPwd") String loginPwd); - - /** - * 通过登录名查询 - * - * @param loginName - * @param isDisabled - * @return - */ - EmployeeDTO getByLoginName(@Param("loginName") String loginName, @Param("isDisabled") Integer isDisabled); - - /** - * 通过手机号查询 - * - * @param phone - * @param isDisabled - * @return - */ - EmployeeDTO getByPhone(@Param("phone") String phone, @Param("isDisabled") Integer isDisabled); - - /** - * 获取所有员工 - * - * @return - */ - List listAll(); - - /** - * 获取某个部门员工数 - * - * @param depId - * @param deleteFlag 可以null - * @return - */ - Integer countByDepartmentId(@Param("depId") Long depId, @Param("deleteFlag") Boolean deleteFlag); - - /** - * 获取一批员工 - * - * @param employeeIds - * @return - */ - List getEmployeeByIds(@Param("ids") Collection employeeIds); - - - EmployeeDTO getEmployeeById(@Param("id") Long employeeId); - - /** - * 获取某个部门的员工 - * - * @param departmentId - * @return - */ - List getEmployeeIdByDeptId(@Param("departmentId") Long departmentId); - - /** - * 获取某批部门的员工 - * - * @param departmentIds - * @return - */ - List getEmployeeIdByDeptIds(@Param("departmentIds") List departmentIds); - - - /** - * 员工重置密码 - * - * @param employeeId - * @param password - * @return - */ - Integer updatePassword(@Param("employeeId") Integer employeeId, @Param("password") String password); - - - /** - * 查询所有员工 - * - * @return - */ - List selectAll(); -} \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/EmployeeService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/EmployeeService.java deleted file mode 100644 index a689bea2..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/EmployeeService.java +++ /dev/null @@ -1,369 +0,0 @@ -package net.lab1024.smartadmin.module.system.employee; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.google.common.collect.Lists; -import net.lab1024.smartadmin.common.constant.JudgeEnum; -import net.lab1024.smartadmin.common.domain.PageResultDTO; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.constant.CommonConst; -import net.lab1024.smartadmin.module.system.department.DepartmentDao; -import net.lab1024.smartadmin.module.system.department.domain.entity.DepartmentEntity; -import net.lab1024.smartadmin.module.system.employee.constant.EmployeeResponseCodeConst; -import net.lab1024.smartadmin.module.system.employee.constant.EmployeeStatusEnum; -import net.lab1024.smartadmin.module.system.employee.domain.bo.EmployeeBO; -import net.lab1024.smartadmin.module.system.employee.domain.dto.*; -import net.lab1024.smartadmin.module.system.employee.domain.entity.EmployeeEntity; -import net.lab1024.smartadmin.module.system.employee.domain.vo.EmployeeVO; -import net.lab1024.smartadmin.module.system.login.domain.RequestTokenBO; -import net.lab1024.smartadmin.module.system.position.PositionDao; -import net.lab1024.smartadmin.module.system.position.PositionService; -import net.lab1024.smartadmin.module.system.position.domain.dto.PositionRelationAddDTO; -import net.lab1024.smartadmin.module.system.position.domain.dto.PositionRelationResultDTO; -import net.lab1024.smartadmin.module.system.privilege.service.PrivilegeEmployeeService; -import net.lab1024.smartadmin.module.system.role.roleemployee.RoleEmployeeDao; -import net.lab1024.smartadmin.module.system.role.roleemployee.domain.RoleEmployeeEntity; -import net.lab1024.smartadmin.util.SmartBeanUtil; -import net.lab1024.smartadmin.util.SmartDigestUtil; -import net.lab1024.smartadmin.util.SmartPageUtil; -import net.lab1024.smartadmin.util.SmartVerificationUtil; -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.collections.map.HashedMap; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.regex.Pattern; -import java.util.stream.Collectors; - -/** - * 员工管理 - * - * @author lidoudou - * @date 2017年12月21日上午11:54:52 - */ -@Service -public class EmployeeService { - - private static final String RESET_PASSWORD = "123456"; - - @Autowired - private EmployeeDao employeeDao; - - @Autowired - private DepartmentDao departmentDao; - - @Autowired - private RoleEmployeeDao roleEmployeeDao; - - @Autowired - private PositionService positionService; - - @Autowired - private PositionDao positionDao; - - @Autowired - private PrivilegeEmployeeService privilegeEmployeeService; - - /** - * 员工基本信息的缓存 - */ - private static final ConcurrentHashMap employeeCache = new ConcurrentHashMap<>(); - - public List getAllEmployee() { - return employeeDao.selectAll(); - } - - public EmployeeBO getById(Long id) { - EmployeeBO employeeBO = employeeCache.get(id); - if (employeeBO == null) { - EmployeeEntity employeeEntity = employeeDao.selectById(id); - if (employeeEntity != null) { - Boolean superman = privilegeEmployeeService.isSuperman(id); - employeeBO = new EmployeeBO(employeeEntity, superman); - employeeCache.put(employeeEntity.getId(), employeeBO); - } - } - return employeeBO; - } - - /** - * 查询员工列表 - * - * @param queryDTO - * @return - */ - public ResponseDTO> selectEmployeeList(EmployeeQueryDTO queryDTO) { - Page pageParam = SmartPageUtil.convert2QueryPage(queryDTO); - queryDTO.setIsDelete(JudgeEnum.NO.getValue()); - List employeeList = employeeDao.selectEmployeeList(pageParam, queryDTO); - List employeeIdList = employeeList.stream().map(EmployeeDTO::getId).collect(Collectors.toList()); - - if (CollectionUtils.isNotEmpty(employeeIdList)) { - List positionRelationResultDTOList = positionDao.selectEmployeesRelation(employeeIdList); - Map> employeePositionMap = new HashedMap(); - - for (PositionRelationResultDTO positionRelationResultDTO : positionRelationResultDTOList) { - List relationResultDTOList = employeePositionMap.get(positionRelationResultDTO.getEmployeeId()); - //匹配对应的岗位 - if (relationResultDTOList == null) { - relationResultDTOList = new ArrayList<>(); - employeePositionMap.put(positionRelationResultDTO.getEmployeeId(), relationResultDTOList); - } - relationResultDTOList.add(positionRelationResultDTO); - } - - for (EmployeeDTO employeeDTO : employeeList) { - List relationResultDTOList = employeePositionMap.get(employeeDTO.getId()); - if (relationResultDTOList != null) { - employeeDTO.setPositionRelationList(relationResultDTOList); - employeeDTO.setPositionName(relationResultDTOList.stream().map(PositionRelationResultDTO::getPositionName).collect(Collectors.joining(","))); - } - } - } - return ResponseDTO.succData(SmartPageUtil.convert2PageResult(pageParam, employeeList, EmployeeVO.class)); - } - - /** - * 新增员工 - * - * @param employeeAddDto - * @param requestToken - * @return - */ - public ResponseDTO addEmployee(EmployeeAddDTO employeeAddDto, RequestTokenBO requestToken) { - EmployeeEntity entity = SmartBeanUtil.copy(employeeAddDto, EmployeeEntity.class); - if (StringUtils.isNotEmpty(employeeAddDto.getIdCard())) { - boolean checkResult = Pattern.matches(SmartVerificationUtil.ID_CARD, employeeAddDto.getIdCard()); - if (!checkResult) { - return ResponseDTO.wrap(EmployeeResponseCodeConst.ID_CARD_ERROR); - } - } - if (StringUtils.isNotEmpty(employeeAddDto.getBirthday())) { - boolean checkResult = Pattern.matches(SmartVerificationUtil.DATE, employeeAddDto.getBirthday()); - if (!checkResult) { - return ResponseDTO.wrap(EmployeeResponseCodeConst.BIRTHDAY_ERROR); - } - } - //同名员工 - EmployeeDTO sameNameEmployee = employeeDao.getByLoginName(entity.getLoginName(), EmployeeStatusEnum.NORMAL.getValue()); - if (null != sameNameEmployee) { - return ResponseDTO.wrap(EmployeeResponseCodeConst.LOGIN_NAME_EXISTS); - } - //同电话员工 - EmployeeDTO samePhoneEmployee = employeeDao.getByPhone(entity.getPhone(), EmployeeStatusEnum.NORMAL.getValue()); - if (null != samePhoneEmployee) { - return ResponseDTO.wrap(EmployeeResponseCodeConst.PHONE_EXISTS); - } - Long departmentId = entity.getDepartmentId(); - DepartmentEntity department = departmentDao.selectById(departmentId); - if (department == null) { - return ResponseDTO.wrap(EmployeeResponseCodeConst.DEPT_NOT_EXIST); - } - - //如果没有密码 默认设置为123456 - String pwd = entity.getLoginPwd(); - if (StringUtils.isBlank(pwd)) { - entity.setLoginPwd(SmartDigestUtil.encryptPassword(CommonConst.Password.SALT_FORMAT, RESET_PASSWORD)); - } else { - entity.setLoginPwd(SmartDigestUtil.encryptPassword(CommonConst.Password.SALT_FORMAT, entity.getLoginPwd())); - } - - entity.setCreateUser(requestToken.getRequestUserId()); - if (StringUtils.isEmpty(entity.getBirthday())) { - entity.setBirthday(null); - } - employeeDao.insert(entity); - - PositionRelationAddDTO positionRelAddDTO = new PositionRelationAddDTO(employeeAddDto.getPositionIdList(), entity.getId()); - //存储所选岗位信息 - positionService.addPositionRelation(positionRelAddDTO); - - return ResponseDTO.succ(); - } - - /** - * 更新禁用状态 - * - * @param employeeId - * @param status - * @return - */ - public ResponseDTO updateStatus(Long employeeId, Integer status) { - if (null == employeeId) { - return ResponseDTO.wrap(EmployeeResponseCodeConst.EMP_NOT_EXISTS); - } - EmployeeBO entity = getById(employeeId); - if (null == entity) { - return ResponseDTO.wrap(EmployeeResponseCodeConst.EMP_NOT_EXISTS); - } - List empIds = Lists.newArrayList(); - empIds.add(employeeId); - employeeDao.batchUpdateStatus(empIds, status); - employeeCache.remove(employeeId); - return ResponseDTO.succ(); - } - - /** - * 批量更新员工状态 - * - * @param batchUpdateStatusDTO - * @return - */ - public ResponseDTO batchUpdateStatus(EmployeeBatchUpdateStatusDTO batchUpdateStatusDTO) { - employeeDao.batchUpdateStatus(batchUpdateStatusDTO.getEmployeeIds(), batchUpdateStatusDTO.getStatus()); - if (batchUpdateStatusDTO.getEmployeeIds() != null) { - batchUpdateStatusDTO.getEmployeeIds().forEach(e -> employeeCache.remove(e)); - } - return ResponseDTO.succ(); - } - - /** - * 更新员工 - * - * @param updateDTO - * @return - */ - public ResponseDTO updateEmployee(EmployeeUpdateDTO updateDTO) { - Long employeeId = updateDTO.getId(); - EmployeeEntity employeeEntity = employeeDao.selectById(employeeId); - if (null == employeeEntity) { - return ResponseDTO.wrap(EmployeeResponseCodeConst.EMP_NOT_EXISTS); - } - if (StringUtils.isNotBlank(updateDTO.getIdCard())) { - boolean checkResult = Pattern.matches(SmartVerificationUtil.ID_CARD, updateDTO.getIdCard()); - if (!checkResult) { - return ResponseDTO.wrap(EmployeeResponseCodeConst.ID_CARD_ERROR); - } - } - if (StringUtils.isNotEmpty(updateDTO.getBirthday())) { - boolean checkResult = Pattern.matches(SmartVerificationUtil.DATE, updateDTO.getBirthday()); - if (!checkResult) { - return ResponseDTO.wrap(EmployeeResponseCodeConst.BIRTHDAY_ERROR); - } - } - Long departmentId = updateDTO.getDepartmentId(); - DepartmentEntity departmentEntity = departmentDao.selectById(departmentId); - if (departmentEntity == null) { - return ResponseDTO.wrap(EmployeeResponseCodeConst.DEPT_NOT_EXIST); - } - EmployeeDTO sameNameEmployee = employeeDao.getByLoginName(updateDTO.getLoginName(), EmployeeStatusEnum.NORMAL.getValue()); - if (null != sameNameEmployee && !sameNameEmployee.getId().equals(employeeId)) { - return ResponseDTO.wrap(EmployeeResponseCodeConst.LOGIN_NAME_EXISTS); - } - EmployeeDTO samePhoneEmployee = employeeDao.getByPhone(updateDTO.getLoginName(), EmployeeStatusEnum.NORMAL.getValue()); - if (null != samePhoneEmployee && !samePhoneEmployee.getId().equals(employeeId)) { - return ResponseDTO.wrap(EmployeeResponseCodeConst.PHONE_EXISTS); - } - String newPwd = updateDTO.getLoginPwd(); - if (!StringUtils.isBlank(newPwd)) { - updateDTO.setLoginPwd(SmartDigestUtil.encryptPassword(CommonConst.Password.SALT_FORMAT, updateDTO.getLoginPwd())); - } else { - updateDTO.setLoginPwd(employeeEntity.getLoginPwd()); - } - EmployeeEntity entity = SmartBeanUtil.copy(updateDTO, EmployeeEntity.class); - entity.setUpdateTime(new Date()); - if (StringUtils.isEmpty(entity.getBirthday())) { - entity.setBirthday(null); - } - if (CollectionUtils.isNotEmpty(updateDTO.getPositionIdList())) { - //删除旧的关联关系 添加新的关联关系 - positionService.removePositionRelation(entity.getId()); - PositionRelationAddDTO positionRelAddDTO = new PositionRelationAddDTO(updateDTO.getPositionIdList(), entity.getId()); - positionService.addPositionRelation(positionRelAddDTO); - } - entity.setIsDisabled(employeeEntity.getIsDisabled()); - entity.setIsLeave(employeeEntity.getIsLeave()); - entity.setCreateUser(employeeEntity.getCreateUser()); - entity.setCreateTime(employeeEntity.getCreateTime()); - entity.setUpdateTime(new Date()); - employeeDao.updateById(entity); - employeeCache.remove(employeeId); - return ResponseDTO.succ(); - } - - /** - * 删除员工 - * - * @param employeeId 员工ID - * @return - */ - public ResponseDTO deleteEmployeeById(Long employeeId) { - EmployeeEntity employeeEntity = employeeDao.selectById(employeeId); - if (null == employeeEntity) { - return ResponseDTO.wrap(EmployeeResponseCodeConst.EMP_NOT_EXISTS); - } - //假删 - employeeEntity.setIsDelete(JudgeEnum.YES.getValue().longValue()); - employeeDao.updateById(employeeEntity); - employeeCache.remove(employeeId); - return ResponseDTO.succ(); - } - - /** - * 更新用户角色 - * - * @param updateRolesDTO - * @return - */ - public ResponseDTO updateRoles(EmployeeUpdateRolesDTO updateRolesDTO) { - roleEmployeeDao.deleteByEmployeeId(updateRolesDTO.getEmployeeId()); - if (CollectionUtils.isNotEmpty(updateRolesDTO.getRoleIds())) { - List roleEmployeeEntities = Lists.newArrayList(); - RoleEmployeeEntity roleEmployeeEntity; - for (Long roleId : updateRolesDTO.getRoleIds()) { - roleEmployeeEntity = new RoleEmployeeEntity(); - roleEmployeeEntity.setEmployeeId(updateRolesDTO.getEmployeeId()); - roleEmployeeEntity.setRoleId(roleId); - roleEmployeeEntities.add(roleEmployeeEntity); - } - roleEmployeeDao.batchInsert(roleEmployeeEntities); - } - return ResponseDTO.succ(); - } - - /** - * 更新密码 - * - * @param updatePwdDTO - * @param requestToken - * @return - */ - public ResponseDTO updatePwd(EmployeeUpdatePwdDTO updatePwdDTO, RequestTokenBO requestToken) { - Long employeeId = requestToken.getRequestUserId(); - EmployeeEntity employee = employeeDao.selectById(employeeId); - if (employee == null) { - return ResponseDTO.wrap(EmployeeResponseCodeConst.EMP_NOT_EXISTS); - } - if (!employee.getLoginPwd().equals(SmartDigestUtil.encryptPassword(CommonConst.Password.SALT_FORMAT, updatePwdDTO.getOldPwd()))) { - return ResponseDTO.wrap(EmployeeResponseCodeConst.PASSWORD_ERROR); - } - employee.setLoginPwd(SmartDigestUtil.encryptPassword(CommonConst.Password.SALT_FORMAT, updatePwdDTO.getPwd())); - employeeDao.updateById(employee); - employeeCache.remove(employeeId); - return ResponseDTO.succ(); - } - - public ResponseDTO> getEmployeeByDeptId(Long departmentId) { - List list = employeeDao.getEmployeeIdByDeptId(departmentId); - return ResponseDTO.succData(list); - } - - /** - * 重置密码 - * - * @param employeeId - * @return - */ - public ResponseDTO resetPasswd(Integer employeeId) { - String md5Password = SmartDigestUtil.encryptPassword(CommonConst.Password.SALT_FORMAT, RESET_PASSWORD); - employeeDao.updatePassword(employeeId, md5Password); - employeeCache.remove(employeeId); - return ResponseDTO.succ(); - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/constant/EmployeeResponseCodeConst.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/constant/EmployeeResponseCodeConst.java deleted file mode 100644 index 379b8be7..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/constant/EmployeeResponseCodeConst.java +++ /dev/null @@ -1,61 +0,0 @@ -package net.lab1024.smartadmin.module.system.employee.constant; - -import net.lab1024.smartadmin.common.constant.ResponseCodeConst; - -/** - * 员工常量类 - * 3001-3999 - * - * @author lidoudou - * @date 2017年12月19日下午19:04:52 - */ -public class EmployeeResponseCodeConst extends ResponseCodeConst { - - /** - * 员工不存在 - */ - public static final EmployeeResponseCodeConst EMP_NOT_EXISTS = new EmployeeResponseCodeConst(3001, "员工不存在!"); - - /** - * 更新员工信息失败 - */ - public static final EmployeeResponseCodeConst UPDATE_FAILED = new EmployeeResponseCodeConst(3002, "员工更新失败!"); - - /** - * 部门信息不存在 - */ - public static final EmployeeResponseCodeConst DEPT_NOT_EXIST = new EmployeeResponseCodeConst(3003, "部门信息不存在!"); - - /** - * 用户名或密码错误 - */ - public static final EmployeeResponseCodeConst LOGIN_FAILED = new EmployeeResponseCodeConst(3004, "用户名或密码错误!"); - - /** - * 您的账号已被禁用,不得登录系统 - */ - public static final EmployeeResponseCodeConst IS_DISABLED = new EmployeeResponseCodeConst(3005, "您的账号已被禁用,不得登录系统!"); - - /** - * 登录名已存在 - */ - public static final EmployeeResponseCodeConst LOGIN_NAME_EXISTS = new EmployeeResponseCodeConst(3006, "登录名已存在!"); - /** - * 密码输入有误,请重新输入 10115 - */ - public static final EmployeeResponseCodeConst PASSWORD_ERROR = new EmployeeResponseCodeConst(3007, "密码输入有误,请重新输入"); - /** - * 手机号已存在 - */ - public static final EmployeeResponseCodeConst PHONE_EXISTS = new EmployeeResponseCodeConst(3008, "手机号已经存在"); - - public static final EmployeeResponseCodeConst ID_CARD_ERROR = new EmployeeResponseCodeConst(3009, "请输入正确的身份证号"); - - public static final EmployeeResponseCodeConst BIRTHDAY_ERROR = new EmployeeResponseCodeConst(3010, "生日格式不正确"); - - public static final EmployeeResponseCodeConst VERIFICATION_CODE_INVALID = new EmployeeResponseCodeConst(3011, "验证码无效"); - - public EmployeeResponseCodeConst(int code, String msg) { - super(code, msg); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/constant/EmployeeStatusEnum.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/constant/EmployeeStatusEnum.java deleted file mode 100644 index 3c07ce72..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/constant/EmployeeStatusEnum.java +++ /dev/null @@ -1,56 +0,0 @@ -package net.lab1024.smartadmin.module.system.employee.constant; - -import net.lab1024.smartadmin.common.domain.BaseEnum; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/3/27 0027 下午 16:22 - * @since JDK1.8 - */ - -public enum EmployeeStatusEnum implements BaseEnum { - - /** - * 用户正常状态 1 - */ - NORMAL(0, "正常"), - - /** - * 用户已被禁用 0 - */ - DISABLED(1, "禁用"); - - private Integer value; - - private String desc; - - EmployeeStatusEnum(Integer value, String desc) { - this.value = value; - this.desc = desc; - } - - /** - * 获取枚举类的值 - * - * @return Integer - */ - @Override - public Integer getValue() { - return value; - } - - /** - * 获取枚举类的说明 - * - * @return String - */ - @Override - public String getDesc() { - return this.desc; - } -} \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/bo/EmployeeBO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/bo/EmployeeBO.java deleted file mode 100644 index 57050a5c..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/bo/EmployeeBO.java +++ /dev/null @@ -1,73 +0,0 @@ -package net.lab1024.smartadmin.module.system.employee.domain.bo; - -import net.lab1024.smartadmin.module.system.employee.domain.entity.EmployeeEntity; -import lombok.Getter; - - -@Getter -public class EmployeeBO { - - /** - * 主键id - */ - private Long id; - - /** - * 登录账号 - */ - private String loginName; - - /** - * 员工名称 - */ - private String actualName; - - /** - * 别名 - */ - private String nickName; - - /** - * 手机号码 - */ - private String phone; - - /** - * 部门id - */ - private Long departmentId; - - /** - * 是否离职 - */ - private Integer isLeave; - - /** - * 是否被禁用 - */ - private Integer isDisabled; - - /** - * 删除状态 0否 1是 - */ - private Long isDelete; - - /** - * 是否为超级管理员 - */ - private Boolean isSuperman; - - public EmployeeBO(EmployeeEntity employeeEntity, boolean isSuperman) { - this.id = employeeEntity.getId(); - this.loginName = employeeEntity.getLoginName(); - this.actualName = employeeEntity.getActualName(); - this.nickName = employeeEntity.getNickName(); - this.phone = employeeEntity.getPhone(); - this.departmentId = employeeEntity.getDepartmentId(); - this.isLeave = employeeEntity.getIsLeave(); - this.isDisabled = employeeEntity.getIsDisabled(); - this.isDelete = employeeEntity.getIsDelete(); - this.isSuperman = isSuperman; - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeAddDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeAddDTO.java deleted file mode 100644 index bb1ac368..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeAddDTO.java +++ /dev/null @@ -1,63 +0,0 @@ -package net.lab1024.smartadmin.module.system.employee.domain.dto; - -import net.lab1024.smartadmin.util.SmartVerificationUtil; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Pattern; -import java.util.List; - -/** - * 添加员工 - * - * @author lidoudou - * @date 2017年12月19日下午2:06:31 - */ -@Data -public class EmployeeAddDTO { - - @ApiModelProperty("姓名") - @NotNull(message = "姓名不能为空") - private String actualName; - - @ApiModelProperty("登录名") - @NotNull(message = "姓名不能为空") - private String loginName; - - @ApiModelProperty("别名") - private String nickName; - - @ApiModelProperty("部门id") - @NotNull(message = "部门id不能为空") - private Long departmentId; - - @ApiModelProperty("是否启用") - @NotNull(message = "是否被禁用不能为空") - private Integer isDisabled; - - @ApiModelProperty("手机号") - @NotNull(message = "手机号不能为空") - @Pattern(regexp = SmartVerificationUtil.PHONE_REGEXP, message = "手机号格式不正确") - private String phone; - - @ApiModelProperty("身份证(可选)") - private String idCard; - - @ApiModelProperty("生日(可选)") - private String birthday; - - @ApiModelProperty("密码") - // @NotNull(message = "密码不能为空") - // @Length(min = 6, message = "密码最少为6位字符") - private String loginPwd; - - @ApiModelProperty("邮箱") - private String email; - - @ApiModelProperty("岗位ID 集合") - @NotEmpty(message = "岗位ID 集合不能为空") - private List positionIdList; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeBaseDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeBaseDTO.java deleted file mode 100644 index 0931bdb4..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeBaseDTO.java +++ /dev/null @@ -1,52 +0,0 @@ -package net.lab1024.smartadmin.module.system.employee.domain.dto; - -import net.lab1024.smartadmin.util.SmartVerificationUtil; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Pattern; - -/** - * 添加员工 - * - * @author lidoudou - * @date 2017年12月19日下午2:06:31 - */ -@Data -public class EmployeeBaseDTO { - - @ApiModelProperty("姓名") - @NotNull(message = "姓名不能为空") - private String actualName; - - @ApiModelProperty("登录名") - @NotNull(message = "姓名不能为空") - private String loginName; - - @ApiModelProperty("别名") - private String nickName; - - @ApiModelProperty("部门id") - @NotNull(message = "部门id不能为空") - private Long departmentId; - - @ApiModelProperty("是否启用") - @NotNull(message = "是否被禁用不能为空") - private Integer isDisabled; - - @ApiModelProperty("手机号") - @NotNull(message = "手机号不能为空") - @Pattern(regexp = SmartVerificationUtil.PHONE_REGEXP, message = "手机号格式不正确") - private String phone; - - @ApiModelProperty("身份证(可选)") - private String idCard; - - @ApiModelProperty("生日(可选)") - private String birthday; - - @ApiModelProperty("邮箱") - private String email; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeBatchUpdateStatusDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeBatchUpdateStatusDTO.java deleted file mode 100644 index 7d9db716..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeBatchUpdateStatusDTO.java +++ /dev/null @@ -1,26 +0,0 @@ -package net.lab1024.smartadmin.module.system.employee.domain.dto; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotNull; -import java.util.List; - -/** - * 批量更新 - * - * @author lidoudou - * @date 2017年12月21日上午13:17:52 - */ -@Data -public class EmployeeBatchUpdateStatusDTO { - - @ApiModelProperty("员工ids") - @NotNull(message = "员工ids不能为空") - private List employeeIds; - - @ApiModelProperty("状态") - @NotNull(message = "状态不能为空") - private Integer status; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeDTO.java deleted file mode 100644 index 61b49e1a..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeDTO.java +++ /dev/null @@ -1,73 +0,0 @@ -package net.lab1024.smartadmin.module.system.employee.domain.dto; - -import com.fasterxml.jackson.annotation.JsonFormat; -import net.lab1024.smartadmin.module.system.position.domain.dto.PositionRelationResultDTO; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.Date; -import java.util.List; - -/** - * 员工列表DTO - * - * @author lidoudou - * @date 2017年12月21日上午09:09:31 - */ -@Data -public class EmployeeDTO { - - @ApiModelProperty("主键id") - private Long id; - - @ApiModelProperty("登录账号") - private String loginName; - - @ApiModelProperty("别名") - private String nickName; - - @ApiModelProperty("员工名称") - private String actualName; - - @ApiModelProperty("手机号码") - private String phone; - - @ApiModelProperty("身份证") - private String idCard; - - @ApiModelProperty("出生日期") - @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") - private Date birthday; - - @ApiModelProperty("创建者id") - private Long createUser; - - @ApiModelProperty("部门id") - private Long departmentId; - - @ApiModelProperty("是否离职") - private Integer isLeave; - - @ApiModelProperty("是否被禁用") - private Integer isDisabled; - - @ApiModelProperty("是否删除") - private Integer isDelete; - - @ApiModelProperty("部门名称") - private String departmentName; - - @ApiModelProperty("邮箱") - private String email; - - @ApiModelProperty("创建时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private Date createTime; - - @ApiModelProperty("岗位关联信息") - private List positionRelationList; - - @ApiModelProperty("岗位名称") - private String positionName; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeLoginFormDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeLoginFormDTO.java deleted file mode 100644 index 0bf1f1a3..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeLoginFormDTO.java +++ /dev/null @@ -1,31 +0,0 @@ -package net.lab1024.smartadmin.module.system.employee.domain.dto; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotNull; - -/** - * 登录 - * - * @author lidoudou - * @date 2017年12月19日上午11:49:46 - */ -@Data -public class EmployeeLoginFormDTO { - - @NotNull(message = "登录名不能为空") - @ApiModelProperty(example = "sa") - private String loginName; - - @NotNull(message = "密码不能为空") - @ApiModelProperty(example = "123456") - private String loginPwd; - - @ApiModelProperty(value = "验证码uuid") - private String codeUuid; - - @ApiModelProperty(value = "验证码") - private String code; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeQueryDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeQueryDTO.java deleted file mode 100644 index e384a4da..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeQueryDTO.java +++ /dev/null @@ -1,39 +0,0 @@ -package net.lab1024.smartadmin.module.system.employee.domain.dto; - -import net.lab1024.smartadmin.common.domain.PageParamDTO; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -/** - * 员工列表DTO - * - * @author lidoudou - * @date 2017年12月21日上午09:09:31 - */ -@Data -public class EmployeeQueryDTO extends PageParamDTO { - - private String phone; - - private String actualName; - - private String keyword; - - private Long departmentId; - - private Integer isLeave; - - private Integer isDisabled; - - /** - * 删除状态 0否 1是 - */ - @ApiModelProperty("删除状态 0否 1是 不需要传") - private Integer isDelete; - - @ApiModelProperty("员工id集合") - private List employeeIds; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeQueryExportDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeQueryExportDTO.java deleted file mode 100644 index 645bd213..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeQueryExportDTO.java +++ /dev/null @@ -1,42 +0,0 @@ -package net.lab1024.smartadmin.module.system.employee.domain.dto; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -/** - * @author zzr - * 不带分页的查询条件 - */ -@Data -public class EmployeeQueryExportDTO { - - @ApiModelProperty(hidden = true) - private String phone; - - @ApiModelProperty("姓名") - private String actualName; - - @ApiModelProperty(hidden = true) - private String keyword; - - @ApiModelProperty(hidden = true) - private Long departmentId; - - @ApiModelProperty(hidden = true) - private Integer isLeave; - - @ApiModelProperty(hidden = true) - private Integer isDisabled; - - /** - * 删除状态 0否 1是 - */ - @ApiModelProperty(value = "删除状态 0否 1是 不需要传", hidden = true) - private Integer isDelete; - - @ApiModelProperty(value = "员工ID集合", hidden = true) - private List employeeIds; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeUpdateDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeUpdateDTO.java deleted file mode 100644 index d835c522..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeUpdateDTO.java +++ /dev/null @@ -1,28 +0,0 @@ -package net.lab1024.smartadmin.module.system.employee.domain.dto; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotNull; -import java.util.List; - -/** - * 添加员工 - * - * @author lidoudou - * @date 2017年12月19日下午2:06:31 - */ -@Data -public class EmployeeUpdateDTO extends EmployeeBaseDTO { - - @ApiModelProperty("员工id") - @NotNull(message = "员工id不能为空") - private Long id; - - @ApiModelProperty("密码") - private String loginPwd; - - @ApiModelProperty("岗位ID 集合") - private List positionIdList; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeUpdatePwdDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeUpdatePwdDTO.java deleted file mode 100644 index f5841c31..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeUpdatePwdDTO.java +++ /dev/null @@ -1,25 +0,0 @@ -package net.lab1024.smartadmin.module.system.employee.domain.dto; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotNull; - -/** - * 修改密码所需参数 - * - * @author cyj - * @date 2018-02-23 下午 4:53 - */ -@Data -public class EmployeeUpdatePwdDTO { - - @ApiModelProperty("新密码") - @NotNull - private String pwd; - - @ApiModelProperty("原密码") - @NotNull - private String oldPwd; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeUpdateRolesDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeUpdateRolesDTO.java deleted file mode 100644 index 2829ba1a..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeUpdateRolesDTO.java +++ /dev/null @@ -1,29 +0,0 @@ -package net.lab1024.smartadmin.module.system.employee.domain.dto; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotNull; -import java.util.List; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 - */ -@Data -public class EmployeeUpdateRolesDTO { - - @ApiModelProperty("员工id") - @NotNull(message = "员工id不能为空") - private Long employeeId; - - @ApiModelProperty("角色ids") - private List roleIds; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/entity/EmployeeEntity.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/entity/EmployeeEntity.java deleted file mode 100644 index 1744ee1b..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/entity/EmployeeEntity.java +++ /dev/null @@ -1,91 +0,0 @@ -package net.lab1024.smartadmin.module.system.employee.domain.entity; - -import com.baomidou.mybatisplus.annotation.TableName; -import net.lab1024.smartadmin.common.domain.BaseEntity; -import lombok.Data; - -import java.io.Serializable; - -/** - * 员工实体类 - * - * @author lidoudou - * @date 2017年12月19日下午1:34:48 - */ -@Data -@TableName("t_employee") -public class EmployeeEntity extends BaseEntity implements Serializable { - - private static final long serialVersionUID = -8794328598524272806L; - - /** - * 登录账号 - */ - private String loginName; - - /** - * 登录密码 - */ - private String loginPwd; - - /** - * 员工名称 - */ - private String actualName; - - /** - * 别名 - */ - private String nickName; - - /** - * 手机号码 - */ - private String phone; - - /** - * 身份证 - */ - private String idCard; - - /** - * 出生日期 - */ - private String birthday; - - - /** - * 部门id - */ - private Long departmentId; - - /** - * 是否离职 - */ - private Integer isLeave; - - /** - * 是否被禁用 - */ - private Integer isDisabled; - /** - * 邮箱 - */ - private String email; - - /** - * 备注 - */ - private String remark; - - /** - * 创建者id - */ - private Long createUser; - - /** - * 删除状态 0否 1是 - */ - private Long isDelete; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/vo/EmployeeVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/vo/EmployeeVO.java deleted file mode 100644 index a180d59b..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/vo/EmployeeVO.java +++ /dev/null @@ -1,72 +0,0 @@ -package net.lab1024.smartadmin.module.system.employee.domain.vo; - -import com.fasterxml.jackson.annotation.JsonFormat; -import net.lab1024.smartadmin.module.system.position.domain.dto.PositionRelationResultDTO; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.Date; -import java.util.List; - -/** - * @author bhr - * @Description: 员工信息 - * @date 2019/8/28 9:04 - */ - -@Data -public class EmployeeVO { - - @ApiModelProperty("主键id") - private Long id; - - @ApiModelProperty("登录账号") - private String loginName; - - @ApiModelProperty("别名") - private String nickName; - - @ApiModelProperty("员工名称") - private String actualName; - - @ApiModelProperty("手机号码") - private String phone; - - @ApiModelProperty("身份证") - private String idCard; - - @ApiModelProperty("出生日期") - @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") - private Date birthday; - - @ApiModelProperty("创建者id") - private Long createUser; - - @ApiModelProperty("部门id") - private Long departmentId; - - @ApiModelProperty("是否离职") - private Integer isLeave; - - @ApiModelProperty("是否被禁用") - private Integer isDisabled; - - @ApiModelProperty("是否删除") - private Integer isDelete; - - @ApiModelProperty("部门名称") - private String departmentName; - - @ApiModelProperty("邮箱") - private String email; - - @ApiModelProperty("创建时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private Date createTime; - - @ApiModelProperty("岗位关联信息") - private List positionRelationList; - - @ApiModelProperty("岗位名称") - private String positionName; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/LoginController.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/LoginController.java deleted file mode 100644 index 414c9ad4..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/LoginController.java +++ /dev/null @@ -1,71 +0,0 @@ -package net.lab1024.smartadmin.module.system.login; - -import net.lab1024.smartadmin.common.anno.NoNeedLogin; -import net.lab1024.smartadmin.common.anno.NoValidPrivilege; -import net.lab1024.smartadmin.common.anno.OperateLog; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.constant.SwaggerTagConst; -import net.lab1024.smartadmin.module.system.employee.domain.dto.EmployeeLoginFormDTO; -import net.lab1024.smartadmin.module.system.login.domain.KaptchaVO; -import net.lab1024.smartadmin.module.system.login.domain.LoginDetailVO; -import net.lab1024.smartadmin.module.system.login.domain.RequestTokenBO; -import net.lab1024.smartadmin.util.SmartRequestTokenUtil; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; - -import javax.servlet.http.HttpServletRequest; -import javax.validation.Valid; - -/** - * 后台登录 - * - * @author lidoudou - * @date 2017年12月19日上午11:46:04 - */ -@RestController -@Api(tags = {SwaggerTagConst.Admin.MANAGER_USER_LOGIN}) -@OperateLog -public class LoginController { - - @Autowired - private LoginService loginService; - - @PostMapping("/session/login") - @ApiOperation(value = "登录", notes = "登录") - @NoNeedLogin - public ResponseDTO login(@Valid @RequestBody EmployeeLoginFormDTO loginForm, HttpServletRequest request) { - return loginService.login(loginForm, request); - } - - @GetMapping("/session/get") - @ApiOperation(value = "获取session", notes = "获取session") - @NoValidPrivilege - public ResponseDTO getSession() { - RequestTokenBO requestUser = SmartRequestTokenUtil.getRequestUser(); - return ResponseDTO.succData(loginService.getSession(requestUser)); - } - - @GetMapping("/session/logOut") - @ApiOperation(value = "退出登陆", notes = "退出登陆") - @NoValidPrivilege - public ResponseDTO logOut() { - RequestTokenBO requestToken = SmartRequestTokenUtil.getRequestUser(); - if (null == requestToken) { - return ResponseDTO.wrap(LoginResponseCodeConst.LOGIN_ERROR); - } - return loginService.logoutByToken(requestToken); - } - - @GetMapping("/session/verificationCode") - @ApiOperation(value = "获取验证码", notes = "获取验证码") - @NoNeedLogin - public ResponseDTO verificationCode() { - return loginService.verificationCode(); - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/LoginResponseCodeConst.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/LoginResponseCodeConst.java deleted file mode 100644 index 0cfb8d22..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/LoginResponseCodeConst.java +++ /dev/null @@ -1,21 +0,0 @@ -package net.lab1024.smartadmin.module.system.login; - -import net.lab1024.smartadmin.common.constant.ResponseCodeConst; - -/** - * 员工常量类 - * 1001-1999 - * - * @author lidoudou - * @date 2017年12月19日下午19:04:52 - */ -public class LoginResponseCodeConst extends ResponseCodeConst { - - public static final LoginResponseCodeConst LOGIN_ERROR = new LoginResponseCodeConst(1001, "您还未登录或登录失效,请重新登录!"); - - public static final LoginResponseCodeConst NOT_HAVE_PRIVILEGES = new LoginResponseCodeConst(1002, "对不起,您没有权限哦!"); - - public LoginResponseCodeConst(int code, String msg) { - super(code, msg); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/LoginService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/LoginService.java deleted file mode 100644 index 070a9ff4..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/LoginService.java +++ /dev/null @@ -1,215 +0,0 @@ -package net.lab1024.smartadmin.module.system.login; - -import net.lab1024.smartadmin.common.constant.JudgeEnum; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.constant.CommonConst; -import net.lab1024.smartadmin.module.system.department.DepartmentDao; -import net.lab1024.smartadmin.module.system.department.domain.entity.DepartmentEntity; -import net.lab1024.smartadmin.module.system.employee.EmployeeDao; -import net.lab1024.smartadmin.module.system.employee.constant.EmployeeResponseCodeConst; -import net.lab1024.smartadmin.module.system.employee.constant.EmployeeStatusEnum; -import net.lab1024.smartadmin.module.system.employee.domain.dto.EmployeeDTO; -import net.lab1024.smartadmin.module.system.employee.domain.dto.EmployeeLoginFormDTO; -import net.lab1024.smartadmin.module.business.log.LogService; -import net.lab1024.smartadmin.module.business.log.userloginlog.domain.UserLoginLogEntity; -import net.lab1024.smartadmin.module.system.login.domain.KaptchaVO; -import net.lab1024.smartadmin.module.system.login.domain.LoginDetailVO; -import net.lab1024.smartadmin.module.system.login.domain.LoginPrivilegeDTO; -import net.lab1024.smartadmin.module.system.login.domain.RequestTokenBO; -import net.lab1024.smartadmin.module.system.privilege.domain.entity.PrivilegeEntity; -import net.lab1024.smartadmin.module.system.privilege.service.PrivilegeEmployeeService; -import net.lab1024.smartadmin.util.SmartBeanUtil; -import net.lab1024.smartadmin.util.SmartDigestUtil; -import net.lab1024.smartadmin.util.SmartIPUtil; -import com.google.code.kaptcha.impl.DefaultKaptcha; -import eu.bitwalker.useragentutils.UserAgent; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.codec.binary.Base64; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.ValueOperations; -import org.springframework.stereotype.Service; - -import javax.imageio.ImageIO; -import javax.servlet.http.HttpServletRequest; -import javax.validation.Valid; -import java.awt.image.BufferedImage; -import java.io.ByteArrayOutputStream; -import java.util.List; -import java.util.UUID; -import java.util.concurrent.TimeUnit; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/3/27 0027 下午 18:10 - * @since JDK1.8 - */ -@Slf4j -@Service -public class LoginService { - - private static final String VERIFICATION_CODE_REDIS_PREFIX = "vc_%s"; - - @Autowired - private EmployeeDao employeeDao; - - @Autowired - private DepartmentDao departmentDao; - - @Autowired - private PrivilegeEmployeeService privilegeEmployeeService; - - @Autowired - private LoginTokenService loginTokenService; - - @Autowired - private LogService logService; - - @Autowired - private DefaultKaptcha defaultKaptcha; - - @Autowired - private ValueOperations redisValueOperations; - - /** - * 登陆 - * - * @param loginForm 登录名 密码 - * @return 登录用户基本信息 - */ - public ResponseDTO login(@Valid EmployeeLoginFormDTO loginForm, HttpServletRequest request) { -// String redisVerificationCode = redisValueOperations.get(loginForm.getCodeUuid()); -// //增加删除已使用的验证码方式 频繁登录 -// redisValueOperations.getOperations().delete(loginForm.getCodeUuid()); -// if (StringUtils.isEmpty(redisVerificationCode)) { -// return ResponseDTO.wrap(EmployeeResponseCodeConst.VERIFICATION_CODE_INVALID); -// } -// if (!redisVerificationCode.equalsIgnoreCase(loginForm.getCode())) { -// return ResponseDTO.wrap(EmployeeResponseCodeConst.VERIFICATION_CODE_INVALID); -// } - String loginPwd = SmartDigestUtil.encryptPassword(CommonConst.Password.SALT_FORMAT, loginForm.getLoginPwd()); - EmployeeDTO employeeDTO = employeeDao.login(loginForm.getLoginName(), loginPwd); - if (null == employeeDTO) { - return ResponseDTO.wrap(EmployeeResponseCodeConst.LOGIN_FAILED); - } - if (EmployeeStatusEnum.DISABLED.equalsValue(employeeDTO.getIsDisabled())) { - return ResponseDTO.wrap(EmployeeResponseCodeConst.IS_DISABLED); - } - //jwt token赋值 - String compactJws = loginTokenService.generateToken(employeeDTO); - - LoginDetailVO loginDTO = SmartBeanUtil.copy(employeeDTO, LoginDetailVO.class); - - //获取前端功能权限 - loginDTO.setPrivilegeList(initEmployeePrivilege(employeeDTO.getId())); - - loginDTO.setXAccessToken(compactJws); - DepartmentEntity departmentEntity = departmentDao.selectById(employeeDTO.getDepartmentId()); - loginDTO.setDepartmentName(departmentEntity.getName()); - - //判断是否为超管 - Boolean isSuperman = privilegeEmployeeService.isSuperman(loginDTO.getId()); - loginDTO.setIsSuperMan(isSuperman); - //登陆操作日志 - UserAgent userAgent = UserAgent.parseUserAgentString(request.getHeader("User-Agent")); - UserLoginLogEntity logEntity = - UserLoginLogEntity.builder() - .userId(employeeDTO.getId()) - .userName(employeeDTO.getActualName()) - .remoteIp(SmartIPUtil.getRemoteIp(request)) - .remotePort(request.getRemotePort()) - .remoteBrowser(userAgent.getBrowser().getName()) - .remoteOs(userAgent.getOperatingSystem().getName()) - .loginStatus(JudgeEnum.YES.getValue()).build(); - logService.addLog(logEntity); - return ResponseDTO.succData(loginDTO); - } - - /** - * 手机端退出登陆,清除token缓存 - * - * @param requestToken - * @return 退出登陆是否成功,bool - */ - public ResponseDTO logoutByToken(RequestTokenBO requestToken) { - privilegeEmployeeService.removeCache(requestToken.getRequestUserId()); - return ResponseDTO.succ(); - } - - /** - * 获取验证码 - * - * @return - */ - public ResponseDTO verificationCode() { - KaptchaVO kaptchaVO = new KaptchaVO(); - String uuid = buildVerificationCodeRedisKey(UUID.randomUUID().toString()); - String kaptchaText = defaultKaptcha.createText(); - - String base64Code = ""; - - BufferedImage image = defaultKaptcha.createImage(kaptchaText); - ByteArrayOutputStream outputStream = null; - try { - outputStream = new ByteArrayOutputStream(); - ImageIO.write(image, "jpg", outputStream); - base64Code = Base64.encodeBase64String(outputStream.toByteArray()); - } catch (Exception e) { - log.error("verificationCode exception .{}", e); - } finally { - if (outputStream != null) { - try { - outputStream.close(); - } catch (Exception e) { - log.error("verificationCode outputStream close exception .{}", e); - } - } - } - kaptchaVO.setUuid(uuid); - kaptchaVO.setCode("data:image/png;base64," + base64Code); - redisValueOperations.set(uuid, kaptchaText, 60L, TimeUnit.SECONDS); - return ResponseDTO.succData(kaptchaVO); - } - - private String buildVerificationCodeRedisKey(String uuid) { - return String.format(VERIFICATION_CODE_REDIS_PREFIX, uuid); - } - - /** - * 初始化员工权限 - * - * @param employeeId - * @return - */ - public List initEmployeePrivilege(Long employeeId) { - List privilegeList = privilegeEmployeeService.getPrivilegesByEmployeeId(employeeId); - privilegeEmployeeService.updateCachePrivilege(employeeId, privilegeList); - return SmartBeanUtil.copyList(privilegeList, LoginPrivilegeDTO.class); - } - - public LoginDetailVO getSession(RequestTokenBO requestUser) { - LoginDetailVO loginDTO = SmartBeanUtil.copy(requestUser.getEmployeeBO(), LoginDetailVO.class); - List privilegeEntityList = privilegeEmployeeService.getEmployeeAllPrivilege(requestUser.getRequestUserId()); - //====== 开启缓存 ====== - if (privilegeEntityList == null) { - List loginPrivilegeDTOS = initEmployeePrivilege(requestUser.getRequestUserId()); - loginDTO.setPrivilegeList(loginPrivilegeDTOS); - } else { - loginDTO.setPrivilegeList(SmartBeanUtil.copyList(privilegeEntityList, LoginPrivilegeDTO.class)); - } - - //====== 不开启缓存 ====== -// List loginPrivilegeDTOS = initEmployeePrivilege(requestUser.getRequestUserId()); -// loginDTO.setPrivilegeList(loginPrivilegeDTOS); - - //判断是否为超管 - Boolean isSuperman = privilegeEmployeeService.isSuperman(loginDTO.getId()); - loginDTO.setIsSuperMan(isSuperman); - return loginDTO; - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/LoginTokenService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/LoginTokenService.java deleted file mode 100644 index 56ec269a..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/LoginTokenService.java +++ /dev/null @@ -1,118 +0,0 @@ -package net.lab1024.smartadmin.module.system.login; - -import net.lab1024.smartadmin.common.constant.JudgeEnum; -import net.lab1024.smartadmin.module.system.employee.EmployeeService; -import net.lab1024.smartadmin.module.system.employee.constant.EmployeeStatusEnum; -import net.lab1024.smartadmin.module.system.employee.domain.bo.EmployeeBO; -import net.lab1024.smartadmin.module.system.employee.domain.dto.EmployeeDTO; -import net.lab1024.smartadmin.module.system.login.domain.RequestTokenBO; -import io.jsonwebtoken.Claims; -import io.jsonwebtoken.Jwts; -import io.jsonwebtoken.SignatureAlgorithm; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.Date; -import java.util.UUID; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 - */ -@Slf4j -@Service -public class LoginTokenService { - - /** - * 过期时间一天 - */ - private static final int EXPIRE_SECONDS = 1 * 24 * 3600; - /** - * jwt加密字段 - */ - private static final String CLAIM_ID_KEY = "id"; - - @Value("${jwt.key}") - private String jwtKey; - - @Autowired - private EmployeeService employeeService; - - - /** - * 功能描述: 生成JWT TOKEN - * - * @param employeeDTO - * @return - * @auther yandanyang - * @date 2018/9/12 0012 上午 10:08 - */ - public String generateToken(EmployeeDTO employeeDTO) { - Long id = employeeDTO.getId(); - /**将token设置为jwt格式*/ - String baseToken = UUID.randomUUID().toString(); - LocalDateTime localDateTimeNow = LocalDateTime.now(); - LocalDateTime localDateTimeExpire = localDateTimeNow.plusSeconds(EXPIRE_SECONDS); - Date from = Date.from(localDateTimeNow.atZone(ZoneId.systemDefault()).toInstant()); - Date expire = Date.from(localDateTimeExpire.atZone(ZoneId.systemDefault()).toInstant()); - - Claims jwtClaims = Jwts.claims().setSubject(baseToken); - jwtClaims.put(CLAIM_ID_KEY, id); - String compactJws = Jwts.builder().setClaims(jwtClaims).setNotBefore(from).setExpiration(expire).signWith(SignatureAlgorithm.HS512, jwtKey).compact(); - - EmployeeBO employeeBO = employeeService.getById(id); - RequestTokenBO tokenBO = new RequestTokenBO(employeeBO); - - return compactJws; - } - - /** - * 功能描述: 根据登陆token获取登陆信息 - * - * @param - * @return - * @auther yandanyang - * @date 2018/9/12 0012 上午 10:11 - */ - public RequestTokenBO getEmployeeTokenInfo(String token) { - Long employeeId = -1L; - try { - Claims claims = Jwts.parser().setSigningKey(jwtKey).parseClaimsJws(token).getBody(); - String idStr = claims.get(CLAIM_ID_KEY).toString(); - employeeId = Long.valueOf(idStr); - } catch (Exception e) { - log.error("getEmployeeTokenInfo error:{}", e); - return null; - } - - EmployeeBO employeeBO = employeeService.getById(employeeId); - if (employeeBO == null) { - return null; - } - - if (EmployeeStatusEnum.DISABLED.getValue().equals(employeeBO.getIsDisabled())) { - return null; - } - - if (JudgeEnum.YES.equals(employeeBO.getIsLeave())) { - return null; - } - - if (JudgeEnum.YES.equals(employeeBO.getIsDelete())) { - return null; - } - - return new RequestTokenBO(employeeBO); - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/KaptchaVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/KaptchaVO.java deleted file mode 100644 index 61814e63..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/KaptchaVO.java +++ /dev/null @@ -1,28 +0,0 @@ -package net.lab1024.smartadmin.module.system.login.domain; - -import lombok.Data; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/7/4 0004 上午 10:11 - * @since JDK1.8 - */ -@Data -public class KaptchaVO { - - /** - * 验证码UUID - */ - private String uuid; - - /** - * base64 验证码 - */ - private String code; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/LoginCacheDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/LoginCacheDTO.java deleted file mode 100644 index c8e5f62f..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/LoginCacheDTO.java +++ /dev/null @@ -1,28 +0,0 @@ -package net.lab1024.smartadmin.module.system.login.domain; - -import net.lab1024.smartadmin.module.system.employee.domain.dto.EmployeeDTO; -import lombok.Data; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/8/9 0009 下午 17:32 - * @since JDK1.8 - */ -@Data -public class LoginCacheDTO { - - /** - * 基本信息 - */ - private EmployeeDTO employeeDTO; - - /** - * 过期时间 - */ - private Long expireTime; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/LoginDetailVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/LoginDetailVO.java deleted file mode 100644 index 72a27087..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/LoginDetailVO.java +++ /dev/null @@ -1,68 +0,0 @@ -package net.lab1024.smartadmin.module.system.login.domain; - -import com.fasterxml.jackson.annotation.JsonFormat; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.Date; -import java.util.List; - -/** - * 登录返回DTO - * - * @author lidoudou - * @date 2017年12月21日上午09:06:31 - */ -@Data -public class LoginDetailVO { - - @ApiModelProperty("主键id") - private Long id; - - @ApiModelProperty("登录账号") - private String loginName; - - @ApiModelProperty("别名") - private String nickName; - - @ApiModelProperty("员工名称") - private String actualName; - - @ApiModelProperty("手机号码") - private String phone; - - @ApiModelProperty("身份证") - private String idCard; - - @ApiModelProperty("出生日期") - @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") - private Date birthday; - - @ApiModelProperty("创建者id") - private Long createUser; - - @ApiModelProperty("部门id") - private Long departmentId; - - @ApiModelProperty("是否离职") - private Integer isLeave; - - @ApiModelProperty("是否被禁用") - private Integer isDisabled; - - @ApiModelProperty("部门名称") - private String departmentName; - - @ApiModelProperty("邮箱") - private String email; - - @ApiModelProperty("登陆token") - private String xAccessToken; - - @ApiModelProperty("是否为超管") - private Boolean isSuperMan; - - @ApiModelProperty("权限列表") - private List privilegeList; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/LoginPrivilegeDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/LoginPrivilegeDTO.java deleted file mode 100644 index e1812b35..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/LoginPrivilegeDTO.java +++ /dev/null @@ -1,33 +0,0 @@ -package net.lab1024.smartadmin.module.system.login.domain; - -import net.lab1024.smartadmin.common.anno.ApiModelPropertyEnum; -import net.lab1024.smartadmin.module.system.privilege.constant.PrivilegeTypeEnum; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/8/21 0021 上午 10:28 - * @since JDK1.8 - */ -@Data -public class LoginPrivilegeDTO { - - @ApiModelProperty("权限key") - private String key; - - @ApiModelPropertyEnum(enumDesc = "菜单类型",value = PrivilegeTypeEnum.class) - private Integer type; - - @ApiModelProperty("url") - private String url; - - @ApiModelProperty("父级key") - private String parentKey; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/RequestTokenBO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/RequestTokenBO.java deleted file mode 100644 index 101f66db..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/RequestTokenBO.java +++ /dev/null @@ -1,26 +0,0 @@ -package net.lab1024.smartadmin.module.system.login.domain; - -import net.lab1024.smartadmin.module.system.employee.domain.bo.EmployeeBO; -import lombok.Getter; - - -@Getter -public class RequestTokenBO { - - private Long requestUserId; - - private EmployeeBO employeeBO; - - public RequestTokenBO(EmployeeBO employeeBO) { - this.requestUserId = employeeBO.getId(); - this.employeeBO = employeeBO; - } - - @Override - public String toString() { - return "RequestTokenBO{" + - "requestUserId=" + requestUserId + - ", employeeBO=" + employeeBO + - '}'; - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/PositionController.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/PositionController.java deleted file mode 100644 index 0f1a311e..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/PositionController.java +++ /dev/null @@ -1,59 +0,0 @@ -package net.lab1024.smartadmin.module.system.position; - -import net.lab1024.smartadmin.common.anno.OperateLog; -import net.lab1024.smartadmin.common.domain.PageResultDTO; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.constant.SwaggerTagConst; -import net.lab1024.smartadmin.module.system.position.domain.dto.PositionAddDTO; -import net.lab1024.smartadmin.module.system.position.domain.dto.PositionQueryDTO; -import net.lab1024.smartadmin.module.system.position.domain.dto.PositionResultVO; -import net.lab1024.smartadmin.module.system.position.domain.dto.PositionUpdateDTO; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; - -/** - * @author zzr - */ -@Api(tags = {SwaggerTagConst.Admin.MANAGER_JOB}) -@OperateLog -@RestController -public class PositionController { - - @Autowired - private PositionService positionService; - - @ApiOperation(value = "分页查询所有岗位", notes = "分页查询所有岗位 @author zzr") - @PostMapping("/position/getListPage") - public ResponseDTO> getJobPage(@RequestBody @Valid PositionQueryDTO queryDTO) { - return positionService.queryPositionByPage(queryDTO); - } - - @ApiOperation(value = "添加岗位", notes = "添加岗位 @author zzr") - @PostMapping("/position/add") - public ResponseDTO addJob(@RequestBody @Valid PositionAddDTO addDTO) { - return positionService.addPosition(addDTO); - } - - @ApiOperation(value = "更新岗位", notes = "更新岗位 @author zzr") - @PostMapping("/position/update") - public ResponseDTO updateJob(@RequestBody @Valid PositionUpdateDTO updateDTO) { - return positionService.updatePosition(updateDTO); - } - - @ApiOperation(value = "根据ID查询岗位", notes = "根据ID查询岗位 @author zzr") - @GetMapping("/position/queryById/{id}") - public ResponseDTO queryJobById(@PathVariable Long id) { - return positionService.queryPositionById(id); - } - - @ApiOperation(value = "根据ID删除岗位", notes = "根据ID删除岗位 @author zzr") - @GetMapping("/position/remove/{id}") - public ResponseDTO removeJob(@PathVariable Long id) { - return positionService.removePosition(id); - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/PositionDao.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/PositionDao.java deleted file mode 100644 index 68423c59..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/PositionDao.java +++ /dev/null @@ -1,63 +0,0 @@ -package net.lab1024.smartadmin.module.system.position; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import net.lab1024.smartadmin.module.system.position.domain.dto.PositionQueryDTO; -import net.lab1024.smartadmin.module.system.position.domain.dto.PositionRelationAddDTO; -import net.lab1024.smartadmin.module.system.position.domain.dto.PositionRelationQueryDTO; -import net.lab1024.smartadmin.module.system.position.domain.dto.PositionRelationResultDTO; -import net.lab1024.smartadmin.module.system.position.domain.entity.PositionEntity; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; -import org.springframework.stereotype.Component; - -import java.util.List; - -/** - * @author zzr - */ -@Mapper -@Component -public interface PositionDao extends BaseMapper { - - /** - * 查询岗位列表 - * - * @param page - * @param queryDTO - * @return - */ - List selectByPage(Page page, @Param("queryDTO") PositionQueryDTO queryDTO); - - /** - * 查询岗位与人员关系 - * - * @param positionRelationQueryDTO - * @return - */ - List selectRelation(PositionRelationQueryDTO positionRelationQueryDTO); - - /** - * 批量查询员工岗位信息 - * @param employeeIdList - * @return - */ - List selectEmployeesRelation(@Param("employeeIdList") List employeeIdList); - - /** - * 批量添加岗位 人员 关联关系 - * - * @param positionRelationAddDTO - * @return - */ - Integer insertBatchRelation(@Param("batchDTO")PositionRelationAddDTO positionRelationAddDTO); - - /** - * 删除指定人员的 岗位关联关系 - * - * @param employeeId - * @return - */ - Integer deleteRelationByEmployeeId(@Param("employeeId") Long employeeId); - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/PositionResponseCodeConst.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/PositionResponseCodeConst.java deleted file mode 100644 index 43528034..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/PositionResponseCodeConst.java +++ /dev/null @@ -1,16 +0,0 @@ -package net.lab1024.smartadmin.module.system.position; - -import net.lab1024.smartadmin.common.constant.ResponseCodeConst; - -/** - * @author zzr - */ -public class PositionResponseCodeConst extends ResponseCodeConst { - - public static final PositionResponseCodeConst REMOVE_DEFINE = new PositionResponseCodeConst(13000, "还有人关联该岗位,不能删除"); - - protected PositionResponseCodeConst(int code, String msg) { - super(code, msg); - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/PositionService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/PositionService.java deleted file mode 100644 index 58468969..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/PositionService.java +++ /dev/null @@ -1,124 +0,0 @@ -package net.lab1024.smartadmin.module.system.position; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import net.lab1024.smartadmin.common.domain.PageResultDTO; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.module.system.position.domain.dto.*; -import net.lab1024.smartadmin.module.system.position.domain.entity.PositionEntity; -import net.lab1024.smartadmin.util.SmartBeanUtil; -import net.lab1024.smartadmin.util.SmartPageUtil; -import org.apache.commons.collections.CollectionUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; -import java.util.stream.Collectors; - -/** - * @author zzr - */ -@Service -public class PositionService { - - @Autowired - private PositionDao positionDao; - - /** - * 查询岗位 - * - * @param queryDTO - * @return - */ - public ResponseDTO> queryPositionByPage(PositionQueryDTO queryDTO) { - Page page = SmartPageUtil.convert2QueryPage(queryDTO); - List entityList = positionDao.selectByPage(page, queryDTO); - page.setRecords(entityList.stream().map(e -> SmartBeanUtil.copy(e, PositionResultVO.class)).collect(Collectors.toList())); - PageResultDTO pageResultDTO = SmartPageUtil.convert2PageResult(page); - return ResponseDTO.succData(pageResultDTO); - } - - /** - * 新增岗位 - * - * @param addDTO - * @return - */ - public ResponseDTO addPosition(PositionAddDTO addDTO) { - PositionEntity positionEntity = SmartBeanUtil.copy(addDTO, PositionEntity.class); - positionDao.insert(positionEntity); - return ResponseDTO.succ(); - } - - /** - * 修改岗位 - * - * @param updateDTO - * @return - */ - public ResponseDTO updatePosition(PositionUpdateDTO updateDTO) { - PositionEntity positionEntity = SmartBeanUtil.copy(updateDTO, PositionEntity.class); - positionDao.updateById(positionEntity); - return ResponseDTO.succ(); - } - - /** - * 根据ID查询 - * - * @param id - * @return - */ - public ResponseDTO queryPositionById(Long id) { - return ResponseDTO.succData(SmartBeanUtil.copy(positionDao.selectById(id), PositionResultVO.class)); - } - - /** - * 删除岗位 - */ - public ResponseDTO removePosition(Long id) { - //查询是否还有人关联该岗位 - PositionRelationQueryDTO positionRelationQueryDTO = new PositionRelationQueryDTO(); - positionRelationQueryDTO.setPositionId(id); - List dtoList = positionDao.selectRelation(positionRelationQueryDTO); - if (CollectionUtils.isNotEmpty(dtoList)) { - return ResponseDTO.wrap(PositionResponseCodeConst.REMOVE_DEFINE); - } - positionDao.deleteById(id); - return ResponseDTO.succ(); - } - - /** - * 添加岗位关联关系 - * - * @param positionRelAddDTO - * @return - */ - public ResponseDTO addPositionRelation(PositionRelationAddDTO positionRelAddDTO) { - positionDao.insertBatchRelation(positionRelAddDTO); - return ResponseDTO.succ(); - } - - /** - * 删除指定用户的岗位关联关系 - * - * @param employeeId - * @return - */ - public ResponseDTO removePositionRelation(Long employeeId) { - positionDao.deleteRelationByEmployeeId(employeeId); - return ResponseDTO.succ(); - } - - /** - * 根据员工ID查询 所关联的岗位信息 - * - * @param employeeId - * @return - */ - public List queryPositionByEmployeeId(Long employeeId) { - PositionRelationQueryDTO positionRelationQueryDTO = new PositionRelationQueryDTO(); - positionRelationQueryDTO.setEmployeeId(employeeId); - List positionRelationList = positionDao.selectRelation(positionRelationQueryDTO); - return positionRelationList; - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionAddDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionAddDTO.java deleted file mode 100644 index d7b4d8b6..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionAddDTO.java +++ /dev/null @@ -1,28 +0,0 @@ -package net.lab1024.smartadmin.module.system.position.domain.dto; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotBlank; - -/** - * 岗位 - * - * @author zzr - */ -@Data -public class PositionAddDTO { - - /** - * 岗位名称 - */ - @ApiModelProperty("岗位名称") - @NotBlank(message = "岗位名称不能为空") - private String positionName; - - /** - * 岗位描述 - */ - @ApiModelProperty("岗位描述") - private String remark; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionQueryDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionQueryDTO.java deleted file mode 100644 index 6ab8d066..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionQueryDTO.java +++ /dev/null @@ -1,18 +0,0 @@ -package net.lab1024.smartadmin.module.system.position.domain.dto; - -import net.lab1024.smartadmin.common.domain.PageParamDTO; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * 岗位 - * - * @author zzr - */ -@Data -public class PositionQueryDTO extends PageParamDTO { - - @ApiModelProperty("岗位名称") - private String positionName; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionRelationAddDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionRelationAddDTO.java deleted file mode 100644 index 509c1a22..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionRelationAddDTO.java +++ /dev/null @@ -1,32 +0,0 @@ -package net.lab1024.smartadmin.module.system.position.domain.dto; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotNull; -import java.util.List; - -/** - * 岗位关系 - * - * @author zzr - */ -@Data -public class PositionRelationAddDTO { - - @ApiModelProperty("岗位ID") - @NotNull(message = "岗位ID 不能为空") - private List positionIdList; - - @ApiModelProperty("员工ID") - @NotNull(message = "员工ID 不能为空") - private Long employeeId; - - public PositionRelationAddDTO() { - } - - public PositionRelationAddDTO(List positionIdList, Long employeeId) { - this.positionIdList = positionIdList; - this.employeeId = employeeId; - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionRelationQueryDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionRelationQueryDTO.java deleted file mode 100644 index 3732cd50..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionRelationQueryDTO.java +++ /dev/null @@ -1,20 +0,0 @@ -package net.lab1024.smartadmin.module.system.position.domain.dto; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * 岗位关系 - * - * @author zzr - */ -@Data -public class PositionRelationQueryDTO { - - @ApiModelProperty("岗位ID") - private Long positionId; - - @ApiModelProperty("员工ID") - private Long employeeId; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionRelationResultDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionRelationResultDTO.java deleted file mode 100644 index 1881904f..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionRelationResultDTO.java +++ /dev/null @@ -1,40 +0,0 @@ -package net.lab1024.smartadmin.module.system.position.domain.dto; - -import lombok.Data; - -import java.util.Date; - -/** - * 岗位关联关系 - * - * @author zzr - */ -@Data -public class PositionRelationResultDTO { - - /** - * 岗位ID - */ - private Long positionId; - - /** - * 员工ID - */ - private Long employeeId; - - /** - * 岗位名称 - */ - private String positionName; - - /** - * 更新时间 - */ - private Date updateTime; - - /** - * 创建时间 - */ - private Date createTime; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionResultVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionResultVO.java deleted file mode 100644 index 3bc89efd..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionResultVO.java +++ /dev/null @@ -1,41 +0,0 @@ -package net.lab1024.smartadmin.module.system.position.domain.dto; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.Date; - -/** - * @author zzr - */ -@Data -public class PositionResultVO { - - @ApiModelProperty("主键") - private Long id; - - /** - * 更新时间 - */ - @ApiModelProperty("更新时间") - private Date updateTime; - - /** - * 创建时间 - */ - @ApiModelProperty("创建时间") - private Date createTime; - - /** - * 岗位名称 - */ - @ApiModelProperty("岗位名称") - private String positionName; - - /** - * 岗位描述 - */ - @ApiModelProperty("岗位描述") - private String remark; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionUpdateDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionUpdateDTO.java deleted file mode 100644 index 659da733..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionUpdateDTO.java +++ /dev/null @@ -1,16 +0,0 @@ -package net.lab1024.smartadmin.module.system.position.domain.dto; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * 岗位 - * - * @author zzr - */ -@Data -public class PositionUpdateDTO extends PositionAddDTO { - - @ApiModelProperty("主键") - private Long id; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/entity/PositionEntity.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/entity/PositionEntity.java deleted file mode 100644 index a42af4ac..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/entity/PositionEntity.java +++ /dev/null @@ -1,26 +0,0 @@ -package net.lab1024.smartadmin.module.system.position.domain.entity; - -import com.baomidou.mybatisplus.annotation.TableName; -import net.lab1024.smartadmin.common.domain.BaseEntity; -import lombok.Data; - -/** - * 岗位 - * - * @author zzr - */ -@Data -@TableName("t_position") -public class PositionEntity extends BaseEntity { - - /** - * 岗位名称 - */ - private String positionName; - - /** - * 岗位描述 - */ - private String remark; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/entity/PositionRelationEntity.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/entity/PositionRelationEntity.java deleted file mode 100644 index b7ff8676..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/entity/PositionRelationEntity.java +++ /dev/null @@ -1,26 +0,0 @@ -package net.lab1024.smartadmin.module.system.position.domain.entity; - -import com.baomidou.mybatisplus.annotation.TableName; -import net.lab1024.smartadmin.common.domain.BaseEntity; -import lombok.Data; - -/** - * 岗位关联关系 - * - * @author zzr - */ -@Data -@TableName("t_position_relation") -public class PositionRelationEntity extends BaseEntity { - - /** - * 岗位ID - */ - private Long positionId; - - /** - * 员工ID - */ - private Long employeeId; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/constant/PrivilegeResponseCodeConst.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/constant/PrivilegeResponseCodeConst.java deleted file mode 100644 index 3efbd9b2..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/constant/PrivilegeResponseCodeConst.java +++ /dev/null @@ -1,29 +0,0 @@ -package net.lab1024.smartadmin.module.system.privilege.constant; - -import net.lab1024.smartadmin.common.constant.ResponseCodeConst; - - -/** - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 - */ -public class PrivilegeResponseCodeConst extends ResponseCodeConst { - - public static final PrivilegeResponseCodeConst PRIVILEGE_NOT_EXISTS = new PrivilegeResponseCodeConst(7001, "当前数据不存在,请联系你的管理员!"); - - public static final PrivilegeResponseCodeConst ROUTER_KEY_NO_REPEAT = new PrivilegeResponseCodeConst(7002, "模块和页面的“功能Key”值不能重复!"); - - public static final PrivilegeResponseCodeConst MENU_NOT_EXIST = new PrivilegeResponseCodeConst(7003, "菜单不存在,清先保存菜单!"); - - public static final PrivilegeResponseCodeConst POINT_NOT_EXIST = new PrivilegeResponseCodeConst(7004, "功能点不存在,清先保存功能点!"); - - public PrivilegeResponseCodeConst(int code, String msg) { - super(code, msg); - } -} - diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/constant/PrivilegeTypeEnum.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/constant/PrivilegeTypeEnum.java deleted file mode 100644 index 96b175e6..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/constant/PrivilegeTypeEnum.java +++ /dev/null @@ -1,49 +0,0 @@ -package net.lab1024.smartadmin.module.system.privilege.constant; - - -import net.lab1024.smartadmin.common.domain.BaseEnum; - -import java.util.Arrays; -import java.util.Optional; - -/** - * - * [ ] - * - * @version 1.0 - * @since JDK1.8 - * @author yandanyang - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - */ -public enum PrivilegeTypeEnum implements BaseEnum { - - - MENU(1,"菜单"), - - POINTS(2,"功能点"); - - private Integer value; - - private String desc; - - PrivilegeTypeEnum(Integer value,String desc){ - this.value = value; - this.desc = desc; - } - @Override - public Integer getValue() { - return this.value; - } - - @Override - public String getDesc() { - return this.desc; - } - - public static PrivilegeTypeEnum selectByValue(Integer value) { - Optional first = Arrays.stream(PrivilegeTypeEnum.values()).filter(e -> e.getValue().equals(value)).findFirst(); - return !first.isPresent() ? null : first.get(); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/controller/PrivilegeController.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/controller/PrivilegeController.java deleted file mode 100644 index 3a073a2d..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/controller/PrivilegeController.java +++ /dev/null @@ -1,75 +0,0 @@ -package net.lab1024.smartadmin.module.system.privilege.controller; - -import net.lab1024.smartadmin.common.anno.OperateLog; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.common.domain.ValidateList; -import net.lab1024.smartadmin.constant.SwaggerTagConst; -import net.lab1024.smartadmin.module.system.privilege.service.PrivilegeService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import net.lab1024.smartadmin.module.system.privilege.domain.dto.*; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; -import java.util.List; - -/** - * [ 与员工权限相关:角色权限关系、权限列表 ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 - */ -@OperateLog -@RestController -@Api(tags = {SwaggerTagConst.Admin.MANAGER_PRIVILEGE}) -public class PrivilegeController { - - @Autowired - private PrivilegeService privilegeService; - - @GetMapping("/privilege/getAllUrl") - @ApiOperation(value = "获取所有请求路径", notes = "获取所有请求路径") - public ResponseDTO> getAllUrl() { - return privilegeService.getPrivilegeUrlDTOList(); - } - - @ApiOperation(value = "菜单批量保存") - @PostMapping("/privilege/menu/batchSaveMenu") - public ResponseDTO menuBatchSave(@Valid @RequestBody ValidateList menuList) { - return privilegeService.menuBatchSave(menuList); - } - - - @ApiOperation(value = "查询所有菜单项") - @PostMapping("/privilege/menu/queryAll") - public ResponseDTO> queryAll() { - return privilegeService.menuQueryAll(); - } - - - @ApiOperation(value = "保存更新功能点") - @PostMapping("/privilege/function/saveOrUpdate") - public ResponseDTO functionSaveOrUpdate(@Valid @RequestBody PrivilegeFunctionDTO privilegeFunctionDTO) { - return privilegeService.functionSaveOrUpdate(privilegeFunctionDTO); - } - - @ApiOperation(value = "批量保存功能点") - @PostMapping("/privilege/function/batchSave") - public ResponseDTO batchSaveFunctionList(@Valid @RequestBody ValidateList functionList) { - return privilegeService.batchSaveFunctionList(functionList); - } - - - @ApiOperation(value = "查询菜单功能点", notes = "更新") - @PostMapping("/privilege/function/query/{menuKey}") - public ResponseDTO> functionQuery(@PathVariable String menuKey) { - return privilegeService.functionQuery(menuKey); - } - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/dao/PrivilegeDao.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/dao/PrivilegeDao.java deleted file mode 100644 index 291480d1..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/dao/PrivilegeDao.java +++ /dev/null @@ -1,94 +0,0 @@ -package net.lab1024.smartadmin.module.system.privilege.dao; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import net.lab1024.smartadmin.module.system.privilege.domain.entity.PrivilegeEntity; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; -import org.springframework.stereotype.Component; - -import java.util.List; - - -/** - * - * [ ] - * - * @version 1.0 - * @since JDK1.8 - * @author yandanyang - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - */ -@Mapper -@Component -public interface PrivilegeDao extends BaseMapper { - - /** - * 根据权限key删除 - * @param keyList - */ - void delByKeyList(@Param("keyList") List keyList); - /** - * 根据权限parentkey删除 - * @param keyList - */ - void delByParentKeyList(@Param("keyList") List keyList); - - /** - * 批量保存 - * @param privilegeList - */ - void batchInsert(List privilegeList); - - /** - * 批量更新 - * @param privilegeList - */ - void batchUpdate(@Param("updateList") List privilegeList); - - /** - * 根据父节点key查询 - * @param parentKey - * @return - */ - List selectByParentKey(@Param("parentKey") String parentKey); - - /** - * 根据父节点key查询 - * @param keyList - * @return - */ - List selectByKeyList(@Param("keyList") List keyList); - - /** - * 根据权限key查询 - * @param key - * @return - */ - PrivilegeEntity selectByKey(@Param("key") String key); - - /** - * 根据类型查询 - * @param type - * @return - */ - List selectByExcludeType(@Param("type") Integer type); - - /** - * 根据类型查询 - * @param type - * @return - */ - List selectByType(@Param("type") Integer type); - - /** - * 查询所有权限 - * @return - */ - List selectAll(); - - - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeFunctionDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeFunctionDTO.java deleted file mode 100644 index 0e15a42c..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeFunctionDTO.java +++ /dev/null @@ -1,40 +0,0 @@ -package net.lab1024.smartadmin.module.system.privilege.domain.dto; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/8/20 0020 下午 16:45 - * @since JDK1.8 - */ -@Data -public class PrivilegeFunctionDTO { - - @ApiModelProperty("功能点名称") - @NotBlank(message = "功能点名称不能为空") - private String functionName; - - @ApiModelProperty("所属菜单Key") - @NotBlank(message = "所属菜单Key不能为空") - private String menuKey; - - @ApiModelProperty("功能点Key") - @NotBlank(message = "功能点Key不能为空") - private String functionKey; - - @ApiModelProperty("url列表") - private String url; - - @ApiModelProperty("排序") - @NotNull(message = "请输入功能点顺序") - private Integer sort; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeFunctionVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeFunctionVO.java deleted file mode 100644 index fd89f959..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeFunctionVO.java +++ /dev/null @@ -1,40 +0,0 @@ -package net.lab1024.smartadmin.module.system.privilege.domain.dto; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotEmpty; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/8/20 0020 下午 16:45 - * @since JDK1.8 - */ -@Data -public class PrivilegeFunctionVO { - - @ApiModelProperty("功能点名称") - @NotBlank(message = "功能点名称不能为空") - private String functionName; - - @ApiModelProperty("所属菜单Key") - @NotBlank(message = "所属菜单Key不能为空") - private String menuKey; - - @ApiModelProperty("功能点Key") - @NotBlank(message = "功能点Key不能为空") - private String functionKey; - - @ApiModelProperty("url列表") - @NotEmpty(message = "url列表不能为空") - private String url; - - @ApiModelProperty("顺序") - private Integer sort; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeMenuDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeMenuDTO.java deleted file mode 100644 index 137f827d..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeMenuDTO.java +++ /dev/null @@ -1,45 +0,0 @@ -package net.lab1024.smartadmin.module.system.privilege.domain.dto; - -import net.lab1024.smartadmin.common.anno.ApiModelPropertyEnum; -import net.lab1024.smartadmin.module.system.privilege.constant.PrivilegeTypeEnum; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotNull; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/8/20 0020 下午 16:32 - * @since JDK1.8 - */ -@Data -public class PrivilegeMenuDTO { - - @ApiModelPropertyEnum(enumDesc = "菜单类型",value = PrivilegeTypeEnum.class) - @NotNull - private Integer type; - - @ApiModelProperty("菜单名") - @NotNull(message = "菜单名不能为空") - private String menuName; - - @ApiModelProperty("菜单Key") - @NotNull(message = "菜单Key不能为空") - private String menuKey; - - @ApiModelProperty("父级菜单Key,根节点不传") - private String parentKey; - - @ApiModelProperty("前端路由path") - @NotNull(message = "前端路由path不能为空") - private String url; - - @ApiModelProperty("排序字段") - @NotNull(message = "菜单项顺序不能为空") - private Integer sort; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeMenuVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeMenuVO.java deleted file mode 100644 index 72febd9c..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeMenuVO.java +++ /dev/null @@ -1,35 +0,0 @@ -package net.lab1024.smartadmin.module.system.privilege.domain.dto; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/8/20 0020 下午 16:41 - * @since JDK1.8 - */ -@Data -public class PrivilegeMenuVO { - - @ApiModelProperty("菜单名") - private String menuName; - - @ApiModelProperty("菜单Key") - private String menuKey; - - @ApiModelProperty("菜单父级Key") - private String parentKey; - - @ApiModelProperty("顺序") - private Integer sort; - - @ApiModelProperty("前端路由path") - private String url; - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeRequestUrlVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeRequestUrlVO.java deleted file mode 100644 index d227c04d..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeRequestUrlVO.java +++ /dev/null @@ -1,27 +0,0 @@ -package net.lab1024.smartadmin.module.system.privilege.domain.dto; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/3/28 0028 上午 9:20 - * @since JDK1.8 - */ -@Data -public class PrivilegeRequestUrlVO { - - @ApiModelProperty("注释说明") - private String comment; - - @ApiModelProperty("controller.method") - private String name; - - @ApiModelProperty("url") - private String url; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/entity/PrivilegeEntity.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/entity/PrivilegeEntity.java deleted file mode 100644 index df49b874..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/entity/PrivilegeEntity.java +++ /dev/null @@ -1,57 +0,0 @@ -package net.lab1024.smartadmin.module.system.privilege.domain.entity; - -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableName; -import net.lab1024.smartadmin.common.domain.BaseEntity; -import lombok.Data; - -import java.io.Serializable; - -/** - * - * [ ] - * - * @version 1.0 - * @since JDK1.8 - * @author yandanyang - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - */ -@Data -@TableName("t_privilege") -public class PrivilegeEntity extends BaseEntity implements Serializable { - private static final long serialVersionUID = 3848408566432915214L; - - /** - * 功能权限类型:1.模块 2.页面 3.功能点 4.子模块 - */ - private Integer type; - - /** - * 菜单名称 - */ - private String name; - - /** - * 路由name 英文关键字 - */ - @TableField(value = "`key`") - private String key; - - - private String url; - - /** - * 排序 - */ - private Integer sort; - - - /** - * 父级key - */ - private String parentKey; - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/service/PrivilegeEmployeeService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/service/PrivilegeEmployeeService.java deleted file mode 100644 index 602a5b59..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/service/PrivilegeEmployeeService.java +++ /dev/null @@ -1,199 +0,0 @@ -package net.lab1024.smartadmin.module.system.privilege.service; - -import net.lab1024.smartadmin.common.constant.JudgeEnum; -import net.lab1024.smartadmin.common.exception.SmartBusinessException; -import net.lab1024.smartadmin.module.system.employee.domain.dto.EmployeeDTO; -import net.lab1024.smartadmin.module.system.login.domain.RequestTokenBO; -import net.lab1024.smartadmin.module.system.privilege.constant.PrivilegeTypeEnum; -import net.lab1024.smartadmin.module.system.privilege.dao.PrivilegeDao; -import net.lab1024.smartadmin.module.system.privilege.domain.entity.PrivilegeEntity; -import net.lab1024.smartadmin.module.system.role.roleemployee.RoleEmployeeDao; -import net.lab1024.smartadmin.module.system.role.roleprivilege.RolePrivilegeDao; -import net.lab1024.smartadmin.module.system.systemconfig.SystemConfigService; -import net.lab1024.smartadmin.module.system.systemconfig.constant.SystemConfigEnum; -import net.lab1024.smartadmin.module.system.systemconfig.domain.dto.SystemConfigDTO; -import net.lab1024.smartadmin.util.SmartStringUtil; -import com.google.common.collect.Lists; -import com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap; -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.*; -import java.util.concurrent.ConcurrentMap; -import java.util.stream.Collectors; - -/** - * [ 后台员工权限缓存方法 ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/3/28 0028 下午 14:07 - * @since JDK1.8 - */ -@Service -public class PrivilegeEmployeeService { - - /** - * 后台用户权限缓存 > - */ - private ConcurrentMap>> employeePrivileges = new ConcurrentLinkedHashMap.Builder>>().maximumWeightedCapacity(1000).build(); - private ConcurrentMap> employeePrivilegeListMap = new ConcurrentLinkedHashMap.Builder>().maximumWeightedCapacity(1000).build(); - - @Autowired - private SystemConfigService systemConfigService; - - @Autowired - private RoleEmployeeDao roleEmployeeDao; - - @Autowired - private RolePrivilegeDao rolePrivilegeDao; - - @Autowired - private PrivilegeDao privilegeDao; - - /** - * 移除某人缓存中的权限 - * - * @param employeeId - */ - public void removeCache(Long employeeId) { - this.employeePrivileges.remove(employeeId); - } - - /** - * 检查某人是否有访问某个方法的权限 - * - * @param requestTokenBO - * @param controllerName - * @param methodName - * @return - */ - public Boolean checkEmployeeHavePrivilege(RequestTokenBO requestTokenBO, String controllerName, String methodName) { - if (StringUtils.isEmpty(controllerName) || StringUtils.isEmpty(methodName)) { - return false; - } - Boolean isSuperman = requestTokenBO.getEmployeeBO().getIsSuperman(); - if (isSuperman) { - return true; - } - Map> privileges = this.getPrivileges(requestTokenBO.getRequestUserId()); - List urlList = privileges.get(controllerName.toLowerCase()); - if (CollectionUtils.isEmpty(urlList)) { - return false; - } - return urlList.contains(methodName); - } - - public List getEmployeeAllPrivilege(Long employeeId) { - return employeePrivilegeListMap.get(employeeId); - } - - /** - * 判断是否为超级管理员 - * - * @param employeeId - * @return - */ - public Boolean isSuperman(Long employeeId) { - SystemConfigDTO systemConfig = systemConfigService.getCacheByKey(SystemConfigEnum.Key.EMPLOYEE_SUPERMAN); - if (systemConfig == null) { - throw new SmartBusinessException("缺少系统配置项[" + SystemConfigEnum.Key.EMPLOYEE_SUPERMAN.name() + "]"); - } - - List superManIdsList = SmartStringUtil.splitConverToLongList(systemConfig.getConfigValue(), ","); - return superManIdsList.contains(employeeId); - } - - /** - * 根据员工ID 获取 权限信息 - * - * @param employeeId - * @return - */ - public List getPrivilegesByEmployeeId(Long employeeId) { - List privilegeEntities = null; - // 如果是超管的话 - Boolean isSuperman = this.isSuperman(employeeId); - if (isSuperman) { - privilegeEntities = privilegeDao.selectAll(); - } else { - privilegeEntities = loadPrivilegeFromDb(employeeId); - } - - if (privilegeEntities == null) { - privilegeEntities = Lists.newArrayList(); - } - - this.updateCachePrivilege(employeeId, privilegeEntities); - return privilegeEntities; - } - - /** - * 获取某人所能访问的方法 - * - * @param employeeId - * @return - */ - private Map> getPrivileges(Long employeeId) { - Map> privileges = employeePrivileges.get(employeeId); - if (privileges != null) { - return privileges; - } - List privilegeEntities = this.loadPrivilegeFromDb(employeeId); - return updateCachePrivilege(employeeId, privilegeEntities); - } - - private List loadPrivilegeFromDb(Long employeeId) { - List roleIdList = roleEmployeeDao.selectRoleIdByEmployeeId(employeeId); - if (CollectionUtils.isEmpty(roleIdList)) { - return Lists.newArrayList(); - } - List privilegeEntities = rolePrivilegeDao.listByRoleIds(roleIdList, JudgeEnum.YES.getValue()); - if (privilegeEntities != null) { - return privilegeEntities; - } - return Collections.emptyList(); - } - - public Map> updateCachePrivilege(Long employeeId, List privilegeEntities) { - employeePrivilegeListMap.put(employeeId, privilegeEntities); - List privilegeList = new ArrayList<>(); - Map> privilegeMap = new HashMap<>(16); - if (CollectionUtils.isNotEmpty(privilegeEntities)) { - List> setList = - privilegeEntities.stream().filter(e -> e.getType().equals(PrivilegeTypeEnum.POINTS.getValue())).map(PrivilegeEntity::getUrl).collect(Collectors.toList()).stream().map(e -> SmartStringUtil.splitConvertToList(e, ",")).collect(Collectors.toList()); - setList.forEach(privilegeList::addAll); - } - privilegeList.forEach(item -> { - List path = SmartStringUtil.splitConvertToList(item, "\\."); - String controllerName = path.get(0).toLowerCase(); - String methodName = path.get(1); - List methodNameList = privilegeMap.get(controllerName); - if (null == methodNameList) { - methodNameList = new ArrayList(); - } - if (!methodNameList.contains(methodName)) { - methodNameList.add(methodName); - } - privilegeMap.put(controllerName, methodNameList); - }); - - employeePrivileges.put(employeeId, privilegeMap); - return privilegeMap; - } - - public void updateOnlineEmployeePrivilegeByRoleId(Long roleId) { - List roleEmployeeList = roleEmployeeDao.selectEmployeeByRoleId(roleId); - List employeeIdList = roleEmployeeList.stream().map(e -> e.getId()).collect(Collectors.toList()); - - for (Long empId : employeePrivileges.keySet()) { - if (employeeIdList.contains(empId)) { - getPrivilegesByEmployeeId(empId); - } - } - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/service/PrivilegeRequestUrlService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/service/PrivilegeRequestUrlService.java deleted file mode 100644 index f9aa07aa..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/service/PrivilegeRequestUrlService.java +++ /dev/null @@ -1,117 +0,0 @@ -package net.lab1024.smartadmin.module.system.privilege.service; - -import net.lab1024.smartadmin.constant.CommonConst; -import net.lab1024.smartadmin.module.system.privilege.domain.dto.PrivilegeRequestUrlVO; -import net.lab1024.smartadmin.util.SmartStringUtil; -import com.google.common.collect.Lists; -import com.google.common.collect.Sets; -import io.swagger.annotations.ApiModelProperty; -import io.swagger.annotations.ApiOperation; -import org.apache.commons.collections.CollectionUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.annotation.AnnotationUtils; -import org.springframework.stereotype.Service; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.context.WebApplicationContext; -import org.springframework.web.method.HandlerMethod; -import org.springframework.web.servlet.mvc.method.RequestMappingInfo; -import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; - -import javax.annotation.PostConstruct; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.CopyOnWriteArrayList; - -/** - * [ 初始化 分离前后台权限URL ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/3/28 0028 上午 9:13 - * @since JDK1.8 - */ -@Service -public class PrivilegeRequestUrlService { - - /** - * 系统所有requestUrl - */ - private CopyOnWriteArrayList privilegeUrlDTOList = Lists.newCopyOnWriteArrayList(); - - @Autowired - private WebApplicationContext applicationContext; - - @PostConstruct - public void initAllUrl() { - this.privilegeUrlDTOList.clear(); - - RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMappingHandlerMapping.class); - //获取url与类和方法的对应信息 - Map map = mapping.getHandlerMethods(); - map.forEach((info, handlerMethod) -> { - //只对Rest 服务进行权限验证 - RestController restAnnotation = AnnotationUtils.findAnnotation(handlerMethod.getMethod().getDeclaringClass(), RestController.class); - if (restAnnotation == null) { - ResponseBody responseBody = handlerMethod.getMethod().getAnnotation(ResponseBody.class); - if (responseBody == null) { - return; - } - } - //获取url的Set集合,一个方法可能对应多个url - Set patterns = info.getPatternsCondition().getPatterns(); - if (CollectionUtils.isEmpty(patterns)) { - return; - } - String className = (String) handlerMethod.getBean(); - String methodName = handlerMethod.getMethod().getName(); - List list = SmartStringUtil.splitConvertToList(className, "\\."); - String controllerName = list.get(list.size() - 1); - String name = controllerName + "." + methodName; - - ApiOperation apiOperation = handlerMethod.getMethod().getAnnotation(ApiOperation.class); - String methodComment = null; - if (apiOperation != null) { - methodComment = apiOperation.value(); - } else { - ApiModelProperty apiModelProperty = handlerMethod.getMethod().getAnnotation(ApiModelProperty.class); - if (apiModelProperty != null) { - methodComment = apiModelProperty.value(); - } else { - methodComment = handlerMethod.getMethod().getName(); - } - } - Set urlSet = this.getUrlSet(patterns); - for (String url : urlSet) { - PrivilegeRequestUrlVO privilegeUrlDTO = new PrivilegeRequestUrlVO(); - privilegeUrlDTO.setUrl(url); - privilegeUrlDTO.setName(name); - privilegeUrlDTO.setComment(methodComment); - this.privilegeUrlDTOList.add(privilegeUrlDTO); - } - - }); - } - - private Set getUrlSet(Set patterns) { - Set urlSet = Sets.newHashSet(); - for (String url : patterns) { - for (String ignoreUrl : CommonConst.CommonCollection.IGNORE_URL_MAPPING) { - if (url.startsWith(ignoreUrl)) { - urlSet.add(url.substring(ignoreUrl.length() - 1)); - } else { - urlSet.add(url); - } - } - } - return urlSet; - } - - public List getPrivilegeList() { - return this.privilegeUrlDTOList; - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/service/PrivilegeService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/service/PrivilegeService.java deleted file mode 100644 index c66a919e..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/service/PrivilegeService.java +++ /dev/null @@ -1,285 +0,0 @@ -package net.lab1024.smartadmin.module.system.privilege.service; - -import com.google.common.collect.Lists; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.common.domain.ValidateList; -import net.lab1024.smartadmin.module.system.privilege.constant.PrivilegeResponseCodeConst; -import net.lab1024.smartadmin.module.system.privilege.constant.PrivilegeTypeEnum; -import net.lab1024.smartadmin.module.system.privilege.dao.PrivilegeDao; -import net.lab1024.smartadmin.module.system.privilege.domain.dto.*; -import net.lab1024.smartadmin.module.system.privilege.domain.entity.PrivilegeEntity; -import net.lab1024.smartadmin.module.system.role.roleprivilege.RolePrivilegeDao; -import org.apache.commons.collections.CollectionUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.*; -import java.util.stream.Collectors; - -/** - * [ 后台员工权限 ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 - */ -@Service -public class PrivilegeService { - - @Autowired - private PrivilegeRequestUrlService privilegeRequestUrlService; - - @Autowired - private PrivilegeDao privilegeDao; - - @Autowired - private RolePrivilegeDao rolePrivilegeDao; - - /** - * 获取系统所有请求路径 - * - * @return - */ - public ResponseDTO> getPrivilegeUrlDTOList() { - List privilegeUrlList = privilegeRequestUrlService.getPrivilegeList(); - return ResponseDTO.succData(privilegeUrlList); - } - - /** - * 批量保存权限菜单项 - * - * @param menuList - * @return - */ - @Transactional(rollbackFor = Throwable.class) - public ResponseDTO menuBatchSave(List menuList) { - if (CollectionUtils.isEmpty(menuList)) { - return ResponseDTO.succ(); - } - //使用前端发送权限的排序 - for (int i = 0; i < menuList.size(); i++) { - menuList.get(i).setSort(i); - } - - List privilegeList = privilegeDao.selectByExcludeType(PrivilegeTypeEnum.POINTS.getValue()); - //若数据库无数据 直接全部保存 - if (CollectionUtils.isEmpty(privilegeList)) { - List menuSaveEntity = this.buildPrivilegeMenuEntity(menuList); - privilegeDao.batchInsert(menuSaveEntity); - return ResponseDTO.succ(); - } - //处理需更新的菜单项 - Map storageMap = menuList.stream().collect(Collectors.toMap(PrivilegeMenuDTO::getMenuKey, e -> e)); - Set menuKeyList = storageMap.keySet(); - List updatePrivilegeList = privilegeList.stream().filter(e -> menuKeyList.contains(e.getKey())).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(updatePrivilegeList)) { - this.rebuildPrivilegeMenuEntity(storageMap, updatePrivilegeList); - privilegeDao.batchUpdate(updatePrivilegeList); - } - //处理需删除的菜单项 - List delKeyList = privilegeList.stream().filter(e -> !menuKeyList.contains(e.getKey())).map(PrivilegeEntity::getKey).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(delKeyList)) { - privilegeDao.delByKeyList(delKeyList); - //处理需删除的功能点 - privilegeDao.delByParentKeyList(delKeyList); - rolePrivilegeDao.deleteByPrivilegeKey(delKeyList); - } - - //处理需新增的菜单项 - List dbKeyList = privilegeList.stream().map(PrivilegeEntity::getKey).collect(Collectors.toList()); - List addPrivilegeList = menuList.stream().filter(e -> !dbKeyList.contains(e.getMenuKey())).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(addPrivilegeList)) { - List menuAddEntity = this.buildPrivilegeMenuEntity(addPrivilegeList); - privilegeDao.batchInsert(menuAddEntity); - } - return ResponseDTO.succ(); - } - - /** - * 构建权限菜单项类别 - * - * @param menuList - * @return - */ - private List buildPrivilegeMenuEntity(List menuList) { - List privilegeList = Lists.newArrayList(); - PrivilegeEntity privilegeEntity; - for (PrivilegeMenuDTO menuDTO : menuList) { - privilegeEntity = new PrivilegeEntity(); - privilegeEntity.setKey(menuDTO.getMenuKey()); - privilegeEntity.setName(menuDTO.getMenuName()); - privilegeEntity.setParentKey(menuDTO.getParentKey()); - privilegeEntity.setType(menuDTO.getType()); - privilegeEntity.setSort(menuDTO.getSort()); - privilegeEntity.setUrl(menuDTO.getUrl()); - privilegeList.add(privilegeEntity); - } - return privilegeList; - } - - /** - * 更新权限菜单项 - * - * @param menuMap - * @param menuEntityList - */ - private void rebuildPrivilegeMenuEntity(Map menuMap, List menuEntityList) { - for (PrivilegeEntity menuEntity : menuEntityList) { - PrivilegeMenuDTO menuDTO = menuMap.get(menuEntity.getKey()); - menuEntity.setName(menuDTO.getMenuName()); - menuEntity.setParentKey(menuDTO.getParentKey()); - menuEntity.setType(menuDTO.getType()); - menuEntity.setSort(menuDTO.getSort()); - } - - } - - /** - * 查询所有的权限菜单 - * - * @return - */ - public ResponseDTO> menuQueryAll() { - List privilegeEntityList = privilegeDao.selectByType(PrivilegeTypeEnum.MENU.getValue()); - if (CollectionUtils.isEmpty(privilegeEntityList)) { - return ResponseDTO.succData(Lists.newArrayList()); - } - - List voList = privilegeEntityList.stream().map(e -> { - PrivilegeMenuVO vo = new PrivilegeMenuVO(); - vo.setMenuKey(e.getKey()); - vo.setMenuName(e.getName()); - vo.setParentKey(e.getParentKey()); - vo.setSort(e.getSort()); - vo.setUrl(e.getUrl()); - return vo; - }).collect(Collectors.toList()); - - return ResponseDTO.succData(voList); - } - - - /** - * 保存更新功能点 - * - * @param privilegeFunctionDTO - * @return - */ - public ResponseDTO functionSaveOrUpdate(PrivilegeFunctionDTO privilegeFunctionDTO) { - String functionKey = privilegeFunctionDTO.getFunctionKey(); - PrivilegeEntity functionEntity = privilegeDao.selectByKey(functionKey); - if (functionEntity == null) { - return ResponseDTO.wrap(PrivilegeResponseCodeConst.POINT_NOT_EXIST); - } - functionEntity.setUrl(privilegeFunctionDTO.getUrl()); - functionEntity.setName(privilegeFunctionDTO.getFunctionName()); - functionEntity.setParentKey(privilegeFunctionDTO.getMenuKey()); - functionEntity.setSort(privilegeFunctionDTO.getSort()); - privilegeDao.updateById(functionEntity); - - return ResponseDTO.succ(); - } - - /** - * 查询功能点 - * - * @param menuKey - * @return - */ - public ResponseDTO> functionQuery(String menuKey) { - List functionPrivilegeList = privilegeDao.selectByParentKey(menuKey); - if (CollectionUtils.isEmpty(functionPrivilegeList)) { - return ResponseDTO.succData(Lists.newArrayList()); - } - List functionList = Lists.newArrayList(); - for (PrivilegeEntity functionEntity : functionPrivilegeList) { - PrivilegeFunctionVO functionDTO = new PrivilegeFunctionVO(); - functionDTO.setFunctionKey(functionEntity.getKey()); - functionDTO.setFunctionName(functionEntity.getName()); - functionDTO.setMenuKey(functionEntity.getParentKey()); - functionDTO.setUrl(functionEntity.getUrl()); - functionDTO.setSort(functionEntity.getSort()); - functionList.add(functionDTO); - } - return ResponseDTO.succData(functionList); - } - - @Transactional(rollbackFor = Exception.class) - public ResponseDTO batchSaveFunctionList(ValidateList functionList) { - String menuKey = functionList.get(0).getMenuKey(); - PrivilegeEntity privilegeEntity = privilegeDao.selectByKey(menuKey); - if (privilegeEntity == null) { - return ResponseDTO.wrap(PrivilegeResponseCodeConst.MENU_NOT_EXIST); - } - - List functionKeyList = functionList.stream().map(PrivilegeFunctionDTO::getFunctionKey).collect(Collectors.toList()); - - //数据库中存在的数据 - List existFunctionList = privilegeDao.selectByKeyList(functionKeyList); - //校验是否parent key重复 - boolean parentKeyExist = existFunctionList.stream().anyMatch(e -> !menuKey.equals(e.getParentKey())); - if(parentKeyExist){ - return ResponseDTO.wrap(PrivilegeResponseCodeConst.ROUTER_KEY_NO_REPEAT); - } - - existFunctionList = privilegeDao.selectByParentKey(menuKey); - Map privilegeEntityMap = existFunctionList.stream().collect(Collectors.toMap(PrivilegeEntity::getKey, e -> e)); - //如果没有,则保存全部 - if (existFunctionList.isEmpty()) { - List privilegeEntityList = functionList.stream().map(e -> function2Privilege(e)).collect(Collectors.toList()); - privilegeDao.batchInsert(privilegeEntityList); - return ResponseDTO.succ(); - } - - Set functionKeySet = functionList.stream().map(PrivilegeFunctionDTO::getFunctionKey).collect(Collectors.toSet()); - //删除的 - List deleteIdList = existFunctionList.stream().filter(e -> !functionKeySet.contains(e.getKey())).map(PrivilegeEntity::getId).collect(Collectors.toList()); - List deleteKeyList = existFunctionList.stream().filter(e -> !functionKeySet.contains(e.getKey())).map(PrivilegeEntity::getKey).collect(Collectors.toList()); - if (!deleteIdList.isEmpty()) { - privilegeDao.deleteBatchIds(deleteIdList); - rolePrivilegeDao.deleteByPrivilegeKey(deleteKeyList); - } - - //需要更新的 - ArrayList batchUpdateList = Lists.newArrayList(); - for (PrivilegeFunctionDTO privilegeFunctionDTO : functionList) { - PrivilegeEntity existPrivilege = privilegeEntityMap.get(privilegeFunctionDTO.getFunctionKey()); - if (existPrivilege != null) { - existPrivilege.setSort(privilegeFunctionDTO.getSort()); - existPrivilege.setName(privilegeFunctionDTO.getFunctionName()); - batchUpdateList.add(existPrivilege); - } - } - - if (!batchUpdateList.isEmpty()) { - privilegeDao.batchUpdate(batchUpdateList); - } - - //新增的 - List batchInsertList = functionList.stream() - .filter(e -> !privilegeEntityMap.containsKey(e.getFunctionKey())) - .map(e -> function2Privilege(e)) - .collect(Collectors.toList()); - - if (!batchInsertList.isEmpty()) { - privilegeDao.batchInsert(batchInsertList); - } - - return ResponseDTO.succ(); - } - - private PrivilegeEntity function2Privilege(PrivilegeFunctionDTO privilegeFunction) { - PrivilegeEntity privilegeEntity = new PrivilegeEntity(); - privilegeEntity.setKey(privilegeFunction.getFunctionKey()); - privilegeEntity.setName(privilegeFunction.getFunctionName()); - privilegeEntity.setParentKey(privilegeFunction.getMenuKey()); - privilegeEntity.setType(PrivilegeTypeEnum.POINTS.getValue()); - privilegeEntity.setSort(privilegeFunction.getSort()); - privilegeEntity.setUrl(""); - return privilegeEntity; - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/RoleController.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/RoleController.java deleted file mode 100644 index c95afff7..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/RoleController.java +++ /dev/null @@ -1,60 +0,0 @@ -package net.lab1024.smartadmin.module.system.role.basic; -import net.lab1024.smartadmin.common.anno.OperateLog; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.constant.SwaggerTagConst; -import net.lab1024.smartadmin.module.system.role.basic.domain.dto.RoleAddDTO; -import net.lab1024.smartadmin.module.system.role.basic.domain.dto.RoleUpdateDTO; -import net.lab1024.smartadmin.module.system.role.basic.domain.dto.RoleVO; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; -import java.util.List; - -/** - * 角色管理路由 - * - * @author listen - * @date 2017/12/28 10:10 - */ -@Api(tags = {SwaggerTagConst.Admin.MANAGER_ROLE}) -@OperateLog -@RestController -public class RoleController { - - @Autowired - private RoleService roleService; - - @ApiOperation(value = "添加角色", notes = "添加角色") - @PostMapping("/role/add") - public ResponseDTO addRole(@Valid @RequestBody RoleAddDTO roleAddDTO) { - return roleService.addRole(roleAddDTO); - } - - @ApiOperation(value = "删除角色", notes = "根据id删除角色") - @GetMapping("/role/delete/{roleId}") - public ResponseDTO deleteRole(@PathVariable("roleId") Long roleId) { - return roleService.deleteRole(roleId); - } - - @ApiOperation(value = "更新角色", notes = "更新角色") - @PostMapping("/role/update") - public ResponseDTO updateRole(@Valid @RequestBody RoleUpdateDTO roleUpdateDTO) { - return roleService.updateRole(roleUpdateDTO); - } - - @ApiOperation(value = "获取角色数据", notes = "根据id获取角色数据") - @GetMapping("/role/get/{roleId}") - public ResponseDTO getRole(@PathVariable("roleId") Long roleId) { - return roleService.getRoleById(roleId); - } - - @ApiOperation(value = "获取所有角色", notes = "获取所有角色数据") - @GetMapping("/role/getAll") - public ResponseDTO> getAllRole() { - return roleService.getAllRole(); - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/RoleDao.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/RoleDao.java deleted file mode 100644 index 91b83b4f..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/RoleDao.java +++ /dev/null @@ -1,26 +0,0 @@ -package net.lab1024.smartadmin.module.system.role.basic; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import net.lab1024.smartadmin.module.system.role.basic.domain.entity.RoleEntity; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; -import org.springframework.stereotype.Component; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/3/27 0027 下午 13:00 - * @since JDK1.8 - */ -@Mapper -@Component -public interface RoleDao extends BaseMapper { - - - RoleEntity getByRoleName(@Param("roleName") String name); - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/RoleResponseCodeConst.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/RoleResponseCodeConst.java deleted file mode 100644 index c1818465..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/RoleResponseCodeConst.java +++ /dev/null @@ -1,24 +0,0 @@ -package net.lab1024.smartadmin.module.system.role.basic; -import net.lab1024.smartadmin.common.constant.ResponseCodeConst; - -/** - * - * @author yandanyang - * 角色业务状态码 6001 - 6999 - */ -public class RoleResponseCodeConst extends ResponseCodeConst { - - /** - * 10501 角色名称已存在 - */ - public static final RoleResponseCodeConst ROLE_NAME_EXISTS = new RoleResponseCodeConst(6001, "角色名称已存在"); - - /** - * 10502 角色不存在 - */ - public static final RoleResponseCodeConst ROLE_NOT_EXISTS = new RoleResponseCodeConst(6002, "角色不存在"); - - public RoleResponseCodeConst(int code, String msg) { - super(code, msg); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/RoleService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/RoleService.java deleted file mode 100644 index cd0d6444..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/RoleService.java +++ /dev/null @@ -1,114 +0,0 @@ -package net.lab1024.smartadmin.module.system.role.basic; - -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.module.system.role.basic.domain.dto.RoleAddDTO; -import net.lab1024.smartadmin.module.system.role.basic.domain.dto.RoleUpdateDTO; -import net.lab1024.smartadmin.module.system.role.basic.domain.dto.RoleVO; -import net.lab1024.smartadmin.module.system.role.basic.domain.entity.RoleEntity; -import net.lab1024.smartadmin.module.system.role.roleemployee.RoleEmployeeDao; -import net.lab1024.smartadmin.module.system.role.roleprivilege.RolePrivilegeDao; -import net.lab1024.smartadmin.util.SmartBeanUtil; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -/** - * 角色管理业务 - * - * @author listen - * @date 2017/12/28 09:37 - */ -@Service -public class RoleService { - - @Autowired - private RoleDao roleDao; - - @Autowired - private RolePrivilegeDao rolePrivilegeDao; - - @Autowired - private RoleEmployeeDao roleEmployeeDao; - - /** - * 新增添加角色 - * - * @param roleAddDTO - * @return ResponseDTO - */ - public ResponseDTO addRole(RoleAddDTO roleAddDTO) { - RoleEntity employeeRoleEntity = roleDao.getByRoleName(roleAddDTO.getRoleName()); - if (null != employeeRoleEntity) { - return ResponseDTO.wrap(RoleResponseCodeConst.ROLE_NAME_EXISTS); - } - RoleEntity roleEntity = SmartBeanUtil.copy(roleAddDTO, RoleEntity.class); - roleDao.insert(roleEntity); - return ResponseDTO.succ(); - } - - /** - * 根据角色id 删除 - * - * @param roleId - * @return ResponseDTO - */ - @Transactional(rollbackFor = Exception.class) - public ResponseDTO deleteRole(Long roleId) { - RoleEntity roleEntity = roleDao.selectById(roleId); - if (null == roleEntity) { - return ResponseDTO.wrap(RoleResponseCodeConst.ROLE_NOT_EXISTS); - } - roleDao.deleteById(roleId); - rolePrivilegeDao.deleteByRoleId(roleId); - roleEmployeeDao.deleteByRoleId(roleId); - return ResponseDTO.succ(); - } - - /** - * 更新角色 - * - * @param roleUpdateDTO - * @return ResponseDTO - */ - @Transactional(rollbackFor = Exception.class) - public ResponseDTO updateRole(RoleUpdateDTO roleUpdateDTO) { - if (null == roleDao.selectById(roleUpdateDTO.getId())) { - return ResponseDTO.wrap(RoleResponseCodeConst.ROLE_NOT_EXISTS); - } - RoleEntity employeeRoleEntity = roleDao.getByRoleName(roleUpdateDTO.getRoleName()); - if (null != employeeRoleEntity && ! employeeRoleEntity.getId().equals(roleUpdateDTO.getId())) { - return ResponseDTO.wrap(RoleResponseCodeConst.ROLE_NAME_EXISTS); - } - RoleEntity roleEntity = SmartBeanUtil.copy(roleUpdateDTO, RoleEntity.class); - roleDao.updateById(roleEntity); - return ResponseDTO.succ(); - } - - /** - * 根据id获取角色数据 - * - * @param roleId - * @return ResponseDTO - */ - public ResponseDTO getRoleById(Long roleId) { - RoleEntity roleEntity = roleDao.selectById(roleId); - if (null == roleEntity) { - return ResponseDTO.wrap(RoleResponseCodeConst.ROLE_NOT_EXISTS); - } - RoleVO role = SmartBeanUtil.copy(roleEntity, RoleVO.class); - return ResponseDTO.succData(role); - } - - /** - * 获取所有角色列表 - * - * @return ResponseDTO - */ - public ResponseDTO> getAllRole() { - List roleEntityList = roleDao.selectList(null); - List roleList = SmartBeanUtil.copyList(roleEntityList, RoleVO.class); - return ResponseDTO.succData(roleList); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleQueryDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleQueryDTO.java deleted file mode 100644 index 08f2a94b..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleQueryDTO.java +++ /dev/null @@ -1,25 +0,0 @@ -package net.lab1024.smartadmin.module.system.role.basic.domain.dto; -import net.lab1024.smartadmin.common.domain.PageParamDTO; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * - * [ ] - * - * @version 1.0 - * @since JDK1.8 - * @author yandanyang - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - */ -@Data -public class RoleQueryDTO extends PageParamDTO { - - @ApiModelProperty("角色名称") - private String roleName; - - @ApiModelProperty("角色id") - private String roleId; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleSelectedVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleSelectedVO.java deleted file mode 100644 index 9a88d6d2..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleSelectedVO.java +++ /dev/null @@ -1,21 +0,0 @@ -package net.lab1024.smartadmin.module.system.role.basic.domain.dto; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/3/27 0027 下午 15:27 - * @since JDK1.8 - */ -@Data -public class RoleSelectedVO extends RoleVO { - - @ApiModelProperty("角色名称") - private Boolean selected; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleUpdateDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleUpdateDTO.java deleted file mode 100644 index adde4749..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleUpdateDTO.java +++ /dev/null @@ -1,24 +0,0 @@ -package net.lab1024.smartadmin.module.system.role.basic.domain.dto; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotNull; - -/** - * 角色更新修改DTO - * - * @author listen - * @date 2017/12/28 09:40 - */ -@Data -public class RoleUpdateDTO extends RoleAddDTO { - - /** - * 角色id - */ - @ApiModelProperty("角色id") - @NotNull(message = "角色id不能为空") - protected Long id; - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/entity/RoleEntity.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/entity/RoleEntity.java deleted file mode 100644 index ff9d650f..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/entity/RoleEntity.java +++ /dev/null @@ -1,25 +0,0 @@ -package net.lab1024.smartadmin.module.system.role.basic.domain.entity; - -import com.baomidou.mybatisplus.annotation.TableName; -import net.lab1024.smartadmin.common.domain.BaseEntity; -import lombok.Data; - -/** - * [ 角色 ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/3/27 0027 下午 13:01 - * @since JDK1.8 - */ -@Data -@TableName("t_role") -public class RoleEntity extends BaseEntity { - - - private String roleName; - - private String remark; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/RoleEmployeeController.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/RoleEmployeeController.java deleted file mode 100644 index 72c4e507..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/RoleEmployeeController.java +++ /dev/null @@ -1,73 +0,0 @@ -package net.lab1024.smartadmin.module.system.role.roleemployee; - -import net.lab1024.smartadmin.common.anno.OperateLog; -import net.lab1024.smartadmin.common.domain.PageResultDTO; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.constant.SwaggerTagConst; -import net.lab1024.smartadmin.module.system.employee.domain.vo.EmployeeVO; -import net.lab1024.smartadmin.module.system.role.basic.domain.dto.RoleBatchDTO; -import net.lab1024.smartadmin.module.system.role.basic.domain.dto.RoleQueryDTO; -import net.lab1024.smartadmin.module.system.role.basic.domain.dto.RoleSelectedVO; -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.*; - -import javax.validation.Valid; -import java.util.List; - -/** - * 用户角色管理路由 - * - * @author listen - * @date 2017/12/28 10:10 - */ -@Api(tags = {SwaggerTagConst.Admin.MANAGER_ROLE_USER}) -@OperateLog -@RestController -public class RoleEmployeeController { - - @Autowired - private RoleEmployeeService roleEmployeeService; - - @ApiOperation(value = "获取角色成员-员工列表", notes = "获取角色成员-员工列表(分页)") - @PostMapping("/role/listEmployee") - public ResponseDTO> listEmployeeByName(@Valid @RequestBody RoleQueryDTO queryDTO) { - return roleEmployeeService.listEmployeeByName(queryDTO); - } - - @ApiOperation(value = "根据角色id获取角色员工列表(无分页)", notes = "根据角色id获取角色成员-员工列表") - @GetMapping("/role/listAllEmployee/{roleId}") - public ResponseDTO> listAllEmployeeRoleId(@PathVariable Long roleId) { - return roleEmployeeService.getAllEmployeeByRoleId(roleId); - } - - @ApiOperation(value = "从角色成员列表中移除员工", notes = "从角色成员列表中移除员工") - @ApiImplicitParams({@ApiImplicitParam(name = "employeeId", value = "员工id", paramType = "query", required = true), @ApiImplicitParam(name = "roleId", value = "角色id", paramType = "query", - required = true)}) - @GetMapping("/role/removeEmployee") - public ResponseDTO removeEmployee(Long employeeId, Long roleId) { - return roleEmployeeService.removeEmployeeRole(employeeId, roleId); - } - - @ApiOperation(value = "从角色成员列表中批量移除员工", notes = "从角色成员列表中批量移除员工") - @PostMapping("/role/removeEmployeeList") - public ResponseDTO removeEmployeeList(@Valid @RequestBody RoleBatchDTO removeDTO) { - return roleEmployeeService.batchRemoveEmployeeRole(removeDTO); - } - - @ApiOperation(value = "角色成员列表中批量添加员工", notes = "角色成员列表中批量添加员工") - @PostMapping("/role/addEmployeeList") - public ResponseDTO addEmployeeList(@Valid @RequestBody RoleBatchDTO addDTO) { - return roleEmployeeService.batchAddEmployeeRole(addDTO); - } - - @ApiOperation(value = "通过员工id获取所有角色以及员工具有的角色", notes = "通过员工id获取所有角色以及员工具有的角色") - @GetMapping("/role/getRoles/{employeeId}") - @ApiImplicitParams({@ApiImplicitParam(name = "employeeId", value = "员工id", paramType = "path", required = true)}) - public ResponseDTO> getRoleByEmployeeId(@PathVariable Long employeeId) { - return roleEmployeeService.getRolesByEmployeeId(employeeId); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/RoleEmployeeService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/RoleEmployeeService.java deleted file mode 100644 index cf57ed4f..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/RoleEmployeeService.java +++ /dev/null @@ -1,132 +0,0 @@ -package net.lab1024.smartadmin.module.system.role.roleemployee; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import net.lab1024.smartadmin.common.domain.PageResultDTO; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.module.system.department.DepartmentDao; -import net.lab1024.smartadmin.module.system.department.domain.entity.DepartmentEntity; -import net.lab1024.smartadmin.module.system.employee.domain.dto.EmployeeDTO; -import net.lab1024.smartadmin.module.system.employee.domain.vo.EmployeeVO; -import net.lab1024.smartadmin.module.system.role.basic.RoleDao; -import net.lab1024.smartadmin.module.system.role.basic.RoleResponseCodeConst; -import net.lab1024.smartadmin.module.system.role.basic.domain.dto.RoleBatchDTO; -import net.lab1024.smartadmin.module.system.role.basic.domain.dto.RoleQueryDTO; -import net.lab1024.smartadmin.module.system.role.basic.domain.dto.RoleSelectedVO; -import net.lab1024.smartadmin.module.system.role.basic.domain.entity.RoleEntity; -import net.lab1024.smartadmin.module.system.role.roleemployee.domain.RoleEmployeeEntity; -import net.lab1024.smartadmin.util.SmartBeanUtil; -import net.lab1024.smartadmin.util.SmartPageUtil; -import com.google.common.collect.Lists; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -/** - * 角色管理业务 - * - * @author zzr - * @date 2019/4/3 - */ -@Service -public class RoleEmployeeService { - - @Autowired - private RoleEmployeeDao roleEmployeeDao; - - @Autowired - private RoleDao roleDao; - - @Autowired - private DepartmentDao departmentDao; - - /** - * 通过角色id,分页获取成员员工列表 - * - * @param queryDTO - * @return - */ - public ResponseDTO> listEmployeeByName(RoleQueryDTO queryDTO) { - Page page = SmartPageUtil.convert2QueryPage(queryDTO); - List employeeDTOS = roleEmployeeDao.selectEmployeeByNamePage(page, queryDTO); - employeeDTOS.stream().filter(e -> e.getDepartmentId() != null).forEach(employeeDTO -> { - DepartmentEntity departmentEntity = departmentDao.selectById(employeeDTO.getDepartmentId()); - employeeDTO.setDepartmentName(departmentEntity.getName()); - }); - PageResultDTO pageResultDTO = SmartPageUtil.convert2PageResult(page, employeeDTOS, EmployeeVO.class); - return ResponseDTO.succData(pageResultDTO); - } - - public ResponseDTO> getAllEmployeeByRoleId(Long roleId) { - List employeeDTOS = roleEmployeeDao.selectEmployeeByRoleId(roleId); - List list = SmartBeanUtil.copyList(employeeDTOS, EmployeeVO.class); - return ResponseDTO.succData(list); - } - - /** - * 移除员工角色 - * - * @param employeeId - * @param roleId - * @return ResponseDTO - */ - @Transactional(rollbackFor = Exception.class) - public ResponseDTO removeEmployeeRole(Long employeeId, Long roleId) { - if (null == employeeId || null == roleId) { - return ResponseDTO.wrap(RoleResponseCodeConst.ERROR_PARAM); - } - roleEmployeeDao.deleteByEmployeeIdRoleId(employeeId, roleId); - return ResponseDTO.succ(); - } - - /** - * 批量删除角色的成员员工 - * - * @param removeDTO - * @return ResponseDTO - */ - @Transactional(rollbackFor = Exception.class) - public ResponseDTO batchRemoveEmployeeRole(RoleBatchDTO removeDTO) { - List employeeIdList = removeDTO.getEmployeeIds(); - roleEmployeeDao.batchDeleteEmployeeRole(removeDTO.getRoleId(), employeeIdList); - return ResponseDTO.succ(); - } - - /** - * 批量添加角色的成员员工 - * - * @param addDTO - * @return ResponseDTO - */ - @Transactional(rollbackFor = Exception.class) - public ResponseDTO batchAddEmployeeRole(RoleBatchDTO addDTO) { - Long roleId = addDTO.getRoleId(); - List employeeIdList = addDTO.getEmployeeIds(); - roleEmployeeDao.deleteByRoleId(roleId); - List roleRelationEntities = Lists.newArrayList(); - RoleEmployeeEntity employeeRoleRelationEntity; - for (Long employeeId : employeeIdList) { - employeeRoleRelationEntity = new RoleEmployeeEntity(); - employeeRoleRelationEntity.setRoleId(roleId); - employeeRoleRelationEntity.setEmployeeId(employeeId); - roleRelationEntities.add(employeeRoleRelationEntity); - } - roleEmployeeDao.batchInsert(roleRelationEntities); - return ResponseDTO.succ(); - } - - /** - * 通过员工id获取员工角色 - * - * @param employeeId - * @return - */ - public ResponseDTO> getRolesByEmployeeId(Long employeeId) { - List roleIds = roleEmployeeDao.selectRoleIdByEmployeeId(employeeId); - List roleList = roleDao.selectList(null); - List result = SmartBeanUtil.copyList(roleList, RoleSelectedVO.class); - result.stream().forEach(item -> item.setSelected(roleIds.contains(item.getId()))); - return ResponseDTO.succData(result); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/domain/RoleEmployeeDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/domain/RoleEmployeeDTO.java deleted file mode 100644 index 5dc70111..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/domain/RoleEmployeeDTO.java +++ /dev/null @@ -1,21 +0,0 @@ -package net.lab1024.smartadmin.module.system.role.roleemployee.domain; - -import lombok.Data; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/3/27 0027 下午 15:27 - * @since JDK1.8 - */ -@Data -public class RoleEmployeeDTO { - - private Long roleId; - - private Long employeeId; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/domain/RoleEmployeeEntity.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/domain/RoleEmployeeEntity.java deleted file mode 100644 index 58d16994..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/domain/RoleEmployeeEntity.java +++ /dev/null @@ -1,24 +0,0 @@ -package net.lab1024.smartadmin.module.system.role.roleemployee.domain; - -import com.baomidou.mybatisplus.annotation.TableName; -import net.lab1024.smartadmin.common.domain.BaseEntity; -import lombok.Data; - -/** - * [ 角色 员工关系] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/3/27 0027 下午 13:01 - * @since JDK1.8 - */ -@Data -@TableName("t_role_employee") -public class RoleEmployeeEntity extends BaseEntity { - - private Long roleId; - - private Long employeeId; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/RolePrivilegeController.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/RolePrivilegeController.java deleted file mode 100644 index 3cb021ef..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/RolePrivilegeController.java +++ /dev/null @@ -1,45 +0,0 @@ -package net.lab1024.smartadmin.module.system.role.roleprivilege; - -import net.lab1024.smartadmin.common.anno.OperateLog; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.constant.SwaggerTagConst; -import net.lab1024.smartadmin.module.system.role.roleprivilege.domain.dto.RolePrivilegeDTO; -import net.lab1024.smartadmin.module.system.role.roleprivilege.domain.dto.RolePrivilegeTreeVO; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; - -/** - * [ 与员工权限相关:角色权限关系、权限列表 ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 - */ -@OperateLog -@RestController -@Api(tags = {SwaggerTagConst.Admin.MANAGER_ROLE_PRIVILEGE}) -public class RolePrivilegeController { - - @Autowired - private RolePrivilegeService rolePrivilegeService; - - @ApiOperation(value = "更新角色权限", notes = "更新角色权限") - @PostMapping("/privilege/updateRolePrivilege") - public ResponseDTO updateRolePrivilege(@Valid @RequestBody RolePrivilegeDTO updateDTO) { - return rolePrivilegeService.updateRolePrivilege(updateDTO); - } - - @ApiOperation(value = "获取角色可选的功能权限", notes = "获取角色可选的功能权限") - @GetMapping("/privilege/listPrivilegeByRoleId/{roleId}") - public ResponseDTO listPrivilegeByRoleId(@PathVariable("roleId") Long roleId) { - return rolePrivilegeService.listPrivilegeByRoleId(roleId); - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/RolePrivilegeDao.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/RolePrivilegeDao.java deleted file mode 100644 index ebf4284b..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/RolePrivilegeDao.java +++ /dev/null @@ -1,58 +0,0 @@ -package net.lab1024.smartadmin.module.system.role.roleprivilege; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import net.lab1024.smartadmin.module.system.privilege.domain.entity.PrivilegeEntity; -import net.lab1024.smartadmin.module.system.role.roleprivilege.domain.entity.RolePrivilegeEntity; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; -import org.springframework.stereotype.Component; - -import java.util.List; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/3/28 0028 下午 12:23 - * @since JDK1.8 - */ -@Mapper -@Component -public interface RolePrivilegeDao extends BaseMapper { - - /** - * 根据角色id删除 - * @param roleId - */ - void deleteByRoleId(@Param("roleId")Long roleId); - - /** - * 删除权限所关联的角色信息 - * @param privilegeKeyList - */ - void deleteByPrivilegeKey(@Param("privilegeKeyList")List privilegeKeyList); - - - /** - * 批量添加 - * @param rolePrivilegeList - */ - void batchInsert(List rolePrivilegeList); - - /** - * 查询某批角色的权限 - * @param roleIds - * @return - */ - List listByRoleIds(@Param("roleIds")List roleIds,@Param("normalStatus")Integer normalStatus); - - /** - * 查询某个角色的权限 - * @param roleId - * @return - */ - List listByRoleId(@Param("roleId")Long roleId); -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/RolePrivilegeService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/RolePrivilegeService.java deleted file mode 100644 index dd39f36f..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/RolePrivilegeService.java +++ /dev/null @@ -1,129 +0,0 @@ -package net.lab1024.smartadmin.module.system.role.roleprivilege; - -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.module.system.privilege.dao.PrivilegeDao; -import net.lab1024.smartadmin.module.system.privilege.domain.entity.PrivilegeEntity; -import net.lab1024.smartadmin.module.system.privilege.service.PrivilegeEmployeeService; -import net.lab1024.smartadmin.module.system.role.basic.RoleDao; -import net.lab1024.smartadmin.module.system.role.basic.RoleResponseCodeConst; -import net.lab1024.smartadmin.module.system.role.basic.domain.entity.RoleEntity; -import net.lab1024.smartadmin.module.system.role.roleprivilege.domain.dto.RolePrivilegeDTO; -import net.lab1024.smartadmin.module.system.role.roleprivilege.domain.dto.RolePrivilegeSimpleDTO; -import net.lab1024.smartadmin.module.system.role.roleprivilege.domain.dto.RolePrivilegeTreeVO; -import net.lab1024.smartadmin.module.system.role.roleprivilege.domain.entity.RolePrivilegeEntity; -import net.lab1024.smartadmin.util.SmartBeanUtil; -import com.google.common.collect.Lists; -import org.apache.commons.collections.CollectionUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -/** - * [ 后台员工权限 ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 - */ -@Service -public class RolePrivilegeService { - - @Autowired - private PrivilegeDao privilegeDao; - - @Autowired - private RoleDao roleDao; - - @Autowired - private RolePrivilegeDao rolePrivilegeDao; - - @Autowired - private PrivilegeEmployeeService privilegeEmployeeService; - - /** - * 更新角色权限 - * - * @param updateDTO - * @return ResponseDTO - */ - public ResponseDTO updateRolePrivilege(RolePrivilegeDTO updateDTO) { - Long roleId = updateDTO.getRoleId(); - RoleEntity roleEntity = roleDao.selectById(roleId); - if (null == roleEntity) { - return ResponseDTO.wrap(RoleResponseCodeConst.ROLE_NOT_EXISTS); - } - rolePrivilegeDao.deleteByRoleId(roleId); - List rolePrivilegeList = Lists.newArrayList(); - RolePrivilegeEntity rolePrivilegeEntity; - for (String privilegeKey : updateDTO.getPrivilegeKeyList()) { - rolePrivilegeEntity = new RolePrivilegeEntity(); - rolePrivilegeEntity.setRoleId(roleId); - rolePrivilegeEntity.setPrivilegeKey(privilegeKey); - rolePrivilegeList.add(rolePrivilegeEntity); - } - rolePrivilegeDao.batchInsert(rolePrivilegeList); - privilegeEmployeeService.updateOnlineEmployeePrivilegeByRoleId(roleId); - return ResponseDTO.succ(); - } - - public ResponseDTO listPrivilegeByRoleId(Long roleId) { - RolePrivilegeTreeVO rolePrivilegeTreeDTO = new RolePrivilegeTreeVO(); - rolePrivilegeTreeDTO.setRoleId(roleId); - - List privilegeDTOList = privilegeDao.selectAll(); - if (CollectionUtils.isEmpty(privilegeDTOList)) { - rolePrivilegeTreeDTO.setPrivilege(Lists.newArrayList()); - rolePrivilegeTreeDTO.setSelectedKey(Lists.newArrayList()); - return ResponseDTO.succData(rolePrivilegeTreeDTO); - } - //构造权限树 - List privilegeList = this.buildPrivilegeTree(privilegeDTOList); - //设置选中状态 - List rolePrivilegeEntityList = rolePrivilegeDao.listByRoleId(roleId); - List privilegeKeyList = rolePrivilegeEntityList.stream().map(e -> e.getKey()).collect(Collectors.toList()); - rolePrivilegeTreeDTO.setPrivilege(privilegeList); - rolePrivilegeTreeDTO.setSelectedKey(privilegeKeyList); - return ResponseDTO.succData(rolePrivilegeTreeDTO); - } - - private List buildPrivilegeTree(List privilegeEntityList) { - List privilegeTree = Lists.newArrayList(); - List rootPrivilege = privilegeEntityList.stream().filter(e -> e.getParentKey() == null).collect(Collectors.toList()); - rootPrivilege.sort(Comparator.comparing(PrivilegeEntity::getSort)); - if (CollectionUtils.isEmpty(rootPrivilege)) { - return privilegeTree; - } - privilegeTree = SmartBeanUtil.copyList(rootPrivilege, RolePrivilegeSimpleDTO.class); - privilegeTree.forEach(e -> e.setChildren(Lists.newArrayList())); - this.buildChildPrivilegeList(privilegeEntityList, privilegeTree); - return privilegeTree; - } - - private void buildChildPrivilegeList(List privilegeEntityList, List parentMenuList) { - List parentKeyList = parentMenuList.stream().map(RolePrivilegeSimpleDTO :: getKey).collect(Collectors.toList()); - List childEntityList = privilegeEntityList.stream().filter(e -> parentKeyList.contains(e.getParentKey())).collect(Collectors.toList()); - if (CollectionUtils.isEmpty(childEntityList)) { - return; - } - Map> listMap = childEntityList.stream().collect(Collectors.groupingBy(PrivilegeEntity :: getParentKey)); - for (RolePrivilegeSimpleDTO rolePrivilegeSimpleDTO : parentMenuList) { - String key = rolePrivilegeSimpleDTO.getKey(); - List privilegeEntities = listMap.get(key); - if (CollectionUtils.isEmpty(privilegeEntities)) { - continue; - } - privilegeEntities.sort(Comparator.comparing(PrivilegeEntity::getSort)); - List privilegeList = SmartBeanUtil.copyList(privilegeEntities, RolePrivilegeSimpleDTO.class); - privilegeList.forEach(e -> e.setChildren(Lists.newArrayList())); - rolePrivilegeSimpleDTO.setChildren(privilegeList); - this.buildChildPrivilegeList(privilegeEntityList, privilegeList); - } - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/domain/dto/RolePrivilegeDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/domain/dto/RolePrivilegeDTO.java deleted file mode 100644 index 261fbfd0..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/domain/dto/RolePrivilegeDTO.java +++ /dev/null @@ -1,35 +0,0 @@ -package net.lab1024.smartadmin.module.system.role.roleprivilege.domain.dto; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotNull; -import java.util.List; -/** - * - * [ ] - * - * @version 1.0 - * @since JDK1.8 - * @author yandanyang - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - */ -@Data -public class RolePrivilegeDTO { - - /** - * 角色id - */ - @ApiModelProperty("角色id") - @NotNull(message = "角色id不能为空") - private Long roleId; - - /** - * 功能权限id 集合 - */ - @ApiModelProperty("功能权限Key集合") - @NotNull(message = "功能权限集合不能为空") - private List privilegeKeyList; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/domain/dto/RolePrivilegeSimpleDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/domain/dto/RolePrivilegeSimpleDTO.java deleted file mode 100644 index 754b60f1..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/domain/dto/RolePrivilegeSimpleDTO.java +++ /dev/null @@ -1,43 +0,0 @@ -package net.lab1024.smartadmin.module.system.role.roleprivilege.domain.dto; - -import net.lab1024.smartadmin.common.anno.ApiModelPropertyEnum; -import net.lab1024.smartadmin.module.system.privilege.constant.PrivilegeTypeEnum; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -/** - * 角色功能权限 - * - * @author listen - * @date 2018/01/03 08:48 - */ -@Data -public class RolePrivilegeSimpleDTO { - - @ApiModelProperty("父级Key") - private String parentKey; - /** - * 功能名称 - */ - @ApiModelProperty("名称") - private String name; - - @ApiModelPropertyEnum(enumDesc = "类型",value = PrivilegeTypeEnum.class) - private Integer type; - - @ApiModelProperty("key") - private String key; - - @ApiModelProperty("url") - private String url; - - @ApiModelProperty("排序") - private Integer sort; - - @ApiModelProperty("子级列表") - private List children; - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/domain/dto/RolePrivilegeTreeVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/domain/dto/RolePrivilegeTreeVO.java deleted file mode 100644 index 2d441f85..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/domain/dto/RolePrivilegeTreeVO.java +++ /dev/null @@ -1,19 +0,0 @@ -package net.lab1024.smartadmin.module.system.role.roleprivilege.domain.dto; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -@Data -public class RolePrivilegeTreeVO { - - @ApiModelProperty("角色ID") - private Long roleId; - - @ApiModelProperty("权限列表") - private List privilege; - - @ApiModelProperty("选中的权限") - private List selectedKey; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/domain/entity/RolePrivilegeEntity.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/domain/entity/RolePrivilegeEntity.java deleted file mode 100644 index b17c80cc..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/domain/entity/RolePrivilegeEntity.java +++ /dev/null @@ -1,32 +0,0 @@ -package net.lab1024.smartadmin.module.system.role.roleprivilege.domain.entity; -import com.baomidou.mybatisplus.annotation.TableName; -import net.lab1024.smartadmin.common.domain.BaseEntity; -import lombok.Data; - -/** - * - * [ 角色 权限关系 ] - * - * @version 1.0 - * @since JDK1.8 - * @author yandanyang - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - */ -@Data -@TableName("t_role_privilege") -public class RolePrivilegeEntity extends BaseEntity { - - /** - * 角色 id - */ - private Long roleId; - - /** - * 功能权限 id - */ - private String privilegeKey; - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/SystemConfigController.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/SystemConfigController.java deleted file mode 100644 index efe62f4c..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/SystemConfigController.java +++ /dev/null @@ -1,70 +0,0 @@ -package net.lab1024.smartadmin.module.system.systemconfig; - -import net.lab1024.smartadmin.common.anno.OperateLog; -import net.lab1024.smartadmin.common.domain.PageResultDTO; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.constant.SwaggerTagConst; -import net.lab1024.smartadmin.module.system.systemconfig.domain.dto.SystemConfigAddDTO; -import net.lab1024.smartadmin.module.system.systemconfig.domain.dto.SystemConfigQueryDTO; -import net.lab1024.smartadmin.module.system.systemconfig.domain.dto.SystemConfigUpdateDTO; -import net.lab1024.smartadmin.module.system.systemconfig.domain.dto.SystemConfigVO; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; - -import javax.validation.Valid; -import java.util.List; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 - */ -@Api(tags = {SwaggerTagConst.Admin.MANAGER_SYSTEM_CONFIG}) -@OperateLog -@RestController -public class SystemConfigController { - - @Autowired - private SystemConfigService systemConfigService; - - @ApiOperation(value = "分页查询所有系统配置", notes = "分页查询所有系统配置") - @PostMapping("systemConfig/getListPage") - public ResponseDTO> getSystemConfigPage(@RequestBody @Valid SystemConfigQueryDTO queryDTO) { - return systemConfigService.getSystemConfigPage(queryDTO); - } - - @ApiOperation(value = "添加配置参数", notes = "添加配置参数") - @PostMapping("systemConfig/add") - public ResponseDTO addSystemConfig(@RequestBody @Valid SystemConfigAddDTO configAddDTO) { - return systemConfigService.addSystemConfig(configAddDTO); - } - - @ApiOperation(value = "修改配置参数", notes = "修改配置参数") - @PostMapping("systemConfig/update") - public ResponseDTO updateSystemConfig(@RequestBody @Valid SystemConfigUpdateDTO updateDTO) { - return systemConfigService.updateSystemConfig(updateDTO); - } - - @ApiOperation(value = "根据分组查询所有系统配置", notes = "根据分组查询所有系统配置") - @GetMapping("systemConfig/getListByGroup") - public ResponseDTO> getListByGroup(String group) { - return systemConfigService.getListByGroup(group); - } - - @ApiOperation(value = "通过key获取对应的信息", notes = "通过key获取对应的信息") - @GetMapping("systemConfig/selectByKey") - public ResponseDTO selectByKey(String configKey) { - return systemConfigService.selectByKey(configKey); - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/SystemConfigDao.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/SystemConfigDao.java deleted file mode 100644 index e8114f11..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/SystemConfigDao.java +++ /dev/null @@ -1,62 +0,0 @@ -package net.lab1024.smartadmin.module.system.systemconfig; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import net.lab1024.smartadmin.module.system.systemconfig.domain.dto.SystemConfigQueryDTO; -import net.lab1024.smartadmin.module.system.systemconfig.domain.entity.SystemConfigEntity; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; -import org.springframework.stereotype.Component; - -import java.util.List; - -/** - * 系统参数配置 t_system_config Dao层 - * - * @author GHQ - * @date 2017-12-23 14:25 - */ -@Component -@Mapper -public interface SystemConfigDao extends BaseMapper { - - /** - * 查询所有系统配置(分页) - * - * @param page - * @return - */ - List selectSystemSettingList(Page page, @Param("queryDTO") SystemConfigQueryDTO queryDTO); - - /** - * 根据key查询获取数据 - * - * @param key - * @return - */ - SystemConfigEntity getByKey(@Param("key") String key); - - /** - * 根据key查询获取数据 排除掉某個id的数据 - * @param key - * @param excludeId - * @return - */ - SystemConfigEntity getByKeyExcludeId(@Param("key") String key,@Param("excludeId") Long excludeId); - /** - * 查询所有系统配置 - * - * @return - */ - List selectAll(); - - /** - * 根据分组查询所有系统配置 - * @param group - * @return - */ - List getListByGroup(String group); - - - SystemConfigEntity selectByKeyAndGroup(@Param("configKey") String configKey, @Param("group") String group); -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/SystemConfigService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/SystemConfigService.java deleted file mode 100644 index 5dd00d65..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/SystemConfigService.java +++ /dev/null @@ -1,262 +0,0 @@ -package net.lab1024.smartadmin.module.system.systemconfig; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import net.lab1024.smartadmin.common.constant.JudgeEnum; -import net.lab1024.smartadmin.common.constant.ResponseCodeConst; -import net.lab1024.smartadmin.common.domain.PageResultDTO; -import net.lab1024.smartadmin.common.domain.ResponseDTO; -import net.lab1024.smartadmin.common.reload.annotation.SmartReload; -import net.lab1024.smartadmin.constant.SmartReloadTagConst; -import net.lab1024.smartadmin.module.support.smartreload.SmartReloadService; -import net.lab1024.smartadmin.module.system.systemconfig.constant.SystemConfigDataType; -import net.lab1024.smartadmin.module.system.systemconfig.constant.SystemConfigEnum; -import net.lab1024.smartadmin.module.system.systemconfig.constant.SystemConfigResponseCodeConst; -import net.lab1024.smartadmin.module.system.systemconfig.domain.dto.*; -import net.lab1024.smartadmin.module.system.systemconfig.domain.entity.SystemConfigEntity; -import net.lab1024.smartadmin.util.SmartBeanUtil; -import net.lab1024.smartadmin.util.SmartPageUtil; -import com.google.common.collect.Lists; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import javax.annotation.PostConstruct; -import java.util.List; -import java.util.concurrent.ConcurrentHashMap; -import java.util.regex.Pattern; - -/** - * 系统配置业务类 - * - * @author GHQ - * @date 2017-12-23 15:09 - */ -@Slf4j -@Service -public class SystemConfigService { - - /** - * 系统配置缓存 - */ - private ConcurrentHashMap systemConfigMap = new ConcurrentHashMap<>(); - - @Autowired - private SystemConfigDao systemConfigDao; - - @Autowired - private SmartReloadService smartReloadService; - - /** - * 初始化系统设置缓存 - */ - @PostConstruct - private void initSystemConfigCache() { - List entityList = systemConfigDao.selectAll(); - if (CollectionUtils.isEmpty(entityList)) { - return; - } - - systemConfigMap.clear(); - entityList.forEach(entity -> this.systemConfigMap.put(entity.getConfigKey().toLowerCase(), entity)); - log.info("系统设置缓存初始化完毕:{}", systemConfigMap.size()); - - smartReloadService.register(this); - } - - @SmartReload(SmartReloadTagConst.SYSTEM_CONFIG) - public boolean reload(String args) { - this.initSystemConfigCache(); - log.warn("<> <<{}>> , args {} reload success ", SmartReloadTagConst.SYSTEM_CONFIG, args); - return true; - } - - /** - * 分页获取系统配置 - * - * @param queryDTO - * @return - */ - public ResponseDTO> getSystemConfigPage(SystemConfigQueryDTO queryDTO) { - Page page = SmartPageUtil.convert2QueryPage(queryDTO); - if(queryDTO.getKey() != null){ - queryDTO.setKey(queryDTO.getKey().toLowerCase()); - } - List entityList = systemConfigDao.selectSystemSettingList(page, queryDTO); - PageResultDTO pageResultDTO = SmartPageUtil.convert2PageResult(page, entityList, SystemConfigVO.class); - return ResponseDTO.succData(pageResultDTO); - } - - /** - * 根据参数key获得一条数据(数据库) - * - * @param configKey - * @return - */ - public ResponseDTO selectByKey(String configKey) { - if(configKey != null){ - configKey = configKey.toLowerCase(); - } - SystemConfigEntity entity = systemConfigDao.getByKey(configKey); - if (entity == null) { - return ResponseDTO.wrap(SystemConfigResponseCodeConst.NOT_EXIST); - } - SystemConfigVO configDTO = SmartBeanUtil.copy(entity, SystemConfigVO.class); - return ResponseDTO.succData(configDTO); - } - - /** - * 根据参数key获得一条数据 并转换为 对象 - * - * @param configKey - * @param clazz - * @param - * @return - */ - public T selectByKey2Obj(String configKey, Class clazz) { - if(configKey != null){ - configKey = configKey.toLowerCase(); - } - SystemConfigEntity entity = systemConfigDao.getByKey(configKey); - if (entity == null) { - return null; - } - SystemConfigDTO configDTO = SmartBeanUtil.copy(entity, SystemConfigDTO.class); - String configValue = configDTO.getConfigValue(); - if (StringUtils.isEmpty(configValue)) { - return null; - } - T obj = JSON.parseObject(configValue, clazz); - return obj; - } - - public SystemConfigDTO getCacheByKey(SystemConfigEnum.Key key) { - SystemConfigEntity entity = this.systemConfigMap.get(key.name().toLowerCase()); - if (entity == null) { - return null; - } - return SmartBeanUtil.copy(entity, SystemConfigDTO.class); - } - - /** - * 添加系统配置 - * - * @param configAddDTO - * @return - */ - public ResponseDTO addSystemConfig(SystemConfigAddDTO configAddDTO) { - configAddDTO.setConfigKey(configAddDTO.getConfigKey().toLowerCase()); - SystemConfigEntity entity = systemConfigDao.getByKey(configAddDTO.getConfigKey()); - if (entity != null) { - return ResponseDTO.wrap(SystemConfigResponseCodeConst.ALREADY_EXIST); - } - ResponseDTO valueValid = this.configValueValid(configAddDTO.getConfigKey(),configAddDTO.getConfigValue()); - if(!valueValid.isSuccess()){ - return valueValid; - } - configAddDTO.setConfigKey(configAddDTO.getConfigKey().toLowerCase()); - SystemConfigEntity addEntity = SmartBeanUtil.copy(configAddDTO, SystemConfigEntity.class); - addEntity.setIsUsing(JudgeEnum.YES.getValue()); - systemConfigDao.insert(addEntity); - //刷新缓存 - this.initSystemConfigCache(); - return ResponseDTO.succ(); - } - - /** - * 更新系统配置 - * - * @param updateDTO - * @return - */ - public ResponseDTO updateSystemConfig(SystemConfigUpdateDTO updateDTO) { - updateDTO.setConfigKey(updateDTO.getConfigKey().toLowerCase()); - SystemConfigEntity entity = systemConfigDao.selectById(updateDTO.getId()); - //系统配置不存在 - if (entity == null) { - return ResponseDTO.wrap(SystemConfigResponseCodeConst.NOT_EXIST); - } - SystemConfigEntity alreadyEntity = systemConfigDao.getByKeyExcludeId(updateDTO.getConfigKey().toLowerCase(), updateDTO.getId()); - if (alreadyEntity != null) { - return ResponseDTO.wrap(SystemConfigResponseCodeConst.ALREADY_EXIST); - } - ResponseDTO valueValid = this.configValueValid(updateDTO.getConfigKey(),updateDTO.getConfigValue()); - if(!valueValid.isSuccess()){ - return valueValid; - } - entity = SmartBeanUtil.copy(updateDTO, SystemConfigEntity.class); - updateDTO.setConfigKey(updateDTO.getConfigKey().toLowerCase()); - systemConfigDao.updateById(entity); - - //刷新缓存 - this.initSystemConfigCache(); - return ResponseDTO.succ(); - } - - - private ResponseDTO configValueValid(String configKey , String configValue){ - SystemConfigEnum.Key configKeyEnum = SystemConfigEnum.Key.selectByKey(configKey); - if(configKeyEnum == null){ - return ResponseDTO.succ(); - } - SystemConfigDataType dataType = configKeyEnum.getDataType(); - if(dataType == null){ - return ResponseDTO.succ(); - } - if(dataType.name().equals(SystemConfigDataType.TEXT.name())){ - return ResponseDTO.succ(); - } - if(dataType.name().equals(SystemConfigDataType.JSON.name())){ - try { - JSONObject jsonStr = JSONObject.parseObject(configValue); - return ResponseDTO.succ(); - } catch (Exception e) { - return ResponseDTO.wrap(ResponseCodeConst.ERROR_PARAM,"数据格式不是JSON,请修改后提交。"); - } - } - if(StringUtils.isNotEmpty(dataType.getValid())){ - Boolean valid = Pattern.matches(dataType.getValid(), configValue); - if(valid){ - return ResponseDTO.succ(); - } - return ResponseDTO.wrap(ResponseCodeConst.ERROR_PARAM,"数据格式不是"+dataType.name().toLowerCase()+",请修改后提交。"); - } - - return ResponseDTO.succ(); - } - - /** - * 根据分组名称 获取获取系统设置 - * - * @param group - * @return - */ - public ResponseDTO> getListByGroup(String group) { - - List entityList = systemConfigDao.getListByGroup(group); - if (CollectionUtils.isEmpty(entityList)) { - return ResponseDTO.succData(Lists.newArrayList()); - } - List systemConfigList = SmartBeanUtil.copyList(entityList, SystemConfigVO.class); - return ResponseDTO.succData(systemConfigList); - } - - /** - * 根据分组名称 获取获取系统设置 - * - * @param group - * @return - */ - public List getListByGroup(SystemConfigEnum.Group group) { - List entityList = systemConfigDao.getListByGroup(group.name()); - if (CollectionUtils.isEmpty(entityList)) { - return Lists.newArrayList(); - } - List systemConfigList = SmartBeanUtil.copyList(entityList, SystemConfigDTO.class); - return systemConfigList; - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/constant/SystemConfigDataType.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/constant/SystemConfigDataType.java deleted file mode 100644 index 900256d8..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/constant/SystemConfigDataType.java +++ /dev/null @@ -1,67 +0,0 @@ -package net.lab1024.smartadmin.module.system.systemconfig.constant; - -import net.lab1024.smartadmin.util.SmartVerificationUtil; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/9/4 0004 上午 11:43 - * @since JDK1.8 - */ -public enum SystemConfigDataType { - /** - * 整数 - */ - INTEGER(SmartVerificationUtil.INTEGER), - /** - * 文本 - */ - TEXT(null), - /** - * url地址 - */ - URL(SmartVerificationUtil.URL), - /** - * 邮箱 - */ - EMAIL(SmartVerificationUtil.EMAIL), - /** - * JSON 字符串 - */ - JSON(null), - /** - * 2019-08 - */ - YEAR_MONTH(SmartVerificationUtil.YEAR_MONTH), - /** - * 2019-08-01 - */ - DATE(SmartVerificationUtil.DATE), - /** - * 2019-08-01 10:23 - */ - DATE_TIME(SmartVerificationUtil.DATE_TIME), - /** - * 10:23-10:56 - */ - TIME_SECTION(SmartVerificationUtil.TIME_SECTION), - /** - * 10:23 - */ - TIME(SmartVerificationUtil.TIME); - - private String valid; - - - SystemConfigDataType(String valid){ - this.valid = valid; - } - - public String getValid() { - return valid; - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/constant/SystemConfigEnum.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/constant/SystemConfigEnum.java deleted file mode 100644 index 9791d772..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/constant/SystemConfigEnum.java +++ /dev/null @@ -1,68 +0,0 @@ -package net.lab1024.smartadmin.module.system.systemconfig.constant; - - -import java.util.Arrays; -import java.util.Optional; - -/** - * [ 系统配置常量类 ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 - */ -public class SystemConfigEnum { - - public enum Group { - BACK, - GIT_LOG - } - - public enum Key { - /** - * 超管id - */ - EMPLOYEE_SUPERMAN(SystemConfigDataType.TEXT), - /** - * 阿里云OSS配置项 - */ - ALI_OSS(SystemConfigDataType.JSON), - /** - * 七牛云OSS配置项 - */ - QI_NIU_OSS(SystemConfigDataType.JSON), - /** - * 本地文件上传url前缀 - */ - LOCAL_UPLOAD_URL_PREFIX(SystemConfigDataType.URL), - /** - * 邮件配置 - */ - EMAIL_CONFIG(SystemConfigDataType.JSON), - /** - * git-log 插件 - */ - GIT_LOG_PLUGIN(SystemConfigDataType.JSON); - - private SystemConfigDataType dataType; - - Key(SystemConfigDataType dataType) { - this.dataType = dataType; - } - - - public SystemConfigDataType getDataType() { - return dataType; - } - - public static Key selectByKey(String key) { - Key[] values = Key.values(); - Optional first = Arrays.stream(values).filter(e -> e.name().equalsIgnoreCase(key)).findFirst(); - return !first.isPresent() ? null : first.get(); - } - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/constant/SystemConfigResponseCodeConst.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/constant/SystemConfigResponseCodeConst.java deleted file mode 100644 index fd9fa9e4..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/constant/SystemConfigResponseCodeConst.java +++ /dev/null @@ -1,29 +0,0 @@ -package net.lab1024.smartadmin.module.system.systemconfig.constant; -import net.lab1024.smartadmin.common.constant.ResponseCodeConst; - -/** - * - * [ 5001-5999 ] - * - * @version 1.0 - * @since JDK1.8 - * @author yandanyang - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - */ -public class SystemConfigResponseCodeConst extends ResponseCodeConst { - - /** - * 配置参数已存在 10201 - */ - public static final SystemConfigResponseCodeConst ALREADY_EXIST = new SystemConfigResponseCodeConst(5001, "配置参数已存在"); - /** - * 配置参数不存在 10203 - */ - public static final SystemConfigResponseCodeConst NOT_EXIST = new SystemConfigResponseCodeConst(5002, "配置参数不存在"); - - public SystemConfigResponseCodeConst(int code, String msg) { - super(code, msg); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigDTO.java deleted file mode 100644 index 16aadef5..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigDTO.java +++ /dev/null @@ -1,50 +0,0 @@ -package net.lab1024.smartadmin.module.system.systemconfig.domain.dto; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.Date; - -/** - * - * [ ] - * - * @version 1.0 - * @since JDK1.8 - * @author yandanyang - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - */ -@Data -public class SystemConfigDTO { - - @ApiModelProperty("主键") - private Long id; - - @ApiModelProperty("参数key") - private String configKey; - - @ApiModelProperty("参数的值") - private String configValue; - - @ApiModelProperty("参数名称") - private String configName; - - @ApiModelProperty("参数类别") - private String configGroup; - - @ApiModelProperty("是否使用0 是 1否") - private Integer isUsing; - - @ApiModelProperty("备注") - private String remark; - - @ApiModelProperty("创建时间") - private Date createTime; - - @ApiModelProperty("上次修改时间") - private Date updateTime; - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigQueryDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigQueryDTO.java deleted file mode 100644 index 458ef395..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigQueryDTO.java +++ /dev/null @@ -1,29 +0,0 @@ -package net.lab1024.smartadmin.module.system.systemconfig.domain.dto; - - -import net.lab1024.smartadmin.common.domain.PageParamDTO; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * - * [ ] - * - * @version 1.0 - * @since JDK1.8 - * @author yandanyang - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - */ -@Data -public class SystemConfigQueryDTO extends PageParamDTO { - - @ApiModelProperty("参数KEY") - private String key; - - @ApiModelProperty("参数类别") - private String configGroup; - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigUpdateDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigUpdateDTO.java deleted file mode 100644 index 2fa29788..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigUpdateDTO.java +++ /dev/null @@ -1,25 +0,0 @@ -package net.lab1024.smartadmin.module.system.systemconfig.domain.dto; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotNull; - -/** - * - * [ ] - * - * @version 1.0 - * @since JDK1.8 - * @author yandanyang - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - */ -@Data -public class SystemConfigUpdateDTO extends SystemConfigAddDTO{ - - @ApiModelProperty("id") - @NotNull(message = "id不能为空") - private Long id; -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigVO.java deleted file mode 100644 index 3b5de292..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigVO.java +++ /dev/null @@ -1,48 +0,0 @@ -package net.lab1024.smartadmin.module.system.systemconfig.domain.dto; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.Date; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 - */ -@Data -public class SystemConfigVO { - - @ApiModelProperty("主键") - private Long id; - - @ApiModelProperty("参数key") - private String configKey; - - @ApiModelProperty("参数的值") - private String configValue; - - @ApiModelProperty("参数名称") - private String configName; - - @ApiModelProperty("参数类别") - private String configGroup; - - @ApiModelProperty("是否使用0 是 1否") - private Integer isUsing; - - @ApiModelProperty("备注") - private String remark; - - @ApiModelProperty("创建时间") - private Date createTime; - - @ApiModelProperty("上次修改时间") - private Date updateTime; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/entity/SystemConfigEntity.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/entity/SystemConfigEntity.java deleted file mode 100644 index 18ca1f9f..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/entity/SystemConfigEntity.java +++ /dev/null @@ -1,51 +0,0 @@ -package net.lab1024.smartadmin.module.system.systemconfig.domain.entity; - -import com.baomidou.mybatisplus.annotation.TableName; -import net.lab1024.smartadmin.common.domain.BaseEntity; -import lombok.Data; - -import java.io.Serializable; - -/** - * 系统配置参数 实体类 - * - * @author GHQ - * @date 2017-12-23 13:41 - */ -@Data -@TableName(value = "t_system_config") -public class SystemConfigEntity extends BaseEntity implements Serializable { - - private static final long serialVersionUID = 257284726400352502L; - - /** - * 参数key - */ - private String configKey; - - /** - * 参数的值 - */ - private String configValue; - - /** - * 参数名称 - */ - private String configName; - - /** - * 参数类别 - */ - private String configGroup; - - /** - * 是否使用0 是 1否 - */ - private Integer isUsing; - - /** - * 备注 - */ - private String remark; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/third/SmartApplicationContext.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/third/SmartApplicationContext.java deleted file mode 100644 index fc366789..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/third/SmartApplicationContext.java +++ /dev/null @@ -1,80 +0,0 @@ -package net.lab1024.smartadmin.third; - -import org.springframework.beans.BeansException; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; -import org.springframework.stereotype.Component; - -/** - * [ApplicationContextHelper] - * - * @author yandanyang - * @version 1.0 - * @since JDK1.8 - */ -@Component -public class SmartApplicationContext implements ApplicationContextAware { - /** - * 上下文对象实例 - */ - private static ApplicationContext applicationContext = null; - - @Override - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { - if(SmartApplicationContext.applicationContext == null){ - - SmartApplicationContext.applicationContext = applicationContext; - - } - } - - /** - * 获取applicationContext - * @return - */ - public static ApplicationContext getApplicationContext() { - return applicationContext; - } - - /** - * 通过name获取 Bean. - * @param name - * @return - */ - public static Object getBean(String name){ - ApplicationContext applicationContext = getApplicationContext(); - if(applicationContext == null){ - return null; - } - return applicationContext.getBean(name); - } - - /** - * 通过class获取Bean. - * @param clazz - * @param - * @return - */ - public static T getBean(Class clazz){ - ApplicationContext applicationContext = getApplicationContext(); - if(applicationContext == null){ - return null; - } - return applicationContext.getBean(clazz); - } - - /** - * 通过name,以及Clazz返回指定的Bean - * @param name - * @param clazz - * @param - * @return - */ - public static T getBean(String name,Class clazz){ - ApplicationContext applicationContext = getApplicationContext(); - if(applicationContext == null){ - return null; - } - return applicationContext.getBean(name, clazz); - } -} \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/third/SmartRedisService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/third/SmartRedisService.java deleted file mode 100644 index da36246a..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/third/SmartRedisService.java +++ /dev/null @@ -1,622 +0,0 @@ -package net.lab1024.smartadmin.third; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.google.common.collect.Lists; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.*; -import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; - -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.TimeUnit; - -/** - * [ redis 一顿操作 ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/3/26 0026 下午 18:12 - * @since JDK1.8 - */ -@Slf4j -@Component -public class SmartRedisService { - - @Autowired - private RedisTemplate redisTemplate; - - @Autowired - private ValueOperations redisValueOperations; - - @Autowired - private HashOperations redisHashOperations; - - @Autowired - private ListOperations redisListOperations; - - @Autowired - private SetOperations redisSetOperations; - - /** - * 指定缓存失效时间 - * - * @param key 键 - * @param time 时间(秒) - * @return - */ - public boolean expire(String key, long time) { - try { - if (time > 0) { - redisTemplate.expire(key, time, TimeUnit.SECONDS); - } - return true; - } catch (Exception e) { - log.error("", e); - return false; - } - } - - /** - * 根据key 获取过期时间 - * - * @param key 键 不能为null - * @return 时间(秒) 返回0代表为永久有效 - */ - public long getExpire(String key) { - return redisTemplate.getExpire(key, TimeUnit.SECONDS); - } - - /** - * 判断key是否存在 - * - * @param key 键 - * @return true 存在 false不存在 - */ - public boolean hasKey(String key) { - try { - return redisTemplate.hasKey(key); - } catch (Exception e) { - log.error("", e); - return false; - } - } - - /** - * 删除缓存 - * - * @param key 可以传一个值 或多个 - */ - @SuppressWarnings("unchecked") - public void del(String... key) { - if (key != null && key.length > 0) { - if (key.length == 1) { - redisTemplate.delete(key[0]); - } else { - redisTemplate.delete(CollectionUtils.arrayToList(key)); - } - } - } - - //============================String============================= - - /** - * 普通缓存获取 - * - * @param key 键 - * @return 值 - */ - public String get(String key) { - return key == null ? null : redisValueOperations.get(key); - } - - public T getObject(String key, Class clazz) { - Object json = this.get(key); - if (json == null) { - return null; - } - T obj = JSON.parseObject(json.toString(), clazz); - return obj; - } - - public List getList(String key, Class clz) { - Object json = this.get(key); - if (json == null) { - return Lists.newArrayList(); - } - List list = JSONObject.parseArray(json.toString(), clz); - return list; - } - - /** - * 普通缓存放入 - * - * @param key 键 - * @param value 值 - * @return true成功 false失败 - */ - public boolean set(String key, String value) { - try { - redisValueOperations.set(key, value); - return true; - } catch (Exception e) { - log.error("", e); - return false; - } - - } - - /** - * 普通缓存放入并设置时间 - * - * @param key 键 - * @param value 值 - * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期 - * @return true成功 false 失败 - */ - public boolean set(String key, String value, long time) { - try { - if (time > 0) { - redisValueOperations.set(key, value, time, TimeUnit.SECONDS); - } else { - set(key, value); - } - return true; - } catch (Exception e) { - log.error("", e); - return false; - } - } - - /** - * 递增 - * - * @param key 键 - * @param delta 要增加几(大于0) - * @return - */ - public long incr(String key, long delta) { - if (delta < 0) { - throw new RuntimeException("递增因子必须大于0"); - } - return redisValueOperations.increment(key, delta); - } - - /** - * 递减 - * - * @param key 键 - * @param delta 要减少几(小于0) - * @return - */ - public long decr(String key, long delta) { - if (delta < 0) { - throw new RuntimeException("递减因子必须大于0"); - } - return redisValueOperations.increment(key, - delta); - } - - //================================Map================================= - - /** - * HashGet - * - * @param key 键 不能为null - * @param item 项 不能为null - * @return 值 - */ - public Object hget(String key, String item) { - return redisHashOperations.get(key, item); - } - - /** - * 获取hashKey对应的所有键值 - * - * @param key 键 - * @return 对应的多个键值 - */ - public Map hmget(String key) { - return redisHashOperations.entries(key); - } - - /** - * HashSet - * - * @param key 键 - * @param map 对应多个键值 - * @return true 成功 false 失败 - */ - public boolean hmset(String key, Map map) { - try { - redisHashOperations.putAll(key, map); - return true; - } catch (Exception e) { - log.error("", e); - return false; - } - } - - /** - * HashSet 并设置时间 - * - * @param key 键 - * @param map 对应多个键值 - * @param time 时间(秒) - * @return true成功 false失败 - */ - public boolean hmset(String key, Map map, long time) { - try { - redisHashOperations.putAll(key, map); - if (time > 0) { - expire(key, time); - } - return true; - } catch (Exception e) { - log.error("", e); - return false; - } - } - - /** - * 向一张hash表中放入数据,如果不存在将创建 - * - * @param key 键 - * @param item 项 - * @param value 值 - * @return true 成功 false失败 - */ - public boolean hset(String key, String item, Object value) { - try { - redisHashOperations.put(key, item, value); - return true; - } catch (Exception e) { - log.error("", e); - return false; - } - } - - /** - * 向一张hash表中放入数据,如果不存在将创建 - * - * @param key 键 - * @param item 项 - * @param value 值 - * @param time 时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间 - * @return true 成功 false失败 - */ - public boolean hset(String key, String item, Object value, long time) { - try { - redisHashOperations.put(key, item, value); - if (time > 0) { - expire(key, time); - } - return true; - } catch (Exception e) { - log.error("", e); - return false; - } - } - - /** - * 删除hash表中的值 - * - * @param key 键 不能为null - * @param item 项 可以使多个 不能为null - */ - public void hdel(String key, Object... item) { - redisHashOperations.delete(key, item); - } - - /** - * 判断hash表中是否有该项的值 - * - * @param key 键 不能为null - * @param item 项 不能为null - * @return true 存在 false不存在 - */ - public boolean hHasKey(String key, String item) { - return redisHashOperations.hasKey(key, item); - } - - /** - * hash递增 如果不存在,就会创建一个 并把新增后的值返回 - * - * @param key 键 - * @param item 项 - * @param by 要增加几(大于0) - * @return - */ - public double hincr(String key, String item, double by) { - return redisHashOperations.increment(key, item, by); - } - - /** - * hash递减 - * - * @param key 键 - * @param item 项 - * @param by 要减少记(小于0) - * @return - */ - public double hdecr(String key, String item, double by) { - return redisHashOperations.increment(key, item, - by); - } - - //============================set============================= - - /** - * 根据key获取Set中的所有值 - * - * @param key 键 - * @return - */ - public Set sGet(String key) { - try { - return redisSetOperations.members(key); - } catch (Exception e) { - log.error("", e); - return null; - } - } - - /** - * 根据value从一个set中查询,是否存在 - * - * @param key 键 - * @param value 值 - * @return true 存在 false不存在 - */ - public boolean sHasKey(String key, Object value) { - try { - return redisSetOperations.isMember(key, value); - } catch (Exception e) { - log.error("", e); - return false; - } - } - - /** - * 将数据放入set缓存 - * - * @param key 键 - * @param values 值 可以是多个 - * @return 成功个数 - */ - public long sSet(String key, Object... values) { - try { - return redisSetOperations.add(key, values); - } catch (Exception e) { - log.error("", e); - return 0; - } - } - - /** - * 将set数据放入缓存 - * - * @param key 键 - * @param time 时间(秒) - * @param values 值 可以是多个 - * @return 成功个数 - */ - public long sSetAndTime(String key, long time, Object... values) { - try { - Long count = redisSetOperations.add(key, values); - if (time > 0) { - expire(key, time); - } - return count; - } catch (Exception e) { - log.error("", e); - return 0; - } - } - - /** - * 获取set缓存的长度 - * - * @param key 键 - * @return - */ - public long sGetSetSize(String key) { - try { - return redisSetOperations.size(key); - } catch (Exception e) { - log.error("", e); - return 0; - } - } - - /** - * 移除值为value的 - * - * @param key 键 - * @param values 值 可以是多个 - * @return 移除的个数 - */ - public long setRemove(String key, Object... values) { - try { - Long count = redisSetOperations.remove(key, values); - return count; - } catch (Exception e) { - log.error("", e); - return 0; - } - } - //===============================list================================= - - /** - * 获取list缓存的内容 - * - * @param key 键 - * @param start 开始 - * @param end 结束 0 到 -1代表所有值 - * @return - */ - public List lGet(String key, long start, long end) { - try { - return redisListOperations.range(key, start, end); - } catch (Exception e) { - log.error("", e); - return null; - } - } - - /** - * 获取list缓存的所有内容 - * - * @param key - * @return - */ - public List lGetAll(String key) { - return lGet(key, 0, - 1); - } - - /** - * 获取list缓存的长度 - * - * @param key 键 - * @return - */ - public long lGetListSize(String key) { - try { - return redisListOperations.size(key); - } catch (Exception e) { - log.error("", e); - return 0; - } - } - - /** - * 通过索引 获取list中的值 - * - * @param key 键 - * @param index 索引 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推 - * @return - */ - public Object lGetIndex(String key, long index) { - try { - return redisListOperations.index(key, index); - } catch (Exception e) { - log.error("", e); - return null; - } - } - - /** - * 将list放入缓存 - * - * @param key 键 - * @param value 值 - * @return - */ - public boolean lSet(String key, Object value) { - try { - redisListOperations.rightPush(key, value); - return true; - } catch (Exception e) { - log.error("", e); - return false; - } - } - - /** - * 将list放入缓存 - * - * @param key 键 - * @param value 值 - * @param time 时间(秒) - * @return - */ - public boolean lSet(String key, Object value, long time) { - try { - redisListOperations.rightPush(key, value); - if (time > 0) { - expire(key, time); - } - return true; - } catch (Exception e) { - log.error("", e); - return false; - } - } - - /** - * 将list放入缓存 - * - * @param key 键 - * @param value 值 - * @return - */ - public boolean lSet(String key, List value) { - try { - redisListOperations.rightPushAll(key, value); - return true; - } catch (Exception e) { - log.error("", e); - return false; - } - } - - /** - * 将list放入缓存 - * - * @param key 键 - * @param value 值 - * @param time 时间(秒) - * @return - */ - public boolean lSet(String key, List value, long time) { - try { - redisListOperations.rightPushAll(key, value); - if (time > 0) { - expire(key, time); - } - return true; - } catch (Exception e) { - log.error("", e); - return false; - } - } - - /** - * 根据索引修改list中的某条数据 - * - * @param key 键 - * @param index 索引 - * @param value 值 - * @return - */ - public boolean lUpdateIndex(String key, long index, Object value) { - try { - redisListOperations.set(key, index, value); - return true; - } catch (Exception e) { - log.error("", e); - return false; - } - } - - /** - * 移除N个值为value - * - * @param key 键 - * @param count 移除多少个 - * @param value 值 - * @return 移除的个数 - */ - public long lRemove(String key, long count, Object value) { - try { - Long remove = redisListOperations.remove(key, count, value); - return remove; - } catch (Exception e) { - log.error("", e); - return 0; - } - } -} \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartBaseEnumUtil.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartBaseEnumUtil.java deleted file mode 100644 index e433367b..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartBaseEnumUtil.java +++ /dev/null @@ -1,85 +0,0 @@ -package net.lab1024.smartadmin.util; - -import net.lab1024.smartadmin.common.domain.BaseEnum; - -/** - * 枚举工具类 - * - * @author listen - * @date 2017/10/10 18:17 - */ -public class SmartBaseEnumUtil { - - /** - * 校验int类型的参数与枚举类比较是否合法 - * - * @param value 参数 - * @param enumClass 枚举类必须实现BaseEnum接口 - * @return boolean - * @Author listen - */ - public static boolean checkEnum(Integer value, Class enumClass) { - if (null == value) { - return false; - } - BaseEnum[] enums = enumClass.getEnumConstants(); - for (BaseEnum baseEnum : enums) { - if (baseEnum.equalsValue(value)) { - return true; - } - } - return false; - } - - /** - * 获取枚举类的说明 value : info 的形式 - * - * @param enumClass - * @return String - */ - public static String getEnumDesc(Class enumClass) { - BaseEnum[] enums = enumClass.getEnumConstants(); - // value : info 的形式 - StringBuilder sb = new StringBuilder(); - for (BaseEnum baseEnum : enums) { - sb.append(baseEnum.getValue() + ":" + baseEnum.getDesc() + ","); - } - return sb.toString(); - } - - /** - * 获取与int Code相匹配的枚举类的info - * - * @param value 参数 - * @param enumClass 枚举类必须实现BaseEnum接口 - * @return String 如无匹配枚举则返回null - */ - public static String getEnumDescByValue(Integer value, Class enumClass) { - BaseEnum[] enums = enumClass.getEnumConstants(); - for (BaseEnum baseEnum : enums) { - if (baseEnum.equalsValue(value)) { - return baseEnum.getDesc(); - } - } - return null; - } - - /** - * 根据int类型的参数与获取枚举类的实例 - * - * @param value 参数 - * @param enumClass 枚举类必须实现BaseEnum接口 - * @return BaseEnum 无匹配值返回null - * @Author listen - */ - public static T getEnumByValue(Object value, Class enumClass) { - T[] enums = enumClass.getEnumConstants(); - for (T baseEnum : enums) { - if (baseEnum.equalsValue(value)) { - return baseEnum; - } - } - return null; - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartDateUtil.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartDateUtil.java deleted file mode 100644 index 1e078263..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartDateUtil.java +++ /dev/null @@ -1,521 +0,0 @@ -package net.lab1024.smartadmin.util; - -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.time.DateUtils; - -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.text.SimpleDateFormat; -import java.util.*; - -/** - * 线程安全的date工具类 - * - * @author jiaozi - */ -public class SmartDateUtil extends DateUtils { - - private static final ThreadLocal dateFormats = new ThreadLocal() { - @Override - protected DateFormats initialValue() { - return new DateFormats(); - } - }; - - public static final int HOUR_MIN = 60; - - public static final int DAY_MI_SECOND = 24 * 60 * 60 * 1000; - - public static String formatYMD(Date date) { - return dateFormats.get().ymd.format(date); - } - - public static String formatYMDDigital(Date date) { - return dateFormats.get().ymdDigital.format(date); - } - - public static String formatYMDHMSDigital(Date date) { - return dateFormats.get().ymdhmsDigital.format(date); - } - - public static String formatYM(Date date) { - return dateFormats.get().ym.format(date); - } - - public static String formatHMS(Date date) { - return dateFormats.get().hms.format(date); - } - - public static String formatHM(Date date) { - return dateFormats.get().hm.format(date); - } - - public static String formatYMDHM(Date date) { - return dateFormats.get().ymdhm.format(date); - } - - public static String formatYMDHMS(Date date) { - return dateFormats.get().ymdhms.format(date); - } - - public static String formatYMDChinese(Date date) { - return dateFormats.get().ymdChinese.format(date); - } - - public static String formatYMDSlash(Date date) { - return dateFormats.get().ymdSlash.format(date); - } - - public static Date parseYMD(String dateStr) { - return parse(dateFormats.get().ymd, dateStr); - } - - public static Date parseYMDDigital(String dateStr) { - return parse(dateFormats.get().ymdDigital, dateStr); - } - - public static Date parseYMDHMSDigital(String dateStr) { - return parse(dateFormats.get().ymdhmsDigital, dateStr); - } - - public static Date parseformatYMDChinese(String dateStr) { - return parse(dateFormats.get().ymdChinese, dateStr); - } - - public static Date parseYM(String dateStr) { - return parse(dateFormats.get().ym, dateStr); - } - - public static Date parseYMDHMS(String dateStr) { - - return parse(dateFormats.get().ymdhms, dateStr); - } - - public static Date parseYMDHM(String dateStr) { - return parse(dateFormats.get().ymdhm, dateStr); - } - - public static Date parseTodayHMS(String dateStr) { - String today = formatYMD(new Date()); - String todayDateStr = String.format("%s %s", today, dateStr); - return parse(dateFormats.get().ymdhms, todayDateStr); - } - - /** - * 判断当前时间是否在某段时间内 参数不区分先后顺序 - */ - public static boolean isDuringTwoDate(Date date, Date another) { - long dateTime = date.getTime(); - long anotherTime = another.getTime(); - long currentTime = System.currentTimeMillis(); - - if (currentTime > dateTime && currentTime < anotherTime) { - return true; - } else if (currentTime > anotherTime && currentTime < dateTime) { - return true; - } else { - return false; - } - } - - public static Date parse(SimpleDateFormat format, String dateStr) { - try { - Date d = format.parse(dateStr); - Calendar c = Calendar.getInstance(); - c.setTime(d); - int year = c.get(Calendar.YEAR); - if (year >= 1000 && year <= 9999) { - return d; - } else { - return null; - } - } catch (Exception ex) { - return null; - } - } - - public static long daysOffset(Date date1, Date date2) { - date1 = parseYMD(formatYMD(date1)); - date2 = parseYMD(formatYMD(date2)); - return (date1.getTime() - date2.getTime()) / DAY_MI_SECOND; - } - - /** - * 今天是星期几 , 7表示星期日 - * - * @return - */ - public static int getTodayDayOfWeek() { - Calendar now = Calendar.getInstance(); - int dayOfweek = now.get(Calendar.DAY_OF_WEEK); - dayOfweek--; - if (dayOfweek == 0) { - dayOfweek = 7; - } - return dayOfweek; - } - - public static boolean isTodaytDay(Date date) { - Calendar calendar = Calendar.getInstance(); - calendar.setTime(date); - Calendar todayCalendar = Calendar.getInstance(); - if (calendar.get(Calendar.YEAR) != todayCalendar.get(Calendar.YEAR)) { - return false; - } else if (calendar.get(Calendar.MONTH) != todayCalendar.get(Calendar.MONTH)) { - return false; - } else if (calendar.get(Calendar.DAY_OF_MONTH) != todayCalendar.get(Calendar.DAY_OF_MONTH)) { - return false; - } - return true; - } - - /** - * 设置Calendar的小时、分钟、秒、毫秒 - * - * @param calendar 日历 - * @param hour 小时 - * @param minute 分钟 - * @param second 秒 - * @param milliSecond 毫秒 - */ - public static void setCalender(Calendar calendar, int hour, int minute, int second, int milliSecond) { - calendar.set(Calendar.HOUR_OF_DAY, hour); - calendar.set(Calendar.MINUTE, minute); - calendar.set(Calendar.SECOND, second); - calendar.set(Calendar.MILLISECOND, milliSecond); - } - - /** - * 获取指定天开始时间 - * - * @param date 日期 - * @return 获得该日期的开始 - */ - public static Date getDayBegin(Date date) { - Calendar calendar = Calendar.getInstance(); - calendar.setTime(date); - setCalender(calendar, 0, 0, 0, 0); - return calendar.getTime(); - } - - /** - * 获取指定天结束时间 - * - * @param date 日期 - * @return 获得该日期的结束 - */ - public static Date getDayEnd(Date date) { - Calendar calendar = Calendar.getInstance(); - calendar.setTime(date); - setCalender(calendar, 23, 59, 59, 999); - return calendar.getTime(); - } - - /** - * 获取该日期当月第一天 - * - * @param date - * @return - */ - public static Date getMonthBegin(Date date) { - Calendar calendar = Calendar.getInstance(); - calendar.setTime(getDayBegin(date)); - calendar.set(Calendar.DAY_OF_MONTH, 1); - return calendar.getTime(); - } - - /** - * 获取该日期当月最后一天getAgeByBirthday - * - * @param date - * @return - */ - public static Date getMonthEnd(Date date) { - Calendar calendar = Calendar.getInstance(); - calendar.setTime(getDayEnd(date)); - calendar.add(Calendar.MONTH, 1); - calendar.set(Calendar.DAY_OF_MONTH, 1); - calendar.add(Calendar.DAY_OF_MONTH, - 1); - return calendar.getTime(); - } - - public static String timeDifference(Date endDate) { - Date nowDate = new Date(); - long nd = 1000 * 24 * 60 * 60; - long nh = 1000 * 60 * 60; - long nm = 1000 * 60; - // 获得两个时间的毫秒时间差异 - long diff = nowDate.getTime() - endDate.getTime(); - // 计算差多少天 - long day = diff / nd; - if (day > 0) { - return day + "天前"; - } - // 计算差多少小时 - long hour = diff % nd / nh; - if (hour > 0) { - return hour + "小时前"; - } - // 计算差多少分钟 - long min = diff % nd % nh / nm; - if (min > 0) { - return "1小时内"; - } - return "1小时内"; - } - - /** - * 计算所用时长 - * - * @param startDate - * @param endDate - * @return - */ - public static BigDecimal timeDifferenceMin(Date startDate, Date endDate) { - long nm = 1000 * 60; - // 获得两个时间的毫秒时间差异 - long diff = endDate.getTime() - startDate.getTime(); - BigDecimal min = BigDecimal.valueOf(diff).divide(BigDecimal.valueOf(nm), RoundingMode.HALF_UP); - return min; - } - - /** - * 功能描述: 是否为当天 - * - * @param dateStr yyyy-mm-dd - * @return - * @auther yandanyang - * @date 2018/10/16 0016 下午 17:43 - */ - public static boolean isCurrentDayYMD(String dateStr) { - if (StringUtils.isEmpty(dateStr)) { - return true; - } - String current = SmartDateUtil.formatYMD(new Date()); - if (current.equals(dateStr)) { - return true; - } - return false; - } - - /** - * 功能描述: 是否为当月 - * - * @param dateStr yyyy-mm-dd - * @return - * @auther yandanyang - * @date 2018/10/16 0016 下午 17:43 - */ - public static boolean isCurrentMonthYMD(String dateStr) { - if (StringUtils.isEmpty(dateStr)) { - return true; - } - String queryDate = SmartDateUtil.formatYM(SmartDateUtil.parseYMD(dateStr)); - String current = SmartDateUtil.formatYM(new Date()); - if (current.equals(queryDate)) { - return true; - } - return false; - } - - public static boolean isCurrentMonthYM(String dateStr) { - if (StringUtils.isEmpty(dateStr)) { - return true; - } - String current = SmartDateUtil.formatYM(new Date()); - if (current.equals(dateStr)) { - return true; - } - return false; - } - - /** - * 获取本周的开始时间 - * - * @return - */ - public static Date getBeginDayOfWeek() { - Date date = new Date(); - if (date == null) { - return null; - } - Calendar cal = Calendar.getInstance(); - cal.setTime(date); - int dayofweek = cal.get(Calendar.DAY_OF_WEEK); - if (dayofweek == 1) { - dayofweek += 7; - } - cal.add(Calendar.DATE, 2 - dayofweek); - return getDayBegin(cal.getTime()); - } - - /** - * 获取本周的结束时间 - * - * @return - */ - public static Date getEndDayOfWeek() { - Calendar cal = Calendar.getInstance(); - cal.setTime(getBeginDayOfWeek()); - cal.add(Calendar.DAY_OF_WEEK, 6); - Date weekEndSta = cal.getTime(); - return getDayEnd(weekEndSta); - } - - /** - * 获取两个日期区间的日期(包括这两个日期) - */ - public static List getiIntervalDate(String dateBegin, String dateEnd) { - List dateList = new ArrayList<>(); - Date startDate = SmartDateUtil.parseYMD(dateBegin); - Date endDate = SmartDateUtil.parseYMD(dateEnd); - Calendar cal = Calendar.getInstance(); - cal.setTime(startDate); - dateList.add(dateBegin); - while (cal.getTime().compareTo(endDate) < 0) { - cal.add(Calendar.DAY_OF_MONTH, 1); - dateList.add(SmartDateUtil.formatYMD(cal.getTime())); - } - return dateList; - } - - /** - * 返回某个日期后几天的日期 - * - * @param date - * @param i - * @return - */ - public static Date getNextDay(Date date, int i) { - Calendar cal = new GregorianCalendar(); - cal.setTime(date); - cal.set(Calendar.DATE, cal.get(Calendar.DATE) + i); - return cal.getTime(); - } - - /** - * 返回某个日期前几天的日期 - * - * @param date - * @param i - * @return - */ - public static Date getFrontDay(Date date, int i) { - Calendar cal = new GregorianCalendar(); - cal.setTime(date); - cal.set(Calendar.DATE, cal.get(Calendar.DATE) - i); - return cal.getTime(); - } - - /** - * 获取昨天的开始时间 - * - * @return - */ - public static Date getBeginDayOfYesterday() { - Calendar cal = new GregorianCalendar(); - cal.setTime(getDayBegin(new Date())); - cal.add(Calendar.DAY_OF_MONTH, - 1); - return cal.getTime(); - } - - /** - * 获取昨天的结束时间 - * - * @return - */ - public static Date getEndDayOfYesterDay() { - Calendar cal = new GregorianCalendar(); - cal.setTime(getDayEnd(new Date())); - cal.add(Calendar.DAY_OF_MONTH, - 1); - return cal.getTime(); - } - - public static Integer getDayNumOfMonth(Date date) { - Calendar c = Calendar.getInstance(); - c.setTime(date); - Integer num = c.getActualMaximum(Calendar.DAY_OF_MONTH); - return num; - } - - /** - * 转换日期(格式:年-月-日 时:分--分自定义) - */ - public static String formatYMDH(Date date, String minute) { - String ymdhm = dateFormats.get().ymdh + ":" + minute; - SimpleDateFormat format = new SimpleDateFormat(ymdhm); - return format.format(date); - } - - /** - * 获取几个月后的日期 - */ - public static Date getAfterMonth(Date inputDate, int number) { - Calendar c = Calendar.getInstance();//获得一个日历的实例 - c.setTime(inputDate);//设置日历时间 - c.add(Calendar.MONTH, number);//在日历的月份上增加月 - return c.getTime(); - } - - /** - * 计算当前月有多少天 - */ - public static int getDays(int year, int month) { - int days = 0; - if (month != 2) { - switch (month) { - case 1: - case 3: - case 5: - case 7: - case 8: - case 10: - case 12: - days = 31; - break; - case 4: - case 6: - case 9: - case 11: - days = 30; - - } - } else { - // 闰年 - if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { - days = 29; - } else { - days = 28; - } - } - System.out.println("当月有" + days + "天!"); - return days; - } - -} - -class DateFormats { - - public final SimpleDateFormat hms = new SimpleDateFormat("HH:mm:ss"); - - public final SimpleDateFormat hm = new SimpleDateFormat("HH:mm"); - - public final SimpleDateFormat ymdhm = new SimpleDateFormat("yyyy-MM-dd HH:mm"); - - public final SimpleDateFormat ymd = new SimpleDateFormat("yyyy-MM-dd"); - - public final SimpleDateFormat ym = new SimpleDateFormat("yyyy-MM"); - - public final SimpleDateFormat ymdhms = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - - public final SimpleDateFormat ymdChinese = new SimpleDateFormat("yyyy年MM月dd日"); - - public final SimpleDateFormat ymdSlash = new SimpleDateFormat("yyyy/MM/dd"); - - public final SimpleDateFormat ymdDigital = new SimpleDateFormat("yyyyMMdd"); - - public final SimpleDateFormat ymdhmsDigital = new SimpleDateFormat("yyyyMMddHHmmss"); - - public static final String ymdh = "yyyy-MM-dd HH"; -} - diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartDigestUtil.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartDigestUtil.java deleted file mode 100644 index 902d5db3..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartDigestUtil.java +++ /dev/null @@ -1,17 +0,0 @@ -package net.lab1024.smartadmin.util; - -import org.apache.commons.codec.digest.DigestUtils; - -public class SmartDigestUtil extends DigestUtils { - - /** - * md5加盐加密 - * - * @param salt - * @param password - * @return - */ - public static String encryptPassword(String salt, String password) { - return SmartDigestUtil.md5Hex(String.format(salt, password)); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartFileUtil.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartFileUtil.java deleted file mode 100644 index 45735c9a..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartFileUtil.java +++ /dev/null @@ -1,91 +0,0 @@ -package net.lab1024.smartadmin.util; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.nio.charset.Charset; - -import org.apache.commons.io.FileUtils; - -/** - * @author zhuoda - */ -public class SmartFileUtil extends FileUtils { - - public static boolean isXmlFile(File file) { - return "xml".equalsIgnoreCase(getFileExtension(file.getName())); - } - - /** - * 文件后缀名 - * - * @param fullName - * @return - */ - public static String getFileExtension(String fullName) { - String fileName = new File(fullName).getName(); - int dotIndex = fileName.lastIndexOf('.'); - return (dotIndex == -1) ? "" : fileName.substring(dotIndex + 1); - } - - /** - * 不带后缀名的文件名 - * - * @param file - * @return - */ - public static String getNameWithoutExtension(String file) { - String fileName = new File(file).getName(); - int dotIndex = fileName.lastIndexOf('.'); - return (dotIndex == -1) ? fileName : fileName.substring(0, dotIndex); - } - - public static boolean isFileExist(String filePath) { - File file = new File(filePath); - return file.exists(); - } - - /** - * 验证文件是否存在,如果不存在则抛出异常 - * - * @param filePath - * @throws IOException - */ - public static void isFileExistThrowException(String filePath) throws IOException { - File file = new File(filePath); - if (!file.exists()) { - throw new FileNotFoundException(filePath); - } - } - - public static BufferedReader newBufferedReader(File file, Charset charset) throws FileNotFoundException { - return new BufferedReader(new InputStreamReader(new FileInputStream(file), charset)); - } - - public static BufferedWriter newBufferedWriter(File file, Charset charset) throws FileNotFoundException { - return new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), charset)); - } - - public static boolean createParentDirs(File file) throws IOException { - File parent = file.getCanonicalFile().getParentFile(); - if (parent == null) { - return false; - } - return parent.mkdirs(); - } - - public static boolean createNotExistParentDirFile(File file) throws IOException { - boolean createParentDirsRes = createParentDirs(file); - if (!createParentDirsRes) { - throw new IOException("cannot create parent Directory of " + file.getName()); - } - return file.createNewFile(); - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartHttpUtil.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartHttpUtil.java deleted file mode 100644 index 62e8ff2d..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartHttpUtil.java +++ /dev/null @@ -1,151 +0,0 @@ -package net.lab1024.smartadmin.util; - -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import org.apache.http.HttpResponse; -import org.apache.http.HttpStatus; -import org.apache.http.NameValuePair; -import org.apache.http.client.entity.UrlEncodedFormEntity; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.StringEntity; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.message.BasicNameValuePair; -import org.apache.http.util.EntityUtils; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -/** - * [ HttpUtils ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 - */ -public class SmartHttpUtil { - - public static String sendGet(String url, Map params, Map header) throws Exception { - HttpGet httpGet = null; - String body = ""; - try { - CloseableHttpClient httpClient = HttpClients.createDefault(); - List mapList = new ArrayList<>(); - if (params != null) { - for (Entry entry : params.entrySet()) { - mapList.add(entry.getKey() + "=" + entry.getValue()); - } - } - if (CollectionUtils.isNotEmpty(mapList)) { - url = url + "?"; - String paramsStr = StringUtils.join(mapList, "&"); - url = url + paramsStr; - } - httpGet = new HttpGet(url); - httpGet.setHeader("Content-type", "application/json; charset=utf-8"); - httpGet.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); - if (header != null) { - for (Entry entry : header.entrySet()) { - httpGet.setHeader(entry.getKey(), entry.getValue()); - } - } - HttpResponse response = httpClient.execute(httpGet); - - int statusCode = response.getStatusLine().getStatusCode(); - if (statusCode != HttpStatus.SC_OK) { - throw new RuntimeException("请求失败"); - } else { - body = EntityUtils.toString(response.getEntity(), "UTF-8"); - } - } catch (Exception e) { - throw e; - } finally { - if (httpGet != null) { - httpGet.releaseConnection(); - } - } - return body; - } - - public static String sendPostJson(String url, String json, Map header) throws Exception { - HttpPost httpPost = null; - String body = ""; - try { - CloseableHttpClient httpClient = HttpClients.createDefault(); - httpPost = new HttpPost(url); - httpPost.setHeader("Content-type", "application/json; charset=utf-8"); - httpPost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); - if (header != null) { - for (Entry entry : header.entrySet()) { - httpPost.setHeader(entry.getKey(), entry.getValue()); - } - } - StringEntity entity = new StringEntity(json, Charset.forName("UTF-8")); - entity.setContentEncoding("UTF-8"); - entity.setContentType("application/json"); - httpPost.setEntity(entity); - HttpResponse response = httpClient.execute(httpPost); - - int statusCode = response.getStatusLine().getStatusCode(); - if (statusCode != HttpStatus.SC_OK) { - throw new RuntimeException("请求失败"); - } else { - body = EntityUtils.toString(response.getEntity(), "UTF-8"); - } - } catch (Exception e) { - throw e; - } finally { - if (httpPost != null) { - httpPost.releaseConnection(); - } - } - return body; - } - - public static String sendPostForm(String url, Map params, Map header) throws Exception { - HttpPost httpPost = null; - String body = ""; - try { - CloseableHttpClient httpClient = HttpClients.createDefault(); - httpPost = new HttpPost(url); - httpPost.setHeader("Content-type", "application/x-www-form-urlencoded"); - httpPost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); - if (header != null) { - for (Entry entry : header.entrySet()) { - httpPost.setHeader(entry.getKey(), entry.getValue()); - } - } - List nvps = new ArrayList<>(); - if (params != null) { - for (Entry entry : params.entrySet()) { - nvps.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); - } - } - //设置参数到请求对象中 - httpPost.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8")); - HttpResponse response = httpClient.execute(httpPost); - - int statusCode = response.getStatusLine().getStatusCode(); - if (statusCode != HttpStatus.SC_OK) { - throw new RuntimeException("请求失败"); - } else { - body = EntityUtils.toString(response.getEntity(), "UTF-8"); - } - } catch (Exception e) { - throw e; - } finally { - if (httpPost != null) { - httpPost.releaseConnection(); - } - } - return body; - } - -} \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartIPUtil.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartIPUtil.java deleted file mode 100644 index fb93cd57..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartIPUtil.java +++ /dev/null @@ -1,159 +0,0 @@ -package net.lab1024.smartadmin.util; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import org.apache.commons.lang3.StringUtils; - -import javax.servlet.http.HttpServletRequest; -import java.net.InetAddress; -import java.net.NetworkInterface; -import java.net.SocketException; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.Map; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/5/5 0005 下午 15:34 - * @since JDK1.8 - */ -public class SmartIPUtil { - - public static final String IP_URL = "http://ip.taobao.com/service/getIpInfo.php"; - - public static String getLocalHostIP() { - // 本地IP,如果没有配置外网IP则返回它 - String localIp = null; - // 外网IP - String netIp = null; - try { - Enumeration netInterfaces = NetworkInterface.getNetworkInterfaces(); - InetAddress ip = null; - // 是否找到外网IP - boolean finded = false; - while (netInterfaces.hasMoreElements() && ! finded) { - NetworkInterface ni = netInterfaces.nextElement(); - Enumeration address = ni.getInetAddresses(); - while (address.hasMoreElements()) { - ip = address.nextElement(); - // 外网IP - if (! ip.isSiteLocalAddress() && ! ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == - 1) { - netIp = ip.getHostAddress(); - finded = true; - break; - } else if (ip.isSiteLocalAddress() && ! ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == - 1) { - // 内网IP - localIp = ip.getHostAddress(); - } - } - } - } catch (SocketException e) { - e.getMessage(); - } - if (netIp != null && ! "".equals(netIp)) { - return netIp; - } else { - return localIp; - } - } - - public static String getRemoteIp(HttpServletRequest request) { - // 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址 - - String ip = getXForwardedForIp(request); - if (ipValid(ip)) { - return realIp(ip); - } - ip = request.getHeader("Proxy-Client-IP"); - if (ipValid(ip)) { - return realIp(ip); - } - ip = request.getHeader("HTTP_CLIENT_IP"); - if (ipValid(ip)) { - return realIp(ip); - } - ip = request.getHeader("HTTP_X_FORWARDED_FOR"); - if (ipValid(ip)) { - return realIp(ip); - } - - ip = request.getRemoteAddr(); - return realIp(ip); - } - - private static String getXForwardedForIp(HttpServletRequest request) { - String ip = request.getHeader("x-forwarded-for"); - //ip 无效直接返回 - if (! ipValid(ip)) { - return ""; - } - if (ip.length() > 15) { - String[] ips = ip.split(","); - for (String strIp : ips) { - if (! ("unknown".equalsIgnoreCase(strIp))) { - ip = strIp; - break; - } - } - return ip; - } - return ip; - } - - private static Boolean ipValid(String ip) { - if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { - return false; - } - return true; - } - - private static String realIp(String ip) { - if (StringUtils.isEmpty(ip)) { - return ""; - } - return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip; - } - - public static String getRemoteLocation(HttpServletRequest request) { - String ip = getRemoteIp(request); - return getIpLocation(ip); - } - - public static String getIpLocation(String ip) { - String location = "未知"; - if (StringUtils.isEmpty(ip)) { - return location; - } - Map param = new HashMap<>(); - param.put("ip", ip); - - try { - String rspStr = SmartHttpUtil.sendGet(IP_URL, param, null); - if (StringUtils.isEmpty(rspStr)) { - return location; - } - JSONObject jsonObject = JSON.parseObject(rspStr); - String data = jsonObject.getString("data"); - JSONObject jsonData = JSON.parseObject(data); - String region = jsonData.getString("region"); - String city = jsonData.getString("city"); - location = region + " " + city; - if (location.contains("内网IP")) { - location = "内网(" + ip + ")"; - } - } catch (Exception e) { - - } - return location; - } - - public static void main(String[] args) { - System.out.printf(getIpLocation("172.16.0.221")); - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartPageUtil.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartPageUtil.java deleted file mode 100644 index 2e1352c6..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartPageUtil.java +++ /dev/null @@ -1,97 +0,0 @@ -package net.lab1024.smartadmin.util; - -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import net.lab1024.smartadmin.common.domain.OrderItemDTO; -import net.lab1024.smartadmin.common.domain.PageParamDTO; -import net.lab1024.smartadmin.common.domain.PageResultDTO; - -import java.util.List; -import java.util.stream.Collectors; - -/** - * 分页工具类 - * - * @author GHQ - * @date 2017-12-23 16:40 - */ - -public class SmartPageUtil { - - public static PageResultDTO convert2PageResult(IPage page) { - PageResultDTO result = new PageResultDTO<>(); - result.setPageNum(page.getCurrent()); - result.setPageSize(page.getSize()); - result.setTotal(page.getTotal()); - result.setPages(page.getPages()); - result.setList(page.getRecords()); - return result; - } - - public static Page convert2QueryPage(PageParamDTO baseDTO) { - Page page = new Page<>(); - - List orders = baseDTO.getOrders(); - if (orders != null && !orders.isEmpty()) { - List orderItemList = orders.stream().map(SmartPageUtil::convertOrderItem).collect(Collectors.toList()); - page.setOrders(orderItemList); - } - page.setCurrent(baseDTO.getPageNum()); - page.setSize(baseDTO.getPageSize()); - if (null != baseDTO.getSearchCount()) { - page.setSearchCount(baseDTO.getSearchCount()); - } - return page; - } - - private static com.baomidou.mybatisplus.core.metadata.OrderItem convertOrderItem(OrderItemDTO orderItemDTO) { - if (orderItemDTO.isAsc()) { - return com.baomidou.mybatisplus.core.metadata.OrderItem.asc(orderItemDTO.getColumn()); - } else { - return com.baomidou.mybatisplus.core.metadata.OrderItem.desc(orderItemDTO.getColumn()); - } - } - - /** - * 转换为 PageResultDTO 对象 - * - * @param page - * @param sourceList 原list - * @param targetClazz 目标类 - * @return - * @author yandanyang - * @date 2018年5月16日 下午6:05:28 - */ - public static PageResultDTO convert2PageResult(IPage page, List sourceList, Class targetClazz) { - PageResultDTO pageResultDTO = setPage(page); - List records = SmartBeanUtil.copyList(sourceList, targetClazz); - page.setRecords(records); - pageResultDTO.setList(records); - return pageResultDTO; - } - - /** - * 转换为 PageResultDTO 对象 - * - * @param page - * @param sourceList list - * @return - * @author yandanyang - * @date 2018年5月16日 下午6:05:28 - */ - public static PageResultDTO convert2PageResult(IPage page, List sourceList) { - PageResultDTO pageResultDTO = setPage(page); - page.setRecords(sourceList); - pageResultDTO.setList(sourceList); - return pageResultDTO; - } - - private static PageResultDTO setPage(IPage page) { - PageResultDTO pageResultDTO = new PageResultDTO(); - pageResultDTO.setPageNum(page.getCurrent()); - pageResultDTO.setPageSize(page.getSize()); - pageResultDTO.setTotal(page.getTotal()); - pageResultDTO.setPages(page.getPages()); - return pageResultDTO; - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartQuartzUtil.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartQuartzUtil.java deleted file mode 100644 index 14003e6d..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartQuartzUtil.java +++ /dev/null @@ -1,43 +0,0 @@ -package net.lab1024.smartadmin.util; - -import net.lab1024.smartadmin.module.support.quartz.constant.QuartzConst; -import org.apache.commons.lang3.StringUtils; -import org.quartz.JobKey; -import org.quartz.TriggerKey; - -/** - * [ ] - * - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2018 1024lab.netInc. All rights reserved. - * @date 2019/4/13 0013 下午 15:16 - * @since JDK1.8 - */ -public class SmartQuartzUtil { - - public static Long getTaskIdByJobKey(JobKey jobKey) { - String name = jobKey.getName(); - return Long.valueOf(StringUtils.replace(name, QuartzConst.JOB_KEY_PREFIX, "")); - } - - public static Integer getTaskIdByTriggerKey(TriggerKey triggerKey) { - String name = triggerKey.getName(); - return Integer.valueOf(StringUtils.replace(name, QuartzConst.TRIGGER_KEY_PREFIX, "")); - } - - /** - * 获取触发器key - */ - public static TriggerKey getTriggerKey(Long taskId) { - return TriggerKey.triggerKey(QuartzConst.TRIGGER_KEY_PREFIX + taskId); - } - - /** - * 获取jobKey - */ - public static JobKey getJobKey(Long taskId) { - return JobKey.jobKey(QuartzConst.JOB_KEY_PREFIX + taskId); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartRequestTokenUtil.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartRequestTokenUtil.java deleted file mode 100644 index 7ae5f5fc..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartRequestTokenUtil.java +++ /dev/null @@ -1,51 +0,0 @@ -package net.lab1024.smartadmin.util; - -import net.lab1024.smartadmin.module.system.login.domain.RequestTokenBO; -import org.springframework.web.context.request.RequestAttributes; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; - -import javax.servlet.http.HttpServletRequest; -/** - * @author yandanyang - * @version 1.0 - * @company 1024lab.net - * @copyright (c) 2019 1024lab.netInc. All rights reserved. - * @date - * @since JDK1.8 - */ -public class SmartRequestTokenUtil { - - private static final String USER_KEY = "smart_admin_user"; - - private static ThreadLocal RequestUserThreadLocal = new ThreadLocal(); - - public static void setUser(HttpServletRequest request, RequestTokenBO requestToken) { - request.setAttribute(USER_KEY, requestToken); - RequestUserThreadLocal.set(requestToken); - } - - public static RequestTokenBO getThreadLocalUser() { - return RequestUserThreadLocal.get(); - } - - public static RequestTokenBO getRequestUser() { - RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); - if (requestAttributes != null) { - HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest(); - if (request != null) { - return (RequestTokenBO) request.getAttribute(USER_KEY); - } - } - return null; - } - - public static Long getRequestUserId() { - RequestTokenBO requestUser = getRequestUser(); - if (null == requestUser) { - return null; - } - return requestUser.getRequestUserId(); - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartSendMailUtil.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartSendMailUtil.java deleted file mode 100644 index b5bee5f6..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartSendMailUtil.java +++ /dev/null @@ -1,243 +0,0 @@ -package net.lab1024.smartadmin.util; - -import lombok.extern.slf4j.Slf4j; - -import javax.activation.DataHandler; -import javax.activation.DataSource; -import javax.mail.Authenticator; -import javax.mail.PasswordAuthentication; -import javax.mail.Session; -import javax.mail.Transport; -import javax.mail.internet.*; -import javax.mail.util.ByteArrayDataSource; -import java.io.InputStream; -import java.util.Date; -import java.util.LinkedList; -import java.util.List; -import java.util.Properties; -import java.util.regex.Pattern; - -@Slf4j -public class SmartSendMailUtil { - - /** - * 邮箱正则表达式 - */ - static final Pattern pattern = Pattern.compile("^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$"); - - public static void main(String[] args) throws Exception { - // 发件人的 邮箱 和 密码(替换为自己的邮箱和密码) - // PS: 某些邮箱服务器为了增加邮箱本身密码的安全性,给 SMTP 客户端设置了独立密码(有的邮箱称为“授权码”), - // 对于开启了独立密码的邮箱, 这里的邮箱密码必需使用这个独立密码(授权码)。 - String myEmailAccount = "xxxxx@163.com"; - String myEmailPassword = "xxxxxx"; - // 发件人邮箱的 SMTP 服务器地址, 必须准确, 不同邮件服务器地址不同, 一般(只是一般, 绝非绝对)格式为: smtp.xxx.com - // 网易163邮箱的 SMTP 服务器地址为: smtp.163.com - String myEmailSMTPHost = "smtp.163.com"; - // 收件人邮箱(替换为自己知道的有效邮箱) - String[] toMailAccountList = new String[]{"421316927@qq.com"}; - SmartSendMailUtil.sendMail(myEmailAccount, myEmailPassword, "", toMailAccountList, "", myEmailSMTPHost, "测试发送邮件", "测试发送邮件"); - - } - - /** - * 发送文本邮件 - * - * @param sendMail 发件人邮箱 - * @param sendMailPwd 发件人密码 - * @param sendMailName 发件人昵称(可选) - * @param receiveMail 收件人邮箱 - * @param receiveMailName 收件人昵称(可选) - * @param sendSMTPHost 发件人邮箱的 SMTP 服务器地址, 必须准确, 不同邮件服务器地址不同, 一般(只是一般, 绝非绝对)格式为: smtp.xxx.com - * @param title 邮件主题 - * @param content 邮件正文 - * @author Administrator - * @date 2017年12月13日 下午1:51:38 - */ - public static void sendMail(String sendMail, String sendMailPwd, String sendMailName, String[] receiveMail, String receiveMailName, String sendSMTPHost, String title, String content) { - - Session session = createSession(sendSMTPHost); - // 3. 创建一封邮件 - MimeMessage message; - try { - message = createMimeMessage(session, sendMail, sendMailName, receiveMail, receiveMailName, title, content); - // 4. 根据 Session 获取邮件传输对象 - Transport transport = session.getTransport(); - - // 5. 使用 邮箱账号 和 密码 连接邮件服务器, 这里认证的邮箱必须与 message 中的发件人邮箱一致, 否则报错 - // - // PS_01: 成败的判断关键在此一句, 如果连接服务器失败, 都会在控制台输出相应失败原因的 log, - // 仔细查看失败原因, 有些邮箱服务器会返回错误码或查看错误类型的链接, 根据给出的错误 - // 类型到对应邮件服务器的帮助网站上查看具体失败原因。 - // - // PS_02: 连接失败的原因通常为以下几点, 仔细检查代码: - // (1) 邮箱没有开启 SMTP 服务; - // (2) 邮箱密码错误, 例如某些邮箱开启了独立密码; - // (3) 邮箱服务器要求必须要使用 SSL 安全连接; - // (4) 请求过于频繁或其他原因, 被邮件服务器拒绝服务; - // (5) 如果以上几点都确定无误, 到邮件服务器网站查找帮助。 - // - // PS_03: 仔细看log, 认真看log, 看懂log, 错误原因都在log已说明。 - transport.connect(sendMail, sendMailPwd); - // 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人 - transport.sendMessage(message, message.getAllRecipients()); - // 7. 关闭连接 - transport.close(); - } catch (Exception e) { - log.error("", e); - } - - } - - /** - * 发送带附件的邮件 - * - * @param sendMail 发件人邮箱 - * @param sendMailPwd 发件人密码 - * @param sendMailName 发件人昵称(可选) - * @param receiveMail 收件人邮箱 - * @param receiveMailName 收件人昵称(可选) - * @param sendSMTPHost 发件人邮箱的 SMTP 服务器地址, 必须准确, 不同邮件服务器地址不同, 一般(只是一般, 绝非绝对)格式为: smtp.xxx.com - * @param title 邮件主题 - * @param content 邮件正文 - * @author Administrator - * @date 2017年12月13日 下午1:51:38 - */ - public static void sendFileMail(String sendMail, String sendMailPwd, String sendMailName, String[] receiveMail, String receiveMailName, String sendSMTPHost, String title, String content, - InputStream is, String fileName, String port) { - - Session session = createSSLSession(sendSMTPHost, port, sendMailName, sendMailPwd); - // 3. 创建一封邮件 - MimeMessage message; - try { - message = createMimeMessage(session, sendMail, sendMailName, receiveMail, receiveMailName, title, content); - // 5. Content: 邮件正文(可以使用html标签)(内容有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改发送内容) - MimeMultipart mm = new MimeMultipart(); - MimeBodyPart text = new MimeBodyPart(); - text.setContent(content, "text/html;charset=UTF-8"); - mm.addBodyPart(text); - if (null != is && is.available() > 0) { - MimeBodyPart attachment = new MimeBodyPart(); - DataSource source = new ByteArrayDataSource(is, "application/msexcel"); - // 将附件数据添加到"节点" - attachment.setDataHandler(new DataHandler(source)); - // 设置附件的文件名(需要编码) - attachment.setFileName(MimeUtility.encodeText(fileName)); - // 10. 设置文本和 附件 的关系(合成一个大的混合"节点" / Multipart ) - // 如果有多个附件,可以创建多个多次添加 - mm.addBodyPart(attachment); - } - message.setContent(mm); - message.saveChanges(); - // 4. 根据 Session 获取邮件传输对象 - Transport transport = session.getTransport("smtp"); - transport.connect(sendSMTPHost, sendMail, sendMailPwd); - // // 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人 - transport.sendMessage(message, message.getAllRecipients()); - // 7. 关闭连接 - } catch (Exception e) { - log.error("", e); - } - - } - - /** - * 创建session - * - * @author lidoudou - * @date 2019/2/16 14:59 - */ - private static Session createSSLSession(String sendSMTPHost, String port, String userName, String pwd) { - // 1. 创建参数配置, 用于连接邮件服务器的参数配置 - Properties props = new Properties(); // 参数配置 - - props.setProperty("mail.smtp.user", userName); - props.setProperty("mail.smtp.password", pwd); - props.setProperty("mail.smtp.host", sendSMTPHost); - props.setProperty("mail.smtp.port", port); - props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); - props.setProperty("mail.smtp.socketFactory.fallback", "false"); - props.setProperty("mail.smtp.socketFactory.port", port); - props.put("mail.smtp.auth", "true"); - - // 2. 根据配置创建会话对象, 用于和邮件服务器交互 - Session session = Session.getDefaultInstance(props, new Authenticator() { - //身份认证 - @Override - protected PasswordAuthentication getPasswordAuthentication() { - return new PasswordAuthentication(userName, pwd); - } - }); - session.setDebug(true); // 设置为debug模式, 可以查看详细的发送 log - return session; - } - - /** - * 创建session - * - * @author lidoudou - * @date 2019/2/16 14:59 - */ - private static Session createSession(String sendSMTPHost) { - // 1. 创建参数配置, 用于连接邮件服务器的参数配置 - Properties props = new Properties(); // 参数配置 - props.setProperty("mail.transport.protocol", "smtp"); // 使用的协议(JavaMail规范要求) - props.setProperty("mail.smtp.host", sendSMTPHost); // 发件人的邮箱的 SMTP 服务器地址 - props.setProperty("mail.smtp.auth", "true"); // 需要请求认证 - // PS: 某些邮箱服务器要求 SMTP 连接需要使用 SSL 安全认证 (为了提高安全性, 邮箱支持SSL连接, 也可以自己开启), - // 如果无法连接邮件服务器, 仔细查看控制台打印的 log, 如果有有类似 “连接失败, 要求 SSL 安全连接” 等错误, - // 打开下面 /* ... */ 之间的注释代码, 开启 SSL 安全连接。 - /* - * // SMTP 服务器的端口 (非 SSL 连接的端口一般默认为 25, 可以不添加, 如果开启了 SSL 连接, // 需要改为对应邮箱的 SMTP 服务器的端口, - * 具体可查看对应邮箱服务的帮助, // QQ邮箱的SMTP(SLL)端口为465或587, 其他邮箱自行去查看) final String smtpPort = "465"; - * props.setProperty("mail.smtp.port", smtpPort); - * props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); - * props.setProperty("mail.smtp.socketFactory.fallback", "false"); - * props.setProperty("mail.smtp.socketFactory.port", smtpPort); - */ - // 2. 根据配置创建会话对象, 用于和邮件服务器交互 - Session session = Session.getInstance(props); - session.setDebug(true); // 设置为debug模式, 可以查看详细的发送 log - return session; - } - - /** - * 创建一封只包含文本的简单邮件 - * - * @param session 和服务器交互的会话 - * @param sendMail 发件人邮箱 - * @param sendMailName 发件人昵称 - * @param receiveMail 收件人邮箱 - * @param receiveMailName 收件人昵称 - * @param title 邮件主题 - * @param content 邮件正文 - * @return - * @throws Exception - * @author Administrator - * @date 2017年12月13日 下午1:55:45 - */ - public static MimeMessage createMimeMessage(Session session, String sendMail, String sendMailName, String[] receiveMail, String receiveMailName, String title, String content) throws Exception { - // 1. 创建一封邮件 - MimeMessage message = new MimeMessage(session); - // 2. From: 发件人(昵称有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改昵称) - message.setFrom(new InternetAddress(sendMail, sendMailName, "UTF-8")); - // 3. To: 收件人(可以增加多个收件人、抄送、密送) - List to = new LinkedList<>(); - for (String s : receiveMail) { - if (pattern.matcher(s).matches()) { - to.add(new InternetAddress(s)); - } - } - //Address[] addresses = new Address[]{new InternetAddress(receiveMail),new InternetAddress(receiveMail)}; - message.addRecipients(MimeMessage.RecipientType.TO, to.toArray((new InternetAddress[to.size()]))); - // 4. Subject: 邮件主题(标题有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改标题) - message.setSubject(title, "UTF-8"); - // 5. Content: 邮件正文(可以使用html标签)(内容有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改发送内容) - message.setContent(content, "text/html;charset=UTF-8"); - // 6. 设置发件时间 - message.setSentDate(new Date()); - // 7. 保存设置 - message.saveChanges(); - return message; - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartThreadFactory.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartThreadFactory.java deleted file mode 100644 index 367f2b17..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartThreadFactory.java +++ /dev/null @@ -1,44 +0,0 @@ -package net.lab1024.smartadmin.util; - -import java.util.concurrent.ThreadFactory; -import java.util.concurrent.atomic.AtomicInteger; - -/** - * 拥有自己的thread facotry是为了jstack时候能看到是哪个线程 - * - * @author jiaozi - */ -public class SmartThreadFactory implements ThreadFactory { - - public static SmartThreadFactory create(String namePrefix) { - return new SmartThreadFactory(namePrefix); - } - - private final AtomicInteger poolNumber = new AtomicInteger(1); - - private final ThreadGroup group; - - private final AtomicInteger threadNumber = new AtomicInteger(1); - - private final String namePrefix; - - private SmartThreadFactory(String namePrefix) { - SecurityManager s = System.getSecurityManager(); - group = (s != null) ? s.getThreadGroup() : Thread.currentThread().getThreadGroup(); - this.namePrefix = namePrefix + " pool " + poolNumber.getAndIncrement() + "-thread-"; - } - - @Override - public Thread newThread(Runnable r) { - Thread t = new Thread(group, r, namePrefix + threadNumber.getAndIncrement(), 0); - if (t.isDaemon()) { - t.setDaemon(false); - } - - if (t.getPriority() != Thread.NORM_PRIORITY) { - t.setPriority(Thread.NORM_PRIORITY); - } - return t; - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/excel/SmartExcel.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/excel/SmartExcel.java deleted file mode 100644 index 47f6e8cd..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/excel/SmartExcel.java +++ /dev/null @@ -1,83 +0,0 @@ -package net.lab1024.smartadmin.util.excel; - -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -import org.apache.poi.hssf.usermodel.HSSFWorkbook; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; - -/** - * zhuoda - */ -public class SmartExcel { - - List sheetList = new ArrayList();; - - public SmartExcel(String fileName) { - org.apache.poi.ss.usermodel.Workbook workbook = null; - try { - workbook = fileName.endsWith(".xls") ? new HSSFWorkbook(new FileInputStream(fileName)) : new XSSFWorkbook(new FileInputStream(fileName)); - int numberOfSheets = workbook.getNumberOfSheets(); - for (int index = 0; index < numberOfSheets; index++) { - addSheet(new SmartSheet(workbook.getSheetAt(index))); - } - } catch (Throwable t) { - throw new RuntimeException(t); - } finally { - if (workbook != null) { - try { - workbook.close(); - } catch (IOException e) { - } - workbook = null; - } - } - } - - public SmartExcel(InputStream ins, SmartExcelFileType fileType) { - org.apache.poi.ss.usermodel.Workbook workbook = null; - try { - workbook = fileType == SmartExcelFileType.XLS ? new HSSFWorkbook(ins) : new XSSFWorkbook(ins); - int numberOfSheets = workbook.getNumberOfSheets(); - for (int index = 0; index < numberOfSheets; index++) { - addSheet(new SmartSheet(workbook.getSheetAt(index))); - } - } catch (Throwable t) { - throw new RuntimeException(t); - } finally { - if (workbook != null) { - try { - workbook.close(); - } catch (IOException e) { - } - workbook = null; - } - } - } - - final protected void addSheet(SmartSheet sheet) { - this.sheetList.add(sheet); - } - - final protected void addSheetList(Collection sheets) { - this.sheetList.addAll(sheets); - } - - final public List getSheetList() { - return sheetList; - } - - final public SmartSheet getSheet(String sheetName) { - for (SmartSheet sheet : sheetList) { - if (sheet.getName().equals(sheetName)) { - return sheet; - } - } - return null; - } -} - diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/excel/SmartExcelFileType.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/excel/SmartExcelFileType.java deleted file mode 100644 index 499e43db..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/excel/SmartExcelFileType.java +++ /dev/null @@ -1,10 +0,0 @@ -package net.lab1024.smartadmin.util.excel; - -/** - * @author zhuoda - */ -public enum SmartExcelFileType { - XLS, - XLSX - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/excel/SmartExcelReader.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/excel/SmartExcelReader.java deleted file mode 100644 index e5c1ba5b..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/excel/SmartExcelReader.java +++ /dev/null @@ -1,32 +0,0 @@ -package net.lab1024.smartadmin.util.excel; - -/** - * @author zhuoda - * @Date 2020/8/10 - */ - -import net.lab1024.smartadmin.util.SmartFileUtil; - -import java.io.*; - -public class SmartExcelReader { - - public static SmartExcel openExcel(String filePath) throws IOException { - SmartFileUtil.isFileExistThrowException(filePath); - return new SmartExcel(new File(filePath).getCanonicalPath()); - } - - public static SmartExcel openExcel(File file) throws IOException { - return new SmartExcel(file.getCanonicalPath()); - } - - public static SmartExcel openExcel(InputStream ins, SmartExcelFileType fileType) throws IOException { - return new SmartExcel(ins, fileType); - } - - public static void main(String[] args) throws Exception { - SmartExcel smartExcel = openExcel(new FileInputStream(new File("F:/privilege.xlsx")), SmartExcelFileType.XLSX); - System.out.println(smartExcel.getSheetList()); - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/excel/SmartSheet.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/excel/SmartSheet.java deleted file mode 100644 index 80aed760..00000000 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/excel/SmartSheet.java +++ /dev/null @@ -1,113 +0,0 @@ -package net.lab1024.smartadmin.util.excel; - - -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.CellType; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.ss.util.CellRangeAddress; - -/** - * @author zhuoda - */ -public class SmartSheet { - final String name; - - private final int rowCount; - private final int columnCount; - private final String[][] datas; - - public SmartSheet(org.apache.poi.ss.usermodel.Sheet sheet) { - this.name = sheet.getSheetName(); - this.rowCount = sheet.getLastRowNum() + 1; - // 初始化基本数据 - int maxColumnCount = 0; - this.datas = new String[rowCount][]; - for (int rowIndex = 0; rowIndex < rowCount; rowIndex++) { - Row row = sheet.getRow(rowIndex); - if (row == null) { - continue; - } - int _columnCount = row.getLastCellNum() + 1; - this.datas[rowIndex] = new String[_columnCount]; - for (int colIndex = 0; colIndex < _columnCount; colIndex++) { - this.datas[rowIndex][colIndex] = getCellContents(row.getCell(colIndex)); - } - if (maxColumnCount < _columnCount) { - maxColumnCount = _columnCount; - } - } - this.columnCount = maxColumnCount; - // 根据单元格合并情况,填充内容 - for (int index = 0; index < sheet.getNumMergedRegions(); index++) { - CellRangeAddress mergedRegion = sheet.getMergedRegion(index); - String upperLeftData = this.datas[mergedRegion.getFirstRow()][mergedRegion.getFirstColumn()]; - for (int rowIndex = mergedRegion.getFirstRow(); rowIndex <= mergedRegion.getLastRow(); rowIndex++) { - String[] _rowDatas = this.datas[rowIndex]; - if (_rowDatas == null) { - this.datas[rowIndex] = new String[mergedRegion.getLastColumn() + 1]; - } else if (_rowDatas.length < mergedRegion.getLastColumn() + 1) { - String[] newStrArray = new String[mergedRegion.getLastColumn() + 1]; - System.arraycopy(_rowDatas, 0, newStrArray, 0, _rowDatas.length); - this.datas[rowIndex] = newStrArray; - } - for (int colIndex = mergedRegion.getFirstColumn(); colIndex <= mergedRegion.getLastColumn(); colIndex++) { - this.datas[rowIndex][colIndex] = upperLeftData; - } - } - } - } - - private String getCellContents(Cell cell) { - if (cell == null) { - return null; - } - return getCellContents(cell.getCellType(), cell); - } - - private String getCellContents(CellType type, Cell cell) { - switch (type) { - case BLANK: - return ""; - case NUMERIC: - return cell.getStringCellValue(); - case STRING: - return cell.getStringCellValue(); - case FORMULA: - return getCellContents(cell.getCachedFormulaResultType(), cell); - case BOOLEAN: - return String.valueOf(cell.getBooleanCellValue()); - case ERROR: - default: - throw new IllegalArgumentException(String.format("unsupported cell type:%d, col:%d, row:%d, sheet:%s", cell.getCellType(), cell.getColumnIndex(), - cell.getRowIndex(), getName())); - } - } - - public int getRowCount() { - return rowCount; - } - - public int getColumnCount() { - return columnCount; - } - - public String getValue(int rowIndex, int columnIndex) { - if (rowIndex < 0 || rowIndex >= datas.length) { - return ""; - } - if (columnIndex < 0 || datas[rowIndex] == null || columnIndex >= datas[rowIndex].length) { - return ""; - } - String value = datas[rowIndex][columnIndex]; - return value == null ? "": value; - } - - - public String getName() { - return name; - } - - - -} - diff --git a/smart-admin-service/smart-admin-api/src/main/resources/dev/application.properties b/smart-admin-service/smart-admin-api/src/main/resources/dev/application.properties deleted file mode 100644 index b4468249..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/dev/application.properties +++ /dev/null @@ -1,123 +0,0 @@ -######################### server ################### -server.servlet.context-path=/smart-admin-api -server.port=10086 -spring.profiles.active=@profiles.active@ - -######################### tomcat ################### -server.tomcat.basedir=/home/logs/smart-admin/tomcat-logs -server.tomcat.accesslog.enabled=true -server.tomcat.accesslog.pattern=%t %{X-Forwarded-For}i %a "%r" %s %D (%D ms) - -######################### jackson ######################### -spring.jackson.serialization.write-enums-using-to-string=true -spring.jackson.deserialization.read-enums-using-to-string=true -spring.jackson.deserialization.fail-on-unknown-properties=false -spring.jackson.default-property-inclusion=always -spring.jackson.date-format=yyyy-MM-dd HH:mm:ss -spring.jackson.time-zone=GMT+8 -spring.jackson.serialization.write-dates-as-timestamps=false - -######################### http file ######################### -spring.servlet.multipart.max-file-size=30MB -spring.servlet.multipart.max-request-size=30MB -file-upload-service.path=/home/upload/ - -######################### database ######################### -spring.datasource.url=jdbc:p6spy:mysql://127.0.0.1:3306/smart-admin-dev?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&serverTimezone=UTC -spring.datasource.username=root -spring.datasource.password=Root.123 -spring.datasource.initial-size=2 -spring.datasource.min-idle=1 -spring.datasource.max-active=10 -spring.datasource.max-wait=60000 -spring.datasource.time-between-eviction-runs-millis=60000 -spring.datasource.min-evictable-idle-time-millis=300000 -spring.datasource.driver-class-name=com.p6spy.engine.spy.P6SpyDriver -spring.datasource.filters=stat -spring.datasource.druid.username=druid -spring.datasource.druid.password=123456 -spring.datasource.druid.login.enabled=false - -######################### redis ####################################### -spring.redis.database=0 -spring.redis.host=127.0.0.1 -spring.redis.port=6379 -spring.redis.timeout=10000ms -spring.redis.password= -spring.redis.lettuce.pool.max-active=10 -spring.redis.lettuce.pool.min-idle=5 -spring.redis.lettuce.pool.max-idle=10 -spring.redis.lettuce.pool.max-wait=30000ms - -########################## rest http pool ######################### -#\u6700\u5927\u8FDE\u63A5\u6570 -http.pool.max-total=10 -#\u5355\u8DEF\u7531\u6700\u5927\u8FDE\u63A5\u6570 -http.pool.default-max-per-route=5 -#\u670D\u52A1\u5668\u8FD4\u56DE\u6570\u636E(response)\u7684\u65F6\u95F4 -http.pool.socket-timeout=8000 -#\u8FDE\u63A5\u4E0A\u670D\u52A1\u5668(\u63E1\u624B\u6210\u529F)\u7684\u65F6\u95F4 -http.pool.connect-timeout=8000 -#\u4ECE\u8FDE\u63A5\u6C60\u4E2D\u83B7\u53D6\u8FDE\u63A5\u7684\u8D85\u65F6\u65F6\u95F4 -http.pool.connection-request-timeout=8000 - -######################### mybatis\u914D\u7F6E ######################### -mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl -# mybatis-plus \u5B57\u6BB5\u9A7C\u5CF0\u81EA\u52A8\u8F6C\u6362 -mybatis-plus.configuration.map-underscore-to-camel-case=true -mybatis-plus.mapper-locations=classpath:/mapper/**/*.xml -mybatis-plus.typeAliasesPackage=net.lab1024.smartadmin.*.*.domain.entity -mybatis-plus.global-config.refresh-mapper=true -mybatis-plus.global-config.db-column-underline=true - -######################### swagger ######################### -swagger.apiGroupName=smartAdmin -swagger.title=smartAdmin -swagger.description=smartAdmin -swagger.version=1.0 -swagger.serviceUrl=http://localhost:10086/smart-admin-api -swagger.packAge=net.lab1024.smartadmin.module - -######################### jwt ######################### -jwt.key=smart-admin-jwt-key - -########################## smart reload ######################### -smart-reload.thread-count=1 -smart-reload.time-interval=300 - -######################### cros ######################### -access-control-allow-origin=* - -######################### heart beat ######################### -heart-beat.delayHandlerTime=60000 -heart-beat.intervalTime=300000 - -######################### quartz ############################# -#\u8C03\u5EA6\u6807\u8BC6\u540D \u96C6\u7FA4\u4E2D\u6BCF\u4E00\u4E2A\u5B9E\u4F8B\u90FD\u5FC5\u987B\u4F7F\u7528\u76F8\u540C\u7684\u540D\u79F0 -spring.quartz.properties.org.quartz.scheduler.instanceName=devClusteredScheduler -spring.quartz.properties.org.quartz.scheduler.instanceId=AUTO -#\u8FDC\u7A0B\u7BA1\u7406\u76F8\u5173\u7684\u914D\u7F6E,\u5168\u90E8\u5173\u95ED -spring.quartz.properties.org.quartz.scheduler.rmi.export=false -spring.quartz.properties.org.quartz.scheduler.rmi.proxy=false -#\u8DF3\u8FC7quartz\u7248\u672C\u68C0\u67E5 -spring.quartz.properties.org.quartz.scheduler.skipUpdateCheck=true -#\u6570\u636E\u4FDD\u5B58\u65B9\u5F0F\u4E3A\u6301\u4E45\u5316 -spring.quartz.properties.org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX -spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate -spring.quartz.properties.org.quartz.jobStore.tablePrefix=QRTZ_ -spring.quartz.properties.org.quartz.jobStore.isClustered=true -#\u8C03\u5EA6\u5B9E\u4F8B\u5931\u6548\u7684\u68C0\u67E5\u65F6\u95F4\u95F4\u9694, \u5F00\u53D1\u73AF\u5883\u6539\u4E3A\u4E8660\u79D2 -spring.quartz.properties.org.quartz.jobStore.clusterCheckinInterval=60000 -spring.quartz.properties.org.quartz.jobStore.useProperties=false -#\u8C03\u5EA6\u7EBF\u7A0B -spring.quartz.properties.org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool -spring.quartz.properties.org.quartz.threadPool.threadCount=2 -spring.quartz.properties.org.quartz.threadPool.threadPriority=5 -spring.quartz.properties.org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true -spring.quartz.properties.org.quartz.threadPool.threadNamePrefix=quartz -spring.quartz.job-store-type=jdbc -#ALWAYS,EMBEDDED,NEVER -spring.quartz.jdbc.initialize-schema=NEVER -spring.quartz.jdbc.schema=classpath:sql/quartz_mysql_2.3.0.sql -#\u81EA\u52A8\u626B\u63CF\u4EFB\u52A1\u5355\u5E76\u53D1\u73B0\u6539\u52A8\u7684\u65F6\u95F4\u95F4\u9694,\u5355\u4F4D\u4E3A\u79D2 -org.quartz.plugin.jobInitializer.scanInterval = 300 diff --git a/smart-admin-service/smart-admin-api/src/main/resources/dev/spy.properties b/smart-admin-service/smart-admin-api/src/main/resources/dev/spy.properties deleted file mode 100644 index 22c91d1e..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/dev/spy.properties +++ /dev/null @@ -1,20 +0,0 @@ -#modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory -# \u81EA\u5B9A\u4E49\u65E5\u5FD7\u6253\u5370 -logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger -#\u65E5\u5FD7\u8F93\u51FA\u5230\u63A7\u5236\u53F0 -appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger -# \u4F7F\u7528\u65E5\u5FD7\u7CFB\u7EDF\u8BB0\u5F55 sql -#appender=com.p6spy.engine.spy.appender.Slf4JLogger -# \u8BBE\u7F6E p6spy driver \u4EE3\u7406 -deregisterdrivers=true -# \u53D6\u6D88JDBC URL\u524D\u7F00 -useprefix=true -# \u914D\u7F6E\u8BB0\u5F55 Log \u4F8B\u5916,\u53EF\u53BB\u6389\u7684\u7ED3\u679C\u96C6\u6709error,info,batch,debug,statement,commit,rollback,result,resultset. -#excludecategories=info,debug,result,commit,resultset -# \u65E5\u671F\u683C\u5F0F -dateformat=yyyy-MM-dd HH:mm:ss - -# \u662F\u5426\u5F00\u542F\u6162SQL\u8BB0\u5F55 -outagedetection=true -# \u6162SQL\u8BB0\u5F55\u6807\u51C6 2 \u79D2 -outagedetectioninterval=2 \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/mapper/business/email/EmailMapper.xml b/smart-admin-service/smart-admin-api/src/main/resources/mapper/business/email/EmailMapper.xml deleted file mode 100644 index 6050de51..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/mapper/business/email/EmailMapper.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - delete from t_email where id = #{id} - - - - delete from t_email where id in - - #{item} - - - - \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/mapper/business/log/OrderOperateLogMapper.xml b/smart-admin-service/smart-admin-api/src/main/resources/mapper/business/log/OrderOperateLogMapper.xml deleted file mode 100644 index 46f92a00..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/mapper/business/log/OrderOperateLogMapper.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - INSERT INTO t_order_operate_log (order_id,order_type, operate_type, operate_content, operate_remark, employee_id, employee_name,ext_data,update_time,create_time) VALUES - - (#{item.orderId}, - #{item.orderType}, - #{item.operateType}, - #{item.operateContent}, - #{item.operateRemark}, - #{item.employeeId}, - #{item.employeeName}, - #{item.extData}, - #{item.updateTime} - #{item.createTime} - ) - - - - - diff --git a/smart-admin-service/smart-admin-api/src/main/resources/mapper/business/log/UserLoginLogMapper.xml b/smart-admin-service/smart-admin-api/src/main/resources/mapper/business/log/UserLoginLogMapper.xml deleted file mode 100644 index 87b0df3b..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/mapper/business/log/UserLoginLogMapper.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - delete from t_user_login_log where id = #{id} - - - - delete from t_user_login_log where id in - - #{item} - - - - \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/mapper/business/log/UserOperateLogMapper.xml b/smart-admin-service/smart-admin-api/src/main/resources/mapper/business/log/UserOperateLogMapper.xml deleted file mode 100644 index 7088f2c4..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/mapper/business/log/UserOperateLogMapper.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - delete from t_user_operate_log where id = #{id} - - - - delete from t_user_operate_log where id in - - #{item} - - - - \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/mapper/business/notice/NoticeMapper.xml b/smart-admin-service/smart-admin-api/src/main/resources/mapper/business/notice/NoticeMapper.xml deleted file mode 100644 index d94c0ab7..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/mapper/business/notice/NoticeMapper.xml +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - UPDATE t_notice - set deleted = #{deletedFlag} - WHERE id =#{id} - - - - - UPDATE t_notice set deleted = #{deletedFlag} where id in - - #{item} - - - - - - - - - - - - - - \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/mapper/business/notice/NoticeReceiveRecordMapper.xml b/smart-admin-service/smart-admin-api/src/main/resources/mapper/business/notice/NoticeReceiveRecordMapper.xml deleted file mode 100644 index 66168c57..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/mapper/business/notice/NoticeReceiveRecordMapper.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - delete from t_notice_receive_record where notice_id = #{noticeId} - - - - INSERT INTO t_notice_receive_record (notice_id, employee_id, update_time, create_time) VALUES - - ( - #{item.noticeId}, - #{item.employeeId}, - now(), - now() - ) - - - - - - - - - - \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/mapper/business/peony/PeonyMapper.xml b/smart-admin-service/smart-admin-api/src/main/resources/mapper/business/peony/PeonyMapper.xml deleted file mode 100644 index 4be1a0f5..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/mapper/business/peony/PeonyMapper.xml +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - - - - - - - - - delete from t_peony where id = #{id} - - - - delete from t_peony where id in - - #{item} - - - - \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/codegenerator/TableMapper.xml b/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/codegenerator/TableMapper.xml deleted file mode 100644 index 4af675b6..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/codegenerator/TableMapper.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/file/FileMapper.xml b/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/file/FileMapper.xml deleted file mode 100644 index 04abb76d..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/file/FileMapper.xml +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - - - - INSERT INTO t_file ( - module_id, - module_type, - file_name, - file_size, - file_type, - file_path, - creater_user, - file_location_type - ) - VALUES - - (#{item.moduleId},#{item.moduleType},#{item.fileName},#{item.fileSize},#{item.fileType},#{item.filePath},#{item.createrUser},#{item.createrUserType},#{item.fileLocationType}) - - - - - INSERT INTO t_file ( - module_id, - module_type, - file_name, - file_size, - file_type, - file_path, - creater_user, - file_location_type - ) - VALUES - - (#{item.moduleId},#{item.moduleType},#{item.fileName},#{item.fileSize},#{item.fileType},#{item.filePath},#{item.createrUser},#{item.createrUserType},#{item.fileLocationType}) - - - - - DELETE FROM t_file WHERE module_id =#{moduleId} - - - - DELETE FROM t_file WHERE module_id =#{moduleId} and module_type=#{moduleType} - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/heartbeat/HeartBeatRecordMapper.xml b/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/heartbeat/HeartBeatRecordMapper.xml deleted file mode 100644 index 27ce75e6..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/heartbeat/HeartBeatRecordMapper.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - INSERT INTO t_heart_beat_record ( - project_path, - server_ip, - process_no, - process_start_time, - heart_beat_time - ) - VALUES - (#{projectPath}, - #{serverIp}, - #{processNo}, - #{processStartTime}, - #{heartBeatTime}) - - - - update t_heart_beat_record - set heart_beat_time = #{heartBeatTime} - - id = #{id} - - - - - - - diff --git a/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/idgenerator/IdGeneratorMapper.xml b/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/idgenerator/IdGeneratorMapper.xml deleted file mode 100644 index df3b86c5..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/idgenerator/IdGeneratorMapper.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - update t_id_generator set last_number = #{lastNumber}, update_time = now() where id = #{generatorId} - - - - replace into `t_id_generator_record` (`generator_id`, `year`, `month`, `day`, `last_number`) values (#{generatorId}, #{year}, #{month}, #{day}, #{lastNumber}) - - - - \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/quartz/QuartzTaskLogMapper.xml b/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/quartz/QuartzTaskLogMapper.xml deleted file mode 100644 index 43f25e05..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/quartz/QuartzTaskLogMapper.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - tl.id, - tl.task_id, - tl.task_name, - tl.task_params, - tl.process_status, - tl.process_duration, - tl.process_log, - tl.ip_address, - tl.update_time, - tl.create_time - - - - - - \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/quartz/QuartzTaskMapper.xml b/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/quartz/QuartzTaskMapper.xml deleted file mode 100644 index 0bb88311..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/quartz/QuartzTaskMapper.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - t.id, - t.task_name, - t.task_bean, - t.task_params, - t.task_cron, - t.task_status, - t.remark, - t.update_time, - t.create_time - - - - - - - - UPDATE t_quartz_task t - set t.task_status = #{taskStatus} - WHERE t.id = #{taskId} - - - - \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/smartreload/ReloadItemMapper.xml b/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/smartreload/ReloadItemMapper.xml deleted file mode 100644 index 03c1f67f..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/smartreload/ReloadItemMapper.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/smartreload/ReloadResultMapper.xml b/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/smartreload/ReloadResultMapper.xml deleted file mode 100644 index 6c0caba1..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/smartreload/ReloadResultMapper.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/department/DepartmentMapper.xml b/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/department/DepartmentMapper.xml deleted file mode 100644 index 837a287c..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/department/DepartmentMapper.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - d.id, - d.name, - d.short_name, - d.manager_id, - d.parent_id, - d.sort, - d.update_time, - d.create_time - - - - - - - - - - - \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/employee/EmployeeMapper.xml b/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/employee/EmployeeMapper.xml deleted file mode 100644 index 2b13a478..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/employee/EmployeeMapper.xml +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - - - - - - e.id, - e.login_name, - e.login_pwd, - e.actual_name, - e.nick_name, - e.phone, - e.id_card, - e.birthday, - e.email, - e.department_id, - e.is_leave, - e.is_disabled, - e.remark, - e.is_delete, - e.update_time, - e.create_time - - - - - - - UPDATE t_employee e - set e.is_disabled = #{isDisabled} - WHERE id in - - #{item} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - UPDATE t_employee - SET login_pwd = #{password} - WHERE id = #{employeeId} - - - - \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/position/PositionMapper.xml b/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/position/PositionMapper.xml deleted file mode 100644 index a7ef4cce..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/position/PositionMapper.xml +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - id, - position_name, - remark, - update_time, - create_time - - - - - - - - - - INSERT INTO t_position_relation (position_id,employee_id) VALUES - - (#{item},#{batchDTO.employeeId}) - - - - - - DELETE FROM t_position_relation WHERE employee_id = #{employeeId} - - - \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/privilege/PrivilegeMapper.xml b/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/privilege/PrivilegeMapper.xml deleted file mode 100644 index 7d224b22..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/privilege/PrivilegeMapper.xml +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - p.id, - p.type, - p.name, - p.key, - p.url, - p.sort, - p.parent_key, - p.update_time, - p.create_time - - - - - - - - - - DELETE FROM t_privilege - WHERE `key` IN - - #{item} - - - - - DELETE FROM t_privilege - WHERE parent_key IN - - #{item} - - - - - INSERT INTO t_privilege (`type`, `name`, `key`,url,sort,parent_key,create_time,update_time) VALUES - - ( - #{item.type}, - #{item.name}, - #{item.key}, - #{item.url}, - #{item.sort}, - #{item.parentKey}, - now(), - now() - ) - - - - - - UPDATE t_privilege - SET `type`=#{item.type},`name`=#{item.name},url=#{item.url},sort=#{item.sort},parent_key=#{item.parentKey},update_time=now() - WHERE `key` = #{item.key} - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/role/RoleEmployeeMapper.xml b/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/role/RoleEmployeeMapper.xml deleted file mode 100644 index 5984cb7d..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/role/RoleEmployeeMapper.xml +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - er.id, - er.role_id, - er.employee_id, - er.update_time, - er.create_time - - - - - - - - - - - - - DELETE FROM t_role_employee - WHERE employee_id = #{employeeId} - - - - - DELETE FROM t_role_employee - WHERE role_id = #{roleId} - - - - DELETE FROM t_role_employee - WHERE role_id = #{roleId} and employee_id = #{employeeId} - - - - - DELETE FROM t_role_employee - WHERE role_id = #{roleId} and employee_id in - - #{item} - - - - - INSERT INTO t_role_employee (role_id, employee_id, update_time, create_time) VALUES - - ( - #{item.roleId}, - #{item.employeeId}, - now(), - now() - ) - - - - - \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/role/RoleMapper.xml b/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/role/RoleMapper.xml deleted file mode 100644 index 5b7177dd..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/role/RoleMapper.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - r.id, - r.role_name, - r.remark, - r.update_time, - r.create_time - - - - - - \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/role/RolePrivilegeMapper.xml b/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/role/RolePrivilegeMapper.xml deleted file mode 100644 index cb44911b..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/role/RolePrivilegeMapper.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - rp.id, - rp.role_id, - rp.privilege_key, - rp.update_time, - rp.create_time - - - - - DELETE FROM t_role_privilege - WHERE role_id = #{roleId} - - - - DELETE FROM t_role_privilege - WHERE privilege_key in - - #{item} - - - - - - INSERT INTO t_role_privilege (role_id, privilege_key, update_time, create_time) VALUES - - ( - #{item.roleId}, - #{item.privilegeKey}, - now(), - now() - ) - - - - - - - - - - - \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/systemconfig/SystemConfigMapper.xml b/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/systemconfig/SystemConfigMapper.xml deleted file mode 100644 index 1cebf85b..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/systemconfig/SystemConfigMapper.xml +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/pre/application.properties b/smart-admin-service/smart-admin-api/src/main/resources/pre/application.properties deleted file mode 100644 index fb3de5e5..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/pre/application.properties +++ /dev/null @@ -1,121 +0,0 @@ -######################### server ################### -server.servlet.context-path=/smart-admin-api -server.port=10086 -spring.profiles.active=@profiles.active@ - -######################### tomcat ################### -server.tomcat.basedir=/home/logs/smart-admin/tomcat-logs -server.tomcat.accesslog.enabled=true -server.tomcat.accesslog.pattern=%t %{X-Forwarded-For}i %a "%r" %s %D (%D ms) - -######################### jackson ######################### -spring.jackson.serialization.write-enums-using-to-string=true -spring.jackson.deserialization.read-enums-using-to-string=true -spring.jackson.deserialization.fail-on-unknown-properties=false -spring.jackson.default-property-inclusion=always -spring.jackson.date-format=yyyy-MM-dd HH:mm:ss -spring.jackson.time-zone=GMT+8 -spring.jackson.serialization.write-dates-as-timestamps=false - -######################### http file ######################### -spring.servlet.multipart.max-file-size=30MB -spring.servlet.multipart.max-request-size=30MB -file-upload-service.path=/home/upload/ - -######################### database ######################### -spring.datasource.url=jdbc:mysql://127.0.0.1:3306/smart-admin-dev?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&serverTimezone=UTC -spring.datasource.username=root -spring.datasource.password=root -spring.datasource.initial-size=2 -spring.datasource.min-idle=1 -spring.datasource.max-active=10 -spring.datasource.max-wait=60000 -spring.datasource.time-between-eviction-runs-millis=60000 -spring.datasource.min-evictable-idle-time-millis=300000 -spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -spring.datasource.filters=stat -spring.datasource.druid.username=druid -spring.datasource.druid.password=123456 -spring.datasource.druid.login.enabled=false - -######################### redis ####################################### -spring.redis.database=0 -spring.redis.host=127.0.0.1 -spring.redis.port=6379 -spring.redis.timeout=10000ms -spring.redis.password= -spring.redis.lettuce.pool.max-active=10 -spring.redis.lettuce.pool.min-idle=5 -spring.redis.lettuce.pool.max-idle=10 -spring.redis.lettuce.pool.max-wait=30000ms - -########################## rest http pool ######################### -#\u6700\u5927\u8FDE\u63A5\u6570 -http.pool.max-total=10 -#\u5355\u8DEF\u7531\u6700\u5927\u8FDE\u63A5\u6570 -http.pool.default-max-per-route=5 -#\u670D\u52A1\u5668\u8FD4\u56DE\u6570\u636E(response)\u7684\u65F6\u95F4 -http.pool.socket-timeout=8000 -#\u8FDE\u63A5\u4E0A\u670D\u52A1\u5668(\u63E1\u624B\u6210\u529F)\u7684\u65F6\u95F4 -http.pool.connect-timeout=8000 -#\u4ECE\u8FDE\u63A5\u6C60\u4E2D\u83B7\u53D6\u8FDE\u63A5\u7684\u8D85\u65F6\u65F6\u95F4 -http.pool.connection-request-timeout=8000 - -######################### mybatis\u914D\u7F6E ######################### -mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl -# mybatis-plus \u5B57\u6BB5\u9A7C\u5CF0\u81EA\u52A8\u8F6C\u6362 -mybatis-plus.configuration.map-underscore-to-camel-case=true -mybatis-plus.mapper-locations=classpath:/mapper/**/*.xml -mybatis-plus.typeAliasesPackage=net.lab1024.smartadmin.*.*.domain.entity -mybatis-plus.global-config.refresh-mapper=true -mybatis-plus.global-config.db-column-underline=true - -######################### swagger ######################### -swagger.apiGroupName=smartAdmin -swagger.title=smartAdmin -swagger.description=smartAdmin -swagger.version=1.0 -swagger.serviceUrl=http://localhost:10086/smart-admin-api -swagger.packAge=net.lab1024.smartadmin.module - -######################### jwt ######################### -jwt.key=smart-admin-jwt-key - -########################## smart reload ######################### -smart-reload.thread-count=1 -smart-reload.time-interval=30 - -######################### cros ######################### -access-control-allow-origin=* - -######################### heart beat ######################### -heart-beat.delayHandlerTime=60000 -heart-beat.intervalTime=60000 - -######################### quartz ############################# -#\u8C03\u5EA6\u6807\u8BC6\u540D \u96C6\u7FA4\u4E2D\u6BCF\u4E00\u4E2A\u5B9E\u4F8B\u90FD\u5FC5\u987B\u4F7F\u7528\u76F8\u540C\u7684\u540D\u79F0 -spring.quartz.properties.org.quartz.scheduler.instanceName=devClusteredScheduler -spring.quartz.properties.org.quartz.scheduler.instanceId=AUTO -#\u8FDC\u7A0B\u7BA1\u7406\u76F8\u5173\u7684\u914D\u7F6E,\u5168\u90E8\u5173\u95ED -spring.quartz.properties.org.quartz.scheduler.rmi.export=false -spring.quartz.properties.org.quartz.scheduler.rmi.proxy=false -#\u8DF3\u8FC7quartz\u7248\u672C\u68C0\u67E5 -spring.quartz.properties.org.quartz.scheduler.skipUpdateCheck=true -#\u6570\u636E\u4FDD\u5B58\u65B9\u5F0F\u4E3A\u6301\u4E45\u5316 -spring.quartz.properties.org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX -spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate -spring.quartz.properties.org.quartz.jobStore.tablePrefix=QRTZ_ -spring.quartz.properties.org.quartz.jobStore.isClustered=true -#\u8C03\u5EA6\u5B9E\u4F8B\u5931\u6548\u7684\u68C0\u67E5\u65F6\u95F4\u95F4\u9694 -spring.quartz.properties.org.quartz.jobStore.clusterCheckinInterval=10000 -spring.quartz.properties.org.quartz.jobStore.useProperties=false -#\u8C03\u5EA6\u7EBF\u7A0B -spring.quartz.properties.org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool -spring.quartz.properties.org.quartz.threadPool.threadCount=2 -spring.quartz.properties.org.quartz.threadPool.threadPriority=5 -spring.quartz.properties.org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true -spring.quartz.properties.org.quartz.threadPool.threadNamePrefix=quartz -spring.quartz.job-store-type=jdbc -#ALWAYS,EMBEDDED,NEVER -spring.quartz.jdbc.initialize-schema=NEVER -spring.quartz.jdbc.schema=classpath:sql/quartz_mysql_2.3.0.sql diff --git a/smart-admin-service/smart-admin-api/src/main/resources/prod/application.properties b/smart-admin-service/smart-admin-api/src/main/resources/prod/application.properties deleted file mode 100644 index 94f75be2..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/prod/application.properties +++ /dev/null @@ -1,120 +0,0 @@ -######################### server ################### -server.servlet.context-path=/smart-admin-api -server.port=10088 -spring.profiles.active=@profiles.active@ - -######################### tomcat ################### -server.tomcat.basedir=/home/logs/smart-admin/tomcat-logs -server.tomcat.accesslog.enabled=true -server.tomcat.accesslog.pattern=%t %{X-Forwarded-For}i %a "%r" %s %D (%D ms) - -######################### jackson ######################### -spring.jackson.serialization.write-enums-using-to-string=true -spring.jackson.deserialization.read-enums-using-to-string=true -spring.jackson.deserialization.fail-on-unknown-properties=false -spring.jackson.default-property-inclusion=always -spring.jackson.date-format=yyyy-MM-dd HH:mm:ss -spring.jackson.time-zone=GMT+8 -spring.jackson.serialization.write-dates-as-timestamps=false - -######################### http file ######################### -spring.servlet.multipart.max-file-size=30MB -spring.servlet.multipart.max-request-size=30MB -file-upload-service.path=/home/upload/smart-admin-file - -######################### database ######################### -spring.datasource.url=jdbc:mysql://172.16.0.201:3306/smart-admin-prod?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true -spring.datasource.username=smart-admin -spring.datasource.password=Admin@123457 -spring.datasource.initial-size=2 -spring.datasource.min-idle=1 -spring.datasource.max-active=100 -spring.datasource.max-wait=60000 -spring.datasource.time-between-eviction-runs-millis=60000 -spring.datasource.min-evictable-idle-time-millis=300000 -spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -spring.datasource.filters=stat -spring.datasource.druid.username=druid -spring.datasource.druid.password=druid -spring.datasource.druid.login.enabled=false - -######################### redis ####################################### -spring.redis.database=13 -spring.redis.host=127.0.0.1 -spring.redis.port=6379 -spring.redis.timeout=10000ms -spring.redis.password=Gq123456@ -spring.redis.lettuce.pool.max-active=10 -spring.redis.lettuce.pool.min-idle=5 -spring.redis.lettuce.pool.max-idle=10 -spring.redis.lettuce.pool.max-wait=30000ms - -########################## rest http pool ######################### -#\u6700\u5927\u8FDE\u63A5\u6570 -http.pool.max-total=10 -#\u5355\u8DEF\u7531\u6700\u5927\u8FDE\u63A5\u6570 -http.pool.default-max-per-route=5 -#\u670D\u52A1\u5668\u8FD4\u56DE\u6570\u636E(response)\u7684\u65F6\u95F4 -http.pool.socket-timeout=8000 -#\u8FDE\u63A5\u4E0A\u670D\u52A1\u5668(\u63E1\u624B\u6210\u529F)\u7684\u65F6\u95F4 -http.pool.connect-timeout=8000 -#\u4ECE\u8FDE\u63A5\u6C60\u4E2D\u83B7\u53D6\u8FDE\u63A5\u7684\u8D85\u65F6\u65F6\u95F4 -http.pool.connection-request-timeout=8000 - -######################### mybatis\u914D\u7F6E ######################### -mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl -# mybatis-plus \u5B57\u6BB5\u9A7C\u5CF0\u81EA\u52A8\u8F6C\u6362 -mybatis-plus.configuration.map-underscore-to-camel-case=true -mybatis-plus.mapper-locations=classpath:/mapper/**/*.xml -mybatis-plus.typeAliasesPackage=net.lab1024.smartadmin.*.*.domain.entity -mybatis-plus.global-config.refresh-mapper=true -mybatis-plus.global-config.db-column-underline=true - -######################### swagger ######################### -swagger.apiGroupName=smartAdmin -swagger.title=smartAdmin -swagger.description=smartAdmin -swagger.version=1.0 -swagger.serviceUrl=http://localhost:10086/smart-admin-api -swagger.packAge=net.lab1024.smartadmin.module - -######################### jwt ######################### -jwt.key=smart-admin-jwt-key - -########################## smart reload ######################### -smart-reload.thread-count=2 -smart-reload.time-interval=30 -######################### cros ######################### -access-control-allow-origin=preview.smartadmin.1024lab.net -######################### heart beat ######################### -heart-beat.delayHandlerTime=60000 -heart-beat.intervalTime=60000 - -######################### quartz ############################# -#\u8C03\u5EA6\u6807\u8BC6\u540D \u96C6\u7FA4\u4E2D\u6BCF\u4E00\u4E2A\u5B9E\u4F8B\u90FD\u5FC5\u987B\u4F7F\u7528\u76F8\u540C\u7684\u540D\u79F0 -spring.quartz.properties.org.quartz.scheduler.instanceName=prodClusteredScheduler -spring.quartz.properties.org.quartz.scheduler.instanceId=AUTO -#\u8FDC\u7A0B\u7BA1\u7406\u76F8\u5173\u7684\u914D\u7F6E,\u5168\u90E8\u5173\u95ED -spring.quartz.properties.org.quartz.scheduler.rmi.export=false -spring.quartz.properties.org.quartz.scheduler.rmi.proxy=false -#\u8DF3\u8FC7quartz\u7248\u672C\u68C0\u67E5 -spring.quartz.properties.org.quartz.scheduler.skipUpdateCheck=true -#\u6570\u636E\u4FDD\u5B58\u65B9\u5F0F\u4E3A\u6301\u4E45\u5316 -spring.quartz.properties.org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX -spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate -spring.quartz.properties.org.quartz.jobStore.tablePrefix=QRTZ_ -spring.quartz.properties.org.quartz.jobStore.isClustered=true -#\u8C03\u5EA6\u5B9E\u4F8B\u5931\u6548\u7684\u68C0\u67E5\u65F6\u95F4\u95F4\u9694 -spring.quartz.properties.org.quartz.jobStore.clusterCheckinInterval=10000 -spring.quartz.properties.org.quartz.jobStore.useProperties=false -#\u8C03\u5EA6\u7EBF\u7A0B -spring.quartz.properties.org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool -spring.quartz.properties.org.quartz.threadPool.threadCount=2 -spring.quartz.properties.org.quartz.threadPool.threadPriority=5 -spring.quartz.properties.org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true -spring.quartz.properties.org.quartz.threadPool.threadNamePrefix=quartz - -spring.quartz.job-store-type=jdbc -#ALWAYS,EMBEDDED,NEVER -spring.quartz.jdbc.initialize-schema=NEVER -spring.quartz.jdbc.schema=classpath:sql/quartz_mysql_2.3.0.sql diff --git a/smart-admin-service/smart-admin-api/src/main/resources/sit/application.properties b/smart-admin-service/smart-admin-api/src/main/resources/sit/application.properties deleted file mode 100644 index c7c426cf..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/sit/application.properties +++ /dev/null @@ -1,121 +0,0 @@ -######################### server ################### -server.servlet.context-path=/smart-admin-api -server.port=10086 -spring.profiles.active=@profiles.active@ - -######################### tomcat ################### -server.tomcat.basedir=/home/logs/smart-admin/tomcat-logs -server.tomcat.accesslog.enabled=true -server.tomcat.accesslog.pattern=%t %{X-Forwarded-For}i %a "%r" %s %D (%D ms) - -######################### jackson ######################### -spring.jackson.serialization.write-enums-using-to-string=true -spring.jackson.deserialization.read-enums-using-to-string=true -spring.jackson.deserialization.fail-on-unknown-properties=false -spring.jackson.default-property-inclusion=always -spring.jackson.date-format=yyyy-MM-dd HH:mm:ss -spring.jackson.time-zone=GMT+8 -spring.jackson.serialization.write-dates-as-timestamps=false - -######################### http file ######################### -spring.servlet.multipart.max-file-size=30MB -spring.servlet.multipart.max-request-size=30MB -file-upload-service.path=/home/upload/ - -######################### database ######################### -spring.datasource.url=jdbc:p6spy:mysql://127.0.0.1:3306/smart-admin-sit?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&serverTimezone=UTC -spring.datasource.username=root -spring.datasource.password=root -spring.datasource.initial-size=2 -spring.datasource.min-idle=1 -spring.datasource.max-active=10 -spring.datasource.max-wait=60000 -spring.datasource.time-between-eviction-runs-millis=60000 -spring.datasource.min-evictable-idle-time-millis=300000 -spring.datasource.driver-class-name=com.p6spy.engine.spy.P6SpyDriver -spring.datasource.filters=stat -spring.datasource.druid.username=druid -spring.datasource.druid.password=123456 -spring.datasource.druid.login.enabled=false - -######################### redis ####################################### -spring.redis.database=0 -spring.redis.host=127.0.0.1 -spring.redis.port=6379 -spring.redis.timeout=10000ms -spring.redis.password= -spring.redis.lettuce.pool.max-active=10 -spring.redis.lettuce.pool.min-idle=5 -spring.redis.lettuce.pool.max-idle=10 -spring.redis.lettuce.pool.max-wait=30000ms - -########################## rest http pool ######################### -#\u6700\u5927\u8FDE\u63A5\u6570 -http.pool.max-total=10 -#\u5355\u8DEF\u7531\u6700\u5927\u8FDE\u63A5\u6570 -http.pool.default-max-per-route=5 -#\u670D\u52A1\u5668\u8FD4\u56DE\u6570\u636E(response)\u7684\u65F6\u95F4 -http.pool.socket-timeout=8000 -#\u8FDE\u63A5\u4E0A\u670D\u52A1\u5668(\u63E1\u624B\u6210\u529F)\u7684\u65F6\u95F4 -http.pool.connect-timeout=8000 -#\u4ECE\u8FDE\u63A5\u6C60\u4E2D\u83B7\u53D6\u8FDE\u63A5\u7684\u8D85\u65F6\u65F6\u95F4 -http.pool.connection-request-timeout=8000 - -######################### mybatis\u914D\u7F6E ######################### -mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl -# mybatis-plus \u5B57\u6BB5\u9A7C\u5CF0\u81EA\u52A8\u8F6C\u6362 -mybatis-plus.configuration.map-underscore-to-camel-case=true -mybatis-plus.mapper-locations=classpath:/mapper/**/*.xml -mybatis-plus.typeAliasesPackage=net.lab1024.smartadmin.*.*.domain.entity -mybatis-plus.global-config.refresh-mapper=true -mybatis-plus.global-config.db-column-underline=true - -######################### swagger ######################### -swagger.apiGroupName=smartAdmin -swagger.title=smartAdmin -swagger.description=smartAdmin -swagger.version=1.0 -swagger.serviceUrl=http://localhost:10086/smart-admin-api -swagger.packAge=net.lab1024.smartadmin.module - -######################### jwt ######################### -jwt.key=smart-admin-jwt-key - -########################## smart reload ######################### -smart-reload.thread-count=1 -smart-reload.time-interval=120 - -######################### cros ######################### -access-control-allow-origin=* - -######################### heart beat ######################### -heart-beat.delayHandlerTime=60000 -heart-beat.intervalTime=300000 - -######################### quartz ############################# -#\u8C03\u5EA6\u6807\u8BC6\u540D \u96C6\u7FA4\u4E2D\u6BCF\u4E00\u4E2A\u5B9E\u4F8B\u90FD\u5FC5\u987B\u4F7F\u7528\u76F8\u540C\u7684\u540D\u79F0 -spring.quartz.properties.org.quartz.scheduler.instanceName=devClusteredScheduler -spring.quartz.properties.org.quartz.scheduler.instanceId=AUTO -#\u8FDC\u7A0B\u7BA1\u7406\u76F8\u5173\u7684\u914D\u7F6E,\u5168\u90E8\u5173\u95ED -spring.quartz.properties.org.quartz.scheduler.rmi.export=false -spring.quartz.properties.org.quartz.scheduler.rmi.proxy=false -#\u8DF3\u8FC7quartz\u7248\u672C\u68C0\u67E5 -spring.quartz.properties.org.quartz.scheduler.skipUpdateCheck=true -#\u6570\u636E\u4FDD\u5B58\u65B9\u5F0F\u4E3A\u6301\u4E45\u5316 -spring.quartz.properties.org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX -spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate -spring.quartz.properties.org.quartz.jobStore.tablePrefix=QRTZ_ -spring.quartz.properties.org.quartz.jobStore.isClustered=true -#\u8C03\u5EA6\u5B9E\u4F8B\u5931\u6548\u7684\u68C0\u67E5\u65F6\u95F4\u95F4\u9694 -spring.quartz.properties.org.quartz.jobStore.clusterCheckinInterval=10000 -spring.quartz.properties.org.quartz.jobStore.useProperties=false -#\u8C03\u5EA6\u7EBF\u7A0B -spring.quartz.properties.org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool -spring.quartz.properties.org.quartz.threadPool.threadCount=2 -spring.quartz.properties.org.quartz.threadPool.threadPriority=5 -spring.quartz.properties.org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true -spring.quartz.properties.org.quartz.threadPool.threadNamePrefix=quartz -spring.quartz.job-store-type=jdbc -#ALWAYS,EMBEDDED,NEVER -spring.quartz.jdbc.initialize-schema=NEVER -spring.quartz.jdbc.schema=classpath:sql/quartz_mysql_2.3.0.sql diff --git a/smart-admin-service/smart-admin-api/src/main/resources/sit/spy.properties b/smart-admin-service/smart-admin-api/src/main/resources/sit/spy.properties deleted file mode 100644 index 22c91d1e..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/sit/spy.properties +++ /dev/null @@ -1,20 +0,0 @@ -#modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory -# \u81EA\u5B9A\u4E49\u65E5\u5FD7\u6253\u5370 -logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger -#\u65E5\u5FD7\u8F93\u51FA\u5230\u63A7\u5236\u53F0 -appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger -# \u4F7F\u7528\u65E5\u5FD7\u7CFB\u7EDF\u8BB0\u5F55 sql -#appender=com.p6spy.engine.spy.appender.Slf4JLogger -# \u8BBE\u7F6E p6spy driver \u4EE3\u7406 -deregisterdrivers=true -# \u53D6\u6D88JDBC URL\u524D\u7F00 -useprefix=true -# \u914D\u7F6E\u8BB0\u5F55 Log \u4F8B\u5916,\u53EF\u53BB\u6389\u7684\u7ED3\u679C\u96C6\u6709error,info,batch,debug,statement,commit,rollback,result,resultset. -#excludecategories=info,debug,result,commit,resultset -# \u65E5\u671F\u683C\u5F0F -dateformat=yyyy-MM-dd HH:mm:ss - -# \u662F\u5426\u5F00\u542F\u6162SQL\u8BB0\u5F55 -outagedetection=true -# \u6162SQL\u8BB0\u5F55\u6807\u51C6 2 \u79D2 -outagedetectioninterval=2 \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/sql/quartz_mysql_2.3.0.sql b/smart-admin-service/smart-admin-api/src/main/resources/sql/quartz_mysql_2.3.0.sql deleted file mode 100644 index 8968c23f..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/sql/quartz_mysql_2.3.0.sql +++ /dev/null @@ -1,179 +0,0 @@ -# -# In your Quartz properties file, you'll need to set -# org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate -# -# -# By: Ron Cordell - roncordell -# I didn't see this anywhere, so I thought I'd post it here. This is the script from Quartz to create the tables in a MySQL database, modified to use INNODB instead of MYISAM. - -DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS; -DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS; -DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE; -DROP TABLE IF EXISTS QRTZ_LOCKS; -DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS; -DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS; -DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS; -DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS; -DROP TABLE IF EXISTS QRTZ_TRIGGERS; -DROP TABLE IF EXISTS QRTZ_JOB_DETAILS; -DROP TABLE IF EXISTS QRTZ_CALENDARS; - -CREATE TABLE QRTZ_JOB_DETAILS( -SCHED_NAME VARCHAR(120) NOT NULL, -JOB_NAME VARCHAR(190) NOT NULL, -JOB_GROUP VARCHAR(190) NOT NULL, -DESCRIPTION VARCHAR(250) NULL, -JOB_CLASS_NAME VARCHAR(250) NOT NULL, -IS_DURABLE VARCHAR(1) NOT NULL, -IS_NONCONCURRENT VARCHAR(1) NOT NULL, -IS_UPDATE_DATA VARCHAR(1) NOT NULL, -REQUESTS_RECOVERY VARCHAR(1) NOT NULL, -JOB_DATA BLOB NULL, -PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)) -ENGINE=InnoDB; - -CREATE TABLE QRTZ_TRIGGERS ( -SCHED_NAME VARCHAR(120) NOT NULL, -TRIGGER_NAME VARCHAR(190) NOT NULL, -TRIGGER_GROUP VARCHAR(190) NOT NULL, -JOB_NAME VARCHAR(190) NOT NULL, -JOB_GROUP VARCHAR(190) NOT NULL, -DESCRIPTION VARCHAR(250) NULL, -NEXT_FIRE_TIME BIGINT(13) NULL, -PREV_FIRE_TIME BIGINT(13) NULL, -PRIORITY INTEGER NULL, -TRIGGER_STATE VARCHAR(16) NOT NULL, -TRIGGER_TYPE VARCHAR(8) NOT NULL, -START_TIME BIGINT(13) NOT NULL, -END_TIME BIGINT(13) NULL, -CALENDAR_NAME VARCHAR(190) NULL, -MISFIRE_INSTR SMALLINT(2) NULL, -JOB_DATA BLOB NULL, -PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), -FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) -REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP)) -ENGINE=InnoDB; - -CREATE TABLE QRTZ_SIMPLE_TRIGGERS ( -SCHED_NAME VARCHAR(120) NOT NULL, -TRIGGER_NAME VARCHAR(190) NOT NULL, -TRIGGER_GROUP VARCHAR(190) NOT NULL, -REPEAT_COUNT BIGINT(7) NOT NULL, -REPEAT_INTERVAL BIGINT(12) NOT NULL, -TIMES_TRIGGERED BIGINT(10) NOT NULL, -PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), -FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) -REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) -ENGINE=InnoDB; - -CREATE TABLE QRTZ_CRON_TRIGGERS ( -SCHED_NAME VARCHAR(120) NOT NULL, -TRIGGER_NAME VARCHAR(190) NOT NULL, -TRIGGER_GROUP VARCHAR(190) NOT NULL, -CRON_EXPRESSION VARCHAR(120) NOT NULL, -TIME_ZONE_ID VARCHAR(80), -PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), -FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) -REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) -ENGINE=InnoDB; - -CREATE TABLE QRTZ_SIMPROP_TRIGGERS - ( - SCHED_NAME VARCHAR(120) NOT NULL, - TRIGGER_NAME VARCHAR(190) NOT NULL, - TRIGGER_GROUP VARCHAR(190) NOT NULL, - STR_PROP_1 VARCHAR(512) NULL, - STR_PROP_2 VARCHAR(512) NULL, - STR_PROP_3 VARCHAR(512) NULL, - INT_PROP_1 INT NULL, - INT_PROP_2 INT NULL, - LONG_PROP_1 BIGINT NULL, - LONG_PROP_2 BIGINT NULL, - DEC_PROP_1 NUMERIC(13,4) NULL, - DEC_PROP_2 NUMERIC(13,4) NULL, - BOOL_PROP_1 VARCHAR(1) NULL, - BOOL_PROP_2 VARCHAR(1) NULL, - PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), - FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) - REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) -ENGINE=InnoDB; - -CREATE TABLE QRTZ_BLOB_TRIGGERS ( -SCHED_NAME VARCHAR(120) NOT NULL, -TRIGGER_NAME VARCHAR(190) NOT NULL, -TRIGGER_GROUP VARCHAR(190) NOT NULL, -BLOB_DATA BLOB NULL, -PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), -INDEX (SCHED_NAME,TRIGGER_NAME, TRIGGER_GROUP), -FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) -REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) -ENGINE=InnoDB; - -CREATE TABLE QRTZ_CALENDARS ( -SCHED_NAME VARCHAR(120) NOT NULL, -CALENDAR_NAME VARCHAR(190) NOT NULL, -CALENDAR BLOB NOT NULL, -PRIMARY KEY (SCHED_NAME,CALENDAR_NAME)) -ENGINE=InnoDB; - -CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS ( -SCHED_NAME VARCHAR(120) NOT NULL, -TRIGGER_GROUP VARCHAR(190) NOT NULL, -PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP)) -ENGINE=InnoDB; - -CREATE TABLE QRTZ_FIRED_TRIGGERS ( -SCHED_NAME VARCHAR(120) NOT NULL, -ENTRY_ID VARCHAR(95) NOT NULL, -TRIGGER_NAME VARCHAR(190) NOT NULL, -TRIGGER_GROUP VARCHAR(190) NOT NULL, -INSTANCE_NAME VARCHAR(190) NOT NULL, -FIRED_TIME BIGINT(13) NOT NULL, -SCHED_TIME BIGINT(13) NOT NULL, -PRIORITY INTEGER NOT NULL, -STATE VARCHAR(16) NOT NULL, -JOB_NAME VARCHAR(190) NULL, -JOB_GROUP VARCHAR(190) NULL, -IS_NONCONCURRENT VARCHAR(1) NULL, -REQUESTS_RECOVERY VARCHAR(1) NULL, -PRIMARY KEY (SCHED_NAME,ENTRY_ID)) -ENGINE=InnoDB; - -CREATE TABLE QRTZ_SCHEDULER_STATE ( -SCHED_NAME VARCHAR(120) NOT NULL, -INSTANCE_NAME VARCHAR(190) NOT NULL, -LAST_CHECKIN_TIME BIGINT(13) NOT NULL, -CHECKIN_INTERVAL BIGINT(13) NOT NULL, -PRIMARY KEY (SCHED_NAME,INSTANCE_NAME)) -ENGINE=InnoDB; - -CREATE TABLE QRTZ_LOCKS ( -SCHED_NAME VARCHAR(120) NOT NULL, -LOCK_NAME VARCHAR(40) NOT NULL, -PRIMARY KEY (SCHED_NAME,LOCK_NAME)) -ENGINE=InnoDB; - -CREATE INDEX IDX_QRTZ_J_REQ_RECOVERY ON QRTZ_JOB_DETAILS(SCHED_NAME,REQUESTS_RECOVERY); -CREATE INDEX IDX_QRTZ_J_GRP ON QRTZ_JOB_DETAILS(SCHED_NAME,JOB_GROUP); - -CREATE INDEX IDX_QRTZ_T_J ON QRTZ_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP); -CREATE INDEX IDX_QRTZ_T_JG ON QRTZ_TRIGGERS(SCHED_NAME,JOB_GROUP); -CREATE INDEX IDX_QRTZ_T_C ON QRTZ_TRIGGERS(SCHED_NAME,CALENDAR_NAME); -CREATE INDEX IDX_QRTZ_T_G ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP); -CREATE INDEX IDX_QRTZ_T_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE); -CREATE INDEX IDX_QRTZ_T_N_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE); -CREATE INDEX IDX_QRTZ_T_N_G_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE); -CREATE INDEX IDX_QRTZ_T_NEXT_FIRE_TIME ON QRTZ_TRIGGERS(SCHED_NAME,NEXT_FIRE_TIME); -CREATE INDEX IDX_QRTZ_T_NFT_ST ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME); -CREATE INDEX IDX_QRTZ_T_NFT_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME); -CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE); -CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE_GRP ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE); - -CREATE INDEX IDX_QRTZ_FT_TRIG_INST_NAME ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME); -CREATE INDEX IDX_QRTZ_FT_INST_JOB_REQ_RCVRY ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY); -CREATE INDEX IDX_QRTZ_FT_J_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP); -CREATE INDEX IDX_QRTZ_FT_JG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_GROUP); -CREATE INDEX IDX_QRTZ_FT_T_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP); -CREATE INDEX IDX_QRTZ_FT_TG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_GROUP); - -commit; diff --git a/smart-admin-service/smart-admin-api/src/main/resources/sql/smart-admin.sql b/smart-admin-service/smart-admin-api/src/main/resources/sql/smart-admin.sql deleted file mode 100644 index dfd8e8c1..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/sql/smart-admin.sql +++ /dev/null @@ -1,1588 +0,0 @@ --- -------------------------------------------------------- --- 主机: 127.0.0.1 --- 服务器版本: 8.0.20 - MySQL Community Server - GPL --- 服务器操作系统: Win64 --- HeidiSQL 版本: 11.0.0.5919 --- -------------------------------------------------------- - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET NAMES utf8 */; -/*!50503 SET NAMES utf8mb4 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; - - --- 导出 smart-admin-dev 的数据库结构 -DROP DATABASE IF EXISTS `smart-admin-dev`; -CREATE DATABASE IF NOT EXISTS `smart-admin-dev` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */ /*!80016 DEFAULT ENCRYPTION='N' */; -USE `smart-admin-dev`; - --- 导出 表 smart-admin-dev.t_department 结构 -DROP TABLE IF EXISTS `t_department`; -CREATE TABLE IF NOT EXISTS `t_department` ( - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '部门主键id', - `name` varchar(50) NOT NULL COMMENT '部门名称', - `short_name` varchar(50) DEFAULT NULL COMMENT '部门简称', - `manager_id` int unsigned DEFAULT NULL COMMENT '部门负责人id', - `parent_id` int unsigned DEFAULT NULL COMMENT '部门的父级id', - `sort` int NOT NULL COMMENT '部门排序', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`), - KEY `parent_id` (`parent_id`) -) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='部门表'; - --- 正在导出表 smart-admin-dev.t_department 的数据:~4 rows (大约) -DELETE FROM `t_department`; -/*!40000 ALTER TABLE `t_department` DISABLE KEYS */; -INSERT INTO `t_department` (`id`, `name`, `short_name`, `manager_id`, `parent_id`, `sort`, `update_time`, `create_time`) VALUES - (1, '1024创新实验室', 'ZWGWL', 16, 0, 1, '2019-04-03 10:41:25', '2019-04-03 10:41:25'), - (2, '二级部门-2', NULL, 15, 1, 17, '2019-04-15 16:45:10', '2019-04-15 16:45:10'), - (4, '二级部门-1', '管理', 14, 1, 20, '2019-04-17 16:14:55', '2019-04-17 16:14:55'), - (8, '三级部门-1', NULL, NULL, 4, 8, '2019-04-25 12:25:52', '2019-04-25 12:25:52'), - (9, '四级部门-1', NULL, NULL, 8, 9, '2019-04-25 12:26:36', '2019-04-25 12:26:36'), - (10, '五级部门-1', NULL, NULL, 9, 10, '2019-04-25 12:26:49', '2019-04-25 12:26:49'), - (11, '六级部门-1', NULL, NULL, 10, 11, '2019-04-25 12:26:59', '2019-04-25 12:26:59'), - (12, '七级部门-1', NULL, NULL, 11, 12, '2019-04-25 12:27:18', '2019-04-25 12:27:18'), - (13, '八级部门-1', NULL, NULL, 12, 13, '2019-04-25 12:27:34', '2019-04-25 12:27:34'), - (14, '九级部门-1', NULL, NULL, 13, 14, '2019-04-25 12:27:47', '2019-04-25 12:27:47'), - (15, '十级部门-1', NULL, NULL, 14, 15, '2019-04-25 12:28:16', '2019-04-25 12:28:16'), - (16, '十一级部门部门部部门门嘻嘻哈哈-1', NULL, 13, 15, 16, '2019-04-25 14:56:40', '2019-04-25 14:56:40'), - (17, '信息中心', NULL, 16, 1, 4, '2019-04-26 11:53:50', '2019-04-26 11:53:50'), - (18, '测试部门', NULL, 16, 17, 18, '2019-04-26 11:54:06', '2019-04-26 11:54:06'), - (19, '张娇测试', NULL, NULL, 2, 22, '2019-04-26 14:36:18', '2019-04-26 14:36:18'), - (20, '子部门', NULL, NULL, 2, 23, '2019-04-26 14:36:28', '2019-04-26 14:36:28'), - (22, '张静如', NULL, 16, 1, 2, '2019-04-28 14:21:44', '2019-04-28 14:21:44'), - (23, '张静如2', NULL, 22, 4, 19, '2019-04-28 14:22:48', '2019-04-28 14:22:48'), - (24, '测试', NULL, 18, 23, 24, '2019-04-29 10:12:42', '2019-04-29 10:12:42'), - (25, '测试', NULL, 18, 23, 25, '2019-04-29 10:12:42', '2019-04-29 10:12:42'); -/*!40000 ALTER TABLE `t_department` ENABLE KEYS */; - --- 导出 表 smart-admin-dev.t_email 结构 -DROP TABLE IF EXISTS `t_email`; -CREATE TABLE IF NOT EXISTS `t_email` ( - `id` int NOT NULL AUTO_INCREMENT, - `title` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '标题', - `to_emails` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '收件人', - `send_status` tinyint NOT NULL DEFAULT '0' COMMENT '发送状态 0未发送 1已发送', - `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '邮件内容', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=87 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; - --- 正在导出表 smart-admin-dev.t_email 的数据:~56 rows (大约) -DELETE FROM `t_email`; -/*!40000 ALTER TABLE `t_email` DISABLE KEYS */; -INSERT INTO `t_email` (`id`, `title`, `to_emails`, `send_status`, `content`, `create_time`, `update_time`) VALUES - (20, '新增测试12345', '新增测试@11.com', 1, '

这是内容

', '2019-08-30 15:35:12', '2019-08-30 15:35:12'), - (21, 'b', 'asdf@33.com', 1, '

c

', '2019-09-06 14:25:33', '2019-09-06 14:25:33'), - (23, 'string', 'string', 0, 'string', '2019-09-06 06:55:01', '2019-09-06 06:55:01'), - (24, 'string', 'string', 0, 'string', '2019-09-06 06:55:01', '2019-09-06 06:55:01'), - (26, 'string', 'string', 0, 'string', '2019-09-06 07:01:32', '2019-09-06 07:01:32'), - (27, 'string', 'string', 0, 'string', '2019-09-06 07:01:32', '2019-09-06 07:01:32'), - (37, 'ewqwe', '适者生存@22.cc', 1, '

qweqwe

', '2019-11-09 10:00:46', '2019-11-09 10:00:46'), - (38, 'ewqwe', '适者生存@22.cc', 1, '

qweqwe

', '2019-11-09 10:00:49', '2019-11-09 10:00:49'), - (39, 'dsfds', 'dsfsd@qq.ccc', 1, '

fsdfs

', '2019-11-09 10:04:54', '2019-11-09 10:04:54'), - (40, 'dsfds', 'dsfsd@qq.ccc', 1, '

fsdfs

', '2019-11-09 10:04:57', '2019-11-09 10:04:57'), - (41, 'dsfds', 'dsfsd@qq.ccc', 1, '

fsdfs

', '2019-11-09 10:04:57', '2019-11-09 10:04:57'), - (42, 'dsfds', 'dsfsd@qq.ccc', 1, '

fsdfs

', '2019-11-09 10:04:58', '2019-11-09 10:04:58'), - (43, 'dsfds', 'dsfsd@qq.ccc', 1, '

fsdfs

', '2019-11-09 10:04:59', '2019-11-09 10:04:59'), - (44, 'dsfds', 'dsfsd@qq.ccc', 1, '

fsdfs

', '2019-11-09 10:04:59', '2019-11-09 10:04:59'), - (45, 'dsfds', 'dsfsd@qq.ccc', 1, '

fsdfs

', '2019-11-09 10:05:16', '2019-11-09 10:05:16'), - (46, 'dsfds', 'dsfsd@qq.ccc', 1, '

fsdfs

', '2019-11-09 10:06:29', '2019-11-09 10:06:29'), - (47, 'dsfds', 'dsfsd@qq.ccc', 1, '

fsdfs

', '2019-11-09 10:07:02', '2019-11-09 10:07:02'), - (48, 'dsfds', 'dsfsd@qq.ccc', 1, '

fsdfs

', '2019-11-09 10:07:16', '2019-11-09 10:07:16'), - (49, '2342', '11@ss.cc', 1, '

234234

', '2019-11-09 10:08:13', '2019-11-09 10:08:13'), - (50, '2342', '11@ss.cc', 1, '

234234

', '2019-11-09 10:08:30', '2019-11-09 10:08:30'), - (51, '2342', '11@ss.cc', 1, '

234234

', '2019-11-09 10:08:50', '2019-11-09 10:08:50'), - (52, '2342', '11@ss.cc', 1, '

234234

', '2019-11-09 10:09:09', '2019-11-09 10:09:09'), - (53, '2342', '11@ss.cc', 1, '

234234

', '2019-11-09 10:09:31', '2019-11-09 10:09:31'), - (54, '2342', '11@ss.cc', 1, '

234234

', '2019-11-09 10:12:24', '2019-11-09 10:12:24'), - (55, '2342', '11@ss.cc', 1, '

234234

', '2019-11-09 10:13:13', '2019-11-09 10:13:13'), - (56, 'asdasd', '3423@aqq.cc', 0, '

asdasd

', '2019-11-09 10:20:42', '2019-11-09 10:20:42'), - (57, 'asdasd', '3423@aqq.cc', 0, '

asdasd

', '2019-11-09 10:20:52', '2019-11-09 10:20:52'), - (58, 'asdasd', '3423@aqq.cc', 0, '

asdasd

', '2019-11-09 10:21:16', '2019-11-09 10:21:16'), - (59, 'asdasd', '3423@aqq.cc', 0, '

asdasd

', '2019-11-09 10:21:24', '2019-11-09 10:21:24'), - (60, 'asdasd', '3423@aqq.cc', 0, '

asdasd

', '2019-11-09 10:21:30', '2019-11-09 10:21:30'), - (61, 'asdasd', '3423@aqq.cc', 0, '

asdasd

', '2019-11-09 10:21:53', '2019-11-09 10:21:53'), - (62, 'a21312', '23423@qq.cc', 0, '

asdasdas

', '2019-11-09 10:23:40', '2019-11-09 10:23:40'), - (63, '11', '1234@qq.com', 0, '

23

', '2019-11-15 15:35:12', '2019-11-15 15:35:12'), - (64, '11', '1234@qq.com', 0, '

23

', '2019-11-15 15:35:15', '2019-11-15 15:35:15'), - (65, '11', '1234@qq.com', 0, '

23

', '2019-11-15 15:35:16', '2019-11-15 15:35:16'), - (66, 'eeee', '1234@qq.com', 0, '

    eee2233

', '2019-11-15 17:00:00', '2019-11-15 17:00:00'), - (67, 'eeee', '1234@qq.com', 0, '

    eee2233

', '2019-11-15 17:00:03', '2019-11-15 17:00:03'), - (68, 'eeee', '1234@qq.com', 0, '

    eee2233

', '2019-11-15 17:00:04', '2019-11-15 17:00:04'), - (69, '22223', '1017146812@qq.com', 0, '

    e34233

', '2019-11-15 17:00:33', '2019-11-15 17:00:33'), - (70, '22223', '1017146812@qq.com', 0, '

    e34233

', '2019-11-15 17:00:34', '2019-11-15 17:00:34'), - (71, '22223', '1017146812@qq.com', 0, '

    e34233

', '2019-11-15 17:00:34', '2019-11-15 17:00:34'), - (72, '22223', '12232', 0, '

    e34233

', '2019-11-15 17:00:49', '2019-11-15 17:00:49'), - (73, '22223', '12232@qq.com', 0, '

    e34233

', '2019-11-15 17:00:56', '2019-11-15 17:00:56'), - (74, 'dsasdasd', 'asdas@qq.com', 0, '

asdasd

', '2019-11-16 08:51:44', '2019-11-16 08:51:44'), - (75, 'dsasdasd', 'asdas@qq.com', 0, '

asdasd

', '2019-11-16 09:05:10', '2019-11-16 09:05:10'), - (76, 'dsasdasd', 'asdas@qq.com', 0, '

asdasd

', '2019-11-16 09:05:14', '2019-11-16 09:05:14'), - (77, 'dsasdasd', 'asdas@qq.com', 0, '

asdasd

', '2019-11-16 09:06:34', '2019-11-16 09:06:34'), - (78, 'dsasdasd', 'asdas@qq.com', 0, '

asdasd

', '2019-11-16 09:07:09', '2019-11-16 09:07:09'), - (79, 'dsasdasd', 'asdas@qq.com', 0, '

asdasd

', '2019-11-16 09:07:30', '2019-11-16 09:07:30'), - (80, 'dsasdasd', 'asdas@qq.com', 0, '

asdasd

', '2019-11-16 09:07:32', '2019-11-16 09:07:32'), - (81, 'dsasdasd', 'asdas@qq.com', 0, '

asdasd

', '2019-11-16 09:08:29', '2019-11-16 09:08:29'), - (82, 'sdfs', 'ss@ss.cc', 0, '

dsdsf

', '2019-11-16 09:08:46', '2019-11-16 09:08:46'), - (83, 'asdasd', 'asd@qq.vv', 0, '

asdas

', '2019-11-16 09:09:18', '2019-11-16 09:09:18'), - (84, 'asdasd', 'asd@qq.vv', 0, '

asdas

', '2019-11-16 09:09:42', '2019-11-16 09:09:42'), - (85, 'asdasd', 'asd@qq.vv', 0, '

asdas

', '2019-11-16 09:09:46', '2019-11-16 09:09:46'), - (86, 'dasdad', 'dasda@ss.cc', 1, '

dasasdas

', '2019-11-16 09:10:05', '2019-11-16 09:10:05'); -/*!40000 ALTER TABLE `t_email` ENABLE KEYS */; - --- 导出 表 smart-admin-dev.t_employee 结构 -DROP TABLE IF EXISTS `t_employee`; -CREATE TABLE IF NOT EXISTS `t_employee` ( - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', - `login_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '登录帐号', - `login_pwd` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '登录密码', - `actual_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '员工名称', - `nick_name` varchar(30) DEFAULT '' COMMENT '别名', - `phone` varchar(15) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '手机号码', - `id_card` varchar(18) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '身份证', - `birthday` date DEFAULT NULL COMMENT '出生日期', - `email` varchar(50) DEFAULT NULL COMMENT '邮箱', - `department_id` int unsigned NOT NULL COMMENT '部门id', - `is_leave` int NOT NULL DEFAULT '0' COMMENT '是否离职1是', - `is_disabled` int NOT NULL DEFAULT '0' COMMENT '是否被禁用 0否1是', - `remark` varchar(200) DEFAULT NULL COMMENT '备注', - `create_user` int unsigned NOT NULL COMMENT '创建者id', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `is_delete` int NOT NULL DEFAULT '0' COMMENT '是否删除0否 1是', - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='员工表'; - --- 正在导出表 smart-admin-dev.t_employee 的数据:~28 rows (大约) -DELETE FROM `t_employee`; -/*!40000 ALTER TABLE `t_employee` DISABLE KEYS */; -INSERT INTO `t_employee` (`id`, `login_name`, `login_pwd`, `actual_name`, `nick_name`, `phone`, `id_card`, `birthday`, `email`, `department_id`, `is_leave`, `is_disabled`, `remark`, `create_user`, `update_time`, `create_time`, `is_delete`) VALUES - (1, 'sa', 'c655798e4648c540812a1b8f48759af7', '管理员', '15515515515', '13112312131', '410306199202020020', '1992-02-02', NULL, 1, 0, 0, NULL, 0, '2019-04-27 09:56:17', '2018-05-11 09:38:54', 0), - (11, 'role1', 'c655798e4648c540812a1b8f48759af7', '角色测试1', '', '18123245230', '', '1970-01-01', '', 4, 0, 0, NULL, 1, '2019-04-27 09:56:17', '2019-04-25 12:30:22', 0), - (12, 'role2', 'c655798e4648c540812a1b8f48759af7', '角色测试2', '', '18121451241', '', NULL, '', 4, 0, 0, NULL, 1, '2019-08-01 10:04:38', '2019-04-25 12:31:11', 0), - (13, 'lihaifan', 'c655798e4648c540812a1b8f48759af7', 'lihaifan', '', '18399485774', '', NULL, '', 1, 0, 0, NULL, 1, '2019-04-27 09:56:17', '2019-04-25 13:50:44', 0), - (14, 'lipeng', 'c655798e4648c540812a1b8f48759af7', '李鹏1', '', '13937988294', '', NULL, '', 2, 0, 0, NULL, 1, '2019-04-27 09:56:17', '2019-04-25 14:34:47', 0), - (15, 'huangwenli', 'c655798e4648c540812a1b8f48759af7', '黄文丽', '', '15515515515', '', NULL, '', 16, 0, 0, NULL, 1, '2019-04-27 09:56:17', '2019-04-26 10:05:05', 0), - (16, 'huangwenli1', 'c655798e4648c540812a1b8f48759af7', '黄文丽', '', '15515515515', '', NULL, '', 15, 0, 0, NULL, 1, '2019-04-27 14:04:19', '2019-04-26 10:25:04', 0), - (17, 'zhangjiao', 'c655798e4648c540812a1b8f48759af7', '张娇', '阿娇', '15670390391', '410305199102020020', '1991-02-02', '86484@qq.com', 19, 0, 0, NULL, 1, '2019-08-05 16:33:57', '2019-04-26 14:37:23', 0), - (18, 'zhangjiao1', 'c655798e4648c540812a1b8f48759af7', '张娇1', '', '15670390391', '', '2019-04-18', '6666@qq.com', 20, 0, 0, NULL, 1, '2019-08-05 16:33:57', '2019-04-26 14:45:55', 0), - (19, 'zhenxiaocang', 'c655798e4648c540812a1b8f48759af7', '珍小藏', '', '15670390391', '', NULL, '', 19, 0, 1, NULL, 1, '2019-09-09 08:34:35', '2019-04-26 14:46:57', 0), - (20, 'matengfei', 'c655798e4648c540812a1b8f48759af7', '马腾飞', '', '15670390393', '', NULL, '', 19, 0, 0, NULL, 1, '2019-08-05 16:33:57', '2019-04-26 14:47:24', 0), - (21, 'ceshi123', 'c655798e4648c540812a1b8f48759af7', '测试人员', '', '18829938477', '', NULL, '', 1, 0, 1, NULL, 13, '2019-04-27 09:56:17', '2019-04-27 09:38:07', 1), - (22, 'zhangjingru', 'c655798e4648c540812a1b8f48759af7', '张静如', '', '15600000000', '', NULL, '', 1, 0, 0, NULL, 1, '2019-09-04 09:06:47', '2019-04-28 14:05:03', 0), - (23, 'sdfsdfdsfsdfdsfdsf', 'c655798e4648c540812a1b8f48759af7', 'werewr', '', '15698585858', '', NULL, '', 19, 0, 0, NULL, 1, '2019-09-05 16:13:03', '2019-04-28 16:26:27', 0), - (25, 'shq2019', 'c655798e4648c540812a1b8f48759af7', 'shq', 'shq', '18798801298', '410281199309024040', '1993-09-02', '', 17, 0, 0, NULL, 1, '2019-08-05 16:33:57', '2019-05-05 09:13:41', 0), - (26, 'zhangjiao666', 'c655798e4648c540812a1b8f48759af7', 'tom我是五个字12', '', '15612345678', '', NULL, '', 18, 0, 0, NULL, 1, '2019-08-05 16:33:57', '2019-05-05 15:34:10', 0), - (28, 'dfsfgds', 'c655798e4648c540812a1b8f48759af7', 'fds', '', '15854127845', '', NULL, '', 22, 0, 1, NULL, 1, '2019-09-06 08:58:40', '2019-05-06 10:36:57', 0), - (29, 'abcabc', 'c655798e4648c540812a1b8f48759af7', 'abccba', 'aaabac', '13311112222', '', NULL, '', 17, 0, 0, NULL, 1, '2019-08-05 16:33:57', '2019-07-10 17:00:58', 0), - (30, 'gengweigang', 'c655798e4648c540812a1b8f48759af7', '耿为刚', 'geng', '15038588418', '', NULL, '', 17, 0, 0, NULL, 1, '2019-08-08 14:35:51', '2019-08-08 14:35:51', 0), - (31, 'gengweigang1', 'c655798e4648c540812a1b8f48759af7', '耿为刚1', '这是别名', '15038588418', '410322193312123232', '1933-12-12', '32@qq.com', 18, 0, 0, NULL, 30, '2019-08-23 09:27:22', '2019-08-23 09:25:50', 0), - (32, 'ceshi123', 'c655798e4648c540812a1b8f48759af7', '测试', '测试', '15670702651', '', NULL, '', 17, 0, 0, NULL, 1, '2019-09-04 09:05:48', '2019-09-03 11:48:04', 0), - (33, 'ceshi321', 'c655798e4648c540812a1b8f48759af7', '测试', '测试', '15670702651', '', NULL, '', 17, 0, 1, NULL, 1, '2019-09-03 15:51:16', '2019-09-03 11:49:17', 0), - (34, 'ceshi123321', 'c655798e4648c540812a1b8f48759af7', '123', '', '15600000000', '', NULL, '', 22, 0, 1, NULL, 1, '2019-09-06 08:58:37', '2019-09-04 09:13:54', 0), - (35, 'guoqingfeng', 'c655798e4648c540812a1b8f48759af7', '郭青枫', '', '15670702651', '', NULL, '', 18, 0, 0, NULL, 1, '2019-09-04 15:09:00', '2019-09-04 15:09:00', 0), - (36, 'li327263458', 'c655798e4648c540812a1b8f48759af7', 'lipeng', '', '13937988294', '', NULL, '', 17, 0, 0, NULL, 1, '2019-09-09 17:01:39', '2019-09-09 17:01:39', 0), - (37, 'test123', 'c655798e4648c540812a1b8f48759af7', 'test', '', '13211110201', '', NULL, '', 18, 0, 1, NULL, 1, '2019-11-14 16:08:08', '2019-11-08 09:32:39', 0), - (38, 'tiantian', 'c655798e4648c540812a1b8f48759af7', '天天管理员', '', '13574502368', '', NULL, '', 17, 0, 0, NULL, 1, '2019-11-14 02:08:08', '2019-11-08 11:09:46', 0), - (39, 'wang13211111', 'c655798e4648c540812a1b8f48759af7', 'ceshi111', 'dddd', '13244553212', '', NULL, '', 25, 0, 0, NULL, 38, '2019-11-15 17:14:34', '2019-11-15 17:03:04', 0); -/*!40000 ALTER TABLE `t_employee` ENABLE KEYS */; - --- 导出 表 smart-admin-dev.t_file 结构 -DROP TABLE IF EXISTS `t_file`; -CREATE TABLE IF NOT EXISTS `t_file` ( - `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID', - `module_id` varchar(50) NOT NULL COMMENT '相关业务id', - `module_type` varchar(50) NOT NULL COMMENT '相关业务类型', - `file_name` varchar(255) DEFAULT NULL COMMENT '文件名称', - `file_size` varchar(255) DEFAULT NULL COMMENT '文件大小', - `file_type` varchar(50) DEFAULT NULL COMMENT '文件类型,程序中枚举控制,文件类型:如身份证正面,三证合一等等', - `file_path` varchar(255) NOT NULL COMMENT '文件key,用于文件下载', - `file_location_type` int NOT NULL COMMENT '文件位置类型', - `creater_user` int NOT NULL COMMENT '创建人,即上传人', - `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '上次更新时间', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `module_id_module_type` (`module_id`,`module_type`) USING BTREE, - KEY `module_type` (`module_type`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; - --- 正在导出表 smart-admin-dev.t_file 的数据:~23 rows (大约) -DELETE FROM `t_file`; -/*!40000 ALTER TABLE `t_file` DISABLE KEYS */; -INSERT INTO `t_file` (`id`, `module_id`, `module_type`, `file_name`, `file_size`, `file_type`, `file_path`, `file_location_type`, `creater_user`, `update_time`, `create_time`) VALUES - (1, '1', '1', '阿里云1.jpg', NULL, NULL, 'backUser/config/d1788b717be24f14ba526f25397b936f', 2, 1, NULL, '2019-07-05 10:38:15'), - (2, '2', '1', '1.jpg', NULL, NULL, 'backUser/config/8895ec770c4e4e558c6d9b54eb00dffc', 2, 1, '2019-07-18 09:20:59', '2019-07-18 09:20:25'), - (3, '3', '1', '随笔.txt', NULL, NULL, 'backUser/config/f5cbc4c9a56f4fa7ad0ba58b0aa5d169', 2, 1, NULL, '2019-07-18 09:22:47'), - (4, '3', '1', '1.jpg', NULL, NULL, 'backUser/config/2019071809245603e0a4e449a4bf3aa28ee731c309040.jpg', 1, 1, NULL, '2019-07-18 09:24:51'), - (6, '4', '1', '1.jpg', NULL, NULL, 'backUser/config/ddcb8214ba274dec9bb2c33e0e246391', 3, 1, NULL, '2019-07-19 16:19:43'), - (7, '5', '1', 'sql.txt', NULL, NULL, 'backUser/config/cfbdf9562c894405b5b6f64f71fa812a', 3, 1, NULL, '2019-07-19 17:41:55'), - (9, '1', '1', '20190912023241a6132f5713b54e1fb490f4ea88115747.md', NULL, NULL, 'backUser/config/20190912023241a6132f5713b54e1fb490f4ea88115747.md', 1, 1, '2019-09-12 15:25:35', '2019-09-12 14:32:42'), - (10, '1', '1', '201909120232499804998573f643ff8e58189d23485629.mjs', NULL, NULL, 'backUser/config/201909120232499804998573f643ff8e58189d23485629.mjs', 1, 1, '2019-09-12 15:25:19', '2019-09-12 14:32:50'), - (11, '1', '1', '201909120326564cdc8df7b8cc49cfb273926877f047f5.json', NULL, NULL, 'backUser/config/201909120326564cdc8df7b8cc49cfb273926877f047f5.json', 1, 1, NULL, '2019-09-12 15:26:56'), - (12, '1', '1', '201909120343357104b7f1cc684f5797ada35c06aba770.json', NULL, NULL, 'backUser/config/201909120343357104b7f1cc684f5797ada35c06aba770.json', 1, 1, NULL, '2019-09-12 15:43:36'), - (13, '1', '1', '201909120343427e408141a0ea467ea2e012f7086a6265.json', NULL, NULL, 'backUser/config/201909120343427e408141a0ea467ea2e012f7086a6265.json', 1, 1, NULL, '2019-09-12 15:43:42'), - (14, '1', '1', '20190912034543b4d3a061fb2e416c899fe2ff6b9327e0.ts', NULL, NULL, 'backUser/config/20190912034543b4d3a061fb2e416c899fe2ff6b9327e0.ts', 1, 1, NULL, '2019-09-12 15:45:43'), - (15, '1', '1', '20190912034550a5dc04ce79b14a1cb2bb76545c909aa8.md', NULL, NULL, 'backUser/config/20190912034550a5dc04ce79b14a1cb2bb76545c909aa8.md', 1, 1, NULL, '2019-09-12 15:45:51'), - (16, '1', '1', 'LICENCE', NULL, NULL, 'backUser/config/cc02b99c0ec548f1a2231b70b7d569b8', 2, 1, NULL, '2019-09-12 15:47:22'), - (17, '1', '1', 'bignumber.min.js', NULL, NULL, 'backUser/config/bda49e8ad6d242fe8735b2023dfbf125', 2, 1, NULL, '2019-09-12 15:47:29'), - (18, '1', '1', '20190912034880a881fa8fbc841bfb7194ff312bd1058.json', NULL, NULL, 'backUser/config/20190912034880a881fa8fbc841bfb7194ff312bd1058.json', 1, 1, NULL, '2019-09-12 15:48:08'), - (19, '1', '1', '20190912034816ece14084acf345a79396a0f4347c4e44.md', NULL, NULL, 'backUser/config/20190912034816ece14084acf345a79396a0f4347c4e44.md', 1, 1, NULL, '2019-09-12 15:48:16'), - (20, '1', '1', '20191024054412fac4b4e04c574c6eab71f91e13a8a0b6.jpg', NULL, NULL, 'backUser/config/20191024054412fac4b4e04c574c6eab71f91e13a8a0b6.jpg', 1, 1, NULL, '2019-10-24 17:44:13'), - (21, '1', '1', '20191106042073f7ef01bde3046bd8e01928f397230bd.jpg', NULL, NULL, 'backUser/config/20191106042073f7ef01bde3046bd8e01928f397230bd.jpg', 1, 1, NULL, '2019-11-06 02:20:13'), - (22, '1', '1', '201911130802024b8a2ebf80543a98241bb464682650d.jpg', NULL, NULL, 'backUser/config/201911130802024b8a2ebf80543a98241bb464682650d.jpg', 1, 1, NULL, '2019-11-13 06:02:01'), - (23, '1', '1', '20191113080210d1d98eea46364d268b2a03fa03f7a446.jpg', NULL, NULL, 'backUser/config/20191113080210d1d98eea46364d268b2a03fa03f7a446.jpg', 1, 1, NULL, '2019-11-13 06:02:14'), - (24, '1', '1', '20191115043844e92b25e70fb140a1885614b978469ca9.jpg', NULL, NULL, 'backUser/config/20191115043844e92b25e70fb140a1885614b978469ca9.jpg', 1, 38, NULL, '2019-11-15 02:38:45'), - (25, '1', '1', '20191116060546d3a2c703cb5546b3851612907cc3786f.png', NULL, NULL, 'backUser/config/20191116060546d3a2c703cb5546b3851612907cc3786f.png', 1, 1, NULL, '2019-11-16 10:05:47'); -/*!40000 ALTER TABLE `t_file` ENABLE KEYS */; - --- 导出 表 smart-admin-dev.t_heart_beat_record 结构 -DROP TABLE IF EXISTS `t_heart_beat_record`; -CREATE TABLE IF NOT EXISTS `t_heart_beat_record` ( - `id` int NOT NULL AUTO_INCREMENT COMMENT '自增id', - `project_path` varchar(100) DEFAULT NULL COMMENT '项目名称', - `server_ip` varchar(200) DEFAULT NULL COMMENT '服务器ip', - `process_no` int DEFAULT NULL COMMENT '进程号', - `process_start_time` datetime DEFAULT NULL COMMENT '进程开启时间', - `heart_beat_time` datetime DEFAULT NULL COMMENT '心跳时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; - --- 正在导出表 smart-admin-dev.t_heart_beat_record 的数据:~2 rows (大约) -DELETE FROM `t_heart_beat_record`; -/*!40000 ALTER TABLE `t_heart_beat_record` DISABLE KEYS */; -INSERT INTO `t_heart_beat_record` (`id`, `project_path`, `server_ip`, `process_no`, `process_start_time`, `heart_beat_time`) VALUES - (1, '/home/server/smart-admin/dev', '192.168.122.1;172.16.0.145', 14843, '2019-11-16 03:11:50', '2019-11-16 03:58:01'), - (2, 'F:\\codespace\\idea\\gangquan360\\foundation', '172.16.1.188;192.168.56.1', 227992, '2019-11-16 10:02:39', '2019-11-16 10:06:50'), - (3, 'E:\\codespace\\zhuoda', '192.168.8.188', 17564, '2020-12-14 07:11:12', '2020-12-14 07:13:34'), - (4, 'E:\\codespace\\zhuoda', '192.168.8.188', 15568, '2020-12-14 07:13:53', '2020-12-14 07:15:00'), - (5, 'E:\\codespace\\zhuoda', '192.168.8.188', 16548, '2020-12-14 07:16:07', '2020-12-14 07:17:14'); -/*!40000 ALTER TABLE `t_heart_beat_record` ENABLE KEYS */; - --- 导出 表 smart-admin-dev.t_id_generator 结构 -DROP TABLE IF EXISTS `t_id_generator`; -CREATE TABLE IF NOT EXISTS `t_id_generator` ( - `id` int DEFAULT NULL, - `key_name` varchar(50) NOT NULL COMMENT '英文key', - `rule_format` varchar(500) NOT NULL COMMENT '规则格式。no_cycle没有周期, year_cycle 年周期, month_cycle月周期, day_cycle 日周期', - `rule_type` varchar(50) NOT NULL COMMENT '格式[yyyy]表示年,[mm]标识月,[dd]表示日,[nnn]表示三位数字', - `init_number` int NOT NULL DEFAULT '1' COMMENT '初始值', - `last_number` int DEFAULT NULL COMMENT '上次产生的id, 默认为空', - `remark` varchar(1000) NOT NULL COMMENT '备注', - `update_time` datetime DEFAULT NULL, - `create_time` datetime NOT NULL, - UNIQUE KEY `key_name` (`key_name`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='id生成器定义表'; - --- 正在导出表 smart-admin-dev.t_id_generator 的数据:~2 rows (大约) -DELETE FROM `t_id_generator`; -/*!40000 ALTER TABLE `t_id_generator` DISABLE KEYS */; -INSERT INTO `t_id_generator` (`id`, `key_name`, `rule_format`, `rule_type`, `init_number`, `last_number`, `remark`, `update_time`, `create_time`) VALUES - (2, 'goods_num', '[nnnnnnn]', 'NO_CYCLE', 1, NULL, '商品编号', '2019-04-09 09:48:04', '2019-03-29 14:14:12'), - (1, 'order', '[yyyy][mm][dd][nnnnn]', 'DAY_CYCLE', 1, 1, '订单编号', '2019-03-30 11:25:42', '2019-03-29 14:14:12'); -/*!40000 ALTER TABLE `t_id_generator` ENABLE KEYS */; - --- 导出 表 smart-admin-dev.t_id_generator_record 结构 -DROP TABLE IF EXISTS `t_id_generator_record`; -CREATE TABLE IF NOT EXISTS `t_id_generator_record` ( - `generator_id` int NOT NULL, - `year` int NOT NULL, - `month` int NOT NULL, - `day` int NOT NULL, - `last_number` int NOT NULL, - PRIMARY KEY (`generator_id`,`year`,`month`,`day`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='id_generator记录表'; - --- 正在导出表 smart-admin-dev.t_id_generator_record 的数据:~5 rows (大约) -DELETE FROM `t_id_generator_record`; -/*!40000 ALTER TABLE `t_id_generator_record` DISABLE KEYS */; -INSERT INTO `t_id_generator_record` (`generator_id`, `year`, `month`, `day`, `last_number`) VALUES - (1, 2019, 3, 30, 1), - (2, 2019, 3, 30, 1), - (2, 2019, 4, 3, 2), - (2, 2019, 4, 8, 2), - (2, 2019, 4, 9, 1); -/*!40000 ALTER TABLE `t_id_generator_record` ENABLE KEYS */; - --- 导出 表 smart-admin-dev.t_notice 结构 -DROP TABLE IF EXISTS `t_notice`; -CREATE TABLE IF NOT EXISTS `t_notice` ( - `id` bigint NOT NULL AUTO_INCREMENT, - `title` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '消息标题', - `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '消息内容', - `deleted` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '删除状态:0未删除 0删除 ', - `send_status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '发送状态 0未发送 1发送', - `create_user` bigint NOT NULL COMMENT '消息创建人', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=108 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; - --- 正在导出表 smart-admin-dev.t_notice 的数据:~14 rows (大约) -DELETE FROM `t_notice`; -/*!40000 ALTER TABLE `t_notice` DISABLE KEYS */; -INSERT INTO `t_notice` (`id`, `title`, `content`, `deleted`, `send_status`, `create_user`, `create_time`, `update_time`) VALUES - (93, '大扫把', '晓冬吃大便', 1, 1, 1, '2019-07-13 17:54:13', '2019-07-13 17:54:21'), - (95, '4444444', '444444444444', 1, 1, 1, '2019-07-13 17:54:53', '2019-09-04 09:42:02'), - (96, '3434', '444444', 1, 1, 1, '2019-07-13 17:58:42', '2019-11-08 09:05:24'), - (97, '44444', '555555555555', 1, 1, 1, '2019-07-13 17:58:54', '2019-09-03 16:19:50'), - (98, '《青花瓷》', '素胚勾勒出青花笔锋浓转淡\n瓶身描绘的牡丹一如你初妆\n冉冉檀香透过窗心事我了然\n周杰伦 青花瓷\n周杰伦 青花瓷\n宣纸上走笔至此搁一半\n釉色渲染仕女图韵味被私藏\n而你嫣然的一笑如含苞待放\n你的美一缕飘散\n去到我去不了的地方\n天青色等烟雨 而我在等你\n炊烟袅袅升起 隔江千万里\n在瓶底书刻隶仿前朝的飘逸\n就当我为遇见你伏笔\n天青色等烟雨 而我在等你\n月色被打捞起 晕开了结局\n如传世的青花瓷自顾自美丽\n你眼带笑意\n色白花青的锦鲤跃然于碗底\n临摹宋体落款时却惦记着你\n你隐藏在窑烧里千年的秘密\n极细腻犹如绣花针落地\n篱外芭蕉惹骤雨门环惹铜绿\n而我路过那江南小镇惹了你\n在泼墨山水画里\n你从墨色深处被隐去\n天青色等烟雨 而我在等你\n炊烟袅袅升起 隔江千万里\n在瓶底书刻隶仿前朝的飘逸\n就当我为遇见你伏笔\n天青色等烟雨 而我在等你\n月色被打捞起 晕开了结局\n如传世的青花瓷自顾自美丽\n你眼带笑意\n天青色等烟雨 而我在等你\n炊烟袅袅升起 隔江千万里\n在瓶底书刻隶仿前朝的飘逸\n就当我为遇见你伏笔\n天青色等烟雨 而我在等你\n月色被打捞起 晕开了结局\n如传世的青花瓷自顾自美丽\n你眼带笑意 ', 1, 1, 1, '2019-08-05 16:36:44', '2019-09-02 17:53:12'), - (99, '1', '2', 1, 1, 30, '2019-08-08 14:53:58', '2019-08-08 14:54:07'), - (100, '呵呵', '呵呵', 1, 1, 1, '2019-08-20 16:52:53', '2019-09-02 17:46:59'), - (101, 'aa', 'bbcc', 1, 1, 30, '2019-08-23 09:51:01', '2019-08-23 09:51:28'), - (102, '1', '2', 0, 1, 1, '2019-09-05 14:28:10', '2019-09-05 14:28:10'), - (103, '12', '22', 0, 1, 1, '2019-09-05 14:29:30', '2019-09-05 14:29:30'), - (104, 'a', 'b', 1, 1, 30, '2019-09-06 14:21:18', '2019-09-06 14:24:07'), - (105, '22222222222', '1111', 0, 0, 1, '2019-11-07 19:05:56', '2019-11-07 19:05:56'), - (106, '423', '234', 0, 0, 37, '2019-11-08 21:48:19', '2019-11-08 21:48:19'), - (107, 'AAS', 's\'da\'ssdas', 1, 1, 1, '2019-11-13 19:06:55', '2019-11-14 09:07:06'); -/*!40000 ALTER TABLE `t_notice` ENABLE KEYS */; - --- 导出 表 smart-admin-dev.t_notice_receive_record 结构 -DROP TABLE IF EXISTS `t_notice_receive_record`; -CREATE TABLE IF NOT EXISTS `t_notice_receive_record` ( - `id` bigint NOT NULL AUTO_INCREMENT, - `notice_id` bigint NOT NULL COMMENT '消息id', - `employee_id` bigint NOT NULL COMMENT '用户id', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=141 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; - --- 正在导出表 smart-admin-dev.t_notice_receive_record 的数据:~27 rows (大约) -DELETE FROM `t_notice_receive_record`; -/*!40000 ALTER TABLE `t_notice_receive_record` DISABLE KEYS */; -INSERT INTO `t_notice_receive_record` (`id`, `notice_id`, `employee_id`, `create_time`, `update_time`) VALUES - (114, 93, 1, '2019-07-13 17:54:16', '2019-07-13 17:54:16'), - (115, 95, 1, '2019-07-13 17:54:55', '2019-07-13 17:54:55'), - (116, 95, 22, '2019-07-13 17:58:03', '2019-07-13 17:58:03'), - (117, 93, 22, '2019-07-13 17:58:05', '2019-07-13 17:58:05'), - (118, 96, 1, '2019-07-13 17:58:44', '2019-07-13 17:58:44'), - (119, 97, 1, '2019-07-13 17:58:58', '2019-07-13 17:58:58'), - (120, 98, 1, '2019-08-05 16:37:01', '2019-08-05 16:37:01'), - (121, 99, 30, '2019-08-08 14:54:05', '2019-08-08 14:54:05'), - (122, 99, 1, '2019-08-08 15:15:44', '2019-08-08 15:15:44'), - (123, 100, 1, '2019-08-20 16:53:29', '2019-08-20 16:53:29'), - (124, 101, 30, '2019-08-23 09:51:11', '2019-08-23 09:51:11'), - (125, 101, 1, '2019-08-23 12:46:27', '2019-08-23 12:46:27'), - (126, 102, 1, '2019-09-05 14:28:32', '2019-09-05 14:28:32'), - (127, 104, 30, '2019-09-06 14:23:58', '2019-09-06 14:23:58'), - (128, 104, 1, '2019-09-06 15:25:13', '2019-09-06 15:25:13'), - (129, 101, 14, '2019-11-02 21:46:13', '2019-11-02 21:46:13'), - (130, 102, 14, '2019-11-02 21:46:14', '2019-11-02 21:46:14'), - (131, 104, 14, '2019-11-02 21:46:15', '2019-11-02 21:46:15'), - (132, 98, 14, '2019-11-02 21:46:18', '2019-11-02 21:46:18'), - (133, 103, 37, '2019-11-07 19:58:06', '2019-11-07 19:58:06'), - (134, 103, 1, '2019-11-07 20:03:54', '2019-11-07 20:03:54'), - (135, 107, 1, '2019-11-13 19:07:02', '2019-11-13 19:07:02'), - (136, 107, 38, '2019-11-15 02:11:04', '2019-11-15 02:11:04'), - (137, 104, 38, '2019-11-15 02:11:17', '2019-11-15 02:11:17'), - (138, 101, 38, '2019-11-15 02:26:33', '2019-11-15 02:26:33'), - (139, 98, 38, '2019-11-15 02:29:32', '2019-11-15 02:29:32'), - (140, 100, 38, '2019-11-15 03:19:18', '2019-11-15 03:19:18'); -/*!40000 ALTER TABLE `t_notice_receive_record` ENABLE KEYS */; - --- 导出 表 smart-admin-dev.t_order_operate_log 结构 -DROP TABLE IF EXISTS `t_order_operate_log`; -CREATE TABLE IF NOT EXISTS `t_order_operate_log` ( - `id` bigint NOT NULL AUTO_INCREMENT, - `order_id` int NOT NULL COMMENT '各种单据的id', - `order_type` int NOT NULL COMMENT '单据类型', - `operate_type` int NOT NULL COMMENT '操作类型', - `operate_content` text NOT NULL COMMENT '操作类型 对应的中文', - `operate_remark` text COMMENT '操作备注', - `employee_id` int NOT NULL COMMENT '员工id', - `employee_name` varchar(1000) NOT NULL COMMENT '员工名称', - `ext_data` text COMMENT '额外信息', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `order_id_order_type` (`order_id`,`order_type`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='各种单据操作记录\r\n'; - --- 正在导出表 smart-admin-dev.t_order_operate_log 的数据:~0 rows (大约) -DELETE FROM `t_order_operate_log`; -/*!40000 ALTER TABLE `t_order_operate_log` DISABLE KEYS */; -/*!40000 ALTER TABLE `t_order_operate_log` ENABLE KEYS */; - --- 导出 表 smart-admin-dev.t_peony 结构 -DROP TABLE IF EXISTS `t_peony`; -CREATE TABLE IF NOT EXISTS `t_peony` ( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', - `kind` varchar(500) DEFAULT NULL COMMENT '品种', - `name` varchar(500) DEFAULT NULL COMMENT '名字', - `color` varchar(500) DEFAULT NULL COMMENT '颜色', - `image_url` text COMMENT '图片链接', - `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COMMENT='牡丹花'; - --- 正在导出表 smart-admin-dev.t_peony 的数据:~3 rows (大约) -DELETE FROM `t_peony`; -/*!40000 ALTER TABLE `t_peony` DISABLE KEYS */; -INSERT INTO `t_peony` (`id`, `kind`, `name`, `color`, `image_url`, `create_time`, `update_time`) VALUES - (5, '复色类', '什样锦', '红色', 'https://bkimg.cdn.bcebos.com/pic/3c6d55fbb2fb43160ee185da2aa4462308f7d390?x-bce-process=image/watermark,g_7,image_d2F0ZXIvYmFpa2UxNTA=,xp_5,yp_5', '2020-04-06 22:02:32', '2020-04-06 22:03:30'), - (6, '绿色', '绿香球', '绿色', '11', '2020-04-06 22:14:35', '2020-04-06 22:17:51'), - (7, '墨紫色类', '冠世墨玉', '紫色', '34534534534', '2020-04-06 22:15:19', '2020-04-06 22:18:21'); -/*!40000 ALTER TABLE `t_peony` ENABLE KEYS */; - --- 导出 表 smart-admin-dev.t_position 结构 -DROP TABLE IF EXISTS `t_position`; -CREATE TABLE IF NOT EXISTS `t_position` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `position_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '岗位名称', - `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '岗位描述', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='岗位表'; - --- 正在导出表 smart-admin-dev.t_position 的数据:~13 rows (大约) -DELETE FROM `t_position`; -/*!40000 ALTER TABLE `t_position` DISABLE KEYS */; -INSERT INTO `t_position` (`id`, `position_name`, `remark`, `update_time`, `create_time`) VALUES - (1, 'java develop', 'java develop is good job', '2019-07-03 15:18:45', '2019-07-03 15:18:45'), - (2, 'android develop', 'android develop is good job', '2019-07-04 16:11:11', '2019-07-04 16:11:00'), - (3, '测试岗位1', '这是内容11', '2019-09-02 16:39:33', '2019-07-10 14:03:50'), - (8, '测试岗位2', '测试岗位2.。', '2019-09-04 10:19:40', '2019-09-04 10:19:32'), - (9, '测试岗位3', '测试岗位3', '2019-09-05 14:39:43', '2019-09-05 14:39:43'), - (10, '测试岗位4', '测试岗位4', '2019-09-05 14:39:48', '2019-09-05 14:39:48'), - (11, '测试岗位5', '测试岗位5', '2019-09-05 14:39:53', '2019-09-05 14:39:53'), - (12, '测试岗位6', '测试岗位6', '2019-09-05 14:39:58', '2019-09-05 14:39:58'), - (13, '测试岗位7', '测试岗位7', '2019-09-05 14:40:03', '2019-09-05 14:40:03'), - (14, '测试岗位8', '测试岗位8', '2019-09-05 14:40:09', '2019-09-05 14:40:09'), - (15, '测试岗位9', '测试岗位9', '2019-09-05 14:40:19', '2019-09-05 14:40:19'), - (16, 'aaa22222', 'ddddddddddd', '2019-11-15 17:04:29', '2019-11-06 15:58:37'), - (17, 'ddd', 'fsdef', '2019-11-15 17:04:40', '2019-11-15 17:04:40'); -/*!40000 ALTER TABLE `t_position` ENABLE KEYS */; - --- 导出 表 smart-admin-dev.t_position_relation 结构 -DROP TABLE IF EXISTS `t_position_relation`; -CREATE TABLE IF NOT EXISTS `t_position_relation` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `position_id` int DEFAULT NULL COMMENT '岗位ID', - `employee_id` int DEFAULT NULL COMMENT '员工ID', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`), - KEY `job_id` (`position_id`) USING BTREE, - KEY `employee_id` (`employee_id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=53 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='岗位关联表'; - --- 正在导出表 smart-admin-dev.t_position_relation 的数据:~27 rows (大约) -DELETE FROM `t_position_relation`; -/*!40000 ALTER TABLE `t_position_relation` DISABLE KEYS */; -INSERT INTO `t_position_relation` (`id`, `position_id`, `employee_id`, `update_time`, `create_time`) VALUES - (14, 1, 28, '2019-07-10 16:40:14', '2019-07-10 16:40:14'), - (18, 1, 29, '2019-07-11 10:18:22', '2019-07-11 10:18:22'), - (19, 3, 29, '2019-07-11 10:18:22', '2019-07-11 10:18:22'), - (20, 2, 29, '2019-07-11 10:18:22', '2019-07-11 10:18:22'), - (21, 1, 30, '2019-08-08 14:35:51', '2019-08-08 14:35:51'), - (22, 2, 30, '2019-08-08 14:35:51', '2019-08-08 14:35:51'), - (23, 3, 30, '2019-08-08 14:35:51', '2019-08-08 14:35:51'), - (26, 2, 31, '2019-08-23 09:26:44', '2019-08-23 09:26:44'), - (27, 3, 31, '2019-08-23 09:26:44', '2019-08-23 09:26:44'), - (28, 3, 32, '2019-09-04 09:05:47', '2019-09-04 09:05:47'), - (29, 2, 32, '2019-09-04 09:05:47', '2019-09-04 09:05:47'), - (30, 3, 22, '2019-09-04 09:06:46', '2019-09-04 09:06:46'), - (31, 2, 22, '2019-09-04 09:06:46', '2019-09-04 09:06:46'), - (35, 8, 35, '2019-09-04 15:09:00', '2019-09-04 15:09:00'), - (36, 3, 35, '2019-09-04 15:09:00', '2019-09-04 15:09:00'), - (37, 15, 23, '2019-09-05 16:13:02', '2019-09-05 16:13:02'), - (38, 14, 23, '2019-09-05 16:13:02', '2019-09-05 16:13:02'), - (39, 13, 23, '2019-09-05 16:13:02', '2019-09-05 16:13:02'), - (40, 3, 34, '2019-09-06 08:55:18', '2019-09-06 08:55:18'), - (41, 2, 34, '2019-09-06 08:55:18', '2019-09-06 08:55:18'), - (42, 1, 34, '2019-09-06 08:55:18', '2019-09-06 08:55:18'), - (43, 14, 36, '2019-09-09 17:01:39', '2019-09-09 17:01:39'), - (44, 3, 37, '2019-11-08 09:32:39', '2019-11-08 09:32:39'), - (46, 8, 38, '2019-11-14 16:08:05', '2019-11-14 16:08:05'), - (50, 16, 39, '2019-11-15 17:07:04', '2019-11-15 17:07:04'), - (51, 13, 39, '2019-11-15 17:07:04', '2019-11-15 17:07:04'), - (52, 14, 39, '2019-11-15 17:07:04', '2019-11-15 17:07:04'); -/*!40000 ALTER TABLE `t_position_relation` ENABLE KEYS */; - --- 导出 表 smart-admin-dev.t_privilege 结构 -DROP TABLE IF EXISTS `t_privilege`; -CREATE TABLE IF NOT EXISTS `t_privilege` ( - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '功能权限表主键id', - `type` tinyint NOT NULL COMMENT '1.菜单 2.功能点', - `name` varchar(50) NOT NULL COMMENT '菜单名称', - `key` varchar(1000) NOT NULL COMMENT '路由name 英文关键字', - `url` text COMMENT '路由path/type=3为API接口', - `sort` int NOT NULL DEFAULT '0' COMMENT '排序', - `parent_key` varchar(1000) DEFAULT NULL COMMENT '父级key', - `update_time` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`), - UNIQUE KEY `key` (`key`) USING BTREE, - KEY `type` (`type`) USING BTREE, - KEY `parent_key` (`parent_key`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=127 DEFAULT CHARSET=utf8 COMMENT='权限功能表'; - --- 正在导出表 smart-admin-dev.t_privilege 的数据:~103 rows (大约) -DELETE FROM `t_privilege`; -/*!40000 ALTER TABLE `t_privilege` DISABLE KEYS */; -INSERT INTO `t_privilege` (`id`, `type`, `name`, `key`, `url`, `sort`, `parent_key`, `update_time`, `create_time`) VALUES - (1, 1, '人员管理', 'Employee', '/employee', 20, 'System', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (2, 1, '角色管理', 'RoleManage', '/employee/role', 21, 'Employee', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (3, 1, '岗位管理', 'PositionList', '/employee/position', 22, 'Employee', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (4, 1, '员工管理', 'RoleEmployeeManage', '/employee/role-employee-manage', 23, 'Employee', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (5, 1, '系统设置', 'SystemSetting', '/system-setting', 29, 'System', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (6, 1, '系统参数', 'SystemConfig', '/system-setting/system-config', 30, 'SystemSetting', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (8, 1, '菜单设置', 'SystemPrivilege', '/system-setting/system-privilege', 31, 'SystemSetting', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (9, 1, '消息管理', 'Notice', '/notice', 10, 'Business', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (10, 1, '通知管理', 'NoticeList', '/notice/notice-list', 11, 'Notice', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (11, 1, '个人消息', 'PersonNotice', '/notice/person-notice', 12, 'Notice', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (12, 1, '邮件管理', 'Email', '/email', 4, 'Business', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (13, 1, '邮件管理', 'EmailList', '/email/email-list', 5, 'Email', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (14, 1, '发送邮件', 'SendMail', '/email/send-mail', 6, 'Email', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (15, 1, '用户日志', 'UserLog', '/user-log', 26, 'System', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (16, 1, '用户操作日志', 'UserOperateLog', '/user-log/user-operate-log', 27, 'UserLog', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (17, 1, '用户登录日志', 'UserLoginLog', '/user-log/user-login-log', 28, 'UserLog', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (18, 1, '系统监控', 'Monitor', '/monitor', 37, 'Support', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (19, 1, '在线人数', 'OnlineUser', '/monitor/online-user', 38, 'Monitor', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (20, 1, 'SQL监控', 'Sql', '/monitor/sql', 39, 'Monitor', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (21, 1, '定时任务', 'Task', '/task', 42, 'Support', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (22, 1, '任务管理', 'TaskList', '/system-setting/task-list', 43, 'Task', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (23, 1, '动态加载', 'Reload', '/reload', 40, 'Support', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (24, 1, 'SmartReload', 'SmartReloadList', '/reload/smart-reload-list', 41, 'Reload', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (25, 1, '接口文档', 'ApiDoc', '/api-doc', 33, 'Support', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (26, 1, 'Swagger接口文档', 'Swagger', '/api-doc/swagger', 34, 'ApiDoc', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (27, 1, '三级路由', 'ThreeRouter', '/three-router', 14, 'Business', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (28, 1, '三级菜单', 'LevelTwo', '/three-router/level-two', 15, 'ThreeRouter', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (30, 1, '三级菜单子哈', 'RoleTwoTwo', '/three-router/level-two/level-three2', 17, 'LevelTwo', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (31, 1, '二级菜单', 'RoleOneOne', '/three-router/level-two2', 18, 'ThreeRouter', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (32, 1, 'KeepAlive', 'KeepAlive', '/keep-alive', 7, 'Business', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (33, 1, 'KeepAlive列表', 'KeepAliveContentList', '/keep-alive/content-list', 8, 'KeepAlive', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (34, 1, 'KeepAlive表单', 'KeepAliveAddContent', '/keep-alive/add-content', 9, 'KeepAlive', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (35, 1, '心跳服务', 'HeartBeat', '/heart-beat', 35, 'Support', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (36, 1, '心跳服务', 'HeartBeatList', '/heart-beat/heart-beat-list', 36, 'HeartBeat', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (37, 1, '文件服务', 'File', '/file', 24, 'System', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (38, 1, '文件列表', 'FileList', '/file/file-list', 25, 'File', '2020-12-14 15:16:26', '2019-11-01 11:28:07'), - (39, 2, '添加角色', 'add-role', 'roleController.addRole', 0, 'RoleManage', '2019-11-01 11:47:29', '2019-11-01 11:47:29'), - (40, 2, '删除角色', 'delete-role', 'roleController.deleteRole', 1, 'RoleManage', '2019-11-01 11:47:43', '2019-11-01 11:47:43'), - (41, 2, '编辑角色', 'update-role', 'roleController.updateRole', 2, 'RoleManage', '2019-11-01 11:47:55', '2019-11-01 11:47:55'), - (42, 2, '修改角色权限', 'update-role-privilege', 'rolePrivilegeController.updateRolePrivilege', 3, 'RoleManage', '2019-11-01 11:48:09', '2019-11-01 11:48:09'), - (43, 2, '添加成员', 'add-employee-role', 'roleEmployeeController.addEmployeeList', 4, 'RoleManage', '2019-11-05 10:38:11', '2019-11-05 10:38:11'), - (44, 2, '查询成员', 'search-employee-list', 'roleEmployeeController.listAllEmployeeRoleId,roleEmployeeController.listEmployeeByName,roleController.getAllRole,rolePrivilegeController.listPrivilegeByRoleId', 7, 'RoleManage', '2019-11-05 10:39:04', '2019-11-05 10:39:04'), - (45, 2, '移除成员', 'delete-employee-role', 'roleEmployeeController.removeEmployee', 5, 'RoleManage', '2019-11-05 10:40:09', '2019-11-05 10:40:09'), - (46, 2, '批量移除', 'delete-employee-role-batch', 'roleEmployeeController.removeEmployeeList', 6, 'RoleManage', '2019-11-05 10:40:27', '2019-11-05 10:40:27'), - (47, 2, '查询数据范围', 'query-data-scope', 'dataScopeController.dataScopeList,dataScopeController.dataScopeListByRole,rolePrivilegeController.listPrivilegeByRoleId,privilegeController.queryAll,privilegeController.getAllUrl', 8, 'RoleManage', '2019-11-05 10:40:57', '2019-11-05 10:40:57'), - (48, 2, '更新数据范围', 'update-data-scope', 'dataScopeController.dataScopeBatchSet', 9, 'RoleManage', '2019-11-05 10:41:03', '2019-11-05 10:41:03'), - (49, 2, '查询', 'search-position', 'positionController.queryJobById,positionController.getJobPage', 0, 'PositionList', '2019-11-05 10:41:30', '2019-11-05 10:41:30'), - (50, 2, '添加', 'add-position', 'positionController.addJob', 1, 'PositionList', '2019-11-05 10:41:40', '2019-11-05 10:41:40'), - (51, 2, '修改', 'update-position', 'positionController.updateJob', 2, 'PositionList', '2019-11-05 10:41:49', '2019-11-05 10:41:49'), - (52, 2, '删除', 'delete-position', 'positionController.removeJob', 3, 'PositionList', '2019-11-05 10:41:57', '2019-11-05 10:41:57'), - (53, 2, '添加部门', 'add-department', 'departmentController.addDepartment', 0, 'RoleEmployeeManage', '2019-11-05 11:11:18', '2019-11-05 11:11:18'), - (54, 2, '编辑部门', 'update-department', 'departmentController.updateDepartment', 1, 'RoleEmployeeManage', '2019-11-05 11:11:29', '2019-11-05 11:11:29'), - (55, 2, '删除部门', 'delete-department', 'departmentController.delDepartment', 2, 'RoleEmployeeManage', '2019-11-05 11:11:48', '2019-11-05 11:11:48'), - (56, 2, '查询', 'search-department', 'departmentController.listAll,departmentController.getDepartment,departmentController.listDepartmentEmployee,departmentController.listDepartment,employeeController.query', 3, 'RoleEmployeeManage', '2019-11-05 11:12:09', '2019-11-05 11:12:09'), - (57, 2, '添加成员', 'add-employee', 'employeeController.addEmployee', 4, 'RoleEmployeeManage', '2019-11-05 17:06:23', '2019-11-05 17:06:23'), - (58, 2, '编辑成员', 'update-employee', 'employeeController.updateEmployee', 5, 'RoleEmployeeManage', '2019-11-05 17:06:57', '2019-11-05 17:06:57'), - (59, 2, '禁用', 'disabled-employee', 'employeeController.updateStatus', 6, 'RoleEmployeeManage', '2019-11-05 17:14:35', '2019-11-05 17:14:35'), - (60, 2, '批量操作', 'disabled-employee-batch', 'employeeController.batchUpdateStatus', 7, 'RoleEmployeeManage', '2019-11-05 17:19:23', '2019-11-05 17:19:23'), - (61, 2, '员工角色编辑', 'update-employee-role', 'employeeController.updateRoles', 8, 'RoleEmployeeManage', '2019-11-05 17:21:15', '2019-11-05 17:21:15'), - (62, 2, '重置密码', 'reset-employee-password', 'employeeController.resetPasswd', 10, 'RoleEmployeeManage', '2019-11-05 17:22:13', '2019-11-05 17:22:13'), - (63, 2, '删除员工', 'delete-employee', 'employeeController.deleteEmployeeById', 9, 'RoleEmployeeManage', '2019-11-05 17:22:27', '2019-11-05 17:22:27'), - (64, 2, '查询系统参数', 'system-params-search', 'systemConfigController.selectByKey,systemConfigController.getListByGroup,systemConfigController.getSystemConfigPage', 0, 'SystemConfig', '2019-11-05 17:23:41', '2019-11-05 17:23:41'), - (65, 2, '添加系统参数', 'system-params-add', 'systemConfigController.addSystemConfig', 1, 'SystemConfig', '2019-11-05 17:26:00', '2019-11-05 17:26:00'), - (66, 2, '修改系统参数', 'system-config-update', 'systemConfigController.updateSystemConfig', 2, 'SystemConfig', '2019-11-05 17:26:07', '2019-11-05 17:26:07'), - (67, 2, '搜索系统参数', 'system-config-search', 'systemConfigController.selectByKey,systemConfigController.getListByGroup,systemConfigController.getSystemConfigPage', 3, 'SystemConfig', '2019-11-05 17:26:44', '2019-11-05 17:26:44'), - (69, 2, '编辑', 'privilege-main-update', 'privilegeController.menuBatchSave,privilegeController.functionSaveOrUpdate', 1, 'SystemPrivilege', '2020-12-14 15:17:11', '2019-11-05 17:27:28'), - (70, 2, '查询', 'privilege-main-search', 'privilegeController.queryAll,privilegeController.getAllUrl,privilegeController.functionQuery', 3, 'SystemPrivilege', '2020-12-14 15:17:11', '2019-11-05 17:28:45'), - (71, 2, '查询', 'notice-query', 'noticeController.queryReceiveByPage,noticeController.queryUnreadByPage,noticeController.queryByPage,noticeController.detail', 0, 'NoticeList', '2019-11-05 17:30:16', '2019-11-05 17:30:16'), - (72, 2, '添加', 'notice-add', 'noticeController.add', 1, 'NoticeList', '2019-11-05 17:30:28', '2019-11-05 17:30:28'), - (73, 2, '修改', 'notice-edit', 'noticeController.update', 2, 'NoticeList', '2019-11-05 17:31:24', '2019-11-05 17:31:24'), - (74, 2, '删除', 'notice-delete', 'noticeController.delete', 3, 'NoticeList', '2019-11-06 11:12:32', '2019-11-06 11:12:32'), - (75, 2, '详情', 'notice-detail', 'noticeController.detail', 4, 'NoticeList', '2019-11-06 11:12:44', '2019-11-06 11:12:44'), - (76, 2, '发送', 'notice-send', 'noticeController.send', 5, 'NoticeList', '2019-11-06 11:12:51', '2019-11-06 11:12:51'), - (77, 2, '查询', 'person-notice-query', 'noticeController.queryReceiveByPage,noticeController.queryUnreadByPage,noticeController.queryByPage', 0, 'PersonNotice', '2019-11-06 11:13:27', '2019-11-06 11:13:27'), - (78, 2, '详情', 'person-notice-detail', 'noticeController.detail', 1, 'PersonNotice', '2019-11-06 11:13:35', '2019-11-06 11:13:35'), - (79, 2, '查询', 'email-query', 'emailController.queryByPage,emailController.detail', 0, 'EmailList', '2019-11-06 11:13:49', '2019-11-06 11:13:49'), - (80, 2, '新增', 'email-add', 'emailController.add', 1, 'EmailList', '2019-11-06 11:14:02', '2019-11-06 11:14:02'), - (81, 2, '编辑', 'email-update', 'emailController.update', 2, 'EmailList', '2019-11-06 11:14:08', '2019-11-06 11:14:08'), - (82, 2, '删除', 'email-delete', 'emailController.delete', 3, 'EmailList', '2019-11-06 11:14:16', '2019-11-06 11:14:16'), - (83, 2, '发送', 'email-send', 'emailController.send', 0, 'SendMail', '2019-11-06 11:14:40', '2019-11-06 11:14:40'), - (84, 2, '查询', 'user-operate-log-search', 'userOperateLogController.queryByPage', 0, 'UserOperateLog', '2019-11-06 11:15:04', '2019-11-06 11:15:04'), - (85, 2, '详情', 'user-operate-log-detail', 'userOperateLogController.detail', 1, 'UserOperateLog', '2019-11-06 11:15:16', '2019-11-06 11:15:16'), - (86, 2, '删除', 'user-operate-log-delete', 'userOperateLogController.delete', 2, 'UserOperateLog', '2019-11-06 11:15:25', '2019-11-06 11:15:25'), - (87, 2, '查询', 'user-login-log-search', 'userLoginLogController.queryByPage', 0, 'UserLoginLog', '2019-11-06 11:15:43', '2019-11-06 11:15:43'), - (88, 2, '删除', 'user-login-log-delete', 'userLoginLogController.delete', 1, 'UserLoginLog', '2019-11-06 11:15:49', '2019-11-06 11:15:49'), - (89, 2, '查询', 'online-user-search', 'userLoginLogController.queryUserOnLine', 0, 'OnlineUser', '2019-11-06 11:16:05', '2019-11-06 11:16:05'), - (90, 2, '查询任务', 'task-search', 'quartzController.query', 0, 'TaskList', '2019-11-06 11:16:24', '2019-11-06 11:16:24'), - (91, 2, '刷新任务', 'task-refresh', 'quartzController.query', 1, 'TaskList', '2019-11-06 11:16:50', '2019-11-06 11:16:50'), - (92, 2, '添加任务', 'task-add', 'quartzController.saveOrUpdateTask', 2, 'TaskList', '2019-11-06 11:17:04', '2019-11-06 11:17:04'), - (93, 2, '编辑任务', 'task-update', 'quartzController.saveOrUpdateTask', 3, 'TaskList', '2019-11-06 11:17:17', '2019-11-06 11:17:17'), - (94, 2, '暂停任务', 'task-pause', 'quartzController.pauseTask', 4, 'TaskList', '2019-11-06 11:17:25', '2019-11-06 11:17:25'), - (95, 2, '恢复任务', 'task-resume', 'quartzController.resumeTask', 5, 'TaskList', '2019-11-06 11:17:31', '2019-11-06 11:17:31'), - (96, 2, '立即运行任务', 'task-run', 'quartzController.runTask', 6, 'TaskList', '2019-11-06 11:17:38', '2019-11-06 11:17:38'), - (97, 2, '查看任务日志', 'task-query-log', 'quartzController.queryLog', 7, 'TaskList', '2019-11-06 11:17:47', '2019-11-06 11:17:47'), - (98, 2, '删除任务', 'task-delete', 'quartzController.deleteTask', 8, 'TaskList', '2019-11-06 11:17:53', '2019-11-06 11:17:53'), - (99, 2, '查询', 'smart-reload-search', 'smartReloadController.listAllReloadItem', 0, 'SmartReloadList', '2019-11-06 11:18:06', '2019-11-06 11:18:06'), - (100, 2, '执行reload', 'smart-reload-update', 'smartReloadController.updateByTag', 1, 'SmartReloadList', '2019-11-06 11:18:14', '2019-11-06 11:18:14'), - (101, 2, '查看执行结果', 'smart-reload-result', 'smartReloadController.queryReloadResult', 2, 'SmartReloadList', '2019-11-06 11:18:19', '2019-11-06 11:18:19'), - (102, 2, '查询任务', 'heart-beat-query', 'heartBeatController.query', 0, 'HeartBeatList', '2019-11-06 11:18:38', '2019-11-06 11:18:38'), - (103, 2, '查询', 'file-filePage-query', 'fileController.queryListByPage,fileController.localGetFile,fileController.downLoadById', 0, 'FileList', '2019-11-06 11:19:06', '2019-11-06 11:19:06'), - (104, 2, '上传', 'file-filePage-upload', 'fileController.qiNiuUpload,fileController.localUpload,fileController.aliYunUpload,fileController.saveFile', 1, 'FileList', '2019-11-06 11:19:36', '2019-11-06 11:19:36'), - (105, 2, '下载', 'file-filePage-download', 'fileController.downLoadById', 2, 'FileList', '2019-11-16 10:05:02', '2019-11-16 10:05:02'), - (106, 1, '业务功能', 'Business', '/business', 0, NULL, '2020-12-14 15:16:26', '2020-12-14 15:16:26'), - (107, 1, '牡丹管理', 'Peony', '/peony', 1, 'Business', '2020-12-14 15:16:26', '2020-12-14 15:16:26'), - (108, 1, '牡丹花列表', 'PeonyList', '/peony/peony-list', 2, 'Peony', '2020-12-14 15:16:26', '2020-12-14 15:16:26'), - (109, 1, '牡丹花列表1', 'PeonyList1', '/peony/peony-list1', 3, 'Peony', '2020-12-14 15:16:26', '2020-12-14 15:16:26'), - (110, 1, '消息详情', 'NoticeDetail', '/notice/notice-detail', 13, 'Notice', '2020-12-14 15:16:26', '2020-12-14 15:16:26'), - (111, 1, '三级菜单子颗粒', 'ThreeLevelRouterView', '/three-router/level-two/level-three1', 16, 'LevelTwo', '2020-12-14 15:16:26', '2020-12-14 15:16:26'), - (112, 1, '系统设置', 'System', '/system', 19, NULL, '2020-12-14 15:16:26', '2020-12-14 15:16:26'), - (113, 1, '开发专用', 'Support', '/support', 32, NULL, '2020-12-14 15:16:26', '2020-12-14 15:16:26'), - (114, 2, '查询', 'peony-list-query', '', 1, 'PeonyList', '2020-12-14 15:16:30', '2020-12-14 15:16:30'), - (115, 2, '新增', 'peony-list-add', '', 2, 'PeonyList', '2020-12-14 15:16:30', '2020-12-14 15:16:30'), - (116, 2, '编辑', 'peony-list-update', '', 3, 'PeonyList', '2020-12-14 15:16:30', '2020-12-14 15:16:30'), - (117, 2, '批量删除', 'peony-list-batch-delete', '', 4, 'PeonyList', '2020-12-14 15:16:30', '2020-12-14 15:16:30'), - (118, 2, '批量导出', 'peony-list-batch-export', '', 5, 'PeonyList', '2020-12-14 15:16:30', '2020-12-14 15:16:30'), - (119, 2, '导出全部', 'peony-list-export-all', '', 6, 'PeonyList', '2020-12-14 15:16:30', '2020-12-14 15:16:30'), - (120, 2, '查询', 'peony1-list-query', '', 1, 'PeonyList1', '2020-12-14 15:16:33', '2020-12-14 15:16:33'), - (121, 2, '新增', 'peony1-list-add', '', 2, 'PeonyList1', '2020-12-14 15:16:33', '2020-12-14 15:16:33'), - (122, 2, '编辑', 'peony1-list-update', '', 3, 'PeonyList1', '2020-12-14 15:16:33', '2020-12-14 15:16:33'), - (123, 2, '批量删除', 'peony1-list-batch-delete', '', 4, 'PeonyList1', '2020-12-14 15:16:33', '2020-12-14 15:16:33'), - (124, 2, '批量导出', 'peony1-list-batch-export', '', 5, 'PeonyList1', '2020-12-14 15:16:33', '2020-12-14 15:16:33'), - (125, 2, '导出全部', 'peony1-list-export-all', '', 6, 'PeonyList1', '2020-12-14 15:16:33', '2020-12-14 15:16:33'), - (126, 2, '批量保存功能点', 'privilege-batch-save-points', 'privilegeController.functionSaveOrUpdate', 1, 'SystemPrivilege', '2020-12-14 15:17:11', '2020-12-14 15:17:11'); -/*!40000 ALTER TABLE `t_privilege` ENABLE KEYS */; - --- 导出 表 smart-admin-dev.t_quartz_task 结构 -DROP TABLE IF EXISTS `t_quartz_task`; -CREATE TABLE IF NOT EXISTS `t_quartz_task` ( - `id` int NOT NULL AUTO_INCREMENT, - `task_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '任务名称', - `task_bean` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'spring bean名称', - `task_params` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '任务参数', - `task_cron` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '运行cron表达式', - `task_status` tinyint NOT NULL DEFAULT '0' COMMENT '任务状态0:正常,1:暂停', - `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; - --- 正在导出表 smart-admin-dev.t_quartz_task 的数据:~5 rows (大约) -DELETE FROM `t_quartz_task`; -/*!40000 ALTER TABLE `t_quartz_task` DISABLE KEYS */; -INSERT INTO `t_quartz_task` (`id`, `task_name`, `task_bean`, `task_params`, `task_cron`, `task_status`, `remark`, `update_time`, `create_time`) VALUES - (9, '2312332', 'exampleTask', '21314', '*/5 * * * * ?', 1, NULL, '2019-09-06 14:41:55', '2019-04-19 15:24:26'), - (13, '567', 'exampleTask', 'ads', '*/5 * * * * ?', 1, NULL, '2019-09-04 16:37:25', '2019-04-23 15:32:17'), - (21, '11', 'exampleTask', '11', '*/5 * * * * ?', 1, NULL, '2019-09-04 16:37:30', '2019-04-26 17:29:21'), - (22, '33', 'exampleTask', '333', '*/5 * * * * ?', 1, NULL, '2019-04-26 17:29:36', '2019-04-26 17:29:36'), - (23, '1', 'exampleTask', '3', '*/5 * * * * ?', 0, NULL, '2019-09-05 17:21:12', '2019-04-26 17:29:50'); -/*!40000 ALTER TABLE `t_quartz_task` ENABLE KEYS */; - --- 导出 表 smart-admin-dev.t_quartz_task_log 结构 -DROP TABLE IF EXISTS `t_quartz_task_log`; -CREATE TABLE IF NOT EXISTS `t_quartz_task_log` ( - `id` int NOT NULL AUTO_INCREMENT, - `task_id` int NOT NULL COMMENT '任务id', - `task_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '任务名称', - `task_params` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '任务参数', - `process_status` tinyint NOT NULL COMMENT '任务处理状态0:成功,1:失败', - `process_duration` bigint NOT NULL DEFAULT '0' COMMENT '运行时长', - `process_log` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '日志', - `ip_address` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '运行主机ip', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=732881 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; - --- 正在导出表 smart-admin-dev.t_quartz_task_log 的数据:~11 rows (大约) -DELETE FROM `t_quartz_task_log`; -/*!40000 ALTER TABLE `t_quartz_task_log` DISABLE KEYS */; -INSERT INTO `t_quartz_task_log` (`id`, `task_id`, `task_name`, `task_params`, `process_status`, `process_duration`, `process_log`, `ip_address`, `update_time`, `create_time`) VALUES - (732870, 9, '231233', '2131', 0, 5, NULL, '127.0.0.1', '2019-05-05 15:28:01', '2019-05-05 15:28:01'), - (732871, 9, '231233', '2131', 0, 32, NULL, '172.16.0.145', '2019-05-05 15:54:40', '2019-05-05 15:54:40'), - (732872, 22, '33', '333', 0, 31, NULL, '172.16.0.145', '2019-05-07 16:20:31', '2019-05-07 16:20:31'), - (732873, 9, '231233', '2131', 0, 304, NULL, '172.16.0.145', '2019-08-02 09:29:36', '2019-08-02 09:29:36'), - (732874, 9, '231233', '2131', 0, 24, NULL, '172.16.0.145', '2019-08-08 16:48:49', '2019-08-08 16:48:49'), - (732875, 9, '231233', '2131', 0, 147, NULL, '172.16.0.145', '2019-08-23 09:41:08', '2019-08-23 09:41:08'), - (732876, 9, '231233', '2131', 0, 610, NULL, '172.16.0.145', '2019-08-26 16:16:34', '2019-08-26 16:16:34'), - (732877, 9, '2312332', '2131', 0, 27, NULL, '172.16.0.145', '2019-09-05 14:34:51', '2019-09-05 14:34:51'), - (732878, 9, '2312332', '2131', 0, 5, NULL, '172.16.0.145', '2019-09-05 17:18:17', '2019-09-05 17:18:17'), - (732879, 9, '2312332', '2131', 0, 1, NULL, '172.16.0.145', '2019-09-05 17:20:15', '2019-09-05 17:20:15'), - (732880, 9, '2312332', '2131', 0, 5, NULL, '172.16.0.145', '2019-09-06 14:42:04', '2019-09-06 14:42:04'); -/*!40000 ALTER TABLE `t_quartz_task_log` ENABLE KEYS */; - --- 导出 表 smart-admin-dev.t_reload_item 结构 -DROP TABLE IF EXISTS `t_reload_item`; -CREATE TABLE IF NOT EXISTS `t_reload_item` ( - `tag` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '项名称', - `args` varchar(255) DEFAULT NULL COMMENT '参数 可选', - `identification` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '运行标识', - `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`tag`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; - --- 正在导出表 smart-admin-dev.t_reload_item 的数据:~0 rows (大约) -DELETE FROM `t_reload_item`; -/*!40000 ALTER TABLE `t_reload_item` DISABLE KEYS */; -INSERT INTO `t_reload_item` (`tag`, `args`, `identification`, `update_time`, `create_time`) VALUES - ('system_config', '234', 'xxxx', '2019-11-14 16:46:21', '2019-04-18 11:48:27'); -/*!40000 ALTER TABLE `t_reload_item` ENABLE KEYS */; - --- 导出 表 smart-admin-dev.t_reload_result 结构 -DROP TABLE IF EXISTS `t_reload_result`; -CREATE TABLE IF NOT EXISTS `t_reload_result` ( - `tag` varchar(255) NOT NULL, - `identification` varchar(255) NOT NULL COMMENT '运行标识', - `args` varchar(255) DEFAULT NULL, - `result` tinyint unsigned NOT NULL COMMENT '是否成功 ', - `exception` text, - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; - --- 正在导出表 smart-admin-dev.t_reload_result 的数据:~127 rows (大约) -DELETE FROM `t_reload_result`; -/*!40000 ALTER TABLE `t_reload_result` DISABLE KEYS */; -INSERT INTO `t_reload_result` (`tag`, `identification`, `args`, `result`, `exception`, `create_time`) VALUES - ('system_config', '23', '', 1, NULL, '2019-09-07 17:26:04'), - ('system_config', '23', '', 1, NULL, '2019-09-07 17:28:16'), - ('system_config', '23', '', 1, NULL, '2019-09-07 17:35:39'), - ('system_config', '23', '', 1, NULL, '2019-09-07 17:42:58'), - ('system_config', '23', '', 1, NULL, '2019-09-09 08:30:13'), - ('system_config', '23', '', 1, NULL, '2019-09-11 10:38:19'), - ('system_config', '23', '', 1, NULL, '2019-09-11 10:42:46'), - ('system_config', '23', '', 1, NULL, '2019-09-11 10:49:27'), - ('system_config', '23', '', 1, NULL, '2019-09-11 11:09:10'), - ('system_config', '23', '', 1, NULL, '2019-09-11 11:10:06'), - ('system_config', '23', '', 1, NULL, '2019-09-11 11:18:17'), - ('system_config', '23', '', 1, NULL, '2019-09-11 11:41:18'), - ('system_config', '23', '', 1, NULL, '2019-09-11 11:45:41'), - ('system_config', '23', '', 1, NULL, '2019-09-11 11:46:37'), - ('system_config', '23', '', 1, NULL, '2019-09-11 11:50:35'), - ('system_config', '23', '', 1, NULL, '2019-09-11 14:55:00'), - ('system_config', '23', '', 1, NULL, '2019-09-11 15:26:19'), - ('system_config', '23', '', 1, NULL, '2019-09-11 15:35:51'), - ('system_config', '23', '', 1, NULL, '2019-09-11 15:36:19'), - ('system_config', '23', '', 1, NULL, '2019-09-11 15:36:53'), - ('system_config', '23', '', 1, NULL, '2019-09-11 15:37:58'), - ('system_config', '23', '', 1, NULL, '2019-09-11 15:41:37'), - ('system_config', '23', '', 1, NULL, '2019-09-16 10:12:29'), - ('system_config', '23', '', 1, NULL, '2019-09-20 17:14:08'), - ('system_config', '23', '', 1, NULL, '2019-09-20 17:18:24'), - ('system_config', '23', '', 1, NULL, '2019-09-20 17:23:07'), - ('system_config', '23', '', 1, NULL, '2019-09-20 17:24:17'), - ('system_config', '23', '', 1, NULL, '2019-09-20 17:30:17'), - ('system_config', '23', '', 1, NULL, '2019-09-20 17:31:40'), - ('system_config', '23', '', 1, NULL, '2019-09-20 17:32:34'), - ('system_config', '23', '', 1, NULL, '2019-09-20 17:52:31'), - ('system_config', '23', '', 1, NULL, '2019-09-20 17:55:10'), - ('system_config', '23', '', 1, NULL, '2019-09-20 17:55:47'), - ('system_config', '23', '', 1, NULL, '2019-09-20 17:58:49'), - ('system_config', '23', '', 1, NULL, '2019-09-21 10:53:47'), - ('system_config', '23', '', 1, NULL, '2019-09-22 18:24:21'), - ('system_config', '23', '', 1, NULL, '2019-09-24 09:04:42'), - ('system_config', '23', '', 1, NULL, '2019-10-15 11:06:12'), - ('system_config', '23', '', 1, NULL, '2019-10-15 11:22:10'), - ('system_config', '23', '', 1, NULL, '2019-10-15 16:42:16'), - ('system_config', '23', '', 1, NULL, '2019-10-19 15:18:54'), - ('system_config', '23', '', 1, NULL, '2019-10-19 16:50:10'), - ('system_config', '23', '', 1, NULL, '2019-10-21 15:52:25'), - ('system_config', '23', '', 1, NULL, '2019-10-23 10:24:38'), - ('system_config', '23', '', 1, NULL, '2019-10-23 10:28:45'), - ('system_config', '23', '', 1, NULL, '2019-10-23 16:35:45'), - ('system_config', '23', '', 1, NULL, '2019-10-23 16:38:48'), - ('system_config', '23', '', 1, NULL, '2019-10-25 08:52:22'), - ('system_config', '23', '', 1, NULL, '2019-10-28 16:04:30'), - ('system_config', '23', '', 1, NULL, '2019-10-30 19:59:24'), - ('system_config', '23', '', 1, NULL, '2019-10-31 14:29:26'), - ('system_config', '23', '', 1, NULL, '2019-10-31 14:35:38'), - ('system_config', '23', '', 1, NULL, '2019-10-31 15:58:39'), - ('system_config', '23', '', 1, NULL, '2019-10-31 17:34:48'), - ('system_config', '23', '', 1, NULL, '2019-11-01 11:23:26'), - ('system_config', '23', '', 1, NULL, '2019-11-01 14:55:34'), - ('system_config', '23', '', 1, NULL, '2019-11-02 08:49:44'), - ('system_config', '23', '', 1, NULL, '2019-11-02 09:40:52'), - ('system_config', '23', '', 1, NULL, '2019-11-02 09:42:48'), - ('system_config', '23', '', 1, NULL, '2019-11-02 09:47:38'), - ('system_config', '23', '', 1, NULL, '2019-11-02 09:50:57'), - ('system_config', '23', '', 1, NULL, '2019-11-02 09:51:32'), - ('system_config', '23', '', 1, NULL, '2019-11-02 09:51:48'), - ('system_config', '23', '', 1, NULL, '2019-11-02 15:48:21'), - ('system_config', '23', '', 1, NULL, '2019-11-02 20:48:44'), - ('system_config', '23', '', 1, NULL, '2019-11-02 21:27:50'), - ('system_config', '23', '', 1, NULL, '2019-11-03 22:10:32'), - ('system_config', '23', '', 1, NULL, '2019-11-03 22:10:32'), - ('system_config', '23', '', 1, NULL, '2019-11-04 09:10:24'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-05 10:24:51'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-06 11:22:42'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-06 11:25:54'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-06 11:27:04'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-06 11:28:00'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-06 11:34:06'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-06 11:34:43'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-06 11:53:11'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-06 11:56:05'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-06 13:52:39'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-06 15:29:29'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-06 16:05:36'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-06 16:06:13'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-06 16:13:22'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-06 16:19:38'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-06 16:21:37'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-06 16:22:23'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-08 08:50:08'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-08 13:37:34'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-09 08:35:08'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-09 08:54:38'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-09 09:00:32'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-09 09:01:24'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-09 09:24:16'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-09 09:26:46'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-09 09:43:13'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-09 09:44:48'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-09 10:28:30'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-09 11:24:19'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-11 09:40:42'), - ('system_config', '23', '4234234', 1, NULL, '2019-11-13 17:25:42'), - ('system_config', '23343', '2423', 1, NULL, '2019-11-13 20:29:19'), - ('system_config', '23343', '2423', 1, NULL, '2019-11-13 20:29:23'), - ('system_config', '23343', '234', 1, NULL, '2019-11-14 11:43:57'), - ('system_config', '23343', '234', 1, NULL, '2019-11-14 11:50:18'), - ('system_config', '23343', '234', 1, NULL, '2019-11-14 11:51:13'), - ('system_config', '23343', '234', 1, NULL, '2019-11-14 11:52:03'), - ('system_config', '23343', '234', 1, NULL, '2019-11-14 11:53:02'), - ('system_config', '23343', '234', 1, NULL, '2019-11-14 13:49:11'), - ('system_config', '23343', '234', 1, NULL, '2019-11-14 13:51:05'), - ('system_config', '23343', '234', 1, NULL, '2019-11-14 13:53:53'), - ('system_config', '23343', '234', 1, NULL, '2019-11-14 13:55:57'), - ('system_config', '23343', '234', 1, NULL, '2019-11-14 16:15:44'), - ('system_config', '23343', '234', 1, NULL, '2019-11-14 16:39:36'), - ('system_config', '23343234234', '234', 1, NULL, '2019-11-14 16:41:05'), - ('system_config', '23343234234', '234', 1, NULL, '2019-11-14 16:41:05'), - ('system_config', 'aaaa', '234', 1, NULL, '2019-11-14 16:41:20'), - ('system_config', 'aaaa', '234', 1, NULL, '2019-11-14 16:41:25'), - ('system_config', '111', '234', 1, NULL, '2019-11-14 16:43:20'), - ('system_config', '111', '234', 1, NULL, '2019-11-14 16:44:13'), - ('system_config', 'xxxx', '234', 1, NULL, '2019-11-14 16:46:26'), - ('system_config', 'xxxx', '234', 1, NULL, '2019-11-14 16:46:39'), - ('system_config', 'xxxx', '234', 1, NULL, '2019-11-14 16:48:47'), - ('system_config', 'xxxx', '234', 1, NULL, '2019-11-15 14:39:55'), - ('system_config', 'xxxx', '234', 1, NULL, '2019-11-16 08:47:43'), - ('system_config', 'xxxx', '234', 1, NULL, '2019-11-16 17:12:10'), - ('system_config', 'xxxx', '234', 1, NULL, '2019-11-16 18:02:57'), - ('system_config', 'xxxx', '234', 1, NULL, '2020-12-14 15:09:53'), - ('system_config', 'xxxx', '234', 1, NULL, '2020-12-14 15:13:33'), - ('system_config', 'xxxx', '234', 1, NULL, '2020-12-14 15:14:09'), - ('system_config', 'xxxx', '234', 1, NULL, '2020-12-14 15:16:23'); -/*!40000 ALTER TABLE `t_reload_result` ENABLE KEYS */; - --- 导出 表 smart-admin-dev.t_role 结构 -DROP TABLE IF EXISTS `t_role`; -CREATE TABLE IF NOT EXISTS `t_role` ( - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', - `role_name` varchar(20) NOT NULL COMMENT '角色名称', - `remark` varchar(255) DEFAULT NULL COMMENT '角色描述', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=50 DEFAULT CHARSET=utf8 COMMENT='角色表'; - --- 正在导出表 smart-admin-dev.t_role 的数据:~14 rows (大约) -DELETE FROM `t_role`; -/*!40000 ALTER TABLE `t_role` DISABLE KEYS */; -INSERT INTO `t_role` (`id`, `role_name`, `remark`, `update_time`, `create_time`) VALUES - (1, '管理员', '', '2019-06-21 12:09:34', '2019-06-21 12:09:34'), - (34, '销售', '', '2019-08-30 09:30:50', '2019-08-30 09:30:50'), - (35, '总经理', '', '2019-08-30 09:31:05', '2019-08-30 09:31:05'), - (36, '董事长', '', '2019-08-30 09:31:11', '2019-08-30 09:31:11'), - (37, '财务', '', '2019-08-30 09:31:16', '2019-08-30 09:31:16'), - (38, '运营', '', '2019-08-30 09:31:22', '2019-08-30 09:31:22'), - (40, '测试角色1', '测试角色1', '2019-09-05 15:05:38', '2019-09-05 15:05:38'), - (41, '测试角色2', '测试角色2', '2019-09-05 15:05:43', '2019-09-05 15:05:43'), - (42, '测试角色3', '测试角色3', '2019-09-05 15:05:49', '2019-09-05 15:05:49'), - (43, '测试角色4', '测试角色4', '2019-09-05 15:05:56', '2019-09-05 15:05:56'), - (45, '测试角色6', '测试角色6', '2019-09-05 15:06:06', '2019-09-05 15:06:06'), - (46, '测试角色7', '测试角色7', '2019-09-05 15:06:18', '2019-09-05 15:06:18'), - (47, '测试角色8', '测试角色8', '2019-09-05 15:06:25', '2019-09-05 15:06:25'), - (48, '测试角色9', '测试角色9', '2019-11-15 17:06:11', '2019-09-05 15:06:30'); -/*!40000 ALTER TABLE `t_role` ENABLE KEYS */; - --- 导出 表 smart-admin-dev.t_role_data_scope 结构 -DROP TABLE IF EXISTS `t_role_data_scope`; -CREATE TABLE IF NOT EXISTS `t_role_data_scope` ( - `id` int NOT NULL AUTO_INCREMENT, - `data_scope_type` int NOT NULL COMMENT '数据范围id', - `view_type` int NOT NULL COMMENT '数据范围类型', - `role_id` int NOT NULL COMMENT '角色id', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; - --- 正在导出表 smart-admin-dev.t_role_data_scope 的数据:~4 rows (大约) -DELETE FROM `t_role_data_scope`; -/*!40000 ALTER TABLE `t_role_data_scope` DISABLE KEYS */; -INSERT INTO `t_role_data_scope` (`id`, `data_scope_type`, `view_type`, `role_id`, `update_time`, `create_time`) VALUES - (5, 0, 2, 9, '2019-04-29 15:01:04', '2019-04-29 15:01:04'), - (14, 0, 2, 40, '2019-09-05 15:25:37', '2019-09-05 15:25:37'), - (15, 0, 0, 1, '2019-09-06 08:35:45', '2019-09-06 08:35:45'), - (16, 0, 3, 34, '2019-11-06 16:08:02', '2019-11-06 16:08:02'); -/*!40000 ALTER TABLE `t_role_data_scope` ENABLE KEYS */; - --- 导出 表 smart-admin-dev.t_role_employee 结构 -DROP TABLE IF EXISTS `t_role_employee`; -CREATE TABLE IF NOT EXISTS `t_role_employee` ( - `id` int NOT NULL AUTO_INCREMENT, - `role_id` int NOT NULL COMMENT '角色id', - `employee_id` int NOT NULL COMMENT '员工id', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=214 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色员工功能表'; - --- 正在导出表 smart-admin-dev.t_role_employee 的数据:~25 rows (大约) -DELETE FROM `t_role_employee`; -/*!40000 ALTER TABLE `t_role_employee` DISABLE KEYS */; -INSERT INTO `t_role_employee` (`id`, `role_id`, `employee_id`, `update_time`, `create_time`) VALUES - (121, 38, 22, '2019-09-04 09:23:09', '2019-09-04 09:23:09'), - (130, 1, 30, '2019-09-05 15:32:40', '2019-09-05 15:32:40'), - (131, 1, 17, '2019-09-05 15:32:40', '2019-09-05 15:32:40'), - (132, 1, 26, '2019-09-05 15:32:40', '2019-09-05 15:32:40'), - (135, 1, 12, '2019-09-05 15:32:40', '2019-09-05 15:32:40'), - (136, 1, 11, '2019-09-05 15:32:40', '2019-09-05 15:32:40'), - (137, 1, 16, '2019-09-05 15:32:40', '2019-09-05 15:32:40'), - (138, 1, 18, '2019-09-05 15:32:40', '2019-09-05 15:32:40'), - (139, 1, 19, '2019-09-05 15:32:40', '2019-09-05 15:32:40'), - (140, 1, 20, '2019-09-05 15:32:40', '2019-09-05 15:32:40'), - (141, 1, 23, '2019-09-05 15:32:40', '2019-09-05 15:32:40'), - (147, 1, 35, '2019-09-06 09:00:27', '2019-09-06 09:00:27'), - (148, 40, 35, '2019-09-06 09:00:27', '2019-09-06 09:00:27'), - (165, 40, 32, '2019-11-08 10:39:35', '2019-11-08 10:39:35'), - (166, 34, 32, '2019-11-08 10:39:35', '2019-11-08 10:39:35'), - (167, 38, 32, '2019-11-08 10:39:35', '2019-11-08 10:39:35'), - (168, 38, 36, '2019-11-08 10:40:16', '2019-11-08 10:40:16'), - (169, 40, 36, '2019-11-08 10:40:16', '2019-11-08 10:40:16'), - (170, 37, 36, '2019-11-08 10:40:16', '2019-11-08 10:40:16'), - (174, 38, 37, '2019-11-08 11:05:39', '2019-11-08 11:05:39'), - (175, 42, 37, '2019-11-08 11:05:39', '2019-11-08 11:05:39'), - (188, 1, 1, '2019-11-15 16:05:33', '2019-11-15 16:05:33'), - (211, 40, 38, '2019-11-15 16:54:54', '2019-11-15 16:54:54'), - (212, 34, 29, '2019-11-16 18:04:04', '2019-11-16 18:04:04'), - (213, 45, 29, '2019-11-16 18:04:04', '2019-11-16 18:04:04'); -/*!40000 ALTER TABLE `t_role_employee` ENABLE KEYS */; - --- 导出 表 smart-admin-dev.t_role_privilege 结构 -DROP TABLE IF EXISTS `t_role_privilege`; -CREATE TABLE IF NOT EXISTS `t_role_privilege` ( - `id` int NOT NULL AUTO_INCREMENT, - `role_id` int NOT NULL COMMENT '角色id', - `privilege_key` varchar(1000) NOT NULL COMMENT '权限key', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=10835 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色权限功能表'; - --- 正在导出表 smart-admin-dev.t_role_privilege 的数据:~322 rows (大约) -DELETE FROM `t_role_privilege`; -/*!40000 ALTER TABLE `t_role_privilege` DISABLE KEYS */; -INSERT INTO `t_role_privilege` (`id`, `role_id`, `privilege_key`, `update_time`, `create_time`) VALUES - (3506, 48, 'search-position', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3507, 48, 'add-position', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3508, 48, 'update-position', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3509, 48, 'delete-position', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3510, 48, 'add-role', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3511, 48, 'delete-role', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3512, 48, 'update-role', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3513, 48, 'update-role-privilege', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3514, 48, 'add-employee-role', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3515, 48, 'delete-employee-role', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3516, 48, 'delete-employee-role-batch', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3517, 48, 'search-employee-list', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3518, 48, 'query-data-scope', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3519, 48, 'update-data-scope', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3520, 48, 'add-department', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3521, 48, 'update-department', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3522, 48, 'delete-department', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3523, 48, 'search-department', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3524, 48, 'add-employee', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3525, 48, 'update-employee', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3526, 48, 'delete-employee', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3527, 48, 'disabled-employee', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3528, 48, 'reset-employee-password', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3529, 48, 'set-employee-role', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3530, 48, 'disabled-employee-batch', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3531, 48, 'update-employee-role', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3533, 48, 'system-params-search', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3534, 48, 'system-params-add', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3535, 48, 'system-config-update', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3536, 48, 'system-config-search', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3537, 48, 'privilegeMainSearch', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3538, 48, 'privilegeMainUpdate', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3539, 48, 'task-search', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3540, 48, 'task-refresh', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3541, 48, 'task-add', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3542, 48, 'task-update', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3543, 48, 'task-pause', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3544, 48, 'task-resume', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3545, 48, 'task-run', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3546, 48, 'task-query-log', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3547, 48, 'task-delete', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3548, 48, 'systemCodeVersionsQuery', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3552, 48, 'roleOneTwo-add', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3555, 48, 'apiDocument', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3557, 48, 'reload', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3559, 48, 'smart-reload-search', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3560, 48, 'smart-reload-update', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3561, 48, 'smart-reload-result', '2019-09-06 15:28:07', '2019-09-06 15:28:07'), - (3575, 45, 'task-search', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3576, 45, 'task-refresh', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3577, 45, 'task-add', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3578, 45, 'task-update', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3579, 45, 'task-pause', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3580, 45, 'task-resume', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3581, 45, 'task-run', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3582, 45, 'task-query-log', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3583, 45, 'task-delete', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3586, 45, 'add-role', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3587, 45, 'delete-role', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3588, 45, 'update-role', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3589, 45, 'update-role-privilege', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3590, 45, 'add-employee-role', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3591, 45, 'delete-employee-role', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3592, 45, 'delete-employee-role-batch', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3593, 45, 'search-employee-list', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3594, 45, 'query-data-scope', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3595, 45, 'update-data-scope', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3597, 45, 'search-position', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3598, 45, 'add-position', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3599, 45, 'update-position', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3600, 45, 'delete-position', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3602, 45, 'add-department', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3603, 45, 'set-employee-role', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3604, 45, 'update-department', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3605, 45, 'delete-department', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3606, 45, 'search-department', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3607, 45, 'add-employee', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3608, 45, 'update-employee', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3609, 45, 'disabled-employee', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3610, 45, 'disabled-employee-batch', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3611, 45, 'update-employee-role', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3612, 45, 'delete-employee', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (3613, 45, 'reset-employee-password', '2019-09-06 15:28:17', '2019-09-06 15:28:17'), - (8112, 41, 'SystemSetting', '2019-11-08 11:21:22', '2019-11-08 11:21:22'), - (8113, 41, 'SystemPrivilege', '2019-11-08 11:21:22', '2019-11-08 11:21:22'), - (8114, 41, 'privilege-main-update', '2019-11-08 11:21:22', '2019-11-08 11:21:22'), - (8115, 41, 'privilege-main-search', '2019-11-08 11:21:22', '2019-11-08 11:21:22'), - (8549, 35, 'SystemSetting', '2019-11-15 15:47:52', '2019-11-15 15:47:52'), - (8550, 35, 'SystemConfig', '2019-11-15 15:47:52', '2019-11-15 15:47:52'), - (8551, 35, 'SystemPrivilege', '2019-11-15 15:47:52', '2019-11-15 15:47:52'), - (8552, 35, 'Notice', '2019-11-15 15:47:52', '2019-11-15 15:47:52'), - (8553, 35, 'NoticeList', '2019-11-15 15:47:52', '2019-11-15 15:47:52'), - (8554, 35, 'PersonNotice', '2019-11-15 15:47:52', '2019-11-15 15:47:52'), - (8555, 35, 'Email', '2019-11-15 15:47:52', '2019-11-15 15:47:52'), - (8556, 35, 'EmailList', '2019-11-15 15:47:52', '2019-11-15 15:47:52'), - (8557, 35, 'UserLog', '2019-11-15 15:47:52', '2019-11-15 15:47:52'), - (8558, 35, 'UserOperateLog', '2019-11-15 15:47:52', '2019-11-15 15:47:52'), - (8559, 35, 'UserLoginLog', '2019-11-15 15:47:52', '2019-11-15 15:47:52'), - (8560, 35, 'system-config-search', '2019-11-15 15:47:52', '2019-11-15 15:47:52'), - (8561, 35, 'privilege-main-update', '2019-11-15 15:47:52', '2019-11-15 15:47:52'), - (8562, 35, 'privilege-main-search', '2019-11-15 15:47:52', '2019-11-15 15:47:52'), - (8563, 35, 'notice-query', '2019-11-15 15:47:52', '2019-11-15 15:47:52'), - (8564, 35, 'notice-add', '2019-11-15 15:47:52', '2019-11-15 15:47:52'), - (8565, 35, 'notice-edit', '2019-11-15 15:47:52', '2019-11-15 15:47:52'), - (8566, 35, 'notice-delete', '2019-11-15 15:47:52', '2019-11-15 15:47:52'), - (8567, 35, 'person-notice-query', '2019-11-15 15:47:52', '2019-11-15 15:47:52'), - (8568, 35, 'person-notice-detail', '2019-11-15 15:47:52', '2019-11-15 15:47:52'), - (8569, 35, 'email-query', '2019-11-15 15:47:52', '2019-11-15 15:47:52'), - (8570, 35, 'email-add', '2019-11-15 15:47:52', '2019-11-15 15:47:52'), - (8571, 35, 'email-update', '2019-11-15 15:47:52', '2019-11-15 15:47:52'), - (8572, 35, 'user-operate-log-search', '2019-11-15 15:47:52', '2019-11-15 15:47:52'), - (8573, 35, 'user-login-log-search', '2019-11-15 15:47:52', '2019-11-15 15:47:52'), - (8574, 35, 'system-config-update', '2019-11-15 15:47:52', '2019-11-15 15:47:52'), - (9005, 37, 'SystemSetting', '2019-11-15 16:33:09', '2019-11-15 16:33:09'), - (9006, 37, 'SystemConfig', '2019-11-15 16:33:09', '2019-11-15 16:33:09'), - (9007, 37, 'system-params-search', '2019-11-15 16:33:09', '2019-11-15 16:33:09'), - (9008, 37, 'system-params-add', '2019-11-15 16:33:09', '2019-11-15 16:33:09'), - (9009, 37, 'system-config-update', '2019-11-15 16:33:09', '2019-11-15 16:33:09'), - (9368, 34, 'SystemSetting', '2019-11-15 16:45:39', '2019-11-15 16:45:39'), - (9369, 34, 'SystemConfig', '2019-11-15 16:45:39', '2019-11-15 16:45:39'), - (9370, 34, 'SystemPrivilege', '2019-11-15 16:45:39', '2019-11-15 16:45:39'), - (9371, 34, 'system-params-search', '2019-11-15 16:45:39', '2019-11-15 16:45:39'), - (9372, 34, 'system-params-add', '2019-11-15 16:45:39', '2019-11-15 16:45:39'), - (9373, 34, 'privilege-main-search', '2019-11-15 16:45:39', '2019-11-15 16:45:39'), - (9374, 34, 'Task', '2019-11-15 16:45:39', '2019-11-15 16:45:39'), - (9375, 34, 'TaskList', '2019-11-15 16:45:39', '2019-11-15 16:45:39'), - (9376, 34, 'task-search', '2019-11-15 16:45:39', '2019-11-15 16:45:39'), - (9377, 34, 'task-refresh', '2019-11-15 16:45:39', '2019-11-15 16:45:39'), - (9378, 34, 'task-add', '2019-11-15 16:45:39', '2019-11-15 16:45:39'), - (9379, 34, 'task-update', '2019-11-15 16:45:39', '2019-11-15 16:45:39'), - (9380, 34, 'task-pause', '2019-11-15 16:45:39', '2019-11-15 16:45:39'), - (9381, 34, 'task-resume', '2019-11-15 16:45:39', '2019-11-15 16:45:39'), - (9382, 34, 'task-run', '2019-11-15 16:45:39', '2019-11-15 16:45:39'), - (9383, 34, 'task-query-log', '2019-11-15 16:45:39', '2019-11-15 16:45:39'), - (9384, 34, 'task-delete', '2019-11-15 16:45:39', '2019-11-15 16:45:39'), - (9536, 42, 'Task', '2019-11-15 16:50:40', '2019-11-15 16:50:40'), - (9537, 42, 'TaskList', '2019-11-15 16:50:40', '2019-11-15 16:50:40'), - (9538, 42, 'task-search', '2019-11-15 16:50:40', '2019-11-15 16:50:40'), - (9539, 42, 'task-add', '2019-11-15 16:50:40', '2019-11-15 16:50:40'), - (9540, 42, 'task-update', '2019-11-15 16:50:40', '2019-11-15 16:50:40'), - (9541, 42, 'task-query-log', '2019-11-15 16:50:40', '2019-11-15 16:50:40'), - (9674, 38, 'Employee', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9675, 38, 'PositionList', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9676, 38, 'SystemSetting', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9677, 38, 'SystemConfig', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9678, 38, 'Notice', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9679, 38, 'PersonNotice', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9680, 38, 'Email', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9681, 38, 'EmailList', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9682, 38, 'SendMail', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9683, 38, 'Monitor', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9684, 38, 'OnlineUser', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9685, 38, 'Task', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9686, 38, 'TaskList', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9687, 38, 'KeepAlive', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9688, 38, 'KeepAliveContentList', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9689, 38, 'HeartBeat', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9690, 38, 'HeartBeatList', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9691, 38, 'File', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9692, 38, 'FileList', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9693, 38, 'search-position', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9694, 38, 'system-params-search', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9695, 38, 'system-config-update', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9696, 38, 'system-config-search', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9697, 38, 'person-notice-query', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9698, 38, 'person-notice-detail', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9699, 38, 'email-query', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9700, 38, 'email-send', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9701, 38, 'online-user-search', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9702, 38, 'task-search', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9703, 38, 'heart-beat-query', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9704, 38, 'file-filePage-query', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9705, 38, 'file-filePage-upload', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (9706, 38, 'task-refresh', '2019-11-15 16:53:47', '2019-11-15 16:53:47'), - (10585, 40, 'Employee', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10586, 40, 'RoleManage', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10587, 40, 'PositionList', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10588, 40, 'RoleEmployeeManage', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10589, 40, 'SystemSetting', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10590, 40, 'SystemConfig', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10591, 40, 'SystemPrivilege', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10592, 40, 'Notice', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10593, 40, 'NoticeList', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10594, 40, 'PersonNotice', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10595, 40, 'Email', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10596, 40, 'SendMail', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10597, 40, 'Task', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10598, 40, 'TaskList', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10599, 40, 'add-role', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10600, 40, 'delete-role', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10601, 40, 'update-role', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10602, 40, 'update-role-privilege', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10603, 40, 'add-employee-role', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10604, 40, 'search-employee-list', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10605, 40, 'delete-employee-role', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10606, 40, 'delete-employee-role-batch', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10607, 40, 'query-data-scope', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10608, 40, 'update-data-scope', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10609, 40, 'search-position', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10610, 40, 'add-position', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10611, 40, 'update-position', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10612, 40, 'search-department', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10613, 40, 'system-params-add', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10614, 40, 'system-config-search', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10615, 40, 'privilege-main-search', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10616, 40, 'notice-query', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10617, 40, 'notice-add', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10618, 40, 'notice-edit', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10619, 40, 'notice-delete', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10620, 40, 'notice-detail', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10621, 40, 'notice-send', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10622, 40, 'person-notice-query', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10623, 40, 'email-send', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10624, 40, 'task-search', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10625, 40, 'task-refresh', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10626, 40, 'task-add', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10627, 40, 'task-update', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10628, 40, 'task-query-log', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10629, 40, 'task-delete', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10630, 40, 'delete-department', '2019-11-15 17:19:42', '2019-11-15 17:19:42'), - (10733, 1, 'Employee', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10734, 1, 'RoleManage', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10735, 1, 'PositionList', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10736, 1, 'RoleEmployeeManage', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10737, 1, 'SystemSetting', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10738, 1, 'SystemConfig', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10739, 1, 'SystemPrivilege', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10740, 1, 'Notice', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10741, 1, 'NoticeList', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10742, 1, 'PersonNotice', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10743, 1, 'Email', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10744, 1, 'EmailList', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10745, 1, 'SendMail', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10746, 1, 'UserLog', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10747, 1, 'UserOperateLog', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10748, 1, 'UserLoginLog', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10749, 1, 'Monitor', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10750, 1, 'OnlineUser', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10751, 1, 'Sql', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10752, 1, 'Task', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10753, 1, 'TaskList', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10754, 1, 'Reload', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10755, 1, 'SmartReloadList', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10756, 1, 'ApiDoc', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10757, 1, 'Swagger', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10758, 1, 'ThreeRouter', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10759, 1, 'LevelTwo', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10761, 1, 'RoleTwoTwo', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10762, 1, 'RoleOneOne', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10763, 1, 'KeepAlive', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10764, 1, 'KeepAliveContentList', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10765, 1, 'KeepAliveAddContent', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10766, 1, 'HeartBeat', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10767, 1, 'HeartBeatList', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10768, 1, 'File', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10769, 1, 'FileList', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10770, 1, 'add-role', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10771, 1, 'delete-role', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10772, 1, 'update-role', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10773, 1, 'update-role-privilege', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10774, 1, 'add-employee-role', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10775, 1, 'search-employee-list', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10776, 1, 'delete-employee-role', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10777, 1, 'delete-employee-role-batch', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10778, 1, 'query-data-scope', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10779, 1, 'update-data-scope', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10780, 1, 'search-position', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10781, 1, 'add-position', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10782, 1, 'update-position', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10783, 1, 'delete-position', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10784, 1, 'add-department', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10785, 1, 'update-department', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10786, 1, 'delete-department', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10787, 1, 'search-department', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10788, 1, 'add-employee', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10789, 1, 'update-employee', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10790, 1, 'disabled-employee', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10791, 1, 'disabled-employee-batch', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10792, 1, 'update-employee-role', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10793, 1, 'reset-employee-password', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10794, 1, 'delete-employee', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10795, 1, 'system-params-search', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10796, 1, 'system-params-add', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10797, 1, 'system-config-update', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10798, 1, 'system-config-search', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10799, 1, 'privilege-main-update', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10800, 1, 'privilege-main-search', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10801, 1, 'notice-query', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10802, 1, 'notice-add', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10803, 1, 'notice-edit', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10804, 1, 'notice-delete', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10805, 1, 'notice-detail', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10806, 1, 'notice-send', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10807, 1, 'person-notice-query', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10808, 1, 'person-notice-detail', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10809, 1, 'email-query', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10810, 1, 'email-add', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10811, 1, 'email-update', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10812, 1, 'email-delete', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10813, 1, 'email-send', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10814, 1, 'user-operate-log-search', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10815, 1, 'user-operate-log-detail', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10816, 1, 'user-operate-log-delete', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10817, 1, 'user-login-log-search', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10818, 1, 'user-login-log-delete', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10819, 1, 'online-user-search', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10820, 1, 'task-search', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10821, 1, 'task-refresh', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10822, 1, 'task-add', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10823, 1, 'task-update', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10824, 1, 'task-pause', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10825, 1, 'task-resume', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10826, 1, 'task-run', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10827, 1, 'task-query-log', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10828, 1, 'task-delete', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10829, 1, 'smart-reload-search', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10830, 1, 'smart-reload-update', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10831, 1, 'smart-reload-result', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10832, 1, 'heart-beat-query', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10833, 1, 'file-filePage-query', '2019-11-16 18:04:10', '2019-11-16 18:04:10'), - (10834, 1, 'file-filePage-upload', '2019-11-16 18:04:10', '2019-11-16 18:04:10'); -/*!40000 ALTER TABLE `t_role_privilege` ENABLE KEYS */; - --- 导出 表 smart-admin-dev.t_system_config 结构 -DROP TABLE IF EXISTS `t_system_config`; -CREATE TABLE IF NOT EXISTS `t_system_config` ( - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', - `config_name` varchar(255) NOT NULL COMMENT '参数名字', - `config_key` varchar(255) NOT NULL COMMENT '参数key', - `config_value` text NOT NULL, - `config_group` varchar(255) NOT NULL COMMENT '参数类别', - `is_using` int NOT NULL COMMENT '是否使用0 否 1 是', - `remark` varchar(255) DEFAULT NULL, - `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '上次修改时间', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; - --- 正在导出表 smart-admin-dev.t_system_config 的数据:~8 rows (大约) -DELETE FROM `t_system_config`; -/*!40000 ALTER TABLE `t_system_config` DISABLE KEYS */; -INSERT INTO `t_system_config` (`id`, `config_name`, `config_key`, `config_value`, `config_group`, `is_using`, `remark`, `update_time`, `create_time`) VALUES - (1, '超级管理员', 'employee_superman', '12,13,1', 'employee', 1, '123r8566456', '2019-11-14 16:40:48', '2018-08-18 16:28:03'), - (13, '本地上传URL前缀', 'local_upload_url_prefix', 'http://172.16.0.145/smartAdmin/file/', 'upload', 1, '', '2019-09-04 16:23:49', '2019-04-26 17:06:53'), - (14, '阿里云上传配置', 'ali_oss', '{"accessKeyId":"","accessKeySecret":"","bucketName":"sit","endpoint":"http://oss-cn-beijing.aliyuncs.com"}', 'upload', 1, 'eefwfwfds', '2019-11-16 18:04:30', '2019-05-11 18:00:06'), - (15, '邮件发配置', 'email_config', '{"password":"smartadmin","smtpHost":"smtp.163.com","username":"smartadmin1024@163.com"}', 'email', 1, NULL, '2019-09-04 16:42:17', '2019-05-13 16:57:48'), - (16, '七牛云上传配置', 'qi_niu_oss', '{"accessKeyId":"rX7HgY1ZLpUD25JrA-uwMM_jj-","accessKeySecret":"","bucketName":"sun-smart-admin","endpoint":"http://puvpyay08.bkt.clouddn.com"}', 'upload', 1, NULL, '2019-11-16 18:04:42', '2019-07-19 16:05:56'), - (17, 'test', 'ww_1', 'ewr', '3', 1, 'testoo', '2019-11-08 09:43:36', '2019-11-08 09:27:19'), - (18, '4234', '42342', '423423', '23423', 1, '423423111111111111111111111111111111111111423423111111111111111111111111111111111111423423111111111111111111111111111111111111423423111111111111111111111111111111111111423423111111111111111111111111111111111111', '2019-11-14 14:58:39', '2019-11-14 11:22:49'), - (19, 'test323@', 'test', '123456', '11_', 1, 'gggggg', '2019-11-15 16:24:52', '2019-11-15 16:24:52'); -/*!40000 ALTER TABLE `t_system_config` ENABLE KEYS */; - --- 导出 表 smart-admin-dev.t_user_login_log 结构 -DROP TABLE IF EXISTS `t_user_login_log`; -CREATE TABLE IF NOT EXISTS `t_user_login_log` ( - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', - `user_id` int NOT NULL COMMENT '员工id', - `user_name` varchar(50) NOT NULL COMMENT '用户名', - `remote_ip` varchar(50) DEFAULT NULL COMMENT '用户ip', - `remote_port` int DEFAULT NULL COMMENT '用户端口', - `remote_browser` varchar(100) DEFAULT NULL COMMENT '浏览器', - `remote_os` varchar(50) DEFAULT NULL COMMENT '操作系统', - `login_status` tinyint NOT NULL COMMENT '登录状态 0 失败 1成功', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`), - KEY `customer_id` (`user_id`) USING BTREE, - KEY `auditor_id` (`remote_browser`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=1743 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户登录日志'; - --- 正在导出表 smart-admin-dev.t_user_login_log 的数据:~122 rows (大约) -DELETE FROM `t_user_login_log`; -/*!40000 ALTER TABLE `t_user_login_log` DISABLE KEYS */; -INSERT INTO `t_user_login_log` (`id`, `user_id`, `user_name`, `remote_ip`, `remote_port`, `remote_browser`, `remote_os`, `login_status`, `update_time`, `create_time`) VALUES - (1501, 30, '耿为刚', '172.16.1.234', 61406, 'Chrome', 'Windows 10', 1, '2019-09-06 14:19:47', '2019-09-06 14:19:47'), - (1502, 30, '耿为刚', '172.16.1.234', 61405, 'Chrome', 'Windows 10', 1, '2019-09-06 14:20:46', '2019-09-06 14:20:46'), - (1503, 30, '耿为刚', '172.16.1.234', 62213, 'Chrome', 'Windows 10', 1, '2019-09-06 14:28:50', '2019-09-06 14:28:50'), - (1505, 30, '耿为刚', '172.16.1.234', 62478, 'Chrome', 'Windows 10', 1, '2019-09-06 14:32:57', '2019-09-06 14:32:57'), - (1506, 1, '管理员', '127.0.0.1', 55613, 'Chrome', 'Windows 10', 1, '2019-09-06 14:35:48', '2019-09-06 14:35:48'), - (1507, 1, '管理员', '172.16.1.234', 63132, 'Chrome', 'Windows 10', 1, '2019-09-06 14:38:43', '2019-09-06 14:38:43'), - (1508, 30, '耿为刚', '172.16.1.234', 63132, 'Chrome', 'Windows 10', 1, '2019-09-06 14:41:36', '2019-09-06 14:41:36'), - (1509, 1, '管理员', '172.16.1.234', 63332, 'Chrome', 'Windows 10', 1, '2019-09-06 14:42:37', '2019-09-06 14:42:37'), - (1511, 1, '管理员', '172.16.1.166', 29923, 'Chrome', 'Windows 10', 1, '2019-09-06 15:09:22', '2019-09-06 15:09:22'), - (1512, 1, '管理员', '172.16.1.113', 58150, 'Chrome', 'Windows 7', 1, '2019-09-06 15:23:31', '2019-09-06 15:23:31'), - (1513, 1, '管理员', '172.16.1.166', 31226, 'Chrome', 'Windows 10', 1, '2019-09-06 15:24:51', '2019-09-06 15:24:51'), - (1514, 1, '管理员', '172.16.1.113', 58300, 'Chrome', 'Windows 7', 1, '2019-09-06 15:25:04', '2019-09-06 15:25:04'), - (1515, 1, '管理员', '172.16.1.113', 58300, 'Chrome', 'Windows 7', 1, '2019-09-06 15:25:26', '2019-09-06 15:25:26'), - (1516, 1, '管理员', '172.16.1.166', 31243, 'Chrome', 'Windows 10', 1, '2019-09-06 15:25:29', '2019-09-06 15:25:29'), - (1517, 1, '管理员', '172.16.1.221', 61458, 'Chrome', 'Windows 10', 1, '2019-09-06 15:27:07', '2019-09-06 15:27:07'), - (1518, 1, '管理员', '172.16.1.166', 31243, 'Chrome', 'Windows 10', 1, '2019-09-06 15:27:09', '2019-09-06 15:27:09'), - (1519, 1, '管理员', '172.16.1.113', 58300, 'Chrome', 'Windows 7', 1, '2019-09-06 15:27:10', '2019-09-06 15:27:10'), - (1520, 1, '管理员', '172.16.1.166', 31551, 'Chrome', 'Windows 10', 1, '2019-09-06 15:30:01', '2019-09-06 15:30:01'), - (1521, 1, '管理员', '172.16.4.160', 50527, 'Chrome', 'Windows 10', 1, '2019-09-06 15:50:20', '2019-09-06 15:50:20'), - (1522, 1, '管理员', '172.16.1.166', 36381, 'Chrome', 'Windows 10', 1, '2019-09-06 16:20:46', '2019-09-06 16:20:46'), - (1523, 1, '管理员', '172.16.1.166', 40039, 'Chrome', 'Windows 10', 1, '2019-09-06 17:02:33', '2019-09-06 17:02:33'), - (1524, 1, '管理员', '172.16.1.166', 41014, 'Chrome', 'Windows 10', 1, '2019-09-06 17:16:09', '2019-09-06 17:16:09'), - (1525, 1, '管理员', '172.16.1.188', 56577, 'Chrome', 'Windows 7', 1, '2019-09-07 08:36:31', '2019-09-07 08:36:31'), - (1526, 1, '管理员', '172.16.1.48', 60852, 'Chrome', 'Windows 10', 1, '2019-09-07 08:45:02', '2019-09-07 08:45:02'), - (1527, 1, '管理员', '172.16.4.85', 4818, 'Chrome', 'Windows 10', 1, '2019-09-07 09:04:44', '2019-09-07 09:04:44'), - (1528, 1, '管理员', '172.16.4.85', 5230, 'Chrome', 'Windows 10', 1, '2019-09-07 09:25:41', '2019-09-07 09:25:41'), - (1529, 1, '管理员', '172.16.1.166', 10251, 'Chrome', 'Windows 10', 1, '2019-09-07 10:15:20', '2019-09-07 10:15:20'), - (1530, 1, '管理员', '172.16.1.48', 63877, 'Chrome', 'Windows 10', 1, '2019-09-07 11:26:19', '2019-09-07 11:26:19'), - (1531, 1, '管理员', '172.16.1.166', 26667, 'Chrome', 'Windows 10', 1, '2019-09-07 14:08:15', '2019-09-07 14:08:15'), - (1532, 1, '管理员', '172.16.4.85', 10604, 'Chrome', 'Windows 10', 1, '2019-09-07 14:08:33', '2019-09-07 14:08:33'), - (1533, 1, '管理员', '172.16.4.85', 10604, 'Chrome', 'Windows 10', 1, '2019-09-07 14:08:50', '2019-09-07 14:08:50'), - (1534, 1, '管理员', '172.16.1.166', 26812, 'Chrome', 'Windows 10', 1, '2019-09-07 14:14:09', '2019-09-07 14:14:09'), - (1535, 1, '管理员', '172.16.1.188', 52924, 'Chrome', 'Windows 7', 1, '2019-09-07 14:37:16', '2019-09-07 14:37:16'), - (1536, 1, '管理员', '172.16.1.188', 56721, 'Chrome', 'Windows 7', 1, '2019-09-07 14:49:37', '2019-09-07 14:49:37'), - (1537, 1, '管理员', '172.16.1.188', 52839, 'Chrome', 'Windows 7', 1, '2019-09-07 15:33:04', '2019-09-07 15:33:04'), - (1538, 1, '管理员', '172.16.1.166', 32489, 'Chrome', 'Windows 10', 1, '2019-09-07 15:48:02', '2019-09-07 15:48:02'), - (1539, 1, '管理员', '172.16.1.166', 32847, 'Chrome', 'Windows 10', 1, '2019-09-07 15:52:25', '2019-09-07 15:52:25'), - (1540, 1, '管理员', '172.16.1.166', 33456, 'Chrome', 'Windows 10', 1, '2019-09-07 16:00:01', '2019-09-07 16:00:01'), - (1541, 1, '管理员', '172.16.1.188', 61015, 'Chrome', 'Windows 7', 1, '2019-09-07 17:05:49', '2019-09-07 17:05:49'), - (1542, 1, '管理员', '127.0.0.1', 51566, 'Chrome', 'Windows 7', 1, '2019-09-07 17:31:20', '2019-09-07 17:31:20'), - (1543, 1, '管理员', '127.0.0.1', 54228, 'Chrome', 'Windows 7', 1, '2019-09-07 17:41:12', '2019-09-07 17:41:12'), - (1544, 1, '管理员', '127.0.0.1', 54957, 'Chrome', 'Windows 7', 1, '2019-09-07 17:43:21', '2019-09-07 17:43:21'), - (1545, 1, '管理员', '172.16.4.85', 2336, 'Chrome', 'Windows 10', 1, '2019-09-07 18:25:51', '2019-09-07 18:25:51'), - (1546, 1, '管理员', '127.0.0.1', 52161, 'Chrome', 'Windows 7', 1, '2019-09-09 08:30:47', '2019-09-09 08:30:47'), - (1547, 1, '管理员', '172.16.4.85', 5903, 'Chrome', 'Windows 10', 1, '2019-09-09 08:47:47', '2019-09-09 08:47:47'), - (1548, 1, '管理员', '172.16.1.243', 55673, 'Chrome', 'Windows 10', 1, '2019-09-09 11:25:02', '2019-09-09 11:25:02'), - (1549, 1, '管理员', '172.16.4.85', 4672, 'Chrome', 'Windows 10', 1, '2019-09-09 11:25:34', '2019-09-09 11:25:34'), - (1550, 1, '管理员', '172.16.1.188', 61186, 'Chrome', 'Windows 7', 1, '2019-09-09 11:39:24', '2019-09-09 11:39:24'), - (1551, 1, '管理员', '172.16.4.85', 3032, 'Chrome', 'Windows 10', 1, '2019-09-09 14:17:53', '2019-09-09 14:17:53'), - (1552, 1, '管理员', '172.16.4.85', 5829, 'Chrome', 'Windows 10', 1, '2019-09-09 14:54:27', '2019-09-09 14:54:27'), - (1553, 1, '管理员', '172.16.1.166', 23398, 'Chrome', 'Windows 10', 1, '2019-09-09 15:06:50', '2019-09-09 15:06:50'), - (1554, 1, '管理员', '172.16.5.60', 61094, 'Chrome', 'Windows 10', 1, '2019-09-09 15:20:50', '2019-09-09 15:20:50'), - (1555, 1, '管理员', '172.16.4.85', 10566, 'Chrome', 'Windows 10', 1, '2019-09-09 15:51:22', '2019-09-09 15:51:22'), - (1556, 1, '管理员', '172.16.1.166', 32190, 'Chrome', 'Windows 10', 1, '2019-09-09 17:00:59', '2019-09-09 17:00:59'), - (1557, 1, '管理员', '172.16.5.60', 54502, 'Chrome', 'Windows 10', 1, '2019-09-10 09:10:48', '2019-09-10 09:10:48'), - (1558, 1, '管理员', '172.16.4.85', 10659, 'Chrome', 'Windows 10', 1, '2019-09-10 09:21:48', '2019-09-10 09:21:48'), - (1559, 1, '管理员', '172.16.4.85', 3363, 'Chrome', 'Windows 10', 1, '2019-09-10 10:56:23', '2019-09-10 10:56:23'), - (1560, 1, '管理员', '172.16.4.85', 4460, 'Chrome', 'Windows 10', 1, '2019-09-10 14:23:44', '2019-09-10 14:23:44'), - (1561, 1, '管理员', '172.16.4.85', 7344, 'Chrome', 'Windows 10', 1, '2019-09-10 14:59:52', '2019-09-10 14:59:52'), - (1562, 1, '管理员', '172.16.5.89', 49996, 'Chrome', 'Windows 10', 1, '2019-09-10 18:08:04', '2019-09-10 18:08:04'), - (1563, 1, '管理员', '172.16.1.38', 50152, 'Chrome', 'Windows 10', 1, '2019-09-11 10:19:27', '2019-09-11 10:19:27'), - (1564, 1, '管理员', '172.16.1.38', 50173, 'Chrome', 'Windows 10', 1, '2019-09-11 10:20:38', '2019-09-11 10:20:38'), - (1565, 1, '管理员', '172.16.4.141', 60881, 'Chrome', 'Windows 10', 1, '2019-09-11 14:52:02', '2019-09-11 14:52:02'), - (1566, 1, '管理员', '172.16.4.93', 52688, 'Chrome', 'Windows 10', 1, '2019-09-11 15:15:14', '2019-09-11 15:15:14'), - (1567, 1, '管理员', '172.16.5.127', 54993, 'Chrome', 'Windows 10', 1, '2019-09-12 14:29:58', '2019-09-12 14:29:58'), - (1568, 1, '管理员', '172.16.5.127', 57424, 'Chrome', 'Windows 10', 1, '2019-09-12 15:26:46', '2019-09-12 15:26:46'), - (1569, 1, '管理员', '172.16.5.127', 58073, 'Chrome', 'Windows 10', 1, '2019-09-12 15:41:54', '2019-09-12 15:41:54'), - (1570, 1, '管理员', '172.16.5.146', 63230, 'Chrome', 'Windows 10', 1, '2019-09-16 10:17:15', '2019-09-16 10:17:15'), - (1571, 1, '管理员', '172.16.5.146', 52857, 'Chrome', 'Windows 10', 1, '2019-09-16 11:17:18', '2019-09-16 11:17:18'), - (1572, 1, '管理员', '172.16.1.190', 64527, 'Chrome', 'Windows 10', 1, '2019-09-19 14:06:45', '2019-09-19 14:06:45'), - (1573, 1, '管理员', '127.0.0.1', 53267, 'Chrome', 'Windows 7', 1, '2019-09-20 17:24:33', '2019-09-20 17:24:33'), - (1574, 1, '管理员', '127.0.0.1', 53267, 'Chrome', 'Windows 7', 1, '2019-09-20 17:24:43', '2019-09-20 17:24:43'), - (1575, 1, '管理员', '127.0.0.1', 53267, 'Chrome', 'Windows 7', 1, '2019-09-20 17:24:59', '2019-09-20 17:24:59'), - (1576, 1, '管理员', '127.0.0.1', 53267, 'Chrome', 'Windows 7', 1, '2019-09-20 17:26:05', '2019-09-20 17:26:05'), - (1577, 1, '管理员', '127.0.0.1', 60612, 'Chrome', 'Windows 7', 1, '2019-09-20 17:56:06', '2019-09-20 17:56:06'), - (1578, 1, '管理员', '172.16.1.202', 58066, 'Chrome', 'Windows 7', 1, '2019-09-22 18:25:03', '2019-09-22 18:25:03'), - (1579, 1, '管理员', '172.16.1.48', 52290, 'Chrome', 'Windows 10', 1, '2019-09-23 16:01:16', '2019-09-23 16:01:16'), - (1580, 1, '管理员', '172.16.4.141', 60997, 'Chrome', 'Windows 10', 1, '2019-09-23 17:16:55', '2019-09-23 17:16:55'), - (1581, 1, '管理员', '172.16.5.146', 53246, 'Chrome', 'Windows 10', 1, '2019-09-23 17:54:14', '2019-09-23 17:54:14'), - (1582, 1, '管理员', '127.0.0.1', 51987, 'Chrome', 'Windows 7', 1, '2019-09-24 09:16:37', '2019-09-24 09:16:37'), - (1583, 1, '管理员', '172.16.1.202', 55724, 'Chrome', 'Windows 7', 1, '2019-09-24 12:57:39', '2019-09-24 12:57:39'), - (1584, 1, '管理员', '172.16.1.166', 51876, 'Chrome', 'Windows 10', 1, '2019-09-24 16:24:37', '2019-09-24 16:24:37'), - (1585, 1, '管理员', '172.16.1.202', 51648, 'Chrome', 'Windows 7', 1, '2019-09-24 19:26:39', '2019-09-24 19:26:39'), - (1586, 1, '管理员', '172.16.1.234', 60984, 'Chrome', 'Windows 10', 1, '2019-09-26 10:52:07', '2019-09-26 10:52:07'), - (1587, 1, '管理员', '172.16.1.234', 63440, 'Chrome', 'Windows 10', 1, '2019-09-26 11:30:54', '2019-09-26 11:30:54'), - (1588, 1, '管理员', '172.16.1.202', 51956, 'Chrome', 'Windows 7', 1, '2019-09-27 20:55:08', '2019-09-27 20:55:08'), - (1589, 1, '管理员', '172.16.1.48', 56166, 'Chrome', 'Windows 10', 1, '2019-09-30 08:59:13', '2019-09-30 08:59:13'), - (1590, 1, '管理员', '172.16.1.202', 51448, 'Chrome', 'Windows 7', 1, '2019-09-30 09:00:13', '2019-09-30 09:00:13'), - (1591, 1, '管理员', '172.16.1.188', 62679, 'Chrome', 'Windows 7', 1, '2019-10-15 11:25:26', '2019-10-15 11:25:26'), - (1592, 1, '管理员', '172.16.1.234', 54034, 'Chrome', 'Windows 10', 1, '2019-10-18 10:47:14', '2019-10-18 10:47:14'), - (1593, 1, '管理员', '172.16.1.234', 64515, 'Chrome', 'Windows 10', 1, '2019-10-18 13:32:10', '2019-10-18 13:32:10'), - (1594, 1, '管理员', '172.16.1.234', 50211, 'Chrome', 'Windows 10', 1, '2019-10-18 13:56:19', '2019-10-18 13:56:19'), - (1595, 1, '管理员', '172.16.1.234', 55469, 'Chrome', 'Windows 10', 1, '2019-10-18 14:56:24', '2019-10-18 14:56:24'), - (1596, 1, '管理员', '172.16.1.234', 56392, 'Chrome', 'Windows 10', 1, '2019-10-18 15:08:25', '2019-10-18 15:08:25'), - (1597, 1, '管理员', '172.16.1.234', 60896, 'Chrome', 'Windows 10', 1, '2019-10-18 16:14:15', '2019-10-18 16:14:15'), - (1598, 1, '管理员', '172.16.1.234', 50590, 'Chrome', 'Windows 10', 1, '2019-10-19 08:38:54', '2019-10-19 08:38:54'), - (1599, 1, '管理员', '172.16.1.166', 4879, 'Chrome', 'Windows 10', 1, '2019-10-19 09:19:08', '2019-10-19 09:19:08'), - (1600, 1, '管理员', '172.16.1.188', 62895, 'Chrome', 'Windows 7', 1, '2019-10-19 13:49:29', '2019-10-19 13:49:29'), - (1601, 1, '管理员', '172.16.1.234', 58144, 'Chrome', 'Windows 10', 1, '2019-10-19 14:55:50', '2019-10-19 14:55:50'), - (1602, 1, '管理员', '127.0.0.1', 61033, 'Chrome', 'Windows 7', 1, '2019-10-19 15:19:38', '2019-10-19 15:19:38'), - (1603, 1, '管理员', '172.16.1.188', 58944, 'Chrome', 'Windows 7', 1, '2019-10-19 16:48:49', '2019-10-19 16:48:49'), - (1604, 1, '管理员', '172.16.1.188', 63950, 'Chrome', 'Windows 7', 1, '2019-10-21 08:10:38', '2019-10-21 08:10:38'), - (1605, 1, '管理员', '172.16.1.188', 64899, 'Chrome', 'Windows 7', 1, '2019-10-21 08:17:40', '2019-10-21 08:17:40'), - (1606, 1, '管理员', '172.16.1.221', 53180, 'Chrome', 'Windows 10', 1, '2019-10-21 15:52:36', '2019-10-21 15:52:36'), - (1607, 1, '管理员', '172.16.1.221', 56067, 'Chrome', 'Windows 10', 1, '2019-10-23 10:19:39', '2019-10-23 10:19:39'), - (1608, 1, '管理员', '172.16.1.221', 57692, 'Chrome', 'Windows 10', 1, '2019-10-23 16:36:39', '2019-10-23 16:36:39'), - (1609, 1, '管理员', '172.16.1.188', 57180, 'Chrome', 'Windows 7', 1, '2019-10-24 08:26:21', '2019-10-24 08:26:21'), - (1610, 1, '管理员', '172.16.0.196', 61409, 'Chrome', 'Windows 10', 1, '2019-10-24 08:26:55', '2019-10-24 08:26:55'), - (1611, 1, '管理员', '172.16.1.234', 51906, 'Chrome', 'Windows 10', 1, '2019-10-24 15:56:50', '2019-10-24 15:56:50'), - (1612, 1, '管理员', '172.16.1.234', 56793, 'Chrome', 'Windows 10', 1, '2019-10-24 17:04:54', '2019-10-24 17:04:54'), - (1613, 30, '耿为刚', '172.16.1.234', 60368, 'Chrome', 'Windows 10', 1, '2019-10-24 17:51:13', '2019-10-24 17:51:13'), - (1614, 1, '管理员', '172.16.1.234', 60368, 'Chrome', 'Windows 10', 1, '2019-10-24 17:51:56', '2019-10-24 17:51:56'), - (1615, 30, '耿为刚', '172.16.1.234', 60589, 'Chrome 65', 'Windows 10', 1, '2019-10-24 17:52:52', '2019-10-24 17:52:52'), - (1616, 1, '管理员', '172.16.1.234', 52998, 'Chrome', 'Windows 10', 1, '2019-10-25 09:28:13', '2019-10-25 09:28:13'), - (1617, 1, '管理员', '172.16.1.234', 54948, 'Chrome', 'Windows 10', 1, '2019-10-25 10:01:34', '2019-10-25 10:01:34'), - (1618, 1, '管理员', '172.16.1.234', 56800, 'Chrome', 'Windows 10', 1, '2019-10-25 10:32:53', '2019-10-25 10:32:53'), - (1619, 1, '管理员', '127.0.0.1', 59071, 'Chrome', 'Windows 7', 1, '2019-10-28 16:05:21', '2019-10-28 16:05:21'), - (1620, 1, '管理员', '127.0.0.1', 60106, 'Chrome', 'Windows 7', 1, '2019-10-28 16:11:29', '2019-10-28 16:11:29'), - (1621, 1, '管理员', '127.0.0.1', 63479, 'Chrome', 'Windows 7', 1, '2019-10-28 16:28:59', '2019-10-28 16:28:59'), - (1622, 1, '管理员', '127.0.0.1', 63479, 'Chrome', 'Windows 7', 1, '2019-10-28 16:29:55', '2019-10-28 16:29:55'), - (1623, 1, '管理员', '127.0.0.1', 57588, 'Chrome', 'Windows 7', 1, '2019-10-29 15:37:03', '2019-10-29 15:37:03'), - (1741, 1, '管理员', '127.0.0.1', 54621, 'Chrome', 'Windows 7', 1, '2019-11-16 18:03:45', '2019-11-16 18:03:45'), - (1742, 1, '管理员', '127.0.0.1', 60932, 'Chrome 8', 'Windows 10', 1, '2020-12-14 15:14:55', '2020-12-14 15:14:55'); -/*!40000 ALTER TABLE `t_user_login_log` ENABLE KEYS */; - --- 导出 表 smart-admin-dev.t_user_operate_log 结构 -DROP TABLE IF EXISTS `t_user_operate_log`; -CREATE TABLE IF NOT EXISTS `t_user_operate_log` ( - `id` int NOT NULL AUTO_INCREMENT COMMENT '主键', - `user_id` int NOT NULL COMMENT '用户id', - `user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户名称', - `module` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作模块', - `content` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作内容', - `url` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '请求路径', - `method` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '请求方法', - `param` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '请求参数', - `result` tinyint DEFAULT NULL COMMENT '请求结果 0失败 1成功', - `fail_reason` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '失败原因', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=75 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; - --- 正在导出表 smart-admin-dev.t_user_operate_log 的数据:~32 rows (大约) -DELETE FROM `t_user_operate_log`; -/*!40000 ALTER TABLE `t_user_operate_log` DISABLE KEYS */; -INSERT INTO `t_user_operate_log` (`id`, `user_id`, `user_name`, `module`, `content`, `url`, `method`, `param`, `result`, `fail_reason`, `update_time`, `create_time`) VALUES - (1, 1, '管理员', '管理端-角色权限', '获取角色可选的功能权限', '/smart-admin-api/privilege/listPrivilegeByRoleId/0', 'com.gangquan360.smartadmin.module.role.roleprivilege.RolePrivilegeController.listPrivilegeByRoleId', 'Long[0]', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (2, 1, '管理员', '管理端-角色', '获取所有角色', '/smart-admin-api/role/getAll', 'com.gangquan360.smartadmin.module.role.basic.RoleController.getAllRole', '', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (3, 1, '管理员', '管理端-角色权限', '获取角色可选的功能权限', '/smart-admin-api/privilege/listPrivilegeByRoleId/1', 'com.gangquan360.smartadmin.module.role.roleprivilege.RolePrivilegeController.listPrivilegeByRoleId', 'Long[1]', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (4, 1, '管理员', '管理端-岗位', '分页查询所有岗位', '/smart-admin-api/position/getListPage', 'com.gangquan360.smartadmin.module.position.PositionController.getJobPage', 'PositionQueryDTO[{"pageNum":1,"pageSize":10,"positionName":"","searchCount":true,"sort":false}]', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (5, 1, '管理员', '管理端-角色', '获取所有角色', '/smart-admin-api/role/getAll', 'com.gangquan360.smartadmin.module.role.basic.RoleController.getAllRole', '', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (6, 1, '管理员', '管理端-部门', '根据部门名称查询部门及员工列表', '/smart-admin-api/department/listEmployeeByDepartmentName', 'com.gangquan360.smartadmin.module.department.DepartmentController.listDepartmentEmployee', 'String[""]', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (7, 1, '管理员', '管理端-部门', '查询部门及员工列表', '/smart-admin-api/department/listEmployee', 'com.gangquan360.smartadmin.module.department.DepartmentController.listDepartmentEmployee', '', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (8, 1, '管理员', '管理端-用户', '员工管理查询', '/smart-admin-api/employee/query', 'com.gangquan360.smartadmin.module.employee.EmployeeController.query', 'EmployeeQueryDTO[{"isDelete":0,"isDisabled":0,"keyword":"","pageNum":1,"pageSize":10}]', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (9, 1, '管理员', '管理端-用户', '员工重置密码', '/smart-admin-api/employee/resetPasswd/29', 'com.gangquan360.smartadmin.module.employee.EmployeeController.resetPasswd', 'Integer[29]', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (10, 1, '管理员', '管理端-用户', '员工管理查询', '/smart-admin-api/employee/query', 'com.gangquan360.smartadmin.module.employee.EmployeeController.query', 'EmployeeQueryDTO[{"isDelete":0,"isDisabled":0,"keyword":"","pageNum":1,"pageSize":10}]', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (11, 1, '管理员', '管理端-角色用户', '通过员工id获取所有角色以及员工具有的角色', '/smart-admin-api/role/getRoles/29', 'com.gangquan360.smartadmin.module.role.roleemployee.RoleEmployeeController.getRoleByEmployeeId', 'Long[29]', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (12, 1, '管理员', '管理端-用户', '单个员工角色授权', '/smart-admin-api/employee/updateRoles', 'com.gangquan360.smartadmin.module.employee.EmployeeController.updateRoles', 'EmployeeUpdateRolesDTO[{"employeeId":29,"roleIds":[34,45]}]', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (13, 1, '管理员', '管理端-用户', '员工管理查询', '/smart-admin-api/employee/query', 'com.gangquan360.smartadmin.module.employee.EmployeeController.query', 'EmployeeQueryDTO[{"isDelete":0,"isDisabled":0,"keyword":"","pageNum":1,"pageSize":10}]', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (14, 1, '管理员', '管理端-角色权限', '更新角色权限', '/smart-admin-api/privilege/updateRolePrivilege', 'com.gangquan360.smartadmin.module.role.roleprivilege.RolePrivilegeController.updateRolePrivilege', 'RolePrivilegeDTO[{"privilegeKeyList":["Employee","RoleManage","PositionList","RoleEmployeeManage","SystemSetting","SystemConfig","SystemPrivilege","Notice","NoticeList","PersonNotice","Email","EmailList","SendMail","UserLog","UserOperateLog","UserLoginLog","Monitor","OnlineUser","Sql","Task","TaskList","Reload","SmartReloadList","ApiDoc","Swagger","ThreeRouter","LevelTwo","RoleOneTwo","RoleTwoTwo","RoleOneOne","KeepAlive","KeepAliveContentList","KeepAliveAddContent","HeartBeat","HeartBeatList","File","FileList","add-role","delete-role","update-role","update-role-privilege","add-employee-role","search-employee-list","delete-employee-role","delete-employee-role-batch","query-data-scope","update-data-scope","search-position","add-position","update-position","delete-position","add-department","update-department","delete-department","search-department","add-employee","update-employee","disabled-employee","disabled-employee-batch","update-employee-role","reset-employee-password","delete-employee","system-params-search","system-params-add","system-config-update","system-config-search","privilege-main-update","privilege-main-search","notice-query","notice-add","notice-edit","notice-delete","notice-detail","notice-send","person-notice-query","person-notice-detail","email-query","email-add","email-update","email-delete","email-send","user-operate-log-search","user-operate-log-detail","user-operate-log-delete","user-login-log-search","user-login-log-delete","online-user-search","task-search","task-refresh","task-add","task-update","task-pause","task-resume","task-run","task-query-log","task-delete","smart-reload-search","smart-reload-update","smart-reload-result","heart-beat-query","file-filePage-query","file-filePage-upload"],"roleId":1}]', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (15, 1, '管理员', '管理端-角色权限', '获取角色可选的功能权限', '/smart-admin-api/privilege/listPrivilegeByRoleId/1', 'com.gangquan360.smartadmin.module.role.roleprivilege.RolePrivilegeController.listPrivilegeByRoleId', 'Long[1]', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (16, 1, '管理员', '管理端-系统配置', '分页查询所有系统配置', '/smart-admin-api/systemConfig/getListPage', 'com.gangquan360.smartadmin.module.systemconfig.SystemConfigController.getSystemConfigPage', 'SystemConfigQueryDTO[{"key":"","pageNum":1,"pageSize":10}]', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (17, 1, '管理员', '管理端-系统配置', '修改配置参数', '/smart-admin-api/systemConfig/update', 'com.gangquan360.smartadmin.module.systemconfig.SystemConfigController.updateSystemConfig', 'SystemConfigUpdateDTO[{"configGroup":"upload","configKey":"ali_oss","configName":"阿里云上传配置","configValue":"{\\"accessKeyId\\":\\"\\",\\"accessKeySecret\\":\\"\\",\\"bucketName\\":\\"sit\\",\\"endpoint\\":\\"http://oss-cn-beijing.aliyuncs.com\\"}","id":14,"remark":"eefwfwfds"}]', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (18, 1, '管理员', '管理端-系统配置', '分页查询所有系统配置', '/smart-admin-api/systemConfig/getListPage', 'com.gangquan360.smartadmin.module.systemconfig.SystemConfigController.getSystemConfigPage', 'SystemConfigQueryDTO[{"key":"","pageNum":1,"pageSize":10}]', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (19, 1, '管理员', '管理端-系统配置', '修改配置参数', '/smart-admin-api/systemConfig/update', 'com.gangquan360.smartadmin.module.systemconfig.SystemConfigController.updateSystemConfig', 'SystemConfigUpdateDTO[{"configGroup":"upload","configKey":"qi_niu_oss","configName":"七牛云上传配置","configValue":"{\\"accessKeyId\\":\\"rX7HgY1ZLpUD25JrA-uwMM_jj-\\",\\"accessKeySecret\\":\\"\\",\\"bucketName\\":\\"sun-smart-admin\\",\\"endpoint\\":\\"http://puvpyay08.bkt.clouddn.com\\"}","id":16}]', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (20, 1, '管理员', '管理端-系统配置', '分页查询所有系统配置', '/smart-admin-api/systemConfig/getListPage', 'com.gangquan360.smartadmin.module.systemconfig.SystemConfigController.getSystemConfigPage', 'SystemConfigQueryDTO[{"key":"","pageNum":1,"pageSize":10}]', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (21, 1, '管理员', '通用-权限', '获取所有请求路径', '/smart-admin-api/privilege/getAllUrl', 'com.gangquan360.smartadmin.module.privilege.controller.PrivilegeController.getAllUrl', '', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (22, 1, '管理员', '通用-权限', '查询所有菜单项', '/smart-admin-api/privilege/menu/queryAll', 'com.gangquan360.smartadmin.module.privilege.controller.PrivilegeController.queryAll', '', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (23, 1, '管理员', '通用-权限', '查询菜单功能点', '/smart-admin-api/privilege/function/query/FileList', 'com.gangquan360.smartadmin.module.privilege.controller.PrivilegeController.functionQuery', 'String["FileList"]', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (24, 1, '管理员', '通用-权限', '保存更新功能点', '/smart-admin-api/privilege/function/saveOrUpdate', 'com.gangquan360.smartadmin.module.privilege.controller.PrivilegeController.functionSaveOrUpdate', 'PrivilegeFunctionDTO[{"functionKey":"file-filePage-download","functionName":"下载","menuKey":"FileList","sort":2,"url":"fileController.downLoadById"}]', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (25, 1, '管理员', '通用-权限', '查询菜单功能点', '/smart-admin-api/privilege/function/query/FileList', 'com.gangquan360.smartadmin.module.privilege.controller.PrivilegeController.functionQuery', 'String["FileList"]', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (26, 1, '管理员', '通用-邮件发送', '分页查询', '/smart-admin-api/email/page/query', 'com.gangquan360.smartadmin.module.email.EmailController.queryByPage', 'EmailQueryDTO[{"endDate":"","pageNum":1,"pageSize":10,"searchCount":true,"startDate":""}]', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (27, 1, '管理员', '管理端-用户操作日志', '分页查询', '/smart-admin-api/userOperateLog/page/query', 'com.gangquan360.smartadmin.module.log.useroperatelog.UserOperateLogController.queryByPage', 'UserOperateLogQueryDTO[{"endDate":"","pageNum":1,"pageSize":10,"searchCount":true,"sort":false,"startDate":"","userName":""}]', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (28, 1, '管理员', '管理端-用户登录日志', '分页查询用户登录日志', '/smart-admin-api/userLoginLog/page/query', 'com.gangquan360.smartadmin.module.log.userloginlog.UserLoginLogController.queryByPage', 'UserLoginLogQueryDTO[{"endDate":"","pageNum":1,"pageSize":10,"searchCount":true,"sort":false,"startDate":"","userName":""}]', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (29, 1, '管理员', '管理端-用户登录日志', '查询员工在线状态', '/smart-admin-api/userOnLine/query', 'com.gangquan360.smartadmin.module.log.userloginlog.UserLoginLogController.queryUserOnLine', 'EmployeeQueryDTO[{"actualName":"","employeeIds":[1],"isDelete":0,"pageNum":1,"pageSize":10}]', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (30, 1, '管理员', '管理端-任务调度', '查询任务', '/smart-admin-api/quartz/task/query', 'com.gangquan360.smartadmin.module.quartz.controller.QuartzController.query', 'QuartzQueryDTO[{"pageNum":1,"pageSize":10}]', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (31, 1, '管理员', '管理端-smart reload', '获取全部Smart-reload项', '/smart-admin-api/smartReload/all', 'com.gangquan360.smartadmin.module.smartreload.SmartReloadController.listAllReloadItem', '', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (32, 1, '管理员', '通用-心跳服务', '查询心跳记录 @author zhuoda', '/smart-admin-api/heartBeat/query', 'com.gangquan360.smartadmin.module.heartbeat.HeartBeatController.query', 'PageParamDTO[{"pageNum":1,"pageSize":10}]', 1, NULL, '2019-11-01 00:00:00', '2019-11-01 00:00:00'), - (33, 1, '管理员', '通用-权限', '获取所有请求路径', '/smart-admin-api/privilege/getAllUrl', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.getAllUrl', '', 1, NULL, '2020-12-14 15:15:06', '2020-12-14 15:15:06'), - (34, 1, '管理员', '通用-权限', '查询所有菜单项', '/smart-admin-api/privilege/menu/queryAll', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.queryAll', '', 1, NULL, '2020-12-14 15:15:06', '2020-12-14 15:15:06'), - (35, 1, '管理员', '通用-权限', '菜单批量保存', '/smart-admin-api/privilege/menu/batchSaveMenu', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.menuBatchSave', 'ValidateList[[{"menuKey":"Business","menuName":"业务功能","sort":0,"type":1,"url":"/business"},{"menuKey":"Peony","menuName":"牡丹管理","parentKey":"Business","sort":0,"type":1,"url":"/peony"},{"menuKey":"PeonyList","menuName":"牡丹花列表","parentKey":"Peony","sort":0,"type":1,"url":"/peony/peony-list"},{"menuKey":"PeonyList1","menuName":"牡丹花列表1","parentKey":"Peony","sort":0,"type":1,"url":"/peony/peony-list1"},{"menuKey":"Email","menuName":"邮件管理","parentKey":"Business","sort":0,"type":1,"url":"/email"},{"menuKey":"EmailList","menuName":"邮件管理","parentKey":"Email","sort":0,"type":1,"url":"/email/email-list"},{"menuKey":"SendMail","menuName":"发送邮件","parentKey":"Email","sort":0,"type":1,"url":"/email/send-mail"},{"menuKey":"KeepAlive","menuName":"KeepAlive","parentKey":"Business","sort":0,"type":1,"url":"/keep-alive"},{"menuKey":"KeepAliveContentList","menuName":"KeepAlive列表","parentKey":"KeepAlive","sort":0,"type":1,"url":"/keep-alive/content-list"},{"menuKey":"KeepAliveAddContent","menuName":"KeepAlive表单","parentKey":"KeepAlive","sort":0,"type":1,"url":"/keep-alive/add-content"},{"menuKey":"Notice","menuName":"消息管理","parentKey":"Business","sort":0,"type":1,"url":"/notice"},{"menuKey":"NoticeList","menuName":"通知管理","parentKey":"Notice","sort":0,"type":1,"url":"/notice/notice-list"},{"menuKey":"PersonNotice","menuName":"个人消息","parentKey":"Notice","sort":0,"type":1,"url":"/notice/person-notice"},{"menuKey":"NoticeDetail","menuName":"消息详情","parentKey":"Notice","sort":0,"type":1,"url":"/notice/notice-detail"},{"menuKey":"ThreeRouter","menuName":"三级路由","parentKey":"Business","sort":0,"type":1,"url":"/three-router"},{"menuKey":"LevelTwo","menuName":"三级菜单","parentKey":"ThreeRouter","sort":0,"type":1,"url":"/three-router/level-two"},{"menuKey":"ThreeLevelRouterView","menuName":"三级菜单子颗粒","parentKey":"LevelTwo","sort":0,"type":1,"url":"/three-router/level-two/level-three1"},{"menuKey":"RoleTwoTwo","menuName":"三级菜单子哈","parentKey":"LevelTwo","sort":0,"type":1,"url":"/three-router/level-two/level-three2"},{"menuKey":"RoleOneOne","menuName":"二级菜单","parentKey":"ThreeRouter","sort":0,"type":1,"url":"/three-router/level-two2"},{"menuKey":"System","menuName":"系统设置","sort":0,"type":1,"url":"/system"},{"menuKey":"Employee","menuName":"人员管理","parentKey":"System","sort":0,"type":1,"url":"/employee"},{"menuKey":"RoleManage","menuName":"角色管理","parentKey":"Employee","sort":0,"type":1,"url":"/employee/role"},{"menuKey":"PositionList","menuName":"岗位管理","parentKey":"Employee","sort":0,"type":1,"url":"/employee/position"},{"menuKey":"RoleEmployeeManage","menuName":"员工管理","parentKey":"Employee","sort":0,"type":1,"url":"/employee/role-employee-manage"},{"menuKey":"File","menuName":"文件服务","parentKey":"System","sort":0,"type":1,"url":"/file"},{"menuKey":"FileList","menuName":"文件列表","parentKey":"File","sort":0,"type":1,"url":"/file/file-list"},{"menuKey":"UserLog","menuName":"用户日志","parentKey":"System","sort":0,"type":1,"url":"/user-log"},{"menuKey":"UserOperateLog","menuName":"用户操作日志","parentKey":"UserLog","sort":0,"type":1,"url":"/user-log/user-operate-log"},{"menuKey":"UserLoginLog","menuName":"用户登录日志","parentKey":"UserLog","sort":0,"type":1,"url":"/user-log/user-login-log"},{"menuKey":"SystemSetting","menuName":"系统设置","parentKey":"System","sort":0,"type":1,"url":"/system-setting"},{"menuKey":"SystemConfig","menuName":"系统参数","parentKey":"SystemSetting","sort":0,"type":1,"url":"/system-setting/system-config"},{"menuKey":"SystemPrivilege","menuName":"菜单设置","parentKey":"SystemSetting","sort":0,"type":1,"url":"/system-setting/system-privilege"},{"menuKey":"Support","menuName":"开发专用","sort":0,"type":1,"url":"/support"},{"menuKey":"ApiDoc","menuName":"接口文档","parentKey":"Support","sort":0,"type":1,"url":"/api-doc"},{"menuKey":"Swagger","menuName":"Swagger接口文档","parentKey":"ApiDoc","sort":0,"type":1,"url":"/api-doc/swagger"},{"menuKey":"HeartBeat","menuName":"心跳服务","parentKey":"Support","sort":0,"type":1,"url":"/heart-beat"},{"menuKey":"HeartBeatList","menuName":"心跳服务","parentKey":"HeartBeat","sort":0,"type":1,"url":"/heart-beat/heart-beat-list"},{"menuKey":"Monitor","menuName":"系统监控","parentKey":"Support","sort":0,"type":1,"url":"/monitor"},{"menuKey":"OnlineUser","menuName":"在线人数","parentKey":"Monitor","sort":0,"type":1,"url":"/monitor/online-user"},{"menuKey":"Sql","menuName":"SQL监控","parentKey":"Monitor","sort":0,"type":1,"url":"/monitor/sql"},{"menuKey":"Reload","menuName":"动态加载","parentKey":"Support","sort":0,"type":1,"url":"/reload"},{"menuKey":"SmartReloadList","menuName":"SmartReload","parentKey":"Reload","sort":0,"type":1,"url":"/reload/smart-reload-list"},{"menuKey":"Task","menuName":"定时任务","parentKey":"Support","sort":0,"type":1,"url":"/task"},{"menuKey":"TaskList","menuName":"任务管理","parentKey":"Task","sort":0,"type":1,"url":"/system-setting/task-list"}]]', 1, NULL, '2020-12-14 15:15:07', '2020-12-14 15:15:07'), - (36, 1, '管理员', '通用-权限', '查询所有菜单项', '/smart-admin-api/privilege/menu/queryAll', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.queryAll', '', 1, NULL, '2020-12-14 15:15:07', '2020-12-14 15:15:07'), - (37, 1, '管理员', '管理端-用户登录', '获取session', '/smart-admin-api/session/get', 'net.lab1024.smartadmin.module.system.login.LoginController.getSession', '', 1, NULL, '2020-12-14 15:15:29', '2020-12-14 15:15:29'), - (38, 1, '管理员', '通用-权限', '获取所有请求路径', '/smart-admin-api/privilege/getAllUrl', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.getAllUrl', '', 1, NULL, '2020-12-14 15:16:25', '2020-12-14 15:16:25'), - (39, 1, '管理员', '通用-权限', '查询所有菜单项', '/smart-admin-api/privilege/menu/queryAll', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.queryAll', '', 1, NULL, '2020-12-14 15:16:25', '2020-12-14 15:16:25'), - (40, 1, '管理员', '通用-权限', '菜单批量保存', '/smart-admin-api/privilege/menu/batchSaveMenu', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.menuBatchSave', 'ValidateList[[{"menuKey":"Business","menuName":"业务功能","sort":0,"type":1,"url":"/business"},{"menuKey":"Peony","menuName":"牡丹管理","parentKey":"Business","sort":1,"type":1,"url":"/peony"},{"menuKey":"PeonyList","menuName":"牡丹花列表","parentKey":"Peony","sort":2,"type":1,"url":"/peony/peony-list"},{"menuKey":"PeonyList1","menuName":"牡丹花列表1","parentKey":"Peony","sort":3,"type":1,"url":"/peony/peony-list1"},{"menuKey":"Email","menuName":"邮件管理","parentKey":"Business","sort":4,"type":1,"url":"/email"},{"menuKey":"EmailList","menuName":"邮件管理","parentKey":"Email","sort":5,"type":1,"url":"/email/email-list"},{"menuKey":"SendMail","menuName":"发送邮件","parentKey":"Email","sort":6,"type":1,"url":"/email/send-mail"},{"menuKey":"KeepAlive","menuName":"KeepAlive","parentKey":"Business","sort":7,"type":1,"url":"/keep-alive"},{"menuKey":"KeepAliveContentList","menuName":"KeepAlive列表","parentKey":"KeepAlive","sort":8,"type":1,"url":"/keep-alive/content-list"},{"menuKey":"KeepAliveAddContent","menuName":"KeepAlive表单","parentKey":"KeepAlive","sort":9,"type":1,"url":"/keep-alive/add-content"},{"menuKey":"Notice","menuName":"消息管理","parentKey":"Business","sort":10,"type":1,"url":"/notice"},{"menuKey":"NoticeList","menuName":"通知管理","parentKey":"Notice","sort":11,"type":1,"url":"/notice/notice-list"},{"menuKey":"PersonNotice","menuName":"个人消息","parentKey":"Notice","sort":12,"type":1,"url":"/notice/person-notice"},{"menuKey":"NoticeDetail","menuName":"消息详情","parentKey":"Notice","sort":13,"type":1,"url":"/notice/notice-detail"},{"menuKey":"ThreeRouter","menuName":"三级路由","parentKey":"Business","sort":14,"type":1,"url":"/three-router"},{"menuKey":"LevelTwo","menuName":"三级菜单","parentKey":"ThreeRouter","sort":15,"type":1,"url":"/three-router/level-two"},{"menuKey":"ThreeLevelRouterView","menuName":"三级菜单子颗粒","parentKey":"LevelTwo","sort":16,"type":1,"url":"/three-router/level-two/level-three1"},{"menuKey":"RoleTwoTwo","menuName":"三级菜单子哈","parentKey":"LevelTwo","sort":17,"type":1,"url":"/three-router/level-two/level-three2"},{"menuKey":"RoleOneOne","menuName":"二级菜单","parentKey":"ThreeRouter","sort":18,"type":1,"url":"/three-router/level-two2"},{"menuKey":"System","menuName":"系统设置","sort":19,"type":1,"url":"/system"},{"menuKey":"Employee","menuName":"人员管理","parentKey":"System","sort":20,"type":1,"url":"/employee"},{"menuKey":"RoleManage","menuName":"角色管理","parentKey":"Employee","sort":21,"type":1,"url":"/employee/role"},{"menuKey":"PositionList","menuName":"岗位管理","parentKey":"Employee","sort":22,"type":1,"url":"/employee/position"},{"menuKey":"RoleEmployeeManage","menuName":"员工管理","parentKey":"Employee","sort":23,"type":1,"url":"/employee/role-employee-manage"},{"menuKey":"File","menuName":"文件服务","parentKey":"System","sort":24,"type":1,"url":"/file"},{"menuKey":"FileList","menuName":"文件列表","parentKey":"File","sort":25,"type":1,"url":"/file/file-list"},{"menuKey":"UserLog","menuName":"用户日志","parentKey":"System","sort":26,"type":1,"url":"/user-log"},{"menuKey":"UserOperateLog","menuName":"用户操作日志","parentKey":"UserLog","sort":27,"type":1,"url":"/user-log/user-operate-log"},{"menuKey":"UserLoginLog","menuName":"用户登录日志","parentKey":"UserLog","sort":28,"type":1,"url":"/user-log/user-login-log"},{"menuKey":"SystemSetting","menuName":"系统设置","parentKey":"System","sort":29,"type":1,"url":"/system-setting"},{"menuKey":"SystemConfig","menuName":"系统参数","parentKey":"SystemSetting","sort":30,"type":1,"url":"/system-setting/system-config"},{"menuKey":"SystemPrivilege","menuName":"菜单设置","parentKey":"SystemSetting","sort":31,"type":1,"url":"/system-setting/system-privilege"},{"menuKey":"Support","menuName":"开发专用","sort":32,"type":1,"url":"/support"},{"menuKey":"ApiDoc","menuName":"接口文档","parentKey":"Support","sort":33,"type":1,"url":"/api-doc"},{"menuKey":"Swagger","menuName":"Swagger接口文档","parentKey":"ApiDoc","sort":34,"type":1,"url":"/api-doc/swagger"},{"menuKey":"HeartBeat","menuName":"心跳服务","parentKey":"Support","sort":35,"type":1,"url":"/heart-beat"},{"menuKey":"HeartBeatList","menuName":"心跳服务","parentKey":"HeartBeat","sort":36,"type":1,"url":"/heart-beat/heart-beat-list"},{"menuKey":"Monitor","menuName":"系统监控","parentKey":"Support","sort":37,"type":1,"url":"/monitor"},{"menuKey":"OnlineUser","menuName":"在线人数","parentKey":"Monitor","sort":38,"type":1,"url":"/monitor/online-user"},{"menuKey":"Sql","menuName":"SQL监控","parentKey":"Monitor","sort":39,"type":1,"url":"/monitor/sql"},{"menuKey":"Reload","menuName":"动态加载","parentKey":"Support","sort":40,"type":1,"url":"/reload"},{"menuKey":"SmartReloadList","menuName":"SmartReload","parentKey":"Reload","sort":41,"type":1,"url":"/reload/smart-reload-list"},{"menuKey":"Task","menuName":"定时任务","parentKey":"Support","sort":42,"type":1,"url":"/task"},{"menuKey":"TaskList","menuName":"任务管理","parentKey":"Task","sort":43,"type":1,"url":"/system-setting/task-list"}]]', 1, NULL, '2020-12-14 15:16:26', '2020-12-14 15:16:26'), - (41, 1, '管理员', '通用-权限', '查询所有菜单项', '/smart-admin-api/privilege/menu/queryAll', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.queryAll', '', 1, NULL, '2020-12-14 15:16:26', '2020-12-14 15:16:26'), - (42, 1, '管理员', '通用-权限', '查询菜单功能点', '/smart-admin-api/privilege/function/query/PeonyList', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.functionQuery', 'String["PeonyList"]', 1, NULL, '2020-12-14 15:16:28', '2020-12-14 15:16:28'), - (43, 1, '管理员', '通用-权限', '批量保存功能点', '/smart-admin-api/privilege/function/batchSave', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.batchSaveFunctionList', 'ValidateList[[{"functionKey":"peony-list-query","functionName":"查询","menuKey":"PeonyList","sort":1},{"functionKey":"peony-list-add","functionName":"新增","menuKey":"PeonyList","sort":2},{"functionKey":"peony-list-update","functionName":"编辑","menuKey":"PeonyList","sort":3},{"functionKey":"peony-list-batch-delete","functionName":"批量删除","menuKey":"PeonyList","sort":4},{"functionKey":"peony-list-batch-export","functionName":"批量导出","menuKey":"PeonyList","sort":5},{"functionKey":"peony-list-export-all","functionName":"导出全部","menuKey":"PeonyList","sort":6}]]', 1, NULL, '2020-12-14 15:16:30', '2020-12-14 15:16:30'), - (44, 1, '管理员', '通用-权限', '查询菜单功能点', '/smart-admin-api/privilege/function/query/PeonyList', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.functionQuery', 'String["PeonyList"]', 1, NULL, '2020-12-14 15:16:30', '2020-12-14 15:16:30'), - (45, 1, '管理员', '通用-权限', '查询菜单功能点', '/smart-admin-api/privilege/function/query/PeonyList1', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.functionQuery', 'String["PeonyList1"]', 1, NULL, '2020-12-14 15:16:32', '2020-12-14 15:16:32'), - (46, 1, '管理员', '通用-权限', '批量保存功能点', '/smart-admin-api/privilege/function/batchSave', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.batchSaveFunctionList', 'ValidateList[[{"functionKey":"peony1-list-query","functionName":"查询","menuKey":"PeonyList1","sort":1},{"functionKey":"peony1-list-add","functionName":"新增","menuKey":"PeonyList1","sort":2},{"functionKey":"peony1-list-update","functionName":"编辑","menuKey":"PeonyList1","sort":3},{"functionKey":"peony1-list-batch-delete","functionName":"批量删除","menuKey":"PeonyList1","sort":4},{"functionKey":"peony1-list-batch-export","functionName":"批量导出","menuKey":"PeonyList1","sort":5},{"functionKey":"peony1-list-export-all","functionName":"导出全部","menuKey":"PeonyList1","sort":6}]]', 1, NULL, '2020-12-14 15:16:33', '2020-12-14 15:16:33'), - (47, 1, '管理员', '通用-权限', '查询菜单功能点', '/smart-admin-api/privilege/function/query/PeonyList1', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.functionQuery', 'String["PeonyList1"]', 1, NULL, '2020-12-14 15:16:33', '2020-12-14 15:16:33'), - (48, 1, '管理员', '通用-权限', '查询菜单功能点', '/smart-admin-api/privilege/function/query/EmailList', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.functionQuery', 'String["EmailList"]', 1, NULL, '2020-12-14 15:16:34', '2020-12-14 15:16:34'), - (49, 1, '管理员', '通用-权限', '查询菜单功能点', '/smart-admin-api/privilege/function/query/SendMail', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.functionQuery', 'String["SendMail"]', 1, NULL, '2020-12-14 15:16:36', '2020-12-14 15:16:36'), - (50, 1, '管理员', '通用-权限', '查询菜单功能点', '/smart-admin-api/privilege/function/query/KeepAliveContentList', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.functionQuery', 'String["KeepAliveContentList"]', 1, NULL, '2020-12-14 15:16:38', '2020-12-14 15:16:38'), - (51, 1, '管理员', '通用-权限', '查询菜单功能点', '/smart-admin-api/privilege/function/query/KeepAliveAddContent', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.functionQuery', 'String["KeepAliveAddContent"]', 1, NULL, '2020-12-14 15:16:38', '2020-12-14 15:16:38'), - (52, 1, '管理员', '通用-权限', '查询菜单功能点', '/smart-admin-api/privilege/function/query/NoticeList', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.functionQuery', 'String["NoticeList"]', 1, NULL, '2020-12-14 15:16:40', '2020-12-14 15:16:40'), - (53, 1, '管理员', '通用-权限', '查询菜单功能点', '/smart-admin-api/privilege/function/query/PersonNotice', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.functionQuery', 'String["PersonNotice"]', 1, NULL, '2020-12-14 15:16:41', '2020-12-14 15:16:41'), - (54, 1, '管理员', '通用-权限', '查询菜单功能点', '/smart-admin-api/privilege/function/query/NoticeDetail', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.functionQuery', 'String["NoticeDetail"]', 1, NULL, '2020-12-14 15:16:42', '2020-12-14 15:16:42'), - (55, 1, '管理员', '通用-权限', '查询菜单功能点', '/smart-admin-api/privilege/function/query/ThreeLevelRouterView', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.functionQuery', 'String["ThreeLevelRouterView"]', 1, NULL, '2020-12-14 15:16:44', '2020-12-14 15:16:44'), - (56, 1, '管理员', '通用-权限', '查询菜单功能点', '/smart-admin-api/privilege/function/query/RoleManage', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.functionQuery', 'String["RoleManage"]', 1, NULL, '2020-12-14 15:16:47', '2020-12-14 15:16:47'), - (57, 1, '管理员', '通用-权限', '查询菜单功能点', '/smart-admin-api/privilege/function/query/PositionList', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.functionQuery', 'String["PositionList"]', 1, NULL, '2020-12-14 15:16:48', '2020-12-14 15:16:48'), - (58, 1, '管理员', '通用-权限', '查询菜单功能点', '/smart-admin-api/privilege/function/query/RoleEmployeeManage', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.functionQuery', 'String["RoleEmployeeManage"]', 1, NULL, '2020-12-14 15:16:53', '2020-12-14 15:16:53'), - (59, 1, '管理员', '通用-权限', '查询菜单功能点', '/smart-admin-api/privilege/function/query/FileList', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.functionQuery', 'String["FileList"]', 1, NULL, '2020-12-14 15:17:00', '2020-12-14 15:17:00'), - (60, 1, '管理员', '通用-权限', '查询菜单功能点', '/smart-admin-api/privilege/function/query/UserOperateLog', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.functionQuery', 'String["UserOperateLog"]', 1, NULL, '2020-12-14 15:17:03', '2020-12-14 15:17:03'), - (61, 1, '管理员', '通用-权限', '查询菜单功能点', '/smart-admin-api/privilege/function/query/UserLoginLog', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.functionQuery', 'String["UserLoginLog"]', 1, NULL, '2020-12-14 15:17:03', '2020-12-14 15:17:03'), - (62, 1, '管理员', '通用-权限', '查询菜单功能点', '/smart-admin-api/privilege/function/query/SystemConfig', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.functionQuery', 'String["SystemConfig"]', 1, NULL, '2020-12-14 15:17:04', '2020-12-14 15:17:04'), - (63, 1, '管理员', '通用-权限', '查询菜单功能点', '/smart-admin-api/privilege/function/query/SystemPrivilege', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.functionQuery', 'String["SystemPrivilege"]', 1, NULL, '2020-12-14 15:17:06', '2020-12-14 15:17:06'), - (64, 1, '管理员', '通用-权限', '批量保存功能点', '/smart-admin-api/privilege/function/batchSave', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.batchSaveFunctionList', 'ValidateList[[{"functionKey":"privilege-main-update","functionName":"编辑","menuKey":"SystemPrivilege","sort":1},{"functionKey":"privilege-batch-save-points","functionName":"批量保存功能点","menuKey":"SystemPrivilege","sort":2},{"functionKey":"privilege-main-search","functionName":"查询","menuKey":"SystemPrivilege","sort":3}]]', 1, NULL, '2020-12-14 15:17:11', '2020-12-14 15:17:11'), - (65, 1, '管理员', '通用-权限', '查询菜单功能点', '/smart-admin-api/privilege/function/query/SystemPrivilege', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.functionQuery', 'String["SystemPrivilege"]', 1, NULL, '2020-12-14 15:17:11', '2020-12-14 15:17:11'), - (66, 1, '管理员', '通用-权限', '保存更新功能点', '/smart-admin-api/privilege/function/saveOrUpdate', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.functionSaveOrUpdate', 'PrivilegeFunctionDTO[{"functionKey":"privilege-batch-save-points","functionName":"批量保存功能点","menuKey":"SystemPrivilege","sort":1,"url":"privilegeController.functionSaveOrUpdate"}]', 1, NULL, '2020-12-14 15:17:30', '2020-12-14 15:17:30'), - (67, 1, '管理员', '通用-权限', '查询菜单功能点', '/smart-admin-api/privilege/function/query/SystemPrivilege', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.functionQuery', 'String["SystemPrivilege"]', 1, NULL, '2020-12-14 15:17:30', '2020-12-14 15:17:30'), - (68, 1, '管理员', '通用-权限', '查询菜单功能点', '/smart-admin-api/privilege/function/query/Swagger', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.functionQuery', 'String["Swagger"]', 1, NULL, '2020-12-14 15:17:36', '2020-12-14 15:17:36'), - (69, 1, '管理员', '通用-权限', '查询菜单功能点', '/smart-admin-api/privilege/function/query/HeartBeatList', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.functionQuery', 'String["HeartBeatList"]', 1, NULL, '2020-12-14 15:17:37', '2020-12-14 15:17:37'), - (70, 1, '管理员', '通用-权限', '查询菜单功能点', '/smart-admin-api/privilege/function/query/SmartReloadList', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.functionQuery', 'String["SmartReloadList"]', 1, NULL, '2020-12-14 15:17:42', '2020-12-14 15:17:42'), - (71, 1, '管理员', '通用-权限', '查询菜单功能点', '/smart-admin-api/privilege/function/query/TaskList', 'net.lab1024.smartadmin.module.system.privilege.controller.PrivilegeController.functionQuery', 'String["TaskList"]', 1, NULL, '2020-12-14 15:17:43', '2020-12-14 15:17:43'), - (72, 1, '管理员', '通用-邮件发送', '分页查询', '/smart-admin-api/email/page/query', 'net.lab1024.smartadmin.module.business.email.EmailController.queryByPage', 'EmailQueryDTO[{"endDate":"","pageNum":1,"pageSize":10,"searchCount":true,"startDate":""}]', 1, NULL, '2020-12-14 15:17:57', '2020-12-14 15:17:57'), - (73, 1, '管理员', '管理端-用户登录', '获取session', '/smart-admin-api/session/get', 'net.lab1024.smartadmin.module.system.login.LoginController.getSession', '', 1, NULL, '2020-12-14 15:18:14', '2020-12-14 15:18:14'), - (74, 1, '管理员', '管理端-用户登录', '获取session', '/smart-admin-api/session/get', 'net.lab1024.smartadmin.module.system.login.LoginController.getSession', '', 1, NULL, '2020-12-14 15:18:27', '2020-12-14 15:18:27'); -/*!40000 ALTER TABLE `t_user_operate_log` ENABLE KEYS */; - -/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */; -/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; diff --git a/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/AddDTO.java.vm b/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/AddDTO.java.vm deleted file mode 100644 index 03da7773..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/AddDTO.java.vm +++ /dev/null @@ -1,36 +0,0 @@ -package ${basePackage}.module.${modulePackage}.domain.dto; - -import lombok.Data; -#foreach ($dtoImport in $dtoImports) -$dtoImport -#end -import com.fasterxml.jackson.annotation.JsonFormat; -import io.swagger.annotations.ApiModelProperty; - -/** - * 新建 [ ${tableDesc} ] - * - * @author ${author} - * @version 1.0 - * @company ${company} - * @copyright (c) 2018 ${company}Inc. All rights reserved. - * @date ${date} - * @since JDK1.8 - */ -@Data -public class ${moduleClass}AddDTO { -#foreach ($column in $columnList) -#if($column.fieldName != 'id') -#if($column.fieldType == 'Date') - @ApiModelProperty("${column.columnDesc}") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private $column.fieldType $column.fieldName; -#else - @ApiModelProperty("${column.columnDesc}") - private $column.fieldType $column.fieldName; -#end - -#end -#end - -} diff --git a/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/Controller.java.vm b/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/Controller.java.vm deleted file mode 100644 index 1dfbe2ed..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/Controller.java.vm +++ /dev/null @@ -1,88 +0,0 @@ -package ${basePackage}.module.${modulePackage}.controller; - -import ${basePackage}.common.domain.PageResultDTO; -import ${basePackage}.common.controller.BaseController; -import ${basePackage}.common.domain.ResponseDTO; -import ${basePackage}.common.domain.ValidateList; -import ${basePackage}.module.${modulePackage}.domain.dto.${moduleClass}AddDTO; -import ${basePackage}.module.${modulePackage}.domain.dto.${moduleClass}UpdateDTO; -import ${basePackage}.module.${modulePackage}.domain.dto.${moduleClass}QueryDTO; -import ${basePackage}.module.${modulePackage}.domain.vo.${moduleClass}VO; -import ${basePackage}.module.${modulePackage}.domain.vo.${moduleClass}ExcelVO; -import ${basePackage}.module.${modulePackage}.service.${moduleClass}Service; -import cn.afterturn.easypoi.excel.ExcelExportUtil; -import cn.afterturn.easypoi.excel.entity.ExportParams; -import org.apache.poi.ss.usermodel.Workbook; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import javax.servlet.http.HttpServletResponse; -import java.util.List; - -/** - * [ ${tableDesc} ] - * - * @author ${author} - * @version 1.0 - * @company ${company} - * @copyright (c) ${company}Inc. All rights reserved. - * @date ${date} - * @since JDK1.8 - */ -@RestController -@Api(tags = {"${tableDesc}"}) -public class ${moduleClass}Controller extends BaseController { - - @Autowired - private ${moduleClass}Service ${moduleVar}Service; - - @ApiOperation(value = "分页查询${tableDesc}",notes = "@author ${author}") - @PostMapping("/${moduleVar}/page/query") - public ResponseDTO> queryByPage(@RequestBody ${moduleClass}QueryDTO queryDTO) { - return ${moduleVar}Service.queryByPage(queryDTO); - } - - @ApiOperation(value = "添加${tableDesc}",notes = "@author ${author}") - @PostMapping("/${moduleVar}/add") - public ResponseDTO add(@RequestBody @Validated ${moduleClass}AddDTO addTO){ - return ${moduleVar}Service.add(addTO); - } - - @ApiOperation(value="修改${tableDesc}",notes = "@author ${author}") - @PostMapping("/${moduleVar}/update") - public ResponseDTO update(@RequestBody @Validated ${moduleClass}UpdateDTO updateDTO){ - return ${moduleVar}Service.update(updateDTO); - } - - @ApiOperation(value="批量删除${tableDesc}",notes = "@author ${author}") - @PostMapping("/${moduleVar}/deleteByIds") - public ResponseDTO delete(@RequestBody @Validated ValidateList idList) { - return ${moduleVar}Service.deleteByIds(idList); - } - - @ApiOperation(value = "批量导出", notes = "@author ${author}") - @PostMapping("/${moduleVar}/export/batch") - public void batchExport(@RequestBody @Validated ValidateList idList, HttpServletResponse response) { - //查询数据 - List<${moduleClass}ExcelVO> ${moduleVar}List = ${moduleVar}Service.queryBatchExportData(idList); - //导出操作 - ExportParams ex = new ExportParams("${tableDesc}", "Sheet1"); - Workbook workbook = ExcelExportUtil.exportExcel(ex, ${moduleClass}ExcelVO.class, ${moduleVar}List); - downloadExcel("${tableDesc}", workbook, response); - } - - @ApiOperation(value = "导出全部", notes = "@author ${author}") - @PostMapping("/${moduleVar}/export/all") - public void exportAll(@RequestBody @Validated ${moduleClass}QueryDTO queryDTO, HttpServletResponse response) { - //查询数据 - List<${moduleClass}ExcelVO> ${moduleVar}List = ${moduleVar}Service.queryAllExportData(queryDTO); - //导出操作 - ExportParams ex = new ExportParams("${tableDesc}", "Sheet1"); - Workbook workbook = ExcelExportUtil.exportExcel(ex, ${moduleClass}ExcelVO.class, ${moduleVar}List); - downloadExcel("${tableDesc}", workbook, response); - } - -} diff --git a/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/Dao.java.vm b/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/Dao.java.vm deleted file mode 100644 index b19db804..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/Dao.java.vm +++ /dev/null @@ -1,64 +0,0 @@ -package ${basePackage}.module.${modulePackage}.dao; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.core.metadata.IPage; -import ${basePackage}.module.${modulePackage}.domain.dto.${moduleClass}QueryDTO; -import ${basePackage}.module.${modulePackage}.domain.entity.${moduleClass}Entity; -import ${basePackage}.module.${modulePackage}.domain.vo.${moduleClass}VO; -import ${basePackage}.module.${modulePackage}.domain.vo.${moduleClass}ExcelVO; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; -import org.springframework.stereotype.Component; - -import java.util.List; - -/** - * [ ${tableDesc} ] - * - * @author ${author} - * @version 1.0 - * @company ${company} - * @copyright (c) ${company}Inc. All rights reserved. - * @date ${date} - * @since JDK1.8 - */ -@Mapper -@Component -public interface ${moduleClass}Dao extends BaseMapper<${moduleClass}Entity> { - - /** - * 分页查询 - * @param queryDTO - * @return ${moduleClass}VO - */ - IPage<${moduleClass}VO> queryByPage(Page page, @Param("queryDTO") ${moduleClass}QueryDTO queryDTO); - - /** - * 根据id删除 - * @param id - * @return - */ - void deleteById(@Param("id")Long id); - - /** - * 根据id批量删除 - * @param idList - * @return - */ - void deleteByIdList(@Param("idList") List idList); - - /** - * 查询所有导出数据 - * @param queryDTO - * @return - */ - List<${moduleClass}ExcelVO> queryAllExportData(@Param("queryDTO")${moduleClass}QueryDTO queryDTO); - - /** - * 查询批量导出数据 - * @param idList - * @return - */ - List<${moduleClass}ExcelVO> queryBatchExportData(@Param("idList")List idList); -} diff --git a/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/Dao.xml.vm b/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/Dao.xml.vm deleted file mode 100644 index 5e64e4bc..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/Dao.xml.vm +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - - - - - - - - - - delete from ${tableName} where id = #{id} - - - - delete from ${tableName} where id in - - #{item} - - - - \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/Entity.java.vm b/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/Entity.java.vm deleted file mode 100644 index ca7e7e6d..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/Entity.java.vm +++ /dev/null @@ -1,33 +0,0 @@ -package ${basePackage}.module.${modulePackage}.domain.entity; - -import com.baomidou.mybatisplus.annotation.TableName; -import ${basePackage}.common.domain.BaseEntity; -#foreach ($entityImport in $entityImports) -$entityImport -#end -import lombok.Data; - -/** - * [ ${tableDesc} ] - * - * @author ${author} - * @version 1.0 - * @company ${company} - * @copyright (c) ${company}Inc. All rights reserved. - * @date ${date} - * @since JDK1.8 - */ -@Data -@TableName("${tableName}") -public class ${moduleClass}Entity extends BaseEntity{ -#foreach ($column in $columnList) - -#if($column.columnName != 'id' && $column.fieldName != 'updateTime' && $column.fieldName != 'createTime') - /** - * $column.columnDesc - */ - private $column.fieldType $column.fieldName; -#end -#end - -} diff --git a/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/ExcelVO.java.vm b/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/ExcelVO.java.vm deleted file mode 100644 index fa4e7e0a..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/ExcelVO.java.vm +++ /dev/null @@ -1,33 +0,0 @@ -package ${basePackage}.module.${modulePackage}.domain.vo; - -import cn.afterturn.easypoi.excel.annotation.Excel; -import lombok.Data; -#foreach ($dtoImport in $dtoImports) -$dtoImport -#end - -/** - * [ ${tableDesc} ] - * - * @author ${author} - * @version 1.0 - * @company ${company} - * @copyright (c) ${company}Inc. All rights reserved. - * @date ${date} - * @since JDK1.8 - */ -@Data -public class ${moduleClass}ExcelVO { -#foreach ($column in $columnList) -#if($column.fieldType == 'Date') - @Excel(name = "${column.columnDesc}", format = "yyyy-MM-dd HH:mm:ss") - private $column.fieldType $column.fieldName; -#else - @Excel(name = "${column.columnDesc}") - private $column.fieldType $column.fieldName; -#end - -#end - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/QueryDTO.java.vm b/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/QueryDTO.java.vm deleted file mode 100644 index 44815d4d..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/QueryDTO.java.vm +++ /dev/null @@ -1,45 +0,0 @@ -package ${basePackage}.module.${modulePackage}.domain.dto; - -import ${basePackage}.common.domain.PageParamDTO; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import java.util.Date; -#foreach ($queryImport in $queryImports) -$queryImport -#end - -/** - * [ ${tableDesc} ] - * - * @author ${author} - * @version 1.0 - * @company ${company} - * @copyright (c) ${company}Inc. All rights reserved. - * @date ${date} - * @since JDK1.8 - */ -@Data -public class ${moduleClass}QueryDTO extends PageParamDTO { -#foreach ($queryField in $queryFieldList) - -#if($queryField.sqlOperate == 'in') - @ApiModelProperty("${queryField.columnDesc}") - private List<${queryField.fieldType}> ${queryField.fieldName}List; -#else - @ApiModelProperty("${queryField.columnDesc}") - private ${queryField.fieldType} ${queryField.fieldName}; -#end -#end - - @ApiModelProperty("创建时间-开始") - private Date createTimeBegin; - - @ApiModelProperty("创建时间-截止") - private Date createTimeEnd; - - @ApiModelProperty("上次更新时间-开始") - private Date updateTimeBegin; - - @ApiModelProperty("上次更新创建时间-开始") - private Date updateTimeEnd; -} diff --git a/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/Service.java.vm b/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/Service.java.vm deleted file mode 100644 index ca3b939d..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/Service.java.vm +++ /dev/null @@ -1,108 +0,0 @@ -package ${basePackage}.module.${modulePackage}.service; - -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import ${basePackage}.common.domain.PageResultDTO; -import ${basePackage}.common.domain.ResponseDTO; -import ${basePackage}.module.${modulePackage}.dao.${moduleClass}Dao; -import ${basePackage}.module.${modulePackage}.domain.dto.${moduleClass}AddDTO; -import ${basePackage}.module.${modulePackage}.domain.dto.${moduleClass}UpdateDTO; -import ${basePackage}.module.${modulePackage}.domain.dto.${moduleClass}QueryDTO; -import ${basePackage}.module.${modulePackage}.domain.entity.${moduleClass}Entity; -import ${basePackage}.module.${modulePackage}.domain.vo.${moduleClass}VO; -import ${basePackage}.module.${modulePackage}.domain.vo.${moduleClass}ExcelVO; -import ${basePackage}.util.SmartPageUtil; -import ${basePackage}.util.SmartBeanUtil; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -/** - * [ ${tableDesc} ] - * - * @author ${author} - * @version 1.0 - * @company ${company} - * @copyright (c) ${company}Inc. All rights reserved. - * @date ${date} - * @since JDK1.8 - */ -@Service -public class ${moduleClass}Service { - - @Autowired - private ${moduleClass}Dao ${moduleVar}Dao; - - /** - * 根据id查询 - */ - public ${moduleClass}Entity getById(Long id){ - return ${moduleVar}Dao.selectById(id); - } - - /** - * 分页查询 - * @author ${author} - * @date ${date} - */ - public ResponseDTO> queryByPage(${moduleClass}QueryDTO queryDTO) { - Page page = SmartPageUtil.convert2QueryPage(queryDTO); - IPage<${moduleClass}VO> voList = ${moduleVar}Dao.queryByPage(page, queryDTO); - PageResultDTO<${moduleClass}VO> pageResultDTO = SmartPageUtil.convert2PageResult(voList); - return ResponseDTO.succData(pageResultDTO); - } - - /** - * 添加 - * @author ${author} - * @date ${date} - */ - public ResponseDTO add(${moduleClass}AddDTO addDTO) { - ${moduleClass}Entity entity = SmartBeanUtil.copy(addDTO, ${moduleClass}Entity.class); - ${moduleVar}Dao.insert(entity); - return ResponseDTO.succ(); - } - - /** - * 编辑 - * @author ${author} - * @date ${date} - */ - @Transactional(rollbackFor = Exception.class) - public ResponseDTO update(${moduleClass}UpdateDTO updateDTO) { - ${moduleClass}Entity entity = SmartBeanUtil.copy(updateDTO, ${moduleClass}Entity.class); - ${moduleVar}Dao.updateById(entity); - return ResponseDTO.succ(); - } - - /** - * 删除 - * @author ${author} - * @date ${date} - */ - @Transactional(rollbackFor = Exception.class) - public ResponseDTO deleteByIds(List idList) { - ${moduleVar}Dao.deleteByIdList(idList); - return ResponseDTO.succ(); - } - - /** - * 查询全部导出对象 - * @author ${author} - * @date ${date} - */ - public List<${moduleClass}ExcelVO> queryAllExportData(${moduleClass}QueryDTO queryDTO) { - return ${moduleVar}Dao.queryAllExportData( queryDTO); - } - - /** - * 批量查询导出对象 - * @author ${author} - * @date ${date} - */ - public List<${moduleClass}ExcelVO> queryBatchExportData(List idList) { - return ${moduleVar}Dao.queryBatchExportData(idList); - } -} diff --git a/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/UpdateDTO.java.vm b/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/UpdateDTO.java.vm deleted file mode 100644 index e96cc501..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/UpdateDTO.java.vm +++ /dev/null @@ -1,20 +0,0 @@ -package ${basePackage}.module.${modulePackage}.domain.dto; - -import lombok.Data; - -/** - * 更新 [ ${tableDesc} ] - * - * @author ${author} - * @version 1.0 - * @company ${company} - * @copyright (c) 2018 ${company}Inc. All rights reserved. - * @date ${date} - * @since JDK1.8 - */ -@Data -public class ${moduleClass}UpdateDTO extends ${moduleClass}AddDTO { - - private Long id; - -} diff --git a/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/VO.java.vm b/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/VO.java.vm deleted file mode 100644 index b7a5ea53..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/VO.java.vm +++ /dev/null @@ -1,35 +0,0 @@ -package ${basePackage}.module.${modulePackage}.domain.vo; - -import lombok.Data; -#foreach ($dtoImport in $dtoImports) -$dtoImport -#end -import com.fasterxml.jackson.annotation.JsonFormat; -import io.swagger.annotations.ApiModelProperty; - -/** - * [ ${tableDesc} ] - * - * @author ${author} - * @version 1.0 - * @company ${company} - * @copyright (c) ${company}Inc. All rights reserved. - * @date ${date} - * @since JDK1.8 - */ -@Data -public class ${moduleClass}VO { -#foreach ($column in $columnList) -#if($column.fieldType == 'Date') - @ApiModelProperty("${column.columnDesc}") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private $column.fieldType $column.fieldName; -#else - @ApiModelProperty("${column.columnDesc}") - private $column.fieldType $column.fieldName; -#end - -#end - - -} diff --git a/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/web/Api.js.vm b/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/web/Api.js.vm deleted file mode 100644 index 858f2366..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/web/Api.js.vm +++ /dev/null @@ -1,28 +0,0 @@ -import { postAxios, getAxios, postDownloadAxios } from '@/lib/http'; - -export const ${moduleVar}Api = { - // 添加${tableDesc} @author ${author} - add${moduleClass}: (data) => { - return postAxios('/${moduleVar}/add', data); - }, - // 分页查询${tableDesc} @author ${author} - query${moduleClass}: (data) => { - return postAxios('/${moduleVar}/page/query', data); - }, - // 批量删除${tableDesc} @author ${author} - batchDelete${moduleClass}: (idList) => { - return postAxios('/${moduleVar}/deleteByIds', idList); - }, - // 修改${tableDesc} @author ${author} - update${moduleClass}: (data) => { - return postAxios('/${moduleVar}/update',data); - }, - // 导出全部 @author ${author} - exportAll:(data)=>{ - return postDownloadAxios('/${moduleVar}/export/all',data); - }, - // 批量导出 @author ${author} - batchExport: (idList) => { - return postDownloadAxios('/${moduleVar}/export/batch', idList); - }, -}; diff --git a/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/web/List.vue.vm b/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/web/List.vue.vm deleted file mode 100644 index 3bc635f4..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/web/List.vue.vm +++ /dev/null @@ -1,439 +0,0 @@ - - - diff --git a/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/web/ListForm.vue.vm b/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/web/ListForm.vue.vm deleted file mode 100644 index 558dfcb0..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/web/ListForm.vue.vm +++ /dev/null @@ -1,132 +0,0 @@ - - \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/web/Router.js.vm b/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/web/Router.js.vm deleted file mode 100644 index 00d5ed6c..00000000 --- a/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/web/Router.js.vm +++ /dev/null @@ -1,32 +0,0 @@ -import Main from '@/components/main'; -// ${tableName}路由 -export const ${moduleVar} = [ - { - path: '/${webModuleName}', - name: '${moduleClass}', - component: Main, - meta: { - title: '${tableDesc}管理', - icon: 'icon iconfont iconyoujianguanli' - }, - children: [ - // ${tableDesc}列表 - { - path: '/${webModuleName}/${webModuleName}-list', - name: '${moduleClass}List', - meta: { - title: '${tableDesc}列表', - privilege: [ - { title: '查询', name: '${webModuleName}-list-query' }, - { title: '新增', name: '${webModuleName}-list-add' }, - { title: '编辑', name: '${webModuleName}-list-update' }, - { title: '批量删除', name: '${webModuleName}-list-batch-delete' }, - { title: '批量导出', name: '${webModuleName}-list-batch-export' }, - { title: '导出全部', name: '${webModuleName}-list-export-all' } - ] - }, - component: () => import('@/views/business/${webModuleName}/${webModuleName}-list.vue') - } - ] - } -]; diff --git a/smart-admin-service/smart-admin-api/src/test/java/net/lab1024/smartadmin/BaseTest.java b/smart-admin-service/smart-admin-api/src/test/java/net/lab1024/smartadmin/BaseTest.java deleted file mode 100644 index 6d681a15..00000000 --- a/smart-admin-service/smart-admin-api/src/test/java/net/lab1024/smartadmin/BaseTest.java +++ /dev/null @@ -1,28 +0,0 @@ -package net.lab1024.smartadmin; - -import org.junit.After; -import org.junit.Before; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -/** - * 测试基类 - * - * @author lizongliang - * @date 2017/09/29 10:54 - */ -@RunWith(SpringRunner.class) -@SpringBootTest(classes = SmartAdminApplication.class,webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -public class BaseTest { - - @Before - public void before() { - System.out.println("测试开始------------------"); - } - - @After - public void after() { - System.out.println("测试结束------------------"); - } -} diff --git a/smart-admin-service/smart-admin-api/src/test/java/net/lab1024/smartadmin/SmartAdminApplicationTests.java b/smart-admin-service/smart-admin-api/src/test/java/net/lab1024/smartadmin/SmartAdminApplicationTests.java deleted file mode 100644 index d140b88b..00000000 --- a/smart-admin-service/smart-admin-api/src/test/java/net/lab1024/smartadmin/SmartAdminApplicationTests.java +++ /dev/null @@ -1,11 +0,0 @@ -package net.lab1024.smartadmin; - -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = SmartAdminApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -public class SmartAdminApplicationTests { - -} \ No newline at end of file diff --git a/smart-admin-service/smart-admin-api/src/test/java/net/lab1024/smartadmin/module/support/codegenerator/CodeGeneratorServiceTest.java b/smart-admin-service/smart-admin-api/src/test/java/net/lab1024/smartadmin/module/support/codegenerator/CodeGeneratorServiceTest.java deleted file mode 100644 index e824cf51..00000000 --- a/smart-admin-service/smart-admin-api/src/test/java/net/lab1024/smartadmin/module/support/codegenerator/CodeGeneratorServiceTest.java +++ /dev/null @@ -1,66 +0,0 @@ -package net.lab1024.smartadmin.module.support.codegenerator; - -import net.lab1024.smartadmin.BaseTest; -import net.lab1024.smartadmin.module.support.codegenerator.constant.SqlOperateTypeEnum; -import net.lab1024.smartadmin.module.support.codegenerator.domain.CodeGeneratorDTO; -import net.lab1024.smartadmin.module.support.codegenerator.domain.CodeGeneratorQueryColumnDTO; -import net.lab1024.smartadmin.module.support.codegenerator.service.CodeGeneratorService; -import com.google.common.collect.Lists; -import org.junit.Test; -import org.springframework.beans.factory.annotation.Autowired; - -import java.util.List; - -/** - * IdGeneratorService Tester. - * - * @author zhuoda - * @version 1.0 - */ -public class CodeGeneratorServiceTest extends BaseTest { - - @Autowired - private CodeGeneratorService codeGeneratorService; - - @Test - public void testGenerate() throws Exception { - /** - * !!! 所有查询条件均包含了createTime和updateTime的 范围查询 !!! - */ - - // t_peony 牡丹花表 - - //搜索字段 kind, 使用like搜索 - CodeGeneratorQueryColumnDTO kind = CodeGeneratorQueryColumnDTO.builder() - .columnName("kind") - .sqlOperate(SqlOperateTypeEnum.LIKE).build(); - //搜索字段 kind, 使用 == 搜索 - CodeGeneratorQueryColumnDTO id = CodeGeneratorQueryColumnDTO.builder() - .columnName("id") - .sqlOperate(SqlOperateTypeEnum.EQUALS).build(); - //搜索字段 name, 使用like搜索 - CodeGeneratorQueryColumnDTO name = CodeGeneratorQueryColumnDTO.builder() - .columnName("name") - .sqlOperate(SqlOperateTypeEnum.LIKE).build(); - //搜索字段 color, 使用like搜索 - CodeGeneratorQueryColumnDTO color = CodeGeneratorQueryColumnDTO.builder() - .columnName("color") - .sqlOperate(SqlOperateTypeEnum.LIKE).build(); - - List queryColumnList = Lists.newArrayList(id, kind, name, color); - - CodeGeneratorDTO codeGenerator = CodeGeneratorDTO.builder() - .author("卓大")//class 注释作者 - .company("1024创新实验室( www.1024lab.net )")//class注释公司名字 - .tableName("t_peony")//表名 - .tablePrefix("t_")//表名前缀 - .basePackage("net.lab1024.smartadmin")//包名 - .modulePackage("business.peony")//业务子包名 - .queryColumnList(queryColumnList)//加入搜搜字段 - .build();//构建 - - //当需要代码生成的时候,请将注释去掉 -// codeGeneratorService.codeGenerator(codeGenerator); - } - -} diff --git a/smart-admin-web/.babelrc b/smart-admin-web/.babelrc deleted file mode 100644 index 2a818842..00000000 --- a/smart-admin-web/.babelrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "presets": [ - "@vue/app" - ] -} diff --git a/smart-admin-web/.editorconfig b/smart-admin-web/.editorconfig deleted file mode 100644 index 9d08a1a8..00000000 --- a/smart-admin-web/.editorconfig +++ /dev/null @@ -1,9 +0,0 @@ -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true diff --git a/smart-admin-web/.env.development b/smart-admin-web/.env.development deleted file mode 100644 index 746c33a9..00000000 --- a/smart-admin-web/.env.development +++ /dev/null @@ -1,4 +0,0 @@ -NODE_ENV=development -VUE_APP_TYPE=dev -VUE_APP_URL=http://127.0.0.1:10086/smart-admin-api/ -VUE_APP_SOCKET_URL=ws://127.0.0.1:10086/smart-admin-api/ diff --git a/smart-admin-web/.env.local b/smart-admin-web/.env.local deleted file mode 100644 index 746c33a9..00000000 --- a/smart-admin-web/.env.local +++ /dev/null @@ -1,4 +0,0 @@ -NODE_ENV=development -VUE_APP_TYPE=dev -VUE_APP_URL=http://127.0.0.1:10086/smart-admin-api/ -VUE_APP_SOCKET_URL=ws://127.0.0.1:10086/smart-admin-api/ diff --git a/smart-admin-web/.env.prod b/smart-admin-web/.env.prod deleted file mode 100644 index d90edfe9..00000000 --- a/smart-admin-web/.env.prod +++ /dev/null @@ -1,8 +0,0 @@ -NODE_ENV=production -VUE_APP_TYPE=prod -VUE_APP_URL=http://preview.smartadmin.1024lab.net/smart-admin-api/ -VUE_APP_SOCKET_URL=ws://preview.smartadmin.1024lab.net/smart-admin-api/ - -// VUE_APP_URL=http://127.0.0.1:10086/smart-admin-api/ -// VUE_APP_SOCKET_URL=ws://127.0.0.1:10086/smart-admin-api/ - diff --git a/smart-admin-web/.env.sit b/smart-admin-web/.env.sit deleted file mode 100644 index ac2ac140..00000000 --- a/smart-admin-web/.env.sit +++ /dev/null @@ -1,3 +0,0 @@ -NODE_ENV=production -VUE_APP_TYPE=sit -VUE_APP_URL=http://172.16.0.145:10086/smart-admin-api/ diff --git a/smart-admin-web/.eslintrc.js b/smart-admin-web/.eslintrc.js deleted file mode 100644 index 28180441..00000000 --- a/smart-admin-web/.eslintrc.js +++ /dev/null @@ -1,34 +0,0 @@ -module.exports = { - root: true, - "extends": [ - "plugin:vue/essential", - "@vue/standard" - ], - rules: { - "generator-star-spacing": "off", //生成器函数*的前后空格 - // allow debugger during development - "no-debugger": process.env.NODE_ENV === "production" ? "error" : "off", - "vue/no-parsing-error": [2, { - "x-invalid-end-tag": false - }], - "no-const-assign": 2, //禁止修改const声明的变量 - "no-unused-vars": [0, { //禁止声明变量后却不使用 - // 允许声明未使用变量 - "vars": "all", - // 参数不检查 - "args": "none" - }], - "quotes": [2, "single"], //单引号 - "singleQuote": true, - "indent": 2, //缩进量 - "no-var": 2, //禁用var,用let和const代替 - "camelcase": 2, //强制驼峰法命名 - "eqeqeq": 1, //要求使用 === 和 !== 代替 == 和 != 操作符 - "no-eq-null": 2, //禁止对null使用==或!=运算符 - "no-sequences": 0, //禁用逗号操作符 - "semi": [2, "always"] //强制分号 - }, - parserOptions: { - parser: "babel-eslint" - } -} diff --git a/smart-admin-web/.gitignore b/smart-admin-web/.gitignore deleted file mode 100644 index a1009cf5..00000000 --- a/smart-admin-web/.gitignore +++ /dev/null @@ -1,22 +0,0 @@ -.DS_Store -node_modules -/dist - -/tests/e2e/videos/ -/tests/e2e/screenshots/ - -# Log files -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Editor directories and files -.idea -.vscode -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw* - -build/env.js diff --git a/smart-admin-web/.travis.yml b/smart-admin-web/.travis.yml deleted file mode 100644 index 07c971f8..00000000 --- a/smart-admin-web/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: stable -script: npm run lint -notifications: - email: false diff --git a/smart-admin-web/README.md b/smart-admin-web/README.md deleted file mode 100644 index fe637c03..00000000 --- a/smart-admin-web/README.md +++ /dev/null @@ -1,13 +0,0 @@ -### 启动讲解 - -###### 配置vscode -将 /vscode/settings.json文件配置到vscode中 - -###### 启动 -1 安装依赖: - -`npm install` - -2 运行本地环境 - -`npm run local` \ No newline at end of file diff --git a/smart-admin-web/cypress.json b/smart-admin-web/cypress.json deleted file mode 100644 index 470c7201..00000000 --- a/smart-admin-web/cypress.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "pluginsFile": "tests/e2e/plugins/index.js" -} diff --git a/smart-admin-web/doc/notice.txt b/smart-admin-web/doc/notice.txt deleted file mode 100644 index 8184781f..00000000 --- a/smart-admin-web/doc/notice.txt +++ /dev/null @@ -1,2 +0,0 @@ -1 login-form.vue 去掉登录帐号提示 -2 login-form.vue 修改默认登录绑定帐号 \ No newline at end of file diff --git a/smart-admin-web/javascript-ant-design-vue3/.env b/smart-admin-web/javascript-ant-design-vue3/.env new file mode 100644 index 00000000..6181c66e --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/.env @@ -0,0 +1,2 @@ + +VITE_APP_PROJECT_TITLE = 'SmartAdmin' \ No newline at end of file diff --git a/smart-admin-web/javascript-ant-design-vue3/.env.development b/smart-admin-web/javascript-ant-design-vue3/.env.development new file mode 100644 index 00000000..ac7e901e --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/.env.development @@ -0,0 +1,8 @@ + +VITE_APP_API_URL = 'http://127.0.0.1:1024' + +VITE_APP_PROJECT_TITLE = 'SmartAdmin 开发环境(Dev)' + +VITE_APP_PROFILE = 'dev' + +VITE_APP_MODE = 'development' \ No newline at end of file diff --git a/smart-admin-web/javascript-ant-design-vue3/.env.localhost b/smart-admin-web/javascript-ant-design-vue3/.env.localhost new file mode 100644 index 00000000..13132662 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/.env.localhost @@ -0,0 +1,8 @@ + +VITE_APP_API_URL = 'http://127.0.0.1:1024' + +VITE_APP_PROJECT_TITLE = 'SmartAdmin 本地环境(Localhost)' + +VITE_APP_PROFILE = 'local' + +VITE_APP_MODE = 'local' \ No newline at end of file diff --git a/smart-admin-web/javascript-ant-design-vue3/.env.pre b/smart-admin-web/javascript-ant-design-vue3/.env.pre new file mode 100644 index 00000000..c5c3327e --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/.env.pre @@ -0,0 +1,8 @@ + +VITE_APP_API_URL = 'http://127.0.0.1:1024' + +VITE_APP_PROJECT_TITLE = 'SmartAdmin 预发布环境(Pre)' + +VITE_APP_PROFILE = 'pre' + +VITE_APP_MODE = 'production' \ No newline at end of file diff --git a/smart-admin-web/javascript-ant-design-vue3/.env.production b/smart-admin-web/javascript-ant-design-vue3/.env.production new file mode 100644 index 00000000..2c249e8c --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/.env.production @@ -0,0 +1,8 @@ + +VITE_APP_API_URL = 'http://127.0.0.1:1024' + +VITE_APP_PROJECT_TITLE = 'SmartAdmin' + +VITE_APP_PROFILE = 'prod' + +VITE_APP_MODE = 'production' \ No newline at end of file diff --git a/smart-admin-web/javascript-ant-design-vue3/.env.test b/smart-admin-web/javascript-ant-design-vue3/.env.test new file mode 100644 index 00000000..40c7c11b --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/.env.test @@ -0,0 +1,8 @@ + +VITE_APP_API_URL = 'http://127.0.0.1:1024' + +VITE_APP_PROJECT_TITLE = 'SmartAdmin 测试环境(Test)' + +VITE_APP_PROFILE = 'test' + +VITE_APP_MODE = 'development' \ No newline at end of file diff --git a/smart-admin-web/javascript-ant-design-vue3/.eslintignore b/smart-admin-web/javascript-ant-design-vue3/.eslintignore new file mode 100644 index 00000000..78e1638b --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/.eslintignore @@ -0,0 +1,18 @@ + +*.sh +node_modules +lib +*.md +*.woff +*.ttf +.vscode +.idea +dist +public +/docs +.husky +.local +.localhost +/bin +Dockerfile +src/assets diff --git a/smart-admin-web/javascript-ant-design-vue3/.eslintrc.js b/smart-admin-web/javascript-ant-design-vue3/.eslintrc.js new file mode 100644 index 00000000..81e7acc0 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/.eslintrc.js @@ -0,0 +1,66 @@ +/* + * @Description: + * @Author: zhuoda + * @Date: 2021-11-05 + * @LastEditTime: 2022-07-05 + * @LastEditors: zhuoda + */ +module.exports = { + root: true, //此项是用来告诉eslint找当前配置文件不能往父级查找 + env: { + browser: true, + es2021: true, + node: true, + }, + parser: 'vue-eslint-parser', //使用vue-eslint-parser 来解析vue文件中的 template和script + parserOptions: { + ecmaVersion: 12, // 默认情况下,ESLint使用的是ECMAScript5语法,此处我们设置的选项是 es12 + sourceType: 'module', // 指定js导入的方式 + }, + extends: ['plugin:vue/vue3-essential', 'eslint:recommended', 'plugin:vue/base'], + globals: { + defineProps: 'readonly', + defineEmits: 'readonly', + defineExpose: 'readonly', + withDefaults: 'readonly', + }, + plugins: ['vue'], + rules: { + 'no-unused-vars': [ + 'error', + // we are only using this rule to check for unused arguments since TS + // catches unused variables but not args. + { varsIgnorePattern: '.*', args: 'none' }, + ], + 'space-before-function-paren': 'off', + + 'vue/attributes-order': 'off', + 'vue/one-component-per-file': 'off', + 'vue/html-closing-bracket-newline': 'off', + 'vue/max-attributes-per-line': 'off', + 'vue/multiline-html-element-content-newline': 'off', + 'vue/singleline-html-element-content-newline': 'off', + 'vue/attribute-hyphenation': 'off', + 'vue/require-default-prop': 'off', + 'vue/multi-word-component-names': [ + 'error', + { + ignores: ['index'], //需要忽略的组件名 + }, + ], + 'vue/html-self-closing': [ + 'error', + { + html: { + void: 'always', + normal: 'never', + component: 'always', + }, + svg: 'always', + math: 'always', + }, + ], + // Enable vue/script-setup-uses-vars rule + 'vue/script-setup-uses-vars': 'error', + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/.gitignore b/smart-admin-web/javascript-ant-design-vue3/.gitignore new file mode 100644 index 00000000..f4f9f437 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/.gitignore @@ -0,0 +1,6 @@ +node_modules +.DS_Store +dist +dist-ssr +*.local +.idea diff --git a/smart-admin-web/javascript-ant-design-vue3/.prettierrc.js b/smart-admin-web/javascript-ant-design-vue3/.prettierrc.js new file mode 100644 index 00000000..b771a20a --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/.prettierrc.js @@ -0,0 +1,30 @@ +/* + * 代码格式化配置 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-12 14:44:18 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +module.exports = { + printWidth: 150, // 每行代码长度(默认80) + tabWidth: 2, // 缩进空格数 + useTabs: false, //不用tab缩进 + semi: true, //// 在语句末尾打印分号 + singleQuote: true, // 使用单引号而不是双引号 + vueIndentScriptAndStyle: true, //Vue文件脚本和样式标签缩进 + quoteProps: 'as-needed', // 更改引用对象属性的时间 可选值"" + jsxSingleQuote: true, // 在JSX中使用单引号而不是双引号 + trailingComma: 'es5', //多行时尽可能打印尾随逗号。(例如,单行数组永远不会出现逗号结尾。) 可选值"",默认none + bracketSpacing: true, // 在对象文字中的括号之间打印空格 + jsxBracketSameLine: false, //jsx 标签的反尖括号需要换行 + arrowParens: 'always', // 在单独的箭头函数参数周围包括括号 always:(x) => x \ avoid:x => x + rangeStart: 0, // 这两个选项可用于格式化以给定字符偏移量(分别包括和不包括)开始和结束的代码 + rangeEnd: Infinity, + requirePragma: false, // 指定要使用的解析器,不需要写文件开头的 @prettier + insertPragma: false, // 不需要自动在文件开头插入 @prettier + proseWrap: 'preserve', // 使用默认的折行标准 always\never\preserve + htmlWhitespaceSensitivity: 'css', // 指定HTML文件的全局空格敏感度 css\strict\ignore + endOfLine: 'auto', // 因为prettier的规范和eslint的换行规则不同,所以这个必须配置。要不然每次打开文件都会有一堆的警告;换行符使用 lf 结尾是 可选值" + + + + + + + + SmartAdmin 2.X + + + +
+ + + diff --git a/smart-admin-web/javascript-ant-design-vue3/jsconfig.json b/smart-admin-web/javascript-ant-design-vue3/jsconfig.json new file mode 100644 index 00000000..c97f5795 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/jsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "target": "ES6", + "jsx":"preserve", + "module": "commonjs", + "allowSyntheticDefaultImports": true, + "baseUrl": "./", + "paths": { + "/@/*": [ + "src/*" + ] + } + }, + "exclude": [ + "node_modules" + ] +} \ No newline at end of file diff --git a/smart-admin-web/javascript-ant-design-vue3/package.json b/smart-admin-web/javascript-ant-design-vue3/package.json new file mode 100644 index 00000000..fc79dae2 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/package.json @@ -0,0 +1,73 @@ +{ + "version": "2.0.0", + "author": { + "name": "1024lab", + "email": "lab1024@163.com", + "url": "https://www.1024lab.net" + }, + "license": "MIT", + "homepage": "https://smartadmin.1024lab.net", + "scripts": { + "dev": "vite", + "test": "vite build --mode test", + "pre": "vite build --mode pre", + "prod": "vite build --mode production", + "localhost": "vite --mode localhost", + "build": "vue-tsc --noEmit && vite build", + "serve": "vite preview" + }, + "dependencies": { + "@ant-design/icons-vue": "^6.1.0", + "@wangeditor/editor": "^5.0.1", + "@wangeditor/editor-for-vue": "^5.1.11", + "ant-design-vue": "3.2.5", + "axios": "~0.27.2", + "clipboard": "~2.0.11", + "crypto-js": "~4.1.1", + "decimal.js": "^10.3.1", + "diff": "^5.1.0", + "diff2html": "^3.4.18", + "echarts": "^5.1.2", + "highlight.js": "^11.6.0", + "js-cookie": "^2.2.1", + "lunar-javascript": "^1.2.32", + "mitt": "^3.0.0", + "nprogress": "^0.2.0", + "pinia": "~2.0.14", + "sortablejs": "^1.15.0", + "ua-parser-js": "^1.0.2", + "v-viewer": "~1.6.4", + "vue": "~3.2.26", + "vue-i18n": "^9.1.10", + "vue-router": "~4.0.15", + "vue3-json-viewer": "^2.2.2" + }, + "devDependencies": { + "@vitejs/plugin-vue": "~2.3.3", + "@vue/compiler-sfc": "~3.2.26", + "eslint": "^8.16.0", + "eslint-config-prettier": "~8.5.0", + "eslint-plugin-prettier": "~4.0.0", + "eslint-plugin-vue": "~9.1.0", + "less": "~4.1.1", + "less-loader": "~10.0.1", + "prettier": "~2.6.2", + "rimraf": "^3.0.2", + "stylelint": "~14.8.5", + "stylelint-config-prettier": "~9.0.3", + "stylelint-config-standard": "~25.0.0", + "stylelint-order": "~5.0.0", + "vite": "~2.9.9", + "vite-plugin-mock": "~2.9.6", + "vite-plugin-optimize-persist": "^0.1.2", + "vite-plugin-package-config": "^0.1.1", + "vue-eslint-parser": "~9.0.2" + }, + "engines": { + "node": ">=14" + }, + "repository": { + "type": "git", + "url": "https://github.com/1024-lab/smart-admin.git" + } +} diff --git a/smart-admin-web/.postcssrc.js b/smart-admin-web/javascript-ant-design-vue3/postcss.config.js similarity index 54% rename from smart-admin-web/.postcssrc.js rename to smart-admin-web/javascript-ant-design-vue3/postcss.config.js index 961986e2..2c7ab7cc 100644 --- a/smart-admin-web/.postcssrc.js +++ b/smart-admin-web/javascript-ant-design-vue3/postcss.config.js @@ -1,5 +1,4 @@ module.exports = { plugins: { - autoprefixer: {} - } -} + }, +}; diff --git a/smart-admin-h5/public/favicon.ico b/smart-admin-web/javascript-ant-design-vue3/public/favicon.ico similarity index 100% rename from smart-admin-h5/public/favicon.ico rename to smart-admin-web/javascript-ant-design-vue3/public/favicon.ico diff --git a/smart-admin-web/javascript-ant-design-vue3/src/App.vue b/smart-admin-web/javascript-ant-design-vue3/src/App.vue new file mode 100644 index 00000000..92d73b1d --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/App.vue @@ -0,0 +1,34 @@ + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/api/business/category/category-api.js b/smart-admin-web/javascript-ant-design-vue3/src/api/business/category/category-api.js new file mode 100644 index 00000000..87f34568 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/api/business/category/category-api.js @@ -0,0 +1,34 @@ +/* + * 类目api + * + * @Author: 卓大 + * @Date: 2022-09-03 21:35:00 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { getRequest, postRequest } from '/@/lib/axios'; + +export const categoryApi = { + // 添加类目 @author 卓大 + addCategory: (param) => { + return postRequest('/category/add', param); + }, + // GET + // 删除类目 @author 卓大 + deleteCategoryById: (categoryId) => { + return getRequest(`/category/delete/${categoryId}`); + }, + // 查询类目层级树 @author 卓大 + queryCategoryTree: (param) => { + return postRequest('/category/tree', param); + }, + // 更新类目 @author 卓大 + updateCategory: (param) => { + return postRequest('/category/update', param); + }, + // 查询类目详情 @author 卓大 + getCategory: (categoryId) => { + return getRequest(`/category/${categoryId}`); + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/api/business/goods/goods-api.js b/smart-admin-web/javascript-ant-design-vue3/src/api/business/goods/goods-api.js new file mode 100644 index 00000000..e3ad9598 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/api/business/goods/goods-api.js @@ -0,0 +1,31 @@ +/* + * @Description: + * @Author: zhuoda + * @Date: 2021-11-05 + * @LastEditTime: 2022-06-23 + * @LastEditors: zhuoda + */ +import { postRequest, getRequest } from '/@/lib/axios'; + +export const goodsApi = { + // 添加商品 @author zhuoda + addGoods: (param) => { + return postRequest('/goods/add', param); + }, + // 删除 @author zhuoda + deleteGoods: (goodsId) => { + return getRequest(`/goods/delete/${goodsId}`); + }, + // 批量 @author zhuoda + batchDelete: (goodsIdList) => { + return postRequest('/goods/batchDelete', goodsIdList); + }, + // 分页查询 @author zhuoda + queryGoodsList: (param) => { + return postRequest('/goods/query', param); + }, + // 更新商品 @author zhuoda + updateGoods: (param) => { + return postRequest('/goods/update', param); + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/bank-api.js b/smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/bank-api.js new file mode 100644 index 00000000..f2c63864 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/bank-api.js @@ -0,0 +1,42 @@ +/* + * 银行卡 + * + * @Author: 善逸 + * @Date: 2022-09-03 21:42:08 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { postRequest, getRequest } from '/@/lib/axios'; + +export const bankApi = { + // 新建银行信息 @author 善逸 + create: (param) => { + return postRequest('/oa/bank/create', param); + }, + + // 删除银行信息 @author 善逸 + delete: (bankId) => { + return getRequest(`/oa/bank/delete/${bankId}`); + }, + + // 查询银行信息详情 @author 善逸 + detail: (bankId) => { + return getRequest(`/oa/bank/get/${bankId}`); + }, + + // 分页查询银行信息 @author 善逸 + pageQuery: (param) => { + return postRequest('/oa/bank/page/query', param); + }, + + // 编辑银行信息 @author 善逸 + update: (param) => { + return postRequest('/oa/bank/update', param); + }, + + // 根据企业ID查询不分页的银行列表 @author 善逸 + queryList: (enterpriseId) => { + return getRequest(`/oa/bank/query/list/${enterpriseId}`); + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/enterprise-api.js b/smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/enterprise-api.js new file mode 100644 index 00000000..69a5b19a --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/enterprise-api.js @@ -0,0 +1,64 @@ +/* + * 企业信息 + * + * @Author: 开云 + * @Date: 2022-09-03 21:47:28 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { postRequest, getRequest } from '/@/lib/axios'; + +export const enterpriseApi = { + // 新建企业 @author 开云 + create: (param) => { + return postRequest('/oa/enterprise/create', param); + }, + + // 删除企业 @author 开云 + delete: (enterpriseId) => { + return getRequest(`/oa/enterprise/delete/${enterpriseId}`); + }, + + // 查询企业详情 @author 开云 + detail: (enterpriseId) => { + return getRequest(`/oa/enterprise/get/${enterpriseId}`); + }, + + // 分页查询企业模块 @author 开云 + pageQuery: (param) => { + return postRequest('/oa/enterprise/page/query', param); + }, + + //企业列表查询 含数据范围 @author 开云 + queryList: (type) => { + let query = ''; + if (type) { + query = `?type=${type}`; + } + return getRequest(`/oa/enterprise/query/list${query}`); + }, + + // 编辑企业 @author 开云 + update: (param) => { + return postRequest('/oa/enterprise/update', param); + }, + // 企业全部员工List @author yandy + employeeList: (param) => { + return postRequest('/oa/enterprise/employee/list', param); + }, + // 分页查询企业员工List @author 卓大 + queryPageEmployeeList: (param) => { + return postRequest('/oa/enterprise/employee/queryPage', param); + }, + // 添加员工 @author yandy + addEmployee: (param) => { + return postRequest('/oa/enterprise/employee/add', param); + }, + + // 删除员工 @author yandy + deleteEmployee: (param) => { + return postRequest('/oa/enterprise/employee/delete', param); + }, + +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/invoice-api.js b/smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/invoice-api.js new file mode 100644 index 00000000..f51b1273 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/invoice-api.js @@ -0,0 +1,44 @@ +/* + * OA发票信息 + * + * @Author: 善逸 + * @Date: 2022-09-03 21:48:54 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { postRequest, getRequest } from '/@/lib/axios'; + +export const invoiceApi = { + + // 新建发票信息 @author 善逸 + create: (param) => { + return postRequest('/oa/invoice/create', param); + }, + + // 删除发票信息 @author 善逸 + delete: (bankId) => { + return getRequest(`/oa/invoice/delete/${bankId}`); + }, + + // 查询发票信息详情 @author 善逸 + detail: (bankId) => { + return getRequest(`//oa/invoice/get/${bankId}`); + }, + + // 分页查询发票信息 @author 善逸 + pageQuery: (param) => { + return postRequest('/oa/invoice/page/query', param); + }, + + // 编辑发票信息 @author 善逸 + update: (param) => { + return postRequest('/oa/invoice/update', param); + }, + + // 查询发票列表 @author 善逸 + queryList: (enterpriseId) => { + return getRequest(`/oa/invoice/query/list/${enterpriseId}`); + }, + +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/notice-api.js b/smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/notice-api.js new file mode 100644 index 00000000..056eb2de --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/notice-api.js @@ -0,0 +1,74 @@ +/* + * @Description: 公告信息、企业动态 + * @version: + * @Author: zhuoda + * @Date: 2022-08-16 20:34:36 + */ +import { postRequest, getRequest } from '/@/lib/axios'; + +export const noticeApi = { + // ---------------- 通知公告类型 ----------------------- + + // 通知公告类型-获取全部 @author zhuoda + getAllNoticeTypeList() { + return getRequest('/oa/noticeType/getAll'); + }, + + // 通知公告类型-添加 @author zhuoda + addNoticeType(name) { + return getRequest(`/oa/noticeType/add/${name}`); + }, + + // 通知公告类型-修改 @author zhuoda + updateNoticeType(noticeTypeId, name) { + return getRequest(`/oa/noticeType/update/${noticeTypeId}/${name}`); + }, + // 通知公告类型-删除 @author zhuoda + deleteNoticeType(noticeTypeId) { + return getRequest(`/oa/noticeType/delete/${noticeTypeId}`); + }, + + // ---------------- 通知公告管理 ----------------------- + + // 通知公告-分页查询 @author zhuoda + queryNotice(param) { + return postRequest('/oa/notice/query', param); + }, + + // 通知公告-添加 @author zhuoda + addNotice(param) { + return postRequest('/oa/notice/add', param); + }, + + // 通知公告-更新 @author zhuoda + updateNotice(param) { + return postRequest('/oa/notice/update', param); + }, + + // 通知公告-删除 @author zhuoda + deleteNotice(noticeId) { + return getRequest(`/oa/notice/delete/${noticeId}`); + }, + + // 通知公告-更新详情 @author zhuoda + getUpdateNoticeInfo(noticeId) { + return getRequest(`/oa/notice/getUpdateVO/${noticeId}`); + }, + + // --------------------- 【员工】查看 通知公告 ------------------------- + + // 通知公告-员工-查看详情 @author zhuoda + view(noticeId) { + return getRequest(`/oa/notice/employee/view/${noticeId}`); + }, + + // 通知公告-员工-查询 @author zhuoda + queryEmployeeNotice(param) { + return postRequest('/oa/notice/employee/query', param); + }, + + // 【员工】通知公告-查询 查看记录 @author zhuoda + queryViewRecord(param) { + return postRequest('/oa/notice/employee/queryViewRecord', param); + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/api/support/cache/cache-api.js b/smart-admin-web/javascript-ant-design-vue3/src/api/support/cache/cache-api.js new file mode 100644 index 00000000..618a4519 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/api/support/cache/cache-api.js @@ -0,0 +1,25 @@ +/* + * 缓存 + * + * @Author: 罗伊 + * @Date: 2022-09-03 21:51:34 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { postRequest, getRequest } from '/@/lib/axios'; + +export const cacheApi = { + // 获取某个缓存的所有key @author 罗伊 + getKeys: (cacheName) => { + return getRequest(`/support/cache/keys/${cacheName}`); + }, + // 移除某个缓存 @author 罗伊 + remove: (cacheName) => { + return getRequest(`/support/cache/remove/${cacheName}`); + }, + // 获取所有缓存 @author 罗伊 + getAllCacheNames: () => { + return getRequest('/support/cache/names'); + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/api/support/change-log/change-log-api.js b/smart-admin-web/javascript-ant-design-vue3/src/api/support/change-log/change-log-api.js new file mode 100644 index 00000000..b81b1e0a --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/api/support/change-log/change-log-api.js @@ -0,0 +1,45 @@ +/** + * 系统更新日志 api 封装 + * + * @Author: 卓大 + * @Date: 2022-09-26 14:53:50 + * @Copyright 1024创新实验室 + */ +import { postRequest, getRequest } from '/@/lib/axios'; + +export const changeLogApi = { + /** + * 分页查询 @author 卓大 + */ + queryPage : (param) => { + return postRequest('/changeLog/queryPage', param); + }, + + /** + * 增加 @author 卓大 + */ + add: (param) => { + return postRequest('/changeLog/add', param); + }, + + /** + * 修改 @author 卓大 + */ + update: (param) => { + return postRequest('/changeLog/update', param); + }, + + /** + * 删除 @author 卓大 + */ + delete: (id) => { + return getRequest(`/changeLog/delete/${id}`); + }, + + /** + * 批量删除 @author 卓大 + */ + batchDelete: (idList) => { + return postRequest('/changeLog/batchDelete', idList); + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/api/support/code-generator/code-generator-api.js b/smart-admin-web/javascript-ant-design-vue3/src/api/support/code-generator/code-generator-api.js new file mode 100644 index 00000000..ce669eb5 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/api/support/code-generator/code-generator-api.js @@ -0,0 +1,46 @@ +/* + * 代码生成器 + * + * @Author: 卓大 + * @Date: 2022-09-03 21:51:54 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { getRequest, postRequest,download } from '/@/lib/axios'; + +export const codeGeneratorApi = { + // 查询数据库的表 @author 卓大 + queryTableList: (param) => { + return postRequest('/support/codeGenerator/table/queryTableList', param); + }, + + // 查询表的列 @author 卓大 + getTableColumns: (table) => { + return getRequest(`/support/codeGenerator/table/getTableColumns/${table}`); + }, + + // ------------------- 配置 ------------------- + + // 获取表的配置信息 @author 卓大 + getConfig: (table) => { + return getRequest(`/support/codeGenerator/table/getConfig/${table}`); + }, + + // 更新配置信息 @author 卓大 + updateConfig: (param) => { + return postRequest('/support/codeGenerator/table/updateConfig', param); + }, + + // ------------------- 生成 ------------------- + + // 预览代码 @author 卓大 + preview: (param) => { + return postRequest('/support/codeGenerator/code/preview', param); + }, + + // 下载代码 @author 卓大 + downloadCode: (tableName) => { + return download(`${tableName}.zip`,`/support/codeGenerator/code/download/${tableName}`); + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/api/support/config/config-api.js b/smart-admin-web/javascript-ant-design-vue3/src/api/support/config/config-api.js new file mode 100644 index 00000000..ba2c4946 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/api/support/config/config-api.js @@ -0,0 +1,29 @@ +/* + * 配置 + * + * @Author: 卓大 + * @Date: 2022-09-03 21:51:54 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { postRequest, getRequest } from '/@/lib/axios'; + +export const configApi = { + // 分页查询 @author 卓大 + queryList: (param) => { + return postRequest('/support/config/query', param); + }, + // 添加配置参数 @author 卓大 + addConfig: (param) => { + return postRequest('/support/config/add', param); + }, + // 修改配置参数 @author 卓大 + updateConfig: (param) => { + return postRequest('/support/config/update', param); + }, + // 查询配置详情 @author 卓大 + queryByKey: (param) => { + return getRequest(`/support/config/queryByKey?configKey=${param}`); + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/api/support/data-tracer/data-tracer-api.js b/smart-admin-web/javascript-ant-design-vue3/src/api/support/data-tracer/data-tracer-api.js new file mode 100644 index 00000000..6c44c227 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/api/support/data-tracer/data-tracer-api.js @@ -0,0 +1,18 @@ +/* + * 数据变动 + * + * @Author: 卓大 + * @Date: 2022-09-03 21:51:54 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { postRequest } from '/@/lib/axios'; + +export const dataTracerApi = { + // 分页查询业务操作日志 - @author 卓大 + queryList: (param) => { + return postRequest('/support/dataTracer/query', param); + }, + +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/api/support/dict/dict-api.js b/smart-admin-web/javascript-ant-design-vue3/src/api/support/dict/dict-api.js new file mode 100644 index 00000000..ac65eaf5 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/api/support/dict/dict-api.js @@ -0,0 +1,59 @@ +/* + * 字典 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-03 21:55:25 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { postRequest, getRequest } from '/@/lib/axios'; + +export const dictApi = { + // 分页查询数据字典KEY - @author 卓大 + keyQuery: (param) => { + return postRequest('/support/dict/key/query', param); + }, + // 查询全部字典key - @author 卓大 + queryAllKey: () => { + return getRequest('/support/dict/key/queryAll'); + }, + /** + * 分页查询数据字典value - @author 卓大 + */ + valueQuery: (param) => { + return postRequest('/support/dict/value/query', param); + }, + // 数据字典KEY-添加- @author 卓大 + keyAdd: (param) => { + return postRequest('/support/dict/key/add', param); + }, + // 分页查询数据字典value - @author 卓大 + valueAdd: (param) => { + return postRequest('/support/dict/value/add', param); + }, + // 数据字典key-更新- @author 卓大 + keyEdit: (param) => { + return postRequest('/support/dict/key/edit', param); + }, + // 数据字典Value-更新- @author 卓大 + valueEdit: (param) => { + return postRequest('/support/dict/value/edit', param); + }, + // 数据字典key-删除- @author 卓大 + keyDelete: (keyIdList) => { + return postRequest('/support/dict/key/delete', keyIdList); + }, + // 数据字典Value-删除- @author 卓大 + valueDelete: (valueIdList) => { + return postRequest('/support/dict/value/delete', valueIdList); + }, + // 缓存刷新- @author 卓大 + cacheRefresh: () => { + return getRequest('/support/dict/cache/refresh'); + }, + // 数据字典-值列表- @author 卓大 + valueList: (keyCode) => { + return getRequest(`/support/dict/value/list/${keyCode}`); + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/api/support/feedback/feedback-api.js b/smart-admin-web/javascript-ant-design-vue3/src/api/support/feedback/feedback-api.js new file mode 100644 index 00000000..3ed27edf --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/api/support/feedback/feedback-api.js @@ -0,0 +1,21 @@ +/* + * 意见反馈 + * + * @Author: 1024创新实验室:开云 + * @Date: 2022-09-03 21:56:31 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { postRequest } from '/@/lib/axios'; + +export const feedbackApi = { + // 意见反馈-新增 + addFeedback: (params) => { + return postRequest('/support/feedback/add', params); + }, + // 意见反馈-分页查询 + queryFeedback: (params) => { + return postRequest('/support/feedback/query', params); + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/api/support/file/file-api.js b/smart-admin-web/javascript-ant-design-vue3/src/api/support/file/file-api.js new file mode 100644 index 00000000..510c1350 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/api/support/file/file-api.js @@ -0,0 +1,38 @@ +/* + * 文件上传 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-03 21:55:25 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { postRequest, getRequest, download } from '/@/lib/axios'; + +export const fileApi = { + // 文件上传 @author 卓大 + uploadUrl: '/support/file/upload', + uploadFile: (param, folder) => { + return postRequest(`/support/file/upload?folder=${folder}`, param); + }, + + /** + * 分页查询 @author 卓大 + */ + queryPage: (param) => { + return postRequest('/support/file/queryPage', param); + }, + /** + * 获取文件URL:根据fileKey @author 胡克 + */ + getUrl: (fileKey) => { + return getRequest(`/support/file/getFileUrl?fileKey=${fileKey}`); + }, + + /** + * 下载文件流(根据fileKey) @author 胡克 + */ + downLoadFile: (fileName, fileKey) => { + return download(fileName, '/support/file/downLoad', { fileKey }); + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/api/support/heart-beat/heart-beat-api.js b/smart-admin-web/javascript-ant-design-vue3/src/api/support/heart-beat/heart-beat-api.js new file mode 100644 index 00000000..53737c40 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/api/support/heart-beat/heart-beat-api.js @@ -0,0 +1,17 @@ +/* + * 心跳 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-03 21:55:47 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { postRequest } from '/@/lib/axios'; + +export const heartBeatApi = { + // 分页查询 @author 卓大 + queryList: (param) => { + return postRequest('/support/heartBeat/query', param); + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/api/support/help-doc/help-doc-api.js b/smart-admin-web/javascript-ant-design-vue3/src/api/support/help-doc/help-doc-api.js new file mode 100644 index 00000000..faa6e0f7 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/api/support/help-doc/help-doc-api.js @@ -0,0 +1,59 @@ +/* + * 帮助文档 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-03 21:56:31 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { postRequest, getRequest } from '/@/lib/axios'; + +export const helpDocApi = { + // 【管理】帮助文档-分页查询 @author zhuoda + query: (param) => { + return postRequest('/support/helpDoc/query', param); + }, + + //【管理】帮助文档-更新 @author zhuoda + update: (param) => { + return postRequest('/support/helpDoc/update', param); + }, + + // 【管理】帮助文档-添加 @author zhuoda + add: (param) => { + return postRequest('/support/helpDoc/add', param); + }, + + //【管理】帮助文档-删除 @author zhuoda + delete: (helpDocId) => { + return getRequest(`/support/helpDoc/delete/${helpDocId}`); + }, + + //【管理】帮助文档-获取详情 @author zhuoda + getDetail: (helpDocId) => { + return getRequest(`/support/helpDoc/getDetail/${helpDocId}`); + }, + + //【管理】帮助文档-根据关联id查询 @author zhuoda + queryHelpDocByRelationId: (relationId) => { + return getRequest(`/support/helpDoc/queryHelpDocByRelationId/${relationId}`); + }, + + //----------------------- 用户相关 -------------------------------- + + //【用户】帮助文档-查询全部 @author zhuoda + getAllHelpDocList() { + return getRequest('/support/helpDoc/user/queryAllHelpDocList'); + }, + + //【用户】帮助文档-查询全部 @author zhuoda + view(helpDocId) { + return getRequest(`/support/helpDoc/user/view/${helpDocId}`); + }, + + //【用户】帮助文档-查询 查看记录 @author zhuoda + queryViewRecord(param) { + return postRequest('/support/helpDoc/user/queryViewRecord', param); + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/api/support/help-doc/help-doc-catalog-api.js b/smart-admin-web/javascript-ant-design-vue3/src/api/support/help-doc/help-doc-catalog-api.js new file mode 100644 index 00000000..94f1c224 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/api/support/help-doc/help-doc-catalog-api.js @@ -0,0 +1,32 @@ +/* + * 帮助文档 目录 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-03 21:56:31 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { postRequest, getRequest } from '/@/lib/axios'; + +export const helpDocCatalogApi = { + //帮助文档目录-获取全部 @author zhuoda + getAll: () => { + return getRequest('/support/helpDoc/helpDocCatalog/getAll'); + }, + + //帮助文档目录-添加 @author zhuoda + add: (param) => { + return postRequest('/support/helpDoc/helpDocCatalog/add', param); + }, + + //帮助文档目录-更新 @author zhuoda + update: (param) => { + return postRequest('/support/helpDoc/helpDocCatalog/update', param); + }, + + //帮助文档目录-删除 @author zhuoda + delete: (helpDocCatalogId) => { + return getRequest(`/support/helpDoc/helpDocCatalog/delete/${helpDocCatalogId}`); + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/api/support/login-log/login-log-api.js b/smart-admin-web/javascript-ant-design-vue3/src/api/support/login-log/login-log-api.js new file mode 100644 index 00000000..621e683b --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/api/support/login-log/login-log-api.js @@ -0,0 +1,17 @@ +/* + * 登录日志 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-03 21:56:31 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { postRequest, getRequest } from '/@/lib/axios'; + +export const loginLogApi = { + // 分页查询 @author 卓大 + queryList: (param) => { + return postRequest('/support/loginLog/page/query', param); + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/api/support/operate-log/operate-log-api.js b/smart-admin-web/javascript-ant-design-vue3/src/api/support/operate-log/operate-log-api.js new file mode 100644 index 00000000..7ea5f2a7 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/api/support/operate-log/operate-log-api.js @@ -0,0 +1,21 @@ +/* + * 操作日志 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-03 21:56:45 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { postRequest, getRequest } from '/@/lib/axios'; + +export const operateLogApi = { + // 分页查询 @author 卓大 + queryList: (param) => { + return postRequest('/support/operateLog/page/query', param); + }, + // 详情 @author 卓大 + detail: (id) => { + return getRequest(`/support/operateLog/detail/${id}`); + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/api/support/reload/reload-api.js b/smart-admin-web/javascript-ant-design-vue3/src/api/support/reload/reload-api.js new file mode 100644 index 00000000..9404225d --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/api/support/reload/reload-api.js @@ -0,0 +1,25 @@ +/* + * reload (内存热加载、钩子等) + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-03 21:57:19 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { postRequest, getRequest } from '/@/lib/axios'; + +export const reloadApi = { + // 查询reload列表 @author 卓大 + queryList: () => { + return getRequest('/support/reload/query'); + }, + // 获取reload result @author 卓大 + queryReloadResult: (tag) => { + return getRequest(`/support/reload/result/${tag}`); + }, + // 执行reload @author 卓大 + reload: (reloadForm) => { + return postRequest('/support/reload/update', reloadForm); + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/api/support/serial-number/serial-number-api.js b/smart-admin-web/javascript-ant-design-vue3/src/api/support/serial-number/serial-number-api.js new file mode 100644 index 00000000..c6606bae --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/api/support/serial-number/serial-number-api.js @@ -0,0 +1,25 @@ +/* + * 单据序列号 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-03 21:57:52 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { postRequest, getRequest } from '/@/lib/axios'; + +export const serialNumberApi = { + // 生成单号 @author 卓大 + generate: (generateForm) => { + return postRequest('/support/serialNumber/generate', generateForm); + }, + // 获取所有单号定义 @author 卓大 + getAll: () => { + return getRequest('/support/serialNumber/all'); + }, + // 获取生成记录 @author 卓大 + queryRecord: (form) => { + return postRequest('/support/serialNumber/queryRecord', form); + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/api/support/table/table-column-api.js b/smart-admin-web/javascript-ant-design-vue3/src/api/support/table/table-column-api.js new file mode 100644 index 00000000..7223ab9f --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/api/support/table/table-column-api.js @@ -0,0 +1,26 @@ +/* + * @Description:表格自定义列 + * @version: + * @Author: zhuoda + * @Date: 2022-08-17 23:32:36 + * @LastEditors: zhuoda + * @LastEditTime: 2022-08-21 + */ +import { postRequest, getRequest } from '/@/lib/axios'; + +export const tableColumnApi = { + // 修改表格列 @author zhuoda + updateTableColumn: (param) => { + return postRequest('/support/tableColumn/update', param); + }, + + // 查询表格列 @author zhuoda + getColumns: (tableId) => { + return getRequest(`/support/tableColumn/getColumns/${tableId}`); + }, + + // 删除表格列 @author zhuoda + deleteColumns: (tableId) => { + return getRequest(`/support/tableColumn/delete/${tableId}`); + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/api/system/department/department-api.js b/smart-admin-web/javascript-ant-design-vue3/src/api/system/department/department-api.js new file mode 100644 index 00000000..d975b6b8 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/api/system/department/department-api.js @@ -0,0 +1,55 @@ +/* + * 部门 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-03 21:58:50 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { getRequest, postRequest } from '/@/lib/axios'; + +export const departmentApi = { + /** + * @description: 查询部门列表 @author 卓大 + * @param {*} + * @return {*} + */ + queryAllDepartment: () => { + return getRequest('/department/listAll'); + }, + + /** + * @description: 查询部门树形列表 @author 卓大 + * @param {*} + * @return {*} + */ + queryDepartmentTree: () => { + return getRequest('/department/treeList'); + }, + + /** + * @description: 添加部门 @author 卓大 + * @param {*} + * @return {*} + */ + addDepartment: (param) => { + return postRequest('/department/add', param); + }, + /** + * @description: 更新部门信息 @author 卓大 + * @param {*} + * @return {*} + */ + updateDepartment: (param) => { + return postRequest('/department/update', param); + }, + /** + * @description: 获取校区列表 @author 卓大 + * @param {*} + * @return {*} + */ + deleteDepartment: (departmentId) => { + return getRequest(`/department/delete/${departmentId}`); + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/api/system/employee/employee-api.js b/smart-admin-web/javascript-ant-design-vue3/src/api/system/employee/employee-api.js new file mode 100644 index 00000000..f4e84e4d --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/api/system/employee/employee-api.js @@ -0,0 +1,98 @@ +/* + * 员工 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-03 21:59:15 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +import { getRequest, postRequest } from '/@/lib/axios'; + +export const employeeApi = { + /** + * @description: 查询所有员工 @author 卓大 + * @param {*} + * @return {*} + */ + queryAll: () => { + return getRequest('/employee/queryAll'); + }, + /** + * @description: 员工管理查询 + * @param {*} + * @return {*} + */ + queryEmployee: (params) => { + return postRequest('/employee/query', params); + }, + /** + * @description: 添加员工 + * @param {EmployeeAddDto} params + * @return {*} + */ + addEmployee: (params) => { + return postRequest('/employee/add', params); + }, + /** + * @description: 更新员工信息 + * @param {EmployeeUpdateDto} params + * @return {*} + */ + updateEmployee: (params) => { + return postRequest('/employee/update', params); + }, + /** + * @description: 删除员工 + * @param {number} employeeId + * @return {*} + */ + deleteEmployee: (employeeId) => { + return getRequest(`/employee/delete/${employeeId}`); + }, + /** + * @description: 批量删除员工 + * @param {number} employeeIdList + * @return {*} + */ + batchDeleteEmployee: (employeeIdList) => { + return postRequest('/employee/update/batch/delete', employeeIdList); + }, + /** + * @description: 批量调整员工部门 + * @return {*} + */ + batchUpdateDepartmentEmployee: (updateParam) => { + return postRequest('/employee/update/batch/department', updateParam); + }, + /** + * @description: 重置员工密码 + * @param {number} employeeId + * @return {*} + */ + resetPassword: (employeeId) => { + return getRequest(`/employee/update/password/reset/${employeeId}`); + }, + /** + * @description: 修改面面 + * @param {number} employeeId + * @return {*} + */ + updateEmployeePassword: (param) => { + return postRequest('/employee/update/password',param); + }, + /** + * @description: 更新员工禁用状态 + * @param {number} employeeId + * @return {*} + */ + updateDisabled: (employeeId) => { + return getRequest(`/employee/update/disabled/${employeeId}`); + }, + + // 查询员工-根据部门id + queryEmployeeByDeptId: (departmentId) => { + return getRequest(`/employee/query/dept/${departmentId}`); + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/api/system/home/home-api.js b/smart-admin-web/javascript-ant-design-vue3/src/api/system/home/home-api.js new file mode 100644 index 00000000..c7ced303 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/api/system/home/home-api.js @@ -0,0 +1,29 @@ +/* + * 首页api + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-03 21:59:39 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { getRequest } from '/@/lib/axios'; + +export const homeApi = { + /** + * @description: 首页-金额统计(业绩、收款、订单数等) @author 卓大 + * @param {*} + * @return {*} + */ + homeAmountStatistics: () => { + return getRequest('/home/amount/statistics'); + }, + /** + * @description: 首页-待办信息 @author 卓大 + * @param {*} + * @return {*} + */ + homeWaitHandle: () => { + return getRequest('home/wait/handle'); + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/api/system/login/login-api.js b/smart-admin-web/javascript-ant-design-vue3/src/api/system/login/login-api.js new file mode 100644 index 00000000..65b746a5 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/api/system/login/login-api.js @@ -0,0 +1,51 @@ +/* + * 登录 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-03 21:59:58 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { getRequest, postRequest } from '/@/lib/axios'; + +export const loginApi = { + /** + * 登录 @author 卓大 + * @param param + */ + login: (param) => { + return postRequest('/login', param); + }, + + /** + * 退出登录 @author 卓大 + * @param param + */ + logout: () => { + return getRequest('/login/logout'); + }, + + /** + * 获取验证码 @author 卓大 + * @param param + */ + getCaptcha: () => { + return getRequest('/login/getCaptcha'); + }, + + /** + * 获取登录信息 @author 卓大 + * @param param + */ + getLoginInfo: () => { + return getRequest('/login/getLoginInfo'); + }, + + /** + * 刷新用户信息(包含用户基础信息、权限信息等等) @author 卓大 + */ + refresh: () => { + return getRequest('/login/refresh'); + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/api/system/menu/menu-api.js b/smart-admin-web/javascript-ant-design-vue3/src/api/system/menu/menu-api.js new file mode 100644 index 00000000..221bf4a7 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/api/system/menu/menu-api.js @@ -0,0 +1,54 @@ +/* + * 菜单 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-03 22:00:32 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { getRequest, postRequest } from '/@/lib/axios'; + +export const menuApi = { + /** + * 添加菜单 + */ + addMenu: (param) => { + return postRequest('/menu/add', param); + }, + + /** + * 更新菜单 + */ + updateMenu: (param) => { + return postRequest('/menu/update', param); + }, + + /** + * 批量删除菜单 + */ + batchDeleteMenu: (menuIdList) => { + return getRequest(`/menu/batchDelete?menuIdList=${menuIdList}`); + }, + + /** + * 查询所有菜单列表 + */ + queryMenu: () => { + return getRequest('/menu/query'); + }, + + /** + * 查询菜单树 + */ + queryMenuTree: (onlyMenu) => { + return getRequest(`/menu/tree?onlyMenu=${onlyMenu}`); + }, + + /** + * 获取所有请求路径 + */ + getAuthUrl: () => { + return getRequest('/menu/auth/url'); + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/api/system/role-menu/role-menu-api.js b/smart-admin-web/javascript-ant-design-vue3/src/api/system/role-menu/role-menu-api.js new file mode 100644 index 00000000..38b912ab --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/api/system/role-menu/role-menu-api.js @@ -0,0 +1,28 @@ +/* + * 角色菜单 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-03 22:00:49 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { getRequest, postRequest } from '/@/lib/axios'; +export const roleMenuApi = { + /** + * @description: 获取角色关联菜单权限 + * @param {*} + * @return {*} + */ + getRoleSelectedMenu: (roleId) => { + return getRequest(`role/menu/getRoleSelectedMenu/${roleId}`); + }, + /** + * @description: 更新角色权限 + * @param {*} + * @return {*} + */ + updateRoleMenu: (data) => { + return postRequest('role/menu/updateRoleMenu', data); + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/api/system/role/role-api.js b/smart-admin-web/javascript-ant-design-vue3/src/api/system/role/role-api.js new file mode 100644 index 00000000..b57bca1a --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/api/system/role/role-api.js @@ -0,0 +1,110 @@ +/* + * 角色 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-03 22:00:41 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { getRequest, postRequest } from '/@/lib/axios'; + +export const roleApi = { + /** + * @description: 获取所有角色 + * @param {*} + * @return {*} + */ + queryAll: () => { + return getRequest('/role/getAll'); + }, + /** + * @description:添加角色 + * @param {*} + * @return {*} + */ + addRole: (data) => { + return postRequest('/role/add', data); + }, + /** + * @description:更新角色 + * @param {*} + * @return {*} + */ + updateRole: (data) => { + return postRequest('/role/update', data); + }, + /** + * @description: 删除角色 + * @param {number} roleId + * @return {*} + */ + deleteRole: (roleId) => { + return getRequest(`/role/delete/${roleId}`); + }, + /** + * @description: 批量设置某角色数据范围 + * @param {DataScopeBatchSetRoleDto} data + * @return {*} + */ + updateDataScope: (data) => { + return postRequest('/role/dataScope/updateRoleDataScopeList', data); + }, + /** + * @description: 获取当前系统所配置的所有数据范围 + * @param {*} + * @return {*} + */ + getDataScopeList: () => { + return getRequest('/dataScope/list'); + }, + /** + * @description: 获取某角色所设置的数据范围 + * @param {number} roleId + * @return {*} + */ + getDataScopeByRoleId: (roleId) => { + return getRequest(`/role/dataScope/getRoleDataScopeList/${roleId}`); + }, + /** + * @description: 获取角色成员-员工列表 + * @param {*} + * @return {*} + */ + queryRoleEmployee: (params) => { + return postRequest('/role/employee/queryEmployee', params); + }, + /** + * @description: 从角色成员列表中移除员工 + * @param {number} employeeId + * @param {number} roleId + * @return {*} + */ + deleteEmployeeRole: (employeeId, roleId) => { + return getRequest('/role/employee/removeEmployee?employeeId=' + employeeId + '&roleId=' + roleId); + }, + /** + * @description: 从角色成员列表中批量移除员工 + * @param {RoleEmployeeBatchDto} data + * @return {*} + */ + batchRemoveRoleEmployee: (data) => { + return postRequest('/role/employee/batchRemoveRoleEmployee', data); + }, + /** + * @description: 根据角色id获取角色员工列表(无分页) + * @param {*} + * @return {*} + */ + getRoleAllEmployee: (roleId) => { + return getRequest(`/role/employee/getAllEmployeeByRoleId/${roleId}`); + }, + /** + * @description: 角色成员列表中批量添加员工 + * @param data + * @return {*} + */ + batchAddRoleEmployee: (data) => { + return postRequest('/role/employee/batchAddRoleEmployee', data); + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/assets/images/1024lab/1024lab-gzh.jpg b/smart-admin-web/javascript-ant-design-vue3/src/assets/images/1024lab/1024lab-gzh.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d6b03f53c5696aa2c81fadc5b2c64454abc08155 GIT binary patch literal 27898 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 literal 0 HcmV?d00001 diff --git a/smart-admin-web/javascript-ant-design-vue3/src/assets/images/1024lab/zhuoda-wechat.jpg b/smart-admin-web/javascript-ant-design-vue3/src/assets/images/1024lab/zhuoda-wechat.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9e117782266009c7d2d5caaf5dd107277e0f96c8 GIT binary patch literal 42080 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

fWY{U}tgmvdg&t9NTnsBE9 zu2zYTfz>?-Y?FDCC=ia9=C-hU6yqB2y=4T`!JeT}edXq~hzG*D+TrLBqfFfV%hhLv zBHrQ6@3#qx6ud$_L0zUnCI(E`zJBZPMEzjL`rYAl!NVS#?%r8eziTPGRJ#!1u`OfpwWM=-9}%~`J@z|hPe|n68r=%FLEvY%_~I;} z0d`u)v{4;2He+u=Qe1S+>ZxL1AMVLm4z}oVw7c;*kDWFmFZgF}3E-tR=dn<*f(_>u zlsB`xNd_XGgo5b_F`bMC>*37D*fny3`>r=0EidE(&-@guNgAAaF=)c`rt&UIk%1vtvxufNLHAJ z5*!D~nkRJ!ePv{`hmEVh^P1Je@1gw*eD0z$P<#02)~#=O?)38ee(vgwlxM`mvKcFX zO3!nuPsym=#NZmPgS(N3ay?)$Mw&^d#*DOvjkEf3l;y}zD=woG#&5c+c6~O>YBjUT zxT<`x>-)&iMSMX}$v?w)<8pICa^40g%vNNF{{7gk(xrO&mzkE{;!IDu=XDGxwk==#xf5$X3l`-b5@0XL>~ zYUiuVd)_n72?z*93y|A?uTP>Z>$jGD`h4&{B{C|zYB8j7IWS8j#J{3eHlBxm27(9- zv|BNgs|(wfvns5VYuGxuoPx-^v>S@4;~hGCTb|n!QY=Q8w zj*F+OGd}ufe8j5wwBNW=SAI>k|Jaq!pYl`M>eiI|^tdPaRG@YVKx@fez~&eYnCv#F z7(KRS=FDJ9(&SO8W4Eh@Hy`Qi*;J#pWm98PGqT(@rD^v+p)!y~3pqdh_VBcx!=djT zDakJEH@R4urz@$O?j@Y%)*kYHf=@8`%=-HX6Zfxx%RlGC|2Z(XD?iA6sS*keosztm ztMn0_UBK~OI>NPg;2wqbpNIIyHJoP@WKdmxWqM71my_%#vx+_#S<}rwy^SMp2lp8K zrde@Xg$OUH0C-(z&ymV7O9gCKjyFVlA0ER*iul*z3*PY(7dl7WYwQzz(mi!mmycb2 zcWv7~)Nl?K=;N3KNQcT9<|SEa;*e~G;R03(202d|dyKtX{37gPRPMBwrO&%~XDQ{c zyAawpCZdss0szN#v+_o3iR+0AMTfBC{TBo4=4piIf1X7+40wL?Cn$&%wRbzM7sl=AGv5m^cEuOq;(Xt5>G(?KGG zo{5qlXrstg>;$b1$^gNPJD#6GvK?`}l_uO_`$f>{+rbM;H+Nd^L2pz7HWBE_(;!Zb zX@|JX6DdpsRcwwpT4kyZ7j{}Hv2q$2dMI(M)`<*Bm+-tNVf$@OR}G&Cv`1fFcWouGE}$S&U8Wf<-^cmO zMs=(p;8QGg{GXS%spyLMHphzECrquN0JXh#$qH@q+TNvPWvGkm05a>Z%%{jLl!S4Q z{7wfm=2Il=`Q(D<_VkMRB_D|!@col!dO8y~Cy0lxtXx8!S?MSYipFfhVQ1>QEmDs5 zwOo|sG#)Ol-_skcUfhsYaos(-M@v(#^JFi)=&S*!t_ar#I5vn*{eb$+g>3GsT)=?7Wu!e zVrw_(&3en%x&;BfbqvFF<%^6F*yo{0pv8)K$rUtc7kYV(^_%{)w3rqi?7+@lyV?7G zthpQ=@O|vkrIh#WyStCde`jsW;#DA7SCMVT{|cD=w}BLj=e;sH1|+|O-hT&VCbr_G zDNCIGN&f(5-yia_W8sop1F1Z4Viv%9y6QuXf9RO2P*`%D-hKl88*!@#h)v}Wc-S+W z>Swyk*@_b`tcrpF-++Ld5A%!bi#w6Mt^-$ZTTfJ-qiPNzQp`cJBG$~=p$Q75vFhA8 z@kU4ROQ!lCQZoxg%B*2*ZBYu^O%IFMi>q2(wpf}Pg3 zzOR76)9v^+U$}+zzV2{GZPh?=0PqlHE#I*ez5>37REBIN#;<3# zVjf&fS!-Jn1rVe9hRVir=_xy3U&;E<_nxU2eajG_)00P@f|CZXKp!S<0)IM5p_6ii zpxz>!8{0QN#6YR)O}Ssy-SZ7!-J`M{Yb!iTdba&^Q+Q;%`N2QN7&}6{Gy&Y1f9jw` zaGn_y*h2shep!nyWp+2M9L-C|h=bmj>0wIsXE>PmoIvk0NT8J)EbFq?n8%5o1ZDqB z3IgZw4$2Te^e6IaB73QXS?l&Z{nv*dhjSmD2=2vq{x|u_Ts5pl1Usn$JqHhK=f%Uj zXIA1eFCHd6FbUGQcwI@dz^!;m-%p41{!6o#O#E;CH;2>(v>GE^VO6k<&3B)skR#$zmXmx&Ou;OY%=CTuJ zLE2F2_;0lTyxuLQfW;qee^QiDrfHm1wlUq4{t(@>E9 z+lg)3`*y_dkNEz5t)y>*qAJD<-oz_!+I|rtGc#K$;?PXHi;K+se$2wz`fh~}c6$q@ z+XO2t`>W5CM9gEpP+>(|&N|cwp4S1soC=?UR9PZSr3ZLJH3xC98uvMvY z9+M6`+vCpZey*RShi+3FnX!eB&vUO5zIrp(_;NA;1s+1r!oW(|oc6|{fLA2WeJJ{C z?;h>wDQZk^G$FR1l23$g1}z1Fs_$=rDFlsJS2tW0+P<*9--L+RYzAJ4~zOwn5Q2LnOt;N{o4cTnLQm&Bh6Ik{DTyK`rWQOmv z68MUjgWXtpU$Ujrm?>Lz9s#Zc`$9-RaFem3fSqvviQ867@f2}1tklN&g#3MzCLKkX zSwQi3M572OrZi=Ah93rqzNr9V!B8$s+;o(;Bw=jINOW8s{hvj%7hb0ZG&U?z9=EIGZ#oj?XX9z|ct09Db`i$w> zzMHpx%o6pFRoht<+`SW(P6}@8{rHQ}MC@tH?ua&+=3z~LcT7gD4A(^V$u6VrmQ{NA z+bvyFttv<dkQ}XO|FtXFzCm(Kbq9 zAYxo9+gv1}TY1yZbCwo{!ktC?Ux~~nE-yD(0m(bZ7w7lTD)2;Bb;q=JeFghO(Pi0Z zMV{EhddtG1Rs%*Ur7NFv%x<{2L_M%^tqZq3Rn6iPecz3L$SWajy4Wm#vp^;8Qe?oU z1_UP=-0>4QWnKZwFF=)9opgZbiI(vrTr)G}j7&Skmve%j;fECa-2*ql$=T^gtLTQ9 zf5IeLKjn5d+X%)cIwlUSrY+Dy`>NW$rR>^uY~9(pw(?s=c2alO+sexFhwpOy-2IOw zie2-%DGuEC876E?`>6e*AsQ6gIe(mUw$dYFqKrFT)lbzDekTX3>sk!b< zX{Z4?;LhlnR?UkYuTt;nzWnf(MV_VcrP}BC;@I%w)M^ylE=!ZiwCvIne<&HsvIIU^_fENvrbR*r&Y{}td6cq#ntz05wKskh?v=p>m* zx2|{g@BO~ko#K39*LU7-573v@AhqridI{DA3`vW&6#{&o55TD-Ito$J9{Kmi*?%ZY zjgCcCs$@-jionmlu^H++L@}-&*pN6r75PVG!w|$-lHlVJXjr|Q8v$SDJ-CC4zKz=n z#W4|rT};2#)j=S3I&QtJdv|Dhc)H!#kFI2I)xOHR6j&vWi@}}d0W(BU2cX&f6ce%< zcAU^I{?c@O&H1U_UeoS;zy7`U(feP|rj{=Jh(;Zv1fd~4LZ<#6aQcwXD^BKcn29!gslkI%b@-@k~dP+HPwc~hr% zW=sdkgikb&?`!;ECwz2U&cZ^g^6Z}2IH#YZLa&&V3=CxMHp3Tx%`W8EUPrBa4HQxv zK&o+b8LzNO5r_I_smGu_%CP|Cm5fF!N!`<>RdvS`KM#uz@A5)tZg*5T7yJV7CyY1B z3*P(R)X~gm)v`x>eolX+oE#F!S?w>mI%9 zQ*C^Hy}i{eE-|e}@3oe&FT0+ZUY%If5b@r2<~n=?k*MT5;e6>r28`4Xjfe@FCKQgP z(AuiiyeJ<)#?zZ)0X^q}s=FnOVW1NEh(TD6sc*wn|5+U5jq^5g@LvynE_=$oh1bQ}2c*JecY73Pq5Ba@HYKgLXT8+JZpfHLb_`Bw$>Y=GG z!CCw>6^L9ft^td-GE4qfK!fbUi$l>LV*ptbhU1)KPy5<#wUa+X3l2I*qvZwvL9zmgZG>dLF1Uf!@WE23;1$ks5GQByt|TY` zKJQI1eY$j@`>j$|^;R$KlhP$C%!x<0FnCbhCX}T&z2hrG1H^y%TrYFTy&a@_<_=&Ij86&rJ=p{j6=G3uA^-ep%;?F~=jdmN`!$YvO5JXaM(GmhUxLQ00xTGSk>V3y z2WR|b`r6=~6CX8nS&S1`W@$mcn!X_q{td2v=X&@!zMs&x4+atOn-Gw3l?H`+cHPgy zIRXe-wo{fLskIB$JG^n5O`w6V`s*z6W^ma?G%)o>@msI@=sKubh++xl)hSJf zfFe*rT~kLiR~Iw61X#)PNMV*sIaecz?e8*XW26 zS}Uodx*fdi+8R)W2?~d{PJ$^ zj{~i)6z!pxFJI;?@FQiMvR+*BDM!718N@VON&wJPC5)5_DJACs+qYeEpHOhIzlIR2 z@ke9sKlcM1C1U!A=bp5ar@gj5=3mg%;I<&k%vvdcVnri?dkXSb7~HA&@uELp!#wb{ zaaY{=lO_9JhkBjaqIF1H;u>WyiatP_ATm%(23&ji{4icWe8!Gtm01jVO@HZ(Tzy*H z(|xDJF;q`2u4}Fm(B!JA(i^dS@icZ4gOY^0>TW?wsnczn+B4@c5(Hbdn)CAjobr7rIYnwyigOp5DnK zWxiXW?4uou;V;a)q88?o#gv5UnNId6pe0@Qm2mzlJ_4M`UO0m50Q*7&AmqaQev}w~ zI}QcqG4zc6-r&$~`XzsOw}(wcmc}dW4MRhl|CT0P_P82z$(ZLr4lnPdNpvN2;6;W@ z-V*snPoGj;(4n5+UuJMbZkm6~J-ue)Ym z;t%7Ms)^5V*9HiEg7n_Yy?-V+7Yie}CoVMB1lZfLePftSL0YE=an7%M-?@37X?`$h zr?aUvF!i%{Sj)Jiz%_iolLOmy#tuT~8m6@)WnUJ}j&%)Gr2Fu{HWH4z**!EmG4Go! z!6^I-UM_}%AHrKfDZro^vDZ>y3uL>25QMyACC3_KB>uKbI9EFGR%Xk?2M+9pc)O>! zt)Hn$Fez`)qoHl>cy+dKn@6Mr3(nb#NgP+qj{;G*`Tgjrf7a7uk0>;y%j;EYR?FFk zKUCQyGDgyh*oVIWg7$L4WzZmwtPW~L$EpxoQJb(D=5;JSxnR=YarA)A(nIb2dv8ok z-A%u2m=hmuxyF|i;uYTsFyNR$K!u6xGD9#-Nk0{%j);5@YDmy_4=ZWw@Ghq#!W!Y^R0Dk|MwgJoBkDaA!fu4^MCag*z> zwoAN}yY+rn5{Kv|n~k&kTtL|(!+V^}xMmaw_uO2;c}ARc}6r~VDi#N&oj zxT4bcT0Hc7K!LN;Mku3Eks^zx>lsAW9J4C({lzC&>dU_x(6e?N5iTsc5`RQ1_G=ao z6ar#T-$AEj5n%Zl&orh9spH@QG~~LT*gCD1$P2)MZk%~&tFNlr@>Ftg^2lN)e9VBW z1Q<7(!_D}-DFQp|4{+n+Xf(L zGa2eAyl!5VT|Do4>pK4Ua$NtViQa0PfuX8T_Y1Gw6A_6KB|rIt8M9#KKRgiWU~>lY zWec4hSQT|*4*!^FtG?Y9EEoOhpG9SfB2mqlBO*H*_>^iAq}>CmKrwFk-a{*_|EHbl zC}^#~#Cd8CEg#?_9+D7b@~T+>`0zNb-Q~7Ju-?aGDKb}gzI+z9RZ#n}h{-=DFlbjj zM4`vgDyv(O&@R_zf?{|YJuIn$Bn5dhbrV(toYq~d4970E6ijpZsWVoBV&#Is(5p7Cz3^TmL< z6>$zn^TqnOn}CKkeh*4QN{I#yikaQ}@&iiRunHsNCgO#qRi+OUmz4zX{&GDa$lK#N zX?w-@z^}kx3>z))v}hyjF9Zh!_OVG6Ur?hXG-I~m`%sb-)Fig}Ong!ZogkUwdd%H@ z`}+k$lj52jN4QLo>V^9QA6-Yj0Lw?Syq;1+ExQJDOM7%dMH=6 zF>!j_*1Ww(K;rBv`NskWmoc$?4e%&W_&hKzxx-5ozg~CdTmtUOJAU79-FDT+Ed$50 zh6B9x_a{*+A6-k&FirK^rB<-jO%`!V0K#zS;LEoF?4u9Tr7ew=z%Ed9lQ3p06l(7l z2turo^5Ed?qzB706Uq<6@V}1tSxV&G!Z;FI(k8)C*);6}I8gIUfZTRb06kk&zSJWY z36?MCNU#%Hrpy?K2bOw~Ol*o(_^L(mZPoY1{N6~(t}P}H?Iw5VwQSpqxS@=qchUZy z4C_F0b%F0V{~7p%?@qy%U|I1fdNct^0f?mPAu{MlxCQC)Wkzv&-fv5XLSp?6Ae{pB;!}?R z(J;dIBFpoaK2wBor$Dr-)HyB0qQaW%AqFzONuDdp)=df7RZ(oQT)r&;o|jUJj6OxK5t+xlp|C~rm!k=@B;ZrRyWN5D z9BD;<6j?U$8m$;*jOYVl}KRYK8~d3w6|z?*ND*(iiC{Xx|E~Cdi;cdv#mTLXfL1ge?x=G1F@P zy{>$6df}U=ertoIVsn9t^byVPbN7JA(_<+t3>rj%>U@Rpe+Am=`r4wfRJrgzm#RVU ztZtV_y#X1!E*j-p2HI)QX?_*?xwgy(2e}pBM_`>njBCs>i0#2MaqOMNDNR6n#_k$T zxj)Mney8?1|DcGL+TE;m632~~+hE4MjPLW5g|ZolWkCi>#jWIZKCce3W9GB=`|0Nv z?wahhRr1UPU)%(Up=v)^SOKZ3W2GZSw{?v#Q&In|sDiS@?QXA6RoQ$QbN55C+8-*J z!8-v6-ds^YUdQGpT2p=bd^>9mgDYTx=kcG{06=IvL{P=qfsi{UAOvUr3W_?0@-svF zBF$c|ndQ`cu?QtsQEv2&i?>k9NK2F%^aGT1ai9ULz{nP|Dh-g#nzm#a@AVPhd$j8b zU17s_mc?%e_co8e58BO+^@Nr~*x7Ai!&WlGftC?Esfzb3Z%;b{)AEMD?kgTt%I3AgFR{cgRCKLZueS^FPfPK>Ea^q=XA zKD2idWQ<;I+9{HUKLH-Lfkqrh%M)7mPy)1}f)B9ESDg2?I)xvPZs;Gl5U_LVP;$a_ z|Hsz9QHEcz^JHjmAFSwY3sk_NaI@ySUn=Py&QwE)$@%&DU{U3+rIgqAv~Kr!AVXJ- zw{7c`6u<#5Rb(f4j%3pzLW?uSk0t<-88`5V0Aw3p$=qRVXw}=-ASdug=B%TtPiWom zoZ3I+xf#wPFQFj-DBGXBx0UEPiuA@vA;zw6%f%%nsIs5ELrq(4+*kM+mryv_~LI;eEy|i)(W*=BiYVm#91Ta&q(;J@8Wr zq%EuDM5OuwR6-qQjKJ8=R;&+VOrXsJ9!GtMjH`C&i@pDQn@?%;oC0?OT+Typf#zVH z^w`?R@fhOEVfm&*Rs!u!BDEvSCN)LNs}FD3J{}PhKh~>K>(OFwC@`b*p5F@?zEH^x zlH60_Ld*&H2CKKXgvboA=vdA-NSM2@^JK}}`uz#NKW>YgsNdFi@D<{5AFRB{y&St{ z1zv%1iUxZ%0vd;IE=aENB_Be|QCu7R0A*}9Yt7@^JJw+`ydzB4waGkX@Z;3+Ivuyx zj#;<9%&C^q{b5(}46uzSP&XDqS&F>mJrk6CH$FCmiA4#w1surosr)=)A2R3Bc0(XF zJ%-++`kHZTnxbK~gHNkMvO=5UkV{ksQgRAb8iXzOL$NxIMN=iE66_1{6{dv}_HtXi z-xrGPwU&{Iag!EYf4Gs)2PfSL16Wi{$%2MaH3XarF=y00@A5RK0PoZ8+mqfNOzLhY z*7Fb34s}|2Hg4Q3`f4el?aOZ?adi|4>mftfRd>E9sC)?oE4dABm^N@ zcK1P&MwraY3jVL=cQR8=O@&A20W1h>WedLtRfYlw8()nSYH%p>z#V2i%4F06nn^Wj zYShk`FI;|{eYffSrB1g^b^&?AJ8AFFbDDmpCb?;?NVaw zBSyW3g3b;5jFeoi8@$#OR`*0yGYp|;EI2#SZW(9MZsxwWavOyg>wqXFB41%Xcp;;zs~twsZT*X0@y8o^%y{0?HpSUT7khy1-kpd0BW(++E0( z&coV3>8v2@Ms|K&&>UNGcFENI<$Z%-td`Az6txd!o%eI^rAN02%UL5OfcRad&_|JR z1eOC4Oae)6+8^%A)NMydV?9-C242Tdo$U>=yK0+a#;PN3>D?@Qvj6VA@sB`g{x2U8 zq#A|Cz+&Ixz!t|W<3~MJc_7&F(~oojB_D*wk;vep`7C^TQ0^ppXG&4^a7SRk&`yVH zMYiF1^M0p%%~Xsnp~VB`ix2~As`ytx2xrEQsK$;FgF02kieCMgpso-vG`D66-uNnZ|OSvTq$BZ8KRm z^Qd9naNR#2;Fmiw8liX7%P9VrW7yT!XHzdO&lHe{(2$uDm`=w%2v%~OLeHu8L_q}% zeeVnGV^;ep{VqR7JnPHQ4tlOFn+eW6@w%k_p|&UYrpPABJMw)`oorAcPlXMN{7b3tCUG{b zxV&ZN#oJZIkyjrv505cUC#aTx^)-RP3%2-xt3edSQ$bq+CJ7^n+w6VoUAS#)RS68hClXn8^qy4BaQ z0xI)sD`-F?d;nl?NzJr%J(?nFWt#M_K&Kw(*$byYdBKel3et8kP)2VW+1`BK{D#X- z0lJD#?}M~xG2jo6k&0GoP-IKaZnkZrKJ1h0;cw=&cvOI8>Acrp?(^|&n!jJXNaR(4 z8~qYR&jZD03jH~yyt)k~gWEn*bVuL0Jx7~_rbHI+6JO2RT;-=={oKukrnc4WP&iB5ua@&v@b@yom&UR# zCqi0;rQhJab1~~ir(p0Ju@Mx&A6xDU%d7ImDDQB`q1Oy`Z#T9F^?`}1SYSXUxBI~L zD?T#BeY)b!hpoH%Ou*Ndi-9Vv=K+r1r<6)xpqzZsF-?2=fwmN)4RN z`SMNSf@A)3l?$T#XvU?Mp!*C0G)fJiyEcEOshnjBj3T)$@-U(!3+8XG8Pp$NTfTX5 zahpMm$c85Tx833(egN|RPEc?q!TFi_7Q1-k zz{KARaZO!4hPm0HJ=E_$hlF0Z4r0JI(I+TlsE#Ty(5WzjUL4WjSFkf7@#nsg_Udj` ze<`gxKVdJ2*Qaw|zPc=Bn7G;p9dzfPrEskYqjjY9^MEZL$e6Gh*rz9aUEp950*^uN zOo{-6XuE3>j$d;%yKC=}O)`>`KF|AJRF8fZ+3l0JF()-Lo42+C&eIFm`Mddj+4kJyL-)>tfE#1?=m+P7yL~rMLolKr8mk_({Y(ao(FRTF;FNPvURA z!W9I1ZZ5IHL#b`OvzGAwVwX=|1jQ#M;Ad`}=x^ohooD6JMh=_1GHI~thUvHrZCFG@ zUIu5ULhYlUy3=DhBa{}lO-A8EI zjKaPQ=J@flLV8iHC{b9;&-cAw*0tApErpXdCQD)=H#?cLo-R`dO04%DjS*-Dj(GL5 z2Z$+CU?i`Y;zv@)p@*Ax;p_)O&>GmVi?dUCS#Ez7`_bD|pB(<0F)r5Jr3*TI#HN9U zm?Np;HKuz3cZ&|>YSI+HoZq2MB-Hk6%@!QYR^EOBI~NDex0Dc&40PoY7Hx*1ZvjXn zFfXz?3r*__r!bfHW0SgaBHVVJ^?2yrOuvoZ6pgxt-!K%Rmf(OzgyA#&1n-pxIS3XY z+)`%0oE~r4dal&{;Dn=%XpU`?{?4rJlL@n-ol>Gakn4!q@N#NNK!bouUKM$3 z?R}!q8dXDQuu^i%OxucI(a!hxyt1$n_ObH*6Zfjm9_rjS@|z3Z{~HOK7HKA|^9TQT zm-$y$SnWBNfI9+{zB@Gwd8mq|rcW?9{h^b1GyC457T z1hi^jNuZ#Epqk)1LxQwQvRN5~&5&&?eh*4IZ|H4<%ETo^dDP{A`Q8|(;BO)VC%AUmy{B-6D0x;ZV0apnBu^iNuvS7kZ~N7DcDSiXG8C%nge zA%H+3J!&wf6QnOdX)Sjv|= z-VYbvgHb~1G4)KF^f z)q5A(ue_8m-PXNp;W)vZ#_GgWVtBH|aRfN(6yW-#0D_$*pSf*XFI;~ugX^*t9LibL zb;=lxFD}DQYvFH(M%cQoc!h7XV6Iy3eAW_&6Pj}^<%-_lTZI80{T8(Xw|l4sChPY$ z?mrIHWLhbZ4lU)t$^$-Id)L)jMj)#lfpeptxdTI9X2Ou%}g)-7ZU z1@!sM^oJvK? z9s{;vNhPseo9ig?IJ>+tYz}f{dFQ~Yy7{l|`i;vCADm9+I=AWV){GrgVPha&r4}9v zBne_7;LYVDmU_NE#TURpzduTx_4tgBQxjjZeCoQ?-Y=+Yy9gV7ln~X7K91sVZDjD= zI|!`P#Brh1UvGry+q(~1As1aZidi@VlcAnvpIyfuN-O#9wH7?0oh6V>C&O||oCw|v zE3Hwet(ma7Nex1En4e9*u^M1-EPi}p)K2xdPM5-MvlBn_)z3dz!GQ7v>n<16a%Wi; zgrVca*cQMu8nC)CJ!{Jlzn7rF2T??e7hZV*lqm@8*rTke#+GSjUf^h9sn8JcCI0i_ZKF@^!%uDUTe<2(5A%AWa^62DZ>!-?JM^S6|5 zo{Ha9OLdCvuOUGPvpM(KR9LngI7pR{FV_?*_k@rv&P;2l`DBwi%V%cZ{7&Y8L$F%4 z&b9{_lm2b#*~&Xi)Z+-pDVy;7VST7JprDII?XVJHTbdfEEJ!j^PW7(_jKywie>e4P zx2EaT=ocxAk>6Ax#@G1(@Tq78SPGqQgpfAl_CpV6BsEY%epS6uZ^8qApRJND?qGl^ zcqy4TC32I$Uj-RPWJg~TXzW~LD*=Y26fp7*%I{DaD9T)amv?(a$@Rwj(t$$PD%`=9MFzXfzFEI>p|s=uzPsT@Gytk>ft*`#f4CF&+>OCg95eB)l}79&C)Tf zJ1F%kJ>;;c3D~p_q6lQ`$|K<%KFnXlBTaQ(T9<6}_=tp* zsAi(TZvwQ}wVfc1+X0^Bfx83fY(i4(+opGXg|#BW@)um>DwJHD_rPT*7GsJmq;Ko7 z=J=A&!Oy1SzalF}V1D|slEoyOEnhK++?`ww*IEv!$DxRiCNmtOT&l@-^Mh<#*; z5dqSs#y2zt)rifsd0&neV(6s%)HXqRR&5dG|rnQ-kT;xC@_dfQqcbD!`4X4 zKm3p_Nqs!rxv&j>QeXNp|Fi46gCJOAQd)x~;5!hQKVsi`Q6rNXB(Zo))ZkC=i7DU8 z2J4oXIx`8gJvov0Fw{;WR|0Uoufg(x6YZG<5vyJEeB}YY_P#u;eAIn1qqMTz0o~&_ z?ebv9(bAaNuC4O2CpS@wF~a;Qq%eMG_y_7y)?BAS9A0z8#Llu%ALYRIi5nW4p;wJE zA36ODjk)>i#ir{*zW^;CNXx|Bgg5gt2=q*&a1x`h6_GG4##VxN*7@XfGKg<&uy?kH zkZ_TMLX{tljAQQs0P-^7Jc$+V3%}-p?#s}A!XMQ{{<(jI)?GH-4nR`c*wXOtwyB)Eh%d~o7>}!LC>CZ%vomA-yuEULw6A>4f~UZ{-R2((AK`DU=SD1IfTQe( zk;4+yEd}!+qcuQ#fMma%SXd9KdaW?@)X<~ID8tdn_Lh-Ir}cAcFy_Tw;*t&5$-nCM z_!PVy;spnp$sPylDa^Lz%hqQfBLsfWpQ|8_3UQvYR=<(ZkS@Ek^O{GzJwaq4)zI_c z=T@nMYLUQg!E(*;?I=-#_e6?UP#i_F0ZA9LwEkFXu}ynDfFIX~jXpV<2)f>Rw1f`z zLhDcpK#jg1M6fY#{9dgfxW7+=1m|5G`5guHh6uh7BaOnYKzf-SK@U)34dOEfKx>XD z**ciDH_3hr3@JuBUcVE$OGkQYLaR+T^T6#B+-=L@Q)iSxiICvjni?oxZ=Eu|HMjn)C$E=TgIE^2=l4^e?_1p6cXkl5z77BS!M->DL0(uXA zBpms6B}>UQrN49M^|3QYg!dg0-XuDoIR4*^raO71gg{~(<|Crb1J#LCYPf)i#hHEZ zFL-lty4xo>w9M1e_;hMO^`jG)s6obomzBPE-nK@8EJ3?H2_yn}N-284_vK+gZBg$B z2|9e*n=kfXT}dX1um#x8i-5%6YA?v|&9EnM21AyJccg@Tw8|4Gp3fZY=Flo5P8jSF zv+-Vf5;#?@nx^P(Er~9PaA?f5` zz<5Z!ZkCe<_D*s@ihAvpmkn3h8$idFCDbpXK^%qS2;z!?03P0r(DDJOL)B*J9BQ8G zu?Tv^lj?XNdlx%OnAO0D6PDfpU+vw*y1;J?WcZ2DQO$dcTH5&vbiWm@^O)q>Fur6p zIE^uQJNUGPESN*Y_GJU=#bo}$h5_9HkfG8TDE^tQIJPeXy}$dGV*lyxWTBk9u78dL z?_$HnB8CIb{1mQLFBo4ql=-j%@Q$?<_PwdNxSZ=U;(2GcT&cKxSxKwTCH1i{;p)vO zu&2;L5O(V)P*=DT7lGRDrxf%>dm~w=f;JPzbiq{{und90|5~WXU)cyEg|jhIdmyA3 z{}J8~UaXvQ4Yh^ep`i{1hrPmG3BaCW9j}i6k)k~(xVH6GgtBAsLXSuzz6{i$QJ4P} z0Ha@z^-aXuLVvkuA@ex~8nB_BY3wKCY(gRe-cvXCPU`4|_n1049HMO(PgNE=q%DR0 zox~T*38f5wyIo_K8RT6is(TuaPH%Cd~L- z!N_~Q)LBR&g1ZM61l%qOY_0ap{n(6Zyh&LCx?fRMxuH8 zDRwUkX^PMM?b89lD zHI=Sg#+-=^BM%2bM$*0qfKt9J4@5oW8!|FSu zqvXy#FTN%qoBg)xYM|(>TjDzRGv*ZE5Jhi7{d$fVSLJusQvO`JBghNJ59Vl>u``zr zu~pp$eBF!9&a?LAM_~6my}6$IG5y;|Ypp#;TEH#nGJ{nIje)E8-^7v>FPuKuwp08s zC?$|hPcftC5MRL;z+C72Hp6g@&yg=xK3ga>)l@1v*4H%nx*dBYb~!HQdz^0KUwh7V zuznHP4}9vtp{$i->XLlRbroT@avqz#M zz6c8Ngn>A>Qf3kTgwf?Z!arsvFpb}dVx1wTAX#UNeLV+2V~56KXLXKpjOxoX2ZNUN zC5vvC@4eyBUK-!!vh7mNA@ZcbL@l1L-oTbHOKiTyo%{)NEWgxy=LV}BiRSDn@AAvx4E1V8xv+Z4=mjw{wY$f|$<`rKr zOVs;G4|7Y|o|PYB0nDwUAuYncb_o&qlJ2~F{C(hhq6j{ShgRxP3%#4Xc@gB6TpdfR zvpB>5OdjDJ^qy7`yXyE`OF|Z*uE#FtOLc(Jfup#iARlb?5NM=-^w!6O6yP*M%P0lh z@&_1>$T!rVsm%feTNLZK7BISmrCGrI0w}2f>)KWF_iWC7FBJU)O{|XqU0grX$Lriq zUfh@y_piV%BJTxd$r^Z+&-MQ9a?P6Os) z6@EYacuDrYV*ONE_O=eQ&Xdb5n1=K*NOabMh{W#_Wr-yaaW|=g`#hxEJ11?0hzVUWWuuD9Oe*T z3qCn)rRJ})8A!*tSz%v(1CdsLNDGXj>qXK3Is;7k%2FSo z@weIu7~<}H;794Li-T{@625!zK(x6CSee$P(lJ>S*6BV-Q>n8L+B4T8=?lz)WC$VQ zE8CK`P2IDxvGo?2i_%O~UuQWavOhw2>< z=q9W|B2u|&8%}$$;XG@EIg(_8Q4U96B)SX~XS()>h<61p{mj^1B7434ql4=GRGH=* zMg^ac%J^wysVe}m80))uRJI!gGTY4yRYW#9JZRz+spZ@c`oz4va> zCr{JyQw3VW_xhtzH}8FVLovV$5?aPdpz&LYJ<@`bf>8`gvg2Zo<;ardq5Q+s553hZ z!jv)%C))c#-=JIDr@X{M=~oQ9X4Lz0|23is1R_ASd?0+@i~C=#U3)l`>(?Gp6UCH6 za%w7~2%BP3GL#%@3l&04rIN%X6*5c_DP*hNR!$QYLMEqdl5sA{A%|>3X2zr`hs;pp z)y%wo%f7zr`yIaD_uu!2%XqKLJJ0jH&$HJ3u63_cY9{f3Mr&|7+>?UnIUK3)wa^fXZS;hfXt=f3?C5ha(fds?P>LXr8N*YV;Ng*-_UM5eHc7N0Jq*pN zyey7=fcw0A0X1+ch9tX2hNC+O?L3E49;(#8txcLZgQNE|kj*4)NcT+1Lj^@~iu z*aab@c7{Z>4!}rv95s-|Kg^i7h4h#<9NZyaIJdF|((?sy+e5^$ZTNqZuPy-j>VHEr zfV>(C@iUpYIMR1+3H3|vSH>ecqE8kpW&jb|ofT_^=M$T?!dlf8(l{T^20ot+zdXv+ zxS_kkX{pDSCjH5wEt-q5YeT{1r_+%2dg2wqP@-kRNlBL$xl8@VrL;*fPXQ!_P}Ggw~JNQnZuq#1RG|ljTh=RRP_@%8i!jx zuZa4cS>X{eC^Q}M&zOz4$9!@A49fI1s(}ewUnJu`6Uz&mxD&>=y1S?)Rm~>}J)Vwv zW%k%XryJ#R#Z_g~in6l$_Y7h*X6#Y9AUIE(K)*}HS(sFXWNwRNIhxq_}tQP}}{h>#o%MO0}(p4hsjUL#y!M|Aj2%svriZ(8h774T+HdtLIUj z>QnzR=IXuouZ3K1OQ;%N{oz)~osYgUz-`nWA-t<_B@9w4ryrEf-Xzb|wy6+;UUw4w z)zn%}dVI?gt%b$UC6;&HvXX}&ULq!GuVZf9zbDhao#f<8Zir+$>@$$6-zc<#|!1{y6u{8ytyi7a%K@B9WvXp;} zkPi!%WE2GmO@;!WIh$qJTaFSo9Q#9WSed{33eM%S3$`BOwUKG!bZi4zq#4Zkc4It6 ztcLxG(e3(&x@B#z&=mPzL~R&G4d2(PqTTOn!mfNXz9tMD&C=y@m^<%&=y=;{cwaB@ z(+j&4KgC7se>tnw96~AvSV~27a7|r^4)Lnk=K;l1fK4_N5!FaG1wK^?C5ESNtF2Fd z=&Ba8)LMqH2(f=|zWq<^{IkR1Mg zT?`Q5hg>YAE>9idJ&x`lm|d_Hi%nrwOHg8T3!~~)3j|{{_{0XuK5M?!pFe_0Wf(_~o#vmDuJ-<-Hk)s|3)kBFK|8 z8P7f<$#2(={)sUTTg`ew7Wk)2Vi0gISShg&JR^?yIDqQO9Kr5JNDG<4XYR=^;hL%^ z;a;6WmS@FPw-SQ4W5`8IeNm2UT3qY0kjxcQTwvzX#d%AJBE^ejiQEVygvfplooNsv zJK0y3zoasR|CO4M$Ss;^U$^`+yQi+@qYnAc(yEMTApJFR)p(CXS$rqxVooA9%#ai02?Oe;Mg#mUHuX1~k1*wcpa))v?$_~|x5)WV?^UyS4)3nThwHvxWRm>iawabca~uwaGJ{P&2fvR;FGU!w z=fuP`&Um>TAJ8yIH@5~z}dH|1D?Q;Tgzibf{2GQX9};Zk;F z9Q>`K2I-F;FS?P>c08Z&|HQE7hgaUEY_O@^R-8V3&Ex$~X#w+Pw9UYrtDsz{g&0D4V3~a6D4`J_Z)G)L806lnwYxc5wXEMLx5^{z zu)F8zsg?1!?c@}sE^TWwgDu&VM?6XWVNSb3MabW1C=t z6hk$`^Uqut=Sy=uB;gaZAE#f?Cvq97P^fGRdntxZ+4K`bmj_!gw*D)l~VoJ1Ks<4QA4&Vb?NCJe&K%he+D`ky+@cf!KZHb=S4kRpEq~uH|~Z+#eP61 zJ88lKEV|#D%R@Egy?Nv8qdTDQmM~-Ih<@ zZJL>cZSt|h>L`2*JDJ8mKw}z@0z4wJiPtGkf?2M8LM^d4ysne^6Z31IIPi(jAj|e` znEmDhzq)qMxyz_az?a3+qPHULLU30xjz~sxwzPnJqgH9uAS%)^-teGxAFr3}XJ0M% zxqR0f&f#;Q+8&#ZnIrv0Ucl5lVV`fKK&e73n{{OjYTic;AagA{wN65K=atf8mu_rAZhAUlk158P|tmHNhyd8>%d0BO;#cVy?+5h{`+tb>+$` z9~%QB<;o3 zpEpM~7ZwaDpRT}s?%Xw^5l)FLe5JXx%2YqMfF@Un!6?8`A+8al3eVG?dYTG0 zf$z?^I-())e??8o-pK#@l)ja~^ey5#?G?Te63c%bIvMYHU+cV7(;`zT&~mIM@z3L? zN(DQFa8P5;RRN(0NrmqJErR{D{AJvHFBbGUdZTNqmlmp-I$IhslzMAv2c-eb??TMd zGnz;e|68OkCJn5U58Hj{xb8RqY2O5l#jJZYx-sW@E5OH zUJS~sgI2!TW<79bDZ?JkFlIlVIL#O^TD_M&`umY??6-ppp(`zz&ZcJzy)}+TDgDGa zb$fg-|NHt4xL*2C*IlsR;9fEZps}tF(H}2bv6Uv#-HSR>{qXa9>5Wv8{ttUJi&M;6 z0*o{Up!DmYU0qA$u$ad>nw|eESN3OPa7TdaE7Q0|DN9E9Z zD+QSA7RD)wu`Qo|V>61Os8kM2Jt*&c(8uB1WoUi$*!yICXIVnnjonuo8a}+p1cj#S zsDh6gEGeE64rWwq3wQ;gnfOvVDn#`uoA`{@=|!Y)QfszGcdZX6>(KgH%s8;ro+&aNi!yBFaG-!hb~#>M*nQeph0~6xjAWN zbgz8neRo#V+Gm=Jyxr=%7{pZi=Z%`((w^wSm@TAsV2bWQ6^IbIUyP1`p|-?vNQv(P zphY${<>CjN1H`JYIq%72dU>BwYFZwB;*X@S?ps}}2k&up?xd3t3oI(9BA8=4i&uF7 zXRuaDz!;s56>rJ2&&}AWZ7Yb+$^VNvpKh2`7ICgcKQ}n_Lno$vi&C4}yvOLY>KWFG zTDQVLrtnEYpx39$FhlfV0cm(=OTVPK#Mkk0YFmI#*zvb-9d&L)0$nujdUelM^T>k* znB1Ei7k;E?7{F|jWYRx(HT4Z>qz;6CXPnLVW`DM}1RgCv$Oc zZ@246Y1@3bcV$PqWB}aY1CXR|=T3_iotsBA`1orSXD)f=k%=FNN&_x0xoh<}a{Y$a z{vpftJKYYQ$ULf0`9llZ&j2cKpixU-wLk@3hOiK+q6)M*&dv1eLiPMOLw0$Mz&PHx z;$HA$?`A)BOTqf`INoU;uHJ*9g{1yugdkLy0a{h^z7%uBL!dpXl6{xc{uepe(hSsw zy$l@H$M!x-AuC-wF11!s!Gg}x2X>pTdt0{h2E=&KQ&0A#Ut<8FNS{MaM5 zc{Ci5mZ(vq9J>57z4C?mFXuu?2}HiPF`|c?!a=R4+zUZ(bF>PwOpxE4y{2F6yj8e8 zFO8kNf2LEoGl9^u`JD1a9sGSqtcv8Ut2MqAHwmCrrbdz{HWM8XoAp)V2fMf}w`loD z(Z1@M>OZ0MLepKaVffdtlSdm13v}+(W71J57pP$=h<7j4dT0xpnxd7vFVdC66WzOS zFViw`DE;GyQ0QD~eW_*n-cBASbED;=%hDt-__}7iczdJ}yzIk&-qPiGzCU>~7AgY# zkPbm3Z`7lamB7LURYs}qyV*)sM9$1P-V*dg#!P4&vAa6Bd(*n}*6SG&pf$<3heIri zgiDYq!5k_#&+Sq~RN1taF7@zB6Z_tc#=3RaY88x|Z>c%FtK`YnU&>6}7w?yCkXd7+ zA|bxB##_MiU016FUHrfX`%)GZkrTc}9c=m`OkpRRcDeLkG;lOD-h9eI#dp*3->~)v zmg?89B-u$-z$?N+1qW76Y$71Ef{Y@)m9`uqHh~>Yq&OCN1(Xg3Y&Xg>&xs0eFC5&l zlpW_~&%F8e(v!v_r7N=ZF?&>Nr|2N{T?N{WN62PW5V@P0xrss7LUOT}1){7P&QntG z`Y;PHgBs<0d87)7BhB&QaqAumT$WW+e6fs0!{z9~1+iDb(U zepqnW=iWE(rL6Ysjb4PI_1m?I&%Lf^#~5%J$c4EnFd25eK!fMh!XW0?Kr7IV(#R~_ z72+qRi~wT@4LcJ3JHmV=(M^Q*glRwGbEs^{y}xf9F+4ChmhS0`No`FiemiOH YBC8_>dPmCt(-%}~&;QS7?9ajf0^=UnW&i*H literal 0 HcmV?d00001 diff --git a/smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/ali-icon.png b/smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/ali-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fe141241bf2aec2a19069aefd4d1659b68eb67b0 GIT binary patch literal 7011 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 Bn_vI{ literal 0 HcmV?d00001 diff --git a/smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/google-icon.png b/smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/google-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4bc6e4b0820a9d52258c4111ca75b3a875062431 GIT binary patch literal 6228 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%0DSM9Ft=?0d?k;Njo7;9z>y_xnO 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%0AMEWZqGFBI!NZ*{V-B``9ACPG~p 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

MD5@rebVl7(u1ljOVZVl(EZR@mF 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

$;uas`h^~$nErfKHYh1RF{PO zcbCgM4ZWa&EuyL%f~X4uf&@eivB>XxW^>+kZSAV?Ns~pjSsDZZLrQ*h#HQmqma33J zRY`$ZnI9bbQgL0u6-~o|bb`c;$4sW4GX}U(I2z^P1CpdxI-m6e@fdRS7+}pro}h|n zGAjZ`cu^n=kU>LDLI=tqkC2=RIg&2CrWe_Bx7zZ2Yk41!<+oPK8Wl^e>ZEmuYJ4%S z>Z`vp>?3Wtjs|4Jg*1R^5-Ud}|q>o+7GkkqB4=Q5}ANAS=@vHrAi$GKnRJ!e`;(Gy@r>pEiQx zqd}{x7=e~>d`@R9YboeO>1S+4gny%{B55&FMNfRwFn(sW!2mQx2^1ia@jgG7jwlQ_kWsVm9uoLiUQc1W*xqpw>RBT7rE1lpajjCd zCGZloSx%B>&;ViJOwyl}V+qfBO=q}3M3M-PEJ)4({{V{N#snY-z?0!o)@FK~0v?Sk zB8(_HjOMx4xLk5EQsLA@5X1ozbL$z#6HVywX-hoI%zk6w`HrrHWhRpY<@~V?q`bPD zPCLg%2{f%b^!&&_9A?{kga}B?k|Qq)iVB~O0CB6}B!f_LIfK{Z;e$Yw^b)dZ`S|!p zh6!jmg3Cfyho{G^MqM##TU^=)9^%!@?FRFX-)&ug`KN1o-%t$NU}wUZ({01DL0oHes^#d(O}`T-OE*D-6oM8Y{0G2eHsKY@ z-vb=)KHC2P;csa7M{HaxZF`4;~eMeAN;P9bEdXA=+|~sWZ}Li>`wi?me*^^dxvLTn>LY~WyL!&7S&aTtM3Gu znH_QaR`2s$=H}YzocQ7XN8oaihW#&Yytm!6Q~stwW9*;Wv|;Wcy#X?`1YiDmMWJjUx_iZaE zp}VmcTzCn*%|YXj8N2T9ac=#6R_s3WziZll-`cd-q}fllH2lqx#%#7+Hq|y9R?ly+ z+1UhI+ih(vyEa6~2!eFw(;f$Zdv~b2-QI57k5=_O_Rh}FPgS+EUR|}KS{F~;+>fY% zobaEdXRoXsiI06-?|5@C*2f)K>`eE>ZYE&_z2qch69Y~~g6`+a3 z;JZVJBRUW(F`i~);8Y&Cs9L=M7z7PjXA*ueM}*FEiCVPu02xG_oSiTvlHc(dy>W~I zMG2V{F;QHnGef9+F`V`QS_}e6pg&Xr5dxsrxH7%Ul6(QnFUP|U8&HJt;6rd5 zPy$GjG{rI`c*GnfRw+a)iKr-L{6~*U_=x;)!6fUF1?wGP49OW!Kwx}pfN=FKm$upb z%o(BRWJg1aQO80O^G^vZd%e2=DoFEvQzoEi;6IiMw1s_PmOakcMxv#R69$!zm52l9 zjd_z;)&(58{$?e}am#zm1ZGG8)|tWh;H9_?xm>9vjYZu3wQqN~dv9r2k#LYes_8OJ z5J3aO8m&y-TTJrT?;Gt8xBctwzefFwTvv8+DRXz({oS_PYu|ADrLrBXVFPC*W#nGRYVqBjmUvU1w_b+bq{l&%dd>e56;oDbS_XiPX-kV$9uxPd1 zTtfqbHU0B{gP76jpF$6qUxo4IZ)eZcZX zl-;+vutnQ@=Ckq#Fz*^8lqr>O(rSV6Ekc~0L9(Kqy;nt039KUkw_97Bqk}> zJSw-D?SJYcUw1!yZ8)26Z7wCv$t*u^uxk<6{efhaBZ!h9D)2hw^h_~9fmu)(F4 zWuQPX0H?yUfdDfywJlI1q38u@4CkH!cmfW9K{|P+Ab<{=>REkKNz{~hV z{#XVomLY(wK|Ww8CIcGN0K5hB01OgLOeq85<`g3gmn%(0LMTlPiq3V;vrs=g1#r%z zf$k~(xvUuxQ&G}`06E|ewq=rF(xQMHsc$%X5iTH@m?lFh83@n*1}PccH)&e1eKxrk?XI_K0TnsYloZ49(3Y_f zShx&=x6N~#O}6on+&q1)dyT?bQK|0TTYg&>t$<525C9d$({FP2ilQxQQ|fSd zoA-wK#RAWCM7#w*4o)inSEAzSC8Wy1h2QZRei~G^wnzoOyBK8{CImw_Q;%% zxc=jEJ72h8yFTMCVkh=_xJw*V)xirZEt<#_v@a0 z*24b)bnshyT!$IL+gAOq@08na_bB{-AF$Zna9fhxH=wGd#K1h)-@Dvg`Ns~ ze`IgVTBU8=Rje*Awm)%x+W!E0*$9vPfw*AG;Jw#9j2f6KlX{i-!@x8nzT{{WJ& zcm1&YANvX5{@4Aa;x?8!?{s)BKiDs1`v+$ic^BaBTd}b2KI`4sMQhu;wpQ}%xWack z?b58yHs-BtopE=ByNKJZDP>2Ux~ALtY53@RC-$T5_bKe>+h4K%*mK5t?$7q?w>BK& z`iAGF%iP#n+;6tw`imFu6!;ayU8iQ&pV&6lxe{?FOW3+(Ng-k;G7u?Ai1EZTTIHr* zEj~jcGN>ejP)Eivr#;4mpy0&RSLg7MKqvih#~2@0k)D$ui4@9m`Qb4Ss2LItV96v@ zbR#o0!b<=wkWB#ki4!tB2s9NkFg4f!Fa+wLBcUXc4Pc29d@()1I7E*LfDL4o9d%_- z<%Z#9Y6T47pBX<1f;=L63?LBXb3SIuXmiX@OdtTrp%O&4tyKW#dgE@nMLq-o%6!D+HQ^%)FL(~9xXc009D<-}Nwj zMga-nqdt+)43x)O-~$QnKJKx_ZkL7PcE_3SUD5+O&`_JxADbL?XecPs+8#`uoZ8+-$k+<8bo{~&g7^&uM zv3**(Msnub0!u2Yfj^8=B5RENc(J(E=n5(@kt`cgf($|UbfziU&Z0|#a)$^-fS^Ta z1QGC@OKrT3z$;`a)vBOHK9M!m6wj_L+1WtExTZiW0DB9*I}M*t}J8wy_c@V-A1B}nkZN5B(y++XXlBPFtsf_!^1Fc zPlf~4D87+kbujY`zyu74oL??Eq#bb;X1V3~PfSBw59N1aHBH@KNYnZxR|zS6VnIs7 zQklrVa(`Ij#?6;-cy4aZw6okjx4vs-7k$F=fA{QMu@Y^PZQKGF z8OEyDt$B5)#||W3x81B!$75f)@=Nz;_6zU-0N7VQzwRC@Wp~`)VmVFIqI1@EZ@J>m z(&I3-uJwC?WQyJ@{wJRb0oZ=d1WffqKH6~RLc2*zra z-D%bNrz`p!QEpPs8g23J>^`YJ$NvD#k7RqNwBh}~`=Z_Por&LO=HH9sz0=xlpKIA& z%e`k!y`8ss>`@x$W%mW^htF~6X>rWzS%I3ZmAP!Nl(#x~jjLYKU#Y*3^gY_zZ&u~4 zo%L6){nSwaK%^Fo!LcXeMcuBf=}xQv-#dtIYM798{O{sUM6Plb8J_ zaI`~k?E8>~QJNKe&_<;>R+OeuTvBbhw7}hEODJjcg&~|uG#@hDq^o!k2*CBsM*xVd zA*pc67?4Et8UCmpU=Fx326JTdG9ReQ6=+6sM9)D{@xcP-bFNAy43Nq`07%ZFC)_uV+Unb+1dTehd74k z_dTiq02aUD)7`JX9^$jzoT~2qwflMCc>tZ??#CmtH%BFQ(baplJ-*mpHoy2u+?UW5 zd#X;;U>jZH#eFjsyWLz8{YAXvw;!`wt(Niv?RgEB=Gty-Zua+-tJ`oG5d>o=bxS(i7UFhM({s(X)2r;y z!w-w##}{B**r%_!Z!Y6^bzp+R2$~QzX9uP^@4D>QH__SJc@3?lMK9_g-P`Vee0EAn z+_3XHR9UuL&2Ul_neqcOimj@)=S3!y=8h0txsFq9#_X+eJ8ecl7j4=i3zh=y%Zvw_ z;dAuPSSjZ7+rf8>b8@P`ZDGz$sqF{bw|;xGcGl*~TH`o2+}ha=N0V{3+V1z4;dcC2 z6Kb2TW0SwFMZLD!UgI$yI9J}SY?IfAk7wX``)>K2Yog=f-g;--f8v{Q#BAGr-#p6M zlou>)c2+LF`H-Nvt-bY$wX`Lg4YnH8=UEt+)MhH1pOGtd+T4%nV_nJiBkeB3Xts8| ze>|JZcFBF|Q}32RZ8GR>gd&LZ!1~Gr#o-E66V(N94~Qg zF1qPkX?>e#xONdm^@t_>vE?9)38iM?{V>*(%v*cUCE zcLIxymai*aQ>1=}SUC)7{{SM^kGQ4xc2CBBMt0buaiffQo3pmJ{>At9{?9M%H-6pr z@47D_y1Z4(_pEJ&@aj`)mf5Y`O-?{iO~H%u*{8RUkIaSlsGHUHe&*-BvfpnvTRr!G z+P}f~M#}Y#&kgR!V%&YU>dpPD{{Zc`JLlQ5o0k#LIWQO+>YPpXt7%(`Tx-NzE~>x( z0Fj=}{iA=FuX+C6?eLw2_h+}>`{C@n9k$1U_nU&#f4e(xVEQd>u5%w-a$8Nkl_uif zKCpufNdp*LV%sWKcH(=*DO;7UTTjXScb`oj(EG{lU%&mEu=fwyPWs_J!0kQtyLS%v zh`z18<8H7F`%YhtayOiA=FngY+)-SPGR3Rk*j1CIlX|me3#ADxGA2J00RI3C4Zc_# zyM~sd*3CnglOTv7(Dd*CVl~r3^UI8rRm@P6ECyPH8OZz;VM9(Hq9iL42C9+-!1C9m z)J_;rXsE;p5CD-$FlI6z3>XC3S|f#^Mz zOL-SC1xLqG@xvr_8(f(qKJg@*n>VhZ6dQko+1VBKF8&M?E2ARzMVvsNg=sKj3POOAvd`y8r zB%C2&Riy(~hB_R_kB8@gOr^MHPM~SiAO=IA1~9@0H4uE=L6P~#SzPc4Q6Lc!KS{6f zIg)SyU})+16A?itR82_00!FjsB|rcejPrpN$mS;i1VLytgPi~fLHE96r{NJ80B=bF zx|m$(2p^6B8z=|_$YJGBXfl>logn9cav@M7!ysY=dg~7L&lYUbGkzOsO!jJqM4529wmS zQE1$403@^!ND~>b9Y;Vg_zSs~ea6LHQDKgCJ##e3$A?Tja35zBSTFIwu>b)E82~2r zC3lkIWdyuv0yN}mV3G;SME?NgfvM2Hm?Mr^0R4vm|U0*VK zrcX_|1Pu~=0D>u*BAJXSEke^meVZrgh0bIHL;jy13AbE{qhDeyE04Qn(v;Y&3sXjT@1qOHkD1Z)724lu*L5Zy*m;g;g>6w`TMG2mg zCWEd36sRgdfB*oFlP0;w008L_A#&@Sf=MGV1^_7x<%jP~am1*(70YIMtLVk1n@XEw|#3TYp>IwV@Qa%Io!Y7C|flA8eAXli)Gr$5= zngK)7lQJ{R{ulrui(@jspb;wUr|N`9>A{Bjru^(aUL(@5zONzT1Vi~&-K2P%=_F<;0L z7zHT;Nk90(tptDLfC_^EWB|+Qk=HLD;ea#p5Ro7rpi&@3CY9(g0Zd`55%3aY!{%@X zt^q5aV>1#>C~G2sftDGpu27K>7G)n^dBMUm79{2daWy|FH6pkM)^a1|UDk~vAwEaR!l1o$4FI0N!aM zI0p}iBx{8Nv@<3Y#DgY(jsa>UQ%tG&58`AQC-~q3iom6E{HY{ooL~TeA4s5F)_iiP zKaK#09l(HORtHg>&-HY#%K(7{lNmuGPGk^%lhlFNECoK|l#nP1sI5j)I%j~ou3Xq4 z-dX}+$)p)1#Q5iiRG~zZo}p8fJTr+igiX?k;!z?DR-#PhPzH1(0TtC0md(n5dV)-V zDt}EU4JpvKTFwcnwpk}O6R4G;$WKA4Ml`J#`3EXP#R|@vX&@R&HIYWhiN%yO;7lr! z1cNjA(v%oYF7O#Fq9>uDtRE0!eBTTU7y*}Hr&rQ)1k6@|M_-r62>^`h3Ws6=X<8Z> z>Oc}{hYSJ-NhV~o0thSt1Q1LbX&9E10li_NK_ICij2}0^8aIwAIDnzkOlc$m)G%r4 zA)v{CXA6RSSO{(wQZ$%T<)))drC{ogm~r@k7Ub(_o0U>ZmI8tWA|t?Iym$bF0%Vm` z3=f#e)gPoS1o%|o{Xjy&Nl#BOVdVOZ0haiJKmM^E3@H`{9lS2YlTHvD!hUMgjHOam6mM(026_Tj!Kr2 z#OVh@F_saT3F6aFfy7#_V5|!!6orjLHaZ7d16GnoF13JDIM9YK71q#iFk`K#EQaYU z#z<8$Oh44A?d^7r4QhrjiB*rT}KH59Z-vmiRS+%?Ot<%E}I1yMjhNSX{-(&C{jZ+wk; z&ClH5vu4$`TZiaCPo0q`C8>-#T4F^gXZr(9n_s)!uq}1j_V-IU6??Zy(_|`sfzz%R za@4L?l<*>MH&;L&z1xQC<*gMJEozX=6fl=i039O=)@h{vp-K|&;`vM0uUuPOU>4II z-SoHnmLe_LwQ3oiL4p=4Dsa+{A&7 zOF2WjPI$B*?(TXQJw4Xe#@^`Bb8~lZbYDdtck=^oVMLe&0fwS^rE)M!%%?%6zqY?@ zJ-<@my>SJDX8RVtwu2j&uIphNsO|?qrFpT8hX5quJ3i~U2p6l)#bXEHy5tkK@E4+-F-TMA4pKY9BEXn zvoI&hnq)J`wdPBv<YeTuXUSDs@ZMOUEmfUm*46EL*T#|Q=WDH4Rt{{U@#59%i{FhHghiyD_vEX9cmfkKf2brYCLz%nl75Uh~S zM9_s%sEE|Mi7^I*;O_#=>J^+jFao+zk`$BlyLBZ001N;y7~E+Ji)~bdlI4jYg1T5{ z3C}DEHUyD%kf_yc1=3s7(Ojs;04L?)g@@uUESGGMWtrHqEEQmYKS(8D0A_FupJ|!} z9I#>K5KL#Kh>!&`8R4$*E(%G~BrD}1WT-WOat+hKVR#0F%V3BDQ8ATCX`vJ0hJc=+ zEGz*KSc5PK_{9GJJODnXelbN52A~a02#oP82Wka0fGP156r~BA05ta?(1_|pLCfLO zufq-}P$N63gC1JR4J6hi4uXFP!+|XbS1x90B-E1tz@aq3J%cQpoylf}MSlRs0b!FK ztx-XgR|Ytc-Y~Lbo88lueOCfRfdO3Vim+LT2O>;hg!LMfj2n{VEFpD^*O-QsvOP=e zph+dmC96Q6z)l)?fn}psa@>aFN3VbOyCi4yw!2pr?p)Gjhq%lRmQ~NBoGdm{?BZ&! zTa~)Nv0Q5%guIB2rHN+E9GyRM=lH{0rR(7hW;5L(WPL^tVtYWWhYM{<@!b!$>g_28OF^O)s z_dQfYd(^w6vm18W&!we-59t~mXUnL`9VvpFZOz*zxbtvDlXJ*iy?W}~+!VQHRj!XR zlXBU0v>crZPz^!>GmeDQ#dRjnn6!>k=G$GXC~n%gr}r+-*7jpc>U;0Gx~A>x>S(Gw zs!RcaIqf2Na2?ujS^k@r)G7;mYZn&XiwkYoHOBOdMyRf~^AbKdZc@lDS;nSEwB048 zw8M3{7Zr};Z6}uFFwt&29c_U>G`t)RW{PQsAT zZndS=KBcf>nW#aGI<~CZQin5*O{v9mOdS-sDu6P$D7ut%Ay}J$8ZeL!A*VALB`0q* zVCbI8<=1m+)|;x#pe>>s)4638OL|spk2b!#jE@XnR;*EFGLC@aw;}B<+jq*|EB^p% zd07IUwYzT5c1RhK2MsjTuH8&;SW`GI_U?~VsJ`OmS}#JWC1t%kK~A<|^y;9`0k;v2 z(N=Z4Yi@4dC(#!zX;ijH>%Hbe5o;uTu;KiL;9`7;7g7q^y>inLYTk=PBa%VCcIlIH z$TcBr(9;e(0K~41)uVFlt;M_7g|;H|+uPlcZ^zkN8+%1G z{VTZIm)t7If?TO=hFC&}rDw#E7B+V6-Mhu|U%0!ej^5WLXKk{vU{=Cdw`DF|dxZT& z%gs&@r-6-tAQ(lz>o1T@q z^zGXf0oad*BXOk@tb$8cXzk7IhSzIbKs;#jd`n$B%LI@1%NPQR^P3vFW`UcIr2`D_W)6+2z-`ecj0WiQOEpJG9q- zlIHi@PCvHznKwN7|2RG%^li1Aapm(w$Ll`ZaMv*0eIGn_B1hU`82koCtypqP^0WBs# z5eN=n_+o85xoQn))m}3?l3vU`yI|>J0dpqd)B#|z3yyVn4YiI2jpsUuQXUIxT{@h^ zElU3Y+nVQ7&|;IdtA&xI?SSoCCg^O+G_Yg!O*HBx4~`YB<<6~OB3vR{9Sf)^5amMA zi6q2@$dx^MV;ZFKFwGOgU7sH!iG^z?!>d6b!9T|@&=wbAt(*rgn_UpBp++*gPR zvo_bu<+y8F0g)hq@R-Mr-Sy6bimA?fWm_+6xT7DrYqyznkuF!vlOTnSN&)dW z@w@)x>o+l16g-~aw>nB@$+#|D_hoS#e%s{++iHt>Ha9LU#b)&t>08@RV(+NIr&(U(qR`#@CY4rd-Sa{IP^cH5cM z?%LSetykOqI}7E#x&?rtN8!?8q~>ul{%~)}Tu%Y;ilnSk1Xm(V$HrqBCizvn0xMj= zFhQUM8VZAv6f;3j9B5GJi1LxB3ImWb24qYO2|#Cvh(S6}ft-a&=ps-4H~=yT08*x6 z2&{OVCgUIq(2+TVPNJU->xt(=pTMGY0pk=s7MYR%09GklMy0I4Q~gISlTV#K2Lql6 z1P!J#1E)w8>DLZpgoln8#l}5I5%`+tJt{ve3nFS%E+!wvsN45nJ+?kkz1!?}=mSu& zEoS2kwG#q*Vyzsi%YlyEtHk0A&?yH{GeHqPCTKIy87ris4Nx;5P??ATK$3Ei;fiaS zK;s?b;v>u`B#}Ry96#YN74YMMgcLGkHZc;)7lU>s5Ykf1vIC?fM>=qPGC5| z;HwgPQ#dp61H%gc07wgRq6JMW9~|rO#8Ko3gpsJkngB&I`l*;F8(`&iYlGAh2~t2N zs#=i{A|s{+sG*H|ObI$*^(Lp`@))T=D755EWgSSG8hn4A7cx&Qy3?6Vq@=^U(OYX{ zh2>y_#`8Ne)RF1#U(j-7=0o+$F;w&0l|4zdFs&IgWkoC&6}px)f*@!lSZ(<}h3Ak_6D zD_kbwNWRy2OJFM#s!aUOV?P{2yr>1Y4nr!aWoQgf%$k|%FrB4Arc>tdK@PtRh|A(X z98YmV6$YeFz}NV65rK;W)qjscfHAO+D$}db-2r(>pVKW!#+$7)o{I*1 zSZx`=0;EP?DgOXbj%TcJHXAFbGMIzXz8*Mpp)E>*ge0f{fE1BHLr}#@_;_F?O6-9~ znFddZ1k{3ar%&UAFoCIx8Gw44=19(Pmo(==hO$S-v(vAJM?5|tA(Kgyo>YmTGlDpQ zMn+~p6B%?l=5oLwNCKv{$|@oWh@pXi0|sZMNh9G()8mDx!;gU<^1^|LKquJ_~n2Kp#plEMJj4OSO5~IP>N4c)X9nQ{{T!O6&?#Y379kksgL1+0cAQ* zOoZq7_}2gp6;Vom)k)H61kzd$;fk580YPLK9RZ2xGC9foaN=?Rf$%1RN5W=inc`lc zP##$T)W8)L6G=WeKsNO?iRqSIPEc!#P5@m7Nr6z*kSE6|0FTENCJu_TeG5JUho01BBu&kg}Gn3<&qmNW-DBTVF7QuZn+&WO=}QyoTSbG)xj3^xzmuTpZ+LU zFB~*0VWzY#ckBSf)PWV~H35|8*X4nJLxkMDOAhC5ppw)OYX%HQK^6Jp?_}X3TUMD` z7E9Y>CKO2!LHx-b2#j4?e%+w7PTcM-#}&Cv zw(y&3tst{j7s~2P(Y!ub=j2H>RW0y4Da*K~ou>8Ka(jK{q`Zu!3Kf z(-q<-nsCdanO`td4n+BmkpYE70;enhV%@>p8*X!Na@z}QbOUzH^&nkW)c^)HWCJl- z!f8A`1(lR@hjM#W%Wkf+?Sm_mrEXYZqUr`9yQG~ugx0Z)9WJdkj$Q>l#FRe5@!B5E z+2XE#3h{8TR4zo6zJRLvsmCt(iHN+zj)pz-qmz^K~XJ*P#^~Y zX$3-`C|qq54eC_NOR&A|cG^%H8-<6J38h2^EC~7SAOdK#@CD> zn}L2%?YQVSmmrd*Cp7p{tNoJi@BT1Q)LDL!5x3(6AwyRzc zY!2P+JDbav?rv?kv|JUoq8jB#SpfjbPCF~Iw(Hw(jZQty$?~ly@kaULI0dq(1-0^( z0^PL%R-Rc|nFFbrj8(JpDgOYsSgEtPKHa^&y>8al(_VX!bz2PD$p#?-tP>QbCL=FW zyq8UJM_&6??2hY~zhdR>s}(mbHK!_B#l&@%3RG*hqC;1}jC5CK{Ji#2EB!yQp5^MR z6?y%SRy~vZcu{j}8xl$zb8_u~9k&`GZ);W>bq^>~A~Cfp_S<)e{=KI&ce9&mC#rta zdmXpf*|B!!-7T})T}~}|nG&j+jCx?V=avg@y4RJ&v3;IrGvIcQZ+7<6jI(Ohn+Tdz zNz$SXBx#8OdVKN9+jGR;m1;KDhS}}D(B!$tRN8Gy*ay$My*BpfhsA|mf#|bbL%cb* zhP9OOmT%4rvv`i*TX&TP`;bv5aeYBVXsXz>bt(lvtLixCZRKz+*Opr{adF)0ax;K( z=|Tv~1{@)#;zsTj0f+#C1!j>3lbB)G0NdioX6QN6lo8e|QQ~mmT%#bpy zK{15`=1svMB?}T{AEeG>IX*F50|jdaNGNpxYcwXlCM!5%YFLc$6l4ji#Hs%PSf7Rj zD-@6<&1fl68U9uHU<8^U1R9g12+yq|Vasqi3@a}YdajLsCm_3#To0tnP~0L>(MXUa&+t^f>C zNS`!mi0BPSie-aLv5Euy3dE?Sx?!v>@l%P?U1qO(v# zQn&$Wl7j>z>LkgDf($@|Cbi3^0XG2$1ZouV5@JD~f;Dx*oWRzS31%`P7f~RZk_pVv z<}d*9C#6_Ulm3;GL7V_K=wMQF(-A^VbdX0(0567xn4Z#uHR0siN)EeXg&W3v7nYQ1AoK5~ge(tuPW&Z$e+|RkYQ?fnf+&sS1 zvbz;|5N>SjbKI?+%eN!Avaxe>V~E-9-*Ixc`rb9rt*`1?|*;eH{vu})vVx|cr$<`1D?u%BW3AM7{VedUXN%i4RsJG(ZP z`@g>a;dj5cuYZ5Y!rRSW zb-Vnhu;(vy{^x!9{{Srh?Q*|r-(?$}$G1OjJ+XGv`{nlmzZZ6!PDhBfcIA!M?&Di~ z7w+tN0E~FvCe_v4Z-^~%me7Oa_aEM0ZjY0uPc1CI<>UDp*0raa%6gXYrwMkpde!#p z_Sg2^_Cf9MBf$Gl!lx0(>^N)uzq)?#_Z0FS=iaw?owIJaPT=l7UqkLT+;SpZds{8A zOBPhXQ;jJ_jk+#Pg`{|D#XO2^-M2p^`xnP~;P2gU--o<^ z^Y*^%d%wury~ghQ*Mqfu+uiQ@Tl2Quab2f%6rHyaE-vSgxFOglml<8Yp*^KF+T-8A z-j=S~TbQ=%(~mEY^*t!;p6>fx{{R(#X#1hWgTwY`4`^>WeqQ*nJM-T^a!%20EtGNv z{mt$5>soEvU+iq`d8s7hYf`;F!nM~f%~lfQ{Y-0HyE<(*ZOcD3pAP>358UI=@$cZExRY_Q&nU_&MV}PA2`s#PVEz*6|2?XS7!7xR=`5{r>cItg2Y`JlE<;#ZVrgkjOPNK#Y zOOw{8t|`+#T$(#8K4Ul9ZyA+HR%IY&3i*HrW&wlah-s&jMP!nOU$*;_%mphs{B!&% zg#pfswY!>x(v+c*GJ5z%6T>u586_hTO!KdY%Q1$*_L5QSB-G4DQX?}I{uo4#LX-ah zR2h!H_+cg5F-($ZJSG4l2gn@8CFBaEz^Ecf1L~|8F++p_pQj?m80xKZ)Cdz=Mky%( z1est@{U_-r4MD_!1gfl7C*%0f$l-xStJ6sXAWRY@&&F^8S%DxES**w)XIUf>ga8xJ z8o?}M^3IeKh66|H@`#Lt_|)f$;gBi-0*6Q}N&Xq-S;5D=0n;Fy%FK_SPvL?hKRPJfj@h6RCY1E`VE z&SD6dr%|30)CPhO6=~)ja?dQQUxpBdm;sm?gJqG1j}Q(YZ~#{^q(x3(nf`ekAOy+q z0GWvS3C^lBi~u%Nni358tB~Mv;G@SFyi2ndg00|l9 zKMH@uVT@9-{J)fso&b?F*D*}Yz#V2!L4}2$0BUY)y*J$7A-V0I!WQ=%n+(=DuIX@Y z@w^*MT(h$W$-m@K8Gu5iDsj(!=P|eV{{TW~%@O^J_igsS9otqL(zm$X@Aoh2?|D7T zdb{2J>HOC(?k}{v7i#IqbQnoAp|z31ZCi>)UWA1O!PHEE4OALH_)Z(*mXIW&B*&Qn zGDS~~TD7lCLsHUsNO2`;feq881v*A_#(IP(4geLUPmfAz_~(No0hM~@r?0~(ft@hK zHGAo8e?VM>0%8agKu#L&ky%QBlT0p=5D5$YA_1AGrY`z?$KEzn)(uSjK^c+o#zer? z+hC9)4N3n1naEU}0i!Kf_JQUbO$Z|_^NFq>HX)MfE>;<3-0aj9g9Om^oZyi(2j_ud zg{qs5C69ZvN7TA}=nN?l@Sh2jimOR;15PDk3@?=8y+u+)=q5xNB6Bc7r%dw1^0{j#A(#Z50_M(0sN%F1!6&u3gNyU15X&4HP3MN_Z7);{ErjQ@tZDNgXMPb zu;lp8Uu|c1#_zUw(XHLvZnoQndsl7TRx+SZ#|>K3HO0SiK2*6Hlzi#^@&5pX?YA?z zZ5+tgLP zw&Jx@w?8%gQQ)TYy1S3Ed#88V{`PP@-(z>r4|MUH-e&h4`(8*rf$6T-x;Q(Q*555) zqQJPJZWS{pJZrgcGp_oT5j=iIwX(EwHP0*Kxb=7J-~6Hb@AjYm)xbXYW9~n*8=K7I zv%8Cuzq;+OP1;$zKe=3PIUdL4oqzh?@2Ry@O$sZHN3mM@w)AU7qaBrWx^4IC;(b+p zs{Ql*zWv>Cwtx8wB?i?CrKc%C(I@U$3qxcEfUhY zm_$WM>Qs|JX#zyxCLze&S5SaSsRjmdGCVO_vG(}5y&F#xI#Pr?mw%^mX66L#M z+O5UEaFQ>x-5Qj@(zL8%uX@=emPxC-wVvjWPXbUHpnwiw6G;UB00WH6@e@b}p+i=X zdgcsM1hC~@glnWo6e>Z~226Sqr_G8+cWplALVJkBu>|QFN5BFBAZLX8grVW0*U55x zUk%0by#D|>%W=KG+x!O|xaIlodz#+cGL|bZ}dex?v#7j4&ITSqG^zKK@Ds8vi=H#(2a^>gN%<|o3 zm}LqeKru{1vaMTs7YX5OC(=jwi2ncyUCH-FxZ(Z$`;FT2y^;3UvfWwT@p~q;`yT4| zqjj~q#PNN$9g_DO+ERfxoS{g#vu|(b{^I3V&3Uqw81XP$%W=Bx{TyxI*t`2rxh~V~ zUeoM8)$Pv1>>k?T`!BIOM~$)Tx|?gsR|V;-10c^EM@WpNH@=oH; zKXFraHJAAuS>Ha>U9!8fHip|3cN$ksvuLY0wi#zhv`%8Bu`Nr79M6fOy_42!2NrkN zws)^4_;~84D%5#g!r;hE-rrV;OzBZM9`@GFtr3iq>n-X0*}k zspki~pKJS0Q17>$wP7|J&>7o~xDjmLVx^+Z*JTzjYX{1w;f}4n`Z%WcQ{%7Xgto0^ zHC#>w=6JsB>^9V>({{Y-^M?wjY?l#%WD@Jr8aGmA(Ql1|jFASHq+lxi*U$b>s z5Xwj+5oHnB(Mi54K0Y#4yRv3sn8uo#ipgA#DXuTDQlE8+HuoYLOfizHHG!F&j2uj6 z1z!>Ic44Ss0rN4Gn5}#;nugHy9#``De6qR8Ihqqb1mcrRR1)VJK_<&efLct7iXB7o zq~Si{rz&2gwPQj+CNzXkxT#{wgjIplNtX29;Ey_U;$8& z1!b7Y0MG(+pBU-kfC(Xnb!Ck6kskmfMB6)rYe44KMb%5Na!p^KxBUjr40^PSVPn>$5Dz310c_g zkH-LoI%_Hq;!aXy=Y$yy6A}pcDCoTbniGIc1{H8dh?8Nnj}3Vfi}1u~3=VCF;|05n-nYbJbPSK-!!02B_f z0*9>4M@r@d-~e0-h1AE(`lbwL)@Cc=gfX&_)1;czh@toZFbzD6GW8Len9t)}qA_v(HIROPo&-H` z$QL&9AY~#x1|vSPf&v=Qw%^*)fEX}oKN+QP2Bos@#7S_Vv=Qb~V2=vt7#f^#2ApG3 zBJ6a-3tCv3QfZW$Oqu*JX@n&j#zlRY9&I883{?F78CL-CBJBjgST$l`8btUWxqR>j z2iIpXN`akfVnqkf21CF<*{C|IGwC^r0(?dsHWJY-EC2%mOsXc41Or$&S^`s%@n`7) zNe}>!2o*n`0pOT6->GP6NP(2V>C*tEk}TP6GC>F8Xg+3>{{Soj1FN^wahM;f1Z9u} zz@LoZ?;H|sr9!X}NQy}$^`8%h2?AKQK!8kT8Ats_w1a?=+bI+asivnd#NWcMT3DRmz&%&P&Nx%c4X;85=5NHid&r)#UX$}N2K}s4$e~*RWcmOd7G>M>y%!rt#L~8ip0okb_jG*T<83EuX zK6n5USe1pWMt&pbm-D~@0!%~zNBl?t##jKYO4CYEc=V4DYk&n3tP~2Kq*F{lu4WDZ z6hzDuK&Rta5#a{_6je-(A}9eBCZ>S&oB`knQS?Lw5hE$2{Ax`rfHlk1r#eI*gpw!p ziWsf{0ldo-6XplPX#@tc;oi z;tT^A0C1W}oTPLa{Bt+}tu0#pPzw+QNvILyKb`={IzaizG1EAT0u68ga5MOVJ~a5{ zfCT_R`DA)Y{BXw;_y}XH#$U@bG!(*O6>26R86ZwyoKpbc5?3fQ{{S;Tg>VQRMVaDH9)52&@j1^1vXWNRizwCP657O@e+y+Nr<1v;~j7Z zHe{^p2f$EJ)EW!|C@^0wPfwpu7{E5gB5C|!$bve}X8?dJ5JXS|`2IgE08)}o2hSlV zGHK(00we-+1d))MM}~L?-Vz2fp(i8p5HlH50ELRoL8U5J8Oze06;lKV06GrO|b2wet>fVA}V6EpcruY7Ukk2B-?vfoo8DJIsky6)KtWf zF-ocHsM3N-1_Hu^ry&5$oQ8D+<&9Ku`bH+Q6w)&UND%^Z&kP0&kRWO&IU*o_1W+&)09URQw4?@E!s*o7a}diDQ8Cg$InxRN7Ig-K0!3M=SeU5>m~a5K z(dJ*Ei8=!6srpN>q_F(3DAni!`jVhZjD#2S0}w}mHKbtg0k(RY6=jerSOWx)8EC0F zVW0)B5=FBKrI%YMEhLPAY}$GWj40v(z0m*|1!)Zdhyp)OMD(TvrAQ620D^#_ap#Re z!0SJxPv?Uc$72DuG5`gDBuIiuKhlr_gBg>7xEoO5pybM2Bml63OvY!;CQJd-1WJ{Q z1Y$xmz!#PTfJJqFBlMpE&|rE;c%obpt~#qJQdLPR1paM4CoCyRzS7ljsf%`v-Mm;6a0*b{LM{Yi zewMgLn26~E6FKEsV#3164%b;!lv_5|6dzC3a4I#6Y{K2LVv$lXE@a}%Qk_)eJ;P6S z+7P>Rd-p>f4sC+A&;m<~Xj)=wO)%`=1th0uj1k`Rum<(}{&tvKLsNJJuzacq#Lfhq z&VsMi5tt)8voku|zJg7%Z?B(8GzzHNL2;Pz!__|0*;hzL7LwlL>!0piCi2*~Y?0z5KS5R6OsbXWp3Cw)P z^zR`0(C*`He&R!1YtL{l-e*Fsv2cRKIH}0sn@mOlCNS3n3ugVzZE(U_v1C4`nTA!k zuoiP9MjT_j8mwVT?IYj4we@!idhP4}j+GmG4oj(JFpX--a)3nvHS35;(=1CB=2)=X z?g<60x>`^H^!FE6(zY5EP};JkQP6m_&rE8pqdEdu&ZV)r3k|q7EN?i=D_c{0akzcP z;M!eR!dN!~s-PlSgkeHYokAU(UF1uAmE>!ii+qK(yK$1;rL@NDD&&u$ZMC&66a}CR zIdd%4?aExMAY8e(wp1H~ak{wecJAwycy_wpQrmHS`e#6=m0%1_a^dQ`NSS@egLjZi zS3NDQ{y%em?bWw>^~>peyVLtN6516OtgqBTu36!zZ;|Q=W1F*q4*km;hgIF14Y#md z*|l&z!Fu4GcWzs`c_PSj3V>uQIbmL@Swu8nHCvc`z5picXKpU0nGR<~Q5$^QVi54qKN?el)Bqz$pXvA%&q3wJebEIBO#+g!3WZiTZt$c<#c!m_t4 zJX9-gS;k9iUa&3{+Wym!-WK$g_9*9VwzdYBw%4~MeH{ntRPc;r&7M`4;5zd-c}R_N z(70ULxP5D0qF%dh!?3tW2J73pio0=Ugda2k*A>k9V~Q!ai7{?i?41#Ag`4Ou9o4|r zZKmBMDAQ^5T(>o#^G-8r%Z@mjR(KeW>h14M_d8v}8#csRKkb6el(rO`g&TOFq8OwJ zZEU7WmukBS;D@ zv_%QWUe4lEw&l3ubM<{ZuerAT)A*gOwcH~jlJDjLz6X1YT3rg>qEGFhX|sS=7B zB$^ZD6Hkf305}AX)WwJdTZL95AR9OXK9~g3cnlSQVmu(JCr*0aWXUx7U>QzB`HKV8 z0Gf}D0fQ^lo`x_1W!>9vF)p_Ht1!+gNJIiZ9=HPpA|?W`f*>;8^IQ@7k3ips2;dXM zdeTS?ZI~!!n2kD?bi*j3(zseV0^w@rtp$hx&@H=WqC9d{_~C(YvslxlNH77*pc2*V z^$b1&(Ua0t8ILpuAed4pK=B|9OoLLOnQoC1ItrSaLemWlnQnqQ2zD_Q1_{bcgPsNh z^YqdL0!;-E=@LZ@{P7@E=44cnrfNyZeCOwa1gBO+yK$AEco`D_NzcHC#7&9Hs=OAy4~9a+Lz5nw$!%7oUNKk zj}Dk==LGSNCLzji?ljxCYRqYnBr}Q_ApwHSd~(3{-BV>H2-e*1EG=8PYjt?r-CcxD zwTHI18c34D-lj`d#&T;l#HQj`(oU}$8kd#duIBC3x>s`6)GJq6w_Qk%o?B)*Nj@hD zzEs?ralx(m4f7YfeVqe+1dD1K@=OIwf>zy|b4?;!60EI?f>A`O3*GrG@{LYhhc0NQH~XOMsUYV;;r+XXc2J*P3-rvQiOi*K8wF%D>OkUmRaJxlo7Lv;? z!U{8~SBCX2-)$`AVk9q|#0bTJ%s1{?)L-3hOBuN8mUh}00tVmJfeSP=uS_&UZhMI@ zZJPbNY^i5jsk^HEr`#$63tSfnd+N;f0b#sphg7KWu_8?;++Ow@%X?sK?pR;Aw@be6 z&ZUcHeI#4A*`EI3wG0Rmjnn2+Q%3TVGA*AYxwOrG)r&VnqOHsO*7Qc&*)_LqOf|R;SjVzze1Gc6!=!226z zY2aCIZtf+Ux3;_8s@Wk;-NmGJcO>XV+ut_qS!g8YOtwNWM-eqO<=|Rv-nDGr{l?uc zGsT4)@u}5ZN2o7YxVwwnhWHIDI0ag?-V_4&>}`jmZ7gk9YNqA;spY&H=p&CQ~27UI~we{Xqro3rHrdUtiOL0v(#r-l|FmYZqt zMW=bl+_=h{D;!qYts98%xP8b({-d^617~rqlU5GQ#|slBmYwG;jET0jZ*_9pFaG;? zvEwaTJFiWMWxKz>xn{Rz4M;;@&krIojmJ1HJ+fBL*=;h5O~^a4+e>q%<)^cISWAaE zS!3|Pt*WRH@AoCycCmKNyQD>ixoYn0*tSNIc`a@|J-*l$l7)d{Y6d3B%4>j=aNAyN zk6Pq6cWt3N`?syAE&a{8FLL7uxpG*GBq_>Z50)EB*y1>qq@w3*kPCXt-&a^*ZN1y} zp4eg4cGi__NCry~#~CWN@EEG{m))N$Y%iy`OPiOH#_`&vwI?TKx)fV4r|HxneDEnu zrDcW0=s#w;b!*(dzz;~=+U@tY{d>!Qa^yL&bl4^f3ju)gg;6xYXm(9!ABS)^%97zQ zZB9&o*O&W* zm{)cvZ!pa2g#!(#QuPg7oCWtS-QVo}j=iC^c;EMsYkR|K^j+C-TN|kN%zaF}mgFtD z5#&=7kJSDD0PBDKKhv#UtAD?D%9oGTZs`5bXa4}zPhfxbuX8_k^|Y(#dM~G$Yq-;h zont-*l>1-ot)Fvu-tWD4BmV%MUf*qY`z|d#HuSfB*}k$(mv?4VxHzqZu~;Wn!7xTV zck$n%KA)m}cTrXMcWo+oSF`4O_x{-X{{VMuYh&3R4(nX&?(ZeRe~oS2^*skw49rRc zsLf3o%*zu<6IjRUYl1!twp^~_t=lZ?peWW{X(v*M6`b>mU~U|R6Lu&nfdH@}bgU^N zr1@mE2ZklPEU%?%XuCL~m<47-_0B*LK?VSbfKTIx%$k(Un&oiyB`h5z4Fr$@ISniI zoXn35jx%Z*uHSe<;7M{>-EJ0EHFhi@b)Tmb$!78Nmhr5PCZas(7T7wONvI}bnzb38 znH=$+HLTA71sU#Mml{^*(iWl=7yyBsOyaDPQCO4-J_NT=z+Ht3s-U|!Rx%VQsjf0t zYs>yj*O8^n^%mGyYp_AKNJ7dMAI(3`L3lKsH z%$f24ekTNS>k!zNer*J?Xxv3@F(N*x0uPwb4-BymG)1ae$HWC7z|sqtLFEOrqydu{ z#4N1h3Vn+&LS>z;`>$y&*>^0-D2h*00Ql4R{b5&_dA={OD~yJ zn?PJJOfQ(|pB(Yw_r1;3-{`_T&eyhjIyCQ>@$m*-uPHjy}t3w_@6o#I}?GOh6Gz4w&M%QN4V-Kg93b z*rg$*Row)$ZrW;8wg8_uln4Yz;(Cm+65d-j<)>m4AkzQ_2f#rj2(QPc4KT1cLY0B3 zMv(wVQI$Z?{V^%$mFB?;XNb-FDSpM*ww1%9e;Dj+>l5A05e~>pdO@@BDvx2HTNN?D{Zw{dKrSs^pIkm046~3ClfQ^ zXep9O6ZFv1W`2{9rXkiAG?XSbtYoPlNshFcAR3bd;@W!46=yTrI~n*9B=xC^i8+yg zp(3Cu0y@J|X-uj=jsOm1SL&#PoYE;tzyN^~K`~N9LuNY72lK{uPDH^PixU)5wd+a_ zfNJ~M7K3OddnKYW16sYNlvTf)Ces-i0CPDaAR%s^``E0pfQ7QR*p8y52K!7Rn zF%y`YXZhi~aN<#h@|Lb`d&{?XN(i;P+V6Pl%}^P@7wsv|Dh^rVlXu#1jGE1~moZxxksJ>G|0H7Ivpu+PvEipXd&YvI&nLT>oLbjhYFHGQ8y(^XsqL?5?a{`q# z{DfBlF%D(Gv?i4XdXLNIFhk%ulrO_Rx%iLagNVcwHP5g9QewCmu`|R2)DUCJ0nF!F zJs@I}Zv?sKju`z+J7~+c?|wsU50{bREbhXVBp2IVYfjM+8VDHZynUT8pUlpm`5|eO zH91UW@|pS4ama2_BRsmEr|=o!f+Kl#xB^Hje*+(lPtO53;1n5>e7z_$G!ZouBLEc@ zh?y0boW!4&9Ds@xWvI;#uMxs|EcodK*a}*ywpNYcp0Xm33&cBT3OaLxl zoj>JMo&fy-0BSjp{{Sfe0IXmRBGM}a0zeVabg0fo04R?)#6kF+>HIJV4FfK+39LXh zg9HOnhP%M1(xyQG3JH=;diX^#LJ~ZxGK|Jq%=Kn)N~iipgJ z_~lR_P5>$loj_!0bN&>G{BYKwQ4Uy08Ni4#OnBx%#WxxN!-5(`B5C3)BmSvefWwgj*2oj%;y*aU9E}yJiI4Q@J{7{_Bb*HttkwyqgpUJ;A{FFlF<6)& zMrNZr7{D$hTb79;03?ue9Yh=gdan`{>sq8hBvAN+(1VpE;TF+ozqN=kO$^SJKLQ7a z8fJD=p=ZCgfVmiwM8O6pJXKmwV1~JMf7r2ZcGEJo8F;~@AB{1pN@Sd@tqenx;_cp3 ztYw%Ira+_t&|;<>kMuOpcJ_YXePZRevp?G)IT@Vf07(qKIsSO*t*ciooio7k^Y2sa z(`)XxAGq!g-`nlD&v5viz2)M$L1hD|)3FpXz+1d-v>jC)&KXE4D=7Cg`zzFhyVvtdxUC8m0%&JaFcgaVoNQ z#N^%FZ#%W*HtO~-0jdIqU`ovc6(vYrS!a!t?Zaf3_Gkrw^-hp0rX`~#Bn1aAnZp?z zXmhE8hn-_kfhw>?#u*BAr_Tc>wv{|X)n&vKQqaHMRVoggh#*0pp9~ln@-~(XK=OcV z14f$3Jxo^s#_r!1ywJK-&s@t05Th_oXADilNor#}*K}<-?YrH%bZT6!7E)P`tu8u} zSY&aJ-AOO{nOt$e&|Smbe1|)A(%YL>RJbaKNRlcFwyC5~PsbB&%DTf|Z;cHSNq3n3 z&yQ!gs*2YxFsjzREWpfsvA)`Sm4~l^o%fYfPwM?myW0JkcHy^v<-29!OBYF7Wc9S9 z1bFG3<8DgrxUPpc`NpuF(geUEK$$%;ttm8~87FedwN5DSKW4t)uJ7(xyK`pi zYwJskY%IFLkj9ARq!E|`aeI4KwX&h2Z2sGsJ!tl0?efUCw%5i6TSCkE5lyRiAWNyD z(@-!BPmVg=CCc6tzwF*A;P?j*df zS#+dYUU7q_xE>Pz;q7d;8%Mo$irY&TRI?T$g@#s>z?h74UDmHAkg&L&6WadRSlX?v z=W;UMyrf*W#@b`)p@AQ`xTdZf^oa);TXJpXG*oRv!ZxxMwPkE=(%#<1v7+6ZXcpbD zpo!3+3dL~|FU_fO3(6xnjU<5DVF;h9J_8TLt`LZ?bc!hvkjhU(G9Vlpxq6dnPEbQl z$xw8Wq#BrFI@jsIJ#pAH>bAa`hMiDjr9jSW*8&s5#}TD5B=iU2T1U=s*s9|_!}hM~ zAU2iAdA>wfKO872SvB4fA{f?_kp`gjfdk=yZQ~k%8&{dsX#y3$<}e9E@b4%vnH2&v zFe9MA4do?-IBtL20zd|^bqUCP%`hOd>|w3XAepDtkv)2f7>^7C%y)_|>+*>LnTa9{ zi0EQ40-h+QGawB@3G&d)0J^@)u8yqiKtW6p+f=mH~P`bR@NdQF&%o(7X4>kb^ z5Ne9Ah^+Jmv(R7|KoLN~7gk3q#+mre29t9264M$E7=an|6h1N3&HxoxN|rt(!HKCK z47%U|vjogUDCrfT1E4q{Bt`({A&p{u4MbC?#|tts766*oOlKAO%|2M6N*ZNXU}gcR z8H4c|0fgKJAAq4JF#rh!AF2p3J|yMW2DuFf6xD%Kstif%Ibn%5_zEf~%bAs^F+f3S zB4_zwa2`P}D_@mB^nHwOdEah!JKkHG_EWt!p5$_zM!_ET_jTE$ zh~#*V=-%zDTK?_ZoIcljyMhr}{Umb`F}*79v1L~mPFH*_4tu}1yIt2f$As}d5xu7O z2G?QopT4_o#^ZPCrt@)n!r!*`OM)$?skUustb!--#}>~1-rbcf+Pi<7JGXY;_S$vR zhv0g-?caC($$yb8$7cPM`&rN2?Vn-$b`SH{{Xhwa6EBayZ%F&-FW9ozK%k9s%zTbVX zv+ZZKd_Loa>^;5Vb$9!VNpGF*?pEcSDZlQHmy&-JRWwyItD$~E!&ST2cAJ}4m;J|)C|>yT zTV>KClCADt^*h#TlZw3*FOL$PEUz0bD*mqgaC|?h-@VuVYdAfhBgA_*_Hp+0&wI_x z@jE*_7i)05M;pE4yJv{mY^|o>W3%Hp4j*N?FLu0sxbmpsm^NR57BG}`(rYxc{J*xMcB?Z5eR`)&5)x&Glh^Y2@*ea+xK zvE!S&yT{w~?LED_Jck3v+_!s@wYJ_4BVvw;Vni;6gG@TEXE(Ez!?)*x+iJ3_pB%~U zm$BaF?0x0-d)p6oc-ud>*?WoEd?$6KUF9Q86LC~mJka-PDY}$9U`z}4qk`~ zk}F=hc;JWt0tn7bWz_znzYG8qDF#XCNE8G}9dLjXBx!>ty<`RYYdHci04xhciq;JE z6w9U<4X`1nC?o)9pb{oz&s;e`QIkCYs1Yr^!S<&0cN>z+|mH~;Yvx_=z(jEO%=N5xxaO< z-Q)Xm?(c%^6(u*k@C~=+dz1#!+kQ5J?#qq1x!s*t20%pPmvYwKimXxoeWdeDszkmz z{s!IPJ9muj?S|iv;`X-oyIsAomhD;;3O`dmcU_5+T1hy~V?e6H=K72Ffi;K~11|y( zQ(41{HN}-K0ScrOq|HQS;abIDVCJ@yfZ{9$G(89_;o*ws$D1RV)Dtp#35d#iP*)I? z;c62CAS_C-KMeC9&Pc)DDUzD8KxrSBQettXE3Bc6y|C=Ml(b6^i5)YE{&=+2aIhLM z^b^z)B=`|bsfB!07!7Tyrhw4RW^?d^Tw+Xi0OO-oywUup<}k%&f+0aAOzLl+gcCvt zCNQ{(XhOSTN|gXX)Uz`_5u8RU+&l_Ox}wo{Y{G<%QhuQaNb5cVFjf|+wiwZv{`Za- zfj(h6jOl>D^!#Q!Lh>okK5aOJ1+0yZUYv^=W-Ek^BW+>w)YDE z00J=n_Ts9eQnX~fx45~cETiWK%IDpW_`CbE`yt(Ooz>a9IR3`&-IJg8r^Y@z4DixX6PcgNH9nI5-+t@;i2Iu1t#aPXdyB>M z{DN9n-*$f_!-nskF}{~g&jGw-+}}%12p6{E?Wc(bFy1vBP1V$GH!YQP zkX6)&kXdRXXQ9QqwURlwLz3%ja0pcZgCnl2=ze%niQqnc5=7B-Y5*GKXDp|s2jhhd zyi6@a4{jjA=zbOH^YOr&T52Yf*FloubqN_9p@e2S(lFfdACaiwH@4j+<~nVHbc9(P`Zo~2bQv98n(02Uy zxLf_GPu*Q@0_Bc6+5M*1P!29!8iL%qwvv+2-BK*$yC;MEcN5C@2JsXn+xNE@KnFp6 zcP}tYYBYm49_v6@oJ^$D=El6ri<Fi~6a#Zjqom_{TGz+^I5~N#)F`B_nd7VQ z?D0Ol65iiywAyTTJ59G6$MO4XJbxL+Y&Q0`oOc_s+M?Oo?6x~Sx+RUK({E`)qAG<0 z<2c%>Dy6~)%Be+4VRmpuCE+C|N`X;a{;22xKaK#cxJos7x)ah48hl=a+FpPdFh~*xl_F`= zNi~x=nHsNdrI)+7E<3rq6Tkaoo3fkk7rDC^yLdiNWq(Pve`CpZ{{SPk+*@=a8C@=Q z$_6fv&08%~Cd&@Fh(9I|ayDtj_iu9X+jthX9M>twZPUu4)s3d|?TtbHnTvUdoL%DE zjvgfI*}b0Hy`@4%tJ~PQ$Z|F|w)J{pg5Amtv3)*Rs0O5GLDvngO1n;3wbwN#Q@+06 z{k`D3i@5gJIon>pZ+2H2{mIYSGHvg-cFK+?g>5E_e*70F^n;AKpERW_zk$y)UdDag ze~tdtv&VgpdmnbqrQ5G@@tp5=wVPlilsx|cJH5WP?4pHLMYf6*00lA2R-Wyz9CBcl zc^BjPog>_RkFwl`54Ty;8E$DkC4mbh9S=yQPB(j&Tru$g)fOKUmb=s2Rk`ZiZJKHm zY%?s9hC{O~s=d}GfS3Sy;~mw_Wn_&l1%TH*x>&FaJ{PBhQ7Bpg2vj|Xg+iRtrq61o^3=4CQULp=G;z} zl`wSk^C+cUwV3$rIIrBFXn6i-VRLECahA7M?~93Vb?E;9?yRUJE2{#!2$%tc5tU~e zecPn@BbOfwD#=iwhm`YRwpmJ_c?{m=VN>=^m`XAvwE6C+qrF)nxsKyY^egi80xKP^x`iQD%tWD zcYAi*a#oXnX^MpX#l1$_AFXZP{{XqK<2aj2X;VlWTz|y2UhOV3khydHmw4Mf#kDiG z+_L&ECsLbt%qU`L0r9RY%(c%FMB)3V+%Ii;8(W?)eaZ0bj3KOFxch6091sn#O^e9J zCovh*5q-;Zt4p82n^v|?RI{Ww54r9?xJK7!?iU7&eOX8U010>`U9RmI(J$ZHEbZ?w zFxr4ZBjbkmdGWZRNsYGcR;@=I4}Jc^Kg++ppKjYdpKRRjOFwWP#O*EZ-*MVJ=IY_@ ze&5;~me%s{Jca)NSCry!ZFc!ue^+i`WHFoBwJXiFobmDD;5u5)&0k2=`q=wr`?>ZH z?(enjcOSDo+iQ2p+uNo7Z?So1O_z9Z7oZ#IxZ|9IzuMYjNA5P^t+aH&ug&Fne;Nwa zi)FTsm_VpsT^k@8WPHbt6IM^WROI8Nj@V)(GwKIEku5+XrkGam)U=yg$vJN7jXq%j z5TuhzochO1Acn{7T}jX&kyAn>G?Do9`QoB6EAa~XR1#IB5i9_Jw2q%oN%`S59fMzy zBHIXbN>KC{4l^#Nb*NXHHqutBA7rBBE1Rg@tlCmt_CsNXRQc1&UDW*e>?(VEC4~F zHIh7h7C`)PfrvpBjZ}#=1K}e8ERI`H)g%I76*Ce9nE8Q*CyWLR0124VIzj96{#C#s zQn2wtVELc{0z^#3Z~#GrF{q?TgP+4X8~_stkVq;t_|l(@&s+c?Q6g3vBuAA<8T=rO z01j`cEC2u`b)_fafB_3%G%t-o>E$%|n7{zCg0tZsZ^!D>m^F+cqALR=i6f_n@ue{E zUW>j4m(EH9q=Q+J(zO^SNSPaSBt#QQk>!#)PsVUSK^g5zn!zL=l!|<`O-v;^±*@8b0$9_ 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

sW#@uZ*rb#q(&s)iZ}M!D+R(^(@+m_0@` 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 OO;iRIaSb`^k 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

sn42cKBpbga1@xdSgGFS<0#dA~e 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⪚#<@>Vpi%qILv;bd3B-?*$= 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%0Aa{y(^ivLukjMwy5| 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

%tHmNc*z`(d=xxO8b^%cufK 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 z%0DspN2~5`^?&fT8|A9=eE9wcEpZz!TI!enVUZHF+f331_`JbzQY_N&a?sGpl~ zd0mw0b;&K_Ke_4$vb~Dd?Cl!%*Z133(#)HN7qo8D<*!sNr4hTiZCo7!CVGj-to40E zbZV{{=l1HBu`VCusp}uKJ+*4Z+XnTk4|>qCwQb8<2FB{v@ikiC5~=|^Yk&eP>5ncw zcYQ=YCz4aj{{ZSp^gpn;W!10`Wvyz zoHGk^TDZ{b-rVBt9fhqZTlSP~!v6r?xoqhc?lUxLWMKqk2hSb*J4*W#Sm#XOyr%pA z04~#OaeEfDRc*EL1nt4m-B?of=ll)tvj>yt7^!8xw1^QEi&o zMpDh>RxBESO1S{Gm7$z@Www&?tbV78we2wGQFGhvRgRmg;fe=Epac$t)}VCGnAWO| z#o;)|aW2;SmRAz-V$fHDhU2U)@~sR6L3ShRj+hqXt@&uC#%`(CnYgb4yU+7(}*}bF(VqP)N%WHPUivn9Re;PL3B?QUgMykYLm@h?6H3UVcYwE+ST| ze6Lhf5TeM^5#X!npY4`e1TTFaYtk`aFw~D)|NM-3DZYH3u+Yd70co=mg-K?Rpxw3+f6S!Y6eTFy|`pD zK^j3_GQmc%qyR}ESL2AK6TPhtM|AB~R~)Phn}03eT&qGQ{pzZqh$(gMIfW#f;1PsPzMhCdAl~$79;`siGT==K81e_~KgcZhd2~S}m(r9UK^4MUaKH zG?Y_Xb;ljIIrVD>oT|9)G0pDu{^9o4!DQS*l~5K?iG4@C+B+p)D|rL%VOk?Gz`1bSulRwW_^WaB&8tE$ztNY7)A*WM~5)W4~4 z>@ltW>fvjG)$^-#73_!!p;;ulT>9-i5-E(gY}XvyL#J)kr9V`|W(~gIUAEghPob@- zxIC;`*lr!I>$xTa&zqn)@w>OZY^y1xbjLHYHFr6=xL0_Wu0N@562{r!9Y*1e#hqdr z+*(v_itNg%Cce#+z09 zo>iO|YE|X-$**@Ck!h0F(O>uXVMeIHOMpCBnz6@yGWE_Upeb-}kZPyH;?9miu%)6xWzh19q@5flwt$(>gL z26RlHhBd8S{Jp0otfjT7t2qt3T(NfI=@%03q&-LTN7N6L5_KAY*zDTde?_B1gMV>i z3{P>i-hSj=^-Zt~g-cZz9W95Ja!!IyRQcnslys~&#Ngh&Z&_K+Oq;irC3lOnzV{1Q z(dy~A_b+ZQHIP#2EjEi&Nv3^qtEU)naJ$Ycr13h#v9`^|+1+x9w1(*xiKZ8r!a$ovXlKEa>DBz1~%PmgT(HqWXW`-TwfWyVl-mAWnY) z;y>f20q`ggNP|hw!lS}+#HTad$!+NYOacd*xqeV1D8mG&P)iu_2RZ51zZ@}J0EQ-! zl`{C}{BRR8I3$UtQ7x1Ml#**F2x60*gd-U@&%AR?^Z4F(9mhXW)Er z1UM)$pM^fGj&mJwn3Mbp)&0VQAfU%mW|hhYC0V=jfSQ0L6Z!uD%+owriZD9-W~M$G zOp3+!6>8R# zl#oUk10>9uFjfGZ^O>p738_)sHljQR?l772YFZhf=}64e<4g+*8C7wIpxZl>3TOaU zB%02DEbyG@Epp2900R*V=8(i3@)AChMhIF9z*^L51erNdABRyt%MB#4z-v*t9Z4_> zkSHQdPE^7BG1)_fpbe&weliFmv^6!u$V+;FLgo*{z~|O8oC!moEUJRcU;tvGO-*O7 zhFE0VP+LqHFEdK`2ES3kEoN{a9^gShV49dPCWZ%&6PBSs zOyFUWSeAy?wDTG$_(zQO#&HaaI^3LGc^k^rib zdXv_MMj0~Oo*>J~CcQdVPHW>qh030-z&16jFi9rC!_GnwGU)%$7AVy}S z(0qJg#tv7j(3lvk>X@vEHO_#JqZMrzh}5^83O8s0ip?Zcj|$F15bY}^I`#k?r_BC- zA1p5rO|BT?HeI?z7nLhUQxt)X3yHC0D5ilhD$nt_Iw~6n-F^o?=0j zFfINfRAwhO{f0wJs(`$x4tQ zg3>3X(@(-q8cp~OSL3N#Spb-xzY4)ILF3_sG}_A4YURda zG}KHHSeP?G(j>+j#P|Yvk-dMUFeSx6AQKZ6tO7AlE=@U7eqPa|a4djjpo6GMsSp&5 ziNcQE33YNZ*GO9DBt)4$J|qE$qmf2{2#g5+sut=`m<-ej z014@Zk#jev!W|4KgydiYN<|~Yfq;0nM=h1DBroYQ3F|bOU&j=IJj4eEV@iDqil zRu6>YIkSw{xGkRpWOkd2n;-)X0ZQfwAQO=AQhMXaRrykS!J4vb=3XwqVn`G-6zB{_ za}$B;P|e-IwYO`H2-;`~>+FojuaUa~^Da0*QR z8P9>Bk)Pp-ftLHO)LAP+K%{ld3VEX!RGoxGcQMy0nt0RmIK9kQ<_l6K%YX?P(gee5 zVkwuDc;h7VBV-%*1#*=TL0s~H1$;46ffo0=CTS590Dt9CiEMr(JC_Vh0Y6o0LlX^N zpkdW3OoL^K6vpn)J5nUSA~!Fx^wTrPuB9-yBnAy4AHYts@ONKD!XpXb!X#UgrxI7MKz z@3+==>Op-ufCLjDXBn9ob*p*cONfY-CK<@`2JzCQ=mvsKd>8>!^6|!;sz2@~%_fsE zy~WT;m1O`PhrmJd*W?e58c@4NT5dHUmSlhekTN}BN{Kydg}AXSXpF`I%USZO$Env#Zz3W%D_d?QMO4z{5Fref)M+$0OE`Ey zL~!AphBOnZGjIVY<2VLK$m32;o zK4TgxsSv}0r$`Jn0_sZ5%Jf(|eBCLQ8?sM2ffT7?a)nyMg#oHq$bwkJcw;u(a>fB9 z6)PTifXXLGF{Vj`f_@W(16O52$S~S~U@1oO%|iqS<$w^{sDjEEfD9;V>IQWzg8&@s zgjy6@)LKJoKUkFm&DI)ddiYZS!CQKvT9Bjxq_h%pW|0I5uZ92+?X<~0T|y#+04QXc z51x7An@*`MQCzqpwX|^oj2YC*Vn=`{r^5=%GPEJ7BKibrW|fkp7#?iEQL2zme; zSenQN%_}ZJfE2|Gc%LW)jQR`{oC+{RR*gkL0Ni1yh)}9XnHl(eu|g#!%|I&x8!%Mr znt25O08~u%#I!Y+06R;l1ZiO<36jbKDOykoZkga(18IH(L_&fXY9ti|f+T<=S*g-K zSg+8T;hd502n4eRV=^?$TN4>Xkx!RQ1zWI;^h}Talp| zPLK#nnIljnu99a{e1GMGMg(&$4WyE4Q&1zzN)QAPdWuNE+__*f{+h>`nZcT|B$U`U1qU;?Hq5@ZU&z&BMh#ExqaBr5=DzyN4K%&>4MJaE&>_+Xqq z;R{0gjjAc+ELHSB)DMIKPmUK7yn99pk^wCc%;3mAK|sZ%03R+{Hu)9ZrRX7O{!T#G$S&j z5kMqJS`&N0iJ>LC(H75=}pjCCB1Na;nv!05~jL%b8;&l2=O_X@X!*nALJj01YvA zN@t9LP)jY^wveg;rAa<;zo}_amImsjEkHE5!M#F32^v68sYxM<$$?+|aVt-l5?CpQ z^OF=>=+0quz$`k(HM4~=EJONHfYwM=3Iu~8vyEOL{#c9FJlsZ6P|l?4e*(|}5`3`$ z~ITGy;-jKcx>3_Ic%07Y20py-#Wn5h5>Dic*fjORQmII;oD zkEEifkhyQFNFim3aHdL_oba4ZGy;{?0GVRinrG@2B#4m#a_|EJ%Y~>4pqOQ<>7ua( zV8a4d512Rb!3_Z7uu-NonA8IqnV%>%GEM}*XIrU~0IUHc>0XCC!TE!SRPz843z3qr zKeVIi6Z)sk0%zrkh+W`0tw1djt16^b$Vh-@&hCFnY*2&rkxGp~{nrl1c>8w1E-k ztzd~H^(O!dq!MYYX1Ylo)4OA)3?1_@*O z1c{&FiA$A29=RI|q?(k{XDQM$(%BMct|}hAgv*^UIdPRhBgTxOm6kIEkqlZg#JbMC zgBiPNS%uaB83kOQFsIWBBuM-)z;@dkV1l}uMq*=7gI=n_k$_W};tr-DC1cFVSb%E+ zexC!=27@UCH=2XW(y%&e1V@ww!vRN~fN9epFi=4~1d||$>U!a51A{`1HS-b}5dm~T z&!@zLIF3}<(~UJ8l4NSq3NA#D%>dLyk>eO?B(PWv>oBVYL4sx?q^(+Nd^~H2{{TGp zlHV?zM-l4M08%uVDiuV4-cv|l8se<1vtRWiyg(5EaG;%fRDmF=Q=|r@6CaiueBL7s zt}VuCrj>^Pc~*jo0GR-F!39c=^B=P1Zhvf>YyC_E5C>NH9+>(v$vWpJ;}mTzG&YB~ zTf25S{k^CNm(u0EPyYbN8Ib7$1cG{F);)V^+ogBb8a;>6Z%TDZcJVW=$wk@shq(M9 zRz^Ip9naZT(WdR5M`*TgT(l$|0_~qL@yDj_$0cv_`JU^|=gO4`+T!9!Nz&$uDN+G} zB(TRULD1hQ>YsY`7 zuTa&Vu}Z-mFcThW?i7Me1k4Pl{{Sp9E}t^*6G$MT`2PUTX-p$gbc#@zAfCSo{4nPR zR$gT01S$;9sRo0_d@zT&ldLxZ0tq^2r4LS(IbiW7t~19%sWg%@j{!8wLBk4tUn3Up zjfeZ6Xm=LG0ABAGxVvsaXuG#ldeIT|w!3-aw*I8Ma62@uF_-uVl9h0@J4lQqa=_72>vr9^^rJ5)@RH0KfrcEh5+O$r{ZQz z%>f@A@WXFh_69VtmduiANP$f25<1`>bRSS&RZ!X?e9nlnkV) z^5ycc@%h&Pvrqm70WiR~h@60#Wx!f$%2tI7AjR&z5y@j;ADD5Ab1REQo@YnEW=_}2{%%b7yJrkRSKqo5V9fxyJAjTuDh9$23l zpTrS32HdYJQW%3nLInKh55Q_;I)Y$Uzlehn0GePSH3{%Sv}uzDG9Q;(90b`yg5Iak zq@N#{&MI=R@x&SMDajCHIxqylCY1)6=lS7+>=@J3X^{pps3#(FI7J3(L0JS;(EbCh za0^XBt;kXthDB*Cq><)1fjDX>Itil(_R&tuVb5^HgZ|UpytS(-`j>6Gx_36brn-N+ zYw*VVnMu`R1z)MJ@q=I(C(R&9iomGI50J(nIFKkS6P0tH9KpjwK$(%0cnO$~oecQl zFa|?vRS+NwLFrf@95phK4(ZYb3{5N2J~f;GNwgtmGa3AegC{)tVr6JfFfraS^J}($HKHzt!8K+ggSB~QO)MG%bMa`wu zfgrJE21nzLm1OBQN>eJ@SHYu9d!5=Q{foCY>gj&P!*GUXlabiKSGB#_ri+%`ET!ZcE^A{aD%U*5K6dvv zqi%XvTYaU9H#O{z-M_7lCS*u_Urm_Fzx2e9Zlj=?wxC(KvZH!_YOnNH61bQ zyG`F57vZcPcbQCTj(7Jjvs;+k@2&4P=$425mV0dOgn|OPz->1a#X4khO3s^+R{5ns z-D!CE!P9?Z-u3QxoK^n-X?vS=Z}%r)Z0}v*R_PwEJ?+=7mhbGF)N^xjyzQIUWdH@g zY*+eDKYjMEt=HB4Ia2mt^EN80Zrd#rj^5UORqkI${{Vs2{oT5%^t-LP{{Y(fuMR7? z^=GpAU)XL38uvxbo%I{8HtB6kduMcpR0dD?ER#X~IQCt}w=3S3hpV_u+y0>XloG93 zB0-TNBcT}OhOj2o%G6Cj)S92ukq0$2C!oRlh#gE?02Haym=*pcet2&=;vsc0X6r#8 z#7LP6NfAkgRLq3eKc$N>3u86cAbIt->pQ`Z25 zHJB5T2gZIm#c%+lp&$l>H0Uy%qbd9_0YR96r&m}cXC`EIF&;Q;E&y?f3ZM@#{ARQj zGdN4~8+c2w7S$|5(Pp`ICIIlIa0pTwgc%S>gX2juJU=V~D2Z7Gh|H5oCTe^HQkVu- zlOW813Dp_=KO=xZkYErXih=}&9yEevoK;#_W1rBeEI@z+$!>y^(8802W}bksQ9ffK zhlIe+Xe&eb;RABy5lR~W08J=OX0eM&y5qD%+QUYi`hW&{U{gN0jW9BZm@}6`Ks1RT z0Ve=JK!Kco20`gSDI{RxH=Zs*c#yp>PXd)9R$HM6`Dk008G@#Ohg(GGZH%dd@u-2KrUl2OamgOO;45v2yA6B zkUY&mGl-cQM@a-65gLuO(tt>D45CleG|3s{XE?wi&{Pl(rqpJzB0ovhlpF(E!r~c~ zF#-vsXH5QQ31lpq1QHr@@rd#LQ%YfrLBhn70M|NrpW-lwGoeIutihQ0ML!w94SppY zzX~7u_}~s14t%-9jO1sRTrMWd=*M8oCX^1Q2|%R!NGOVOR$u z4j7oE>52NFk`7>hI35@Qpp~^#q;;hD(zO@>uQ!NTu33-gfB{w|#!QMsw&ZKk}{; z)Vn_`@ESA~kR;Q>f`1%Qghq4~MF9h-J!S}uhGY5D1AGdqYt6uRRE-s>tss-qm4Gmc zl<~k)2@xWrr(T#vH7Yobs4F#`vOoD?ZbeGE%3@1u5ddoZOnB#qz)ikx#UsFg2qVo( z^@0BYhfE^%(?YW|OvGjv;yh{az#YXO04Kr@bn0g~7z6bIh|3}=5!bI?m>^u)f`tVC z011)toCOOVbILp`(=6}+v_CGAJboEQ0SQx>KMx=LbHEdj7#a@~(!ZD(Xp88eRmdL* z25Fu^f6oKdb$(IMGnyWqGVxJd@QQ2$HKYTd{2Z_ZVgXdl!IKat;&Y^7ypvVR<%T4f zGEEQ0XebX;gjq%a6wYgxT%ceQ1i(2;z@1rwJO|-`O+9!3WxkOBRFm_8PmUg%lHWcm z5`zM1TGOx3!wKp-uP=Dyf?x##rzkKhQ}|#j^%@}R1Ou4NNIp469|Ja@H_R@ue<+}X zH6IKkP93>&oB9m8t4niq3IxM5MoGWFiD`SL}wT@DLGgn?)UpH zGQ;k<4c(od-2gtV=Lm+T6=qA^IR#ptgAN^I+~BZebeGQYl=LlIm;(#aBoW+ zz2XP%K5UcZ+xGVey0;gvU&$H?u0s`GTDQ)n_IHYTu#_p+wBqjU_iMbn>fY~(?S8nyH(MiY5l-`?t2^d zzh{x`?$Oy<@1Jvb7X{nhjoS`4cdhcbmq_3D&v0tH`x~s_HkW3)^F-^90oHo1&d)Vd zoyhIb^1UyoZ}myq8lrr7_#Qlaf!@CPeb;wa8N2synB+Ni-e0?OwEddw@p{h3W)00d zd-k|wy6bgpTX?;`-ZqsAO(HSso850&*5B>){%-yUvvj_lvC(YR??!dwnD}21b-%U$ z0BHOl9yYJ;cH?clv1u%CcK+G+?dNV2YRWCXj_>7yqx0LLaWy@wX4cx>L^NZ{bY7C^ zmhSw!r>y>mFIno3cE4w46=Q?bhw639UEl7~#|zqgb%oe%t&OhBZLr&>-+|bRCqh`- zZT8mfS==_=6a`oa2*|~J^>;R_Pq#|0WykkCBeUMCd!JJL@u{(U8`{m*=a3iqi&wW> zm$z=^ox{4^HxRy?mi;#hEn2Y4K!O3O#8q2z+|FaP=Ul3(EHkY8XR)lR3!k(K>Ij!n zq<~@|sZzoye=KgOzO^kg3rn=l4bR2)x{G$_Zl)BCB}A}Nx>1P$MD)r=G*GJ?e_>ko zc{9C-3;zIaR6v20X@ii@R#D-ND$>BC9qh~YyjGA11hFPd3N$o=B9rpMtBrn=Wkg1W z?#97noN=9UGIB4FkyVrM)|G%i-Zv2(Sz0YyFrgEC>MLjZNfTP}Es%#+f{YM%lQKoAK2Bw}<3 z9JjZ*tdXlptZ7ny5NUukWcw(}4I+RT@uY%ISO;X*UW4%7P)54eDWAZA2(AK0m1FeN z{+^IJfz~=;D?(UIpw#?wsGp1v;W$E&!kLdS2R@%jnSe0CL)Q>KfRG}As(Q@Obc&1u ziExKPprQJx7f{N2K%dJ13K3i>)h1z}X(nhv&N_Y=03eK64x<{2Q>cgvY2s^uXnd^s z$kj>-l0Hx(py8UW3K~w5q9Sq?gE?nf;0W_bpalQ`!U>bmN$DBX;1jEF0F44BR;163 zAjyfKz%Kl5XrRtI6HJ8$cm&gH0sz2~@)H06B4iASCjeDK zh7y7#7^%)6^@xnH3_xmNL>M$R`Bs9s1v!BToj`~bBDMJs3XB5^DN5z=GCn>y0H}$q z)~1>KW5)mumLlRVmO6o$`c*_#kBpjN6fn(9L=bbF{0HNJ8kq4D^*}Tu#N;!|lS~5^ znxeT#G>(u3a0!ZL1tj=*pU*4<7JNlXAMx-LfH)01lobVl{+!HE_*Ob#Ce5s%m5T`! z3@8tkq9-HQ0Mkz>O*0BYz!?!Iz(?ht0G!7Vz=+QyJ^%>JieMPDIl=4Dh#4Qi;0Vl! zOhgIz0|ZCQI$#2X%$%tM@RLcQzyii+$HV1-1(EYpKl#=ZyC* zsa|GjwY6>Qs#jmw!#5W$?`}5Y;g)tMKqRfJbLF;!AT7t@YmW!Ldv05qv)cMys%%q{ zD8{5FTfv^RL#Ae;DyC`%sgH&-)yd>A^V&?eXzD_3G13^T1F1$urn3k?Im3*17&ert zQrRMJILIvQ?aaGUBDUpyFv0%-xKHT@A|XT{)l5${V868azw9Bc;OMMaX&{yY zYQz!N2m!id6y;AAH%?aC*904vm(W%XP=p;>kSJ0`Nf;fg5}r+KDZ}pgW;=6mrrv_a zZ3jM91I$dSf^rI{9307|UJLSPZ8n>}lD`t)>jY)E?WA0?-m3{dP(e_7`iyfP7|yMI zMy|Msm}R==^fk+xk(Sc8sceuTgF>#FW*AI$IL6s=r8pfl+vTda7%cbs9SMC@GM2bQ zTu={~GKwFlR7nw*Iqho0nbhf2R*aVa0QUthZ(F=x!d_qv(m=W8oA*M~>t=;N3}s!! zpEX~Wc=mBLdwNzp#0&fTZK>@r{^LFM1&BY}I&D%Z<|aII#yh)|x6y&uX3?JQKQh_M zUfg<2_95K=0CnV_J?2%?k|DH{`Qwvz*X5e##{Du*{ItJs#?jHOqTRO|jm2s>VHC&{mNe(xNh!mB z2pwpjHC78{{r>9p(Y-f~l(N??2Q4=)kYh#LEA*)V3Q&wCUEXE8T@h>Ss`9j(diQ+G zCGJOicXGFG3s=>a;L`4v?b{-Skese4AjV|;aejNgZsSk4w_5pSKhGvVe}8*Z?fo{q z&2X{)>?WdfxQgO>m?o)GR5MMuo0DQdM)TTtf2a@s2Na8 znSEeTDCtaVYBuLgXSA9x_Y-ZqN;UrgDSveBX8zY|O^eQMZ!Md$eK{7Dk)6P`p?VzK zGfYLLwCScK@(JzMe&f?Z#l641^t3kUZA!GWC@*&A-q|l~U%CGPYUQ*5RLnLN-r}p4 zkqJ^|Cgi|(Tdl3jV%>|4Z0_4twR?8%wcCVwm9HynRBMOnAwWMYWhtc5ZSv*lS*`A` z*tu&?&u6&2FCC`iab*azw`F1l%bFNVdSK~*LGheY+|sd$Id`ox!nwz7Hw%9D*3H}d zrn&~)mBZe&c@#E z;eYo#k+=0o(4p*x4#jMSSyU0`i6&zeO}A9+l3n9luGmvBHM-^7k4?qD*(JMIE=AY5 zx3X_;Zd{`gbQTL{0EI!8FuwgOW}0njA0L6&O{HY4-cr-ECM(NwcI_a0x3_M@dY1qU z5mDFsJ9`Ak03aI4gW+6fYd#6dy&*GBbG*g$MZ0BLY+SncwBKg7Ew#Fv$x|Vs7Jja{ z;`7@TTuz!YGYp@s;xj^TJWMxv%w4wk68+H)STP?w;$hvD@9fyK4sJgMZX-RedXL5Suoxg%RqTo>6cK zCM#2jRP!fkONKknhh?{3Ye&rBUva(BJeKEsZ8s0Nwuw(p@oje)fpwSyH582~=3)%f z9>vo17u<{0C~se$QQ>;Nv09GF!&q6z#2!xfZu;*p-hI!%yQ=lw$1!*tt)#h2WLr{n zktP89dso|AUH0>FXjr$qy|zc+C6-{my_+d%t|@Rl=nG2!0Ms$- z{Z8$hY3cc%!_sWl)aH5P;{O11)z4^qb7i*LZC7h?eLcq4W3BGoRrK6CzzS6s?ftoZ zO`yvIQfLRSUvkMh>fMhq)9kA*ei5h7L(*?=_)YumwwudsxBaf`UA_5G-leUbhf6!v z7MKHNu9&!iL1bA3K^XBnoT^%BFYb9Iw_2#QAV|$+fucqg=46)`S~M>Sc8@f&#fLDG&i381i)6 zcg#)?8@;_++EbPJ86AzWw`g5UYZ`-HO2WU2EWIFABzz}IP`t9J7!g#&@gv9@59DWCx=x`&y(Nr|5fRW0S^ z;LNXHX050CmfPer6j7xW2zD%BvJg?0vI$xFW1oGySCy`msODIfr9|OVZBa^k9(rIZz7WUha)VNvf-|hC#i% zqsa)YgVK5(Qhi4&)=A3~_c@+;uiUEAA!^fe+(Ny%RTmA%luMS>E!1H8U^r(cfJ{a* z-b#vY<(gKFxJ$IMT;E$uX8R%j;~z;fbS}jj=Y<&1flOofYst>F;rQqCFYVfSUaN^| z+;2^Rd^1ks=t1c_&!nMzgjPYg7c=q4t=i!4txc|*geRsN^x;=}P zNasTso6?ZHzcQV~VgB%^l0cijjkNvMORNOGO(;9U<_6u%-f82Fo4~K$G^AV;@@z{l z$ZXtX<2?V5#dqA%*;KD0H`aKOk$YoFvzcY*8LUXgbajQ+I*u8+DCTEeS7HuIB!oHR&Zyv1BBB5`dPn$fy^LS}NNb}`^-3Z;Q zrMBu-U%)>FuhhgC{Z!s&Kr(UmdH9TD(d!bHRG%p?}5v_^Xb3i2cB1)~EH*55Ee3 z4TrDne;y@2X3|FTuld%Xpdijkbi%J2c9UavY@a9HfBjm^9`(XEYuwcedZ3YPlzMem z&>-XFoxwY^j!E)KAKBT%(7}CUR^@I_Ve7A74ySDQVjo?`HfP=65A3ol?@M0X|HT>D z=i!#T5qMQs*U4k>dtjXSe(NJ$d7|#4M{F4YUP$mPtIxb2}tbM8aQM>rEDpxUGZA0j31#Eql%s z5e|?*ScyzJfhq$dg>VfWmZK_Nt6*Lg6}Ds(5G_ZmrE9Cg;)z)=H?G`%L+JO9G>EGl z6}#V1q+eEbdt?PbXsYR>Q<>&z>aW@cP-pTExz8|3=~cWhkV)Y0VT#O%P9a0YB;CeI z4w@lZ#gh^|?wDb|%02B1?f2&SKA6Q&07vrgjmU@;ER7Omka>iBc~GPu0$~d z=h-xUP5vYfqcXS@g=$^LV9_}om?GKH{;yeA;-0>?{>r6vDmMwYqHp>`g35g*U4@yUPuSJn(Q#%JhN70qV*ZMzE(E{0 zACw6U!uAkYB)uy;*{#b`Rv8lw!Bs*c)GW$)GxlO=jgXNMD9=be)A%^>t5NG2;Il2k zGDTHq8+EEeWm(P`5y;UTVJYwiLb0J{ki;HLjxKT*P19)??WEQ-(q$E=pSs}E;1n`? zl>8~yyGwS)#qkK&@;79z>er`B*57!F%1XJ6FsjPLGx~Pl7x1!W*)b*KH)>u-XYsvb z%@VDKIcX3i>uW1MA`fWQM|~(!Lyua9;(d62qQC~|JW+$MRzEOap}8A+pv<%ml7!4} z6lM%uD>vzpq%RKvG*IKxRTYMJmk`F>sEpvVWP*OG zpv*09cH^63&c>e9hm$845o2Ey%yG97PeC30rs}vHFeWk4KcD6(I)eYYm`goMtZB}J z{8x_UU(xww_2w1_Ac2BJVK4%Pxj_6RlCUyYIvkA<(xomgJw00mBy3XvfStFziH1KK zHDKvMMa_FfCI^ZGnC|fieHe-31U5ZV8hrmxhMkNb>0#F}u}D+0vq-DutUBgQNHxg< z|9vVhVl_D<4tPi%bNRkM;-6<))qLlpZD?7&lY-$zMWIe3y<@FAd)Aed&=LIM*s3(Y z#2R)UFIH03cNV4Hy=_Jqf4nNQ4%tti$xO8Eu?MF~z=5|3LEM-lHk^$8uQKhJy z>>9MnI0{(`mYuiQ3?r`IH-G#xCS>vIq&ZPNZf^Hv`bjR!E_RaZ#q}XHS)SwaBDHc_ z&p(H1T{`Mne#EmMzv*g=r7572GY}ZKx%6ukHY=!ugp`2_$xJj)!pMI3#1C$#ZeTC) z8?r`5+zEvVDjmKk$s7@c{Q9QA9!OQIE$65&*w@eL{s;e5SbScB1A9!lmyxF%sd}B$ zbq`6l0FGIDwZ{iMH7bwnaJ7$GlR|Ol2+*iseJ*Lr8oMhLN~4c`kG~O3K-sl>RhQ_c z3Bidhf~;l*M~w9dS3>Q{w>x&B1J|?L%we5J`QC3e{tjLV znX(y{C|Bsaq9SytSq|SG4MboXsE;Kholq!JzJRnSk0gz08a(k6 z8C`)Zwknq@FB+;p%5l*Up(fz$d4cmp*C*_OBv>{EEmS9v_^{2t7cpfmz5hASG1QUz1i6O zeA9g-jbU0XO-Mhiq=UQ^RJQmgvc|tGy=}~p6YpUH@|cR7P(Ml3wc0)a#iF8=yk@P9 zaK)*t5S~8DX0VKyq&>d6t!AnNN3B}J%Q6Dq<)=8CE zf^Ra_>+H&GQJqId85;b%$KN+V&~PEi)yZm;J_Kk`lh;pMa=p%rPtnJaz(6>AmC2kb zb15@g&R|s8Wn^0+k9cj0VFv2$*Y9Lj`OLy$s0HdWeOpuuUt|n$taR@t{IO_D#)3VQG-3pNG8%r z%**I^YcJ078g4oQ3rBlB%-(bpqplIwoX+cgAXI(Mf|ItdLl0^2hUpbj#4a!;j}4c% za6Hn|V-K#C0lx4P2E|3ZA;f>M2J@?ZK+1_mYN^-V!l%`kuqbObj#L>k;674VOZn<%r=s{$Rdb zEg}$C4(%{1?~G#FOotbVTc&g?IS9;TR>B*csx3asS{6$Q(A>ei?xVoJeJb>Wuam?V zV-L81K|cc+0Y~DW8l*j_qLnl4X%i(VftZ?WaW7o}!q{xvuhx z8q&+Q)V_)VcRug1g0s0)V(7M}aqyxT>jcc}jl^Sj{Za8nnbd3zSGzmJ=C&Q`jDMmg z%tl8aj?Gzv%UxxZOfzSSEf*msR$QhuyO21!sOKgILbv@%+OCuYB_Z3YGK*4<)U$Qb zXR-sDoxAM*czYRUoV5-HfnhyVm>8}|E$(oYSbPR{B6*-aUO$cJ$zmKJ%xWMgtul7e z%*MWXE)?J-8Bl8ZbIBejDjf`v&MT^~#W5#-l2N#-hGL^KO;-!RMKiPJkdwb$lDFn` zw;$ll4NcLVjCO0?1J>MS zL}xyo9xa99l=^U;6i%S*8%667X>hj^su_Kb19-|bcta;>WDC71uYIbHql_nj>QhzE z9eM8bgLW0oEv7hs803$E+iGUCJ2lmWO5%Xoyhzq#Fl){RcBDrZ6T$D<Ir;AJmr1E|)5v%&_N~StoHTm`C$9nkmuwtq)(5<0p!@WvRr4weWG*7_M z&(lBtgD?p&d@pxdP-zOY7nG(+38z^H9;ca7ijra!YllfNrfos`*V!161&-T7W6|!I zTV!~96xC}z`MFAH=Ch8N(i{Nj*Rbx^v`pb_2hmcXP)t+(y#*P2wvs~TR5>xJHQ$uf zlQQKH%9^rsk*vk(sP}4_qH3VH>Ck}JlgLE>c+hP|z*ofyFxr5NXa z5XE@8Ut;HKB0;=HCvpn)o-7QA4A3-+q3AVa7pHF_IV47KsQ0(1!>>;PLHz!`(T<-T zpqxUUG}NkDJi$PNm8n}*9J;Wkyjx9{Vax&OV7x6=X)dS;b`q)T14opmAOk$$o@#ld zxYYRQab|vNI7&0gOr)B9c1;ZP zC6^_CnZImT>@Lqe_2CGQR6K*Dxm=EW)Qa-&_tr`Jb*0Qzl$x4Fxji}gQn#2Z7 z8)%anEi(;>o29BsMe%vtC|nAre!lS^Aid0X`WW_H0$W~$@<2^D(%&L{-aEI;*xt+K zNyYoWbluC;;)YJ|-f8O~#@cI77 z@3&s=*lFA_KUm+2>&C!fY#|ke)VG zf26A)mudu2N*#&YQHI>ckJux!z-TNHqGcz@9lRK1rAYOhXEvX?f)-!dqx=Oy@0P3uiy z!jAWjiT7EX%4O4;cm${hE6G;nkKiR5_3P1ZM1R-BdFa zWfTzN6=*@)+kJRnomXl`>9MYLzI8}c>Txz?HaVFhN1VS__MWF&$WPiorztNfNtYW5 z7bDBB&79&vm1{&UY+@0DPXv3ZP#_RS6X1A9{e4Q&kSf@hDdIPnQZE6Ow~3lR3txK* z2WiY$YXdwqtg7*o<)9;OV-`^j-X}iO!iIkNa*5A`Cqp8=nVWxHo-WAn7^HqW;_R7X zjfRW2F8Q-XvhP6R6&5G|HODMItyxG{wMQ|Vplibw$Xmv=nA{>>eM)!7asg=~Xl7N< zW$qSF66hHoQpoVsf1;v~+RyW6Ow<(-P&$djbTFB?UW(3qD8gD)?)*WChGYGDt+z<^ z{gi6c$alhto4FM+3^l~gInFvJb*2oM4Dv&mFMHW%lj_iKDEJ3Y^*KkN9)H-sP)4{D z1};LI4v-a-8gS}Ye_Au!%xVFtgXH#uVY53q$JEB>ZUZT#!qe>s;T?x#$?i`#XSM(r-REaPu0W236C z3|?t2lRZhEa1QihvvkSsY?teDJe2JG7&|RA%T!s5LmR^r&G6%{vMsAVZNc8ZyMod? zx>`J9M*UU9r(=Y&ZXk?THfA#?Gqy#fb}#o&RNk4LT;j{fXo+82a|*w?d%tm$e^5Mr z{H0`atLphJQeAq8iAD9b6kuu!XT^+Wzc@OcDgUbf$awfzcc#_pRMot!s>96lov3Ep zSNXR3XEFcEyMstSuW`T5v{!~9s^3*eC9-YQ`%MaJi97N*jIWG@JR$zzrdqC_YP}!C zfcI_vBmQzvlA>G-DqGnkFK|MdxcMTuJn{Y|JS-c`yWvK zn&JG_hx0;>J8h-!^t%f@|J?g0KP$6n;NIQ0);;{ae&rx(xn0$3oZMSq-Iv+z8t@Hd zsF(~a|Na=)v2mkh-9y0Nf(N^QVDjie*V3K9ebbrMnT@|ZNe@r{cHi1+4KlTEjp@3S z4oLR$3+#AuYvCH@Ukd#t`#<}QumF!^3Xiuff7Wk^%p9Ceef6nuNWc1!qZ|TuQcw)e zRqaELq-=TUB0=SpuBGrv@*V=r#Zfg|3IerIkF||R0!@tLvftbt^b_h8=lI zpL3g&!#|e=JsBH!RGJUaN&%FN^iO~^M=G6F5IYe)i8Yx^r(&zlNia8JjWRK@O1_X1 zS4={HWv=BRTaa(+gPd5V6eoPFeIwQG{U8AFZRlfNGNO zNA(n#)Gg13Jw8)OxkO#FS!gx836?eoDW~DbI{Gy_wa4;DgtAUQyMSNBeBbV5Jy_j5 z4R>B0N=YR`!jKX70B>eqSW|^nYJqIMDNt7J7zuS7l=KzIiLHc?=c*%=${-oumK+M| z=L(0g6n0k;Ubu@%wWK#^kH?gjWBC; zvvz!~#if;lGbLYb^u%pfkYb*jY7B@TjG{&j=wj4+Wf3s4NS7sERUa1l`Ti#Z+$11K zuY>tu$|k5iO{qMPnL8n=PPedRL`!b25Gu`2 zI&^|s_#^tWvj%GH1Ftg5)mzG#lQ0i+2V(_b6i2FX>TA}&^h-+f*Y#%Bj`H#xdL_mQ zj_(Y??u|-rxFLtMQz+C&j!sZfb=J0Xl{zI3+yeQE&{~HE1I7^3aX0`|;q4YIXIu-6 zgrqb$)%ot2sNwn$#;XCv@JeZSKbZ^+`K_WeQJ(cvRfq>MIA#e$wry#DlN_GE9(US^ zK|8yQ1V3WZl)}p&@hM4spuqH4XqTG+c`5Y@42e6AkXq>j6*eUJ(d=vV-Di*M8p!Nu@PWxs0Xj_dyWaq0`rtm zER)W-=3{RG`l zx%SyA6+gBZF#|0jF!00x2==oRsdX8qGkZ91ksP4nsjt1qw?^QOq;>QwE^_o^jjymp z=u}&KfjmTjtfB~Rq*i}YJC&u50*$9{&UtAr^A>@O0f$i5rv8*wG)8fP1z1FWcR;+j(tmZsu$M|^rt^>-nc^Q669J`W@dZ);Ikv!Yz^C}r$goG zVDgu}z}D)Of^h|Z!cz=_FV}*W3!NWPG;OKW{F)5F|60y|^ds)g z7tVv((XyX696l6$S~#c^;?Sykq^>JAprT7sd9bkbDq)9*^y|U1k9JpMI0&~%#=O4 zw`5n}_aNTs!F?lUwP?0y5-;+4F{Mq++KLPXB1>{sCP_1e2U?j|zs7vuY?$+3%+gSL z0Ky|_K~-|0_Rm8&QZ$uBx9a7h_=BzDT_-oXLh2TpsYr>m@+l)2MGyja^i4~T|Djmf zPrkyo+p>#3LY0k)25K6b-UefCwz5mcZts~=_JiLS0i6khdLO769sSoUq>b@cx^9}9 znbG3F8nTIdxs~r(T1V6Fm&(UusPxJ+k&$k6mEQ8%9zIR2KZisx0Oz*pS2^gr7)TZX~h&vx!XBanhcmS&Su|(mG2<+fZnlcIw9Mxp#0GT&7r%b}5IpG?kHM zZd3si-!MlOS<9ylP8SGuc`Eq%R>HI;{2QMf)ZP=h7U@$|+=+MxXrMXRE;c~sIyDp} zDH@hcKjF%}N`+ZqSzjd#e*mL)mK3;KS(~WP|4c-=+*3ME)iiGcL?8JcPAtu-cYS)o z>pdP~0gh73%bW86cQdRJJk*{tMnd!oNhtGBB9b`^l)x@|-YD(V*9Vfx$zbGRHpuvT z-s1#pG-v<-CHO-qiNsm$M@0UKzLy+!lQh!wX@aCDf=0@4OmAe zdg^e@LEu$b6-gQyWsQgnw{lRN2alvu1er1u_fK8SK>Om{9$~m`Wu0LdwmCDXyg38( z%JLWGSW@&41n`-T*@H}>G@o5EsdNn^^@f3jRS+7X##9ND76Gv&zWYg}WRodrRbtKB_bdsrCzDbNv98(wX4dhnnTxiX>#SgT z0%BNu17~$wJRCSU4N(#`J-dAw-QAXFREPL%(OxZr;|TC7KKJ_L zB-lBw=UStKvQ(xDdX#(I^ZSa2%~+FQB{58ZBMyqjE{Nut4u9n zFV}lAq`@0+(-&?MIIFtKr<-<#VF96W@N-|KLQd~nC8teRW15e64*c=^ehcUVTI(N4 zHEj}hbY5eNgZZ?H4c6-nmC^5Q^4d-=Ra3iLmvCsCA3ynjO}Z{EnP2r~l%`Y{T8v61 zx1FVC*dP3`!pq&Omh{li>1_JgIQ60%D`5xSP|9>ie*?IHffVOqM-r>i zC-KPAx)Bd6C=V&u;XmMxoJBW&@h{vsu%7LfDj(ask%tC+0UzqjA6QFFclG|cd$NltxY~QgVN+-e0K*&UJ?7OxO zGYiRP*QD0EKZP@}HwVA>cJ^jNkCsY!j3h!Hl690NBap^AtYV4}t&gCDjnV7)J7QlE zV?hD$PI5lmt#v(E%)a@k#44iQU-TY~i@S6;C-LUZ*^%tKeHxZ)+XrIvK~Uli`Ta)$ zt{dcBoOMI%=Sp+0`_pU(xzE)YY(?5eg?oP9%PRP*rer_(QgZ@Y^BoZ8Y>vY-9v?`RvI_R5cz$(!OW zN_D$}BTyfOggNCFOX=1vx4gPeCW-nl4)`|Cr0wzXmgdWm?>}rB`+^TuR8|H+3B0mt zkzqc8n@hIy!GnAKB6ZzcC1L%eVUgl(O^z!sTgL;QWs8OTe)z5U%+2b?!IB|=X?(ty zO_tbkboyw@H2X|3=0}8)y{7Ksi zc5VK&<@sg1AUY}_M1fe+x7_W!ZhN`^H*W92)-+;^IAx@Q{v(xdzoqQyfA{E_*QZ3< z7YDTF_AcZ{Y?Zqv5W{5}U8O8+blOeOq=FNho)S601_AK6Bz}b6$VP z^AX6ZzF}}GR>LfG#2Wn_PcF&-&X9`q|f?e z-MY>a z@ax|~%V+OytrVme_J6zk@zaAF%1JX1#A|kFm`;-S2eKqQr_0RYW9)-5pO-h6e3t$t z3(tI9skXrBs`6ZCp1$th6@+hXYVEu*UtMn858SB6-t;M7x78hz>mFhhN5TaPxSMA0 zWsQ4>lYUJ^mEq>`*F{LD77I^?KKUuDmSh0pU|8ZHx6++*(iWKWIIWpMQwIe`_Y><;#Ij z;;*jwGnmirQH*;dsdjS*>BMd9%xCBZUG>hh13P||X${<2{NBUxu<8Hu?8}#7Po<$XNz~CoZJL*G0_l!BZCNcu1uxddMZUe|eBJ+0FU8C2-#Bx^7d) z!*TDr-g72KPir>FK)@sy>q6%{xwUfN|A3*gFZ@31cQh^+Ma8v^Z%65yK|6YP){;gn za`_Xzzbn**_}!gON=d8*_bCk_I?tJIxua(`qB30rG?(yQLg)6LOAR88Wsjv@sey)< z*HxUu4h79lIc&1Hnq-bB?OMb@Ak*g-G|56r_GHRAR5eLpcuSgf`PbP+AQSSWiK2=V zMeguo(s><=ESThSjQA&IrY%Aqc73dH&(j#q&tAzgc z)-eI8~CQK{7^OSY3p1%*Z;IQpXVK00Ci{L`yRD?=L zCG&JWny#vdts=Fi;}tWWN&L>bRW{iAAF$jgaqppC>XqvxYuEb5rvLk{7eh}C4SVVo!Xm{qDv1JH+uEK5Ak8M0`&$F{6Ob$)WeQg=k{!qyUW&w zx>=yGX(z$Q0wwxV!;_)w%5@yRuKEEzpBshQJ}oaCaBs)ZsbJfGGhqY5&BzEd^A|!D zGth*$pG|*y-O+lyvwzT;c}gBD>vIj1V5p|WN+a+XRRgT8S7Z8Xk?DXN&x}9Y<|XHB zJ-n*rv%B!GyL)zO9&>W=#oy5Nw}qw$EiWeV&8+8w#b|Z#b)VVyQb`6`iwE*^sS;OO zo-Ag2^;32{4p7o&uA%_T#nsWvk?H0Wu>!}sEW`DGRJPh$%x#`T(KfQ26OGUhP( z3ci2$sDJ*2*|Ygyzu7Yv+1l_c{yFh;dxFOOz07E**37T1{z+8a|5jc-x9{@)^&(}n z_IvH3*u%^5l#;$K{yF@I_Vc7JZDA&bxwr4|vu!G|Vj3>q7kBpm-u}hx^P{jc%?m5M;icMLq=A0zL}E8n9SIC@J(IfxIwLmRtb^Xc&7&ilp1g`=gL zeEMB%vmTWRUAd2vbfwT6U*ua`ciM(q(@NfJ6+d|J<;f4ffbj*i6hxhk2PelXL`&mJ zFS}Uk{kYCoU^$|2Ld?coWxsV{XXq4uQJ ztJzr+ReVKqN!^0A_Efd7JJpPiBD_Mr`El%&=P+ktS{7J4i~8iTOl^{zltdCVJ^nvw+@;R;-$gcSPpZKxv* zAv+|?vMUKJfoK94`Qw>0a))MAzY-`Iz}6`EE}gQvv(qsVX!(=|8H1^aX3_~OxKvkI zZ2)XmXg-R=$vXR?g!w^O%o3@>Ne%9z7grULqL?pO1Q-8g&u>jFSpq{bin2n^RzYS2 zG=XMFx^IJ9fIQBEO949Rg1fa^{ilDzyx;V{s}LTdJn_i?gb_!#8I#9)y^0Yon_O62 zRuvh30I09h`EwWx1f*LY0@{qX6mG^SS*fQ9gpzyXjNwmLSyZ58usDp42`tcn3e&P) z)44+hX2NKx`KIypZ^cq~tjFZjwMIfJrH-iTU@6#2BB?g=Az=yOdkf(lzNsOV?ze8| zGB0VA&mqUw(18dPK zOOlYGJsDXFNj_e|vvu(*VQqo0Sllg3gmdrcT1?415=w0$P5?($ET|gI$NJvz_$MQ) z;T`-M3iAzCn;QSa`nm2P=(W+)oU`N@H`?4NoD-pMnaOr6Cn>j(*(C0Ph5`Yrq<028 zq}n=UH}176?)t9ZAOInakrHr!wi3(-uY+el(n&1O?{w;Xu*^%-=M4=D^WI+c<{f@p zM&8OJFfIr_B}TZ#wV9*7tW%mf6W}wjtuNx5ewZ&Fz)_E8Yu9zFFic3p6;zbw%WYk) z)_seAF|G*_s=f0{2Lyga-MYZ1aV$=WVjW6bm~!DOzn-a{JrXm%fHW(`NiofoX&n#P z(%8KuP?=>JQln64Od1-4gk1(hK3eBAr>mM#vQQVLpO>y7wMRQdHYFivhD6yq>E8Z; z@kVL(=juD9xnSo_&{?WN?F6L@8)L3{42K>E!J0}Z><-PKtQ6eK)lnNg=eM)P9nQNu$Kf@`Xiuv8=w?GJUH|Cz&d z*vpsEw5;*e+^aYthKZ-h{3(5!-Wv5{SdG!MY#uDA1wIVPbJNJ{*V>2(dT!394asdC z!+|{q5@AC$$V;PyjR>or`z+kFVvH=LwwzvG`!Gq??fj&=52QERIgmn7&_joBmB2GrHZ;;T}$u<z@8*1A13(az5C4bsi_GI%90rjy-l zZ_>MKOHhWCs$)8MOys2;Oc+8MmpSoK?DCyC5@LRfyrjm!t&Z61srgN!tAcTeX=y-yqudZ?4wb1A2lyaN^R)AiODt3_G*3XA1Qrh9B z#@9SF0cSE6z*_OX>th_bA2TVnU3(`zpMsVA@=mBW=4FODV$MA=stVCS`g0dESH@>^ zgK>iTE7LCpO2)oIZ%ZM^r6h)TULgZk?3VC#lCEqSFk`sn1d7SF5xFi>W&p%86Z?L@ zU6t+%aaWRyM8}U~YM2#1T1dwS#*Ti-Y1v;Hovf;tan&iD0XH~LygGxMy3lZCSYbgq z!_s$rUFm$&SE*vCh55~3QK9=BFZpx)H;s zf1ZfGFCmPLkB&H$&E8-s_O3cyo8tVfJ=q#7V%3r2tQm^vF&7u-_0JKZN}Sw^5PJOW z_8nd6ISAsm8HSg`cP!zQNNV6+Rw~s6^9LBK|KltEneRbYKLBV`=%v`K`TX9Uc_1!NLuQuo70yr_oTm{ma2L6L|H}|GE*DD48_IRd z8Y@}7Eo$r)Sm42TdzX$^7+irjsrW6LW(#j)yB3a@u9gH_U& z`@hsT^i$kWm23J;My<%14qKra4TnQ#CK>zgcuUUuy`=o7iY-aNKr*@DY*-^Doy(5m z{38$k`yPP6OCihF*HSS|H7IDRq5p+&v`0`h2N-QhBmO524pnCcQ7252i2XDh0(st} zceLB6axY3@R*pIf;$qdsVXw4V$JQtvgsiWz*roic7=g7@eGGB6yrGlWIl1<9t8$H> zD)4(jG^P>(NB}V+w^Do=eT?F5Y0VRQrscER2Zzfn#?h?e82^4litLNSHQ%oAR8ATf z8Y^cJvc!5Pu(_x}d2BswzFni`V&n^(A$Sv6Rpp$9J_{h; zw&G(w7NUiH1bSUb{oNFFRO{Y!&poHHE;D6uKOkIQZZVy<*YbyJxAtrJcfid`H0$3PjKMK(7XiGi(*ts5#Wn^n(S00gNSif+ zPr>?4j8go^ou0HsZ1h7RXeQrlTQIU6GL^|s6q}UnL%|Svgorf-z-9QweM1rOh-hAV zWu35yMwmeia5Z3ROrwt(LdmFSm_}V|($9IMGcHDP8`bO{O`#28C@;-lWo3z!W)FO( zU>%u3EHtq)vv0yJ71Rp(vl8EHTemqc;09N`eW=?Vmo0JNu`!@ zzJz0fV@&{D;xUi1hvsL6Yf?4I^aJHMdwX^z_4NNo>nN)Fk7bv%VFxOjqOZ(!wV4ny zwgV*suIXnEicQ8+X%t+dqUEgA<*CxTi~_M&0$6*EXt1tnH8`s@ec3tcLjgxgGub=l z+OMn4SuxWiY`7R+>U7fJTI6I_(`WZr88H^R5CqP}QJpdBv?ERomz;HNMOM8dcF{mb z8KIe#l%kym&|zSS&Tp!WH(#{%%)Pehl(}AUii5;SNiW(Q?Ihu6$1T>aX9IBs-hba2 zdA_roKUSE&D`ZKMV|S7>uaS?ZVupPR3tXkd1n3YY`%%!MQ}LQDg^Wy_h!*zHY*JeP zKlLn2EDCL;$A7%IB7Bnc&+DRahx3l9QkA))Wha zK2DUw%6wIVLp_SWhuIi152LtFSE}p93ea8Cw+x7>&~X@zTZPon?n;zLb`D!TSMLWv zJi0r3w)dME9qwfDTUDErw;jwn>9P@7mM<2E%M3Y@W0WHH@zUfOh+zVhs%R(i^XvZ7 zYmV9?qZ}uuH>RId8bLaEk{F}JF=@mVL{Gp^f~RKyI85|e;dN0Gl+}L;SPpX4yhcc@ zI)55P!Dp+^Uqs*Z4e|zfel2nC9nQ8la}rF1BE)y*;kC7H=4sBUDxt(n1!%%Qx?=ir z>53gXBME()L2PW?)NS~em4IV+gG1E}B_P*u?u-GO zhDm=gu&3FCvBZo@E;b^Husd@(fQ^ejZ4`wZbLE)ZHT72e03tys#RZ!aQHt=&$eBFj z1PsN>hNY!PMa)a{^k4}Neeu*>t-F}e7*s;K%n8XqnIbl>0L8*kI(`jfD0G?`O7xse zVx-IEw!8fvBh3z9eJ(RYTm_Y2X>9*pt0bwO0^#Ky_VZ#?EfSfK*ov$-W*jZx(CHi? ziS_P@E#x`61}XaWye1=3Sg%2E572RmC}$6m9SHzwO$g5m6De){bH>fl?7VBmiQk+D zlK{?F(#w%GTL5T_u^$i>6ypY%DQZC+EeKJ`W6YRn7I0OhC}k`xK96SamUI|NN_&)i z?3z)QU(pesu9Gru3~R)x9ut?at9)Xa#${%jMcRZfr?Sq#*ji<1159HaKxjt;lH7LE zG&xns+(f2cps6hK?szX6#yOTx{Fd@egzn7^$nD|!+s$$$GMrO-53o8MI{XPO+Gw{nqR8Iu-*-A!xYAWRqKKs9RZ(Nth zH$`?mvhmp(_P47RCMB}`yVlvyNo3wmbZz7K9=YC@)2})--+lP5d8>=+g(lm;V8@KZ zfe z$roE1_SV^)FfPTHaRFVhL^5I{wXobgVo(cxvB%c{w4tkB#BJOEfKxbpR#E3B1)qY9 z%x%@gGYx%YZF@!P%moWu`2wS zXbJDsr^+!G!sbmNGcT*G^NyQ0k`F$guVw1+k5BX!G^!EUAL2tTTmO0;Su6*QN$csbIFF z1;JD``kXFmjt%Nlq_w;R*>)w|4mw8(7x7Xr5z@C^cog|8q&c!2h$_^s_tgvr2|Zq> z0aB%l*(Qo$9Xb82Ip^D>guhi5~5B5lbvCOijqshf}73KuAClH1pVM%^XF zR2*FLNHpUX^o7<(y!mfGqtNCRp~_j~ zv)|#>QxEGTCw5njT^>Kd!uA9@JeAzeIM(g#8c&&PbaXn(>7Z(`{BI%*dX`q@FII~P zSbNhcrY*r*&do3>;Q^zpT0aS-L(ifgQsr6*D`xCmeV*1K!J>c3CV3l92T z=o6`r@3!HCa0~mn@(k- z3X(ubZi^_>G`%TPM&6naOU$6AYphVRP-UL>q?m{4mmvo}us!uisY$(QWq%}pQFNxD zBz2)!tBaT9E%s+lV$+2d!DVXwfZtFQW9Wbz<^9iM<0X`W;v$|HDX^9fykYr}z&VC} zZCnIG@d(LYgsxv*?Ug;r0i~p?iN3_-{FyJFq_p5ZWQ))@&9BOG41;o2Bt-_RTR2t1 zA|P~{KqQ9e!cgiNPV6`5cF(ViCliC-N7AZ)W|!YaT5HGHTy4A&Sj12!u*S!6VAWzp z%4BWQP128CtSZfsrqhc;m>OyigiMt~b|TI{cq)Z|ouP0jT0L&BgiJ+AtpWDzdY#sd z{h4uRAx;~ra2Uje)E|w4ZxM11Q*)UjU{z+^F02S4xnOElo-77XLTUR)CWA_?nN<&D zA_Eeb#XuOf&qy$t!}O;__eClb&qK1uc?vFt37n#kF|x`yr2v{7IQKf>iXGr zH7KJ2l#LVRh38eBaUyFx9ER4!e&z3dd0FEX(zasL;cC6#mB4a6v!{qA2i1_L=M-KQ zSSee#&S#~F3;a8tv~wm}P*LZ)YQs>Y-SN=Wnl#}s{)XmjnX=E>yYB9;yXjR=Ud>c4 zEc^ato-Hi->oxo2;L8Pmc>5mDH|vmFaw=EzW^3;@&fATosl{EJ*09R+8{GaoY!>2k zS*=t0boXYv8FcPU+a&lEld;cVtvCN3 zz6?J}Dqq+NTzYwP@9(Rrf3rK8yI$m#zLE=l^^Kcr|L%$N1RA&mOSs=}dvwTZ;s6LG zNP-9gr>Fw4@EFluASi$qXF7`HWoaEuVqE;S7^WIxNt#E?!{Ln-i$Q7ERL5M28Tim( z&&UKOO$MKo0Wm);@buIQT|^SblTpyehsP6DmJS6BK{8+x2*{DrNFEc6^svQkbJl`{ z3P9-w0VfX4JpmO9l;mS7)Du|BKb|B3@PbTfsro_bAa%n)RKd(ne=>YX%RC_qBmp(( zbpuH=Flhkb7)M1r*O1QH1} z5`G!r9zJ5pP#|Y8a|Cr0QzX*>p1r~_p(02>s8r`OGbi!D0)jw{^Q?KZk|!Y1)2P4# zb%;8v1}FhBLrMO40C`LT3=^F}0U{)+6~G8m{!j#+U27xaOnz7cfJ$bjqzXYb1Na#y z02Ng&SfMoVtRETiI0Go4#g<}3RLo`YF`wmtI0_2E%nGrj!Rl$$d@ukZ=4VhbnG}T? zlNFf265d{=0&}1mybPb}0707n04xA38jwKqNTiq`NIx0C1!v}~EE$-PDbV~gz!3E) zk?=8CVhIFABC{9(bzNXA#0VoeGyqN|rfFN%C}LgnMw-Dh9|4#hV+{u5Pe2w#YphZ$ z;U_X=oH7;~odPW}1jR{_6HJtRFp`3=Ze)@iA4MQ}Xl6v#gXM+9wT--X0g(m?9cvk3 znPer*7Jvp->6Tvsft6R8dJ-2&4F*We^nxSbPk_{D301flp>@S1_* zZ~&kaNG5WxUmODt4rGr5@TY+2FbJSv1tI|;nt1ifg!I4wI%>$|V>&^SCL~T8Cdsmd zg^Zw9bIPJcbjB8=UR97)wa%WIn2#EMcp-wadI|*zoihTnQP!g%2*5Xi15Ck){JLat z0%_o_C+Z@S41*N>jY$U%a8E0Cp7NRnPGcxNYoA!cL1>8+QIG^yv@!5CIadw@uH`Ha z$CwFgncRzfq+wQH_--Ydc zwYIsp?0ye*`yLBvX4x*cyO)sFXZ^p_K$c~$@X+&pC!}>7jXlKDhU0{Io>I4Jd(-zT?hTIP_eYuMy~^*6+T7i3J9Qt@ z;`?i2@2Q2$ZyaZAaCS@R^%xhV!x1?3SG(4Fj`!QxP9Gl6AB_)V+S%y6I*Xml)g#gG zXTI4u4#?VU`7ZR^?E8b7u_;?e@O~bITjANtIig-Pi&>d*y9|RZ0VoW9WUm zwXy#9Rp#8|#$Km~>%Cs?-)mwyW^uz2_?<#l=?iPWy2S$Du>?Z0(Sv zazHUYTWJ)>n7y{?<+rQT@c8{i@5dCQnuY;$)9q`mTdUt2raV900a*x1E2@5!w}S{8?0sMU-sKCPBpCr2sI^o6G}(= zVa5Teg+K_;DGd_-Uh!fbsIDAY`lW;{F(&cBucyxKfVo8&LO^+Qapr)YIT_Q;*^qSKl zfFZX7_VrOhjD=}T=13K4oB-<9rAE0^sH{|o2ALV8nacnuhuS!1iUgnwQvim_OaW1V zsx0?Fh76Y?Lg^8i0E+$q;hGODojON}Ge|$D$HM>>>9H%QpDCD$6Evh?0mU?@gdUzb zRwFzF+du^f)eviu&+^J}3X6{c;3)$td?_{YI0tEK8kDdn=Lhj3C&b18YqLPXh@B<6 zXCvp+3-lyxu$oOeoQN}*NEl*xVl0tZB9MPS?Mtv=wMQ2m0U`T2$1KS)kG& zJOEHN6abJ3BB16Xeg^;xs0oNY z3|6_H;eaARp@^8F1Vv}5{BQ{*lr0508oO`Au$tN08)jQWtA-e&OnMl7*LQ7XYu%h);fN8U?o9 zK~iTdH~_lVnGg8+cwqp7BAHhz{AU@cSs0_~jZ;W64r4Rn(*tSf1TIH-HXA+0;f!1W zC54asn~R{Wr4vBFlF{HX&%e3$w%wW4(d<5>sI53mvs>DAMNsXnnTs{U`ib*16XICo zz`Hrg?mKi`v0tJI_I&PjF;FN#J#(o3n*LZ%xT{&xvzG(L<*{gzBn!2Qfhu79W3DB% zkfzd~7$EMPC6RYnQnyf2eAOayr;zo+cC1U%O=(8lElA~`NjBVvpHPibpo21I3Ldq@ zOx3;;T8h6q#)V(rKck>Aht%GoAV6Q%bE$~kU^0M6rEwdajl&9U+EQ6^V=c+8)VeM1E{1}p)5;>2mRE8oQ5O8f<&PYk z*|gs;X9KZqT|}h?hW`HDq7m*~Ep)q^l37u8k23>9bKo)#oDDQ5173QmwbKdf;1SiyD)3f*Q8d|pmm@I117ywqyWaSR&icenZgQgUv1%Pi*@cs=N{KCD7AL^xuxy^ z*B0fVBI;;!{{U|4kW7d(h0n^O7Qc%ATP3!Y;kXl5c7-rm+mu#o zp+X|bv1FGDA%NDcYD&9@XdQky=6jK5tf044)U-3R+*DacTbc> zw2Y^~MHE0xEN zvd-?4eeGRtaES0N?PkW)`x`B6t+usmYi|9-H(6{tfpXH?2Gy5hG?q~`GJ4}nKeb*| z+qVMkxocaSMnK+fZP{jP_gd!ZQ(9^u?PL!sFt$r-Ky?>6oQ5)6 zT=#O`ur0RT?>Tl;deOWBlwsxwqcs|&QiNj}l`?Cyv-cOD2-Ez}bE&(%WxaCM!pv;4 zB(&Q}RJ}PsB^boXnZ}Z>5~2QwPc1g>EY_ReX6Ews!+O}ar2^b_8W>8QR+mddg;OBr zay>Dl+jXPnO{QmSyLcGR{_V?Ft~IN!!tw?e37fXc`OvZu2wgN8$i*=}VC5howq@4h#+^4L!09K$65|Qzc?u+wol&CuySTSIZJpa_#@+G# z*Rs&|N^UQDeR)220Ez2g=9PSI; zYuaB?a!{!n(%eCj<*ZX4<>)&!PHk^H(s;u?H`ljb=F{4xVb@>BLx6d{SAD(R9fg8P zyK#L=g_~Nu*5Z6jkCs12*xRLREqwT+^4_C%_uX}G$ua#6soPsJEF(0OOKGSPp*=~J z3~BjhXC6O(?zVMVZ}RUvmq%NzzqYu1&W-lVhTYxe_U!j=Dl>m%+f7=Sx`ia^F=?2= z9Wmj0z1~WwNxeRP2e5P-E!&^`vGbOC?dad+PI&0r*mt#T^plf!a;aLiSbF|HvDW>mz*(`jw%7J* zyP%+*yMNmR5cb8wMxreY!II2mn&=BcP_3gFv~OV@la${-#$X%hJEO5#H>u3abuEYa)yY zDvkusp^?SDWZXn0$Hdl&M!Y|9qi_Yd!DL+2*JhA)Kq^P{kINWgOW^Wt7UorYtq9(^ zLd$aDWiTYv(7@KVPR;7b? zx({_(943o*HI_7Rpd)3JWse`!Sz5{0{A&LI1G{F4SC_TmvR>q^B9U#Kg!*m^FcN62 z2SFI(eN9^Au1?DA+nOx0STFKOj%}sFZ+!tnGaHvy-06~7(k5{asI6|PSLWS4}IY|K( zO`Qr%%X*ZP8JuBl^?kP5k1*X`UUkpvSpNXrO~>03#a)YAwQY)p3#UW7G?EdsF`ry( zUFzDkZc~<#m8j~SR+B%Tg|l&S(NUT0=toPCJko%aKu}0W(?BTz&Nw$`nsC&bCZCne zvj^lkbOPutxCM6&{jkaO+kzHoe9z?-%DCWnQuxKcLw~o-xszH+jqdqjYURtHPHdPTeI7XcR03%It*?K*UlXb3Xc(ze}o!q}6jWr%_vRtutd+a-5Z?+wvCJm0b;e6u0*p+N%e4 z2oAjh79vb_#=N$9S~Et~Ydm1r`;F$SJ8cjG+E$W7C8}#*NhU~e2|p7!)%k4e5ai~y zk}&<>FJ+vuTbJ0~y{}XGt%Yd}0fBNDNr;TG*Ggqt46f9Cd?Oa*ITUN=-L_}6qe8f? z9tnmp%?x6IW3rWsoIA>@pZ7zb92Qt>V$h)d?&#XqTz}h;S%V)opDA2~R~u2O$8Ukh ze5TvVM$_!>AZN=(k!}OE_XalGaprfpK~+TpS(`Zn9T$Ytqsrm^&R2d_ z&A}f_Uuk~GFR{MQaT`8QWGwrG-nMpq*WdRpXuE%9z1~~(xQ^Gga0&gF0kOOWkwdt- zafsA$?mn5){f?bl>;3Dt-*Vxer zLNk*!rcv|o@Wl_6f+7t`l1&9pK!M;WBLLG{JwZZS>q?BIMM*t8MkdR;MQE8(p!`IG zZNY1_)37VV({YLc&@RJoi zNuc=u0LutWG36B@h>2*Rndw|Il5v5xfFd-&r$JL+_?#kM93ZG-q>)g6f%rvm2kKQa zsgobatn|PkAZL&?%P7iY`fv|`A(Y0TCSXAasjtdL0qXw%ai>G7gD?Rg&>de)h=K>< zg=FESsGLU6(F$(#*%1b13)aoe2#I`t!ojAco>@1ybnX92?nMC zFhKFd(c>>52xSDBlbmO#r1)owPH==FHO_z^hNF=q=5Y9TfCY%@NHJgZ@x;4Xa2$Zn z@JJAH3*+(wr}D(}TM#LF@hJ&_90S%xDg7c2VsUGmh)Zf7f)b#aF-U{)KMe3n)3`%k ztqI6U3;zI75mVHOIF+YjU^edy=A@ZEAnK%<1PXo_7tsqY0V!g$lLB&_q@M{rG{^A6 zYFBg!j9kqpq<|z5)8;9ON=+)bjWy9tOreWu5_F(e5FrfLKkuV0k> z@ZO>Wuf#Xy2OxYgRjW_B15p{6NhUhdy=z?Qig-Zqqln490wBq#G>pXfV=ie~5^V`A zz|>5bff70jbp&2_S-V3VbK79a=#Xprwc>tbzqIY>Zdw>0CQ`nrlI5 zGRzEs8_EGIm3$&90K~uyF`t zi5X$6YMBHLBpO9NrTR&cOhuvST5!99krS@9`A8Kb<>7(3&=sQ(QMO^1{ZM}z0tk~y z!g!9xOY=FdgI64=0Z7g%o^+ZXpT`ug(&a?F)+Nk@&NCtmK@>hCX z6QmLh5Cvi9tn{x;@lhjoS~0i1O(H&`qzY0bpMe-j5z3skA~nSWD6U7L2RW#i!%Ofg ztD32H43d9A3u6L6LBMC6`guVm=_j$T7k)O3|H00k*E-lJ#aG-b(y5nnCcw6lVyH za`AFtofQBB6o??ue-4pzl12;%GLG^qx}gozAt1DP&~-Q) z&Ox-ELG=M@tSOj-4F}+B6ZqjaOJlQg2u&hDQdoF@EJL-cb;>yvZbJY;kOY~bfFJ-4 zMC5U#gS3YCS4fBk2qc#4;!aX2^TH+?%i>$M+?CEhk=t$rqT6-W0GZYGhOg5Yif%ez zo#>eDMB%MbxgVCdy|$v;YXKCj6Hv=Kfru(W$B<1mBGbgNJCrSJ%PPPIlTU#;3LIZ} zh>qqXRP?0J)M6xb>w%3CUDN|GPf5&}kUtZIo^zlw*>>izKm=4s@uZR@z!k0JkvwW-J5Dy%(FNVxA-n-038Dy=f%KYAE14xPQNt~KpK)8Z z4Xva*3N^w;g#Zyc1w>EF6ZJd^;Yo&WclWmhwdZGm0+aN?TIuQ{urkJpa2(q7@Qm`fv^!%`^3&aL4Di%NY7A9SkXQ+kG>61Sh!*!iN zX_T~_g`@P5GE5b4M@r-?IBm;Ihzu1k32SOx|)ArP#w z2q~#bm;lze&vRUM0V8TbQlP@*ZfVTT3eZC~b4kRwaUF$M>W835XkS&!Zb*_ek_=SI z$bf58;Y{#?skJ%?ZD_DXAIq8@K4NBybAUW!t`SOjgKo$Gls3!)5lZRR3zbRwiJynZ z0LV-Y%c`o(SdpoPB%Hv5<%sy;&&UNUFGigp=}{_Jw1NXL1cCuS!vGK&RzZ@` z6E%!A5tT9oCJ@YH>S*(6l@UlW(20m7;I6a4hWK$JHejjLsH}Cd01*^Oq>#t(ICxT@ z5fQ=$QV9!kAg@I+CZ;kOMsa~D@EeW=LBXD3u<4g0>9QEiq-;y zpIkLctak}K5SXC~T3UrpphlA-WQ^EI%lYCgxpe`X$n+YRhpZS;D!>mKfI4)XA&p#n zpqda0$kIH-k_>=gX^$Gl0Bwlqv{S8v$!$=zq=ga*4nHWSHC(l8wTMC*2v7t}P%$qe zOOfKB05Zm!2#P@=9o3YnB})cn(qx$;05qZeF_n|$7(QU&{;I%Y040}Df&kJ)^sXM; z^0u;qalnpz+M&GDlTivSbyAf-oMIkZ0j81wQlPOT%ORkCp^%d`7%MLeRvct%lIbp7 z9WZ19#b+a5C>e^AjbTrKYDP3rs-!UhkjA=YfF!X$SAjWUaKQW4gmTKlWi%)tol#vm zMF`6n-f+8%tHv}VS+=co-366QKn`@blnMZ#mLvlJ*E}rfOjc)!Fif*~2bv5P%cu&` z6dC0>l9q&h#nWXi+%DmLaHbkenm|z}LsD`W<=k$u;!-ni7j-&X3AqR%qU7tK)CpF$ zG{F%}MXap;L(%t}Ct~^iXTlx^L;HHRRuBBv&Ps?`xa zAdCVf>u}IAh?v!>NUNqq70P$YtXUbEYQkh15v5epVq{8 zRd9fI)FAQ^a^8`m<9$Vo8HAAyPmvgL+5^g}i7Hr~a`Gf8KS&~yejk=9kf}CVmMo8< zR<_yzAJTdPlP0EQ=lt<*vY`if=9pk~f*B#Y12REkeBNXD&M_HEWP<)uUpScoWSJ54 zjJ`MkZvK!3!ub;#P&5KXNQoh7`QVNqQEefMRiR5M8lo$#=`9Ao3LH{XSAZ2lyCI=b zp_45QzXWtk*KDUKlt9S0i5)}1uBzT zdP0S3By~0FB4#mFtG0o{N-t7Cm{371YpSuN3Yf26m`y`~DBRM@fkSEnq{4tRB%jp~ zAk5AH7K1{K3avWgU@XoR_Krtd}q;#a565s()hW#}fwKEfj0^3s!sI-IST4{o0p#K1? zD4Z;y9a0Fq%oQ0lkd6#gm|!G^uTS~nURqI}&?(qJEe3)Rfeb*dMv9&p;(%=lF`xi? zpD!oUiOAc6xbf*{O^F<3OH&l7Cb#-MfW zy0sXCSUw#*-UfUz?K6lu`Bj^hk^cZO(;BM)isU+)nSr0r2%Wmxy69`qb+-PmWpf*Z zxK;R@ymvRZbfcy2H+g39e6nj`jC5>$X+NgYzaiF&e%h3uAJ6hL-Zyb?d$ZZ@k+qH9 z&uzI^Q}ufGR^+S^G_QV2TW&KBk>iGPyzYiA2cOZt5_cdMydhSnpTngFb=L(brI$y7$QXc`jeRa zFvzvqaEPp~9ZJb2OtnP>W;6c)!w83aSwnzChz5)p>Zh2@#+sUcECdQ9m60&n>4LFS z)-;ddfCraUD$%sT2E9*0Fc(|dC{RfRfdo+g84)0USPkMrF_{9h132mieSSC$tqRyR zrQcIw?zbLE18>jvmhWr{i2ctOySI5&hyqyJxOCH|IvP)7y)+SdS5L~GerC-y&okjY zMF)W(na4Ubu9(t8^#PzHk^E?K9S#u-Z#mE;)WT!|2ALdzkw~QBmGVR0Avq@Rt(3$#sN5L9}tm@7zMsFsAn-92l2pVYdU#rphVFl@DXPM=O)x74l_Mwv08UeU0?-{wJOJu#u>xUQg#4?ArhCG@ug&)N&ADivel6W)!c;!FLm=oL}&^B87nbE$fWW+Oa_h_B~N28~Vte!d1K zau`zOt_D|1suvOs+kg{DitDKq@Bq}DHC|-nQ#7X|Hh{Xs>S7h9asnr%Nz;SraMF>t z1eY`i<{*#`be^IyGU7NAy9V~^85*XHWYPvx1EyKx?xDi$D%y{L1c)&LOJ)B6n8Xrb zef-w;n|=qHseT){c>Ao%an=};#`Pm~#h z=ARE5{{S38umC`VKN3YoQBIG=IqRs;Hym?fr~O+#O(w8$K7;mB~jR`nm${m&h?b|$A^qM^YegzFJKai-#R zyH7`wd8Vl)HZdN5j5qAwSW_U1c}|%9P5ndRki~7;X!JH#X?d5K9E0wEYTmRDA+ti8 z?U`$q7z(jJU6OS{S6u!vjD16)+Vw7u{Vw8MwohK()3c%KcY0mw@21vs;A;iCyr#m= z?E(G5C!xCyZWLTV1FTb114j6aeCg{xo4e`VP5OP*<#FKDpRM|5TesEp)!bH_yus{7>^C)iwR{(Pc!SWc%jIr?xZt<0 z2Jc|%ExVE${g#t$(n-~(&B078o82}1l3{nkeJm)4e5F~iu8&Mc}D9*A@ zk^vya4CRr?pUQ9v;lP@KXc6=9sGq>)fI^ZoEe5peW2af5>(>Uj0haSLXEhLFunGQH zb2xp2??LH;L=X%KCZ7|SH6s?TqdJHlkw1yZh%g}aBM+ScQTVYFkcjwj|G7O)kNvr}W4J-K!Jbb`xsp~%hP;>mC96F@JV4zBoNi>(bynXOG?d^#LX zpeCUQRE+YHK^YGNL5HTOK?dtu>WJumKOgzw4duvSfUs#5aV5eAV8bY?mT zo|TLRRZRE+F(hgbNs|UlO>)fOB&|&mscK1#q#9I+6u>#)5OOHWY6KCSm;xzU#sC%p zI*bA!SFHmH>qCG-%@3PZb65ZfrgBL5;3@oqH58Lk2EG~RBLIp~sF25~jWi-b{LM1L zcrJ-sQTi&741go!QJ3L~;%d@Wg`^GBJg5Hvmao(BAe>Q)TtyHDsMKl%_`s3`^!VW8 z14(l8Eo3C?QvxYS`S{^7_Vs;(px5Km{VCvZixd+`nsmysSd6d-h@b$%OwbxkPGwKW z0B`}AtVBtv@bUgQ5jJp8Ac?3s&qJPHh5@G{N5&05KlH#*V9h$nf=vc}PxVd#XeymK zmUMD(YQ0PqkIG_FLP$NaDWmnv4W8ib$5a?WsflHd6Dh@(wG z{PLcXJTOSrQt>FLH6Q^X5tPjd9wPwUK&k+VC*jn1b;>Xb5?BZvzbG;Ck>Ft97zIOC zVg^LgxtXnS38daZ(xSDcKsAbs{-_Yb?bb8irrc`en|JFV{K@e_9a(ggmI820{`rRn+#a&4tBdcRfFZg1LW%5BaE+kRV` zdwZUFg}tj3xHw(2>JH-R0eKC`t=ph1=mSX~3}~+REe{lr!{bAZu3r*_vW_S@_l#*Zy(9c=|XW@q{vB*wkl7)~$ zkqso!%nIfsA~1=O<+3$a7(g)-P<}C75NN8Rc#bhetdUVbCZyBz!yQs}N+k|v6v?kr zJlTxmm;zFL!Ga-9Wvg1qCZ8g3YD=<-94Ko7lr{ZEa;^fQKx&Z_*QQKkpo5XZl3m{b zk(jUx;#B;^NT)+M1oW4wF;+7sYBdr_u3@P;{4ff8kVHu|IzSVgktRr)rDp&q%aIXC zk1#PNreG9>jPG(pd=sH6zLz;`J5vVkV=hE0I7qYhI!x`Ze((U$^be+ zG1P-Oe;hs~FEhznrE4cqP<*g+%)tf#{um7diit5m05U5TgFQw9TWP?gPl2vSrceZB zfTEUSC;*6z{xUECfJqHBF&_aL&xy$30cs*()+fjC%K!$f27M+vivIwv28{cFVhwtK zPDEECPIv_JET5UB2jSQ8z-lR_PG7?S6bLyGdY>Q5rT`L0gqnP&2^r;p3XY`o2P&VR zOa^VfAPqzvKn+JaQDY;3wx^2|NC~780-7G8JbVTLl~M@{T6B_6P(kqU@xTQJQUN-E zG?p<_l95AP0J5YZrYRx^(sK|dqH0C}5YkD80Z-;8fDZ}44}g33Y5@uyz61}M;`0FzqhAMyhL1PqDz&2uBhY2kn%Uo6cgD;Ytr%K!jaf_$e; z0VAo2fsr&g1l&h^3>s7TkA?w=2&fDgjQ;@Xo`>TD3R7{|0{;N7UmOz;Isrp0qCosU zSjkG%VvqpqSQ2SJ5JXhr@B;(xeg6QjytT5l99h_|tC~pu=IY|=b|!MQZM4Q?9viLR zR=*bdL`G!0X6h9h+HIp9Lrs_Pj#DO**mS4RVZ#6%mL!6}55Qv!bq(3p$vJ0E-%j{zgA>2X+V!s_ zn=TaJTKyv0uu%e#8FS7~IG*e0b$EK7L+v$7^LX0VJw`S07J*|zG}35`bKWjlXR%FRi3 zMd?MyCAS@Fm2&6uI_uNUf5-68^dN5ekoHBp8&6jC!#3@%txlF|%*qKMILoYza^BDA zOU%or-Ib==e^T3Tac=#>*LPQJSwnK6^<%msgIkS)GZkH}no&}3> zeB0daZ(iJ#vvbqDn${Q6iL?n4MazKdffdGb`K7-p()k|Mc^9AeEUa8y-Y(m61>&On zt3@HxU5~bg)3Hapt6&X~bRCFDup~@yRhbvd72dV;sMzFD2`Ur2zuPt+N&V&D3x% zD7W?AeM|t4rcOC+i%HQ(UPn?_4QuzScIP3xPCs>S{nXo7eYN|>+uAA^J=+?tqY%(M zrA*f>X-aeX_bnZVkLxbz)oPopWWT=N-rsWURJQD*+q-(z<8dtOlDC#-*}HHEb{T$n zwv~9`@#)Wmn9laI#gcfN{>-oWJxt7t)&SEY~-N z#@l$0Wo(-_SvJ=c4PUla2H>}Hw|!!#O<)1>#_IK3ZkoJ)x%`LB@jaO}_an&J^sZmq zZZw0Tt_v zo~ia3-p=s*5rXgTU$CtEyKc&-Ri?Dwla&-6p&oUJnh3`BNhq0Z5|&H{k>~Dh*6F`; z`df4*RaI_WxWI+9t)yzwW> zX|;geRe#f6`-}UiqgT<%-kdftm=_C_70!2nkdlqzOuZ| zUXF9~IRo52&f|Ff%X6G!ix;ik{{Y+~f^E7x1}~;GtD$0GWHIj^nbvP^SN=WasFmFZ z=iaN(?QQOT?TkHRgU{+u?Q17_`)#$qrst-{?b8+zK$ZqqQwiz_j89VY&h-wBUvfD$ z#P|G;{Psh%cQ-HW(#^|vZThwqjm@pcEH^H;?i*KAN|9(2aMvJwG3y<6`@b|Kp=0CY zu=iezZo6qy3C|8Q{f}$?ob48~x7lvjYkKk8-#gozwYhX`_aS{fw$wVhf-dfCStzTj zNHv^#zV)qaS;N=mJ--+{-8Sa&OniQ)rC!i>vo)?R)9h{8vf|awWo}zrR_#9B8*rcB zLbpF}x3uclR54d}5;|j*Y^~cSl-E{u**d1}n`!x-?d{iP?sp}3ckJBsORep$+0mTY zyKv3D*|tWXUhR+zF(3d$40(>1WvZuTg_ZqJ71wopdv$bC%^IVsI9?a_*6pjEciAoa z%q@$T&Y!8>gsim0cw^1&Q7Uq|=4YyP8}j_I`WfceX4d^MQphd;0BMK{z)f|S^0XXz z9lf_youXe8#cpn;GdTPU<*mA^Mbd0J9^^igZ zAc!Hdb**<8sbr{rO~u1fB!?yQU+!)a5f8-a?exKmXUE90I#ZuaGz#+<*2ZaBW)r{M-2KgiX6d#2 zh6sH}RJ=h9h2}sA%18#7<=&6ES6NoG2JV~6*Y#24qo=1pMzg{+J_iSCu&O$IP?xJc@0~T6?7Vh-TN-yfKjw#)8^5MBpAGwRHx!_~`r*SQZyJt}wVszWmq?Hc;?*RqPs}CZMg3>-zUty#SL=lKo#p@0B7?keF|#M&ErgRa%Y-f8S#DJ z5Er*9RnWt^E_Uwb+uF4<$jDupRBCaNCAAxcM@SVosOQ_|vMIEZOH&Zt@=tEXg|_y9 zwpo_gR%C1D5$)RtR=3qaa=}HV7N%cub2k$!iG^;t0Li#F-Oa&z>%GrW7t;h1wv-UM z0)tXSbjG`It=cQK9L(3;zbG#40xjiXZ`AXjC6I_`RmBV%<4Ni~x#Oy}rL3~k)aP-| z_|M14)_k8TR{7hswd1rv##zuIZ9&z@V=UFA&||i>ZR0|ke^PixFTT9D2H<+Z?pwEJ z=Aq^F1Is9r=JJ4NraGx!R}qOK`<(80&P*4OGpok)1BMTdrP$T z;_l_{+_`q_wabq89gONM#Fl1*LFP2bWsh~_SbQV$Ju5#VwY^vtlc);769-fnG{MVV z8c;YzArl}F#YIfRL7a%6HXLKP2?*j0gVvx0I)SK)XVVA@naYw0tjqZHs^9^^P&x?< z6JLzSjNk!GFO@|J)gY6oWFs+^XBAZDS^?caC=5gbbk+%sg#n#Wo;DERHK;O1LIBfB zoTxAWRTK0LHOQF}*TVq0P%r^30M={fBA`Hw=y03!CE_IW${{QD05vHyS(;=31`PP& zjWoq9NdkhEpF_3D-dJmAM5J^Ca{!lZY z367X0aS8ndky0uRWM%%nFeaaYULXdOIdp@buL68y0R;j`j(By7={|CWEE`8gfKHB+YZAWOJMV z8Iww_1x{TJNQja@8~^}nYN0>$ubbxw;eaK?6rE*QQ~w)>&&C+xkVZgajM1R50RqxJ z7#)(*El3N9IJ#>Cq(f>n(jht|r9@H*B?JVER8aBv-~ZiteXetT&-Z$s&*#4VLGNgs z8)2$xac6)oGmhyArC6TTA|fv7L?)21P)y;?1z77-m#FDPtDtA8)4;67;NapmWvGkD z6c->^Va%p>X?EsSLHx`Q+~OBqsWff9OQ2AWJ43iS(oy0aO-qcd@cdi;IY(l8>1Zt| zUY`kFTA<^Q$DT)fAPP(^AJ0=L3UATq-EU>P50D4TW~Py@#q@HNA7p3YF~VYKHTkkq z4$RM(8Qnq#l{0;{ItEdwz~V&4TPLud?lD2qWr(CR>|9zh#HnjN2cj#1I;dnY)!WcK zxB}l{sXzps&xCmi{hjG*#z&{{h%f2o)}csW+fTS6(x0cpBDCcVAgh%1DmO$nj&2^hGCq($sm%Xc!Yl zUgTB{_3~SGssO>YZ1j$c4BR-)b?CrF_`5|2>WM_*8Ib>m1iO91vfQZkp#%1ev7zxX zry=j{96_2esE-v9uO*m`ZT%J&`7E1pde#}F5Roq#Q5Y4)9@s=u{Zi+!KO;z8CQa5h z3M>YxFF@^+QU5&MW5K`-{hJy#<~Y;)IDrvJ*0EiuE9f*P5K=6?7Wg?OVeOFPmXPtC zSnF83W6!Bgxr^M19_lL$PVHvuq$MA;5)?wP79fUQM{;Dfvo@NET-;$bZ?bZBxpSjc zxv+s#t=5bHWtkM$Fy4+P>u=Mafr5YII78(3#vc*@n}ExPyDH*k;V4_9%!Ej(CJk8l?cEp< z2hAWNEzK^>Zc++I6%7GVHM49OY(dW+FBZS8lwty^bjGO73L+SpHlDl_aE zFRNKASypP*P8*BV1tCNvQ5PFIr>X^55!iB6h&8YI)OJ+S1N(-^mqDTpC-T2t-}q&H z2yvc+6hQC>t|`2G88hq>D2{$aP&w$a3EE-U$<bMHA&7f(&hhk zG=*T@spT2v93{U3a7#yKRx#;vskl*1FS0w*aS(0I?Vg?tx_n9ghjCE*uGW?;#KQ}B zHJ^cdDz5n?I=!lTk}&6rr&~^&?w!*m97?5gnoNAa5;}sOS6@8Hza=!~@R5zOK!RpA zZ>GSQ6#faCnL)d#d$7Ls<`4RM&n8xc7Q@nFbv!m!MMz9};YXQmKS+y-z~X=}#%TF5 ztf^Pk9~}nGzIA;zQ7>{>4UJFJn)4A1{rzP{^81i*zGKxeP5nL+yV0Bwr%oaev-zuO zqzenmWy)a2Ne`}Osai6lbjUhrXZU9G#+330h^35-C>xvxCc-biv8gz*A(hu#mr_sx zp-mR2G`dt40_g0(G{+?L))g=fB>9AbUmT3MO;Kwi^hTlvKqEQu?qnK_+jz9XB!hLT z8zhBRyCpMu2z(oMrqnqfD7KR+VNNtgKZ|3-EX9f+ao>{%6wkaGQ)u`bN$8m)DmoqdT5!+2! z^s+>O(o(s+3twTVE@g7w6nY5U!Kzk|W44;)O!BPF#W+()KP#(h08^df4N${e%RNiNn|j$7PzLH?p$ z*z~~d_Ha0zxFw+Q&RvXC*oWQ0(7|zM0Q@l95zu~S?>&Gj&j&b|rIUwDJmSTADjIZI zFnmQy9;0zyGVm#9n}jot`zt{P8d-odI3C{hbb^MH4IZ{> z)3*0lmEgaxSH%HgYQzYl%BT;tq%b!)nce3~kChg6AO?XU;*MNHZf9C>_Uzbbt-dYc z3WX|9L09>*xhTlaJmsBBjY#UJ6A^JxuV|vwTs7{vmA8g=c{}mmD`yT_n-G0AOBBYc zaV8&;7R5fjI0f8vyvVN;*0N+DaZ@kjP$>o5@7D(B;P6TEZaj$gCR+_f!ZcMu5psza`IKY$01%>qI zjHT}-)s7o8Wmxh!2$uZ25u<_vsvg;+Z4#}lda+f^r*&|p;Mljhd#~Uww}qKtyEI6J zJO%Y^2e47nga?DoY>Zx&aORXzPair zK=GWLCls=bUD&5IXGN;!kJvnK>A6x;)H*R?*B@@f(6%4JM3Y7Rg=#Mu?3_+L-Y5gT zw3eXI&^B*TODw2W1N+DK6@#UZkCI410U0ml5}M7P|)ot0XZ!49@%lZJg1t7?+W%5T6hGBRZwn` zQZcN^ag4y7_1nBgk$q`ej0f}6X4#(q0m;MTZ}}Lgt~wTa>w$yEkqq!?s-4swzXnq1 zC>TcTNomK#9;=RwNzmN;ojG*Pjdiq2-B+1^sTp`xbv@+-;zemI`2w=#QJ_^UOoPe1 zO=4)=KEnVbNL@kasIaMsl%=6EvE1+qesks$K|1=0eA;BnM$h2oT?C1;BBvL+o>y|QOgcm2`eV4b?rL6hhT-sc4ALN(t zS|H^wLKgu_d+q^)PRa-DCv&*U&@yQfM4vw1iA6_ybojH0%Dm#HMd~d)gPh@9IOlb} z*+;9yaKz!ZK}j&d3O+?GsKRA%_*Ye1oqApYU`nI1T6oRTHf%{f>Zll(aQs?Q*D{8W zC<4_yD=3zx6fc0ZX73Og*c3^z1wvpye~P%~CVQF$gqkOr0#OsORZ?p#3LIA~2=OU2 z%>Ms!oeZSKK;w~f=@8@pfSH*&#%CqPih z)%Rj4zAX%5*T8pJSv9e=*i025f?nxMf(s|54^W0`*lc4e1M4)4kVnN3re}^Ox}tHP zyiBndY0*pQ;ZBRn@d-}`4ie0@RnRIw9-hsl!Ueyg&!monNAEJ!w1G2XO2{}TI5#&| z-!dvTyNvNk@@THE#<3_>fn~IyUP>7sE|}5onB8)s^e8=9$ZT--`g|RL2Pj<-5N8!* zNWUGxM8T+#7Q2%r_B$FXhJ#q7>)0{dBQ$6vL8j!(!!e1XC6GaQ9t`7r#xYJs`Wqmk z>~#-V7%-15e+C9|CM5~g?`_)|UzK_J&DKqvAx3%zKl;K+4L)_sZrWQIFvU&s6yIBz z>&r28#!*Y7rOvf^VL*1J6*fr>^-2&HE7MJuyI@COc9gQHc9&fLRF%u{` z1Ju|c)lPAAnv4jsU8P8W|Cm$pRMtZ#*h>5><_Po_w(#PCm9SOh^V{{bZ~iYR;0 zb~zFAo2m*sm@i}?q3Ch%qv+_JY@kzD-h(_l1Y8=y}0yE%AlJ zzv($zHXQ}T=*_u;Vn++*mMp>dXb0&+SmpMH|Adj$&;`q@-!*u+ zhE8_k@cG|9>;}3C-+r&!S+O@q>OY_nbVk8K66@_o%?c7vTvbt;AYM@MhIDACnIVjm zA%dM#+iW&|UyimOqfR3#-HJlA!P2%j=RqYuY%STI3cER9n>=!+PJ4=w;i7yS9yA=F zg@R1EmH6oL$T3ZN$g64BCN!514*v>KNXmTlTj6^A z@YhRT-`Cv(-6JQSjgj@s3*UacBJ30;m)Y6R1>Y&ivx)LFlp?qYpE+dC49q5f0lyq$H7}Zp-r_E3Co-10^S`Rm-0asc0X^UFFO-Xc zU^p11sT5)YkomQb?#=vYe;6;(+@CyVzi!32tN%y6Kh>{_g3{n6%%`1evcpH=Nfdqf zzr9ySx5>n3l^O1@$2u}cz(K-zOsZ1Nh$MlMQ9L>=QorSavx>%bh-%-|DSE1IpAQt(zJVk972gl-_ zy$}QwmVygM_H-h>6jUu!+S2GQ?ms}$voOtHs=a;DG10$mut3TADOxfxR?`1HLFOab z3)TLk`R%7=WBZ@Wc^khdVSG1I`&JX>^90`~mouk_9(*sn&(-#lQK4(zj?;bg4y-TT zRabtzn!hS|G|)Cu2eQM20UHQw0f#d^fUK^m*x^5u9L~~w8Nh-%xda6Qk_q+_*@RdU zm6HJkx{oB4;*4;w-i$-Jo)rj9f_u+mJfXa}e7xR>Vc9t5pX&xlgMk{J_K99rJNx(z zKyh}X5(QsSol>nelcR`6%yaGtRb+{})J6~9lX)lgj=?=g3{iGLkyaQvPg0~VDgvJs z<@D;8bnOow(YS|Uemw84i;*Ng2oZMVYE0GmWQ)4l)DZBZ zdsk)qa&5(HUZ|*9Eb-o?YH@n>N%r8t5rnOQL|f+7;H6}|oA2UkCD7OhiI7{e%?&FH zwkG4=Ou`zEM5(3ZT_QS`pHRT8nABkd7t1l}@fBaJ4nbc#s`5nR4&$x37 z&Z)YfEO%-Y@tgC@Z@0yJ%a;dVK0G;i=+OPh?4RtfcWd4F8J5FC$r+!Fh3+4>uQ-1; zeWu-qOQ$o{V#*oYyxwo*x72i$7ggEaZ(-fStw`rG{q^1tU)gnT&TSjS?z0`YIStXZ zLPlN#k8>9V>+VU(KYDFOQ~xS;LR$jYe^RU)-dYo*2wl_qqm%H%kIvq&<>ty-{3`#W zK2GiIzHO{u*SAZ{@tVraw@O7{EKXl^fAxFw*LQsP`~A%A3!dKZyt?GzY>F`cK(=P_ zQA>K1M_)x7+#)|n ziMsnN!;FWoW+6H&cuZY}{{u##0KIi%cqE!`P7tXRO`;*accy6$#HjpEjLVnvmWvge zM(=#FLeQS#eM(_Qp0puqGm#58QE#jfmL8_6?>%qYiJL#kida5(qQ?<1-uXmkjyZ*5 zWy_qTiV_3G*+6+y%uIx1-YDaKwv05?M~Xw+p_F++OT-Z(jLfHyKR&pa^M}=6ir2~t z0!SXbwppURF?CHVWYDhwK=Y!p7U$F!;zoKYX8YL-J3Q=-qT{T)Z^S=ox9lhxQn_{l zwAnHRO^S~bGp?UlGGKIS%;1+gDqQ6Saw9cQ^=y;})lfrqNheswh4YM_kgxgFHir<7 z3aDx_U?x{<$477CsVmw6*~>L2Fs2cKtftKs5Svy2h!}q`nu`FaOPyq4# zL5@|~m;!Z;&W@acGlObK1soMUi@##{m|5<%(4u6y8Fqhjab-h@qHv+%NPeux`-pQflILOF#zCJzbykHRI}7)+aZ_{Hj-j>0^v>EleezOLl>$l=eCBDP zUkl@j>HJfAF>1tu{TvQKZBE4N#sRh5UM7VkdGF7f*wP+n;dF(1SXXFnfBP7&I0q5(AcLOaYajBxjk z;?pt^lTI|F(O>`6aN|x&H&;e96+dIbdzl6^zVQi#U}-rmS{iQ8D75^pB)y4iah!ny zNM)Rirju}Xrql|Y6#cu8vm&>LQcRWkMI#LX;o{#*aZ|-p1`1@Y4;@YU`OY>#p8!fd zGp5c0%61vQ2vo|JF4P@NU_xvHlcwhq6xZZ9@3W!}JfU>zn;+cE4`D?C;qQ z6$!$;2>;;yt)Z*uv};1$_nw%%Dhp*=#Mg*K;`hg0H7!hM6H54xM-g;2zxcoZl;BY@ zTYTfCy!!CgYHFywpZbT%zCZ0AzBgLno zKKeGoa?Jn)hPcc;nh-tqef4xJEW=OM&-&$Ul~sus(>LsFeS6lvoACVm6Ug>`>!d>- z*_PV@o`U~YOAA`|h=TewR5aPypqb^hUzE^sytq=AbFc>$TsOIK$lvL!6N8T zCHhswwwh+g`PJWMFzJ|=0Qqec9P!9+s<9ckM%u#oF)?VVC8G_OX0R#kI*}8e&SCxu zgHT8wdYf}liVWr(2SdU_nl#TH@pmwF7V~IKIlV1YI$Nzc^4PvZ})07{jJ9=TTPLzSGs7)Ln-( zWKf6txM-WL9Kw*Jsy0qRy?{; za{VY`u=6{Ke>lwOWKa(Jk#RH$LTAlsY&JyNM6?f?g9|REhNx?-c@sFSBU1BJG2lc| zj!A0H+-T~;B$gDA*@i+e*=n>wLthu1dxaHphpax==BUsqhvcWYE4!mfg4-Py01a?Q z?h6NKlN~C85-A`8gDSj}01fffjH0gbAJbJUz@{vl;u6VBZV~_tfTyDL9-=ps$pxUc z%&MVI$VBX^B1;oIDoBb{B}H;YbJ=^uxf zgciQoc-gZiv-*bk(W5tX!rjB;J zSvy^VFSjl~qo>GT?{J~1&xbbXa8h~C-}l4whKHuBVze$(HZp2ZKKB8sX`g2I+}3cq zl1|^g?VFj=p1v0jrtdi!ZhN^Wig&B>B@4ot;VwMxMX?@jMFg%-^6-}6>e1V&_kyp1 zns^N$GLQs+CueQ>U$>YdE;5=1p3sWLa;^v7Tls;KSMyzZ*ER9xl0?yu=9H~aOS}8K z$-XI<3*}{Brg9_M+qw7&I^c1y*Q-=<#!Cm3h;xI2fty;4GW*VlHRG11yjRU<5~ z=mF}C+DtG<&irFj0~fQ*+PjCc2A`K)`nM0ox$^cN|7rLc_KoBeI-#_DUy?O07CvQI zp~4k-fAv8@Q?1;av4halv-b}pS5uR{2PVJY=v^Jfm@3ef_&Vf^5`D8Dsd?Q&_k1H-4&L`viCZ%sRLWR{Jj+Osy7_3O*<2aiwqsi5 zbN}_f<>3A=-f7kygZ`fxJFP;XQMqPkQN`;0w)GP{Gy}f99iMx~cJQnp^u}s5)(l!Z zroCAIPE6JCZ0juO@@aYdt8~AfTCl~5_LM|v3rq%q3itccAKdHCHG6yi+xxD(W7%lI z4HH%OYg{w?j$do$ypSin1+I$KmmABD7vB=De%T3uyaKBN(f0<=i~F`^^R{QKGY&p= z*uYsoDD;1~9Cz~Keqie%D*kU>8~4JbLA%FUGfT@*LQC?6;#Cj#kD|j_*9o0b@7MAl zbO#wsx<%hdJmGs;rSy`EbTs&8s<$2S=T1v5oBbYwuG>}YmPB2r-{#^ilg_3x$rzjW zwTU(xcT&bUZmnAC@uM%;FV^gwqRtk(9p!Cb`|fDu(sncE;D7G=P#M{=+MNuRNbK7j zN~DKw^dHE)x$Nyzf3L3fiZRfITw9Nx@M7?{E%82-H@d>cwsfd9EZTM7v!owgO;*Nl zELbto#G4f^UA0OS=@{|u+1=2-T{ITd(d)SSp(*#d#Ja1k!~ycUfRZ{`j3Yl?n`YRe zYgu&cewc+|@n-7Sao(HSK99#1XHoA{A|6P@xu4y*t2;M7qgyqM-L96HF}k%#+WpXS zYi?JDd;K`g#jn2053PY(6Z$271RJr+0+1y#g)oNAnH%Rn^ChYkr-m;K^?iL;e(tVz zKehVpCEl9GsH?8Kd=K}y;b_!g>Gii!kGnq(LcZO*Wsl_zSu1M#cG)%Ne(hoJbDs57 z=Z&^E?%gflZ~krs%#HQYlE%=my}ihp&V}l^b&+-qyNXcw(j!6p4{K;t5qUMdYR?x^ z@yKC~c(+ny#8>D{C(kmf95iF77>@4WhPs#S2m&p9LJe- zlE(A{C(^o{Y&TLYQc{Rt3B## zs<_v7(d;{3cer==k8P)_jShS=w%*_WdhdHGZ@20c=k%Yv_+M8S^zYc<1U??f(`QIq zthQwg2lrp#4XT!E9BX4eybjxuFq^8NtEgWFQpEgpQS5YE^A-ZxD7t3e5+^W^)qbaC;FX{ z@Arly%WwDZ{q7%rIPDYQX}@x`>O0ig-t(+dpX$2vjPa)yaL?(#_Mq>wgt1>r%eC*C z*NczN&pq1iPXBcOf?o^ZLizsq(D7Avy6gSd)943|7P3E2m2TJvgIdaJWq zw{urIy4PD0$4_qG7A*>0?;7|g)TBK3htvK?=xCS?EI>I#0=kqQvJ9FfL!=HgLdA3CQz zXLJU1?n=C2is;N)V5jah^S3Cbma!O7RO=piImJK*f|6}6)# zkY6c#eD9qagD-O({eN_$27XcIvMsiYjuhP8SQh9M#)TLgVFi4;3r8NKA9r`({S&3B zVtUYfI!Kvh9T+2wq14IID=pa6H=3*rlL@I6D%!XHJC^>5?|p%ZF54m-Ex+&;3X?o0 zpVYlZ_p4Tqw`w!DY`SkJ*wzKF-&dbCpaJ{IL5d1gsVRjNJ$y$T&{3Klm(xE#_lCR7 zoc}~nuD^5BFZHm^3@2cmxyt_d2ki@DXZZY<-inzSYFXEhWV;N!^eOD9v!?UjSyC`> zzBibh?yYIQT@(~i-?VIqJ|a9V^6Kd-tYrEac!z5p@tLO($XoANVSAnDQ~12;J|+uP zFqZn_kDoQx z552>WJrEA~~M$@IVp z89Yx<_onn7XCb$t*Iyrp-u!V(cJ<#%hjmwa?PPdv(k%dC;z%N#j09bdz0R4i@K1fr zH?t~uS#&RSqA1v`JT>O>Q%`;KzP$lln2JxX!Oy~?al$^~mI-s?Ir|g77q$jZHy^I1 zZoQkomvBorZ#-$I@ZYp=5gH9!J?w0Mo?P?&E)oA9 zu&VTH@y3ntprWr+FLGp;WN(wFHEZeBNf z@+^$)!R}4OceEo`Im~53A)Y#pXofPHy1T+7SMVZOX7dPC0H0I?n z-Cx61S0uSLCmJKmm96*T3)_7;jbh42bHy#6Y##@F`L3jJn*)@}!mmqcq%O;Iy~Enm zK5bO5!n67P5o)SEW97+8rozEBMs1ST*yKA@BUc$|9R*wbT)=%$UyUStQCB1-qC@XvG z)-TJYl_wsDGgn(4`}nwhx9`+^q3kg?*7f1TVbt3{4_2byhhFXujD>ddblp5wU#@*z zy!(J^c~|~&eCor_t&FKF`Vy@T^E?-G!3+CcmNP4+osae^LhLPmm+bZJ${9HoQwA|I zBJoH&e%T;XJ_YQ){eGN>&evM?lyl;NpvGj%jxXwQZsmR=&+h(&og1{#H&5>YYI zWo8+Dt&XE{%K6ktQ&&-qT}UD%2-P_dUrQKv9M47*slTWt@0clK7aEWXW0L}8_fGBD zmIsSBy)7v*PH7kBM69R3maGYz!(&D zvNGBxq@2WbV?b1u-$Y72`(y$N6oaqUkD25KPQ^a41B(!^=5ZzovX^DtWyHDon2I1d z&nUL&tx_Brb{mtb&iIG^g~=tD{a|-rvI0O34C<|gLpxx}t9GtoWJ51Xh!lxj76)2) zaOPQ#G+#C%vN0zV+qh7#&w@=?nx1B9f{2vH`MO#nJ3l9$!6a%XwFkV3!lqbxMW4zdy zTD_e$Epy?DiK-A*_mIRH#xezBR52bOkEOZ^1NaqZ0T#|kqjB0DhYSF6p<0*))ut{$ zhP(pq0>$;M3V*k&HaPz#=yP>K4v%=oz;1J$-l=C~QmYgD^< zpRzvi>G;%t025}oo7M!uHg24cLc_`HZQ)nY=jht9WhK z*}BQf6!RI;x@uU>yl_^l!Xr~3lfuHQ&*GLmaFy_Dcn>~Cb?V~U+M(@ed4EO&?Y1A;2Z z{3c`A2+L9>tt1~uTC6}HhJhj^o5ziUP6X7ICm)}jMgn3fs&yx?xtHP+3QkF;&OyxR zjVNZUw$SscginKFra{cR#Lr?-$v>mife^I<&e$+cSiOH1E*_?bYoqxhUpB=){uBf%wnvNq$jApC^m87~6e@^e)IOmWeoF=}USz5Yq z9*Te#CfUb}IFd8y%)9OhP-phAD0bCCtHkH7Ux*u1eZJ z$-M!OXsD9LGf`v140{yHRxA%c_~&16`thf##voTvRROvvWPe5U}P_G`W-e(u{*Z8OQJ#>~cI9T1tt2 z1v3kJ{<5vVd+nRU+(1_!&uSP0^-1j)Gh?;=q=wYmK~$&p?AoJe>(~7rx-QE|3`}RG z_CBi%u?;Fh?B45TQJLh?E6VLV?nJ&BAGqt>$kS?Br9mwz7zp|Qp0^(&&7ph3Or&Xo z2e+teMTI%lalD?unkP3FpmRl(B)vDhv}0HOZU^)$^2D2AGZoA`-GxjC;LH@D z;DKYzh^Q*9%7w;6o6kZaV`HpDm_lyY0(WF9JKn-IS1{r<1}#?y>VoLTQ>N+Gzq%yH z@6sAdS*nSQ6KqItg}7W7B*8%#iAPAu)O%ZfVl&kht)fhIhtOCp1SWvmc~oHJ#Gpx* zmvikMQ!s&O0B7*Rx%z+bPfoVw-FrF=eO+Bhm0zd61pTR^wmSv8tiEOh4r zN9kh*gQrW<@bg1)n@GZFxg;qG1uA3`#WD>OP}j$5teiQrQXZ-8OvyV6SS^Uy#hjn9 zqe)P!zB++B8ocr#*YYGF7_Y1@7Trkv25JQrzjwt?W$DZXpEIca2Sg`&Ob?+LI^+4Z zL|0Vf1ru!CuYl@VyzOp1A<`w=I%WaJ3}861Y#*UP3uB#yes~Z0EQS$q%%|gw+o_rn z*6^R#jZazeln_=va zYYZCdxRWk_y<-5pWTei#06qgWXf8R345<5Q%dGb-?|>w9r|P!~I|u-WsU|sgd-NsQ zc&%9>{gc;{6*2p%M-{3*yUNv)E{NS%nVpeygHco!jnFiVh)!m-dHe=Qs>T#jLMy7I zlpXt;lR4F=mF0lkd(-7^apBrN#H-nYFN72Yw-EtXgZb~WoyIsp;$_6ij#uq+8m}+& zSKGAsjBXJAFqEjvTM17bt2ynJNr`&*El_M?O)6~kDtnW>TnU0Sjb%7))ZySTlc?$-9bU`an(nE9wx3`ruFe;(%6Pw3wMg;6W0Kf9EF#$xMRys(6H62Ay+Gbct-++m^9 zvetE;XdE((MpxseYf9ywQr9X(*F5U^)o;+skSS3P-V zUR9O+QoAf6{HC5r*=M?vkFh*u84QUG;chGN@x>Y|f|^>vK8N#-B70KOzlt;Ao!2lf zHifuP+U2gK8Tb5&aPunrU@5=DHHqBKrU;zUWcQ8B2&+|w7jDLmYc6M63NB-3)&qA! z6LPkeY79ts_R>xw=6uPsWvkqq7;{1`#=r5JPVi06>7opgdPDXRL!CpcTC6ZeV#IJ~n&mr-WvVYwYD3;@dOKUELN|%Mt&J&7$gT<@6UJ?J6h^=u?6ofADNF@&C-w~N*hd@fIp`vRGI4jO5O&hYN{Wsa2^e-cAVT7g zUlHLn1P4h$cSX^l(N4p@O{Zl8t>qYo$?^z7%9d3Z_ zN%IK``gQlS`6l|_VsR*cVFxzr_HJYojLc7<0=vpRP!;H%adr8b8yo79Bhw8KFgn$FvkH^~yT-7mxO#f2}3U=1olzLa5p z5@_fk!E%waT|LCywIiOTY>ZRDb3vn3pH|pPOlHARQ!R!vO5UljYd#Wa%!#dmcySQs zf^fFg0eSobFgiYKssg=PVHc2KeaA_pKk{@75?k<<>>kHBOq*X0;+< z8fA95*ahQSgzgD1J)g4lA#1U{S*{bUxuphEFKhklr~e?%awJHbD;vlYIa?D__t}3I z!tPD^T2etcYt*HsAOKTUuKx71IEnI%=OxArX`b@-siM@4>m*V*TI~`$2YQl*Luv_A zVF6AsyOvQZ!^CVmrH&fe&uv+;rbu~%p-MU$0Z*)pm$b_-+|)0@3@7_-EG)gl0w6Jg z;8-PvJ$V>?M@3$!AS-50-HiyQU%-69(ZUZP>6o)Lh`xj+0aM1#0Rm{*<4jJzPX=Gt=Ef!GTi7!vo zY#m=zgO;=7bX&$4GrURx6ggOj0b;}~kl@I;w0E=T&OMNEN_9J0tLyGn;K)Q-B)MyL zdcIlbZOk3(tL7eirh5Ru&uNn>nw3f&_mcAXm^uV-l5Eg=llGQ>?ERK@P3%L9(w?Ha zoLgCrgH>LL{Dg`z=Gzu3s3pUJ9O)RQ&wP38Ozx!FWUx<<}$yq z^TK?d=Si%@;wK-iyf?9Y?jpDbVT7lQRv^vEogYJ~L+Jp=Bp6T)iB|UJ+9uY3&Gwo# zEg_w1tc-SpOpjs8$0A|IZDV3k*TPfoh)C5}vaG65Ezm!z?Guvln_CQ{1^KlTR~@(@ z4PJ_R@UR%Fr1LOKe&EP$B}I%Fl1#C!LUBTp&CNk2>O~?793d6zqDV%m?d`v<6sF|@ z(Itw{P zDxZ|7!|Rf=g+?;M7hJD$lsnaFIM7a0P1J&B>YoOo_&qTApu^%35taQoqt7h+i#PE} z9D8qF@m>jDU1#;L9(VtaAyGn}{q{uQwNwlxbpsOeM>dpw6+@Sy}w8U)dQmh3T3;V0<7SPu(BJROv!=jCLfU| z4Hs%ky*S;bj6Vf&CR*y~i;SaXr1~kH0 zigc#`0Pky;8g|d0PrIA6nNKlcn7R3guraHDR#Qz~drxpbOp!4N>T*2lz!ijBtlJu4 zs6+{R&F16pkcuf-F^&ouwOh&|(9R+36Z11+_9l4tF}H|3`_QARrRg5$-5?HX75=~e zgaZ4mwGGui#Zy7mf^$Olxi<5{G#x&2xA7H3m(iilP~AWFRCMK9x&b1@Y&dK|m7SP2 zq`DTCF)m4(WQW0UnxymKSJ#5*iYjVAsJwU#Hs5c(MIxY}zYA zI^OQa-4iEz@z(^sXlNjFT7cYa6UZ0Ck`?K>$Zcd2OY=%4Edve zfXd{3l4jWxR{U9N6^;?Jo5;KeX_sdFLDjkiot0CF;&Y7 z1>=lILm>QbyJl=)3Tz8~G?-s{T9g$QRBREjnCKf>0-)*R>>aZjl z;HVl6j6!np@FB}J=CH$Kr_02&Z4TLa(ukv~sHRRns(7nh?Eos$(^zhTCM_#9Cwi#PFOMP9BFLz7~zRGBqPKR!3zDEq-@)l}^Eo+E1OLp5N&FJD%r%2B*U zo)IkS-E9*{*5;nNM>p&ho1gaCn|3F^%Ee|~0I24A^Zk~m?ML5kw!-&w)_*r}k1*m~ zrsi07?tscB@wS?0Wb5O0^#$Q1Y7g~f-uV}Ezs8^ShCZ3OZQG_UKK07ez69r>;wZWw znHn!^&(79XFv0yzFW(q3pYi(rE{SN0?^ydTFxE5jK=D3zkIw3i^#T1SJao%!YuUSe zHq=(qhfPwSe>Qn9I#qpSUb)zw`lCXj{;TEQ`%i?2-k1H+9lsxXl%Xp5zjRkGNbH)b z0{Lk^hSlG`hf5xuonKP+TJ-c!|M)5MefLNAt?oye->)n?gb&%S2d>A4{=q%Zr2ci~ zWWB_RBUQ{ddvwnmw|}L{GDhl8V%tE(ho)I&0x@Xeo0p>3;CU1M)WGt-!_h6DMPEzV zZihnYJLHh+AN><0zpvk&-*CLNFO-ZDDzsP+c*3!HZ{Ur5tARR-Nz)@UXuT-hW9p^G z{HDv@{{ZGdZaACq{C2)Hcch{aSD;0GeLL#b9)n9&ai-1VBa0Eio=Qb14bDe*e6Tu* z2-jwCc7wwI`UsT^ZOU+LfV#nuMh~lGZmKCq8ftmqLetU_4<7*?*#Ue(2Ie!4u)!)1 z^0WJq48iO)lUWb*B{s?1M4k!jsxX}I9Ob&Ptw_d_x(mVv4@9Jn(*S15m|n93slPI+ zCx%=-8Gx*oPGL&KSf1(;w|@ddvoEqRtmBL&mpouf(%_iMmrffIlgdw1SW?wt5$rR- zATgPFA{GHOobcCkbb^n?x0|WV3-qxW-i*fTS;~$$&|gJKm8TEmhZ%H}2sYVDfxKMG z=5wVaYMG!GjI@e^Wq=7g3s|KFnNM{zNwcWs$pjMN*>ZZdp_5zS*(Fwsb^zBwqwau3vAS5E@njR~ZhP(!o3QdcAe3QZah7uU@x zLK)@^WZ9+b7BKSp+$eCH&Srvc+6WCU~=_^JJbIFpFm*0!hSS?6InQKLTmLQ_iv|36Y-&dI+><* z#H49^H4q75@zh2@Fp1Cj;*7H2djtY94N)1B9#K#XW%=L;Yf!yL5-8B3f|ZJi&SRu! zg#~lCjt~+vRKOEVrapC$LCj!kLbi3&LFpPvh#^G}T1*JU@iw0<@qtx~PnaCP0%m_K zHcc$;GEieA5eq>vQ9XYw5rF1=(ZWJzA|ec!$W%l{Xbo_Z9jy>3CrCL?bf@LvfNLsV zp=vS&n3)0rAo!8uFb{yFi4sBTPs1`s0e6T&f(ZoYN%IWzgCupp3tWjG^AKm_9tQx# z_;m0&`2PT=0g0>w13wJM{0tGqmt{P>LWniUbn)=OR=GtOq;&E8raIsk9FzuMGd~ZH zh^7Jfi!=a6QS+Is)PsOtB1BY3$b<3l9ykDSQYb0-&QTo*9~i(Qfq{@TjWwB>fz}29 z)B)yd#1ei08q+MW4??1u9+?ikYDNGM{UnhQ1b#Wvl)w#uvePmM5&)!%$v**x@u3xN z__l$`6&?nMz-2R@5n3nQQn5L}h^(2?M^jNWz{OVHx|K5$X&zIU0!R`(Mgp^{F^=Nz zE(5kLA>_A{yu1qSIIW`o=aJuB6bZN6Cz(Mcd7cz?IJ)iL?kZ;Q8l3I!Kf0T4D`dN# z_~ov4uNA#9#`bRwbZkttt&JMnr~S-N&z!3N0ArVXkGy-o zzP9bgGPhuMJC+-M)8Q`v0Q38qvI&;%4qC>CTX(IWHLGTVjM&Qimb#Yn-WA$X=Lq0W zxj(*dWWLw-E!ulqwmY-j1>4&HAmooyotnUf&tFTbgw{mbgs9u^8~( zU#e{MwRxT9_;?;)r1bsW=M6^R>Udx7x4VCEKX@GW+jZ`LExqCUDR)NiZhL9lhjC|y zm39Ks?JTj}_ZKqG!F^lHNqfUa-~-Y^t)}PJ!+2#M|t>B{q>2Q3bK3N}Fv_ZU@p4 zjDR8zITclE>eQ*w$=foG!^L*kw4p`6`*0`#C1^!pL{G;oU1N$8v*Kr5e-6r_JvaoC z!y%-2{J{KhTbEkomz!q6L+jSGrx)j&0$6Eh@=9H%TPfvhd~CP-}Zh?&6KVs>nhmO=st(?TSW44Q*a5uO5dBr0kEn3)G7UkSr5t;cZZ zrU^18wV<5I1dg$UJ7sVj2%=0H5kZ&0AHx7O0<1K|ib45KUpxU=W1vk4fS?Hgm=j5) zMQ|}$a_AA#nSvxh28L!#c;F{2GBp6XlMukfRtLxdo&eE=sK5dmgTpN86C!W~hXDwN zCWO<(#XpbWa0^x`1dyvV>q9bV3{=qI8>?D|MA9IT43m(Odeo9|4QTDf4%<3n6q%%$ z6JE1ZS&p~}LhCw!B*|!?5dhXfsPUWw9cCIj(lpOfCWL2(T{VHNLrA8hl|=l%Gla!| zsBnEEJkb+V(qzf-KgSIYnusOXMnKk;G^o`|2>8weLG3G~#8>JNB-i2bz+~a-2vtuo z27Xaf(0J1bsyOnLLKl{+4zmym9XbPsH&on(6G4~2R%gWE4pbo2Ns*)o8jMSLMMx2V zX(Z$@-73*Z8A&(>FUGOqBRbM@I0eK>(j?_fg+!PG=YSyzB19bHr6c}h{csGas1Sek zQluP@Q-A>;S?gY~It;!80H-h_%$90I#F>f9Pr!kI9g@^AK>&hdGERR9tb%X}Sz8FD zGx@+IkA*8329yb_^qLBeWccsVCENi7FKf@Ww1bddmNNjU=< zVU#Uk7^(39%=kuLH~z~3-SWeE$0AKk30E*!O zKx*=dn4kd9U*-HTHm6uaN?aJHJG`~Jdpk=PR`rVws^i)urOnHEPKF*=TM6Zyi8%2+ zZuNI9$z0VQ%jumZwszj_{-*x`BE@#gpjH4kngRm^$cQKD5jgS9zwzxnzS>UBT2lN- zH?QeeR##Xy$zoJeVAJ&iF@^UWa=*yx+S*oW&&b4+xDDOQ?atldR_hULf)0i#t*T&# z@bJc8@>QQN1bIt(Vy@raO+)P`Z#fbzrl0MxHtrb)BTkkCu#v0bjJJ1GE(qb<*lOM1 z7%~0k{@aVz^&6Vh1k)PSuj$v|#)sjKJKb`%hl9IoZpmj5V;imAtEShc(RuYNrlw`I zEY(9n5w9RRW0#rP&0m|3W)7XYq~)(K>;8rj%W~>3Xdb1!lz}Bf0;z1MR@58f*yG>o zCCB+5Pp8{TxX~D<{{WLN=GCplzTI8!2gx0fsJg@-G+PoE#<=Cam{+F)VREtH5+@7tRX^)f+*SJIJ2%4 zSkcy!o*E$7<*r%1dd}@y>9#bx-j~~2aL6p1(pnPdMt}hr&Z_maSzwFo*41Bb67JW$ zE8F+KeYW;nYj)N1xJ}*EW2Vw*)b$#-pY0EA#ZsN%Oj<`np~+4Roze} z=23FUzCPXvOSb7Gtw+ZfvejF5(lA3-UrsAO z+_LgJ>t}AZR_()gYj~~D(Qr6L2G~owMw_N&fHaYw4YZZ)uY{NS6;G+kCoeh1TjTcU zmbq%}>%Okv*I;a&!jufQl!2k{C=oCwGp;pvuPRnfB+lD+Tb$H>PQt=@t(NQ34z07> zm$;VF=~ZjVYz-=0nYIH!iI$oiVYv-sL}=wM_%e;Xz!h$mR1QKFaJOyVeITOQCsDRk zP(jZ;W~OA|+`Rc#oD6r7zyxsg6^Khe=C0{7$N7v%wm#b-LPb+VOu* z(O}m7U8@#1Z4eF1H!dNRw86Z<{sR!H7EapF18#P!8u*qi<@MXzHqq7Z5|-`TMsanN zu_evJ&2tG&I9=Dk2T~en#54f$|Ir6~29N4bMrL zO{5PB5z&?z&1H*JQw>>HgOgWPR;-@7e3^=G?IPP-X?d4(d^UmW2e$UmX>G$f1Sw5G z5Kl}*CgGYBd_HF}`;+a~jlINs zS9aGH&F7X&mn|~eG=f{x)WMf8q?1g0N2m34R_Cj5`+RWx4^8z>i8)nV9RC1wG5byJ ziyO_x-rnnKF4@>_?;Fa1DZcg`TSQi1RO@KeNr;d-;d-|Hw(PH0E_mtj*jJ%+_~)XQ zo_J}*`V0G7_E(?x51QHV-Mz(r^;zv-X>3g40^ry z?YX-4=)c{zpVgk}N^NZIbMOBE<5`|R-1;2$U)U}O+fFNMYTCag%o}#UcgSwYy6<+3 zgl=)?MCJEz4{)l>b|)5zuVb-yD9iLo+njtyh?zqR6z4;aXLDc z0*fDoG3PpcyV>R;Gz8A4e=p=~f|05dZW0SE;&fjIIsqF+mvaDB@=d9m14 z)VvjeYfB)Q0$1VIzm_Rd?ai7{Yg?->T=$l@w|h#)GNzx%#<}@1ai*7eAF8=`AL>ACN zjVc%!l@T-70-j&1J%KdSmMY$IM7rCHGdEvT=v^a1wyh^iX(~+#tVSZv)R}Lvwf66o zRR{*XwzkAGo1T@gD0!b$k*+|ds3g~>Fjl2^9h;Vy;qoHt*Ie~UCd+>Bd$$Rw6=rfr zntZGW>6)mIg>gHbO*tPfqNQx!Ck2Ch$Oqf0R~vRkadS?g3Xp9JYGYH9It;U>IWN5V zd8Qivr&iw6TaMSt;A30e^A)qUc4SrsrI%9bBwV<}00AVCB=pM|Zf>hlR$M%qEwrxM zSpJ3$$a41e+}l0EEr%ujOJ~$|hG;-ks%zDxR~(OCTVrp$@)b>`WR#fh>yTF2k}TZ* z(y+D*2}d+bWr#j&ihRa|V>|C9UTDHKS-iKC7UVZqE!aZWE&A$~?h>9;Wfs}>Jk6vp zrUrje>5Mlw{^s22WRAV0`I|~A{{X3lZ+YasX3AZHsO+zKTSVK`bZWLvsWDPTbAgTv zZqruqcRjva%Iq=|rmhEdALAIJl_Ymp$XIx>s)GDc~$(o|Obu4?H zXy3Tkmg)4Jg``m6s3>7zGzLlO)Z>EtpLYKMcSXT`aqc;tc`eGcG5$lCwYS}(HOtED z<|(J?M;dP4YLO~p1tS}6TC`JU`HESis^iD7$FFlCZ@FN=mJ6gY^qm7rHNt$s#L0=S zGu*worr7x7-eqWxSE-BgJ;Qf#ytdZf+P$FqMz1Pc3Zu<*X`uk;RVFY|z0Byprl&p9 zN;sGYH{9!X*5=0C+gG!x+S?K?y}N+OwRHJefKqYUwN~bp7lvhC#6Z%f%$4{286^AQ9Gv|?1uV|wk`sjiY6i7k6SBV8{jmpM?2 z>UwOK5dd(Bnf*gp3Q!u%WjOL%b^icrb-VtgtEICIV>v9lwzSQ7C}!1k>Hv^cZOKFz z2BlyD5OR#My*B5><@>*HGUXVK^5yGJk9kzwOWviOK)GE@q6k9G#pEa^bzOD?>Qh6DjFY{0%ImA}kB<{?a9l%P9DdnR zZa(VuqzR!->(^0%xoX>!q&`RjgCOI5y45DHto$RzZrUd>+3jce*zNv1W6gW9zx}m~ zytixi{{U_F+w!)++*z@|?j7#?f6MH+?ZZl={?BP*-r=q3B&Ls~Mm*QI?@i95byr$c z_0L~++v%yc=bF}^l08Sd=3=T%B*7pGkjA->!yew7N>oIir7RHTBCI8TGg4s5p{6a; zt+$;*2F!V+$s%YbrnLBY;Vq;mz`_MFok~)T)b&0&ew?Z)hLU>l$Z8N`vI4;nWd5njM9fc)E1mZQ z4**3P0F6eJAdfUnB5|Re+;;>RK>~BqYeg9kl`%5by`;QlY7wgCtcd`cb?ZnVe;io( z-x8#O6&*hr$|6h;;e{bIgmVP1fLuL5OxcvPNVQLYd#~VQ-O}(Qv*S^0)`~lStB7bpwlS+SOqzd z^$?QGCVCPmO$g~R`QRGN&aev|Ad=DzK_Hj_#F!PP0RT*x1|X9SGzaDk{3b8}*>5z4 zlMuO*(c(-({x|@wO0rfY2x zpQ-^KS+8Dz_~DJAOA<8@Kp9U{)REQ(07(GvSq7wa&aqMtNWzUnfXad^`iYYu!LRY3 zo)mH^MXKXEizibOI{jJntPX@?l;tvB8BB5@3e41#pT{GED*|9O#S}DSJ{6qL<%MRV z9}tjB>X3>}MsZK|>4qtg3o+I7fD903bI-&_Oacd4A*!l>Kc1 zpDcC4P~J@}`BpR``ugq_Xi_>6Q4tYNxG|wE0&S2ZzfG#7VE1%iItsM9HRcF%c$b64;v}++Y-`B~+PU zI+)b4l#IS{hNf^N2xMTy%XLr=W@l0Hl5t=BnQii6?h59vEsk=u+$fSdk>e2o*ADDohw395$c^ zZr))eL^iO8Ddl`jb&P>?_bQ^b-n z7PXW@7G?Jh7uE>?u+;=N)CYvjOGn5IQf;i@a-M@Pcmht6D<6O`x<+A^e;iauHO#(J zHFD}24M0@MFi9o}YSa^g4C4}n^^TIHd07AmCca`d6Ci;D1b!oh!{Y=;b08?v1hZ7g zJt@=>Ffx~$QaicO*+RhuWWYIT2Bew7nb3T=f-&4Ll|aOokE!9W9V)KZYZn%y)&dppMSol-q$)6y;SvO*}{X<4DeRA**X`243V^ z00q~Zlr+yH(12(#(&80UsU2>HW&*59H#03H9)^Su;Bcz>rZ^Vs*fZ+txYofMl|UZ} zny~9iVZ5MDUvV(rTWA$Y3?wlGK{=Qw87=Qz+Ja6`FsT9D2(1puL-%1LR=obcL< zO3FfNB`7Sro2t;^n4>X?G-4^GYmva-d&yI&iSOF2m>@v}k0^qxOvyetTned(4qJV~ zZLwrgYGk)rt=6Fl$bnpR`UYK zIT1i3A^h+|d`e_Hjpc)z0Rv8{855`)<@n;1#&r#KBHUw1f^`otB1cK^6c}$vVDS;f zj5|~TBoQKn%Vz}qgyLK56nC;4x`v}4G*MVpy2*khMLr%F21IvLs(ztX0;(YC$bU)0 zNr1~lkgNuo01&WMeAFFTjcbB9ffeUbJ~C=RlOAaVc$_it8ZA#Sf(fie1PF|zSLcP| z15eUSFT{-M15>AtC4m~^w}icDwECiTQVw*(?hwIQCIc*pk|F@<6f`uT!U3lvPymU7 zB!lLI)^k!$DQE<1kfHpfkTftqra=G=CPR39Fxr(5KpUWfNY(LdgaV~VG+JaZB?=aR zG;*LiXiRD$YNQ6~roYB8z-+35bxO!>dWM)FP-cHsP7_nbkAT*VAQ=UvVStA63b7wj zfHJ~M%7aiC&&-IW1OqZ6Al9*gfZGXDNF-^fAPFGQl0?MeM-T;+#aGPnB7_K<*D-=1 z2<2Gn9+)&xNCbI+Al9l#9Vjb>o+2UMwD+yWtBq(a(B|SOs)(B!Bk3ot3}Nw*4dA5% z2-JWbL#Psr4oXf#rVb&VI*kxxOPDL95VF8$TJ>TiVeyry0qNC!pmO8)@c8D>B~&#oT;0hLuijV5kpvZ5vfDHIde3RPE`>BI(A zdIT&0FsD+8F*1$%WK5j#7MACP0P`x`Q71_QL53wuDXN_?Nd_QdQk@4ReGCXvKw=Mp z8i*!Jk1#Z@HRMfXLv9KEN+q-wgE_!as)2q#3{Zv{Olt*+^1zY-2z8jpo)=;VS+OU0e~m~{VGL3%|IXu z{4j~L?)Mxs;2y1z6j-6o;6a6G+mkBp{sQ14_k8 zUsi&?sWQPpgpwraBh4KNUlAt;gjW30s-dDS#0**h5(L2n4;XCptaYt$(=YWHi-0^V z0p>CX(5g!MV1|ezr(8S$Bh11E?31CC8g{3G%9c6Pp1t$Q8-3hx2PNE#HrejtR zMr1%WGfV(56`3J{BRK@=Fd)eU7-;yM16Xo4ZK|j$!5FCq8mv03*UU#wm|)v(SsvhN z3Ot@&MzI=!B4$*IXPG!aL%1hQm1bs*D=n=`tXgKhB_E(KqxATSgXGxJahf^#v{ z<6KPf5`0X$%Ymgt%P=SD0Uw60Omg|R*aHO zmsTUq_CYb-Rvups#(Daduh zqVr${l_2N_9RU-lGZN4V(sYKJe6hEHwJ0Z@Nd`jdZ6&B$glFYIGZ@a*b1FcX8Wtb` zv~5aA%*hHfQUr*ladMWri6~HpF9I%FWN$PR27-o?q({}`(-7fXym=kFXVnreMwblc zBn3k-1Q5;Ea>BKzUJPTNplETe(8iDef@`Q6MxztqhN|qMAQ(u$UC1L*5FSVfNH7I+ z!nLJB`bWVo!O+S}5`=(sw)xqx)%hOD_-5W{OXAyH1XtAb$ylM=mKQO}^oN0J4^ zF>PMr>eLE=%LITXb0hUY%L|c4bphe#P!h7)>8i++Ait29z%CSKf}isu>5}^3J$8)0GJ|Jj}I9>7*+uSsnn)H zRV_&Jh=rIk4RVY_7>t2|V048EmP<1r8jwt2#N;@4$c9kUNjh`!F(5&z!NH@10$R6u zm09CcPNJVk10@83s1PYIaaB{7s1KB2r${6zI+#GAfgUr{7lgZn3?)NUfs%P-5#np9 zPfTSz*+Xgp(8d%AV+KiCf<$?s326Lq=kfvNvZTRHRAPL@6_Qj(hF|l-Z~?8i1p=%B zR0)YNB5EVkuTg*jWYYwLZCh8JbDG0-)U^CY4L|~=nM)a&COoJ`BDukk3}BfXa@%^b z_Pic~RY+eXg8&-oF(=?_ObJFwft69}5R6p?G}1_E8IV>-#<-^t zCgD#J)Y9RLysHUcgGZJ+gItam3@nPN!*30?0kTx-KuBN@n1Zk<0}}v{N6!})s+WS{ zoqDWffMisSBtShg%;VXUOI0T&oYA*}rmZon^^CuSA2i{t))UN@+F5!Ah9YZ9AzXnO z8o`_^a7$8M>a{he3QryGe|Bsm(YMTSTt_jt21?v*skyb>vVYdFCpr<1n1l9~-G){Oh5Ff8rsU~R^ z6rhR#aLnyT&CG`h(=uRId_Mv_X9#Yqi;DIY0z9O3iOPN*MQ{$TtIC+-mM}<<8qCrt zARPQ~4$4*nBu|E5PsC;8Tmx813L~#te7-maD**wz42Z1f0EiWw23AveMGDM@Bmo{D zjW8NY{7MFur&amRL&GctyjverEu7ZDIW7;E$&oK*>k*z`99G@AcNM$L z(~GCVOGjYtn|ayYzj53bwa44rIEexFjN5aaO!|Fm_~Gs^I~^2Scq@E(nUMqx!~#HJ z^O&be#1$#Dmb!)J3*tP)iKyvLv^{d127xB1%uNi$5KSZECjlJw6p$#tRO$JhJ_J&5 z5aP~aYM@dS=>cG=lQ~o1bDRMbj%>hcHB9Fj15gEW@r(jh+q1-t6=42SG!ivL%yoh! z$REc6xUmG8AV`DLIzX?O;4`&dnzdjhARwJe#iOM_nP|>FSPcWFLI_f0<}x6HS)_Ep zO|Mkp>I}g!37u7dRP~9Pl0`5a{sy}5;d5zwv$>0CE`PUoR?6M?)>I9@BBy6`>L=;* zieyeMk6OQ^wH&se`hP=WnXDQHVjxtJG&Q9$n@OnPXT(6vzGjsa9wuOX{{ZmADN)%? zbR1GyMIh7>s$hI`6I>I+i0so|8V)9)3DP970<`!{*CBw@Z|V7tf*MCkXXBn6nggl` zC#7rg%9&FWM=Ehmf<|Y;I*7)K(-3o6I=t#)z2mVv-qz=Ki)>uFcxQ~2R5Weu)YT{Oi+UMvj;js z&mJ$=eIKXweun!SwNB|xUt`qrK9$yPbUW*MaXI0{)jYME3F+TL6?a2YJ&+jbU|1Rh zq^x7+&s6C*`VO-FKJGbNKVj&)igkNSdan_ouX$~V-))}SgDj6_S<+k*Wo{5^5q}JE zQ~k_5GpQ>(!qn#;_~H3J*XB5m?Cq`f?Vob?{_@8q#qt(zGPc)|*-P3j>3`iziK$&1 z%E;s#dCy4oEBZfOwbX1j-EF68;-7O^IeOlYW3Jf0P1G+fm*Ds{^F4_6Bi&9j-S2NW zUVCQtw!4k{Y257Xu>Sz@d%ZaHLCo;11ZlB)@fUXg0M%)+^hU>5v)1hG_1z=prPQuI zDfiXNj^puOx2N3b`m6N&)r(cccW`swxSgNceBtJ}z;9_??$N(%yS7i6Zd;*fpVWSI z!`!UCe$$p*a=aN$04G;UPfnjA0LDau8H|F|J`@9>KMe7Fn3TrwC{~dtus~Cow z)Ka(v&5@8yk{Fpi2g^+`B`y#OSx6Mp)ukgpg+3TTg8&^TAOn1626OO%jS}t_s92beqJ)Ft zT47z}MMVfSBd^E*031@X!Y`RbX^+IF84wOc_~oDB^Tgj$5T8pAEhtEDh?@9Q5}Y|0 zK*6e+&VP`_wauD{0ss7=pHE+B@=_FQQ(rYIy9OxmHAVf@6 zK>nW`>e4d8=C2Wn1&@_Y4F3S}G7L%nc%ElC&=68OZFaT4gO9R(3X)y$W zB5(j&i6nhNx+w4iDw+X+MGZ$Pm=Fo683_{-4_p#bt9l1X(^Ar8nWI1v`J4iHz^W?K zANq5eR+P{2z#xL5=`99?P)Pv68AL`G=vqnX^%TgfBn>k)CVVNG`hSiD7E$<(!xpJ0 zI(;B@)gLd%43(D!GLQtw4J6c3ax+@em}(mD8%=5wl1NzBBncFP1#8g9vsKhk~k*=4n%K~F#Hs7`k=C@rOSEpw{B-~VTgqqWJ#!xtPvwR}PRG@&74$5KbQ!uYem>>A{I5jD?T|^Lm9ezKD#{ewl1`T{-AXc^f%wQV@l+LO} z2oh*KF!&k6=AQD0P(Ebg8es$o2BWB^L+4qh0cufrt4zs0HTa4~0XCMUY9tySga8N) zS`qNU0_Iw&7C@8MlDQASR0u!A098(Sg{rmF;XNb7)+k|?bov0CnfGby4~%zzM?@_a{SAFX$RcS9Txaiv1zU{earp)ml?ic)z z`>*eAbHLG!Bmv(&8Fham33ymQVGyZ4^;I( zU2^vJ+vIBz`}TYz*t#!5+;;n$s&n#Cj&AmA?X#2bK34AMVaIO!j`rtzFZ12$&feah z9?kp2Hsf&n``WkM{{Skk3maCLt1%kdxbYn~OV#?O@=Z0j9C-MiYpUvcE`pr3&ECD; z$E$wW`wiONfQNa+Z5Msc8wi{3=;W;0{odBpskyh~)s?L9n|UPZu{Rj~Moi<~JwMTU zPK`~{wfp}7W_s6G>bu=Tgxadp!0Eo)?9Ima(`}`e+uHLpa(C@BU4Kw$^)?$u2Trq3 zS^U7sjCqb#rB)>Ie^lDdyqy`_U4gXYts>jo6?>%(%g!F|=W_E`yM4Ujl%AOk@Z8r6 zLK|tq)AlzPAKK#H)q%7L(z=8NEOmn={{X5w(Bmu3s|y5kXBry=kKiq~k}YcTrh;@F zhy;TW3=DBur-iJFWx~+R_Iz3>1nRDE4Ll--Pfv~#yRI<HV2Juj{YN1lBLqtgRE9OQN&snEgcbQj&J00G zq=E`gsZ-Q~1q>Jy;wKDqUep_E1wa|7reH}mgV5nJEz0xWECS$(W>X9#80q}Y4iP*c zH&znlkPb`n>q=sibo9uL0bwjO=S-?ck5SX%fSRV9ide`4KA?`D@}I*2MFG^r z2+J^a8J>}V3Nw*8iV!Lc{!lt#0SIXZM}tI7Y2)y~Cg3QE1myyeA0N!%9F)WYMxi3P z(<4*xoB~dAiVfulJx3vz{xvuWwxU!|Kp@Zm0Bs`ya+?!26&^7jVm@Lbm;kJd(mHgZ zr~DiOO+5l8Iv<}%`HZjw?hsVdBNZQ*pPm9~#8{e><;(~lpT=+&RDvs!jKo3s-~bt@ zbT5JM70PI3VBi3#MsO%W&!p07Z~!es@HH_;CJaF7{{V&n1d1pO!~#nil0g%uV>5sO z^9Z2Qayq9ufO9a!^uPnNNfb04V=18N6MzH+RFF)73H&;f2Rs6mF~m@FBo!18U`%)q z5O53-R!kYv0f?xYAI31J^b$#71WW*G(?OJ0lLP)E3!bA8kV44t2QMj#{v#Q-o9-B* zCJdU$sF;IZnb!yd_~r1V{#bAZ3*7wn;PQ4mQ;23w)$2oZ&u`FIVX$=7Z;rD608;Mv zszG)YL@`2f;=10aKVq7_d=F;ye@# zkDfeq%lP7XtT^l^HJ9`n*bAwYnHrgafh<3%lnUZuB?H^FYk7G_Gs>sE?T{DsHGRvU=bCB zn}n`@2OQCi;htxEcb=T7%na{$Wx&+)cIBa>(>90&NC;^FD%9gE?yD$z#~d6q+l#9# zBw{=5+S|0ZHrG8yAftkG&DE{Enuxw)4n{G>Ygg^7QQ@8YTWamsa|`q_oHGsj#MXMhm&;tth*Ex?Oa8sGg_x{YJcmT4hD7 zWNTViJagB6wa%@b6{cfKm>(m&vbWm$CBm<6+Z$r|S0q3;FGWkV9VZ|$!Mh6l%3+=R zGU}?HQ3B@saeGp=)<@8%P@xDxh|&op&s_TB4r|)cY-cRmwNWcUjmIXkwr>J9~P4TbJ3j-Bt`NTV??rgups- zW7nlIkNk$=MC9@-Vb#mg7Dx5A+l#xczU8j9+YRX0*DQ+CrN!LA023l4)@zLGG;aLf zXY)G}uH|`JjF8urH+1buxC*07p#j?P`lXt6TDLJ2j6=G&mLtEst8MbBz}wrodeyS* z4V_}-f;`$u8htuxw`|U$Jf{=Q5Z`H)v!!D${+JH?UARcj`tb!|x zw(pys@|(cxv&y+En#{=8`>l&h0^5gsw$W~qw^hkeakYdbBHJ(^$i>rHt`UXlc$_&b zSGgUg*o$^r!wu@ctd>Jt^sd@0?2d#0qj0`tD*=r#w`!AC+iN|B4|4WgmYf#*{LQ_+ z#=M5*%PnQB-M4Te+ParW(zdg>uOm@u8AeAOwwkzR3vOIPaARM+w|?7c-V(PMrQ{6S z{J@PC>@d|J)61E~RaW##>%{3)qOz*4V^OtW16ekOw29m8Sdh1_qlG@JOeN-k)Q~bU zib}sv1)-~z5Az}JxwqQdxw97w*hM!E&v5Ia)7)|E+}k=0OL^{R1~mBNO{Ep(#dzZ%GqWLY04{Q(y-rxn%ZJ{B^kuK(Rj8lawB1W~6H=vhR&AZCmp|!l% zl|i@$;Ptdo;IbeBLgv6{j2dpSsZF%}y@R&K*ltGeXoldmbJP~^g}S!xTVUeNyLW>I z0^@muD+bFER`XsxqIq1eQscYsz}uUI*s-uFWtH~!ZG_uB_bFQ_Sgz3@IFqNO0T_w9 zZD`DY;?_8ruJ3nbrORqrg}+kj8;wh@!_Ec4rI}RZCKzRkPV`ZU@gZ$qj#|SkU+#8p zEH&1$=(fu$1@y}OQbnN-Ng80)dd?r*+`3%saATYO(70|k_0OerPo2vmtDQF5;YRes z+60OW@l~t0nGUc0e4b!B;{Gdx^p!W-L{kF zF`K(R#jUX3Zf@JLZQL6cNLzPzcL?()(%F_a?Wfk}6=G(wi@W98S9-mB{{XP%H_EkU zJHF-+FtFC2_Vys#wQ||HZCDQ}XOTLbnVLZvV>zAy%F~V}KHIane@?~iY%d$2x=n-^ z0Ap?poi>y}lNF3*ZO2#2&2v|h)w|p7q{W0f&Bb?1h*0Ll3ogaH%+VAS%Nn+lpYb{? zxYFg}KN&1ro;z^X(RSNQOo2+=BFGwo$-F~M&9VqGU}K-}R(Wuon(aErFBLzo3@?4h zw)**7Tvfre+q)&}RyN+C)%sDE+y+1iB(#C}<7dmQu|E=aMPX+Vr+IATJ9_f%654Dn zBRTaJ)#MgPM{O%@QK6dVl>he>C@SROLtIGbCZh!H=_SxKi^LJM@+q@-GDsou5ewYQzuTygkF==6S$n>{u6w=9;*Zhsv%)*)G0D%L;9($(Rn_41IP3m`@pA#*y zwnc+;QK4b1univ=(lO<>_A5o4_nbDnc&s8;gg{xXjRee;P-M+1oDR6IRYcuV%LQiH z19752$x4Y`Bmz3tXBghqy_BY-hiTWfYgbRJ^ej7@dvym$bp)T(;2Ej&D^o0D=~XJT z9y%UNX8W@@j}p@MkQQ*RSPCCmgfmV>i3O*}8tu_4%2@F_zT^6EkULiNh1-`6(gjrO z)HIJV2EH>vhf8wvTFLUFcin82D+)*(o#x))YwvRM5&|Fw6@i$NM2H#Vp8MN&Zuf7Q z@HN|}?H468QrY|My|H*A{{V5c&BeEI*xFJ3%Zx^#L69p^j!(F`TrBq*y}iq&EqE4P z_aHq(W>(q)9d0r@n_w6&ovzE_jetYYmWZITI}1GnkAU$A;j<+t};?Z2*678h?VtAXw^5`3bBTX?6J zraA9L9QL-3en&+i%1a-SgmN6)+`2s?0w_9dmqX=6ZAze!PMMP?aml^ZJG9r(j?KN5 zW|P&JX78W4Ez5Tm^-HHCtT?)!di7up>tz$fR@A)=&b=I(X5BO@e=KlaDWBjKt zXg=oXcf88LGF%$;3#tgzlsZ_M1jPUmhjqDU&9?Ytn$p{8E8(_l!^rM-p1u9s8?21& zwX~+v2V1e{VnZ!dN&b>480K!_h}S}2`-OdoT~-Mn8~-P3aEVz$&M zTWzGXD~~Jyv>i{+95U}b%ZXB=a6#X4-`cjei(3|Kf}pqot*O*a&Wg@sP#Ky|Cf2fU zsXQZxa*LU^^2>JXm|(uO`>ST~15U6VFH8_!L1zFVh0hypJ0z=Po!^%W1}n&Nm#nI@ z-WKfoj@pm+4aRWAQWUU&-9-TK#+$oSjaTkNX)bOIz`1^I<820)SBPuZ5sk3-l!NK6 zl{XEt04<$pd~vNPs})8UjM~P%-*VS)-?_U>T20$?rO}Xs0TId=AOHQ!mU1pq)+wzgQpGqDiY7gj_74pkWI+}lY{!#UmRmv{9o zOUW(E+q+?|vs<-q)VpyCg8DTTMPaJoQxqRgF|y27Q5M{;oDqt0e7) z6H+ymW29(Sfh=TDXH09gvCjFe*k-p} zYK_8L=>}Vuam^px!dBwl-826HY^}R@Es=DyD+A?ZF$w?%ROEhm@?U1Es~%;<$=Yc9 z*vh%K*Hn`FThj!tq(xZN0Mf0H^5+=Vs;f0I%tLrA+tpph;ZZ{n4zs0YRj8n|P=alm ziSZfY+D_8vT$*j)kvGK6I4%kIclP!+%6(RQLeYX&+p$o(btqp=QcTRl40KV#^Bmio zn~l3ClXlv>w(VP+TmGH5?haW$VcOdT^q%J%$02mz_f_i*X5a2FlVfHG*Kw4v@~JrF z>$mN*URt&HT*vih-k;GvuW{~fuO%G+0At$^@xQ}uxX)z!vwdps?(c8=<#rc$rTtsG zh2uDltC4c-DK{p1o=Xzi->SKWENt*`8Q-@R|m)$MJsqPup-%^mukNd~?W07@bjPm~IPNs?q%YgxpA1%*jEi3E58NzydaIKUixhf$YE3IG~Lbu{{M)QE+f!1G2ysg3w|}0-Y*659NgBA!;t+r&nSItp-6oKm)4Q17T4* zuQsw$X=HOz3)Gm;#8#px4KYG*un8o@tbv%BiH2fn(*T2o9%epVtCSkS8Go(-8fE~H zu?H)nh7ma;C#m;^1uNSun1@XR8SfC9+Qzc0A#}kgQicJrzkm6 zv-n^EMF0wO6EOr-3F-t!02^lTu9FQkEi}{`rHA2wYORW50WCikG@+n^CYS^PVhq&& zrHP7~&QdS|Kobxlr%(k+Ez}RfZ~)OsmL!UrM1W>8oWx)W47@M)zy$Px6Fn=aWrg51 zsv22gUn-iKb&_-V#tiWr!<|OU4>1I^zyOFVJr60fg$FyZ{DZ(?Qk@oU0VU4k2~`(*l5MWdP9s0P^1yoo76o@7ss(L=XhAN2!q5 zqcMvbiPePId$sl~HA+#f*rWEUz4z#_N454|CHPq_T2+)P)zabrgKQY^ERgKJ3$eszy1of~bFPN}u1OqkD?ACdk= zZ}+?uO_!^I;YHr~izaX@bg}Zr(3>N)c>XdNIf=)Lf2OY~6ZMhtaz|@>E4Pqw7g;In z(F8myN)&_2#0v$^`YX(PIluNS5rR=r1=L0!$|iSrG3sMWZ)gJ3rm}1&7Y;&>^sSh( zEKL(96k`d<0L2?17rV?5#KmGgRU?)g3)7UkazdmiF{Kl=7-J(;7^N(TGPA!ea8wZ# zRIKqLAkGS6oTZ@X|7wziy>VdW`jg3LzFj z&}*^QQWSz-)S3tv4^OPR3U|xmG){T?c6KWcF+9vC+Kgx8 zlYrM~$kyo4PiX2W#fTvW=gH&<74%69YWs?>Y-WTWly^|hBp@R#AVU6h;EfAXzOBQ- z%egL27%9Dboyn$1!1ZAK$d3r(o{V#@NqS3jsK$9WUr%Xx>)y*nnUOqBpeV(_1(wR( ze^fcaRf;>O-~`jYtd{kt3USbtey`hV)yXV4BSCLPkBY8hw#eVjJNf(FdMim^jY4^7 zjmDQ8FbBx|vc{s<{o%3x(n{Xb`XvtD=HoJSxG7s6b%|x}r>tj1GejIF<_8R){+UueO&Hv`6^b_pzGT>= z3Yr->MN`lCHV53h`b9;{ptG5vJX-2hj)W4sJVQY`QE^IxjGC0v0tZUxtGuVEKN@mJ zgylcYquW8cNh!@yU{bCJD_)je&! zeK~&~J>@XJv-n@oBZF7W)ihR-3;zGLmiL775SXq7`oom?BcsX*1f$5j^1)mL<;hmM zM?b(AIqv3aAk}RC>DgUjF)r!TBxw{}o+ql{dWm!jT1?oc?c9fnCs%As%Lp4~a91cP z9G#V!z=)Vo*4L9p&>LqC6u>I-y7BIqV}53+JS6!urOS*OSBSHi|E!;ajuVYob-PGr z6NXeao{-w-x2s;I6)eNqB6><>BXXta*`?+cnSha$Cb|QDP@9!XV>h{p0cGJ~=x&NR z@r;>JPw9{c_O>qHPXa|jUa|598AWd~CJw})q3~grg%}e?Yi9N?jLu_yWelQ@ia7Wg zq3`k}M1#v?I@EU3)@@DUg#6jRBi|cWVdH_n|R$bQQ-DpOXg)a3bY(ah^^2FGQ~vc zsf-08R~We^Arzvh31K7ZNu;titiPOvNL7^n#?8?bcvXH_mk>alK3BxZ($bh9n4!&9 z7!l^Gy^o6w5zNfJ0pBUYtU#3p_2~g7&@(PoN(`%_tki?3QOXX=Pg7BJw{z^YI%}$o zXkMg>89^r>e<36xw0A*CBh!)jV9wlZ@Mp|Fw7%&%z zVZj)A2{g;NEE*@LYSKH^0Uo*3qfMh+&@@p`!Q_m)KZeK@X;-u}DAuY+)Tq{|w61Ar zi1C~gNS$J~@MROwojlA-5Q?Kz-*U*vu-f+%u>LPk3?ZQ#DFlu_o$Mluqrp$QghjzG zIT!2a=*~Gui8e40vk2xzLDh7wk|U;6+~@~qSAL52IfkY72Og1EW$>7Rh0@%dMgy5q zb-9Oo;Iww-!k)IIWI3b){Gp*_-!G>f7Kek_gs^N2jL8n16Bg9CI3qJJ;zXml{9~aQ z9SW(3GgEwd?=*ZB^7OScVK3>`?EO4a2Q!HCY%K?R#Sk13FD2lbf{JFzrTPRmH;3y9 z)$

{=JjjmI8_aJc-a}alqOGVhVi9Sb|mxB%TXAc3Hf?=)^N#{O=QKU zD`&+Cs8`?}rX&DJfpYG}G^Nr)X)3_&I?sh)5TIM7z=~5Qiq}Pf<}S9ts-O7d^L1bH z|5q$U!z!RpBV~kQ60$~*3+a04j^@z zNeI(_NUobjDef8_W2UMTMp8`WHP%T9D7Tl~*>fzOdfX}anmlX4yhf?vb922R#HMV4=4ux{DCiQ&+TALQL(4Z4=gIQM6WB6 zJ7D@aM|N8ySHX5}PbD}(gratg!*1v+AXzCcSWUuOTMF9hyj`BxiZ;Ti`ZKuxB%YV; z9?NEmVX{7b@LL@Z-+W6Lb3Sb?`)g8@;t$xY+u5Lt8RwMO_ zz7J?5yf5!8XI|R{g-;V&nQvq7=CXdw@sJq5EO(Zsb;y6G^q8XGbT>vC%#Kp11He_6 zD6^nk)&n%LS%RBj5sz~Pj7Yl}bsmM1A|Rw(124l#Pf-tC1u)#)u;^Tp-TTsXAzuBb-$qEk>d<*Pnva57*=U!zuhKb=6DA#>FQloQtlPuIBgJoS5XH;i?#l?9txTC#eFA3z4)YWY z)wll*)CYijDrMCd=#jL*jRjVABrZOm2-#QFseEQNumi{x)+Djg(Bjiw#_1NHhse?E zE`Z`uH|t(Ph~_plMg2wbcC*)=hpAJBBTR8f+!CDds+=kFCF{kGRzX;B`q74WR<#{S zfK#VJR>F|f94DhWE;gD7fquaQ+@;4dk?CcF3}};A!O=ekC~#@~2oV@0QWd>Li?$sX zNfLRI$c7417u$;|QprM}ty$zbV9l|Ta_L+SaZS`<Q~Y7z^;0!-2C#O$+J4cZVr z#;~?tv+v4Y-IuE6d&i{gsaR`!^G1T6@;g*7KVTG-VU^D(%lY$R1v;_+kh$6^22KMG zayRM5)hniZ=idfLE)3}sN~KMdSximB`$qv?R_?hj^`Cb>{S+3k;K=%T`TRq7@RKN` z`@shVN3OP_0DSpcCnb!_~ai0!wn;)>TqI4{=T|Ma)klhb~4M3Ru(WQ zLvA;8gLcpp&!%QZw#;ST)fnaEsnSC)a`}en&iR8S3Vy9WROop8ZnRb8e}L!ldz+EQ zFq}fiui}U7={NLT?9!#*k;Kkw?RhOf4hQYF7u>gskagh|unDIf{!7QS5CLpxtnuHpbCTdpX}A-doXVGeUr%v?w`OpQ6E&BT#V!zM7i@QW!> z>;C}XH^yF&T^TZDG;*$nCEpGv2laF|FP#{+LU~lp z^7(p#Y#HZx6HpzMO9m2bRQ7alrcq$S9LNldKJz^3cWdXaj5BhKVL25(ksqX2p|Euk zfq}lOil5fAjog&Nz8)_ltmh>~k_P_LWX16ANT8Tyg%zvauv|Q#x`P~gU87i(saU#- zp`CnP?=+>c;n?H9M7nYxka-he;A%=8osQekQ3 zeEKeRoe4CTEiKndz`tw)oJ>P8qidofy5p?kc2%1HplSE1zgr_Kn~c8Y79q+Xy8NzD zelOIvyW`WNn|T_O!K(cV52Fg?Q%&Bjzx3bYRK7t(eCEaH$aJ&u;`r z|Gd?^^1}ZYPVDEgqSOHj!(SCUg}-niC>cB-(O=oWbu8Ljpf}j*9?&uz zd{I(-{6g3M&g5aR$)7*?M#1Jr_2wY^v7Xn|%E7jMFBIRdcXmHm4eanK_9!GaO!ZnR z>lcn|iqpb9{C~GJ26k-!3@LrK=6-d2_QWQrCozcAPA}&SR|P8%khn|*(xk>04-c2$`h#TwV%;1(3HED z{`RymoI+eH4PBoulTma&wC4oJS8|dA-ZDamd`4<&(u$2yVlen> zv<&`qPLmClHpC)@B+}WG!d`1#%m%3W#~>1^2;)o$)8`>RnjWA=3y{({BoupQIhv<= zJRK=eZjnEikcFSt0oZl42_?~Jmk^SB+)55wgd4X+s8lX`8wbr%p%DFOl;VwsMQw^h zA~S~jFALdg49fTe66MtKC#rtylrewiiCzUWG)&U+@)?>$%mnK~(eje<5)gXA z#EE-U1Tm635P*5fXBd}GF(!lYmW2tDd$UABxTt370%icN*&3EI{-q`=aI(9U=_=2m zJ=@sLPdTGLyse%$Fv6t)V?ZLR5zEvJR>bwXkINKUex&cLD^E(FRj=rge1W{qtkGENGgU2K8)dzQm2 zZqI!ry51gDaSI^x4xhxbHM!1vxq}Cv3Xa)6F+lsx(K2 z0@@boUI#`naWTSvKT-5^`!?kk#a*FpmcW7$ZYqTdEZ(=uY$NHbsPmjKuuhV!Sb%62 z(;tyVSpp@Bkd0uZ#V?NTLf(>tJ-YQZSn*F-AdBxFrDc;fD_)K;77u6cwy2138UFzo1FLk|uhoHwb8#XBBnTA7c zDzTM@5#wU-hwnYqoYRjZ{O;eBJ$4s#J6`dw^>00r%qoue^b0kyIh`Op{R=zhOR4jc4bg|F`Sis3@tn%B&1NJQYwk0<$kB)Q{?RAlGge<4$I?|(f! zmhF>x82`F&Z0=!%-|@}3Uo>ll*KYcL{i*Ov;_ct#qc@v6J}-FNFyYf{_(t~nvAPe9 z2mds_dHc@1dp&FDQLDM|K;AY{)A0M)r!bbUzt(t{Zb=!wm9$y?n&Bh#;nl^{W3G__ zap&%Cy?dRVmidU{<`+jZba3gCt=8Vpt-}C7T9UK2~jd-MA%NlI| zcJ%vIp^t=s|AsI}r=CK`qmX&}-A;wBLjeTyV;w%8N5LNqTieO_%6fx=ij~xlVPleM`%> zqq>RmHwOK(>apbRG-nen5ADK7V$S(jg?KJe~i2-MdNFipYvQ; z=lz!yo4B@_Z!N3nWB^neqQPU{Ke0^b;CY=Czca zaotnyf+CZEj1 z3JmMX3ye#YL7*b@eW;A8*KE3j8z`%!TqYdoCpl)5sxC6&Xm!FcE;5_3_BlM$8yPE+eCW z)>ZKVNxX=zI*3nN1|o(#G|~@q3SoF>PM5F`LeNw@MqU|H6)SJavP{$P12Am?t#HD0 z)`bK2(Rls6IQ24aPBx_hFA~|yqg$*i4$dLT2XTRfN+kgEj0dCb%&-xL>H>TL8wJQB z?YkAv0`anHj)b^f(ETI7-*AVE#AzlX&4QX=&ITxml;RDn`^vbY0jjrzaPc^A-NDb) z`uOoQG*L!Q2xg+rLiEv%FUMLO(P1@uh^ND|>EYOYVri%G5frI_lo3*qos5>C2qIih zPX$fNvSy0!_{DyO=O^%#~CVW9%SwS`gqW%dv zRm!3gh~n8>wB07AXb9-KnyMFOP6d=MzpTy;CDOJqi|hf@+ZP5ATr=u zZ^M^OUVD>CLv|WU%h2hPp2#w=C)c*u0w>vJH2>ZKr60Cur~OKLLmI)C>>?8tAXk;_ zu0(_}6#K)Bp{@4pK85L8ZqsE? z6pLp@I*Q*XhCdNnzh?L-xYzrjJ@c=={(7(Kq|jNxC(VeivujU#j|NjPR_B|~1?$7& z#0DckX|{!Ter|+yUhzF^J z`Rt)Wv*_b{tf4UTCL?Y-^oCD$ny&y*=?GQJLJO^d`CIXH`3_aUi%Jd9b>4LU|Y zx4eIE^IXc_`%#EXc%Njw zpnk*>0D6QI$|^y(wim6-XKu2bu5hA#u6}Rsc6D@o-tLLpZHQXV>lMqrE9z;Sho+Kw zlb)+D`YL<<-KWtT_tpJ|>0VZx+CHWrrL#HYSUW+u8ES`kN(1wU=J#t>#7~>ea{vAO z{IC7Z;8xqtyfLi^_K1I_vcSG-(~)b%00Hz z5!8Q2VJ1OV&^3ft@+_OWT=3@TDK`pe|6F@-`z6{pZfmJ~!&=YN-D8p6hZ!sRuU!CG z5{5rhNRc|TX&&+H_5Ypg^Xur|E0xD9-nq?!TVItAl^SE<)2zM+xR?+^VScYqN~bK)^Cu=m2rB->D!niKW5yhu>IwBU(d!7^WuSC zud8u;2lGCPwJ{X&%nU^sr}7VP^l=w+C=BMj^QXjH?CygpNBUpu>m;`MHrzZB`>@_# z6aQT1Pm0JEpLg+&OQ&!1*Y272m``k9H&#`9Elk)lj-;16-hV5Wvi4DPkvG-wJ6JwF zb6Rq{8}LUVyg+7U;_lk&`R(h+>x$kA&8zJPtLvNELOZq#qfB`i)O4n@glAQ(w-=YOBtltCAvl|8C2s8y*wS4m|4pwcaQkcWnWrI$0iZP4#AJskt_#j1Fy%s7t zNO#F%0!4W)u?5+|)^@Y{iyhtFuM>R!p{#JeX@ThK?Zy&K{WS=+O_M|db z*t6lXB=aWUj?>@bnTc*PW46zYa#=Y;>RB+*k06?5A%;KdiLL4f3>BLRRw+jyKG zY+8!Vi}T1!TK;N^dEcfXPIe~p_ZpB_p!fjYwG&%tHV&`ygL@x z3l6(1cB?7vAg*d=Qka@_PsM=J+~ZrQpwn)vsIfrzhf@l_98mRi)l<)MMJ%mkbX<~5 zS-g7Qd^GUvym|QjOzPGXnfLp-V@DIFLNn`03e!DhExi);%O6NC8QX~uo*!j4o;78Y z)Le6-?(C&>bo#W!w>%#u(RI9_^7gaafLWyS6ez+ ztva2wm-|ec(}`cMDMrWa+?s6=)IF`voO}CU$LM?q=4EfDb?W=orJ%K)oKBQ(7Zu)1 zM_{IN%Dsf@k6G}fiPbN=JBOKX{l5wQJUz;o=&8$XZqzBnO;<(`St^O(ZG0fRoWYhiI^_5RwJ`{UL}KEuJ5-u}nyvF@L`XCDPTIOQFh z{U(Y0c6kSvRBCd@rw^LX-DU--hVY&i&vy_NfMK#Kb5x$len_iO(LJYCdSf39M; z`}T(_bh~5fUL(Dhz+e_isVYwvFr5B4{UGP;%>JY1+0~1H*p8lbtvwQEnG?}BkyMryRjNmHZMM;TB81ve&d2(B3)w6Ecb3=2(R}!w} z;t*@9i5k+%j9BD6_BB5#r6{))EDY*umEfO1(dJr|eQ`rX69V4x(DzKbY^AU9Mk0Xn(d3!;<4O6iN+@F_zR}zt7S9?vBJ~l!$dE6utU~@ z^rE(WzM#GE=j46V!|rk^pQB#!dHs#NF36!Ooeuw(LyILRo~w^-x5U?=9KO|U58guP ze9ixh8im9Hv{b78bKUNSH#q;%HuP;QnzC*94uL1Sf*%o)bYXq+K;~rKQ*(-DVV>r* zrM3^Ue^U?6EdO=9%#Yppv{~wRl{4)6sE&Spz&aBll{w6cB44L-RqTIBRR0gi{CIiY z^6Sy5pz_JLEandZ!3AHsW`~QZzic5^ss7?liRb1Y;PrA5s=k>S!;!dC4_wa$u4HyM{2Y1K(hD00BcDaOM3r0pO;qY zF3BOkSM5Xfzl8>LaehEfH1`c!b$p!#(>;UKvzv9a2ZVPMK?N|6&im$5*7s)T@?G~L zV@|{K{>_}|6`Jw0J(cftHDa?)M2Rux%HBQxkmH|=Dztm;GJI2I%09I^aoGg8!aRyS!7rg`R?0W zI*vW@oSx3xyt1=bIFcVN6XAga?Ek%Tx1h!f(E;Z>{NngKPbW=CY z;=9vh)-x7ID4NET+Y`B$)GYZ(!-l7Gql(-iiF+U|xhKTDxyAPHTBcDLaii1Ud6rD< zgpBI=uXJ{Fo99}O^>wWepXS}a(bs;s+3ogQbw=$eb+BzREjbSD`^tfNT^rF~^zcZi zA=65!-&cOiuW^P z>-qZfC4LN|sZHD)F~FMaqu(C9`Lavq=utobY13AJ?Ap<Y8uv*-`5+eyH0p*PB=$`Yxa5^({1Y zd#}@eXx3NqIMn;k(`zZ~>w3Y>K3@@{PP5~bS}!}A(Vb57r!PqF1BQPufBx6mdFOEJ zM?`1jQSU9=$7)mS6|v7w<|^KP{}lP={bdS=PtV)#&3^Ny?yjm5@dS6&2HgYodj9sH z$-IBE>*mdmZ(eGCjQI$jbw+?MQxrR;6WL$LTE}#oaNQ0}!uBd7>~{E5e*$ z;vqY@f}wdpMDFOLrl+|M|Gq@~vPK8+>I%;3f8sTBf~93NnX70D|zN{3lhGUYr-HDVpmAT4i5hnVwNlz33U^|h#TxWLE_de?f zx8jm8vD9@5kWn}2VJ^UxsiMMRwx4lv5y1nH6d7E=1{s3pm?okaeHe_QB_6!tT%F_4 zk&#!E5X;8xf!8WgExwhMVqL#svK4!`6SOn>RloPrkkH34UVX-O(1_49lMMp zmNk-a#+7#7zs=^7Xn*tVrBc%W%+M@EyCK#eJ9%_60-yy%gkE;ENd zo$|c$CTK#Da8SAa+bnH7LMsil5T|dz$H``PK!|sOZtgQ8#Ic;;zHJ4MJYlW&-a!|aRaN(| zD)+=vs3gx??%~7OjA*Ael%hPMv1Eev()^ZOmgUSIf!Ga zYQZ6G4jslNe6fu!g2}(jHpkGz87Cw5IjJLC1F9M|hPedrY_i1$Gz>rKXs7cMlME_J z7doKfdLVyaDe+(_ai3EoBhHxxg&;!NX5B;{6d}%pC49cIU`B{GC7ExB)8e>&l&B8Q zf5#=0t8%th%ZT}_y8JV2k!f39SOyow&fJL&n@3S)n8=mS7bhfaoGkx2PDZT)%LeIB zI8^jA$v!a-(0JxSgi?uwMKPLQZb!GeJoJ~lFOo^Xv!Sj4N1TAto0r@{U=bFPS=@;o zvzkYLTHw?IAi<4al!nVjsi3Ru{)^1z|NTZQDb!1Dnl@v%NFc)GMjcmsV=H=w&J(z5 zFbS`ShCR1a8Zg+(^n&PM3XJ|TgfI&_PFy49DrC35Ou>lqbJU}e--qO9yh=fgIcn)p zC;6bNn|FxYQGsJfp%Z2{jF%ZvR5y}j%Hnpe;dwA>vqkb&Gj0&pU6I`qjnWXrEm!mx zC1iaDzkyhm@r|+g+;R!84^H8t#onzK)~P&)$~*N#=T3%9t2Eeb5^SS{Vs_xu2tO8u{h5tCaGnP zXhMYvW_!De9o)AQ7VO%-)ohEsJGiFBiM-165>N{ajmbdbqt z%4#{^11XzQ|F*9)`%DGjlJn{I?Vry!ZhJiBsBAkHkNC^;$=cjz_b}-X-SbiQn)?+`1jW zO~Zk*$fVRDMjUiHxraR5)BOxI%#l=Z!nEhQjds${m$5;=V^Z`n4*4vu@JW#v&p$Ig8vr|IDoARL=h%5Nk!Ap((_?q z$ui_7U85D7&O(p{PRUEvxqJvdHHBs%Ea+)n)*zDdgw(9?Qw}tS(hJeX#`3X&c}PN0 zoIRDOCx9Mpr?NeZqSwNee+eAAoBnZ1_2ccC1`BQ^&cg)qS-pWqslahq3BGzjFAoO_ zF17a4wb=LPVQ4^LUq&veA@Z|los)sl?N2%YcK~1>k7l<*eK8`jp<2=E`?1q)h6oTC z%dN$pu4yJ(Fk4qP?wHIRgIU05LJxrnSzc`UAPsi{%De_vlqiQBq`C`8OSV_s1Kt_W zM{C2UH1N&gud>|}4Vni@{MoE8Yx1WL-~$C^G(tF(=@1)mvkU{tpC2f9Z19F8rIO3z zS5*){&X;EVDn!_Sw$VFYr0JrBp&*NZ@wuD-UdEu5iHoxK8g4z71SspJ!@Sg{w+NM1 zrnx~)93;*GBNIgEs9c1l^xnFOl=PsWB<4&1c=3;_JDLTJUW|}6;$ByB{A@y961YI` zcp#UxNb`ll8(>3VGs~j+F-@d|`+MB?4X7zN@q?q}gqK*6Oe}k(8$=%anMU`fp zT+9Wy8#uMdUhKq3mzBzqU6w7~6q$Q@4(dD<*ScO(P@!&WPYh?!GGKUwP}yD9TtRtE zHscrw2om+dNbVx}B;O`O%I!p+R-|@8s3#Un3>T(_TIjcRF|0@B@V7w_ zYj~A6?jRhPk2-83KNnFR*3lpLyY7nt|(a9I%P^IP@FEYmX1qQt|^-m(;`UgG4 zRnxnhLRUwWI@QfyB*VX^uz$_nXg~Lb`H=4Gsg^eR7$W{o{UE)eKwsuC-b*M%(c05eoW-M zrE~I$)B}J@pd!T&;Wa>vO-xTuDNQ-u2|znr8svdxxwA3^Y4BiO&!hE8xJI zy6Z2MJK8V;IB?}}ZwS!=suXk>59Vu;lPM=jMpb#nA@UJS|4<|7Et=|~92qL23m5$G zJQPFK#zzrb28p4I71=!xEu2JUn6e6ps;c<;fqu4C(E!t)oe~dp2+b(nrukABLXcVy zYf+`=fk?OC!_(JMg0;p^M#SaI7-CI7gVvF?2unpO3@u@dI7~br;Q%e@E-ObZL0Xt~ zyaL9zt_@<-nP$@+iS+7NqLVV%O@-l_QSDzX1r3Q??6IsI@{mkuogDEkV=nVhI$KIt ztVs|z#zR7sKh=nFigl?M@asv@x2Mxd;C~9R()KIfEd!fHK_%srU$<(^6DThnM+Mc< z3_uW8T-qi>ShiZMy`V_Zcm5nB4&pbc{4BwmK?X`a&r#B`THxUO0oN6_g914YVG|@n z;^l>7KdXbdww_UX_#ojyBqBnBpmYqXu@;-AkpZS@q9rhSr)hJvzrzQZ*_JF^8V0N_ z09mgpPGy{sGzFyI%^s6ELPX>^V42l(#WPg;Fp3T+qH$teBBB{et-SL-il=QsgSiYX zt4oB<1f=oJadj^>CD%aCV^Iz57S8o>Jql?g1whAw_Ys38$N!kdQcMxd?Jh%r+^=6? zMqr9(PIwv5x@N;{rw41Ziq39f~D`!x$h>Sfj5iQO3_vBz(0gNw2Q{`C4#tBcB;blLPi&@VxqKms? zTx})-Fu8%u!0(*$pcghD?G-ZLzc2{^OQI`?potnvg5&89#!pn)ESKIaf)*tJI8aW_EVaySVT=vvfB&>gG20Roc9}pghF`9TodWHW4DDVDO4u+|lkHql zQ~u@Y@JTbwc-n7r!B$^z49RrVI$A7FyTr_fJ8++oA^(5UwCWA}(#j;-^PA_hR~!s}il{4pXG9?4Y{_n_uFRe_8)+io)}cxFlU_%?GJUD}?5n zJnq4Z?Y=-*n;IH1D!dR~5<^ZlP$ym~CQA=1@qi(hulM>r7fh1+c?tr)4~zoWqCTf{ zq3Voy;Mm3AF0P6--FGl(OTBclca(xQ4mxf^ReVg*#nnJib8CHy#!G<|RH9IloAcQ9 zxqGNoZ}U|LCE4qCBM`tF5-rQ?7tr-BbAVZkj2Txaq{bBOR@TTpFtpbeYX2o_u;RIH zxBN_U;GrQ)ufW3PKl-J`*4OMu4-(!AbAOe0cjapNi%9BfUPz3{4f>Z-M_}HGOs$|n zeVOCWh~|R@_Pp(HXs7XuT!jQhvn(hlF_|W?oo4R*r>PM~RDKsJgIDuBNv6ymMw@;w zV?*pg7Kjlr$mD$<&PXEKK%=0#CxnpK@2<79-8~vXN(=rE#yP=Vm2(JaeS(yZfow~0 zp5~K?OPm1a;(VXj@9$90460%>W&K?P5pW2dL=9%|KK^?Z4S^W7J4F2E&bbY2hCPu@t6Mo`nNxP0k`&^ zF0yw^#xu^XdX{(7w{D6ODY!a>oBi8&k1Xc;m`z{(e&9f-I0h_p^` zJh_@V6Id3dy0?T>HZ~|v`{PIi+!tthrnZnXV1LufCIOnC;IkHv24$PNfW0Mizi_Fcs@-js7csjNcJ-GF05`pA50$sr`q^?(Zp}ntu z1+4}Ci=KLUU-!eUu8;RU)m-lAIsI&&ph{RV3z-=0^)6|aH2JHwy*G5~7U6YhSY@Hh ztRkYEm64Iqq8}(p>qly)wi~{Y%>{0!9-cE!{x5c3ChrmldEzd6xt&DKSV)Kz18Vehqt|Qx|L_Eh>%73vorcYoa37;kk=2@QV zGRfw45>WdrnT@-`6S7c2Gai(G#c3ydPP;(jrzO4&oHTGq zi@bo*xcA4}8a&DT(3@F-3XRbZOG_{EuBlo@t+=qaR7=89`I8kk-W1zWwk;*#e+24w z-}R5Zy>GhOx%L0e@y@JUNJ##E)Yn-Vl+M-ozSDGtm!W>?Aw1jur<@P3Nly%1JL2Th zxi~G7C!-;HKN`C-8b@ZWflcg~8MHzP3Gyce6!9Xc&@BUC1G0vcF+F<_EVRR$3XuYY_TFpzEp1?a&A9-o$oo0Ip*e3mHB*BxrHWnL>VX zPrdaBSoykeH8lUJY1Fa9_UWTI#AiYH_A=X{`#|Nb(^Y)7&qMs1)uWsB=I?zJ)?-wm zeXcwOBvR3RuZGR)vMqOz9}D$d;v@>;wjWs`1{r@by+CpVFV!`J0dVn%lkJ{^?0s%qYw;&Xm739` zp^*12KS|Hn*G--_yJERVx=^Vt0m9d-N3Fk-ay;)I1m5oE&3U=;RjN>d{&2n1&{#X0 z!ya@0h;FSKU%*7=ze>LG?H@O{iybVAn=PlEW=YO8Y|7IJtDZibTfOn-=bx4KhpN$= zx8i*dzp6f8iQSFcpV=IfUtQt*SwtOptx3;*^ZT>N_2Y!+ITiv8Y6(BTHQuoP@%tM& zYWAzgY2Pnga--?3((R8|TR+yrBI<1Fb!MuU{+_2W|0X&02f^p= zm-laUB<<&OaV!UNFIQz`tv$4>FM?%2OUKnuLGd&nje&>Li!O48cu+#+$OeVH{Cz$N z^Lx2vgNfFX>XCniw~^fAU0cX1Fikm|asspWyeW&X+X+860M>%dR%(P(5AP-fbu>Ad zokNH^cdK0anEerEQg?(P7o^dkBDw873 zVEZU?cmaCBb%2-6D;uUxfWQ|J6!R9|;66WU;IkK$x{NI0o=Z*!jNEJ}beb`U8PMh5 zSHTV5d?t{!d3GRkuth6UO$bjVeCfm;Pf;@87V1R7nZaT{8!wtg#3U5Z(qwAui^?vi zqb0h)3A34ucNyb9@<}KZkWgj(R&`wGCzmc>>M+E2F`Do4tdgn_FEH6NMs~Sn|RUgwKf^?WedUc+W!a8Krg=pww+%x zAWw{lpfP|@<~W4vW|S2mf(Xb0NX~}|4%*0atbry=05UP*Ps;>mOHDfRtze=X<((!( zWNK)BM+A`S(*^(`ng>G@^8kTE0}K`%@Dz|tD*$?eu}=>IYA}&jY3TA1R%l>UnXKe# z1QGKe!vw7XR?YJ)vWO55>gscd&IV%w3nZcOdXE4Ki17aa%D*g2HLAi9)?zXh2QP>6 z!%UmiwSfZyrAYGtVun8sqyTfl97W8dmy88$eO(|59<$;2U}3f%p(F+}BcabT_*V)z zmaLoQ;#3Hn%?#u+ug9(dhy;AIrhXaV571ekfgh2}=Uf94O$g7YL*ft502MJ)(<43^ zQ2cNU#B75)rhw1Kt{Q41iJhx%Zg24@FzW!AuS1`Y%L%4kZB{9N6Zuq={{V&@GF|GN zb`;D9)PII^`PT^{+R17rrRYaUp{%qRBj<+9U{{UCW9+<3{zFr!RtrQCWHH^)ESeL1_ew88-IU0djG4K#D z(5#z?)JU&NNFd}-Pn%9yWW!ka{{T>z%UT~A)EUY@;xI^}HPpttm%Ml$)7z!aTX;Qt z$4=Ld+k?2|caBK{-qUD=+-YyrVMkMnRd;R{N|jar0CPFp+%Ivr7P!~syXTt!0N@8{ zUDlgE6JvDU?#|*?Ft!QX>f9^c$lJ6aO^Uz_(Ay8F9mcwW=v z-`hUJX7t^x5}o1B*aize>fJc|dz{=UFAenrIKkf5x8wR7*JVeW4CT*yzT*9c`%dk9 zoQHh#`%Wi)xl5Ng&er0uuO;67%e+Zqw)WuM-1?Wv8m?{%TL8&u#}5AhTeH*E-*Nf7 z7sd{ro2T6BUoO(h?K~{^&+kX>3+}@1=Y!yGZat>9j%ql z3yxkNj%y;$@4Go&s5T2TMfBi!%c?)!FI-YWyJ=f&WP=#y=)D`O^)1J3>01fP&U5kD zcJ-ZqPtenoYB{@4R(-4XC$&AgIR%tf8?EC4$^k+bZDtWf z0AR*F-=y@eo1;sSd6(dNms9Fn{X_D$m+i#q&f4tl$0m#Z+iLF}u(=w!TlN)q+k{|K z)8n?}f9)+8`phuZIP$#7wCuDzYieb)e|EQEZ1}rE-My``F1Kzwd9Po&s2SW|W9wc& zj1H8O_KUo79^Bl35=sU3fB_eqwyzgHqI?r zCJ4}!6e1{NDH!9mQdoHhDM5Hk0FVluHIX3KATsOt;vz5&C8mViHdN-Md_`h9WMW70 z!*RjLo9reniin}5GX!{4NNINy}5VP5}^)&S{ zop1uwDFGPOq9hoP5d{8{e~tmSE=nvl5p&BxNbvXqGq1-C(!WS#AgMGkBp8A#`1~*m z*H0)ygHQJ1h$|$SuCajlal^4Kk=Rc zHkJWW7xdO(0S2{_C^`%Pns^)l7&I|ZfATrb0hCA?nEnItH~xiw} zaK1yGScx)ltz`58H2GpF9}OauB<5!l0;r(K5JB?%24gKV7!U-1m&g4&;abYB z7#7Z5QtrX5H=TDkZ6n*vJ*!T)oH*-mQUH8%#~)j`zRW0_KhW}CnYP~g+~B@2SlIyt zMxso?5GOcZfL5Lu@aMBq&D$6V+qG)upsLMuX;qCwTP#G>`55Pn+)>I{Iu|ov_Ws0c zj%}-}S|?7G^)17dWhQ7B$_PFZam{-|ZalvjE|qPlX*n^?>9cj5dUi`(P`aI1HMJgB z(ole|(UFsmTXNa(%lr=`wD&7jmmWV7V>`W{tp1$eQm9zCdDfsYwt<;q3`zK78|~$% zIA1RVqPwj_aTD;&E0Wo5n$qsxoj+$jOJdJ9%w-Q)w{3Bj( zxtn)xu+YbG=-sz=-bsszKXb@!?9tL4V0z8QcDRP^y~WGM?&9KG1hdjfx zMZT^aQL47wDplqSf2(;N6)u5tm!nFXZ)~w=Tddzx>o5xfLV*}9E{W-HjZM@wE9nz* z*Eb%O{{UQi2wK(UwhyUBl{UZtMP$-iDU7Q}e>OjS_YFN)5v3RR4{uiG(%q|iZ0*Si zE(=aryOK#7fTHK9NIfy9Cz>0_1Vd^ZYFl^e!HwHKx;>X;Wk^>|$s$NltgbDyn2`g= z3iL}U=dcx)jI-``Xz_o2Zr#1j#jr-*TUCpoxh`#~9#*tEk>>bes@Y$f*k)JUNpkIc zf2m>K@A%74=`F#tdrHZ9Sc`JOfd1X9gn%nFobhVDX~#5n=x1(sRclLShkh*E+cMm~ zRv13nc8o(`KubHdw5pKOO!UOswuX51xo&yYPEBasmBzigwR+X7yHd9p+!r-^!s8OQ zv>0XA_)bw=C0R?GgOhtI{Yh#a+6 zZr#g=bk{3vOF3(Wy)f(vB9f+%F&5pf5>r!p?A<V`MisuYvn=R_la|Y*dM* za!AT&6r1Fgmj&(Dn|5L(YmVIA^bPh)cC1|*!v+51ypoOs4SGnYg3dV{wZl`P>jn67 z*3)FdO#1e&EvtYMmxzcaO+_Hdsl@q`))6kP+foJFz`f1GI;*oGYen^hWgvpiSjFSi zX2TC|6K-+)n7b<4AJYYwnBMJ$mbrL~Rv4SA=zqHIAUCCKd4x>XKU4iXC(^ldn*>H6Vc6jdcu+cQ|G3)!QHtuc@t9XWxn*Nm30R^ajq@1&vIMr>pt_HO& zZGDQMWlQUJX6>ia_S6|Mq!SDP5-Us(YBM?-z;|3S2OC#yC2XzH{{VAI(jwpgFdRxx{;p;gZTv3K^;#^NYKhF?_?RO(kw znuca5ag;i*EE`gIkvE(5LNtEeEh#M8QG-SDD2jChb2=9 zxUC3Js7N3anIjQp6=vx*riJ>(>uB31++0SpX{|r^Zf*h_?!=31w&9={BC=#)OO~_4 zk7*5N3+kWcq{{WNSKkat=O`VXsi*9!}lF}2KH9FwK zal$kE{zi7&wBcj=;P%h#SM4_6wmq}|0K%^D*x29uf!!&!z0BRZw(kxW$Jes$jg{h} z;kB}1uXf^>uVs+Okmz zj-pCH)sP`c=@g84y{aVQ%2RkfE3Cb_9JMBWv|9+Ma?&%@M38Ari2|7Gq-7=X*mxb~ zX7qX&&ATK5Ko!l50Wd_;YahcM+bt@>@jQO&c5t+U;CEKgD=1bPWyJ{|ziqZr#BZBCu8X-?QsW88-#ELuZg8%`+; zEV@YYtEPHO8J`Su?%mS9Un`#{4MF6C_N3#QY^EDoh&2&#fAG6xK4+1(UOf07+$S(FKiQsb^Y}z-JlaDOXjL@@2cER|W-tod_>5 z8gxC|Ot-F!Xo9S|6r(VSs~P;U8KwE^yxbS|9b2urj1POt>)N5WdfP_h$j!_26xrJG15 z2>Ij4ZP!I*{r>>a;JfqVLlWQa=l2&wT5Fdrlc)mL)Vui=&aENAQBQ;z$9~?^=F0NF z(9i8%+c;8Uo7=Ze;=?<=;w|cDPzI&|k!`IifZ9xuav5cg-MUq*XqkK7T{MrxJ}&cZ zt?n*m>IJ+R1cfA&T}-kAI5p|vIJZt{{{X1uwO#Wt`yiILb?V$)SF{y>w``C}VoJ5q zO%7aneBUf-U7sq5iTRn?s`*~5$9Lb|ycmcM>Yzv=l?h<3ssM7PXb1}!>!nhxGZlL& zj5ay8+r_)=$`zYVjbMThOCtkOMkJW|VwzCnQZvA~alA`ixoF?>TLop-jQ3u2X`v{( zy7d`hZPmBPvJaLq^-DH!92aKrm%E$08uD=#9@U+v8@F^__dUp~7uoT92Dm^MuUr7$ zb(OPk%;XGoZ{E8p^F4nvD$@7AB^0*KZ|D2RnD35xyN9?6qoudoalCD&W5@Q_3|m&) zhvP!9M?mLWUDK`ZRFeP?1Jv$4-!gGU!hbW_`hAtt(NTR|S+M&a{lwhbP`j&Eulg77 zJ+`xc{*FDpLQx(N7h|Ry>yeIH(O%MZJH>F+A4uQh^x7Y87j6s7x@Y%0yie}d&ATf0 zS8v5G-qpplNd3m%(&=>~P|~>lFWTzg{WY%Jv+_T7zyAPPsh_4-gq@-pTo^MZzv@36 zdnIb?Z0OPI%=QfCbhVH<>_Hk{D)1VkZC%mlr&$KvN-!f@GMdh?AZGhJ_0TK{-QG z2$-)@35)n8| zGxMIH(zssMQ}L146iS%LjA}{ioXHi;AJ614_zY~C)X)s8G&P@vFcJeY z%7P&D>r<5c{{WUHxUvBn=8+&0#({Il{a+0K0EP=%0Bzh?hYvP?pZ;8q9A0#dt3Zd`~MC{t0YNiiUJSE<0O8GHk{r?@g1v_P7SqzIL% z#Y%uxZzE4tXn<&AFbb1HC$1vN1H2D%8gm0O+h0P z-D=~2;$Afy^_1!Wb!reqf+zSKD_QW+R#3r$Nz`T}L64num>-5EULJH45V@Gr7$}I& z4Cf~}{x~e>z#wS3`ijt*1d5raMo0q)YF3(!Ibs0>NHY}4k5FL#czP79_>D2InS=_+ zG6a5bCk|TEh}%s9N!2xv(kD3U{Bbkes4UNb(G4CA5loFuDr#$j1C<~KfTK{1v&gYE z1^^j~;b4~&kXeHDGEB8h#79DZ@WLbma2;WY6eLU$rh_lkNx%aP^b#Tum>8~6128|H z9;MpJtPL{{GZj5SLI?oPV9(NH@W4PJlT7Ode5GpCnStU*jvhw@RuWg!B|#yW=PN%% z<^hZ}jZ*T*aHOilEWwc^bf?B60iP?-WZY8CL#TZ~kx}3TQgEau2KAw#1W7dUnDG5L zSO%15LNAir7Eo1!l~7>H$tDJ1R|-T^J2)U|4gm*H1VNh3C~ydktu4s5U_la0fs{c4 zeylibdW1uR z?4Q_`d}NN-2_~$n6l!Rf0jnb;E#uP~5nKY=nL#rlvNR<0C&U~WL5U(eon*?B8Bi+@ zq%azz7^!!ZX~3-BQHoKsDx&cC5Jc4-2rR6GN%ywdE$MA9dQvB zRksh^wS)+TW|`HX$z~8HG>t^(9}H|wwSA)(9I}7`T`eKa4nkzkQ~BW%ns1geMq{Wc zW^*jcq>Sifh&h4dmKrpwily99Pyo_r#1o_vKmZVafKDRM%$E^4Z6&~ONKH?q1~e+5 z%ETB}Ga!z*DBDo=1iLg6?Z?!INYoG#R1!fT$%UuJJTWONHs=Jjo^B<-acyrbH9)#q zLa>n0B!l`y9+O;8YwRgyWVCKnDvM$o2A?_ln9*bqV5m4#ka#hz&X_A81Y@e1Lexi6 z(@ZB^$V{nP7^d#oxVMq*&zSj5G|2GCQ}V;IZ4B3(w#iVj(g5fnGLlvawy^o{(#5Pp&tPNgsiMg+pF z$q_h;%WhOJkBKfZJP5o;d3SebZbkkBpWkej-}fJBan9pubP%W&?Kvu{sANW;jy2od zy)3yKL@m0zLQro`*!#A>w{f%YZUJvuKo;*O#T`uw!9i`E!|IPzSIA69hC6H3!d&ZD zuj*v>_jc^nVW~PhwmsDL@4S-P;QNn{8;hVH+3xSI*L1CuTWdG{JAvn=ao4rKvAK%t z`Ip^eJBy)pqk4%%1q%MEtj2Nynqr~q3C>W--7+6NVws2rNQ%);95O!R=1FnXaBdNx z5+(r)CJ;A?k1vmg2A;ePBv@BJR#FH6Rz9OjgW=AFA?Q=0MM;9XLgoQ9m;$862Y$^02#k>$ zjFRv*0JWt$KqKW`RdR_NxmF+m2ooV>5~HDkr%#O66a;cUkbhU5a|~F}62N%n5)KV= z0zZ}jDnx|@F)a%+7(@@2cotlM*#V!*V3Dd!0jgvx2>v4#zy^pUlEsvWB?B}~W|101 zQaTJU8g-LC0$3^fN7W$yqnsS@0ND-;N(g{OWI=#x3~Okv6y^X19#Sj+07;T`iKu1$ zL#%vot%{FU3oeKT2nuQSE}U%?!mILt1rh*>tpS**niCMymrOe(s17q z8IcNT2_NxXFdGUNSgME`h#Is`dh40#;rZYus;NbI4U}W$okf_l6Cs(2pb-jm#b%fW z1KOEl463h|Sj4pfk{2q+Tm;|feUJgSq(q0*NFXT?AjY74#+_?Xf_Rzkd8(|m7zo<+ z4JEY7*D%qfn8?n3aZf?gj<%Pe9-UcOu56-7kVyoRNSz?ylIWta1Q!{s)5So zt)Zc0#vGJKWREal7%6~4xo~rqq{Mu%2x+Y|5X8{^I!IqC#L7f49}KVzWLlCzM-pTK z(L{YKUmmBf0cK`!Fv~(hsV5{#9YD*NG$1ZuQwD<~=@o?5@rV15g@-7BffzMhFH%a70o}!xdh&62GaK zif4%>#~h)yw5EM^HVq-8VhD|0jtdT%hW)&K3vowLG48qWlH9rhdWGjfJ z3}pEOkpzGmbbzH!d1NreM$%VEVi;OxQ6@nL^%}@({y0r#KENZojYJs)X(#mS01_Q@ zBIyUNafdmM;g-9_mD@-aQVBs#24zg2sGR;7Tz)`82yWbw5a8(}IjJDjX#jkvFvQny z0-aU`HE9|HASH|c07>Z&G#z|#mgcL#q*^WwXHmG`XM(>(ux&D{m?9!EnwIcgNPXM9 z{{U(2u3K}cT6N=Z*-L=vVY%HQOCg+nBh8=Xj!vP!wPc&)T? z*B%Dh+uBg5i$xz+OCvJCgF2dI<2t96t3aH1mwm0W8tXedyE`($Br>SVWCQ_fNY4rF zw)vK!Y_k6VX5v59ZlzUL000mP4+IfI)YM}~HOG98R}y`+f`S86Lr|a;-jBBTZoAT7!#x&Dk5)jv|B>)IpN&1+Grc?q5@xfNpX@d=>6?E$w z<%u~k$U%|>9Q-jnFa-+?lFaS>!7QMb3Nj!Fp)u1JYfDXVKqba&7RdAcP{0zQL=b#bv6?>$RJbj7|zSHL6uuP{`D>Y$z@VfBRyR1Y?wr^?EIQ&MxM!w{BZhzaSs`b^gbhSVAan50WdI%BSJ;fj3A zP!tjwjH{rM2+Y$^(^D!NFAPuW0_y(&=~M+lhE)n8HA!<)dU$1mJ4LRgD^-C)6q5i9 zjXIJ_>eV#Q;f-sYum~b9qQ!KQLl&WDAQ~u{0+G`Ze7tZNQdp9$Ed@eJBS<;wtOCsedEh-U% zA~KNLfPhMa9%;+rjD~e!{@uVzkBOaC>Im^BnD&iKNm{iLDA57FHSs<5m z#+jyKV2>H-X%Lf{~dhZ6adb<875HOtD} zXF~RBDrZRmKrsZ&=k$)al(5-tOm{Kjz_D2;RdkR+00BL7CUGMipQ~L7lAvZsSpzaU zfu0#DB`>s1Wm$pJ4^uxGpc9u|G?Yk3o12K+DJE7uGYp_i%mNH_sl~Hv7vsIk?XA?W zq0R7orxM_pZ(nTdyS89bG?P!3IwPB78mE#~RjR-0Pd_tds}Nvy29aE|@f627Pc3C? zI3OvJIn>gz;6+HlTFiz{rJ)oRnt5PFCX#RoH!-hyK!cg^q|@mUAC>^KX-WuCmQT_o z9L-D-kfaO**7mc9*aQ;BB!X%{sU%DRl;8_prvjj0V1fy$krPUIj04>IMb%O~dWg@U zf#fPV=5mB!XowMv?+kR%OtZkHBwGvsFEUbz-jjD z5uAn!Is+gP`iRPq-+{mrUB50u{Q!eP6cP-W6x2L&rU2afK4KOE2_~Y7KjN5X1S_Nx zVAH2rIl%_7F(n~_bu5W2Co!C!gW_Wk0}9)Dblf77O318!bpALR4E)1p@>8ilh{LLz zD)z99ihh<2P+}lPa4GoUNzOIl@&Wr~14_VvGKd*9BLi~emS8^T*kjuFw{}7GxSmIg z<^xO=U7q&K-O_r0ZH_eAO zHg>AyW2I~@Gx5R8qFS^u)FGN@%k$2ed@w^=;0cQ>8cuOBT30{M6OMfL9X5Qmk>bV;Ky5Pv zEhFFz1A)*PxG?P{q*{R@hx^{N86mr5L%DQ|Fmube3twI2$GmTw3 z40G{}jqBVTtiXcZNgV*lMF)lfa2r=&P=lsPKZ49iIUERop*#^13={flPC_J+1WphVgEV*oU{IKY5M$*y#j!#avtEGI3VFIv;7V|{9%Cd9Q*OKNH;~#o zf}4$w^3BC%1${e~E~R9O1M$J8x?}YnQff7{;J~{#xwvaxm%?7&a=SZ2Yqq(uxNcuf zNZTvdHsCr>sp=4!MmN20Yx7lMikp>FG0cM9`<2@^cN=|{-tPC1-fr2~XSUdEcQ?-E z?SNcca;lA>XI!g;?QUDmjCc2s?@owU=6k<>v&VMI?Gg1V-R1XdXG@yU*Mgxt`=YZh>!<+epPt;AT{&^t-H^1w;b67f=P`e6Y3{{{XyK zHSt;b_a4FMo}pfcs;gi4-XG#(9PZd#ble73P1JgGEY_lrYUe}|QR9!Bw`qNi>um0* z+@+zPu=KmjduF?}`dT$-J+Rwd7aq$tpqg6QL32&QNVL}!i5gs;B)|f3ohJsJ4k_SN<` zEwQ+{cPiez8hRa7#PT+IUO#WWvS!xe+O-eT@#jO}%G5aLy;WLEMq-@9zFvLYuaBzOP>070Ia z;B|!{AS0`3oQ|lBq@e^9OBzvTf^+!%hmIxMMi2x5BvMT&J}@gXFragY;3Z^vOk@~91&qZ! zKoeZB2_>u0r~m;Vns`W$(^}`3Lx6lc@(?mBO+=7tWYP{$AZ8~O%;rf5YLntV0yC-1 z&Ljb76q8!PF+UJ;25<~;pwKlefE0-$03`Tz0O2OnE0@d6nAJg$X_ShSCoJM)7VO@n z0>Ue(PndO}1bIk`P9-dShJ*yf03+pCG2!F<@P^(XT|fgL)!`r#Kov1s;m-j;rkTMS ziR&=N58*j@U=36hbpDb+uTp;ie1GSF0z}m+0U1`ONzA|kgp4O;MJ-A$mFAf!mMtl#Q4N!8JnH_TZ;GPAl!sg;5F(R2(X-^8)xFAmLji!23h&hO) zb%_I~O5u`}xE(fu8J@L~HOx#+aWc(5-9lB+1W5vv8TF@0!YwGm1(cYY!6X_?#RNup z1k!qrPL(x)1lGMX!K)wBS?n7ZV!r{>wFfw$#X+CkWfsh2D10jwI2MH2`JZ5j)iLm? z$o~N87#a%Mtp|V~RRbKxK;$MdGr-oh&p#GZvB**>TF3kx3n6CfprFVazlX-1W70&>MPd`DJJ&i&;fE|A_x_Zo+IUg2>Xmiaw-JHAb%V<54gtzK&a`I zW+49n0~naeeA7vNgGA53(9%Ef6^vPn26V^Mm>vSXd~1aC3coV(4BG@jl1)UKPIQ4x zDKvCZ%C%w;sx<>#cLFD?P@Y<^93s`O8<+ zvuvjw#aYyMz3a{@ZTRiIg(qFkJ8gWS+_2JN?rBd6#+->MZ{$r^I()xZY04b;ygYu> zd%fBFTV!{?cDA(TJ<9GkH+UW~!|8L!t>CA4=wvOsL2WE&7*^fGj1^j0Wz5c|j^;PK zZw9=de*2Hz`+ep8ox9tvPrW;{cV}tF@m4K{xpvmYZ#Au^$8MJAO{;KPf>@k$-u0z< z?)^h-e1Lu1!HL)U4vxq5e<8{_i$XR>rYjk&(n@AXcfADQO=0Bw6m-yY=mY3`2s zyU%-x?iW9I_gjYKFWlYomoHv&eSP-o_13ks<854pWnC+3*a1XFJyE`|uDh<snlXbW4-H5t7Q)9Z+4V1ZP1a9EuHthsm zyB35-J)6?KxlOhAx7_YLsqj1pU+Y`DiPK^Ed`|x2duwO1xocsz*^U1IBWlXEjw@s> zi#t05O#c4;sI|1)3I?{3@+ThGx3^8Ia_z$XPhQ;I+}!h7UlBRslO^?TLYBVvn7^ae-s)Lw}s$(ed!j^`+%+qVe10F#kmsJ9TCS;EfjuKh! z10~yRBTXa@fKsuf9KiYEb3lHD?$*=-0Dw>#CQ%Mj$Re%Yu6M4Ypr3AeqK@BEAmZ|%Q%tO^PB==G*(8T0M|J_J_4EG zB_!0nK}7-z%s?J1PYIvL0ZmA(%WMrqK_Cho{&k_80_8<(@n}5^RKPRVMgZkP1|fA) z1#2|~Oo;Iq0VsXK1}vo4;gBSWn2hOwEZtP1i|Hx}5s{Jbq4B^pG?0k+niqksq!(*g_-1$=tc;24TDgXZ$c z(U|~1J}_&51quNy0n|woGoEq*iV=VWBnVwnXDZC)Nt%2xmFK=yX#eyzr0ZZt*=vu0VS_i`%H&$2kDS90=YVhj(t#LKC za-Fl-KeMtz+D5m0+ef=?_XPT?o}4jDl!AbrM?7-%cBSbR(QxlPheu0R>z(m8C+NfrUD&IJ{vhXjwzk~cDHh&al3pR57VqzF zS-+u`LLy%*Lk%l&w2KHle8i8I2PyK^%onk@_jSe#4e?`igOJ=fwRZaJHf_MRw$+UK z;MGN(;80_h+l|-E(bZ0B#@?xD%T>+B?NRUBwzu}k#^uyHZ9R>mogS^01}>6w6llu| zuM)dg;99jRxm$eSsTXm|?RguwlGTQ=`%|}@moEjf9Y>zypgNdNP$vz$ZalA<7oDim z8fB+@x!l^g`;)p35sixh$pl+~%mG3MolP^GVy#@udJy*$QCuxsEq3`%M%}x2H#b9F zi-oTnWEHm{+6+KtTS;sjhw7=EX}2loPSc+5tIeMQqMJR&?$-YJv@SRI6x~}-ECoGH zyQ>wjEs_j?8fQFpZMw^tIc>eWTJqJt(_3=8mD}9i-rBISZphr+D7Q}GEZQtsD3y}8 zHBeRs4kqbx%8UzbPuDp$4*vjlo4xhu40`8UsIeDO}!6T+P+DYR> z$ZdIR`ToE;4YJa)aP99ZUez9>u{r}6BU7UxtxQH4YKxzl@h#T&`S9QMYrR}l$n&2|PDu@({zF7{m4hZ7gyb9S__+}rf6S!a-- zlVm%pBU@4?;64IoxadmPX+~MkYGaymW7qcw)xN>C>T6=!hPDw=fR2P6Q!zR8raG3| zaM(;1UEcE5#!%wzqNRagl3zjckR)k9S}7pMh7MO-rnCg$#T8PO_Qa|u_Q}v( zP0`TH34u~N(;9d19c#ydXT83;V)~m4Y%ta3Qgxyk6{$n00Z=33gH;CUO2}3@t-!rx zIl36WyQiG=l|}QFkmXQbzu$Jhws+qwORx+*RC}n=rG|iHArhqI zO)zfJw3ww3h368`?p(w5h7*BI+2&7HMw zp~!m77T;0}N&I6GUAt|j?HtkDldUF{=w7(pvAJU7wY@2(>stfR3u%&p#X%ah=#LYO zQs!w!ThrzzguBJ&_xCpTk-ZK$Zmn$4ZT8lk{{XO#4y*SAvszp3rW}y~*BjoBd0NkR z?n*m%>^tp~koPCMINy3Z!)~LryIX%9fydoTjke}F>qAcOxeI^W-Eo{ja+^s~ueb%p z6dYr*wQj3>?5X6d^FIfn&DHfgeJbT2kOaQ8^RE)zhAXMj$HFTde!kr}Tt=p$0OEEqF04(m_cS6NHpppog3#q{h37G?+ z&lp>%*PW+s!=k%RhPdTytjiPx4^R*azO&TiF&5scaSkNfyKi-KEfKHz-crf+eH&v? zS2qu;8&LyBkRY+R6q&3HMXg&tb*ejdYb(trzu$A#?G{yIa9g)%T7jXNn1ktwVk7}k z;5;xb{JGC(YBh43QT~P*&hrFZwC#C4N6=l=k0g1L<2lsFT9|=MXsyn>iFS(VD8n~A z^{aL_cT19t4Xr}pOP1UgWfq!&m|QYG6EliS%I*FpH*Lpn>S~@tl)ZOtFLAW9K9xvP z_Vt#FtlC%?B#Zi)Q7pgmo{#e?~!qeDY!u`X`F~lY_M6g zgCNd2_I72&N;oX%*j%nke39^$aS=2a?)v+CTmZNXQ7 z0DvfBxZ0If(Mg8ooz&n<1^)oHVbtHyp$Srk+8^zg3N$6a#E^RYF-n%dnc*DPye6Ad z`IB8jt=pgX29gjt(u(Q{AsDe-gqboa6~?Oy7KatLU7S7yYj%wJF;w00aP39)lF_S|Ksk?I5^)x6)_yxwAB z0P)+~w%%#Wc|7+`vt62`)=YnC$fGhLxU53@p&Y7dTW3;)wya*_AQDN)83P!-o_$iu z*5W^NYj(Ev?~96z#J{H3f=IDz{{V131-L^9v3l?Un0+&e+uB=KjcT9fD?DtK=fW+oX>7)q}O2@;)3ALgZhJhg=s^>h2k_?(m_?nC`2)WZS zh~QXMQ?~c1`p}C%pnp zRq9OpeJxJ)_t++jM7Y!7O-~3)At?q{Jbh-uf6(1jl%hrEwn2nhI-7k6(O{*}E>LyIY@nA3_ZbbWcr1Mp-?Wr2Dh4eSg#Y#OFmp4b9Q3?qCQ%FCNEQAwFJ zH->ts4|$(n08;l+U039^JM?r}^`^Y}^5n(J%&l0hQ zF53gUE@o;r8!@LDsV58*G@cL!qedHFx(9!W6IiHLWJqMaIKW;)ANnaNdr#p0K(u+A zm~^HX8%=rH%y#=rjmPkCP#_l!lE1f;mqHx_qn*FS$$g zP>M{Qml_!EGMw>fbe!|w&NbI07=(?#M${|(mO?p)ft?PT{yJKugdIc4;j3_yC3eDx z7yV<0dd%Ske*35i;Ds1(*cM2cyhT@9RMy{*S-%`Y0l@VwDnLQ}Di?+QlTlh*{Eoc?Ts&x&r^8RPog zILkgBJWl0L!3(Q0*kw{k@UW70?r&0RdK;@u->HVx!Nw5=<{@x*Z5sZ0z3T0BdF)f9 z#J+N6woX6rfu)}7XZ`UfQ!U14fYhy9P!1}ol|=!u47CRWGOZX0F!a9g_-AZptMxfB zNxZTGr#=F6x&HOhfXB-vOqK7ngrgF%1xeHo6nH0|^1}~i3#HR_2lVJ8r30@VGsr5~ z13-41xD+CmtCGwtEP&5}JzPe8zV4UiztHxiDn2hE=`#1FJ7-Og`oBojq|qn+g2yTp z#O62R_9>s&JZ{x?r3;QJ+vH_n5U7R><5Jb|DwXiy-vWLqW_fY0lvp`YH~|j}Y))U} z{2V9eqw6C(^j0JJZ%7vZfE7b{3jd{zDFD)#2%%UqWopBrGRC@sUUbIa@Ck`@Z_On& z4S)AJ82x?pG)}6U+|Io1odw1v;nA69kDLVWf2pX8@>aWen3x5Y40iRYqH;=$c17OB z=sDJnFPge8VQpk7Fy$>e^$8B6t5QkgKhZiZ{6py?&L7ahm3Sl{2 zbYoBT03v#p%>e8~1Gu2AmpqGIbkZnTqGvNLzW$dCA(~b;IV)Ne`cpzurLv;af?&`*V{yK%`#^)vl%N^fh zt&6ows>QZ^8g4UG^@UH;GKcW_mx-@;yUlYgD#=TB6j}vr;5hX4-Ex-pUjj&cQLb<` z=J)JPU-I@01Ywsc(WjV|5wWk}{2$;_ZD0g*0<>XzgU)=)Zm{0cZ)VkYcc+F)G3MIs zIsQBKgPmb^Ez4~Vvu|8BZs_u!G*ql8qV3l(_q#`<+C{Q~!^}J@?bQbY<>@51p@M zY}EYpn3Z3$;Xwrh8|)T~gZ)EfgV+q#A8TCb=o$IW_PZtb{)6YL7aCM^{MaM>f7}qY z-fhTv@phA67B}SkX{p<$c0{KvzvWZs*ACmgnI`i%P!?i~EZ#bp{{Ux~n*B0uV5Y9L zh5=1RNl!tu=2;g8GX)+>{uDCV=$zr(A_@q^Ns5MKN^lz1nsxE2ei+RW^Bt`)FM5;= zU+XnbRNMkp0-$Ujtyu!LA&M#WMF)F)mooSTc-a_5YC$Ykz|QIKA8<o-=B2W5 zW{j)P1`%NYEPF8AM=}lVWx}NEjpgCWomFy);a?>zNnRGqSm03t@YKQ>$ci@ss#s5i z(G^l+BsT7IL<>LuJ!C=lN(Ns{uKl!vR^4msc|$?qd^CK(hM|L0mrPH zrb7~adloC!q_|b=PFI%F1ko)c4`*%qqzb! z4d3%%G1wITjWqI=1UY_nH9i@mntw|q5pGQMK`FA98biU!vbq_q6b`%p0JG=%y-@f$ zwxQA>e}+sJ%Mgp!Yuu(0KHIqXqb0gffz6tn3dtZ&sQ#sV2OU@9Z(FRt~)F?RgP91}dQ9Co?51Wu3C zhJTLkm;1p+ZnBf~qNl*5qqu2QDkwyqME^9<=yC<6Frmh{(9c3)g~OZX5p*HCwGf64Ez^hD=US(k?Z_vISh_-lOoE6%wZ z*l%0)Bc6)~uU)>Mm-94lKh(P=MVjHJ6A=MU@qBX=JZw~+@Uf=#_5IFc#6B&ne&B5n zq9IWx$&{Tb5f_T5d&*$=R!zcaatp5Tg1=9FX8nedf#o2MU<_;4fia+JHuB*w7Mp|a zn0=e6a%qJkur7yE{}5cZB)hSmLU$Wc_mikaQ-`>B=GRx__I}UcFkv0B898|1Ew#>y zl$_zGSfXgwG)&30%3`J%l}ADnoW9og_X!&V<>6n&Fw2Ho2$Pi6T`Y!kV&C)RNq` zrC(C`8g7Kuz_2HMk~ET@0mf9~d4+}ERmZj_!k9^egf|If7gkuZR${?Z?V|NA;4v9k z)(RjYh7W9HTTXlix3-j~hk^uLJ@Y;`m_Opv3Z)psM;R?ADSf3A5K4AM#ziJ`fkam^ zUkaCrxiX@^pCh}_&w>afBi)U&5H`wjXr8`4rwD>%#tiadf%#Su4bg~<3Is$xUc#e6 z4A)G_v@pZ22!s6Jq<_u4ZG@xGJfc8b z)@#gWPW##7Y`WYNoLE~puS>P7mqM%A6vifNG(HbqF>VvQkRr0 z{`9RCMe-T#>3nKuzX9{bnlE{CGR4*Bc)Cw>9S`@#ac2Ozp24Y>6k*831-tZpCi1c+ z$S{_YtjMEmuSmnbg?|IS%c}E{t9S^YHjUzw7%6KPNvC$BwhT%VZ_(f?X^~15B0F|~ zfN_`vj%Yih;`q^G-E=r2`11^X$ABbs$TW+Lih8Du)3|2*R?)Y*6E1@0g|z|2vUDr! z;F%QmL>WP__%+#KO9>O;w3cVEnxM}BLypas0(%j>A2P50rQq;^X_=5c2x-4}06 zuo^%jch=?uW+;|D0>DKX(I~{q+GTP$>s8vR-#)w0&;4q~(lM#*7blnXb_P4i$M)t! zkCe`W_f&@2&=*Z&;}z7m3IbwrO}cA}2XbbCdvfxIXRUBY}s9$eFRG)U0 zARPRcZ%Lw*tRo!FX)V7Tx#`tpQqewe##!f2D997=%LfpxLgePi9pdprc2hG|-@X8h zn&lag?2`drsKJm-)1VL6Uwpg7fwQ>8v5^5$n(FUYe>2~9(TXn<)(+%X6phExkivLd z_jMZzAxvNVY{T%|tbo2~=3%r=DG50tfOm}~t7f3o&=ut{4m1R&quuom5M=pT;6u$8 z;UNce+6*aANLvlfUio*yocP7ZU++Y3oHWud7~3E?Isv=_(5iIVD(0Y1qIaAE59DRl z6f0B$+uAi~zn}Do^h&TPUInxFuc&3Hy(-+^K#V+AG{51j2=^Ht=F8=h#4BpVqj$u@ zIA%bSO0R2AxW=D956}E_-(%VT^6m;t#p#uLg};e~q+)wN1K5Hfq~G|l$(;!*wWp@1 zw&m_c1C7$ePr*@I3k;>rUoJ0oustc1) zno?OZ?OQy-Gfa(f!xloHJW2bf>@72|k#|%3jk9$v6Ny(ArpDT%DnPXx zfxlI;O7__nQ88smv_eSgE48mO1wNk$1wY6L@hsY3DigDB5qC9A^!}cJka`jry|;C< zJr!Yu@AutKKlXa3HNx^Y%P(x8sk=;Q2i*365e0RiE?hGp5e>Hhs6g-zHq2VF;Si&a}La zrtO7XZEh$%*(=TS3o4I8S7ok=YFPTIu{2&eLHC-g69I~Uo%Hpxxc7GmDKvj%l(=d579FfUZTp}dtmeAfvpV5DwHn} z!+@c@L(lVe%4cJ7q93!7Zg8O35SC-ji?a#m{v-OyX(=7ejXZv@$n@Xa9&~2i?sB~- z4$6Rfn(WP8wK1zQcFX0?#fZCsYDIK94CDPWPC>D^>O-mg|%RpCGW?9={9WIR?2%PIOwRMS-4?-xJk z0m%x-F$dtuIu>lMDR|{koxWMo!8G%AtO|w(L+bb%!Y!XWL}ta`{PX&v-+9Hmi;163 zZw2k%{TXN;DOld|ZY>r(yKL5f@q0(z&h6UEzme~>18=)q@(&Wx`LcR(NTl+!3BDH< z@*cy>^y`YI?WJSYe3`6E?y?T1WiVE;uqW(84Dli06)R5sWN6l^;lS$SLm?PcA#*>| zE>Fl;VbEGKPFaizrJT=!drjz*-1e+Ms{w{`T$y@#EQ@A8}=M`yByy_!R3*DkP!of`Sb$pABat-M#(; zB)oigw9wsu^h~^~O%UGus@u=an?U8Adei9XC6ahl)sBB&pHjB!)~gQKy??JSuxg;t z$MfySYk_guheGvBGZ*R%L^Ny$)TL#YA7scZT)3xSnEyjQB=ZW;w)IZPsa!`QY*@~} zjaV63)Z`fQP~LLx(*@0yH$yHTimL}4JG$A}J^cNPU4A%T2=H?gUuf8t{W7y=)9ASv zd3iXeQ}2`XFRegf<<~K%_m>K3leH!1RdtraVcr|3q=pavJ!3Mo@uqEN3A4jY>m7rX zcF&A5yH`yrv2*p;keLSv&K;jY=39<@FIylYW`~yUVO85++!bo630W^M)A~GSo(-ul zJnhDqlvIkINke@cQRy0-J2s_hCcsb5?OylWR~%ItSmat_er78;+bo{kftGl!9Q_b!9^Ugy9 zk)yLi9n8^u-BpXw!urwhv-?oSj0OMOto?t>ekdzA?UW@!!ti}bgxUO|FS}wD>RzuX z-%onq2wd$w=ICjYb?8V7x$l1t8`jV1np-Hf(#cLZSHhrDn`@Rsj))F1%IA#t-Yq)p z8H62O|8aD>^zYB|{R_)CNFOJ%d!K*pdAV})C2Lya)sVMuk2*R$^_TAPeq4C&q9^*p zhEVHvM3dD={yZy5jx@8p5DhV8+_5r$tK((Io2T)g{{wh^TDxzy z5VcWXa`16j@jrmy=GTxRQt?%j56WFjYQp+&e9Gbxmrf!L9~DZSiT%D^^UvgBrY=FF znU;!?AggUeeobmUfab@6C+R?lq2nSSM~Q^0vVEpv{V4a}6OtJ+$*-E=q46dfp+r|Q z?(M^`>aMo3>aKkw9xxL(by3mCj0cJGlRGkP5^Wk%h%xmHkP5*L*EuT!F+e~xN{nb`sE-(kQB&s^Ex0@l($tGp z%<)lEciWzHO|Y~z&V*+`KnNTMPyEB>^(JL1*6Foq{_vSLf(cZaCxE4xbLoI^!*~E0 zaE%r2j&v6!KOq4u)Gta{`^Ll1tdn%015mnLTDJwF1b0W1DbQa!JBdvPa-lM|HRf59 zZ$nBm`&-R0G@QC|L@i~iMehmSnL_qE)J1UeXgMB2P94aA7V&OQQ6+!T;k-pDw#GA2 zX9`*N#dsC)iC(M%l1QsqZ~@-2(%H%i5S5czrrJ^3bh5Cya0Q6B7;iO*4Sfbq;irO% z@m@LtG{d?S<)7Lm;maHcU7Mc~AUz_ST|U38Qk63eg|nuq#KKAY z01O9ssG!6OthdF89f{?;n8AyLZa%fi$@QLsMvKY*r@{iQhbct9ezN-R(5Lt20Ep=GV_TbvIt#^y|7o#0~%+mVX%Ky#P< z!p2*z8}A_>jrn7yAZ7omIcyc6TvHE7?4VHUc9&%sZA+lzf|&r*v-|TnYdhi-Ds8-~GQ{F(SEa^5s(0;cW^|zt4iycv zzV-r_@qCRJ8;MHX!%PD`Cb?5D!FBPZ7=B9(1H1^BE#)!?7?VwRTQ!CWj^eRM%<+65 zI(9$P3AhGiaHWJPTc9!8$|=U9v%#N$DvCrT!5k*BZp8>rws}boB^qXUW{YaRzm*uV znj$#Fnc@@AVIET+Ocp}-+0Om@- zGc)!<9jLsxtW7v*9F7Ik;V4#;CxR;Zs_m{086X8BfD1;MWGj_+8I>Tumr2$`XH8nR zWgZ;kiOvpV7wl+kI#EJ~HuyI&(7@2vu!+eP=?;n4y@q|3ymRtdM285=VQXQrhN1T+ zq{m~z)fjl5IX&90(>rM$y9_*bxrRE;IZ54_`DcZcpnA-gNkHE|Z!3c-Hy)! z*F`r?ThgN6-Wy!K=6&u-`Q_Vv3*wki@=x(qt+=PipiI;+lP0luc* z-f%PhRbJ@(ymRPKP3K3*Pnu4+<8Ald2I{j1r%&$O2|4dvdNteQa&+eWh2H!a7xeFDx0R+jcqL*!@7Fj6~8YLY=zT*{??jUSx02`KM3nt{`2R@ufiC!6}Hg5 z^Czv#G3#mHp{--FZp0jJyXTfyW$ogJLE*K?#t+)>j(T18^^Z=Yb1yWv z_%DA7zJl#}5WEd&Kds-`IG-1ZDu|S3t=?Drlb%Ih*s5tNu1z?;^sIO8XP8NMYs}q0 zzIX1Y^!*3u+`SW6gkfel4Xk-NA%iD+dHGil`Ww(RQRHF1?`uKMS|;a<#mPfKymGtY zyXCvPMowb?0fIMnn&>|EMr`~<4bwy({Sb*U894@lpQ^n)RJrmBb7&1x3P%Kb&yu8f z^*qBLzOq~Ma+H_4CRV2iv#ZI%<QZ|X z>8qyhXwpky#N%>UlorORFsVoOoBcCJ-4>HA5M&cVyZJX;oI5@&1lnLkU&)*S&tjm1 zg$!G^$f)W1qIk>UmrCpy?T{2t3{^xhXL^H(_aPIE%^qbBf}W0Ot??*OQ@xxrn?s|A; zU-`_Uu*L$)2+xG_YD#Nv8r*iqhBk8I&*MZZ^GDn8yJC>PVPP(SD`^n^>l1**z+4Wd zK(lcUFmuwVan>)YbX!qNrk>Q~6hwxmQ=BY-#1aB-+~pZ;Aj>XX?sA7phB<{ zBC6^6+y(Rax~wdq6rFQW`t_4m4_s%}eQvm)Ou|1Za9> zTW9#{OEHQf6}YUY-z6{sq_RXI-;4*slc;JlWPGNm26a?fIQ28VCR)}NORr}>Oe=(J z>uA!2OJ4(xks8{n%f|Hv?ZAr;Io6!`s#usi-97`jXb*O<$JSP-Aa_kjUuKU#bcYaD zYijo*S^NnVH_GY`9bn%eH2YY-aH~rlsbGp%17}Num3LggnF?qQ><*GO5NaXnNqNn2 ztuk^lY7Y>+kj1hOcnjI%9{98sO@@i&j_NTrpg9j{5axqW~OVd z6l~PrtRZyV{txi6)BQr?{T-Sy2ZQ9(5i!Js*=b7Cw-4p&7e`Z#OM87|1{?b8ODX4r<7Ju+GqG3n8t^K8H=0|awk&)#|)SPeR9*KyMrm;8rIuSY)koNFLtxvvFWK?TdG~Q zJ%3Jel-!}$UjQ=mRBO~kDQ4Mgl*^4KUo==~nEiRvz@I8v`k{+YhFI5x748yaD$qMq zSm)=N4iKIiVq3YAd-sp?4`=6q8@>g%Z#px*jy8bxy{i-rR!ne2dFFEQ_*OtNbi6!2 ztNPn+P-N#njello(PcbHxLhoEx?5DyV!P+VZXA$KNkYs%cHaTldKKUo=4I zU2gR=>5;d!&pSce@Xz&XA`5*C&+waVFUJhTM*e!;m!rDCh;?#ua8A&s;5DEW?sXrp^DQAgi^ zH5*8qjIj>xv0ga^|N%i*J>1;dudqn{G9{_pXYQ{fw z>2gT0`i;#~&8udW{|3IZAzF`3C1O7xU37kQvH$zs<(vI3t?dCH=iS<9Aw1i=_uT=K zj=YnQY9vmq=)RZHUg+z?mEwhsexXCb)(76!BQtNsNMOxtrli+WqP)yxldWl!c{etLS?c>pPu>GBVdvqsA1zTw3X2tr&j3$(z}r zY0b;TG$m%$pm;YyxU6Bbujl!^3*`BjY6-@LqS|N<+hzqSQK$b#1&#I29H@|5ykfHQ zBLV?mWqIzNk3B0OF9zyk)D`LT+=B;=!frWU+f(mdU(vqd#OePF)8L@@is=#j1#z+o zV(vY(!6?MNQg<*rqPnp0G$`}!{AFLXBSo|LW(b2GiCG+@a^mu-YN^IB*u~Jas=Zgj zg=ZGvrQo@G%u&-zi=AnP+={9FHsAJs_vYLW*~0q2*>koZ6sYjq!zxOq){U5?<&|4L zs=12oTqQUA**^Ya2}-GWi@@DLiE_s!bBowlVZQ|p{MnwDzN)&NQ?aMe;F!U?OWeJ} z0us-i;&j2K5K{4`cI(UCCX};@m%9}!&3W+-znloQPnU`>`xj|~e}Oh20GPh=nBWp= zbN}2lt?m2z%eknZGN<<(NsC_y9Cv&L9#^rFpS}k;rGbk)vS&u-+kM-Pjs^Y{{h()f z+y0!@sw?dL+P0FCvlzd+;Dr}`6f>@xYE+tu|L`yQrQBr&xrPxxjZ2^MXWJ@^x#{Vw zzb15cPUI5n!yGjJ17s!~2=>(zIo*{j!`rzLROZR$D z19~9x`If%V z=N9V~bu9Zfec~K?5D|EAu`uxFa7T&xYv$z)%k4JUI2sAXQrs%r8%3YgCa3+xKJIc} z5cqh9>vr;;0HGAw72S-k{{@&vGX3M3OXL|j@tm^f0u;_vX*asD@dPgrBeDngTf6?+~{kuxrcB_CzE`NXd+Q+to^nSFY`=eANJ;vq5IDQTm!y( zekUDuOl>q>w15`m)y~KcxVy3jh1I^zPw?n;Jsb+WCp5XZ#F86;YD$2}&f}PP7Xhek zF<+L0H*=nf;)~7pQ8=xYPtnc0{=G-@tzKPMx435i1Gu(FsZJy>I|b^$+ghe%-^Wzk zwOyJEd+OtK^WVXeg+}1d^LOt`%U_*auRXaj^d;Ty$IV;BAL-X4mNoyKp7)bJmPh6~ z%s=&z`}@%Ut|RLU4nLQn4|vf<$;SL-v8?|4w}P(t%=e$0DNl#~-kO*H^!6yPa<$FD zngp~-eqbK)!?>sV7ptKyua8=*aep0ua&~iEo|Mn7j+YbEfqS! zsmYaB5~_9|$QI@{mF&L#xa1cM`+4h*Tj=)dxNMEvAA2xc^*iHaOSU}qbs3Ghw0CO! zvbMGshdxKbRGQdhzT0SCe&XF9iLiShy5D~@M9Y z%Rg9r`%hxy(oRcEYh>eo#RHtiJ_g2^oiCxxG3jL-@q5Bi$bq3Qi$9fOtI62Eo=7Nn z+j^2*5cNjV;NlP9fD4x>fo@Ij_c;1&PnO{O%p!045RhCHrvHR1!0 zh%uX+T1+!v4ON=O2FH-8fKV#e99!tP>qCo_EbgM0%?`s!mB6nUpaLHdFwQQgM1*FM z!c9Ds>ZXTa@fjvj1HMVa%@cb&iBlmT&<^>P05=nJhN4ZhHdpclfX)#}pTG;})Of>w zYa>Oj?e|Yk{2bs(CNT8xc3z`z+Ry1xz%ub;N0`l3%Fz}7rqI*7$QlHU@`C_Px91rz4u_&E1hJ1B==|I~| z|LixVn3_0n>;YG> zL-|~3SMK?j#O7BCFJ9_#d@}5*a4CO( zYy~?&b(Itvs|b5KmV0f!LIG_b6pV0kWoWh|0*A*1=$s(@BDpTiEj1KFYL>w>V?HT) zO@o`q8DS|9k%vGA&7nb4h>_6Kjabr))z=zWeCTWON*_Q<5=uzHNZ++Rhpa)B7QmrA zSQIDYKPx2X@ppGgzR}H(^Ht)Ydy7FZ5?Vf@5G23xir(F7aO|~Og{GMD)@ewHc(Gw! zUBA@FZyty(EyyUvhr)$fPZ{7QiEPsk`4RYudYl)`@l3; zi)FyaMJe~c_HPix+_0eKrM_uO@st$%8B6ihdVNMHD05D^RVC0i*OVAF1(gCEGy(^7 zurZGGl@j&zxwR4d?^;V{Z8|tP11u>7aRCUt%e3p`YB70MHSB8FWd&_gE~9A*sadg^ zekPtTu>HJX`P`9Ij$*wiCXg3I9lXAeaB{nSrF!zUD1lEsFJ22lzqoOk*ACzWZ4(%A z*d{0CC+zIg-oW9CV#m;H#I+U=nyO=YzDLsBd@02mST}EV#9#X;yLdVcE+l(X!P#Y#$Xb?_@h& zi(x_4>jQpqrG%L&63amJEWAlsn-Wg?Mp5qQH$Jh{p&6F~h>{V|&{C!dpEQ|W_6N&0 zNON6^zr<>Jx;CfYlionpxd%Gl^TJta*e9I}Z1VksWUHvXs&lUgji8@!*ppCQDs zi8K15ZH*H=evT|DV7ogX62zoS%>iOfEYn!!!>skB&AY*e98Z35;H0TQu+oOPaq^z} zn%yy<>CuQh^V}orbAR$1G{+a=Jiee_i#tgp{}&YM>mHj`gO=0sj3?xv$DX3iX_Aqiks5E@&(3EW9=SRY`K8(6k`zP(!-)ba9h^&Puqt=bpy z@zwl>84jA>I+_ktWVd*sO#AuIKi6ARTUVT`Anof{rUo|DPRo$}ua!Vj5QW22i z<}vg02IQ4xgvI-n=0BNjuSmE5QI$tdeg5Bp^5$=E^H5-qw5+;ca=5X-8SxR3p93C5o;UoEQ?|ThMkt4!OLX?lIm`-o!26s65Vu<7ehq z!)>aO79Eb#`gi{3sq69rDfyCV7B%#yo(i_XANGK8DcDPHzmqH62eLN*g*U)edFkTn z0B~aOH9a6qvz5k_Bk{3j$5(|)n@9q)kThXHl;RbWZzlDl6fVWdEF2JxtPIUF&)F-| zsLWR4srv|czX4!Z&d@u-CsW2*#iG`EAlrVTV6XWNo62%uZh{_DUDjD3AaS{FTcHo4 zgGIl_fH|+7L|Uy90HO6*4a~F>`LzUM@=}Qe6GM3-63^+L7|-oQJvqj+*f>G~*+_7X zj)0u9f>J)6CfvrxJa$UV)B(e9%n2XDrMRF6m@&grp8hw%$q3~cJllRJ+PoFQRciue zRUe(qD&Z+tDN6pP(lM9`&x0{<-LSL`jmPCbbAq6%QDb-GH2#sJ7D?vxzxWbqtY-u+ zBcxw_)-h;6hz+|xtSkk;z*Rx0tgyiC5EhTZrWn%NNe81<5*UepUoy~2uL+F%{TWNG zEk1uh!%T5ab#R>6xzdfx6yxyJCLDQ0fB^Po3N6EHHpyt&$E9$o;gv?~F4*aA})+YSR61&ag?k ze^ks^$^tepzRh^!D~ZFu5AlLSSICZ!nU@CC9%(FMUo8Pv7UYy&`et4?8UuU!mOBmE z-Z;T|8s}y&>SPH@5C=$ya8F^uQbbSpqPu7FnxI*0G>De-*X=CKR1!aWzNM^38%WsGzNAZ z7hG62`Si2<)!@4iom=~bevY0tqH7Inr>LEWX-GbM7tpf?O*5KsOmmrao47<8@9j7e z-<4Ko!3#_2;r$6Vp-v78ewo^wrmQup2gg}AJ?x83zP|R?rzxsm5J2UbAnpvklx_?R z8TWj>mMB*p_&nknGQz{f3MXDjqw^-k?KSy6NRV-x#cv>^htI3JA4UpLxHMUaVahDDwVuOG4zp1@F~pxo8YA{iqvaTWiY17 z8kNyGNw$j-gH=A1(}({)FyP&Bnf5%hbfSZ$>5$FZOgRISH#z2dS)vzF+{ZxZCr!^5 zx~jh|mT;sc2G_31XeFcX`lxZo;6CxItjZ z7j%D~9sF(3u=A;X4hf#a=_wW$6*(7)$4l8|2;fXq>R=3&|1z4 zGM{VSoZqER%N)pNtx&3r7Qj~V8|!Wxu{2n3BMR zPn$=*{vh~RA9yn_KlTcLB&(8dve&_-23#=iK|(#vrsw|sF3-)9kLdAbQanj zwiV8nn*{+fE+oJKXI*FxCmAxae#WNU5xOf3c#O3qR>tXnrzZuW9Gm_ z0u>}e%~$4xuu@png(o<{g!08^Ji@6a!&n(Y9Loa_xYXMFd@$JLWynvZQ1NgAOPtcE zC*Yg59qukKm!z%EGIIep2ACg9Bl3~o6&uJs<5C-DBfzW8u?JG&S&S%Fup~urP`=l2 z54QBkBZmjbmS4c|7s4s(r@rcJ2$*|6$=6caXLA!5rw1aJGOtSx?D1X0!kZL*T;kjx z3M+MqI^IYc1I@z`^%LewTa)NXDD%*iHJZM>vdcE{>q`MMDi289BBtuONR6G4p*zHm zfM@^=aaFVO8E;F}{cC8RbX#)EISEq`XJ#rWVCKprfUWAi*c$VVfVzVf+OAEW_)?}P z8)_!<0UqVtUWG}s9bMU6x|QY1;G&((2A%@jl260$cF&RB-+3=;-(Qx86kj-6c|$WQ zlZ8#E^A;*L6&0>Gq*<&#>N?4}#l&Mn3mp>I((*je)+FTvfk;8mkBHdX()}5w`a^m0 zD}FBZ`~tlwMVl|F+bjjjRclUi3eY+Lwfd5RCdyR}gW*ddpeDz&iXV{dm^L2--5`+7 z2@AtzC7BXy3gge0^bO+#^iu!bM0Q=PudC@w=Y@h{SWaIs-N~`bzDkR~*r_gSv2>KF zy>VWW1hAmn2vj|TLuo~62J`V9{cFsiB%e%%pEaeWG-9SONSWigK&~iTS7YJj=%i0~ zZ)nHc_PiQC;7tM8%kPh0!P17h40EcBo0~@Q%BC)|IO3k;>=(5dnGCwI;h=7<_fV{- z-_m{kyyKJC6Z{Jv$C);%f$|iByQPx-z7U&lkPL!5ivg}XGLGG^3{s=1G$Gqtw2(3| zJ>S}j4fHPfQoWHnrx)&$PwcUNV2Z7g-slB5EHo)khcD%|B5f^{iLe)V;ZQAPApgpa z;7)|ha^&8c;9B-vx8Q@Z=Zz0Na)49DVf@vABX4n%O77`O!I~S z2(HfuqCzTxw(Vh)6+Rkv)Ocfp;`|o{p1V8tFe;Z{G@2O6$>R9*mN@@kQbl(q1=DECkRqT0A?Xjl`v5D^uKn$%u zxye4nFJN(E{e%}Rg<{aYq%>5Q3bg%Ru??-8=*I#C^7ryBfmGIZtzj~vLPk{T5|5Sw z*Yn@ZrerY!b(mjZN`@=mDgVHMtHxhN4{wB$0fY{#K9G`NQlaWwVG2~Mw8buwy;P|3 zTK&ca=!k=QYsqg))#^nyPA9iGhLy17ORjco2kIt&k|@F=?AiIiH+gi`wZ>k;)@t@jr9qvoOS*iSEn z1TQI&4IW>(BQ&=ho*}n9c-n@Oxmy-;HNYV(@ISzv4~xKu*jkQ5z2xC2v|=i+17^T? zAma`736COpAne$+6H#zArHRhATp$bxN5}O(N@V=KzBPTy2=z9+p22OUyw9<^E_S8} z`RqKn{K4<>LF&rt5AUrZ)mqWVr67zbGV#R7xhs@Xh;9duY`}F>l-pN?re@ z^a>Gr`$O3RhV{!kd| zskyCW{fHI*WEKgCHPB%%5wh~-EnTi23ZlEW{PKce{GXzR!RdGbw#}twMP;Uh5BXbs z?VZu^w~Mv5_KaPEVJ9@x#Ck-D=SB4M)(_6Voxjj97O~vhXNfAOsz&4UYnQtUazw94 zeJVUHJ=OlSetaLP(>r!2?X+nYS{U6$@Q*h)2~uo#cFNuSVSH^#>+LIz=K*`m@B@<) zVV^r5w447BD_~gKP+a*V%`1`O53h^As&(8$+J9$Tk#Bt2`g}v!!gZPSAdX7QBh3)6AM3&mL-3=I_dhyypxi2*uOW(1D+G&Vx*+!aUAH9 zXVe?(tIR>XeYYzJQ+s2I$CK=m!(I-qj;Xy>HJ25(Kq2Bd@-{@BUq@3Wa8H$+u=p?! zl!9Pbz}*>yI< zQHiI{ih5&e-~OUqVJ9-qOZPjpU6k*3$)j<%aemF#4d?ogqjc24ogxHD#$A6&v)A;t z>36D~8sqw#^xOB@-mc{vS5IG=qB%=;`5r&_jE2y(i)(YD(yo%EsVy<)4!&-b$IRZp z>ASv@>R0LQSld>V^ijja{fE;1M!k1WMYQu7U#YJ-D@nQ8n^y|ETUQC{D3sI+E!%2F zl2US*q3(BS?-zBq=Xg8&ou@6tZuXnamiKH;o11<2A9!vyo2xez zu@7T$X<1?nj{}b>>0Y7K^gVXpRj}P{TTkJt`J7!|#?Mu?ZJq4W)oJ)Yi9LP$XZN3P z?^m}Q9$NF-+IKe7aGXbVZEd_S3*P%1DBrxYv*qJ^hQh7;L{K|2m>}cm-%9lzpHt|m z*6g(nWp+L({AhkL>OB_cr*)URb>MB`Uf^&?#bk|eYm zk^cZLrg4kafaanb%CV}ECTK^}a{~j?9)&A9p$Rf&hzxU#&ru-P4LEX%)J0$c=o)-{ za-SK-m3-L-gl%GUi6`oa0yFtyhMY{5Kx9sn(q=kSDXs!_*HLu?{-$Y{j&nGevvB^9 zkHjEY&_Ira0jfq|8e%Mxcqyc+pBEvFs0qvyFb~8@tQ<)ogCv!jR-b?~5uDbTs-)IH zNhX8M85Z!UkB9o=T82685r^rIh|I@P84(?D(w6}s!yM)WP^i-&nh1hS=Z9*frb1(2Uwq`4S(>(awwF-M1U!(lS!}V(>z96mOCi3LVyiPF$O^*YDg8!JPqOmqH~~t zfB{7?a|HRQ#7{^B;6*r`59tx}TENUilhiJpCiC4Ui#1EQrV0RHSkOQ)HEC)=i4$Lr z1mw=uRnTa$BC02$tgUHTj;9p_2t<;42_G{+Foq%5NPz-m^#GZP6CE%};GjXBFtJfW zVoymqPA}<7IEm%tO;Sl9R=s4;QTUIZCL4G_7$@esNKye68L{P8bSYW*liB}nU-j-EAxhLno- zb;&_Nu2t3WCLoWN4&kJnTjndan24A#35ocAbik0UXovv2N6bWIN%@2S0G1pg9qiO_ z6(*$o2mI+dj3!px<%wTXLH$$z0EhbF@F)KO#$&XrpctiU3C^A)@fcMrb!b(!h&7!4 z0%nuf1AGFNN-f3$V=+#qwGcm%z=H2d6Ip;JK!wvC5A)CP!-7?uMg+(L#Z62IG$a9> z^})m@DyA56bVwj|KLONF%M->86MUS=WWJ)aCP<*^0;aivBNUVwTJG9}3IP(*X1yjS zJjjl?Ga=;V<0D`I3n4Y3sWV)lo`m6(EffHxlU7-QQCW!0OlN?2ZFq!jiv32vQHT*- zshnqtlKB^S!DW#VKtlXFnaeCuos>8zk|a040)9Wz0l)<*6C{zQBTUqRQzk)zFa+jH z7dhPgUjt}g$nSpR z+B+3jw|2^r+txP+v|G$-dMLS zo~M?3n;j1oEAsg4Jz(}v?MrLJKF68vU7~Ycz@c8nvuR(B;@!`cIG!Q`wkxJaXfCt`R-^z{f5rt4W`oA1PlDO z^oCWpY|z_NG@|v#u-3bE#c;b%2f25+ot~!U?eA_*=W}C}=h=BaMKre8ZmNsLaYiRj z&uk|$)aOI&O%4zaZW0xGAC{wroiL4 zK!i$&0sNDeKUdpeG;F<ktEMwm&Xj$lD?pT$_xQoeI$bt48rAr zR?5ioNRWf3s)BUZ8{)u`gkvQDR%6OF27m~P(xONhX0`f5s}N=?4SI>0gPlJdRZ@6k z-MhlFK-(yBGoTVRki2GV*HLEwC5 zf1Uzu^#>r*82CnJzf{uzlZ^^cCbWs9ib*hY@agfu4bG)Vpaj>cllW6A;1If|2vb7_ zGmeL)Fcr+wgeV6sIi99|Ri!_c7*!_VrDi6efMz802jTI;2BE;r8)OKO45(T9iR&-{ zoD3|~a`8jnVf2%j=}>x;T&aLUnlzGYKqi@W>s$aKV3Jw1fghyANtyA(F0UG)36i8~ zjMa%JKZnZ!HOmR&Jk*LD&SsKF`d}^B19lZH4FQQQBm#9g0G!*caFR)4K~;e%OGljF+tF0QP#Ky)Tm;C;ay)iBf=!a zU=>?zAZZY20i5IhbigNOoNxjZ5_L%=REaSVC#C@Ad>|HIFbp*$1CgO8ITSO1q|^>+ zSknd~lO`j_06M3JG!Cg%1O+q_7HOzY;W$-%%0*O>T9HU-0JoGA6;gWqC*_7vvIEF% zK*cEw@*W*<0Dx*O0ML^%V4j8saxegD4xcl8z@d+ijSc}ynBpdylQJ>@5-8E;IhtZy zPYL8=3XlmVzG0lo(8!1i1{IW7<}pecqeoLTSnEJzuUux_xdN2JkO46UM_Gu{4@^4V z6h6=!H;46VnlKVTXsXEg9P*qg!~kjL0hkfc14A>WV<{u3!T`*Oh!A3?W_o-)Z~(5$ zYTI7BbuC#?CD_EVk`)C_$8nGtjm^)sUVAuC^ETPo+~3?(qL#}R=XrB-x>9Xel06_{ z?)96@Gd*$R1V)p&0S@uRJHA z=YIWZ6;3cgRBQJ<5D_hq0!M{$blXY7)Ac#8xZCq;WHxMosGwU4L`fz|nbHX|d}A84 zl8hKP4;qq@Ek>fW8K?qJiqKMU;b@~nJMLPzdXcX!yCulFEd~VXXf=$XhIHwSZtF)n zNmaYLhxHa)_w3sNt}tLmU?GMhOa(Mnu4gQB-PW(oq$ly*XqB4BX^QW!3ufyk?HI5& z(_jg>&@x|ANnK`V#~jz(s$NI(J2t7$Wmi~Tx)_D)iFm!O%A+xJrEP$op+x|xU~6Y? zM3XSYV}|xtZEmda@BYVqDGQo}0kvzEuKHIkHRl%q^+_zN9(L9|xCB(EsS}Fyx2HwkN2-5dMLwS6@IL7;u-sQ0TG2o7x)+&{L zm!@Yuti*TQd;4owcd=^q!*O2L*`7h%Tp^j9pZk|>AO(z-Q;Z%Q<6RD&yK^N)E4z_anPzm#lJd{QLY3GrwCK zOQm)@yOwvi2}@Rz=qSl;$Y*3}HtkvzB%e90G2`QHDNoIh?s>hZxoWSvrG93+<+pr= z+ZU|v_i5|u)RrvUQYPSKx9EeWvalXbRK|9*+||L;T2iqK9i_Wr$MW25r`_{A+d=ns zeNft=rqV5)JFXYn+!A_T7Bb<*}CL?%w7qyvdS1eph1P3(MvnuH4^e4QkOs zZhv$!4$KTe^8#^|mm|SDb=td1BFMlw-dmK}dX|>bxw&@d?S-Lo>)LzeN(NLKuNkYf zKp42(bZJL49aUR*Q8-_*H*a^1y|M|v-agZMEvY+=jg=Sd+VrIxP4X3m$DJcdlr_aB zmfdXJTaU|u!@XVFU;VV5B(NR-01~%S?d^K4o1g8r_rx$af(YGTwuep0=#oQBO)%Z` znN1j0x3#>zxiNj;C&tb2_U*X!eI3ZSg+pFq#lk6HJh?Db2#oQ__b&XaR&>3joTuho z3{&^kt~>4Q!Tr6)OBW_XNGb)#V1>Op79BCuw`rnUGdpeFd7si-cU$YWcDJoNF6QDm zb{6!k+mPDW7B>x`@+pxbhZ?K2p>~x@Uba_C8ZnK|_Qln*i?_Ol`MGqpxf)&DOBP^5 zg-M`@n&pQTthn(yWw$SY?VES@MGD{bP!_p;-Aj6iN2O{OG^??x1H&20Z@725Wc`mS z-|hGAZWUVcUR!#Cglo3g78a%h0*e9$U!EPRs^$JCJ^6W)s>OQJvF zYCjP<;8o>v^(OaraaR$RSw{W8bQahO_J^dZMw_-4=18yf`ORhxP8?2RS~G3EW>I3@ zjSO1G;I`obR<_PABD|Jl6IpU61vcW|WasiG_U4r(kX;DZnTakZO6V@A4O|H^fzQJd zoKI=f)4VvJnU6DETWAe{-~iyG!|1sBM2Bii0|%(XPq#y{QqCc2M^+xa)9D6z2J71* z27#!S6AD~mHrqDZrR#4p$HWb#xoiG=O46E^>0zeLTg;NBp=b#C;|xQ>y8le8q6(ONq`SI4m0pKt!fckkUFf7tAf*txml z`&*8^Z*||D?{jGF#&(YtanYA;Wt=U&_jB@UrFOetF87%2l|(5^ zLgF#%Jy~VET7NuoZ#z!0kBpt0R8Xq2{x}-{0GH&SY%X0*#lx&?Hw!LV>R0lSL6Cut z9ostjbMe@D4Vo*sveSWt+~@9kSFT^(5~^9y-emKE^pp&Bl0;LkJbm``p3NId zt0XIZ$+fnKjkzwx3otAZ1>HmFcRJhxX#xSp4y*pI1Yf4RZKZ_CwmYWYtrq=ex_rxU zBdJw_6qzP8nHBlrX0BZLnO~)}O_G97{{RVH*sXxfPLR)V+X{M;OrJCyMfV{>hUDkJ zPei$y7VmOh8t=W>K{l+dv;kjG(q?M5*Q+0^ra7VnlJC5sHWuD`zDzH-M z%2n>g=A57&;}WS$U8w5 z`QwZ3Sv`30Iv&iZ#)cuwbL`B=QAM7(tJzW+jU&5*IdVO zipT(mUlQB&nOO3o!botr#~%j_^tcb-WW?7ZtJrt>J!o|9>G zxb7if0bYm49UpU>%Q-qW-4ns4dEQ)J-X(*1!9Jn5EzsLhC76I^$x1CG;;NJL@qeFz z*tcs%D^nWZb2hDCw1!6B*mMFFUgGEhST{vtYyB;aYnIxa9Cx$4-I#9ok-2a!knWc~ zTfSy$GTIU?G1Vc}qs)5aWmgLMh1z7VWc&*b>ycF2+FNsMqL->yStML6{{Tow)$l)_ zHQS!V(rByW=S+fh@mCKz5cl?7| z*&wxX5%(IN*&y7qy7dAiS58y$jBU3|ENXLJ+|CyR9oX&|z0|k{x4sLupCz_c9*&R+ zWk6%>DIn+d! zeVaMnw&!tn;w9T}ZpkKv#n1~jm<3f034mwE9hI$>W$1Emd92?Z2{+qA8-iC-kN_@K ziSoM;Wt7b1GWcU{y49yB#UT>P+hw?#?mH6YMOc}wvat;{Fk{CoTD5I7;5*%NXH;J{ z+cB+L`V|eSv>IKO5Dbu6bde??jA)ygIJYlrV}W(q@&1*A=Z-Su%b*fPL4mz2026vg7v3cN_jgeB)`h+SprVuHV0X&!=rI>4FVoAvo5y zNkP3Tt>ym!E-Q-e`I=9^efG7px4G@lYA&+1%Zq1{@7CG`YgR((ZJ%iE_XuBXp_&f* z=q+#(ZGb>H=iJ||YZRV;kBL0DNzlz*x06+z9Q(D}yKXLBX1@0~7kzuzF0<}0Uwe*P z?&9t1x}R~py>d%464kCaZTBwaH_UlPsH+=l672Z=ONQd+rxw5M#*ulNXHX?=`3a$X zpcx0@jqJIWbwp^gS+|>KDQ|5qLwfh_>r<-ZF@$&1`Wb{$qI_|!YYQTodC*Oc#vfbx z?iN;WL;{N5P_XSY9ap9Xt-zbhQHc1|+&zu6+>OTNwwptHaIIqI&edJ6?(AQ;=-N~; z#l2XC$kV1W+)5oaZ%_0huC>TA2&otwh(+soiE7kMk2 zalhnTYAni5`+0Cd%PyGxH`BJ3&qcSk{-s~c{7=<7pZPwayS-;KcODBvJ74-F)@!RQ z&3q@Mb;oJKI5Q@-6mFHs0r0`Z2Ph_d4^f!@b;A>JsH-4q=zL&hT#hQQKQVJAI!!_A zo>euNG0==?DNcI|l1QGKWXHtLeJ2V5))ogBNey3_6on_DfmzQAQq<2ORLBQbVy1iv zGZ6#~6Ny2i1e&aaL!3lbN6g^j9pxV@60i=LENV=j4+xAt1J<+NCZi1pOLS6a;*#CsYoj!|=gsx1fP$A+wkOALs^VRenPaRu|4d zVXo;E5&;KXjY7GevGBr|&C9@WH>?1xp#0}9hr%Zf;iwu?GS?WH5DAb>_;j9`;d6Pi zusFsA3~8yg8Uq5JG>M!$OeoQU84PDuqga~s{&P5ll`S^ZUHk?b>D0kP7y!*6gComN z(s13SG_(+<-~b#N$?m|ZP`dY0B2=lbAkr1(lr>!^aI1L45rZ5U&ugMgD(Ko ziUpz1@%dtVf%5Q?r*<$EpfEB|^nwHmQZZG-o+IVUo&b_bpE>Za)zW9IbogNAokTR% z(^o9DG>BO+DV*U(ZuSMnNXEjmeOngVDdK@*XP!g&kmf!1SFLGqc>Vhu??JutYFSe%g>n_0P8R_Ffa+X5Ch#XbyBdVL>khSI*1X3 z2@L9)21@`bQROG)2D#uL9`T!(6-gRcNzX_!Gt>vtB9q~S;gy_`)t=!wtOy5IYpXFe z5gvg zAjYatWf-W(d9JHCzz*e$ljS7lL4jD6>I&dUin}+KF?Q@MYA`4cUzVQ_$wNRBWjwqT-*rb+mcX(u=%t`voA){0qIE-IZSe87T8G2$zk zgW-s>c6_S{u5QvZUl!dhylZnns$xihOLS<%or0W;x--{MPcc#zA7xKtL>0b5&5o z&jO>wt7Jr!H8Q1$0f0JTMsNmX{IE9_mIExyY}{Z$c4B7IsIzT2^f)0X6 zCslglW`7YDt>%`tW>krY%tEk?vain(IUCT&Z(GnbUTC`OsRzx5XL&w5nDf$fs5~U{;6RS8Kv32r8JU&Q0gWOQybQ*&qW0BjwUC* z*b(Y2#MfvkDgv~JBo>xg$*Y_ZjBVtzD%jM;w>)Vsiv)g+QvwK(O2jAtKqnKgh)d<3 z;|$+%&t-wMi0Y3&R+uWxPN2jx>L>B(OeB{OUSzu&k8XBM*)n6>o;|JyNYUvXA;O()Xqi^1 zmtfs-PEwvCs{C1Jy~jI371XZ864HoQNhE3$CsO77hQ5oY{ocD^3n$O1*GwrW+ zyZ->RTFUU9)5g{sujeEtopF{)8?D8bQE^P>Sg`XTGbSj|PsamXs|2@a zepU36?eFb40LMT>0vrs88f#x1XW&w4=YcA0+$Te*pgLoqr8>zu48YG7SLR*g0_B>q z5LIAnQAy4LBT$^<7VM@3)TQD@djztU0)Wc0*G%O(!9SietIufNXYrChpcI;FVG>Em zXbUAt(n%jr^TxU2A~{wJ7fI6ql_SkkH5sj7WHAcMRxy_WRO!{I%LR}{e5NVo9~0qB zT50Q`fHvr+N>|F2g~|zRi8Rc0#Yrw69)oReSQt=s9RPx7`m0F_Yg{JMUouzMh=>uC zI4mHE5(1bn6b4V3PEkxg<3I{fOc-GSRKoQp7v~W`2geKwC_b2wU=unc^(zyU$HM_B zKGriDs{~d}Pn1kh8kS;4Sz%9_JBkz2l+y$RW+0Lv>H|?SX_OBf5E26~(pihC5-Fv% z0|9b@@#t^~b8&zIc}NBTtjOwo!ZU-@!vqusAOH@dt0GA`nJ1ysfHV-GBnn6&s4L|0 zHBzE*qCgk{jKP6DB!)g|J!JS`6L7{J+O+GC4qXYQ03*Uactolyx#Bj-KlY6PAnFH6 z1`HgDB%JdY2;Huh1Jm^3v=(I`0}REPsM2Cafzvp^6y~K{jbLu*B!f^)pc6i2G@ufS zI`!#*(K%D06@wYnN`OT{^VWs{&8Mb*7eL7%%7s{{q{)mmhajt6Nef_oLsyo8#I|h|KtUuCOeXW4LLW4(2S8R6L#|65 z0MSSqp^k7Mbpzvs-ca>KS5Qk%pt4GkTBysW9%<$yr-m67aaGttyKb_qAkLT&HAPky zNF;cOz|p4+kxj6%8fv*plPSsCB2b` zy)b|FvgmBS`65-VpwQ}Wm42C$ixFvQKqwzI2un6KpEYrHi&dA&h?X3a6H=B z4JY~H9cxykBr%)bJp-BVB z5qok`vDHgCgJE#>3S+}+in%Bx){0w!kNq);m?apA1(X4};0v?|KrZ_Wpg z(k&Psa@xv(7T5$wmS(XrKbAT+o8`<(Gnr6s4nJy|s>&zgjYNX0U$M1Ndh1eRF5rSK+Qc#EX)r?tEKf!XXeTTR9ikKrJtd`2(i#8l#c{8nlu?^niu~_+rF5LJ}od)kz{?FM$M2NHmO1l+~x81{GCgYSPSdEMPnl@KvT= zF_typFyl?ZaHuEDtmdL9K_e#5;zl*r-yuih7^ILJR$$51=F7@R1V%#@Dq#TWV*vmH z4CRqE6$ZIZ5DeW?s!YL#8o`i&Op>_}5A(w1NzOp9-P&?@P0O}ym$r(`&2LK(f(SAQ zAhb?XgtqNzbxonDLhP^JQpVtKE|pzP{jn23C|QkXz~_qO<+o&w)y@mGtKOj`yxV{+ zgGzxfpqOGOImG2m{UGYXR!d5vA5Nk{gF!xRA}DJ~Ib%A*X>ejC$e$rJR-_4unw-d! zoMPf!AQg2nEK4%PwKS3p$S3+_MEKz*>y7|8(C`6hVl@8%NRy;3CP-?W9pE;7L@b4v zmDNd*Bdlh0;MK?uA<}g|rVOlP0Ulr?X(6?KSYBqdzz%{2qNmCzXELx%d>d6~3HRzn z;vuXE=oN!1&YJ2H>e|vMY4r8QCbF9yQ;y-m22sh91PIgsk1Hvp7$SUQ2Q{kUXi$l4 zDA%YJVb(P?2xtc>Bn;pTYA65|7bX~@!3b2P0Rpo!1Ai=Ln^s{fLRGaSTm_fZ^AOr< zvovL;Oy!FKzeQ03xz_|uN`l0KCuBRyvaH~BB9q~%J`WLt2=5(owj3|3D} zO66FN2+xxcYn`K8*n6?aS^z3@y`#3=u?hs<<9BA*HKR?dvG5}sX4_rqlTA{6rp!7) zmRSX$$4JbOG9>uqaW~M|HGy%YQB-M@Pz`3LCNU4`Uo$JF?+Z|v01F_2q{@z<%*4bI z7?WT%8fQWb5F~tw5rCd#pDX%@7UGE{00RLO>MI}!Burp3=Bsn35nI#xObXV2P>jFy zfu0(}lB>B`jS5x*pa^p?WSOWH@WDBgCg#oX4_}x|RskRi7^#!eMiH%Uo6pobYPk_f z`~e;qVRoHy#2`$3D+HMz48B-HrIJwf1(>gdNAd9ZP6FFYQXe5`QWbHYp9{dM0?J{An8?^83W=De?Jk6ir2Fs zG?$u78PY2UBTR(Bli^$rwRwz$2A5r%RzTDVIT}rRgYdws3Ijq|E(HKI1kET%#z;8F z9L{tFD3NOERD}cO21LhFB82tAx7FMjV~pjh!aqr^0|}A%;v=wY8U(C#gCHm%9L{kc z3LNkb%{w-MYk_=$#$72g!^;_;hACCO1QhFnNXUo=q7VAc6HRA2V z`hW~(B4aoiXCnwpL7R+qK{6CTfm!i6_3_0jwxs~rx)obfNKk1{DFS{(V?{-aaR~y+ z4t44#2hvS^xe1^+cW$e^5bdM&Mna98G@PPFQ=T)vph>rIASyb80w#J=K*-`_5+;YW zDy+m45J{SV4nwFo6H6lF^EJN&M$_Cb^5c!Nws|d|5zbf&YV0jG*KqNawZ#$#&mDH7 zw@q88<&iX{H>^kDpWN9t)k=`H0H|P1PJL)7G0K+~@gL|@pO8TcQC68Wndk?Xt#CzR zf5=a~Cefsr10Y666`!VX0$C$eD+z#LW;y_JCZ0Hip@A?H0!CnT{Nv$@Iu(=05y2Il zzY=qrcwm5r?f(F1v?69CPG1;-73qVF4K(x+lTnp&&n&1q3?`*Oosw|J7%6}%Gj9d! zH0WasDPSBr%F;%zk)VYFGa+k`6$dCM0&}LOR#AtkV%*)@*w=G&y0NuY5>5NbYAIGF zm=*s3Tw3O7)+C;2!_?Qj=Y95f?YSO1{o3C8_068|ZRl(^_qhl4E^XZvH0|xMkjx|# zCly`0#x?vSB>n1D!+IF!W%n<5S?wMtjZVtsuX0>|*>;b(n2+5T%De@<&lv>&Qk;%5L-zCCu7TE}ETOF;<{qd>^(|YSAx&Z{&8S`z` zLY7-wxSTJ{$NRgnch|dTmwUa#&hi|UivssN*S zLvE{;Hk6r7mQb>~R@f1xQB(so5P(69XKPWmc;%uiYQHD%NCMbFc zCT2&59*S7&^+4ju5C{~2VtR=+m?INp=1mh-#;frh^BO9b06S^b{{V1=Z7LwqoQT9X z%A4Xen`$vv9rG_!$A0?v*X|>X_Ak1<_wDa@INjfWbKd56AGN#(u-1E9j^4Ko`(ESS zcJ9k-!0qha9OeG=nm z2cscr;qk3J56AiA#^P{xa@qJHi-T0DGn|~}d@{yOG~W?gtyOmxE&kp^P?!V{oOGeg zV$`f6CF*KU=;4Oq&Cl(I01^WV7zQ;OMS2dE#`J0FGX}JL5ym~u$6f8NYWua5e}?4M zt?xF~+vmHxE>m)E4#w{# z+VH*mv=;zPhSufKc)sMatRwea2JwZ)0ET-E;;;rkO!h~v{{X=1zxsbv<70ZzxW%}9 zxHHuK%jnhWx+m1_FaGtnFUGuA?vHl6Te;Vd-)#BcR^8pc;BEF?yV-qqF720upR)&=}|Kim@|x8YYe3U z2J!$B1vL{=PfAQ?iIc7*o;+Ibg^CB=q=!;UZ65MJ$%1YXgh|<&eydl<Q{*IUGxQ7;EMF zgdZ4?XW;-Tj|$qyaNlC&rQ|!n7oji*^ z97HIj`Kux{jE9YS9=K_xh5>^kNs=p3oD9mEQwl&rgawT~dJtg12lBx6DY;1kVo939 zkSi3RKM%(UkpmJ({HkJ;{ZR+5Dd`dg644?@QerdQKmB zg@XhcCS;j~r_Ko1WJgjwC};D)9omFQ(y`$H6P!oLK*G?b`JpXA5J709 zf`1YLABF&{P^dE_<NCvP>Qj_$Lg>V2sf@!3ji5^f1 z5&`o?Z~{``Q7Q!aWRf7vM~pxdfNeFX;+6+f0!LVb@}(qTVO%ucgZk7|8j75$AM%V$ zGhTWI2w(`HB1g_VFpF7Iv;oMVoPqp4HR(8LjllrY0q81Y^Pm_ffhw&O@sS|c07+6J z0g`+HuS!(L0fGsTCno$r@PqYJ04EK02Fw_O0if}SnfTV2m4fWm^x!0%vS45tsbVHN z;fp^x_(FifHAK+oCM%!F;FK;~A<$F+3~B?Rn4X`GCsS1UQk`IHO<0b#@PpLU{&=G% zrM8CPq!owP(q%vy5Mbm^7@BJ!JQ*NCr6#7e6f`2Z1PZePs&gzRl`&Y6Qy+!~HK^+o z5~Ebeg9E~7XkhfhMecAJBpk<^#B?>K4_=sNLpSf*+gp2=?%KC%(rSB`8B*P`oZNOH zR8z+TXl*sD7$)nuc`j#Np4hUMw!{AbnmdPnrFJ%!PPf`^-$~rMf%QI{W5nY{M62iV z99gNZkaB-~d-K~Jt;%osPj0riebx6VP0JjIH@dpd+q@RxNe(x>k}0$Oo|}EBAjA_h zhi0qd6x-&-PHg42{D*Mw?{|;89mYGCme`lxBJQqQ0#^J zQh9yu+?_#fN@}A#On5H4*E(*II#bQKoHxMpJs+d>9Yk5rE13KbC3zk*-0ypPpm+Da z9nZ=4PdC5T+kBW1TyYnkNI+v~pfH$k;=_HL|e z6Q!hqIP)Ht?W^CHdwUG=oo}ygRl03q=)Vu@dUM$R)b@{J@SAIUJ(k0__)W6vOQ~pR zy>L=}JE}KarTs(8sdR?O6OVQ2`VFpKLyAVR26 zL<*TA0IdH2SBU)aBXw&mAQrVG26HcUM6EP+*h29X-G?Or3FN{`{sUJKuXXaQG0Ten< z%3^x;!ZUb%;{_*0qj9w>2h={M5=Ub0d@LHR4PjYQbDK_)}1=xL7Gp1K!8ag z0%P%{^!|~CTB}*&SC)fOgP5t4F`v)F3RJ;mC{d<*5&#_uKPjlg05T3BFrNs6CUc&d z9~=NHDEOEGK$0h@1HuLX5%p*U4wA-$E|kyk!QcQP)t}Rtpb|VO{II#B>QVWCWu_to zfF=nZBnn1HJZH}PhXZoi1s+mCGo(jTt2qbo!ghAl2O(M{NFY#?UbFbeS0!P zY9+gC`rXK&9}|`{-`uZHM{7TZZPWDk>NgcBujpeNt<}x#LHkt4ArJ6 zpmZ3Nr(dQ?ml4FPyQ@JotfK-BsnQii7|1mzrXzE5sU)?OW6OMIOD6A;O*$amSky_< z-jyX;j1pM|=-Chg|{sYCRGZGSk-oO0iByZM)w zxBDHNdp6gC$q&2a^MZvBKT$Zk1tw^WmI?e#Gii26Y5jyB?|*M`4C zbzW;i`i*tZ?k|T+wlrKiZxOX|r_$Lvn~v>sP|(+(%ceCD0^^f<@0nh%ai@1_>C?jZA47# zpNTLIOxhNAK8=OFxV#$1wDaC&x8}I&?FQc60n0aP3}xlzc=LXzQrEb^?(TT|cT{p# z*VWp$uj#uGw(V`$5N-wYx@uscbu-r!x5}-RFllOT+OxFb4_@TB{nfCEbl9})*TuW7 zRstgB?)j_XK4EL5LO!HooWj0MTUb0K^Uu3Za^a0C5kZm!)|kVRywdbKn@Mv&sgqQ48(qDxLhY8_S|@RN zZ>rl#^YW#8%OsFTOn^SR=O=C z)6Jy$OHdk_gNk%cu~S-JsXDB~CU5rEwwr4owP$7R~PM7i_P*O=`+Z8#jmveHY7ZZ4dr8b5xTuGsSJGbHxHpycQcg zfW30%-&Ag;gOz7h2@9oFCA4QqfXS z2m@0qshZYtoo?%e3a2far;+gZlGl9gw$1^vQs8w6lW`Rm3A=ofbrQ`m0HDR!o?QHP z5o`A9M19ArdiCP$EvKe!v5St(ivn2!>ymt;Dl^8FOO`FEl*5+rVf&6uZTA;Hvd;U0 z>zo}zf!yXzCM$%Sw6%mTYTD6K*?*Ke8U0dyQ>3^3wQG!`3Iikna|7|g%JMXmaQjPB zG2EA32I?Cu3mbx(pHHSV1q?Mj%>m0SPv}#^$yaUL+S>HM)-EroRSd1Tq%y%)7StZ1 zJ~*n?zW}4HnzA5Tg<&AlnZcY?!!i45sqHL0uKU$4E+{I&2vi=NHmSJanSfN#R%0wgb4Q8U zwO3rNOKN%>e^q@{a_gxBUOt(%paJJ6NH+Bmq`>gTR!>-lc5Tx3i{)gFc^i9j4V7_l zx2JKaeMO?%)SphHH1HoBPc5M@#O88^$wu&x5x#wG#N2Jl`)j|OgK@*8< zhO3FUCG>h5H|_V>4*vU}_XGa`f!&pA=F5fRj@x(NUGcix8~kT!@f(YpJsV76H=WJN zB#oBMNnuN`7S_6Q-to87soiS}v39=Y`RU$ez18jXyI*s4^6l4(?d)Cu0P1~8`x)#< zVtXCf+(%<}7YA>M;rR6z4cCkN&Tp5$q;EN%XL{3jkmWfGi>~$8Fb9=DPzF7p)4CtA zvo0S{-dt+_Fn)dNo~wSdcUHF6i?JOCwc4UvwueO9W_z%7>Tn5FEja=*>r8oSQn46M zSNa|j_vUS>&*)v19NV_W-rn7^=giuH0JK0$za%LtRLr$aPBwMsrc&kYGfgK6w}0+H zy>{iRWq);JOREIA={BRNA2N+nNRFK`lA~2{)H7&x{OGrm$?Gqx`XtCt4=(A z<<{$n!aT;`MM~z_W_O2gOOEChu2**3zx>KJO*mHG#Ege;O{Ay(_ z-htQ8xFXZKG9d{diUyP+v=ShRn&Uh9)LRw&&lLJr@RP?9!@uvCTZs2BGh8OnKuTEw z+xu$HLDU!sBc?oF<+r8PKP&wtYoc)#`imX@;<<9m{^6Wlyvi+=X}N7008qcF6@OI( zV-3Y^KT&_iO4Erf_PM+Jce#0p2*J@wap?qA0T!YmKty?ki0Gli1O6=HlJ7*5raz5^WtI z6lsQ6$c%JV+FNRSf{GD<^8C`;d-{Vb8?LM;)%44SlcGPpWeKSngE-k!own32-qG{I z#)iM$-?qE6cH=T!OHHUV>Xvq2q<_>uEOb`2NoC45l^y06z1=O%@V;K*0b5n8o0pROzoeGZ498f;`*r15)tNi4=mPDATY7GWutMnsf|np2 zPD2kal1z!D40Y|M{I9ga_El1vD{F1sx(kYJlpc~f0UQRa9<^aJk;htzRPE5`Z9MTM zZT1g-;Q&69OII0-0d#rH{SBp7K>6YFMWMoQXJpcr%)f2M2(zhRg5|})721FkyvE&^;+XVptl;97(|(%$43d`a=jrZ zKb#Qx-tFv9ZmzYi=iKi3Zg?rbvh5B9hU=EP>ZJbw^V4=UY`876++qF8=hPrdu2`F0 zQ9D@f={kMw^_3M|PF?Tca(l1bE2(RgTU-}z+P~^?y{W_QH1Rf@K`Xi6-gw;eTktB+ zc<9wtQ5eSiwzex6T71tr)AU#Rw(zY^3xx(FR@aXoHl}ULzlE|uCxZ+KgZwk=(;djnV z`MI$85_a4(7xb;It80CNEv8a5DwtO*RxNVu0Ti5TUPV}sFw$y!4@rN=-`m@JneT^g zZ#iv?U+r&g-)rB!<+;}!kGW>et#u`SSs7%yWk@!?o0WmCdR+A!U>Hq)$HP7a7pLm+! z!Km{&(nyUx1#>4UoK3L=_-G=zB#DvWd}PH>x4n}85iX5W|lm@jisOlg{fJ6aG_?#1o;5Apk z5Y;rHCpvY{tuQ8@h2bdf6fs>!Boq986P-M1fh~MU*HH^h$);!F`465c>D*dSpcG;O zP$N+$m5@(ghBK|P4?#8BD^G;!11}N&zsnaZP9j~P>o7Gb6^0R0S{(3qlP^{%b*K#y z^=H#6bikTpc!?4LneaXp_c032)hS~u>1L2(n$^0>!ae!lQa3`7x1EBFHfE@5H5vG8$#>0X$0FxwCl@nf{ z`C)MtpVU^BCa^*9p15d9W)RaDp`3))VxpR> zmw?3=A0HvZbPy{h3_!_x2|a1~V2oghVG>Q;_M<;S=6AZV{*f1i`P;1u65> zJ~M^O3%qs9oTN37fMi$c6p}M(f?y0HY@2#wMitsf z&?p!J8>E3IC}?_NxPwO087&&<7Dk#@YeL4Ef2JH`0V%8i1c{R%%&jUj5kPbNa2Y*& zge_fDt0ATZ4^ldkFa!;k0&3cr*D3&V_?$Lq;jZK|G^~=u)V8A(lQ3zR>50UWqF_Sv z)Kji+FaQ+DoXpp*2qn6>j?yZh?zFLqm|+@8>plbV zt{)NKLW?s_rXEssnW=*$ACJQXkAfFho6SKv2CPh#k(>(Q5S+h}9^}c=be3uYvNP}> zsxY{QW9Blv+$QQQ#XO>B7{up5-7qAo@UM zS((LSfb8K7J;fjh6E!m3YeFan0aao^d*(FBQ&1q7F&b;1%Ng=Dmc*w*CZi5t#IR#g zGm(nG@$trm%;*Vp01`+qcnT|i_+F5GsjdGcp0J0S07AEKYce*F4LL1#dJxLJSvJW(c-#H&_gkM2wQr?^Ed6rn7200Ne%6_QRunRsES8fqYpn#)~NY=EYX zBhDhE#YBG`DSXbOZV1h3h?~b*Qz&3i9)wghd~1xacCfG}LBDAQ;0kJ!tX=4z+IB2HIFGclO~3dx{xNHF;TvsQ@Wx5D38Y zjwqCxeb8C2*Ks7v1cVJmTh%z^ex^on|6PB>Z|~ zHl1x824Z{eI@YFiP_96@!~?0xqXm#c)A65%7b0$W_JpLn%v$#zsp?*2W|kvSgXRQC z0Ok~YYmF^bmNgAgk8im1tiF%~0TnukEKN;(#F|Kfh)UUw0vt~R9^CQGZ%HcfJf|qipZjelU51k< zP%sn-G6?B`)oRv9qMjv&=NJ?QP~+4jxYPqiN6`jlPfV%P54=UH_ZwsoeK1UfQkrI3 zl>^MOdc_CF0b&e+}+vRch_~ncLyoOU(~8UZM(QEptkFw4%N%; zjFB}`emLH{+q-p&zbeca@+EF)^Bn`*KXpC-0K_U-?hTH|xpv6dx zMB}Emt*a@ff!R{gZAP&)j6s8|Dh=?DEZMP>$1zbYu1c4;h6#l9h z&k-Gh!-6aA+ffBV!z=;x)vJ*e1H-N~rxG6KVJ;(0WR(I!`J$d_kYpC8m5paS4)F4{ zDP)ZHw3+=X4M8&BrUcHCMF+}pNvohr8=f!;T_SY@9#RA-0hGYX7|jb;#|^Zyz-dOP zXeEds#RtYz`ANw9aW2a-qyQ$-5NJ%ogY^O{BpEV6r^_rf;=SNB$u3o0RY4($0EGe% zn3}SZe>_!Rlmt|rM3!Ic1xZr}t4Laoz8IhoCcQJMwE2Vu00a6(W`yT4fCkEd8G(QZ zhM^`T2@+*V5KoQ(04M=8$Y<0EDnL*&6_Q?0O2!l?sT7psxqjdj5CJL&^#MXdN0b`S z_<@6gUrli=Mh8-mvQ)y7AQKX0a~K$vrD>kdAheYgFme=ysGljI_?+Vgc!_1%A+JmT zE1fAq&D4>T93bRQ6{bd=TmnF6A;49V1t>`qK?n1u28yrJlF({(7Fdl$C?Emm6aiI< z4FpaQ$l-~&?WtvGOcDhQwnj-gVd+-8Ko+#LbYe`L!vH}Qk^q&Cop4VAT5eYe{K%mJ zp&DVESptlr3dho7y>RESR>g6ygC^S#QD%%3`Nbzy4s0Pws2E~&vQ=DA-kOCY%#c7@ z0p|Kd!8(YNIt&H2mZYS#p%n_SEYVgl0@P(1Ncdt~;xYXO2=jTU#HjM05tyuDNRxI_ zu*kR9`#`~BD{Z1^tW}9WKOUH*WZkP|u0Xi6n!qJhj82lvgyB=j>dYErO$wO|4^0Ff zgE_7dQs3370_aPNq^lrhGo?U+2?|V^k_4I@QXwI&_+}XQ+z& zK^bAa2VPc_uhJ9REu;*ZH3Aw?uRwglC*_FEX`MWrcUJ69z1Gm}En9;Rdv@M{(gZB6 zr6igaq?~f~U-;uPZ?d_YYqQ}Ro3!}QZEe`HrQ1pzLDs>T5Ev)`PpLVatB)FzN)pLd zafotsPXo2mQifD6i-$s>Vl_D_n@w^tmN(m8NyBV~WydDW*jXajP!zC-Uo{HPm8&CB z@EtL#&>Nh+Oq$ZFtg?`GIE4mnuth#nXh)2UEb$>H%`aH}%Y~Z`%dC^FLxKXqf;^-X z<}N3ubAWbIp%Uy{yK37l%`2o31iO{WlLX9GOvV9|v=y{&Fx0XPpVg2g#1e4^*l6q7)rj8&&E<%@U!0HjJ^)H)idg;2R$ggBF=5I~tE z%f=I))>Q3r08M*6!MIK^BNII{PD1Z5DTDBF(ej0 zEXJv)$}lpmqVNHr3Ftrs$Qp^LFl2@Pcugju=t(bQvc1UeQpJT?k*L8at5R8jB(RRN zi>}{2piRNDcH14U!)`W~ErJwA?~U2-*cpK+{iHO-yFZvD5lbqbSgkpKe(7Kl1j zRx#r@DP`q)nl_qAYF(3Z8At2YmBj%4Fv6V)=m-Riv4!i)p(vh=0)#3UljSBr(r3y7 z*1tUPDOG&WEI5v-&?Z=lgj!TUB-AhiOP5WGw0Iw%#SFbA~J$%Fy(T`83lo`<-*&jBh1c7R<5J+fGOdD*Nt=; zA{7*o0H~t|49!CXjG*O;cII5auay(_a89StAieJ_R=-+d=BHFjJ`@6_5cQCLpZki|1NBNeR>}Th#@F0wYMQ z1(H0Zv6!gFcCxmE8}eFYL+3XLAV?KakRnqo=dX?xb&wa*Lt&IGYC4?&)MiGKOqih0 z7i&g_ci<{H(?Um?fVKc4M@0C{M~vcA^G>-mB#jb5AT$pv6R0ayqO+O8P1QQA1Pw6M z0tQtKV7$m(Aayk;K=T8E%;!)l(_E6ee2Pd6RC$1qSOfH|RAB%uq=Ll*n5Yu61$4lG zUIdet9e$xbPNhqc1P`Qk;{5+g%edOmvdsu}p-6Gtd~E{sM89s!^WhW6i`+ z=CK9`d(+#lTHd5foBmgY z-CPPZgx_r4?5)q0+j2a9c<9-6dsd@dQx$n@Ti5)he2tC+$SMy~bqNvy)ZGu8IK~d@ z$~(ndC!j!;Z!q|&Y@xFng-%!;C~Hz1joc2CtW&_4@uW$J9#M(m+&iYz>_QO5Ni3>k zR0%T>0Qpk^f^lwQJzY&INE9Me$3->yV(nC)bPq-v+tuZ2G7y@i>jsQL z>KDLg(u_s`0J4_QNntS+ui^)e0jCa0f=Y^HB8F+>;%5zD+UhE!fN0qmAJYS;jZ98> zL{=hr_6WofVuqRce=P9whV9RX2x!Xqv_?@BGA5%jfR_1iv!Sg!47SI2-#jhQ7xo>| zxZT@;Myounn_Hk~>5ybkjyJVz+OyP6HJ&WZT&N@(YH69L#7z8_QgRs<2U<~pKbIeIN zm*q|bOhN%937{bSy7&z<_~RzKHR3TD!_ztfNsp#YW5*RrwVeY|5r|R&AW4pzya(eL zR*rmtwPmT&O39^E=RZ6-^G5*4fvxH!HA$!uCP3@bzbsxyfP-tP&PtgwWEc|^h{WGP z79Q)_+vPh?xcKH!S8>H}R1!6RcHNV9*^l~N0T`OicPjYFdvLca8c8p*`7ifg)a~8+ zm^+>$Vy?zaU9)UiyaN#=>$Ypx6K|=Clw7}UwC!2^Ork>wHLV0t(B%?Aj7h4hO};Ep zr%sn3Kom6VGa{k|Fb|b;b1h0x6v~Z2fu#I;upMv_YA06sp(IHMNE4Y7NErbq#{r2N z=ul6E1PsrC5tT3`+rdjgmkb1v5Hb*TS1GPEt&)nVkRzQW9YBKADr679h$KhH8YGfY zmLilJbC@)MVtzuI;xToQ9Z==V4+0~o6{K~MfuyS(2i{3S36%iT;v%&K$Hy7GRVUgU z2T#;>KmvR<0%D+K039%t&NUM5HRmrIFL66pb{L@Mc&=B6cT#lvyK}ZD{`hTpJ3@FfdGj1d;U<8OK^}bBQ7Wtq4C1Tn^m`g#fR$P?%WYZz>w2m{8}MN=`Hz zdx)W#+d>H?ivye#LTXohzN*234~WWS{y0(&QVp(D zDy#rw!^%2P9}F=;QV|*!jAY5I^(Vw)rP-wPkk!Cou|NS5L`TE^pToxz`w%@!Lc{8) ziex4z2hR^21%R32D15*GBlS%`F1QkJK-4hbB6`83OjG3;6C95NtjMaYnGj0mW99I} z?;fLti%`UYAc->(1Fj~jYn~$x4?&z3B*8HN!01m*F{?G8Lr?}~PngoAWI+a=1H%yT z@u^()?mY1Bj?3KlPu%Z!Z9Rqd+uM%W?@q$wc)nx5ed+Hlp7W8hvFH1{Y|XaW_UCEr zukEdG`-bNoWo}*GvmgMfl5396mAZ8H-R9-nPn9iYytKO)e`$wVN4t7bCwZyQ1hAXa zvJAtK|7{{Z2)yB)dimksWpe{6dbecLCrIR4Y_B;Rtoea+#{_Ur6-H*Rk% zaVxhcaF;;>&zO;ivwf}mf5&Pjt*r4$ypZYCS8eaRrs)!+RN7FV6Sr9zS=J#@nMGov zfW|pgXq=r~&2Wx6?;2nXj-6vUq4{E4mebJDsjM;<=Gu@aD5yO%i1^MNrK?6ZO06ZK zi1M37x`YrbCQSs#*Z%-4I<~UDG9_nMgPXm??OPlDuJ+T|F!ss@L!gpXin|g?n`a_2 z$5mq0X{^4|=^s}W@h2)i&DU*nVY&YR@P`?>bw#)#A8yK32xgL5z^qV{kHLNK=oIw+ zxBgDbj-PU0a(@{=PWI2L)2Qix<8HtAtEYjfxyyUcRqt9|R?*89RtX&ir6=kvPFVc! zD%gx3;}3L-M>=oJ^k-%TyTTxW3|$M zNf`PA+P=L{TJ*(B+y4N*Y^1H)){5UgJ?G?pm;V5Dy_>IMd{=iEJ!>u%w_T;06gSPMnD3C#w2*>TqjiZ)M^-I zn@A=lpaI~ZL8zcJ@Wx3^qk!5-5?E$4kb3lyUxa+|R!JoS5UKi+asd4D1pJ6Nl+toF znV!IAPMXvRq<WbGWEnkH&xmK%C6=S3cp{}h_T&RBxMUzh;DW{u0 zuqGC1K_Z6|1yzMfp#YI1GIIu#in2-IMQMX7B548)tJ`g|U z;4rwFLgkL)fQ*6YW|;w)j+2696;)OMEJ9{{TDyl>P+;ohMKLM~s*qNzVY`M7B7F zbrp(%PmO8`6{aPZx5fb^shRU?AP58)1He$m9|#kbZf-IUsKmtpSejJK%>=|?f?b=` zcO(P}F--dW`cv@2;%L5!;{!U>fC*hvXx|g#(wL(lB)CynS**m4q`)&#@W3|PNp=bv zhe(w(_)mZmWd8sh0tQr-5Q+TE4hDeJ-sJQp3dQKGV`3q-!xu-nA;S4C~f^#ED(bxIKtod$*0>C(~WMtC6)^nuOon6iGi;JbzQ_ z9XCv$+_c?JHF_RHr|ECIRrZoq?fBI2^WLwyU$}p}-cNJeS1w=n>)So%<=11_oxgFd z?zj73!tbfv+{!Jh{F~ko*KC9PaNbfFPCYZN_5I!JI#SP!CHfxK>Hdqiv;OB(sc`nA z?cb3X?eU$t#O-%G@&5p}-EMAJQ^s)xH0ioofKAo%NherUtXCXeAEfmjqkelUOL`tl zsr4<6i*N00tgge;zh}PLI8NN$+2k)+xz6*q(%Sy(c&mH%6tjpFUht)4q% zz}iBW1dEOh)+fUk%${L7y+cQXdGVYS1ubaMsg_VnMtZUU8T>IVPte5cE==!X#44%~ znnDcPKCJ#VK0Y{?DaUFP!ZO{b8nOwAI!GdFM_HHzN5c!5r2#KPCfjVp028dpt!Fs{ zFflVeBYI@I+S`E3Mp&N;#c5853r$4kV}WwFWC0LoAWn5XU`);oH6zfSYQqKryrN}5 z&PQ1z!xPQe1fYN!F+mbZ2RY0bt`~?8h02C0U!Ex;;C(=l0GbITe9cLW@Cb8E^`8|3 z#-=ML{{Re3fbdv?4}?!%wH;((0UE%K#`FM3p3^B=y5G`c1h=cR;oQa;8g_YhZ z$IJl2+ZBliq)F6Iz#O9$4c1n&8lg}3C3MlKT6#*t@kbl2|I%Y;^{&6ATK;Gyvp! z*;OKcoYuX;U;a*8q41guyX2l1H0WX{NvV zU;zTLCTo;Zg>#IdNWePc+{;l+bXbM1lb=YZNW&@BRvOhZgpepi2@_H(DgOX01BGQT zP=JC!oTv$+%*2n0!XfJg4N?|Fb*D-3V^DAiQKU)L13Cgng->7nFxziYlvF^8p{Ga& zB>YAYKtoZH(nNI1xyEsZT^|kt9LLY8h=OF8%=|DE>YI{?1k{ktSx`YDL7C_}90a;8 zWGy6qUL=F~$6mMzY6dUfOE&#mr$xWk(IG^2AZ0Kx3FkTuD~pezRrHkwdInhp9Ht`y zt#rWkyH?cen#4;^sG2XtU?SB?NapE;xG!|P=pas(mW{>;yQ{PB3_cT4@o(a2S6h#8uc^$FwK^TQW|_m;Y!qs z4wwO{1PaLzGO4FoFl#;@7y&3yg!Lq}g26x}fOConiktwFK}nCM1PSR(oQHZsct>G6`-IZ&W@L~JjL~>W%>=HH` zONQ3mnI5(9BJSr%ia0Pl20RA;09F40BJHpIRKoG?J=37*S4p(1xgUDzH{IRxBip;? z6#y(i73+{c1CDnuQ^?+`C2CyNTS;b!VIcUNvOWhCw%lr^oUO*XhPIbanZPX#Oy-ea zoiS>vtG~2T_ycnDC<0YrM9hL)Y9XWRIItIqd)3nO>}zp(H}`H-mj=i zTe9T&$Ebhqxlx!9G0n`ml>C2F$SsA-I;dYi=se1|yw;#wO)SRemeIHbD=0M}0YjAG zxU%xNkHBkc^ndp?`FD}p9_EI&F1xt~>q>=Sq+Axrg7Bw2fyQddzE-8aCq*l2(i?=n zGDCg7(#@tQZrWf%TC(8WZNtp1=pst%F(#2*N88(_afxf=z`lLUM>Id!#QAN;;>syUe&BU8_W3pPR^dSdDE3)cYJU$ZP^KV?c2TT zS+#7128AC^r&ZM@Eow4Y`HnbuBcB%X!PcKLn2UFOYFIZH_P2nyVW^5jE6BIFynr*i z76gsGl6A2aVj~#ab8huiuB-F^07G56Ua!p({{SWZO-;@6BGvoa0`6Z*-t}SRE6`lK zZZ%rA&PI!7tRS3t`|d=vd2NlAYO7hqKfu+T*57Npxx2WZw`+@NKJN3zyG3ouVl^t; zO-7(eEdb+}b?w>tSDF;Q^U7^sa)~QWxHZb#+$&zVr_{B1P0J5)fV8_+k_!-2k!*rS za!8zWDzv!A1Ff~-VV5}0BbMY|{`T9j+bOrPy|}n-Hsf-({ae?~i(v@Z+Y$Bo7>r#O z-!!aSysmxit-f0QPgG-D?V8EGV&(0|&F>L!YRU)(+zofxTU;&5gv&_)n8#EoPyGt# zZ8XwWFFa1iV|!(K^Vt^nJAvqI@2i!uXG?1W_(?5tRGk3En8RwZ%Mqj=C#l@ME|U6I zOmCCgZT5E(?&o)Repgf7doB&NyLx}Oq=->%Vjx!>)m5dXw)hBv+q44Pwtz|&Hq4RIn6*r{q5&!=D^Bt5Ci-$4 zbxWm%l`L%*Cspe<<$XYvWKi!UFp_4trR7nFky-M&Qjr^(X0(?VXx6VX>1%0r*;|$h z`BGTO2=HhkCb+@bMm{4_w(nJLXZ_0)ZSCF+*L^!^gGGlA>Z{*Sjj4#z09Ilc!PGt@ z7Pqc$&`E*W8OKi3_Zhq$F<+h8dMa=@;i>;OL<+F4aywxZ1FG(D%(7&_IO;<=!#Mm1ICP_$yAAoy69DzR2HL12hF5F9suCXsWVG~hweE? z^{y*ew&jpA6>_(2R0U!h2DQ>@)2(r@FP2x#>8({7Yb)YNw=UXo7i~N1w$D}|T+;yz zN~(j@M49+ucxqCz<%X~wi^kQq32+TWqIrayT7hw(g9jy9{PA0=s@>&LO;>nVcYeK; zLVY!1a#2s#3|mH0y;v<)Vn#EW)VSqvxEANPX4y8~iUzl)+pePM2!ezkpfMB}CNaT; z=1YCs*L^Qq+ZM7eHLU@^xUHoB0Bx;;SXl@)202V(Q*F5#Ni@66Z*#jEP1p4kQ6}NI z#Hll-SO5ev0Ahy_+j>l$m5Fe?rHA?}VTi3C06?eUPWu4T^IHsT!4G6$5Oul%_MG2a0;?b2~i8qJaPuthHpLE^z zceVQ=zuCKEhP!RM_uLEnL&))+tFu0x+k9ToYqmH2)5zLlcH2v28-MXz3 zcl^9x#&jQ1)ot|qPW!fmm(BMs{{ZVSeOLPx>{nxZ5!jq3x1Qec*0^pHjYD|cxW@M* z%kn#voDslYO{GMym|VVm*BIv{0|%x&-DiJ@0{Y^GwohMme-}NwVTa>?JX?Onsb+f#dnOKX;)`}A<65Adb)~-IY>Aj0cRTLc5PI%+o$JU*id``c&%H-6&)yVR864|xs z5AHMiOSiLf=(a|dW8{QW)YYJ8jP~91v`1teJ4&xzJ4`uu``asK-N&?jK>Lfk%l7S+ zYhptky6G1#L4yFAbiui_w>+9I(l<9N4dxf)_>6zPzOVjuwYR*sb>8*EDl$%=S8r^Q z0oj2B%y?rL(x`JC(Z|HW?pOTupNS!_cU{|VTJ75^{;^fJ{nA|(6sx=GT!I{dE%7W2}R2eh^Mm%QiE!^$jiZ<*>Lp8{kKAWkTNlN`5=xg=TRKb?3nD`!l{Xb0b!IEL-dwoeqF!e86yLjSfC~jx(`{YHP$rOIMm45tjVos5;%E0Q z8r5xXE~rbFZ#wC=(pN=Pd9?!|nd=zr*hZS(CM! zC9oJ~~4$yA<+n7#2b8^?IW4E~FUQ4<+6)SGi@z%_3jly8vyltY2)L^%jd79>) z1=ps&?IJR0E^pti8-9UND#@kU0pTc zwfx+)c%PZ%IzLXP-4`MM<%xglLY{tZDVawZ z!L_n(ZY|qOR|*?VVVt*F){MG>q0cCvhA_7TwEZXg8Fdy<3sXO_+ToVliwk8gC}0uj z&XEE1YO4dN3J;uPTCQ45WZ`>>S{XHaaIWSW+Nc0Ayy&fYmf0Fm>Xj0}$^QV$7gtxS zQtb z-uvIX1)*Z+arZ6DD`=+KYjVc}!tKBI+Z#oQ3axPYt{i*krgR%#ozwlLo!e&5xBDaU z{{UF^P0v&6UgMRsR@GN`Z_M5bKnGcpd=6`sK=ih7&cZtVGOD#+Y1TXiH7GVMGC1&&qJ)^(nX%v`|F+{{S4?(8VC>A|+X)#ZM zpfLt;M=EisrM4qoImBcDiJ3K^6P_Vj(SoXz&k~r#l4;i{ipZ>Ifwt7PScUX}V88-O z{7J8f1YstY7@AD2W2A#0i4&jW;fqdNWHrixCNnZmLlu+pt{PCG6RP4Nf;@zPq!$2J zNEHG`P&!u)D3*qj;s>f2FsLhypdu*8;MG<|TA$ z5L02LeM9;&`2j@@26W|J7gC(G%fON!3q{;kAn8O-Lsd|Xa zTgpU81#3YBihMpeXmwn8$k(Vxl=)@=n3)k?kvIx<;wdC8U?~}h$R7x%cqfV{ylY)% zxf&mVBjHaN!r~9=8!lRUK@doTkR5z*P9P>80cJXhl0gxq45mRdokkOKC!z45CVKoZJUALn_z~Qjg-Vj6R;XA6fK3NX z@K2SdLtbcj8o7Aeb}m4+Bv@%Z6s;$2iJLw>6;TNS~Hqfrr8wqf(L=S{r(nWYKQ%0%%Q9cwHJH;84$mA9pS+qf%sv?!>ei&~$l=7q-in@G)p?uB+ zvq3fZd@zNW`H^lt#!xN9H9k|+5+;DuVQb(u+aQr~771d}G=}d;HREujF+rq~!$<@JLPXTJ{y49YDNj5@1r?)JSQDkzfYLfC~z@Nr)j+2UI5w7cG zQmhopk1)?7LiG3?6C@_o<03Hx!%jp@=Uj$RCUCq&wfPNQ$x5^xVj_~WUn~(&FrI@_ zt2HA6LkYS_lccdED+$y|B7zPAlW!|V0+s+BD(R?&e5g-AY6hOC2k1A1*-YVB7!p({ zp_QcxFbVM^z~B;>RNkXnX4?YFfV{kl5NRM+^z^`IWqxF}Kp|Ud#bl~T8ILIy3y>xo zKaLZAWV=d;eWL+W%30VE^YPVK$_L?!&&Y2cXT&$T4y;*1fJtwuhfMO-@aQnGmPu4m zkiC0VRS;M85i&HG(H;jm#ysyK%80<4{-9@2w*VRnP#XEMy!(mG1nR27I4#_$W7$3ZY+&b@F0kh5g8V4C-2L z+VYZ16#yKR2PE~M14zbi2xX$~*do5Q)(lRgo_a>11R})Xc5Nj13UF9&ZFDn0)uV-<$dA90Ltc8U~&qgIn6Mx6-MBo!WF2*_eIaK!X6-R{cSVz&X(bh$I7 z6|11SsG5P(@x@*9JQJhAi|;lz+Tm)cK+MjRQ6?iw=B9t;jM7>?OHK0RwA|VXn2Aj% zN=VW{$We>gq`79H0Y>B~S0#h58wOiI8~vGkc)6VnO*0MdzehYYe_Ea$QBTU~BTivgT31w`@le2Jc~X zdTLf#Rf%u}F$c=Jln|l1(+aDVM|kUfS9xx|wO}-xN-o_~rbM9?s<5u5XvHk)p?a31 zwRHg8P!K6F577^%0GM$HI-CYpX}l4iZdsjYNYmw!A(f2Vu4?10f1VJD8%_5k!!@nX z8NS`|cWpR(ceY!b+k1xLGFiPg0Lu)rJx5$pwU&**npV|J8>_Z{ z*)8evi8r)BFuRKiu9nAH4oRrTQtNjThu!!CQlVhzUfTPu?Opm?Ug_aCd?VbqZSHQY zFYor=vlw6kg}%1P1ms{;|X4)FK}JO#qM34XxrM}S{Kw6 z00*&fqpJz61Z9qubkwaNA|*el%+Zmhtvg8u-dF(8Sc5%V-ZhAG*#18FZ3J8jhgXn+dI zmMnj#%@7DVp96z)9%&z{ zu{6U@94!E^NPvwRs?uac&YXdT6r_QkE1K-C~tW;#;@fYwF83#g4G z0p)0rGzx0#@Hk@P3nEC?41iV%h!avEgP-GrQ7w79L2F_O6B$C2m(uz}4=Jqmz&DgL zrHKS;^34boIfg7x)I|r50$Pjne~bb^6*B;p5~Q;eInXG|y>J3fd8JDm&0TNVd zB#P5Ax_n{|5Upmdg^{sr)&!^#8cb?pWtnF`4~`Qqi^`bMK@BjbNS4hH(loE>V0>WL z2rBuMv5{}mRw+JKVC2Ie4QxrJa_fhw7MeAd<-pr11yzH|DnnCM1jN@!oaYF(_$^5H z5R)WIz|}HJk_?120ikLu70SrI{tiqTw2DpGEw16`F@kWc9Jo=PY zN|7%}X@wvX08mIEk(rDH?lsBWTr30W(2~Fqt4fI^1KW_@zHAz)M&|sPh011*xXuL~sqJ z1I$dYX+B1Y6G;u>J{Uz29ve+U1xc9B=TgL+jAwxfsUw>}y$K{ihCX5(ND(Fh11`9! zz(ipY?x` Zb-rWyLm@&XDv0zp|IkO3#BH;Cw)-*royY`{`;Eu; z)mx!-K_HJSbQ66MFEQa;l))rkzt0ZDFJdAWTffX^xI2ahWsCm6BNbL@@xcjR4S5+6bCu zL5(j}tl$iR5x^A$tc4N;l?Db{j;ExW;uy<@-J8=BC+Z}PFw7t|OHb4Y84L&s$>#;N zjWI2m1k*^=VCH-&h690hc?>m3Il=-*UV?uNJbZwV6bN3Z1+_UuNBz$g(qwpI0C^D= z*G)?-YH6exZ>9l*k?W1&S!Xy9@~USD%qSIsFi?4dy$LKU2N<}R;4#3uRGQrLP{{(2 zbg>|0Crot00MH`ImL!%@Bnqg(?BEvZK%}*O91qlh|@_l`C+@Zp@(ox>ZqtB zq4NDC%FRbcp!m}nYq{Wqh-Hi{1q@h#Xkl`p83i6Nai9mOL`0cwBPkO?MpWxeI=q1E zNsThZk^uk`MAtD%#+J=wLZaKzoRGvQ1nMLj>aIlM7O*hP0vN_>#GbP=mPh>tH4tn- zodK#KHbm)(rASf?oFTU*Etk7;+FMy`+CqUfcp`uUQs2Phm2C70S+EUF+8X+}_)82RJOZEUL6U)3a9+|EbZLA3#79Z(~s)=2oSowY%Ys*G;m3=rl2%2M>v~xTV+^+)Wq_G4rKcz$fC#=aJ5OGaTf+X5z2)??a86cX0B#$UD zLnepE8D=5GjFTZofE2-z(@KyiNX@H_R+1r~FlL4oG%7(3Ez$t_is67^7h5-(2@RQG z1xWf&L*tyBM?5%rL*an5GXbk5CrpM01QMWuLVu1X)^QP#DbO{wWdUTg>MiBfG9Up) zZkPq2G%9mqGopY5Vrtm7OhN~20EPZf0L`=zy`An3YpZR0*@>S3TO<9{x~DEKnX&qU}S|e zDzsw8i~usg7^YOhQN~GXTs{MVNNNSHLnsCbBdY!#aO)1rG!wH<7#c>2DrI#NOM>eZ z3>f4}x3G)>b6oNh{ zB2Fz{{iVP6E9C7EAS|GhA!d>dYXrt6w`VU?0l*-FRH-^aA|xE3;Q=6l0jPQ!esFwD zVUL9H6nQ{kM^3qX3=a>>2)A1#=NKt`xfup%0Vh1^fYWUyP~=JQiW5pr0qAM`@X4mS zVgPj-O9Lmv#PmK84p>6n;A+i*J0EmAg2S_|u5Y$B8`~)4dT+Ypw>K)6nK*J(1!(D5BB1J!M10~-7%|;)LpOwF(tZR15r9#^ zEk;4oL4Z_7p%E1|0|20K-3$!~WdJbBN$F0$7)uxkB-xKjT1h8R2lUpo5g+M@e^xZm z0G~7ur^?WORdblAq@R`>s3n?ZJm0%1-LrAEJ=tVG3W`GHN@*qefDd_?;75*4a)i~k=tA3kWx*Dr>9@zsX zS3_)w6v>V<=4r0f!ABDd_Py;|?d{hPmrEYs?ha>+L~5IM7j^5{w!pyvCE9e18;)AC z;)_$wXkS~CV~s_N1q6HzL4Zj74l^#wS1QzU+gHpB5e!F39}z=78DW&0c($Q4L@5MJ zG0!@mlwc;-P}dOz3g*ClM9JtN10Fa=1PiWN;K$T-jDm@una2BS6qTS_n5bh>I(*e2 z{xT|Y7FFhrFar#H@WVg?XP^XE_?&2yRYD4+tN@_WPG|GVaH^bSVwzT9RF#jEv<|1o z4Ouq`W42q&b0bk7@+ajnjIXTl7P=B#tPY_eKmwp2A0Ow1U4BdwX1Vtc*|IxRm_if% zpSpPWy6^)Xw)7pX%R#1rn&2e-F{aNpS80~+pNHgZg272pAgv_Cfzgk`F*dE8n_Nvb z$!Op6d{-T+=KGP@?bS#HZ|-fW1_V$sVr$S-7g}2NRckOVYSy`CF89}_L6Tjvh z9XdF@j_Uf%Oq-<<3K*fB@k?nZtTA(@{J9vp-2LMAcUQQc%5=AC!{4&}zW(0bulj0O zi*_vQC5XrpC&vP=+QWQvktb`lTBu#&_U-QU?*12H&fn)YTrS&_wr-}=i`k3UY^A%6 zX{}woxH0O7Ls*fCw=EwkS??+>n%U)krR)CyfLk5JT;+K#UzlJHq}=ar+pJ ziTIerb6IGV6sb8-WE_8O@LXlJO`j34vI7>?=q<~#$IYtk!0$8GaVgr)ZsgOIB(SDS z{3u;26;MuzzJ~1J3kOAD->!>cy#f>DQXF)Xw`t^Lnt*Oemx+?a>C_J zw)H1-SneUgEC5nbWH-ftgZTJhGtHuu`yPQ1y+HH9df+V5`G*=f4N`Ajo@ zyT$94!3RahwX4Kic3FvqT4M{<((v&P4H8f-yQ~J5I!!u*oiY^^#JJ!li4qb;dK~2S zmaY``>McP{T8WTBm=u*KtbZBBJ9%MiBb6QFr2_#5q9Dx(oT-HXNli4Lz~%E2D>!@x z5jr2F{CW{Ir7EFIocf zse(uY9X%^aT9r-h;kCkhOt<-Nt9{HmC{{S(udsVsOco*mW z3}y$o-AZ(g7PD_V6P z2Q$;h0+=zom}^99e&gf6acHp9Sc4HH z%n_@nN}T@y3_&0eG6a$Qs%c)B04bO;{aGHMe0oM2aOLPcCE_FqI%rOQT%+W1r#hGy zi9|@Lq3S#bSR)R~R06{SzfP!uNQg6B$iqqy`^1A;6gl{?6#OZGFc5B&3jl*B@{I7B zOi&QGvH+?1e6r|d95~^?BZ)!G2{1&HNf90~)^RO9Wf~3Y<3U7*_#E;%&-``7y4qxr z_RNXrs3rOYa<3T2re)LSta0V&54 zv@o9}3I3_6KY_wdIF{<)0YHPMKnh7}*Ti+MpN=bD@?Yi*79;|({J}p+CoNb)78EE8 zGgwmu08K0N!TJM;pYjo9H3}K%4MC9v46B4R@Yiuhpbw1BuC)ZrR17uV4dy`9NX&@M zrl-J9$Ki(GXJ`luT-18h=0Sm+$Pu0-8q9@NCbT9A%1H5yj0`aXz?n1D#cE{!Bw?j2 zBq^CBDSF7507P{##|4yl6|c;o0iY%(2%m(GkVQTiLVEWGIzW|>Gs+?ao}w@aRVH&a zCZuOH5%U-X5HtnJ1LYr2PLoc!1`#mQCN+Iu2n5r|+u*&({G66 zKq8qyGoSpiCAEftl9Mz92#SD5{&;%mLh^lFM36egYJcjaj4~U`fkc@Zd2^VFn6FcT zm05G(2m}y7%9@}N5Pn(C2b3z!Z7pC&VL?igKcP`p; zWY_i^9$66?NMAS10VcR)WjH8m)kX#d0S15qW2H>t4_6(6c)-p)vp^%RRiBO+l5aru zfRN4Rr43+^U&UBa2|(8_+fCl>&9t{|W-M5cBmgHI z+q>$u=G}f=#|b(%wyk?|?Wt>1$KSXQ@?qTF=YN#!ueLpdTC#QRH-6}IJ5s{q00qzf z3h@_gs=3l&T)e3g2va!qp1;@Wwz)cI=a~5($?4vQxzxUXqsvo*Z#TT1`}~(Vy}NLSEG}PXHtuV0C88Bp00T}vLeH)B4cOV4oc`H8pY8Nr z1rxW|!yVfE{{Xq@XSM$TZM=sdyKB46fbGr%s$99TOXAln$m$-U_4oR8Y&O@A)Cnc3 z6l2?cFWdW2_qX$YGy5LD*80@9O3yM+!5)NmkG5UA+I(f3_pEIAULMW02-**;d6@Zs zZ?ttcce}gqUsc0DfDke5bm_LbS|zs&^JlGZ^&7j*w)5O>z8keUj^sgV&fjs{9lvxV zKc0J!owXrDzU2P^_%m;C3RhbSK*o*PThGH^nS?!C!M;0VviR;7X1g9gWp8O=Us(#H z)VldS%lAZ^*NDxfgyBRuZ^#h_(c}1(0^X~2Jplbgz&%XTMh9M2+F)gyZZ$%gm0al) z0K}1BF~L`5gtY@H+U!s&%D^B%p%myvK^U9LwsjLl^2X3dl~w^204)zrlN0#jL|tuI zfu%2Ob-L)&-r6(UbfRLdX6Y)6aXHAwG2%@1MtRHneAc}REhyJGnw(2 z>M*A`0SVIN5X4Z^Eku)+Q(m|MCh&@Nc2*fv%0Y;zi0EmGtBXs}KSGgo=c>#(!4w1%51L1gSaao$GBlgeL}qXrixDD~AoL_eR{^3?QR(nKVEBS70QJw~ zgk}1bqzMWFogmZ+Ihp)U0jappX}>BPxmf4g*x=8P#&46-5a&VnOIAKtCJ+5Ryv~9s^Vvh%#fROaM1w zSpyQPx|%=)okq2iOcF4>1gDwKf%=3#k|IEfB7AB1c;X%SK~Pe&F!KRQKr>kDnHB4b z(M!=G3#2d-A_z1zCVmFF;w;sk7|N3@unEXC=Sb>0VykWp1T$D@$V38Uid1JzMcgn1 zmH|lf06VHkRjbGU04jfg(@J0f{H~(3h?40Z0hv9$(S5kUHfHF1eMCGPB;vLpJN=cRu z;NG(!<95s~J@5|p_+zTZ-Kx7(iW}F*)IUg%9C%++>R#jj0FSjP;$Q50H==YZjdi_6 zaG#Za@AfSFeU;WhZo&&&bPx^J(*gv*&5In5TyUyCroTt#dF$_0T5jiYldNo!E|<8* z^DR*nLa75cKdgww*J)MrJhCsk?Owud%ZYM4(g6K23P8<-)Q^QRrV@R|3Y=D~jdtLI z5nPB6Ko4A%YX?cjcf6>F29%?iEw=)jg+Ugi%wh2Gl&Pfqa&6Lh2)NR7o@+Pr4hDEz&U6C)US<=Ov`lP5pxg!^RQ?khY(;o?LkL1$a2Exic3eC0r@Tbcwd zneoIpnU%`_05bgCs#lqOenppkdr-WWOKZ5YjHOYw_K|1<#4N;99J`yghg)MGf?ej@ zYRRoI_?VUZ`+&$*Y^IQBaCAkRU;-J%$tfnXOujiR?6SCgXRz#wH4Vx!4r`D%Ze3EU z*6uEpBEGYL3o~BRHjs}r!KDT~e*WdHZV+~K`)O4*Gx{3mmF2eftqWTX$EI0sCieO| zuB5jj>TL)x-EGTQ+Z_R% zCzEOl>ix#7$!ZChB;$_Cm$F%oCy`%sZmHqIgBagznNZqmsef7h#l5Dz2T+eK>xAeE zz6(hhr?a@CA2nYCRl8Z{czPIbFR;13w_@A6+qn8sJyWl7aaouPmr~hMsP8He)S!?s zS7E!P*D19(R@$9Wk6Phc#n!vOx(%_nn>MVM^b#d@_7JQvw{vhcTm;UXbUM|v;uL6Q zZRMul)g;}eqqNwY-@dZjTNkc1n?6Ogz2340-d;9Nj}q6 zZ@F-rgbcTWJ-B&IPioUJ4QU@ePdZ8Pt~xg8(!g4Zkdcpad)sSiQ)zJRuWKgDBSB9$ zo6b}&l?@B}q|ZzXWv4nXkH{6H8kQ~Q_jz#|=Ho-E!dNIMkeXF3+E{znl9I=%&l@Vh zlT4AqTx<639p&;%S{CBc+IDrhs4_Y;18wg{nFNrd<%0OHGtkd*XB;#xtTx*lD%MqO zz0sh6NO60hwg@5Z1v3!_F^g@v?IW4l!_>tu@^%w-e#?ioxfYvN;aDWM~MpHHTBYL+qZ2O6ac9;YjIvYTjQ+@B)06GWX^ZM5ASSpWpG^+yy(9H;-#6zwgrhLlt zW!hU>_UTYjpDDlel7`eZ>>07mNSXw#-muD9J zJ7kvf5H&i-PK4tenx#4ru5J+l0q(F>XaI(PKB1(@m5z~ zp-WYY=#4|Dg0-3)Iy$#E(At}P`QfQ!+4one>utFmmCg3n=qkwJY~8dgZSL%@{{Y;z zaRHDdqr^lR#M-aw+i;}s+uBJsmOJ%dGZp0TCd8ZjYqvKRT3>H{UISYM+P8Sw*3o-W z()P(D9I1_}=MU-l$#r;F@g z*X0M*@3KC~_7AeXjoY5x`*quvJ9oACUA3o63KjSKhW7e@?)lDtd_cR&^E{o&y?*`kU1Ww)ZarCBL<34>yzz38b1T zfFu#u9$K%K?$0v2FnCbx@_~Sou4isJClu$8m6$ zWKF@*ZJ8D{E#Sa}1+!tEG2ElFOJ>vD{{X4evXxu=i6`CT*lCV;k-uTDz57>G0`~4( zDA#s26gG>7<-{ahX3{{4DbKDscQ+kv=BuB`_8y;QZq_Q+KOexXM$`!q&WI*LPqt?=S3`Z?lBm`d96? zf&dF?4ZEuDJYWzb5caClhYn6H-lqF@^ToUjZ$n`YzNwP$Z?Zf-B%W!vr5XG<~N zT`6S{M8waAF4(J&s!80f>k*qi1}DGwGuw{VYl~}fz3(n%8Hen+J-Yt@wks?IH+gOP zrHi%~CiIcoM9x@szuA1(epiU?_~2bSZT-yG%A;5M8k@Vl?(d#X-s5k`mZVUssi$(nIJxc4^+y}sdgr%PKzU3V{O1TBY9y3jS=v^35!RdCwwGTz^< zYU;H%KF@&Kz57nPdv@&tTT3|$AtAwV6-wPS>snJ2YTI#2!Q=NjhViQ}>Bl=k7OaH? zF5M7Zv{{{iRS2uDJg3ZlqI9gBXsX|qs#b<8a<*{(qhW9!!h7l7dK0q!pZ61-ed#Y} zbiK34YJG%aw4X2*I!KQcN%+Jes1%hchx;NreE)F(LWje4#@U{ z{9*U^F82Aad^@j&>`psz{nqWi+_|^z&iHTvl)1WAPTJrvJ3xO?x2&L1G3I)2ZraLs zpDOPB{0|B09`Wg^Pqoq2+Vigi)*ov7;@pqkZ&?1DDe3L)iY>8^Wa+wIpQK-JW~oBgiRhhosdav%xzE&HwZU*k#Z_2_ z(Gww8%L+aq$uy`K>(fJnhj`|dSYbh0W_$pQsew3YvTyW?nUYj0lM28ABc%Y!aaz1_ zD1KmoO*8)hkA@Ydaw^P2D?wsO>Ed#n$P+MQ@W86u&Vbrlh7=G?Na|;(B!NgHJZTDa zB6Sv#MT1Js3?B;RisJ%_&`=hpgT-g`=N0iIJVjonw2%O-!HR)B zbz*a?5}qXnI%Sw-6_f~!=B8=kja8IFBKXrr#e14m1(t8qIZuq4GA9jMteURTqT*sr zRFX)OBdD51a9OObCab$Z6Hs=71PKBp5GgYx6DQ}4;#LX20L8@xi4g$Id5nYOg$-bp zS1IrtE+D=_G6aJLV!dcE<1lIiF{mWN03t~>icH5$Q*JOPpe*YEqU9Q^6rP#MI9v!- zbCR_&WYl#6U>^*sas~zj;YR_#qz7v7JFe0=*5-U%SOhmM? zsYxf|FwfFJ0F3f8kpO%!q^k+~i4g_?j+@4M7CqgUHL=6*P~D=mmTPn8K1~bQtwP zB#8s@F*z2bnIC|{%!5&sRjGeeNZBmy+AL8Q)6Kl$ObJEpPz zBMjw07fO#X1et=f3cttUgS?*s8PZg!l?6aE^ol_0Se#SWxM^Y-+=>i<%z{Q_(1L0} z>7D}R=rqKzkJ1_-u^IT~Fh7P3Mw-*O7I+XSqi@@}80ph7`U6N>n{i(Pmh3ax4IdRT&Zh&-vg5hs(hY zl1Tbh^+9bw2o;0WMgd)|7N}^pod5s;CI(L7(a)x0Hb)h#<<0#YB-vKk~y< zuLA4LtBBNLWDQ!OjUFPkfTO~m7;rZ;+%O9Zfx`y078=+AjDs4(Oo$yioG08Todvsk zSOMk-q)aUQdRGR5hL%R@sFepfl22Zl)Cusy;#URQ03u0}L5k!eObE;z5|*QD2_cKD zzIHl*SOO=?CUo?Y!wF|YCIZ|nTU4K`PE{EJ0>2r^VU0LsHuTNeIWUHTKmfoMGD}bJ z!RGlIDR9JcjsR7bRVx(+21K5sa7#@u@g8sswv_@D<&@5nGMd38=bk8Ja%-qWX&_Pv zkzTPwl-C0Rw4XPWiIP0j=q76b;U+1>pdG-4Efe)=Bk7Ve_#Do7T+*dz3$wV6?rI~* z2CaPv4LOw=(wlxfGmU9do#zaTzK2if}BoCeyTjH`Bh)$IA0i+m)8NmR^6csav z#LG3ec#eqHg35pmGV`}mvl0kD3@&BO4LI;MPaWe|G@}8gfDIt|SOR5*4E4n*jCKrc zytx4irC1d+B}9PP5&Uoo=qOD@S4>1jK_p1j4M-D!V@BBqjIVKZd7>e6AV-X1c~sB& z0U@FEFfc8s)(jCOL?|(ySWd0EP8lgYfil3Vfz?d;fB;NVCk}6xmoJh1SaKS%nIQ{W@l%C^PGcj^Iy;67;3QEv%PiEOdriO$zua6I$b*u$;XS zJV;GyT)-e}VoB;rBzZucD97Q~8vQ9*YVbYgyPF<&R*;tfGQ=GLb5LOE1E9;M6<;IHqg~~fakm~{ z?iZFS7^yHQ!bt+S9(X`#SugBu+%8SAtmej`5f#&sBpgQ=dI~4N$9Ei6p!Y5%ioB%U zEPB&S=_CMY)~6L5*YXteriG6G03W7c5C|H6w|yj;h^qAbF-p8`h!Jeu?24wQZ!iN$ zgQ=vGAPNW_aV<+HDynrYx3;LNJfP`nft0bM5Pp(RLs=M?SHK>0(6H{dCFIjl9+?VR z71U%&T%2|5OeIvc)Sg^tQrO&Tw8EJ{#V$h~Q`D9#tITOaMj@u0EeWqOedUvP$34PW z+69M}Raj`Y#zg8e#1ei$Vyjt3#j@`nO0WS)A<#6EMwqXf0+SU3Da5v(5SnbY?zror zR?xPZ;$eXjtiD#Xb1FcsWE?_GH##z>5x}rq*!ot(n?)5tP{u;RET%w^bg|6*@v3s6 zyb1`Puw5b2OFxt;Wj5A&2=bV38ennDg73>(sCi^J*(;W}rrNblwqV*z3KCif4H@Jy zF9uxLm6F`sKTc%;{aV!O3pp;Y>k%~&1`yM2OHf2>Fg~(i77kR9PDQnSGDqitYgv7x z2rgK3yJ+39ctZ>OcQ$XSA^{Ezl~Is6;+Er8aNmdaHGHwm^frHNd(G}oYbT?#?k(l* zs<>3y@+AJXKRp~rITt81lo%9)+^@~vG>``cdg`(53l+VTC%V`IA16}B9z z-{W@%?be9@0Nf&}V)TH=9aY?=)YYgbnX7WN{7tcKuY_B>ZN>9Hme$e;(U zNCkXxDLp#}B#jEk$jZ}FN1CEQBcN}>xVp`)+yf6`jExe&!n;-&k1zrvpwMNCBxLQN zuo`Dcs{xtnV2T6q!H^nz6R0tepthk92ZH|q)LW((Gl{B@Bl>zkVxdTg1gRi{F$2bF z*8;TY15ALDC>uy=f#ob@0YfV%=Ug>u#}Zm{`x+Z-V!A=00I4xLOpu`DD_*A*hT2e= zEUR$L4M`;VfK~@HAbyY|#|$QBqim*)0thsgnh7y7en+kWSvZBPjT8|@3P_-4AnMFi zK$GyM5f^ghJfK*4i6j^%Yb3KsgAjj&3DgTp*%pIqe4Gfl!&n(>Kv84Gl(F+EGSW<*wCFGp_Ny?4SOOSCpgv>fmCPv90G(v` z)20Act(<&dWx}Wq%GCm~DX0TNqs&i2YfJ_B=tp~Q&`GbAm>JMPk2Ie!AP)-R%p8#0 zggCdf4K>ikLJ+_KB*-7A=kOQ{+Hr3YZfQ`%OsWAOvHDm6EhZS4r^MkSposD1{@J4i z6XmI(Fb<&+iUJk$as*Oj%8^h>5fu{6)PD>y5SbVmpE~(jg$2NR6A;82gA#Cz?(+*m zE2yN$>kJ6ZJV+ivC#PH{ReY`&(;P^q860UOhyzF{Sja0NL4b4c!ZaEyRj7ql6{>{; z`+=uatA9KKBHU0Zp-`AA(=Z4+YvK(=U;-lt4pqF>Sz{oEP`d6Rl1l<&I^vWtE!%|* z?JUDd)Ln*~erc7imSvOta4R4!o6XIgj>`V)ad6tPw%gs@UVTBCELgT(pvI(KN&q6J zam&AdwYK*=2VB{I)5PUoJ)fE8xh_uVR&Dn3=HydSg=ST>B$CRikg?-jc!hO)bKk_? z+NHr8`?mH>659G|DhsJ36d|;vNF~%MqU9#I>gMN4+!6<7)^tYY;fJ6P z`BDT36QoIKcSg-(q7NE>b%+od^F_yU)S}unHKp~k(Rv?10Q70`kfkfv(CV-(7 zI)b2(7C{8mEJyU8cbO=7q|`L}qGS+yfsY-#(*3_O%}uLr zWtKJoJUkjTw3$GPQcF+!YVy9M;tt3VBw7*-%K5AgLqGC!}Cid;nEX z?Wkr2;tK%*bXFh}C5K#7vQ>^g0v%bm<-FjAR%B%@9%>xsNvGq9#3shGps3BIkgj@w zC+j2_nfS#HW-%^Snt)#f%5Uj^iZ>?yb4=dQKWf`0%VB>fPi&r zEldeQfDoyp$76U_mkCmL;cEk&mEqLa>S%Wzz;lRtNyIMs>vNfE~62sVuMzh}Brg zhR74}#*HjK08tDSXq^xjC}O!Byuw8>89*|Kqf;m#A0%~!$k37_2m%_2^)3%PA1F3GC) zx%>y5o#3v>;FznK2Y1 zu}phfZ9+x>)&T=agWzMN0hTr~)RwA1QJ5eTCX+n~5=8zuizM>RQsqKD!y!(S`h(77 z&@Q8tP7>yIm8p{4aV9C=`wN_xXm>8bPMepwjoygNJ%u-vgIOa*F!q{zs>$MDb+qm$ zz>(RUkNc--_RjoQA00cD${wEt2aUx|uT%H3=kUM42RIJtxN* z8&xXS5b0ud2+jfj0Hlh2c==JKZnK{830q$rI_dSXH4Xp@fdBy3ECYjPadSDo;Oh_=( zN_dJ7$Y+2*LC|07B0v;uppVnwLFw?r6fOX2H6R^Qy1pklGmwnF7$v37 z`Bq@$Wd8sxMY5oli7j!2>0sZhOhip0d;q|b#OwV6NX40h15Yv2Kxz!rtkV|&FwD)= z=QB*YkAc82mnM@?4vgRt)F1e!49)~L#1I1zYZNsE7@v)BEV+!0D9R@6$RLI?sQOl- zOo=}QlZSYigR7wy$m5Z*Yh;({X&nc;VmZt6CJB zYPMWfrp-nq5J)mJ9tWpNVbN455&! zKoAj$b_BIfa79GW(vga7)+n?Le86x*g9Hk&fhM)`nCXW{FTDthcYC(7g|{1BZjTH`|^gw>B5=*=GH^zWaKgv)m@)%cD1^Y+N@jiscy5Uu$hBUT=*B8@7IE zOum2c7XI*R=X2mOjGprO{7GD^i*1(;r(*W5#F1}? z+h4e#x39hRH+M{(QX2a)QwQ+H{nvG?8r!VT6DQj3?AZd|-p#8Bpg^>XYydy>z{I;G zxtVyX!ofJOVo*U{F!BDfkaWm0 zNtlEA(1AD%hRJDdKoHXr`e=UxO5h$iYBY?j4P?OrBpD#r}NZMQbgY?rM% zusuP?7V5X$wRa^sI=0&6O=%oS$cWx(B+ptBNu@fBVPxxuTOVRH$&dsQC&a)XEFxB+ zco7qoKZKGZZ~%28g!H7q%c;!Z0!6HWpD;2EcvKqvaZ5s$gUlzTLDXsESUqrxtTzC` zV>ue-)^ioh6A3kC+G)s`Mw0;6ku~|rt#I!ytq|<=aR)ek%WnHiVcPw>Z@7CChwpA< zx;wLs?EchFUw3PT+HqXRD`#KGo=?0x+qAik%;dYTuzQyGYhU9#vf6j=ZtkybwwCvH z?Dns?Eo^i4*4kVawKu3NxFCvS$iAa)oi{xbYjRWI?dUzXzb+rhruZ8t&#+uQDdL3+y(Do6$nJYMfFG||mY-MY75 z_b}&ydDIl0LQI&`O#DZ{4wHi1ur@{w7W+{=RlZ#GlpJAf&RvB&FS`Diz(=5(a zt!akyZv!Z4Jb6rKeY0Drz<|PFpOLS|B;u;!>ylPH4Kd!Gw{Lg1yo|brmkd18K@A$f zkV|wp=&P42iCE>6iaU$9uWfG{mw1)k-zBu;>3MREC;@&}+(d!>G< z(ors=pHo`F?!MUdOYCkgn{m$D?d_9T@A%uv`-^+KcACsP`Oc~8HAZr^`I*Pzb=kgm zHBFzX*57ix$~jsz-*j*mFYR|jXj0Q%QT^Mhjb#{ui|RWaPLHZ6L6ePkU)$Wm!)A7^ zTG9UiT<|V`XCCbCy`T3xb?rBEZ$E9>p5bzK?)K*D`?}ff&v3mqx3&r%63-dj_7nEk zqJwa@*wu;0?S8@a-?>NVy-WW9aR8V>SH`&zg07&3R+6 z-+q`;=3psRuAwLDB52jeAuTAG1~k;?CSqit37q1%Wa=w0AOI*ygYq39&`tmo$|6Ys zk|<_K=}Jr-3UxzC{DCE;h%+ZI3e@9N+(orv3*-zLAN){*P<}bk*Ay5Nq>Q{^$UpjL zDZum()KGpsL{#S<6zPbsnzJkzl!^!$2_VjYO?rO}H1iq&v^lW{Im;m#Wr_fR1d=`< zz<(h)1n{79S3(AyiLC~C*E5N=Q}G1#76DK}1Zgm4w1uQcQ=T$<#{tGCh%x3LmQf^% z$e8Pfl<_2?L*~egg*r(5aeRs-1OT-7kwR)fnE6ICQxb+z%qaaPR7sIJ)+7uG=6H@} z4(ie>(=sxyU=lN!_}~b_VwM>ZsbWMCBDvF{Kg$4=PILt6fMm5M4AM**^#yQvjmH7y zHsL^(IgmjW0%XtW!gKO2v{+?aVL{aROhVK~QJxaW?PpyEpG$d!1~l-}NtzC|#Z|e1 zI;UQ5nAl?)YDflZ1V>u=vOk6!QN~Qe0FZt~lz4Uezfm6yA*D0ifh3=%YCJQV80xY9 zm;@oWs1V1@!Usc?049eyz!TUs$)+=tZMW?`^7c$5uRC!k)Pm3SQ}Px*o3iwqpqO? z#sry&B62g=5&_#(G$t!Z%n$*CGaY^yapiBl7h3abILL~m1|Se~8Hk9GB58?{x+JAY z-6CWe@}C7*rd5!9aLmV)hJZ&%@qr#_BAq`R0J72_ND~^m#&I74X)}p=H>y?Bh-$_p zg0;xOIl!1CMiD|4Efs@49V4&L0&q>M&90Z&e;)2Nuq zx&b~0hr>J*k@7BC;{eG3f#p-zsgcm<7-UO`D^w9Nlnqmp3c&&iBd!6H-n_ zi;}nh0Jqw0QNE=FwID7$N2vO*Ptc~mtEDiU_nvE_^sVlu($_BE?c8|d?hkc)%lA9a zS?&*ZyNTC?8=qH>?CqV$*!G_Rw^jz%?e=<>&mp+8q>obWyRA|pK*yr>zOB`D(_NWv zen|H2m(zM)mu*_g9B2B;xP7noN0H~RS=e^(6gGP+O``t*A$r;J+73XyZP{TgHNpBr zT_Yhuj=xOw9p0wPcc@Rz+rY!E^{t(qxY>xq9mB z+)EEN-FuyOwwCp;{o9jtjDUfUd-VSROzHYOs;Az1uUG0jyU&)d$miqabvF~mSlV73 zUj@h6=lh1kD7|jT(ZKM9O9g&IbisxDi>#UR+?oi-lZvZFSCyO=*Ewe5?Z0hw?yYj% z{^_~iY#=Fe@@Uv`?o1necF_L-ZrZM|`-jfPvxM4dt7wGUct-Ez_)RNjeyIeo^9Wd7 zGD(nnj81ObdLmwam!X^Nc)$mg3YC}=3792fG{;;=mbrOgr-_v9HVmLDfh$5{26+=) zfu;*Ow=f0!ZL&}R38{gZiuH;NE^9MgSblfMQD5V4?ki3?iAS>-u=49!(K{M1340G=_3%DMG{-_P6 zDo&V#6k%G#;XSnzodO98Qk5NKNsULKkZJyy$w07BE2g9h)}lN6)IB60`tz~g|V7EnntU}j8}1RB(k4t)j?(`X=rOpz6trc;^fP66|_7NuN? zGH4`-nW&trfLf>A5FpIv1#2^$f<^%prD!5SkUkJ|IS^+7eC!jXRA(d!mJ%c#Uq9i7 zB=zlL2U8$K$C&sN^Al72Ff`Vr=^+MRC=dtg5imZQ5NUwYiE2;*7s>*GSc(z}tY_B< zS9y-W)<8Onipa`L)avOo{4mMTqZA~{#Y9Ly>z{@I{R-9z^5;y%il5ITfV7iRBN3

DX-qPmp}|TIn=YM9ktEmiz!uOm9dbEGiRm6V1ge@4 z5lE-NQ|Ix(K(x!OQoo)7_W%!+u_V?2_>)*YW`7I@jYt8cggJdguSh09tck!bT85$| z6Z3#TsXjTA{4fQy6fl_)9}f^j$6NxcPbEp|K}i&mS{l*@0+mwGT7?os49St#^Z9sS z8Abr85g@3OG|ImmC8jh06ziHmq-Bt%qClw!3<3}bl-I2Z%4SXg1Sn>gCRgd06mJOe z5%I*jEkGbg(xeaRoXD*p^#=sj*zE$M09mOSpBStUmNT+R!Wm66B8DamQnhLLVn7f} zP!bG))Pt2pb0gt^0uf4*PDe8U$p=j^01{fQKn*BBU`;$org#7%I>(y1nvCj5kwKS- zOaN2?Ptvgf{HR($uflK)O-uk9b1^~z{t>4OohXK~!}JTJ0|fa-XZd3*Ik)6AF}l1q z)|v{N?H-k~W(mse%E-34$6Ryo?$>IuKkhvj?ss%uCAyu&?4R0MW;^MsTrAr6F79q! zcLP&1Rf`H~U-ZX^uH92@=FdMf+g2+J2`mzhr+|E;AO#j8noe;{Sk-G)H9+2GO*XAF zd8bo=um{gMfr4eF#GX}W&hywq{j*$sKBI^_gM+6*1L;~35%^;pyvGx(ZSvJ=1h=;K zv_;l*Upb(ZBv()a>66nK-Q7e5QoXwrM~fre7cWTk?Oq2-3`d&an$$@H5S_1#G{OZbGuu+eSXzm@WaNa;r>&_Y{*jh5wbJuu4Qop-&VB?Jx&XNM zP%XDQt)sOjYqE)Y(7kS2p1e`*UBEh=3cINRdZEcO!_9Wfdh59T);)hrmXQDG>yRbS}>UTScjGW9c1)R_MN0CE%1yM0+T zskd^|Hk*1asUD$W46q44EONxRnFn;19%UCkKWAfSt8u*3wi;65+LvT|HeCbTzJl0t zw;IsZ1nDCx;iXp`&3GJp`?s~BHe0zZ)zNqN8;!@Wws3blRVo7QlIs5eX;R`4VCkUF zxnf;m&v0$-a@UtU)2saqFLTKTRlR*&G8KDvl@?sv)CJ4Tz*o;9Oe|Lzs#eY0wCuL+ zXqIwY)0?zx+*G)wZ9l7du4)06?vTn@5Lk$y9Wi{hs?Lb!wfV2jqcLtrn6&SAP4W`e z_cpAc(u^E~sTPDQm7zJrj5SHDeDD?X_oEfLy}7izdjA0K9UA7FmhGUFaDTX(g~~G{ zNUY<2TJm$rT=iZ>z_s!_lf44%ozV+@RNPx;g~YR~YbBk?5+XE=h9%P0a%XEsUZyv_ z7OiQz%W-bq(ze%Jmr7s z9Xe-R5TBVuXT;l`a>LZTo!TYesX-;J+_ufAtlK1Ak(QFPJ{Vk zMjGf1wPzFQDvF++F-=xxGbepos%oz>_;>t{%lj|;GVjm3?&Y<}ZwD>fKEd$&#s2`| zM|~o)Zab@gX5#wYr`Rs-ZMQq?*1=8RBWyj5l9B;8sJB|)?QQMm{MzuU@9*N5%)@`G z>H2-1ecz@r-t+lBFXfF-tIukEsO-OL`%8lCe#YQ9-rDUh+SuCI@mv=hw-&6~v1T;f z-CSjB`>sOaQrGtv8Lr=UC5a~(P2g4qFZi{VU>Uc}tZrQFJ17x;OmEQ9CzqE%*I!32tf%N<{ zrXM9@CBE;NmgT6k6W{n1>ZYq+h-*q@J;*B831}wSBx$C2Iadr1nZs7g;EQhV?%UNY z6xq5hy1mdzwhgtAZrLCPBd5-B&$~)1MqS|FW!>?WKM-qfca^v{uIGJr!`xM|ZrcD% zxsYKP=?tQE0ac`9hj!Mc-_-NN=6Rl*Yi`$vS+5ppe&^;li*VW&pZ&howRgF;y0?+; zD(KYqVJ_N08d#bVB-0!lyO*+u^!FZnq}$nslk?7+VsL70{{Sbu2S_+!Jg7il7DYIOKbY%UEmk$=uT0e7AD^I2K#`zUB;`>NcZR5KCoUhvx3sANVquGcr2GsW&Vq~nOr_T}4l)c_XU z+}4Fry)qw4`hi+m0W}N^NFyCItE$9veD(hTK-;ZexkSr5E4J;W=eET)8;q~!OQwh& zVL)w0xzJM^5xIA3Li$FxykqamHM?tZR06h$k4aPuZF1>+)tJx;5%I&sLnSzJNx8tT z&1`B9y52AZar=$!#%LFB>pU)asYjWwh%lN^S>3cb@ti?B8?)Fz6?Pp=J?jGUXTo%QfjkVhF z+ZA%kQPH>8FJ8HA)=ZSBG6prS-`UNjwTU#Y#^sh_ex-|d?-wz7Sn#|D7s1SO1v^7Kn4$RK(f!W=U)hxX}nWu&~ty6w%3AY8$Z`;p* zaq2$RZV-uho7ViEjnz?IOcCUdC=~(|vwXrn-K+6i7NiX}1?bI!_^QpA>e%$m@&eztmmvsU!UJGpnmNZELjorn@ zfQXAFv&Ou$!zT{z?JVCjj2+YLkJx{>e&hbzp6`^u?SE%(5pLSw^Bics-F&r&c6*7! z_O9aPv$nN*&;V~Yo|-9tDmFaNOX(Z?s&^MI*KZf#zjM`nN8CL>PTe-V*I$R?da>=t z+xN2G(WcJtWOgSTZ$=AI?CVDKST{E3f4trTyN%83tErTWmz|~nK0sOk89>K+s$Om< zijbuKq78NaHI5)V>;LPV0Cdl z<+b>6DVkc7COVFS2&|DK3-lU@#)TsgPMD|!A25TQ`JzTGXvw<7g3JW9NrRODj3|~u z84a(^G|UkMgFSMbS1L5Cc2ZF^=yb>GsT0v+n1_Zr%3YvpuZe(6noN*CmIVW48;hik ze@UnjDo#`3BLiMuVjQ;xdXfMKrga8n$^JM=&y<&k-ZacSqJ{~H^44qfgM{$l6O4_$ zOcUiKM0m|eZ2tf(A=|vEkll2gg#m*y4go7Tj1m1@q_mO(fj|V%GeqIQmmcA>bzp%; zlR4Fna$tC1NN%~tfS7_Cpq)eG*D1pn8~{ui5-S9Qon!MD2f%A4t3(uW0)|KwZ=XydMqp%;YM{i)GoE=ycwOVl%nV$)Q420J{*g3LSxq%yDk0Bk zmadqWG&xC-3>s<&$HxIXnkd#rU5=`gq{c>PJiNXb1nmzZo3bDR0M4*;p{I@jy_K{W zHkGSlh(RrfX zpByGba_4~E#~LN1nbZbmloJ3@&Kk=dZ8q^3XLF}0B|?Eh4t+9!e>_wotyJdR0+831YVBjtku z#yCM47%62?K_!cUBE4dI6X8rLgE`{XM0aT^Z27>FTu1@G8H^0Oydk14EwFVG<&-vn zJgFw27^g~BFkn~+!5ITaRr;Y|^ri52@4k;%=0i>$1CJGWql*U*~3J1>gc|>Wv4aT}w zGF1fq9SZ;}F^BpWT(07h;@dNIl=QTsgwynqF>p>3aIvh9=}=R;64wK}6Cw<(80cb? z{7xQ0IpUxjY|I9r#8rIxC=h08t0<2QWq9Uq+7Bn3pN0DwY}DjTSpkz79z8-`_=Ee#M)lxOtK zYA|7HOH$yahq$D!kbvrd1VD_3=i+cZ2IV2UtOE(s%Gn&60G#UrF`Z>MU-1=OsRBZM zAW5gyl9iYQ4JEO4PP*i6W=gW_<}@fw5z&bw%OFsJf=IQd674C35phJ zl^}@7FXxMDalji%WQlee7|`4-3s!(uV4e={l{6)VU=t)}F%xN)GS9l>)xo4PnJpx)l04Z!DgL;W z;|NVjYu#-vC8e~slxrc&RhgS0y8i%42PrZ6VX5LLj}p%Oea&E8D{f|lK_pCSk02!f z01DwXoDDMDcV<9!&fsdFIGCk?D)QMlk+w;XXG<_|){LqG(mr;tHEh9)gB z+R1J6LM&U}Ev_kKwk_T|bugV}mp@JfyMF^XR;ut|rZcH)+;QHj1iGGd2+B{AO?5Cd z2t-#o%Mje*C{Q?kxiR~Eb1mE9{Z=n^%IlM85Ne3IC}2NUagCncqf8CUUF0j<1S}Uk2nJC_Nn&Wsw4S~gIYHr;>zg^zZIzx%k5N(yqehZI0EvN^#ECd^M}3(< zRZ(W#sJP@3dKrq4C-A~@_0(?7>OpOt$OH?4U?sH#5&@bAh(I&yNjPH19S9qZtInX_ zbh!Wo)1=IKt_KSsj{|}ebJ%G-nEwD4G;F!o>Ra_2T&-lE)Kgl(RxHv8!_h**A@=tf zPi^MOx!e88%W>&uV``g|y4kb>gVx*b1>hE^%TOR?jaL5ZuOfb2enxzi=H}vb z4{m+e_b$k#uIk}-9PZUr2Hf%A{OsQi2_?M;H#V0wRFNR#t81*~T)UFdJg!^dZ|>Rq zf%dPu64kfl-?#U-K^})KYUb4o(6SB717)BPK_mt_9Cz(+Qq_F6T*Tj=tt6z}`%C8i zrM<@Q_WR2h0;*lx?k!)l<{E@Gw_q5l>QB!VS1H=L9dlW>EL;s2M=64rbgi#;-z8r)gBZ?TLMK8m?doI_2q8;pIz*C2TB|vHFzWLxPE$}Y_FM+d z*G@tMFM(qNQ7idk-I8f>lQyo}ZXA4u4ZSXW%rz(=MxwF(Kni8?t}bvDn_60j0J>$U z5W`Rfs2CqG0xKUrxDZ<2Rc$gybjSdsRLd<|qJ$}={0B@1QyF>;vKfWWvPsn^PDO#4 zZ;lzf^4A;$bOf5Ppac+T&>*OYCTSJV2ujw~$0*AwB*-xmL5Yfp=@4_K4NV4!3Pg>1 zNSFdt#R$$-Nx~-9SI4tkCY4o z+-+AJMhddlRaAW^>!~`kBUA$>56ECKuCekOxQ6I$ch( zIL1(UK7b}0`b|MB1RDIYE*Ii%oW2BBEZT!=QddgqxLyrOV1G$f{{V@_gS0q&Ry;_A z8Iv+*hanwARF)7x!x;^MQviyvfEpE+4xmj=qCf)y73I9UDRM+{s5A*0Nr|bGB)rC^ zCoh&0(5GJ6Yp{|PRJ#WN2dhzHBmyAju}E1gcFPSe_5cIe8X3CNSE*Ib!8stU0=^cZrjju2TR zOp&C4AjoAbo&*^NMC5YBI>vYmoVN7a3a&tEomH61pu(RD;X2tv?a%|WV^!C8a4n~q zOr1htl16dU6-3*Yq6MsXlFCc5W)c_5OaZ0?AprSv{Bc%E_8`%;QX>$pt5vYf31)^8 zNdgG^OvrAS&eHP9P_3q5oR;(~IhA2ldVo`_bRc;AaU}@)nLz-=4Ix`SO;)Jr1qV!9 zO|{LULwb)}1gseV$Rx%wj%`5XmW`IlCZCo?r7DU9z6P9sHIM^zH! z&_u3tm}#koGx9hq3oHp?RKXH_wUIT-1VqUmIJF5%5D1Sj%un=#AVlPAB4UDbzySuiq@=MGc%cD_8JZ9Zui=cNBM#z_qJvp*Sk?$=@`6mj&lO(5 z8Ak!b7tzRXhPz1fVQ3QLtdVdKeAexs9L)|qp2o_nR^m;Wmp#U2V-jG@8dMD`0>DV{ z6pVLOV>+fmZ!B4ukOavML0+KLDIl1|fgHSQ20X!x69AK1m4hG{_~M{LZUT)kLlU3} zhy+L|Bx)pAt{8WWs=y?OiJvKw2qGqcSH}n;e8E=)5hf`Rdi>zf3<<~vwHEJj`fMB(H#a)JPgII!OQYIomGBWVP<2|4yyM;9@(g^b;5*WxT>i`8k zFeLy<4yk22mSrLct3@2m$1<(+A1{sd%b_XnIZpLefh5j7FgWl>uU8&TRyfHH>S_ z`DchXITCd}Lo1TN0beTQ76_2XGIGGI`ME^0q!QBl2qv-^h?WfuKqsLz6`z(Jtm~i; z2Dg<-p#*}VqG+*@2Qi)+%8(GKq_>&%ODKl~0DQWnkzdCXbuA%^3DgL-SgOd4BUI-k zkQYvQ6XAk9+^ZNSM^#lp14@G=35`XKTc{$$?FhwgF_?wOGZN)lo${-NrJTmky3mjLHJ+-mrS)Qtbtjf1HuG&_;tos zN<}$KxNjn)0$NJOiUkCi)e>Se>xlhF#OX)_siCAq5`I1r`D5DKZ@|L3cZQ_upwu9E z4>1r1eFiC6B@CL?tw&21xnI=;3Ftq7HN~{Pr@))SavGAs13}hcWgtlqL{bOijNdZ6 zRmKTwUONQ8Wg6Z4Olfw_%MLWk#nfwLIO#gF>xxd*YS+;;Tds}wW8`bEX|9pl1CG4f zuJAn1F~Z$301dYB&9wjsfo+9FFa@|6CP=S`D2`O zS}t6UDWNA!upzuDN)gsD>j}#LcK<6NT=YcI(a1Lq)0GfdUE2az*A_gSR)U$H56G@Xar9L7l0=h;69LAy%4h$0j z0t94a868Xp(=$@XK%5%?K^U|F4DE%l{bs1K%Oiwaa<>C^Xjw6cN!pw>Vr-A-tPI!6X4*;@xx{Y87 zm>H2Kh5=kYF~k$WD{4xX%1tFjS0Eq>6F5(YWP{WztiYf`Cs8*w2qM2+c+&|kA^}J` zkiMxT0v5G3i4#%zVZ!VHO|}dqzz6D(TtS5lI-lc$d!>YfbIebeQy~>6A_i20`QeQT z>6n)bLqR4$0)%yve~tj2!d~7WL`l^P)DR$(;$s~5`rnB>OfvnOTOV{bSKiX1^S!OP z*#{(zdyR$lyo$aAqZl3-q@A|gTp6PJQ|xBNT0qiB$Qn*Yf_i*0nWvdzsCWeE03xtx zN%{DGV*xEfhdhF(n@B^ZdQ3?)f^ZbtnBp5nzcZ9YAc=Meqo^da1sEZ`Elgb7EW~+U z@a?`ZmELn)b*rcuy(QcW*O)1SJv$-TnoxDdwc4}rCfB8S9VFS?sL)ralU!77r_Goz&h&&5_Rn_if}U%=uX=40wBa@uwn(mXRouH> zzUlEWP8T(Q#bjKYk6UNBde^qSu7tk!&i9$VS)H%)+wIQfiGQhddV<(OI%$kc+;+zS zeVXyfnCy6-H;te6?mua<1OXduwX0x-0tBjqL5Q{&n<&v$Rbdx{bIS%=gXzqgc!5%J z9F6H8iBXv$+awYz6W2QB<;roc39c^K_#g#n&PHHV8dE&5(@nxOna=_HY)a8YPID%d zj}iX3%X8`_j=%~)12H}|`P9ZBoRIgM-G>#mzsT}C?VlU4+M_<}d%xXT+3fb}vUOkG zZeHD+LI+kDs@B#}v|xHkQ z!!6%R_3)x}1}u6EXtsA^QqawBZ7eG&`25Y#4N8^LdRC|NKhGF*MWg(U>#RSehhD$v zK3y?>JWa)q%mX6_=mHwnfd2pt=Lx37=Z2s?6vaL#uj81Q!|>F~>JbGQrPzoflSnhy zDqw0eDVe-zF0D&ZCLmWTW`CX}G++f_q*96?82$&Xdf*I5+Mzybl0l|WKOX~xHqKJ} zlk6_@<~yI+4|6*|vi3gb{{ZqM?yh&1<^8$eZ??Mw%~c_Zjci?rn0{{{SSX;-@K^SKmK1?jCVC-b%ymd4bz~o7!qyZ0`*;eQ`;@ZW6SugI zZq?6FavOdZWouwAUYK>=A4mI&z!hl`Oh;I^9{YQW8_Mrr=q;yPR#Tg0zUJJ)pGuP` zu|iA_3JT?)<&HL=cj9XM#{A*Vs>qcR8hkota5Y|BeM?c|Fgor82rD^A5+;yGiSfk9 zpmQq0f@9~DH_zpOM2j*qF+*6@^2}ka3R({X1hMKQfk`=K*AKwj%gf#=FaZ?Qa*n-Z zVDU16q7JHvl1MW%K|`DzV`UBst4Yf(J;mD{yWTuS?hCrOUN^WnZNuBUe~jfe$+_A+ z%M2dP&rO7_%Wf#Zf;@42?zUF0rj9I{T0B4L1l}Km;CpwCwZ!loKO4budrDZ?aXTwJ z9i_2NL|U?{uIH;6C#k}h3`If%ZmYNbe*WxOAV=-tXFfs`8 z=Rzl;hz6ja#|<=|LL~?REeb20I?shOoN3QgG^Ya081Old9<_+YN{Qeo7fmwq0!2ES z6Hd6EdVgwjV! z)<;RC$o@D_SYyz1D;NM10(uBN0U5++g&>o*Rzxx-NjVvb@|@58CSwd)Oh{-I%w^#w znfTy<3siYX(qcN1^D$Z+Ilu%eA%KySc%OiXfG~g%7#isS{Bn$-R%gS*00XV770yVh zgZgsoMW#}EdRu*4BCPI>juqznx;*iw!&B>^o8O(ZFp=~_}K zFogAlD=R1xBQq0_AQ?27B*qB`R<$cciSY9@9+duACxGF^@B`0IqOwoNUzd>>lk)v=q>}RY=P79)s#e^3`C-$(L4$X z88VOo2d1N(H^ca0k}8o{fHTTT0+IC3f4(A#8d(aR_G5{FgyvS8z*mwOwux|4I@|5 zd}qJ{F(!{Fj?6%;8o`P3)~CS9#h7V^4}j8ingc&6sK6mq07x@kF(7J@G9dV2GV0RQ zS}T^JUnzq@LG<;n;TSweGih2F=Klb=ZKdDZahA^^z7jnPFfCb-B<{BjHf?E$Du3A9p?Z_Se{s&%4X_r#r>=XK(GpuFsFOh}-T)=@PcK z9AGy$e5UJg^z~T@n$tXS^*wIaPMxdI-zq;*@ zYwdDA+WU2QwVlTL+cI~ra99pUsegTK_3-wH5*EvPghY;D)$cKeY;_D_Tu@vOpslP znT+w^`d*W*^)2OVsoH-SJl5|208i4<(weS3PeXmD`(nAeJ5E=-OKu%KD`RHNEbVs0 zNJ$7z-rc=K1E*EzGd(fx-3Op;^zLm`vyS)1PgCo?S>F7#Zw&M&wY|RKdq^ax zj@tycwg$jW=IhNqmcwR%IBSg5Z3gQIjX3sdt*xcXk>KrlS?xCu2ilzPaatDr4aaKs z-RPaNl^p*7E}E#@o4}vhZSM3?eL^#gH5-_-h28s!)>ofHdv^C{?0B7~-(kmWZEW_I zRaI?UN%bxd`SAk!Dvk-}j2janU$Sp z78#dqIIx96DAKiJ6nVu*Spcaxg=D0<;X#q@c0%2B#6>iWvOOt7`QlxyF%;_< zGP|UfQB`h&V8N{+sqlbsaT|#M23c~|9b~C0OmiI8L%3(Nf6B-LeNbKIn6u{02QtfK&aM0T|mT%BopxX z;3X;ZJy_zEK4owEW-{y7<$!5IfdOJ_oX~Wbz-k_4z5*NhhJ_2GUo;a`;LglKY14B{-XPF@9iM!=f z-U2fMG7&47tb7Md@e0d|7zAo{GbTVZ@tr0|Q6H8ixpJ@p76K?t#Z1&zk<$dq&Y(CB zQgSruG^c<9Fn|(hvy=i>vs|(QpkM(`j)zIkl{xi}r}My{6auLco~Atsj-3HC7+?!M zGBqN-B#e##31opiK#|fwJ~+x+v*7!Cy9SWefX>W{buzisNPqz9O#qB0trLheOPfMA z>v^P$HUdof_fklTjW#Wj=CA8C@EGFW>Umct-)^Uu={-4FtS9XETxrz) zW^yCWO(wB8;Iy|k%Y)4Au2suSRd7U$c3`oJlT#5UlT#!}{4ljxDs3q~-w|5CVn|az zOoBws2>?fq6w5}{!6w$tV^5~CVA2hI7~}}~*Aet-^D8OLz^!3y>ML*RfE(&#CZY_C zMc%1uRbo=Mm?2$81SY6gAZgPCkWE0Dr^g)jm2G^lLuBj9v6Mr7DoZgb3>Q-Qa?T3C zm=vXOB%xX1H-V{sRg&MhOU-g^0i|WtTmaM_Ld2aqo@uKYS=!Dk!?f0%l&o4gpT-Mg zZmr)U)7*h<{{V1mlxEwU7O7- zZHx#dfb&58S$Jcca@L4yYR%PZ{L2=ETd(WCtyRj0Dj3@VkE9fTX-g7d{{SrTug$qg zSf9|fKtDM8o>)TBw zSk%|twaxllx_~aP?keqV5Xd#e+}}S^!1+{WO>xYvczB%S`o6=nZPi&$izY3(-!HBn z-M>$Fw^Um@jq4DWu8k()^a_;IY)RBXB%hWo?pDv0!n`FXO^W428q)!SAsmE4=-@xl?f6wvd1L-L&&s{^5{3Yl%}CW39RF<3zLEW4yO3V|}?c?Hxx?sdDqVwQ+;6 zlrqHLK><}@9OnkF3kJL($2lwP8Ek?S-3-K9BHAUpLZCAkVg^IU7b-N6NXBn(h)bo> zA&CLjE-+8~Y7D}w0hV>}&l=LIig=cnlyO)w<+E5bTV_MOcPmO(lc~8DgrNo?n@& zZ8+kLb9>BNHp#Vd)KJ|ka33F?r?tsidtD}(HQ2ZHS$*x@!kzuP^(#_hP?8;Ihzi(`%BIL(R_+U+)W6p?Pq#Jg3l zG_w*;Jhw^HeX6Rj7UNUYy+^CJQD?ch{L>xZfwp!w?Ybh6Jwhb1Toe?IO9o4mk2SSw zC774}PY1iqpEYzu=CJ6Siz4>k@T1G2OP1c>m?fx?BpTy*a?@*0Bqp7d%4L&ryS;Ah zw|fi)yJY&-^t$L{<+$Zxl|btg7|mYE&6Yo7Z?j7*J%3)}8}im)N;_G)NoH?Nj{jMS(o1)W#p{LWM?u#duH4Yu zmX=QXI@g(`;MKjsyK4gd`z>QrToye9xaW0t?bD>GvUH&iS`J`!$2T?Au^hjdC+}_$>-MLcN zntdy6H+-7!Uo6)m*pZ|HXBR5iZf(VOcN1IM*YL@KT;~^cu?kx8x&UjwtZ9Pei)d3x zI!F_$tz2WcrAEITN~=!%*7{6Oamyv$z2k5jj&8BjZJW~!2nB-^TVyGZjuN6-uB6I$ zo&}G4zuU4KsI2KA5(=}2Bgna^&<#Kt97f`8Lf~3%v2NdnVmt0;`D1HpzHzD++YsS{ z+XGV-Fhu!)p%}?+!{&Okb-S34Dj=rf{iEpEzo-yi?Y3w)E*A#l3xq+DF-Z}YDN##& zN!;94j9|OluPgH>-;#`?9W;`(#tYsKkRaLo}_<}~|m2Z&u zN1aW@>bA)csIY5oX$8YBs24H@G*ZCSo& zz{h`bwNUe8CF8am*A}hqY=*GRZVSOkSDHb*Po$a(!%PXryIW4R&Y#@zyUxu@(8GD} zb-kwT9o_A}H{JF(ypnFLZ8tn`53t=FIO^>m>TQ%rRIjo0R) z#~0 zLX{%trbgoR{aUVhfCEYSV`a+MGFa{<)~hQfaJ(wnwuLsqK{oEX!rCI_3kFy$s6g=0 zGRp(KX$`nCS8m%rK3i>RMZoArT7_|{y=B5_7L`)w)(JNFea+jpZ|+rh59zy+X6swGrsKmk?=%8I zp@UJD3$UB-PDi*m zHa2{A#NOSdyK8T0V%^>D?)uzlur1lzTD!X3-HFnOhH4A}j=F8y_KM~97=O&!+pE6q zlB(}J+uBdDKXW^SZ??bAZFZj6cJ-5T{f+U{=gvJl+w zZtbzPAGZ`D{d|<^!~Ti`o6NwOQzFW zFWlb`dgaD@mwiju80vSp+TEPgmSSa$XqGuI6@j@bZ<5dc({Gf;kJI>4q46frcOp#vnY znDK&V#%u8yDDoCwUc!}xu_$RI^_a}pKm2iO(TfpQ-l1nN07XDGh^&JZ{{WsWsX`LK zf*a~;4z$cfb;6XKJy|qzyTc2lXOOK=OyFk(;&o0tSVNo$KxAmih@*7^DhI#}Qkc%7 zcu)+lN{|G6O3gk8=Yv9H%gw-0C`kiTR$^<s|GajvzW)xD**Bbg&_ckU{dARF9rB zvrRPk289A9j5LX$AnKgSi8;@P93_>gg)b7hnWWYQB)7|_#}28a=ZiGu#Lfnokh+9{ zG7dz~`j5jCX4F9~PI#4Vj-5xT1Prpz<5>J~RjG%TEhHjLF(av9bC4#0W+|R2sX~ds z#E3PP1ezKgkKlS@9a`)*OE0hx;7KH|Mj!xMegiD9nj?|G=BW^WtId#)hfmK7LE8x~ zBNPrPBT#zCA$&=ZHN%{Djr|`YnTDd$Oe_=9JZ7*DOdcciP9g@`y7++~5%KvEhBBD+ z$`TAzOvz(k{BUU^(LWFbAOU|r(qzxzOySj~u7ssJ3_C8j9-&quhARa0kVPXB^=uVb zN=y19}ig}-b#y>wj-aI)kI+nOiFCqB4MJ|wpz z(i|Byk(7W0m>-E4GK4VtTk0$V)CE7QD1k;_<%Uv}@HAkVFyKfuuf}?qC$CIasJ&54 zN`dB$U`qiaa}r?Il@rqncodq^>PPhm4A)R3Hjs+iq!uGrO2u%o zA!zN8OA;CNd31;oC-KWE%cc+1D${-CdWrxwF#wv3j1SD<9g}%PQ*l|^6h#RpqFJ+p zQ%~oD913idV?kNWEo6+z(htZEw95$+oJ{r%vlW&iCL^cQKzhioDiI?>;V1;@k|l)v zCWrc?2YBNnZw*|GL5$i@UbJC`imKuZ5epJ2QVf|S;A6IoWtlG>X*K-=O4$5~ZySQA+>Su`W1FvgpR0gupVqL4r7)h3e!{{W@}>xCRfhy|pnQmRHq zlFd-Vq~Y*_EvsAxoJW}73`_z5f=5_1>To?8j6rKmC>Ycvm-3xNs)BscnPPJP08Bj= zO4SY)BuNmuXUt~3DVdBK8K=vFIb#RPr!@eOG|8rQ74gEH1+3!>13I5ioQa?sWC`$~ zm?sKKtCBJGP=lvag{w#qq>>b?3eSdkKSDWd@*^;i3j)H7>)^0SgVGFQQftCVWjmcM zqyno#L5Y#(HOOf{EK)9-fLSh`5WoP=W%|%W578Y472B#!I4yz{D=8oWT2u{EX*G%u z#{;%9XJwWJ!oU_9({QO@C=;oOh>@fL z62@^v3|=!18W@qE(GnxYraEPYYhR>R^zH@Gp^D2*VR8)u1z2HdPb*6~`G{@Xai&9^ zZy+>Y%Q*4CLc;7Ljn12f*dAgf4oEcS4CZ4jsfqspI9yR`7D}>Dn)BQd)BqfU zGXUf>{IP9Kd26Y9p|-f0DMA>@Ekh7zIQ^|$ z3=$M*Wq2fI)nG)i9b+$^6}g_BqRR0cTbi6I4P*nWPI+YHe^0|8a5y44YBtO2sUQtQ zIFMAI{@OAg7#b@H6m7DJBr1^;Lp9DSaH)#&y+tZg;s%8)rBrz`KS*FqlHVWWiVGz& zE5HUPK$bEfmW-iIP7VW0h{DUMEZ zEZu6m5b!bw_Zmr&Qmy(x{N_mOkj1RzVFv(CM6l92jYG;>W(hcds6NrFvaby+98Q?? z6QpMZNTzto^?cJLCoTxrtuB!*5D8E!SizG+LGzqdR6oFQo#%`YeI{jMRaKS=aj2Hm zY6uVt8LcsLQ6AzQC5RMi1)w5es*(WtbU4fH+E;M2B3-gvkY~mGe6RopJWeZe&aE^u z-FnyzMuNx`1OEV1wx9@}f+{g8*J@M-OLgmN!A6p%+UX)7lCdoWdE{r-Fe-C-o7W;O z*EX8fDhnB6Kv>h9mXH;EKO9|}s?c&-uGwX4zzPK{&rnsfIx1k0GBNH3n8<6=(=6rc4Pds1xvvKeZFzp_^HU#J1k!RgA-l zqMxcj0t_od0psC?jlDBsnudstvCzt)LV!z<1dT$YR!nPJQgM~0&RBCNp=`OwyQ30U zRKpqy>Ltih2-HP!b*-(Yh#gyUnP}YX5lI#G3qXPZ3nNO_04zH77)~Ns)Nmj^!L6&C znh9~HK$Y`0cM$z7pA7Jz3uE!9VnWYlYTf~}{9GRL^tr>g2x)3}T3 zXw(E-CK4P79%#;RJnN_^oakFGY(%j-$O`Jqq-k8(ya52$IIbl(ptM;ncQ#cjL+NX2 z8nb(1LowBqksx)$%UA*<@$z*ddQf#C{b)!EzfmzkHN?e|=2Pf(xa8`ztpZ6^ zQo7WYW>7&UW~0Xft(;iSPWFNAZj!TKPq8HH4<3xBYxOi zy4H~Zsxk#K%#2Es(x7Q^fK2~;#AgC}h#e&0zj<{=yvApd1GGDa;W7;KyV*&e%Nzn&fl2a?>keFd$#SdAr!KBk28+}&Qtd(*5cM;0o79VN7c)kA1l-n-%xA~2qC$ze{mj1_aYjbR| zKTs&_W`0C?W1(7eGAgcD3qtIh-QA$xy|!?KOB$0Th9W_jVI)-H>fsbgx5({pK)K|0 zkg^Qw5hwouQxQqddSSZTh))tww3k$sWO7N8tP2Afz=nvzNv9k|DY(ctEEv+Fq)(Va z)(nLcr~#HVPI25A)o>wPu!utyo}`*6fB*!{f=Thu4qCw%PnI&-7}#Z#NhAOXkZWC4 z6CZ)YlPafJvsg@w_L@q`(g~=5Dge_FAdaR?3_0R#t5oG7mPi_gQ$ivRkO-{m1jJ>A zF{W2qjYN;A2mnl-EGqzmmI0BOVnl#J1e7KUkY-LnqalQ6WcgKl0Cff!Y7#SO&rE8} zcz9t6Qpx;)YeA}N!2lXSlDV@)0A*tVUu`s}SR=im&^Dhb(m|=IgE{IWKA1>fZ!)x% z@)@|gkCbW=5MV1Bl@bjZPmORQoo4FKMIWgi=CYbuM3@YG%uaHoi5iE9@WWB^CECi| zuMhi?*$66RhVrcH8ekB574zz3W4n+u9lwTH7H%wnnU%w7msb=Z_U>wVRBc zP1dXBlXUi%9dSn9X5*bK!BMp_V+^H?X(3DzkeXuMd6cJ*!|);6G{ZNa6R~x*11#8B?YsS zAW-QfbvU&uSQ8OFTVVjvNthC*XhmuAG?Rr{jOqi*fmyUHyeKTqL=hl?Gv*W1<%X)N z`@oo~Mhu|pFr}0*C4hl3LQH(ImC~GX8hjWFZKuvomGY?(D&Wlr=^z816If5WKQJY! zRVq%IA6qoZW2jJ)e^3%4GR0LnkQ_7(NjgA*IejuS9Vv*k>i`m{AkIr!=nW$*hO9;+1~@^0w$6rtS&m03T_&?9 zr(8Vf0@M<})B0*gl4h}#c=+O~_yA-GQJWG$24a9g1wf;U0T{KQi4ZhtNX&x-YnZ6> z09rm6Fa^_v;@gtkGwwW_J1!dK$keXOUr0d%%|jw%EN|0nJ3e;2h?`r2)XuLxu&fjX zOJRkyAEYP%1CX6YK6vvAsbabiTb+wVAZi)3Qbj}4&rG~AX$WHD2AU`=Ru?sqLJas5 zOfUu}l1PZ35@*a3W&!>fq}l)&5gMpU(TU3?p1H;oasULCSPe-tC82uApNG#1Fakl9 z&_u{NiC7{D0<{@@a6aHEK?X82m^2J>k|;nua4x_fQS_N5sU(`|Y1N^6fHU~ug#cJN zeh$w0TK3vD+r-szpGx{~PzAO?Wr2}ek&bQNmYa(U%u;Jdp@OsTHaD8a+X%_(c3CPD>@sR|^yuO;qV%n!Y z1g%Jw1n1+1(^`Qc4yGZr=?04gt0@pfiIX{GXA{b%V<0@E$_QDTnpGI68kA-P0CbEn z9=52>asicts1fF%KU4#yVh$5Y>H-4HU-Uxh00m{$IV}Ar#~8dg7(rZI^B~gYM94Y- zQRJYcu|I|o+m|D{O1`Ou0Du9HtH2n8@#&2!p>sV12td!O1BLSC{{U@-d6>v!Co(DU z>w;$30nn;uRtlO4s3e?@UTjiLYmpH&TC~R6>hrd>mSzAFH7S5}fZvuED&gDkgxi8* zfiOS>63RiPVtz6sFUJ*$?*{lGYp8}HNs<&8Y6&2d@jW_VZahg}PIZC5IUp{W^9Cx$ zO=OzomRQc*)8>sC3V$)!5+L;P5(&;TjH!gy7Ic$k`3a{YTA-3SB-vc&lLxag-b@C?FLk zH4MP~qw&MFCC+3?d64R#so*fwMsTJn5`2C=Fr8N~E=?y^Yc9lQ*mozmycwsZ&TV;{ zHYlo_eqU%cIydT8y=cs2ai!|7O4;$LoH|`u%sQJrftcwA4qj!AQ2@?4?NwMsx+^(& zVrn4CsDoaaPe?OL;tZ=)+&{yJ@;e49Ndb*X1dv2ToX&W+%=mCNNmW7!0t*NcCnF$I zkxIZAZmA^GaxP~v-vtm$1vHVRNt#V&S2@HJ&iVOxNkqf~#%To2ROK_5%RBh%r&Ct<4KfUj|O zw(YxQ1ea5av?mWyZN+QL#Tgm`qPj;)fizMC5@`nsrr|9{!UTG6I7zMlz$vC!&wzsmsPUCghU0Tks)N(XA;~gd;yMG zygfw`t4^iQNevQaqLs!8H{v9-^EJP?JkG<2=6$;7@9#GDtZh4`xc%c?zKiJXc`cpm z8rs~Jg}kD)fsN?-X=SE`S=Ck5KQ=#kGK-$!_Sm}CHd~F)D{|cG9A?XLx&lxak{;21xk&^;uBmP;+-)0=~d-YK3h0_{S8V%^uS}727p)`Txi`NWXAbI@Bs!m^o z)(1+0GR8F416-A4TsI(eKUHR6O!xzeyhL#i(3s_5ig=MRFd{!3MI2c`)}RF@2vBAQ zno2Et&++Sxd6vK84kI8cg}DS40%QrSj+x=L4ps*dlt@r5hEPK(iulinGI5REy*LYA z;k{(dKxJwVhhO;0xTi>Jevmk0?&pZuZhPz4&fxbOw!5RfKHoT9$9J!}eXrZRe*2l) z9^l;Uw&Sw7zUSb$#{K6l!g2e>aBV8Oi-a=>7~f{AZtw0tEI9G+GU_Ux#*N#VejH6h z?GLja*L#`7ebzqL+Kw~Z?`!?W?rz<`?0v4|t{-1d8yi0zwuP2Y3ydrRJjG20st z{t;QVcWQvG$+pcNYTo1B-09VJ=kBXGeV9=H022CZ^wi(3?Q1(qino=AmnnR>_MVw` zA05u|eUsW8PjzoCa$V2G_SX%@_Xi1HsTGPDZo;00;5FOL4^u{{U7);5zir3eFUi z2@~U=fHeOA%fk;<;%B*{@h$iKtq4G)WiTW0f+HEHgD6r0WMrBUXb8wV0NID%22hrEOYUn%_dyR!y%fhIxhFUgLY6-+t!yRo#ar z+I_*!`(d=_cH8d$_Op-MceRng^4^}?nB*_^FD~fzIUTUuDOTFP;HywhN55-nUz>ij zUAI)9XK{w@*V|hz$=YQ{9~5`5+s4=1Za1(k@SfWDF5|hjn|@1?<+<(WCt>zH-Ol6Y zw|6(Zp5vC{A8)ffPU8ON<9}ssA}Gj4GwN-4O3@XpE;#WoX57x!vu}FQJT$?-ppXIZ z{2IM}M;sBr)NFwPjH?P|IZj<5{4hcRx)LcSdYTNPrz`{g2U;OSP>~)IemUR~Aqa{{ z8ANrQ>jX)~VJw$cmjpkb)da_c79+&;oJFk~Xl-w#NFtNt6gm8Ir^^%0`;42NSZ0Gw z3F(*9QJ=>NxpK`NQe4`I0ioq1|6GJ4A!x}6^ zVU5djYfk6j#q@9kIMPml0T2wePl2e$)N?VfXtmJe4{^I|al~?0Ic=WY8!oGBk+c8; z?UKeWD1$ewf=T#JJQuk=A8Xb9GTT;3?z(}O(Eq;>b``kGpg%cJoAhN$IsduAT0 zB0Z;4ZRk~PE*MlPA#^m<^%(ifs@YvG``O&AZc)SR!TSFIMZaC`rMpM3;Au|x;#+<$ zrMMo=B)AUOR{v&7(Rr%E4(&VF7bWO#&4~1JRdKz>sqhXe3{e&;JKxd zg~4%E(&GIti~}hI7$A&uJUAzW@C`u*Ptw@{O>!Ve>JBB9U1PMXkcvfR!JfH%qM~qW zH|4_6YC_VGbDpQb_@21AZ^}e*2Q$@XqH;bF*134$s;8Bp^az1jBPsCs9FI(Bv4JKK ztQiDlN=+t{5&UNo+g3SCUkBFa?$oL9i!*IjAAq0ra zt#W}(pjQk*bebQ9Yn1+21PRWWf?~5t`BIq1+O^(4&I|GgBckb52{Yx)XB04J`Qbra&8XlYs0Jzl z&Z4Gdj&6o-^GG=R82jp=u6}Kvc8z@k2 z0&>--%La4If8&C96zZDh;s=%M6k+;I7@Cp}LQWX~Xs^^~Jia;L0EG^b<_+ePksm&U zb-)0UB#eNeGn~YgF()hlI-nCjq-q*-AW!P>0|0@}fI@>tn$(zM)+Yc6P%$e2nKA&R z&=WmAI0jHtY{&vf>CS_$bp-U!08VF!k0gnJB*7U1V31E=h6o$8dX?%h@*OZGbyj1c zjJ#(GIE~v7QKFIJWR}czpD$0(43VY_^q!|PFiG$j0Z6$RpDkzxLI{|tulnI=RxLQ- z7N#oz)J$R3^GbWY$FI zQaVjA0O<2IPwId`GC^4oDrp!v4QAQxDab_;)sAFPg~CjBtY|g{tbhiFry~NQ36Nv1 z83V}+Az%TOCNt~cNsK0Gx5RA0xs(!32UU!^0hR@!Hu{(zptmJr9OOx0h z@;uic#Mz64j(rcXNHBG}+srH*T>pko<8;P7tCsFz#EDxpQH;=6jQVJ6pAO z7KQ8nzU6k?t;L>=yuToAlb}myS(@Rfm|0_M5_2bY{lV_HTU-2BwR~l+Cx%uwFL%c= zx0PXCS2#W`)L!IwEZJPRG*)Yfv?lW`q}yp|j%egL{kI!)f6sC|=D*29UFAEgxHtC3 z{MkTD`kT$ee%pxH+G9jbFeyw;w=nGSRE;UORgAOA@3{~1QN#B3^MBcX!g2O}!S2Pl z)_1+s?C;uq9pcSy=(gcC^IV496AXo|mJrRBJQrWy8X$?_kVKVKE0c}+l_Z`V#ASh_WVy6pl$XRavE)*1k{s{Me2I) zuhh3!B=WY;aoFhkZjWz7?34b#5_TW8p2G7z!nRW0#W?;Y%AmDw&D$3*J=alc)yvlZ z0QU~!v1-YHPnm$GJm05#cH67&@8>@+kMulWSL<-v+r?6PaqT@U_P5v$KenxHQ*W{L zH#RKWTg>TbJ-@46%iF{Sc9vMo+O|uP^%0MG={gOrjd@pxVm)7~>$i98^3=1WxUGex z-Hs=dWA6p4Rr_ z-p6p9uP=T1-h8U7Z*Rx#w#TY*n@5{_dux<|tj05~tIaP+)Kaw3o0pH_QApKp1d;;N zNtzf2vpq3Rs>{o$?^n2Hn@%ZI2!Syo1wiTunKMYs8C9g)vi`)ZEM=J{*N=b@sECk2 zCIx=1kNogj%Y$JJuQW-JZT6rj5zvxAg(LAjCOYB@(*@Nwz-gsN!m}b|f@Ux$+8HLL zvjPCArb25p9ci8g-aQG4WUojPK%|Py85K1cWRjNL01Zg$O$-|4;tmvX81NJF{Hq;) zSX%fEA=Og@r3sPNGanK$OF$h_)Pej!u2iV5C5U-IAOiuLtQr7M#G$}lp5w@Z~%TVW-0_yGBmDO08?zaM+P*XDE_JO9R+Z}b52=A zWMGjW38r{JEi!^CCPgXv2^avkZioK>Ja%zG>0Sip!dOrW_;kiwt<|Q2R8InHK7phO zgY=0e4QN4van9ViW%4MTm8Il83c!SeT~YjmVHvqfS_PP~p`oKlU;>}grYcNfnsTU~ zFgS{ev;YG_y(AejGckd-^)npLDh~me@GPy*30GlXFci>he?rUXH#G%^o_U<~N>1fgRrWC}q3qZKjX zI1oJ~Q96i`Nj0rS0n1RJoHIp5^AxBwW~$RXiI|@Z@C~NaEDZz;rmSLSG9a1*oj}4P zlEH>nfF#uB3Yi4>cwic%oaj@*BjP|NB0M0}8k{oHg$PYIHH{_|XOuyhBjY0oj(74M zfiN0JRW&2T1BMq%UL{V2@~ar>*T=3{L;iU{rkzJ4k<~O4BvfDop+M9dbPQPat$!boz%En}49YbEpftcgRZS-VI;f7p z-8ql|$Y+?#KN{d6CpZJt1dy^%loMDGPs<@(28vS7r2-g&V3Qyok^~?8Fbr2ANF)d# z16rR0BR>oPQ?O*!rf3OK&`(Ji0yqO~+bbbrKp-^bFejxZw8E6IB%wkan9h7u0VIDR znIq+fFj$RV6B8_Dqb)K(5j}e2E5znxV5?4kAejK>U`$dB{IMzW=mP51Mu?Cgfj@_g z;??n;LIG=#C88Pzk@*lOsQj@m&8T20cpgxipaCR+B*21vMkE0G8H*SOAwe1SJ}nVA z0B{8|HBrAas8%}pzcCm9rG;AghDL^BVwA35h6(J{0|&}lWEGHefz#q}Nl?CHYGf+_ zB$Wn5U}q-2ZyZN8XI3cJxNsRY0ziWxRG7p2i{>~CD<7n4089!I@g{Nu1GXhY1y=Ob ziFbLow?M}0iW_JlDbv+IsC)s(Cht+VSK9voBgpJ}Zua6TSB3(w~{-I&P0=r*iXfE!ZhtAe|r#HPV!L7DXcse$EREa{UZKp2@# z%M9q2Q3B%IxXM&8)FE^c5gLn#f;=%6b+ho$xph#!pNtsqC8RN6%)Xl#cb7ykVN?R7 zl22T5?!95W9lbM}`J!B4$KQ2vEw;Z>UW;zvXt{N&h0bn~`b7Z7Zuf|>(Os%L%4oLk z4fah8L$0NBpsEERA1(4c%8i&E6jvB-R?e{VnK~-=(v_lIe_{se;}LD{UUs#tA+m~6 zz*AddXI1CA*$kr`yNdN()_Cmr*Syx1PZdj=C%m%mH>tF~?B1QN7Qx*4^|I?|2&Gi2 zyZ-=4s2SH0ZO^y4-yO55tv1%?-e!0h-uIHZZtCj<+}s1E$z3MJhLRrPK4xZLp(vv~ za&GQfSyuROfxULCYI$(0$F#-wyR>Mu=oRjQ>h@yw`=WHNu&}n(R-$CiF}=B~%CX=& z)zd%Y-=UB1u5Irrw{H0LEd>ZS5J3TG+l#^k0%>hdXB_RvmUQj?&6~2%`1XH81mw3j z-qqcf&Mzaa!@0UF`fF~$U@x>WodD*-Bph?@ZduopZMRC>%E9^RQS^1539oNunJ>Ktjo2J?A_ak!m zSY6c2TFtG?vGmo>g}Jz7YN!AMARioYu4ef*+|Gw(9XUDd;yyn!7Ug%BEZW`K7wx9= zZRWhU52)U^)Kp#)*EcNrTUiP-rEp%Zm2K*aqULF(HGdc^TUX?4+fG57a+d-1ZY}M& zH|(yZQ+@W*>t@~Q0W}cDWWdF2-pMOVj{{xXQn%%+^8N-d+&qrJar>Rt+jDBo_hmOz z()HVQa^pc4H&+V~5LHorrjd)^+^x1=eAAB8O|8pEnaYok^);2f(`|O^aBenxWNUXW z1>8IS>7wVB=c34U8}2|51wKa{l;(8T%1=?dRcLPp0n7Im`+0cV+5xxS+hDdHN_q;j zH!j>7P1~S}F$O%i+LcO?U#Xn7wi8nm1TIUJ*xImd?Rg`*yMD)~eYYHa&M(xsKrFVe z+P%Blw%okH46a6EPByP5+&x@pg8s%Fw`yDR8tJXww(ot}9?-Z)_gr3r!mVtA0JW;9 zB9T%~Hf?kMW4)w2%DO~y*K);DY-A5eLIq5_LmlG9kiZ<+Hag5|`egB;%S zn}7x1T)JMja3d0=UDVnxU1Sph^umneA%)E3PMpi|Ef+U~a4kBe+nOAMXsJm;50n-X zSj>sYWrEi7&l4Kat4q-s{{SbvOJ(i>qs}!Yu-f2*sZ^3dd8z7S8CKIp+H_W_X~e=V z-*I`j7cQ;cY%MCf1EgEYwRC0&q!4=JMcT{mEqnezTMzxag;j&`- z9Z9YQWl)Ckg5KAWl|WW|N~)!cElCbl!wTzPms;aRx}KnvC|nCI?W#S+doEYi63Kd5 zY(PGx!c3CU)Wn>zqTJTHq)V*1A0C~w7TW17taQ94yJGUFBSf7gw8RfJaOaxX`eID8 zGPoG#>2~TaHI;Y0V)=C~E;O1g!Kjjf1f3vP1{;kHX<4>j3l;6<_qiiV1~)4{Rw~S) zOp&EnNn!;$ViR*UdF?jSFGAOIn6?)ByOcHnwjC}l#5Wm$8cTu#1CrO_jcHmsrlXsP z^8CHV3(NBMt=&tHd2d@IQ!b#abhC+Bh7J$)W(HYfRY-AF=6?v@sWh7~9#6QUhVcEGb;JqOGl=J zL`2ETaoe@G6;-yYU&n`lTHkLe$A5|Ihxq>h{{R|1*S$Nw3*Ha7ejkwFy{}i=a^17- zuJvwgxnFRU=-h1iUhTDSM(2#|*SQ5YurKloM!goNSB&23Kjm5MblKXR+fS1IyiHoK zO<%dxrT3gV)&90$npkN1ne9%}+IHt3u-WmvUfW^C?QGcE?701{n>$^f9kJV|qqpPs zI|~T5?QN|hC`C{LpcwAywl?}&c~_Ue#PHouQ+}q-+m@Sf_~30Fw&5&ZfW=kqgKJVU zhAV6<0LRK4%}2u?Q)>0w+}0CMRr5Sf=H2Z@A5wq0a!t0*?UL72*}ZPyjm@WGz|;>> z1Zz;yA}BGeQp#+?c$kKgt*`&ET2`r}f`zTTF&Q+4Vc+NO=R^0|ccP`mCK~NpKwc%;4v1QO!+Y&83xlwlDT}-tDFAQ_;?<%=pOr0Gr)$LzC zQuzM>Lr8Kx<9P44Kr3HpBWtSRw_?q;)VD63UVB#+NE(UNGx&Jdy}9=}=O>l_0FO>Z z5WjO)cL#aivujc++f$z@7YOL04B*qkTd9}CXOQ#!Y4AnRLr*pZv zdH05iY}^+m-2VV@0xBTgC51?Xo*fqDan123J?^bYj2ITloe{pTDOhMWq0d1RQ zLuycJTU@{$F|Bgk;m^Y`OP5Y1la}TbZM{Y$TQY*sU>4=pAS)8TQ@LXbV2J#2aJ4{` zvAes48)#2T*h@ChNuq{Wa=~N~U!HhNm2o20hYc1rR%-_3$8`w7RRV#mpn%5VCrqEC zILO8_aMlX@tzmIQVaILlZNsJ4Tkh?0^4uq0oY5Gll28*qGlhuZB`wzNn1b7JcShaY zhQdCzDQZ}GEQ*FpT0Dz@yWt|$efLIFBNIeo4WxL%KrdtUFNqs?hTEHEg@8!kEb9jjjPk%^_HV=x8q-t$!k{b zCm)%}-Sh5GdH32c6}abb?YOH~mf~=nEzkCD9^Qw0mfv@F)~&}P-lNfOF;Yj;G26AZ zx3@@%?|+baY`I=L4QM!Xe7(24LnN!&k>1N4iR$(C!R&U4hpH(Jl+L+&Km;JDjt zjdPE71YTvf?SA#fGp6fa-J6ii!>RJD9=MgPS0i~{h{!fvQGKL$I_a*sZ5cKA=%^=?qq2%n>6QUdg>- z7&j&2#|viO=IM60*Fd*o)!S$;194l<>OeDTs5GudV--tk>hQ{|oHk^qh<3SCa_6US z)SGJJ;JU<}K9MECEBvPo(yo&7XBqD<>%uUwmrC5W>!54C%(p!dnq7^h1x2#V0+2k> zIL^1_X>JblUia8dx5XndH%o%oEGXTos)bcqxJ&_gP=V!uDPN8>w(j3E(3N~=SuXZC z3s<*j>;1G=^4+v=mb$U2n1UkNdt_!!J~$}Tx}4M##JvoY{fR8ucDG@d{@FLI=v8KO z{iL<6eyeunr!y0dzFN6asn5FGPIX@rbZ@jDZQkblsOf*Sdry_*xWjR_soWcdPB($G za@3v8?e}op}t)_HZF{{R!k_1>$}^r8LNzco5)$9vP{j^*s`!|V@lttQ{F`!}~cQqo!$y?!f?LCM`- zt+?f{`n-+%jAvULgH)5(9&2x<*xO0cwNQ^)-s-xZqR!j5vuw*+<-+dlS*EP+OFRG$ zWR@}bVau%tSpd(PrbzyPf1G1RrKi{- z!IanMnSl`0q?{*;!ZWrp!Lfp*+$>$BXcftX;m)7%3zvK3w8pM?!oF$}vvqOzon2KZYuCC>!E8sIe?s zpQKDuK{cnAGdRt;1saYQT7yaOGX}mC7#1|uncYWdio@#E2k9VIDe@j4o-`sD+=5;! z5Dc{_eo|+qCzn)6kh7*Kr~?9X%CUj3(ADF>ZJ0=qMPQO9xxgTSPvM84 zl)ZHu4&sv%JhB0g`oHSS3td5^@G^qptUC*Yv5SW|l0_(D4h(`&pgAHVVXh!;6fARZ z2oXPqSdrPnDM}R(z=0r=3=%#QAP@AwM?3BWkbhMG2Rg*T1cNo{i%}Da6|CH)pwJ^s zA2bj^_=z$ntYTkw1hA*PEq!$;lTgCH3g&8O3OEm$#6ZhDks3iIlz=r7egI`3!xSio zpe5o+G%yO0H2HY=;W*WeA*Z+(Gn{^zGDrXzh`<_n5e@5_^tO9rWfi7wB!aX{$NVRLXg8FpYy{jo$(vjFu|w9us@H1 zI5-2gW8))k-e3S7YG4D?;S|FaRHoR|I}IU-H1L@QK+1B$1eA)}1x0EObTKj}uuR|# ziRx+@0|A98BOukFGlwNrq%`dW5mqr2kg@%9K?C!gCRVzD#1bTFf_jn|flzuJ@T7;uGjZ8Nz|^5hEi2IZlnAMeBO*1cw#fAXsRo8dSx@Pq@WaRn z>H5O@&YE(>a)CdIlTLa-|(iuq^E0X+QFNnqFEQ&3ea#}$! z6p|-Y2`V~HF?j`oG%}VNh#*N6sDT2%Q2sdDlgdyUgcm9XsS0L%v8Z*L;Ipc)n??XJ z3AO;Pobhdx|u4J!{2P~A_vD;-;NC5d{>Hvt;DIfzT zzw^R+gn6cT0HLjeG3RI?jDrczU{Zkf!_*s5hBI?qkQP3o4Aa0c0$@PGSkNlv3anMt zRzT4@s7o{g%MDE{4R#DgddJ)sYGy0JD%&Nb5LY)Wq;|Lc45< z5_E}}rN9Xav$^v=$8GTPP=2m&Q8$aH^7|cNU2EcJ+1gx8aCHfu+C`s*&|b6==qvYLK5E!i#0yx~SCa{lcV(fCyuh zlc?z*mLke3nGZG~UfRW@DVZRe!muGgP$Y_);a1UP_>8iho1k~SC56&d=_g8=MNqi} zKb(wf%~ngzlSppn&Da77in5plY9FM`69*%V?CWTNwOzDu$ZfKa04f?8=_gY$3Y1RJ#h7;R#Q-}zB2p6^h+8S*r z@`*&x>MF|fKvzuU2*lARXeGE(S+49twCG!ts4tKS3fT#nGvSR^-CAkL>g7)o)415O zUC?a+t*h21w+#WBc>!OQMipu0%KqUJvRm%)pdDdVoM?k5SdvQ;q!eHyKOBZ3@}&#v z`27XT-bA~{HA{eomo|MF8Jg<>S=_R)B9xb0qL1--F%cQX)bgOFC z+L@;s+MLN+xSz-@xt0q{@ywoEX{_8}HHFg*6c5$XBurNkTIMGoi7rwgzZxTOPl!8}K)I?C8n4Uziq;9$8)PnmF<_)b?RY{c^Lnvqp(ySnu!nZU!xN0&DL&+QV ztdk1JTrm~NRy?ptO>ve{f{nG>m&T)2=43%)?6$RSF;LPKQE5U89I~bzTW$9e@svp7 z_k5oTyj}kQ2gveVKH*+}bH;A&?QUE%Pf%($ZyHXUizge?cXMwwcpI;lcpKNYe&s#Q z;LWw=AB^t}njJ6x=WOhG7e(@0QNG&gMrs{yZ5e2x80pyS+Ht(NnO|#~8gB;t?XS8Y zZ~1_>`8~Y?@O|XIiKoV;$?O*?CSpLbY!U-+U)O!FLsr zz3qzC)W{c<-&kNSuc(9)0a-l=aK}>u z!}wsXa*2){Nw)cYo!}M6q|6kO;DG``AVCq+#}wktA-0yJul>E{Q)$-VX=(DQkVqf` zGXj}(#9GZfK@s;WnL~Fh7W!9F%#{Q%kwZ!-Bgf~8aF=@(?CSBM7xwuxEEV#YVW7;* z6HQ`p^YRsKd+7;~p34BzpaYqpc_u`7h7|(16HiSA$m?lDHnJ-rCng4pvH+w5w?vh^Yi&1pY8axo%acHJa%`NK@t@Q&yiJ90Xp_r9m0yjRBPTR1#EW zsOlN&Z=QH&c5j~=j5^5-X%OW@0{~8;AS?>dc;TnmW}8o&iex*wyt-g0);yt024VmJ zwP_O=X55y1S1!0Ay6GeZE=dInK+vWJQ5v-7d@ve}&CxY&P)vYGB+U3KNDxK<0-;M0 zR8j!}LPUjT)V^ke`CtK+T~20Zr9{XSg?pcnvwnw5btK=Tq#GFFG) z7=i}v!s@oANroVW8bL5iG|*`y#+YfYX?hJL@xbMOczf2>%Zu9E4ao(Dh0Pz3_}5Mu&>oBVOmJW zK5EmM7kYV|P8Z~KcWiOy-j>h|GJ;eUDpUjgv@In}<<}cgf45%O{Z30|!Z!yUw&DCp-yqoHHfcp)*EZO9g+Tw53N}jRq>ul}a^G^vQIwXf3#7 zsE_Gd9XY5omp^8;X>jyxOIR=P8I$3A+9=YJ%YSoFu1+S^pD zYG>eE@9qgm6oS#HXIy}4)Dw-;5fQFP3fic`Sw}*rDKsR13@|E41~md8RtOW3222?v zEHDiL2LQ)FIKRsvf^q~wh^BKf(*uA7D$L4B@`B{A$4zKN0A?Uz0EGsU15cVmiYZgo zfsggT02ffCQz0w|m}y}Y1IkFi0EPvLAe9HK!KQs_B>p%jAUGVCQ3XUDBvgZ1$pVCq zxHy1PAd}?{sI^HdL;yg~%+d10dSD0~pBuE~teZF190IAh3I)r0K+$U_c~JSQUKGz)OiJL=Z>}Wu^%-W=JYYr95$5ua}iE1c*T-fO;4s&mJq(iHScv zO0BBoV~46Pucm|mV4Sm=1Ew`kA^viS>YhNd~%EO7-bFO>pqkGz(nlbWs8a@}UNm ztk7fG%mYuTFaVM|v51N58IQ{sw($H+=(zAJR;uWr(+9-lVj^*Jw0uWppApY1fF^@U zBvv!8$HN)9`-86#$Qm`kijqqhV+S=E0x>E1r-YTj)`*|&{_Is2UWYYpA2rTJA9lf$W3yo%vjoN>m)-VQA%cFl%+|}t~r{6L6B7^Pyvb6LnA33 z090d2YXr8|UV&;Y1d?VvC}O1Mv5B)y<3eW7=+GOEKouZcVthta%AfL_T^wgugF3g% z%fPK{$udXk0&52{W`+%M4K8Tl4a@lf>M>OWWS~hPmWstX91xz5Az7=G@=%tO1!4?> zK_r+N{{Re2P!?^xk}U#Ml6=w(hyWGwujDaK-JOsuzbfMc=40s*6(r0MekNobu_n8J zK&68OGhZ%QgWyMiIp74RmUQJDk^Mqpr>Kx8r&EBBw{kw_%3ra#vGw}fd$vdgYwBBM z^uQ)0&s<#`Su!1e$BC=`tlV9<*}F}h_6>K4wTPhkR}h*_uHw?j$Er%qogsw`$){epay$lZD=8n4BjG?i z1mVwMAQtRUF%2LEJ_Pv2QR7@G3=i54+L$mJe53}FR!OC3Cj)V)n@FT#>O)p)YGNnE z0%OAjjp#jk_S(v8dzP&t4SuEDs(@6;B1J$I!%EHfklI?9X7|6lOKEYff4%K4-?pBk z+1hK~T~!jWtF~7J&rI=LuZ{^@l$apf?~UI6-mVL^Iqp|j2HpGiZSlKDB$|u6rVLUJ zaBwuLrp*xdEb~=~D&zZ=$tI-R@EyDxPz`$J{!enKAcActrDRi8hf_G zgfX=2j%#|izu)`6nBBe5-nG6v(&KjFNIDkLx2o!&86?IhpOb=~!%C!_-Q>u)uWq|X zV`)L*t#0nKBb~=1a_1p+u8OV3H`&6KKP*MJEp0-ZY1^4B_L7kH8vX*AqQ}idCs2>M|#x6Z*2K!nL#i0BFZR1W*|yf7Mx~ z1Yt{~i~vEv2397J0GI}!FB~gT&N~1n48)LzLC$G3i1Et`dsr0(V5x0UBu7lYASsL6 zYw2(?^vQJqBQh#U_`$?k%kCwMqzQPd3T7xxet1&gCx-!z1hHnQF- zwL>|Z?(@4lpRzrU<++a0=Pq`p>yYj~&+VRXyccG92kg$+?oQ&_aUH|mHnzGhTNika zH+6F0xZtItHIWOBj-UO_)k`^+zYp8yCw@fkveIwxM>6*}wqN7hu{(DD@7!;32e`bg z{f*0(`-_tI7r1+)zB!%8?f(F=dw}Ek4neM1C(&R>1TZ?yc_xoxR#yog- zoU~gm-*(nc)`^`v@!WN<+6}()vG)G}*(u)}PT|;cEqk7R3uoQCkKOl0j>x&p?w_*P zxNn)dd0+MeWZV}f>d-WtbKbYE&fnaR`6|9=-!JxwI<}s}-P~IW%cbV>PO%Dq{Hc!U zI%%pPe;M)l^ucM2YbQvGVwH@)<$*Nx0L3UliJah!{{W620HZo%{{U1+fuYVZos`-U zo!9wrEmwdyAao>y5D6Mj`eNN$T-*$oZva7Q)d#5`FASn!*Afu45#EMGgDj&m2&pV< zIbrGvWTbgg0Xe}WKrjqI{{V@>5AX)R0~+s+*0I8922+P@|z4K={ge$V~A^PP{~eXZU7+ur!~<2m5j)7JRihTC zZX$4R3TKG%ELgx|0qfWEpA7LLDdc6Ic@lc$dV%4F14?v}ta-nrWF~NjAAs;#D&~+n z85REkNW+dH`VS}*n4;Eb2U!u}Ohw_i?kNugF#wq#hGVTDj8jumtE{~cq!Bq*l%yGw z1k~3N%VSj2&>t~?Pr|ej@%%9PF+4<+IUNF4I*NwMwSgUD3LF)Jr{Pl~1mr0+sm}?f zh_zdI6hlCXtepP<0~C+L0P30vfiXa>Fl0|kXOR(>0phDT1>vGg5G1#cK_r=^;W&Xe zj1ig)g$E%9OhB0#oaYG6Bx-Eo&BP~J?sgY7TLG?K+Id(Put`3Jv5^*uj~K_}{{YB--G6m@$4gYH z9(eH7{R7(Gt65zJSbkF=VwR#hI`j}4iy#9`WA}e(`qtN9(*FST z{pSAwuXd_3O=F(xh#yz`siTRP~{{ZD0FV9^XHj{Zv8ubLl3CO`Y5sVf@ z^?(a25Z(enG_O;hMG!{NU$r;29^76;a#|gBaLs3H$oYY9HpU1;9hmBT&0uZjGkOY`N81WD>E#hmT zQw~?uBG6EIU`o|BQF6`TMo0%c>(@Q9I|XCPn=0=JVXklg?WEUH1J zaG7*zY9U!@VWeuAKd5~(PNWR5<)w{8oZeQFD*&?sgqj2R2?BEm1h=VMoCF1cogslW zpTJZ^flMhxa@r?>ObAn?&ZCqMgn~y=h9L`3hL|LPIsxN2ZYLTDXsV4wu!@-L1W-uu z!WfbPm<9()@D+k8P8!rW6bhX6PC#WMh5?EkJG9z@u&2Bwf(VGy{0G83C-B6R4UIDh zfYbzn42-BuSE0fhk#!UxgQx>S1VjTvLQVm#WGz6{iTDZv#tF)!`Ct>*xL>V;snQ@5 zITjQE^fEt|7$w7q=wOnq^$8NNREYlopX6}0(52=2v;)+kAqY7L0GW#C)u##=-K!9X zEjEyKFf z$ca571Xg~izyL|o24ImS{HIClI79tJl17#~Kssn9U|c>&>&_HmNnJVg^SQ4XJpbMtr$B zE4%x*xck?9IS%{fEpm>RR_@ER`1ZSRwRoo$wd<4a%89l?dn@!^qhJRs`~!#QFz*Km$75vp4rlRHqOmm_u*W%`)Tb* zBgx&d#CFFFZ(dui{{X!Gz0XMnwe#FdDWo#1XL0<8smC`#={-+hXMNe_dL3K+Ue`^w z?3$SQe14~<9?Jc$Y;1ZQ*E_RYyZcu~m)`Cf+iat#vVfbLh78(0J6=x{*BqC+kKg^x4PuW;&yDSZpEaxZtpM3-FO1V+iPK2 z_N#Ho13=Vfq+{4sRXJ-@!@E0csj_&U(e57cw`qAR7rR5WfnQ66*)TlMGLtjOZfuo1 zOLr~Dkyx=4CmST^6CsUWhd}o4XY6>bt(}g;XJcoyvK3O!($d;MGcNjJnU7LQB=yE^ zy3ZVmvt#Tyg-t2|4!Ua*L*o+}eEe|^*_2JIIaUq{*f$lKhp7WK?Q_K4KN@c zlU|u%7_vwPJ~8k)XAnpj1w0B4q@Og9D@@@2s#6J>*=BeY2{LsL)c}gty-q3R<46+A zf|JxySO#E1ii43qJR?@sbr7ivW?-I`nw+zMa0H-|uyp6p(jtL`k}DZt7(`PbI+Hb@ z0Z0Z;0$W-z10mO#(n!=~N$Ug0rV%vPyh+tSC{$JekTVCb{y1ejB;ZdjmNz7d!OO&) zykfWpte%5X%(HFO00aVH3i!b2a1FGz4GMzQE&l*ibv;ST0IjA+0~x4+B07>!&LarT zR?omf0}~Pj1qq5D9PrIt1Sp{C1}gvwHR)U|bhG^mmZFg^sF08k?> za!e2){xjhNrUG4M$fbvt49SXR)_gDm!_OChmLgh4nFO^A%@~0KJPrbY01!1)86t!6 zCJu0EgIz#fK2QN7AmueZegZ}kNoW88Bu1%Pwy0SGVpeD;65pG-API>I!~(-T12dQ) zb*RNCwonSJK%Y#2U%|9-;+u zkrc#$juI;#B$Gk$n6HKaBZRo_8EzDUglSPM0W+(noB&CHAha2VQ>Q7;MC5P)I&}?A zq`3M=^!y{o3AD8tR?r3W2&}}JP)vbLq*pvQjYgJppkhS^WC%IZX)If|bD+sY9I=aTV^e1>KN4bEP_jq>K_veGAwv`L#&f`R zr0Aw}BwGaO(3hpf!gfmxsF#fiC6wv^0HzPX zh?5=_`Qlsh^DfX-aMuPf=A%*&0FYFeo`8}KX_g|^cFzM^`BWj6zTkw?05t?uyyq%p zEED`On{lp7TU=2U?f_1ght=m0bg&;#6EJEbGs60Kz?N|Y4a1czx}L}$W@RDNNRw`r zP-!uiBJHZ{4A*H((K*xl_?8{VA#4Jy*4cEC?1Spu{^JD$Y8;b5N|L}rDt}LoIkz{emR@m=Cq~}evx=;C_Za=n{k8_% zT)MWRUe%jLiDE!1%|m&QQeXj&Yi~Kr^8ROCcA8TOTM+*May{N+#mhGArJK93NwyRr zL1l`GTTDqMV0p-|g)sjB{+*Xk4(MI$hmQp zEE|_wNEcpmg9KA74(Zk3a;aOrA`s<&=ul+1UM-tik- zjE{EEYeUor)J@9R+yxDIs#{QQU%74rl5?QJZOygDP3qcQOiOvoZBot4JeMo})5i@r zcJ{AZ+-~mOyhBSl+J%KWpeqtJMQM!I?qTAXF0I<$RWG#EeaXJzt_>W1?{cVw5pMp^ z_U^Y7mK&s2y>V02s9ysosKT<_Uqh3ks>>|ao9*IVu=ksEZQTfCaz)K|SW%o1bqjWm zYg`poRe4D`{0F<w62qFb-F8whF$#QQYcls?Lbdq%xCa&XE%UNUkY%Rk!jA)juND z7E8P0{+ivm8O_#av^`6SZS?8{5u_m?egmcl-YwM>aiSn@%KCR2N%be`1wc|YTu`!g zp#+05TIG#)`Q0k}-Ye;^yoIRu)x?sJ6^YvD8GDU?Wj#WKJ@O+)<<*7OiNK zdampk(<<(Fmo2Hc>Z!6Bh20jd5(=1A8cPj7Bhcez^vfreD$fQtzDstV-;@*=9Ng55 z>hOYDG!0VBI#5O)yaiV4it#a>{`YBUrMqZ@(r;2pFxl$3LXyJe(qgg%V_5o9!~&(Y zWGg(5*rMMcTd)wQ9LdBrmhtk}+;WmpgX0)`FurcDPu=ImQ6^yY#?3aSxlEO| z>zR`m-t!xOPUvAbPK$w7;RwvgN}V79AX7S%gY7$4CC`^hX0+t{isIb8=`<-UMwULA zq-eUJE{lVq0tv>OTNbLv)u-lZRhW93>yqc)^@h5Dg4arqF!F(>7=f)+$#03Q{{WS5v9j9PUsLVwUCip*>A&Mf_fh`P#_F+Y_6YbiofK%7aSfd ztgiO%^Sx7hX2w+h!xGmoBiq$=Eih|`!sWTJH|P%+&#iI(S7adNe7G6OC9wq305 z?YL$|VSdni4{1~=mQt*agv8L3jZ(GiG;`zP5w}O@S^WD;TV1-It*d+O#f{apXS=c7 zl>wCwp?hz9`JD^`1#y+7Csf}u)iZdjYR;+CwSJ67%MPnzb{ zx8o?z2!Wv?^sH8(lW-)+vDmlDfuZEiOAb;G`<0TEePGTygv zOc+yKbM5bE&A}aur>`eE;_zsW<>wn}HK8{W+bi9;x{}?oc#!Hfu>ssD0D@@-nBv~L z+`Q4AOJc6xTS{h&?k?}Kb8~Q7ys3EYuBk=~ddH?+LLqAlsNQ9%B3dYGj%9175ja`n zuVL3{r ze|NZRmpv;jX>6^jn{M>B-?xetvZi%-$i}~^#;YqDmYcixHx2tY1;yIMqv_fp^eq7W zX4t6Cr#uTY+XG93;zw=UZ#g8kx_vtq7ju77!+NervKeZZ9adP(n&M}Gn^jFcN#}Ie z6?WlSL)QC=14qtml2f=lN&9wC%mN{{V{P+SR}fi>qgQzBfmursnK=dy976W^CCO^%6m9V&2ax z=5NhEqwW^u+X?x8K0A#}J8t&jR?Y3D-AMNq;JliB0c>hUv1wU`=}l(iGggz1wYybr zTsp_+`VgyCS+vh~p)Y9M-Cic*+OX(t+*f7&z`Ty3K^hv}yH{<1D8K?JGQ+i(E;Ev1 z(37|<02toWQ^ zcWFyR^%pf%t7{*bn{7LG{o7Ku)m*Qt2A7Ly;HYiO{{T^9DbqYIN4Vk_^f~#G(?a88 zw=G(|YF^tLOaQxT>OH^QY1MVqkf=fd5=nwjTvpSyUn(g>?Jst%E{lfE%Nv1cBl=ca zE@)@|;}WMyxEoMI22BkyuQIERTzH!;r3!Io9qpa|M()<-i+3#9v>m-r_N|bKZM{2f zR@M?^$%!yAg`0M6G-9^ePgS9jaeOV*O@r2X;FEN?cKkagLQ0KVip*Kk6`IN53A~&s;cewv%q?XxOzU7y3%jC*tGmlMg6q< z9ri2Ry~UnSo7-|;>30o{#jVcUciqctY1_Md_I%dwSnWN7e%kT2^+w#>yhl;f9@Wx% zA4$`-d-?9Wbo>ub>%GO+byHox_UP9Qe-p3<<6XO3MfB|LHtVNtwcA;>wb||MjF)e; z+uOCbvVdi!Mm)+%X$f{Cz*_dcY}^TYn2e^g=J>_|OY9Jx8dPe^l0PXm>M$9$yD~Rj zav(HjNgfhu;qk`Q`a6LR9Yut-M1ep_iG$%^o&=Jf_5qToP?;d=&IV9wVk&S$=1+tG zj%P3l0*V=l28E7BtT9Lg1&N`637M?;Q}O(;)2z!8M2f{H%4L9?zCT7E`;5tb=6&5aNZ+-SHEF&fN+08mNz#Nc+F0FoT4jEJbp1f4%r{JLSQMPYqJ zEn4CzVoVbf37LVOP&`Hz^X6I+Yc}EV1&>&ukbmZ+<|h!e?<%b+k#!mq<<&o?bBP`k z_+Zpkb9`_B-BknvNY7CeGJYLvhYgx|p|^s|1_3&VfDFf&|H!1Yz-#Zr9)%vZAy>hyp?DoB>G@hi04+#A8?>n#3JbM)`_V z;D-`v6-@-L8bJ{TkTM^MtQ;b2p~#Q)P=;8gX`fN>oCqsC#AIvCK_DzQYC4aA zlb&Q8qX4*#vzP+80Tfd`NsO|>94RA@t{51DQ$A?uPfGs)JT4+|>^Z0c1ZfO({#hI_ zZ75yf69fYwHb8ZT5=i)Aet`}64YkGSPn3!BpEY5C9RL|%Ei7aZ2@yGsWVf0saxycD z_+b%c3}E`cq1AOoxf(hZ9x)&BID86^EHO(#q?i&({-e?)2+Ih}j7u7o0YUO)bC_13 zq4Ds=0a}8m(tr6{Q0a-O`hPqwA*mRG##%`rK&l!R%*A6B1wQQsZ2>DX-c=;|m=iS~ z7z?UvQJr?}sbWH?fEs`ah%5Qi2k1E?T-@nuAu;7p0dAsOI)x&!g&^8XB6@|&i5Ze- zIg%xO595U-D|YBB5)q7~617^B=A9%o32zJ?;F@>A92Q~;CV%*W_-E8UxWPjYcEO&QmEy;%n#OC z4ABh_$1FmXn>i9`xa=JB65)U|^bi05(1Lo_Fq^c>`Uk{`eOZ`kWnC-_f+So}MARP> z1Fk8i^uV60#H*5xtJEliNoFne6ZEXbDV`W%gd0+bf@)U37=Z$#uZ|aiH_&VYB^W}% zQ2>oZ8cNL!7{Ew3sb(TC*rOAg~}9 zf`>^mV89=S6!s9Nsu0XLaQdi2Dxnkg0NR-KJ{e%|8<-7+0LXv^2UCzgASQ5rq{D6i zXhPu5nNwQ80s|BAz*S@BBDo3>lP@KwIA5fg8Gcw_sY^K>1R54H2k8Po3I41sx1@Z; z_@$`cXEGz|Ijhowzf62Es+w+el3rhMtYbXn3ZA|P#}>tDi~v+Glnq*$i6Ty+6Qr4- zI1LtrX7d*PXCMhN4NxN~Od=b)x0*6TxTO#WlE4x`jX`UtO=g6d13U<{(^w;*Hx$-k zfdi!n^wU2a@ZK2>DP4eEw^a?R##9C|)*5rfwwiTcR1}n95iSNSvJ?ssCov`9mV}`s1|DL~5=>!QsiMGNvlHS<|={gl4oxq$R*8STL4fGe8X8NazL&OKI?w$+P_i{{Uo+tc)4u zf%3`{#F9NYG=g)>3iNi*`4qHWsDpE2e8n{rs1R8S62goPW=vP4RAF+~iZz%e>X&H& ztP!|$dtO))!B`H0h6pTbYnaAPQ-;R%Bknd0@@o80^OEthC?k`lxmX4ReVQW0*6%BYAx4nTrPCl zB(v%yD5{kOR%$3RoGvrO&x{f7>_KK}EL}kmq-g&DsHuUjnT!hwC)i&y(W2CL&RqIv z_T`|VEK5ZWqap{&YlP^c1nV%+-hvq0WGV?Elz>Q+01lc-tp0Sutx~QuVri$6woka& z?ndv9-EVm9^_B#0IQ{P9Wp>@gl7I^izMu+etS~s%x3w!3Z6Rx^x%+4C2i-o`K8^lc zZQT1LWsRpjV_xFbvmvx{TXna3>?ojhBxDXcw)*YFxpx$=&+#GAPcqcr+z;I^X>QeR zcV};Md{(N!kSvOChzq_`i4M$pnwVB6Ndd;U3`Z6y|*+qLz>)T!J*`3&f zbK0HT#&RY}787)~uda$|eYL`uw?3QWzlXt%!9 zq$>bR>SO&Wm@!F(>w#Oe*TYgPZNmVfWI#xtG5|;b(R7npHH;d$SVTK=)67MCB$Zss z$sj;kfMQGr5tqvisTC9CO4`8@?2uZZ5poz3+JsgF2#CtKP-iLKJ`zTIK_Z3$40Acs zW)up1FpIw1nXa-l_Q?`ps0=}!4Is?vAgNP73<#QS*;-zNCPSM+nL0p;Xbct(Xkuo# zso-ebV^+wHicFnVR#sJzJjS7fP#s+`$#0k0U~I+g~s9$0BM*+!POasj4f$%Em7VVT91^=xB$ z>9#JqJmdvXrc99oO(#)3J~)?Jzp3Qts_bTp_dCBf{j0Klorbl!=65Ps*)YwvG;42k zYF$?B+!DfoumZU8eNOUMdrRt#et)TInU$%?dl9+h_jmU@hV|~>z3be(;Eio^@1E=A zOI%|jqe!M$;%&jL?AM9Vou$NjYqlk>in5DgnRJRp!9QA&(A1BHI%!p8ple z%)MJuv{eeQT0f|sxtJf0DdG1)bZ_Kbtg979h-Q^Kdg>7X2n@g+%wi?+)V+KOXcQeb z(ngW0NHRqIT}+?+aI(T7&j=+ds1isJ>;TiLg1`hWW=F#nTH3bm6U%~9*&&srF%y}9 z6!kSNssPLJ#*V4E?ih#zA5~7M)Qm`lQ`CTEg5iN8)r3uYNg&99AS#&E0=j(P!wJA5}9yjWBaB#0qH(t$__WkZ0n=)RP$u4N8E}a?w^Aq=h0OrgeCg zAfGAe)M8dG99T%Kpj!&wBtViPYUF?imTA!9pKlNxMSWKEfIv_Kf@olmtDx(JR@|{T zf=#;@FI}~2%$v7amfGon7|XOVfdB(ssf(o@?y9>1VyaB*YhuqEv=*)Tu3ROrT@-7K z4K$ddpv%V|Tc_AtdE!N!=ZaVc<=IlsbNUW)L6f9SXETxT$67?GjOs$TJx?^K1e2KP zv=bAlznQ~@rw|a(Rv-c;DnQCXB*@f07^Ivx+yICwuuPLc0O%$(e^q}xCe$DtVdhs8 z^$=F9B<4H`99Y9!1l6$eU^L_p|C7;g`}2Hvh@ zmIpE*5;JK6DlkSTfE299$|WfQb0m{RkwC}r!U96VDa^3}7(*!l%J_Xue}(`MeK~28 zaygY6N)Tw&%jJdz37`P7lhlX{5rBj9Lo0M6>goBMm#E~s$G+NFMtPyr0TP0cw+ zTuqg3qS^*{7%wToZg{qB&4Y68&*~aNv)R-u>Y~YOe;$UtapJeSM@h9M_ZzFWptsoE z1!AU?74ud=A&JZbjwYeU5f{X`A3$c-O3`9G5+ z$cnb46RYV1$*bxmzOu^%RGe520Vm8nC1Og>V^on$0&OKPK*AuBp+<3>nKA?sQSi$E zzzTI#1vMwBjLgzwt}Wh@BjX#gI-!xEBC0$fAXMI%TB ziB_zr8mGpvE7S^OIP3>rz*s?rBtZZ~w86|xNt_+!B?vIn00s!=}F>unC|lwFRc6XYu%fg+#4no`!b2t+{vtr__`_ zQ4(g7WQd5%;f*e%%(xL{%ay3AjMdD7Rz)fnXaR#b&dW2}q?W`8ptJ*470Md1Ac!9f zNJyrTX0cEYStG_sz#8B*Vy*x%AjlEdFXMm{jPWIT$9(QryZ|qUM;A55>Qz_?(3X34~zW zzGG1KVX?>e2e^CGb)1qFy%;bXK^P9ysm1TD7EvH?=2b$LSq=b)L+aumgRW*m~-YFYUn=9$I zY<|Zr-~57~*mlPs!}^aacbDV^%cU3sFI?K#Sqwo23t}5n8Gz=s)TGiG9lPHgfwbJG zc%7J5FMiJn$Jw<~3q*mE#O~JA4?hlPk zJZ~4V*qN6$cGi`i4J7F-(b96pb3P^V*1lAf7v#B`5c1J*4nwy+ME`b3ig43;z?kA^Y7)Ebk36(H9j2%qJdID@0Htsqrd zJt|=Q0E1ZkunN}Y9W1deECdDcjKDuAIp8R8w2?{`Qdj^FiIZCRe6Rq9r&Pw7n9K<| z^{MNCmfFeA{{H)+&3jdM+3rJcbBow^w|0BA!uD5xbG)ewwct1oV`aZ>ru1KCRNB7t znX_YTEM?I@H7{=9FKAP!S_|Z_Di+BtD9uGv{t)r#j=jUWRfwxYPPG*W#&&$ z6B|{#?M z7}$2wVv0|c$tDa^GtUnddCLLHf*{2wBT5L7(3}Y#X6?PB@9RC|+txeZg-*rexG!^d9ixA7 ztDU*p>&xx`0NXd4q<9{^o3}x?I(lQsQ=Vnp$%C10QoC2Ia&B_U#wJd~`(Cx~5^#O# zz3#Q|8$F%B=k`~GHz{b-7j|4k^wOQa`iJ* z>v;Q)&Oi9V*R{-=Y%4aeS$lknXI^P?*JWZO=5vR0HER>EZd}hTkR-qv9mV zrgIgU@QgyYGlO0d62XZv;7vs`uZAumLIKJFFhxlqXAxSD2*yri&enBtfegSSNRS7K z0A=7v{y1Jbm0M1t5Njj)s4G(l9d{wGZvW;Ac>lZ z`1qU+B;{os@9JPsuMb@ z?MZt#ZAPnXg_}wUEveO@jEc?;Hwk^}|C2gx#8fRX{{knbSy+`IpFmroTy4$VQ zv!d;vR9&(fS)rlrTwPvQLL?ce82Pi@{)+t{u6;ClRJGXA`wyb}o9nt%?B{i1ns1x2 z>uq-kKu~0awybMvezp`+6v;KEG3%APR#UoRgT{Sw#8TmM8y1vAF!Lj#Kv3pb8uG(vMx36yFZn(>L1D+?iHhOLMA8lWnrL}Ti z#;QHGQZe*LN!09h-8DLmhvnQ;9i6H7rhYTlbhqgD?b2??JzlFb*>4Lh{Lb;?c`c_e z#_c&xnJ;H|Xk0*kt5227ZYRq2?nploiM=gLa@gcw{#4|fLzmP+%+UNy5LFTMwsi5x z9+ELG&f0`Pq(F#>1LHm*=P}dA8!xBiPZEHbk@Ku)oSdoG02!H6nNW=lxxmP7gBHIPm`N@DHiBgz4!Mybr^Vlbix?K+JBf9i?IW@DsGieZRw zJ!k*`sGvC?o^i7A`CwWO-%}FW>Q-jd4^pNlAwdTTvDT@{ASafD zl9d67fWT6)Kjnoy3*^Z!rpEFN|j&JXArOv#{+M8UXr8^GJXVB#g&jmM4j) z{{V~m5r6nuG491=O@b0F2`#OQApFPa{mDKw)WJCC5+O86)2SBbK@l+NzhYVat8>?{{{0j@ayY zB;I>(*>@t%z0%r4-hIKhBS=lY*#leP_E%EAp+2Ao^x|ymTuysSr7dUX#eXxH`^Ub! zE89NZQ1?YWu!TiJ3fE`+)xdBc0>l_qh(v`*hiEcn%edZ8tvT^4nz_{n~;Rk8N?+t%J0* z%1K+7)I328*B-0tKH{Y+_WES`mmVngUrzKJ^$YHG3k&c#gN5w5z#kCyEf>szeCd>YyFPldv9m^PCJXRHQTl8DuMf3B@35*{_#vZz?}%*l7m>s zx$Ja1TN_ThN-TQL{{UHS^(~su-VeHt6We{KJ=?y^_UQL-+^!?Fxz6LUxwZcQwCo*) zjt1bj%GD*SVV-Yj)#OCKtzHByjAKS-nZ@a6pJ3rjM z`Qi6T-<{FHZ8_cTj#G1Ib#IDo-rctgYm2pK{{U;WwQ&!Ws4fI*t|w;Jb#26#YyGv} z%qMU6JMJaU*6qIJv+Z9Kz})u_x%->9{kYk3e3vQBZg(4g&wa}BypM2fI8Bq^+g#tS z+y4M*X4zvcE&EfKiJ(}h3?O}{^j$VeZLRD_V2eFUf1oO z7o6{2AHGui^L(cBmEG>_T;uq6OZF}Cy9--=rn`HGTZG)Xps0f|_FmKF-FSL6k$v6E zw(7jUA04JMwD;fLmF??Z;eWYyKK93Wavk&Ay|e9(&uMk}e$wCew$pucVajqGm7CAM z#raB){HUdnlIey6Iyh8!nobZj$+u{EUC(??UEDCy(_5xp@z9cV5}-Hh$#$ z=gDw8ZshiRp6?6Y!LZ>tjxclm-M-sj)7kr7pY5+b-H#Ku(k<=mfw zthL)14b9!lLUx56kv|B!drjRv*~EK;?PkZD=XuWNwcP!=+xreDw0OJxj}SW#iQDk# z`|ZbZa8I&sJDJ$s-lIS78v0+d&!Pwz&v&O)r#*F+Z?(A=RlCOw$K}{{N8C>ze~|4y zD~z|>oR4ztIX-1}8}YJEQ*~pB+uz&W7I|I&029OB+wb{nX?&{NwWwNGA+C8r#+@B` zo3{LRi-D0_Bp$;{@?qnxjR#s<^96#o^yBK+b+%Rt*>Nm`-70WyUqig?cQ^J zy4&x#t-5b6SmU`3)s?XK7){Sige*XeQ>ns%dS*o;mR_RlVD^Jsz)I8yAfBYrgFB zy^_10#^bl#zis=YW52n-b@>igY5wELaogTCtZumdvibQ-yW2|t0JVEh{gGzaDn>#q zm3Cbf)1!D_nR`{-S5DQN=3DG|{SNI~lD#HDJ`!U-qa11QJc5Em5l9o(pbYChYEB7} z4rtUSa)AWakrGJ;KMWcm2oHrLF*%H=2m&z@1F+@<1+GF3XQb3pX8;68NSHBS4yQAO z0RbWfYe7MrRDTY+-~fV}RwR-EImIjC2LJ?e5d`F9*WxEBt^fo84sdIn#SK9@8NdNS zBzb%?@zwdoa=-ylx8+Q-KO6v8Q=G_wBl@5j0yDq`w|lH_c+j-|_0YhYA19VRHJQd6 z`~$eSO-`^u)IcICv@!UaV-sbdvJ)~gturUWl*<4CY~3ZxFw-!A2s&c3T=ii?`4OIM zyb41T0vKloD_o%ToG`wFlr<|{i37m&>(dC$LUY6n>Iv|Z)6F2(1pF`*-!jN`A^?zP zN$@7HAXf}4sM{+TVrHNYfB~YSsL3jM|$(uF424TEK&u znE6oPB{*^=W8qGK$)PjjBLJJ6u)vii&*Y+&_|h;JO<#c8s3XpzV4X8QT~VrN3Bw)q z`HB?4RfQ8#m;e(K;>YvA3eCKT28i>lo4Lv49b(y48i~v%FoWWuvDIf_VMROPcts$b76AKlQBBo^23>pfq zSIvq9fG7wPSv52!4o3+&N%sR^sL@|3S~jkf2dv4=(*&WE6>Tn&0)WLy&%~N%g=Y#- z3NDfJ3MYI${6? zVxlIE5I{PXv6ekUvysenytI#1<*12RQvK>>tTNU1$Z>wp1gP;_W96Ey<4 zn&&?p38!veA;tt$T$BY7`eu_9gB?x|AQ-ekEhGX%Ne5PPR=o}rwN_XasDdC)qCZZM zJY&XZ4UK0&$O4ffl1cnB%Ng3vt~Dtq-dILnz=FGEzFi-nX}QXrP`%=JHt zoJ%Fv#HfTNLefAp0EOxR>O}nT(`g!0Z-s?ZahQ>)0KfsY^t?6 z!#Z3lrH1(SBFnnuc6S}T?Pcyy_N;?(?Ndg#au(gf4G;kZkAR$IdrzAwxA+dUvhT0u z{)Q{e^4GZCSgyX=k%++I6`00%uhW z#-=gMu9dl#zZfR3ayekayNkX}>)YFQ7mKlYvh6pUJ)XkFwAzbyo77~y$U(TY3;{Vv zIGb+sH_DRkM^4_=qt7n}r{+2B#^j4lY~Hp#J1WNFv)L&uELyng!L=dyX$Et~NlmrE zwGyK8Vx|YUedXc0zk2&E)ge>VR1BV(Vyc&5eJVhz`Lm`s+pBIDX|=4huVIW{jmv9h z-d(k2i{G}_TE*MH+w&!>cE|SYvGX~ZKMZL0Uay)6=9h=&?=ZewkSgAv?QT0VHL+^j zyR$s1+ec$8tjc_>bHcM-I#W69{mo&l$#>aoFK$s1?WWn5MfAquPplNityb)_{VOq9 z{4t`erJe>Gi3qJdAXKZdQtyfW5nBTv2Ewof+FX47<}%jC8AJDqn=b_ z8|SHC+-738nfV|TA^KYI4abkq%1rG!Z%Db&Rce7S&_Tp=-43$E&6LpSizv zwF~#GDqdKjvu$m_P(g(x6Bw$zXHzREv#()o`F(OcmHtnl78*zC&g`JfYsA7!9RQgL2qfv+;9M4Q`6CCS%qkt*P(Q#x^#te2OGYqx=q?{}eXrL8G)={hAIk7!XnC&^ntFi0n%#8$ee zDFe#RhAYc*7728HM$v}07pg$gu*?@zHg(S(n{9HWrI~qF7KXCkb4iuku9q!`Syt1j zAO%)(r4-u($|MZ>oOCK#Ios98$L=?ktW?*$pK$R_tu{ z*1@@RQ=XIyQ$aZDwN~EO-My0A%)ZF@{7h=MH#Ze1ruJ}>@A&+Wp&#+z{xw&$cl;l` zUijJAZ@cmCHt)9kdHp@_8QCiKSJBq zJ9OrUuZMB$8$Bg@3M=kK`pyqkRQo&6qCV5%IBkaCPTf#3wdz||GkWdtRW3WT0ix!w z0CSA7)zIzi(s|t8K5@kHon5!x`K7#>_}*}vdsg=Qox0f%Givp)mmQhpzo_O%sn!UP zaoFwC))kZ|+Plt0vDMn|a+aGe#$-D^mltq)oM}5-_LUmu-I<$fCZbf6aTSCp(rSEh z)wQ>?xi4cDUx$I?_qV#8ryW9?zC3*0|n7W(~)%&h50_+&0U4X4o*d z8BH6^3F$b>>eAgJms~hAeXCO3uXE40Zai1VVQsm&P3@~&9&nw8;^O-IE%4H9CH*QG zTE3dK+dr<^&%hev8}D<~ZS@{owTJy5t=gx_#yB$`jxA;ATJoj6L? zqiIWD96L=FtG4I3(|i72&HKBZPp;LSy}u~9rtIA%ixPATVabtM>51A`m}*n_{9}N( zcX{H`2-nxSm3w=|3#=Qvn`>|fgz|(yjw$PfB9YXQIPQd&4;^W5FUnhYcb?AL-rB<| zT??Uh=Gb)GqAXq9yy`j$Y|I9nT=r^0X}OjS@oQ_e*|nu*CgK*fpq9FIK`dUSowBF^ z96Btu7=t>yIm>V^%Vl?Nw;ApWH#cVW``VPqRIw$ynd&W(4?qS`{+U{+i(q+(v&JQDXId73efPoCws zR~v7zyxeVsg3b{=dx>n7TX$V`X%`w9VhX{MD~nrcLwdoLciq;0nE3HAyBuezw=dnZ zZJy=LObzK1*OZ>g$?PJ9h(vCXT6;5yv)#@({FUu^6U3(s?VWm!hA zFk(YoB@93ZA&UE{&9gm*PoulCwI7yz1hL%K>|2Af8;fA0T)(it>w5cpY<)J3A)JeF zAQ3enV-4-wEbCF*q)p~>3->AH*KWHO<+k=7>A34*TH9M>Csm|NfL(hohOA@^v1;>F zmlH~K8+4bsmSo#~jm^#f08-VW);89yrRy7oYnH=27SLFWZJ-d$a4bIapOGv$i8GEf zwf9?{=GSR$4&^tlEbUs!cD=iH{?(n9&tb8~wA&DGSjEg)x>kpNCKspj4w^9DxSL5RcsCu8fI!%?y(@y5=?9)@zUueGE{i60? zZ?w7E{k6B|`?GAiTfe)rZ?xrml(`_2#M(B$+xvfPnIi42i;AFXb~VSgbe@^f^qHdO z-0gb&k4EdgW3B71`K;F0V$j~Vov&PLyNi!@{lG(Ac4l@lQdy;^`Qyk!neRMXmgT&V zeLY2sG(-SFGIX4&AXDRtA?4#i3lXTo$?GRc%7O$4kHq1Kb5ts^3)BqcNdA&etnq1J zLuB*=%O-}N5H%i?fC6ZP<3e>30LVf4;1ZeO03e+J3vw$Ula$hFOalt#${3A3Opszc zqo~MXq??DK4y!MS(a;uj)(=rJ;sDS7Sl+9ZLeP?dh4T$0$Opia)KvZ*F!cbkkOTn{ z1eP_BOlSVMKrE922{nx%gW_VR{{RdS11ek~)_p9g#V4i@)WzoA!uo~4)L~5rmH{1NlS~oV3AE$_%5pw5Cpu?8 z%M3Eyv7+)KhMKd3CphsqFj}f88Ww}nNg`vZj}Oe?Y)@Dk)J%g!p^|fgM@+K9nF*am zW1t8l%tT3$V<{glxnc0{8hC-A`I*!th{|K3`C&+NRgC(i>H%^iN&c-rQrD=$)TOA& zxW$1K8e>ZWM}xP{{3Zu3QMZgDD57Sg1NkkZ1T{jAuY!Pj*Grz-cs-CpIQL zddkKO8e+(4n1=dbQoU4u22A0t4DjXu0Fc{sq>uPNI@J8|#EAZ(kgRHJB!EiJROqpU zUnD6RAliveYzE0i@Fpfi9`#3#n8O)^atO4U-m{HXJflTN35cSVlyxR;HAo z@vTM(g1Hm}tigpak^v_%)!^)05qCNsr;}^nkOnoZs~#^(73)* z6d9Q(ILf_nmZ6z*5h8gStTL1U69NWCvI@;`euB5sGD3hN0R^Cw5#}HnG#XTU3gzWf#BJEI%mpExpcAalL9-RWCuu?#L`5a4br7HyA!o|H zddZvw>I*Ps&ki^U$pn)c5@WG=R%j_C!fe8RK#8#oB>L7vi(-q=AR+OQZEv1>1 z#0HyCXOxd5DFQ^0SI1E&8M`;CP`^>Q+`amWiL68AGGdL&A ztJ*Z7qB(IsqJc%yWYmeFfB+S*jwp7_BCTCZq{!2tmC_+qh$3VWTrUj;9Iki^cHOgG zMQYHhtO}ZG3Q2)K#|d*iTYrG@%a_199Wup2o`4akc)+L_ER#lQ=Nb(*rYxWmXI7OF z2j!Uz4ATbM^3M}Qlur`1#Ia#5s$!=hBxC`OhZffWbxnw4PO+qtXeMQIlkpLPN(bnm zh|)>&pQhK5=b=ac=w2?PNU0)ams zm>^cGl$L;$U;scaDPs^QRZU1T39s?NiI=EZwxdEd&?rnWKZ61Z8Fhivt|?8b zkV3+%jaibbsK8J>F?mp)TNL@Dfez-~0oK8*Rs&FC#7NQsppr0Eyw`#mYkO?h34nBn z3;=}$kE}q57}0iuazVLdKntX4Il&OJVL_;`jud7D+Me>>`&QF%omH$B04O!+G5~zB zEy5nZA{*GQP}K7%kaZeNPW zMA}@5WFp|!>`JW`AP@=2oHhljT)YJ6NsQ|~v66)-mODuBVj17Lx z5PxlG!MwUaHJ}o{Xr%SR`+TZvn+29QkZ z<8>WUMvH|{<}ro1p{ZG8j?5-oHym>W1rM&IJDQXu`k0o0&z4^dDy44Z z3O+@)?;ad2y(}d|RarH^Rbl-g50qe3t66y;mx%)A!JLo=ltmJxHpR2B191y*f4`eF*DPs#%i{iU4hHR5btqGqtmtpsUqf}qB8}Y#KE78 z$HNlmfS)vWmVMUB!l5hN=<5AZD>+jZ*eTBZKz>!G>9n< zs6hf1Mur4aC^)AP29E1O+&IP{tL^lU7NWvwh6U2>oj)2OD%X7*Rx)d}b02)Y|R=7e~a`i2njx4H;Ho_H> zS&If%SR@yproSrF2M9&l%E?BgC)yHVKxik*r9y`NGQ-ScKBqheZKbJidk+$-3_NIH zH4_pSOBq%q)RWT=IPe-%pu+8L>jh7ks|Hi#W2nn1iB=1d5HOYjV+jmh+gkO}{SQNQ zfd2sQc9#y{acCt%rOQ_>-4?+E$|I&9+}zspZOXIb{XvEMzFaYQM- z%l6LT@3!G+C;hWPE$V8O(z>THOmywsgC&lHYS_aYI1T3jwI~QhufeNdpTSBT_3_ z^8(&bq-tE3QiB!v&&c68THtU+dkj}Fz-t{omOg2aeE2)W*B-(*?Ljn1jEGW5`G~6m zD>T6@#ib65SsMMJBTkVdnFJLK93M1-M97bU#ZMfXDk|tx?Q{u!J{lO1xozN*|%wWnqK*esH)J}ou$JSbzqFo>UmJ84e7Rs8i`>L#0Zri z96GC6$7!By{GYpz|FbFqJ=BzL9+k>G@lrj zh5{+nVkNvhIWlssp3^R|VgM~&KoA@Q0we~XHlTiZ*(EbqlS^n_tl44b)Sh3isx*c$ zOd7DC;fkwzy-2KUz@N9YSz!ng}AYeBY~AU+0Pd!b1`otY=A@#bkb%_;tVml$9(91jzu%69y_rLL(CsSO6K0 zm4XSF4J2uUI%(i(jHd%6DhfGLq5)&j<^UqF2j2` z(MKW|Qy9or20X6D!rQ9m`ruC(BwsAe3*~koM6nA=q>AIV67VEpmR2jOk_aI|$e1P# zJR=m6SpkwH5)9DlnrSKo!1>_Q#0m=GB!Z-nBoRqJQ3Jvt;*;i-^#RLvm^nISbf~F{ zAF1_7fMcdF^#HUoYSd4ZN{vt|YH9HC#5$;u5RgZjXUicgl#nY^7@6$SKyFJDswA)q zA`JC_GKd-CtyZ(Z0btTetiY8Tg$7!wK)L>SnE_D=hJYYc$N&j|L`ed0=DqR(>QHJ< zr~pTwOhGCbNhPzKNB~D4SuRiS}2%zQAX@c|SD1qzFZ!gR12TDbvC&Uhc-G~we@73KS85brqeD;9UTwg54> zNRRBXFi7e=F~ijK>fUM>MvPX?`-;r2GAm-gVdIU>IPMi8fspv z(B&lf;=n&re8hcJgFtJL5#xEYO)g{X;Co=UA zs7s+sDygrSG?5027>#cTT+PN*1T?Xg1XYHms3e$=fdo`^#YS>zkwUBztVWujEdEA< z4}rl>J%AeO(!!7j(??^de+=ix6!axow+#af6o!Kaq=F)UrKn}1B06F@UawNa0IAXn znlWNVT1g?g5-SwM$85+Q2~|-N-aZ4s)1^K*_JpOu%VwQ%+8hu5Dx@Bh{W<3Y8dXBh zrHPRfBu~S{Mn*bfZt5C}i|9a><%8F0CnGD3H3kQ!2=x#te)|PFn0Wue$7P zc9Zf}*U!WATqh{3f>zbNw*Y!s(F&8HNX- z_`&#KF|ujrP)JIHFug10C#WD~Fx{P;vAWqgVulO#7|B#t2Y@g{lZLBixt4>YT z?L?_BSt_f{yh%3RkPeuoNFL}PKFK0`;*#M1E$-4+@Ez|?9;jC4v#Cd_Q_jzuvu^U%vq)7*YXZjF1B;CLovVEcWR+UFyA z14Me8i{{c62cQ(h^ChA#t8zTe4cPYf*64cO#oT=V05g50GPd#dJ5>Y__Jxh1RVZ@+ z$pZ<##e$tS-DS@*FFQWT?LIkuU9SVj`qoOaU%ZELc2p9q&3wIU_~7SlC72a!RIrS% zYiVuT8Z;?TJhspvq{6O{08#P5E+DnsTr7QBiHxdhM0_*Epx`@ji3SU0q<>a*sl#{; zD+F{^H-*RnswN0%H3|rv9pU~mPt~bdG00_+)h0lSktgMVUE@}@jZ$MskTapo7??O- zJ)><8`pl{%sL~`r74aQw;ms@rEtmE;)!G6R0UH1)Vx7)b= zmh8`Ee%5;@zU^#z-Ioo_aQvTr`;*UcTbnC;hTnHS{@(X%x8rZ!*(MQ*tn&@>TkF2bUVkscYf;jC%DJ9_Z|K0$9Hl4t=t^f zXMW*(cb-mXi%wUH-)*+rgL3x6cDq;8xvI{5*zzPx56zr=l z=>p+9EITL4p9H^f6egn@W@9r32sAV}(#>+=q{iSgo;{^jO}xShkc_anCX-q_95Ibu2t65HEcJcm(6K-qseNwp;W4*Wdo&D|q z0JEDeEjqrc zR5o2e>lN_8+j(muY0h;X3z6s|2Zzi?P;d{G#PA+fN{EtXL7^TL0szE2b|6)k3sE$x z^{#RR#6;zkbTNz72ACYuungt^6s}o#&&L?H^lnB30Z0TAq$ueWf=+bBR?cC>K=~iY zqXGcRwD=P+aO;;P(@cp92xV9&Fie3Nk@LWpo%j*SVN6Xa)Cy-ZX^G8QYAU?ihzKGk zJWOTzc;fkz*ND}V!V0}B6Q7oYr823-6KcC?0BX-!G|w-OTw<)1rp3yI+7XhnDm*%Z z1w>{RxU0*`>=;T64x+TmI(`+!b1#?#XklyfAaoy?5s9;wCuFq%kTTA5$jIycF*uQe zL6Mx8Ip<0d7*HmY8)X`Vf+8SDiO!}XaG4y9{DKyw%ETB13VsB|1_%|a4n-D#0LXx9 zNi&)F*Zpt`vCM{U2nK*C21|JcahZSz`rvD`QQbEDrn~Nb_w0_`wQ}chcUN!mDu9xk zu1{>2n?&kWvMx2oYItJe)vJ``Z*Lg-jzsU@xzA{oH#=?v{{Vzt?Y;Ac6R6DK_Cj_qi(lV=G19bEVUmWxy4&wa(kbB-q#zE_TQ7>doQ?eTeEv{$?ol3 z+;LB-?d|ugYSpzsZh`}?I%CuQ;po5pQ=xm6qWjxv!{Yd!$><)dx6$t^-AfETYr;GxdF|tEF_)tI`c6+*}(n zUD|H8>2M9Pzpl__2F1oD)!YEq#Egs?#q3)A@n_{f7uOare7!J9&QV8+Q9|xsmQC6VE9lL9$-&?e`!64W?82ar&RJ{c5`#uhTc1`#X=z z-D&Or0K4@)7u|lAx{aUtyI=WszOMRq{EvIRx$Y14{rm8@t}1N#YtDB5dAGCXP%B-s zk5xAJ_Tks3Uby{ZcB;uWs?+yhBlC-4x57Ws{s#6brgbRuRC$boCZCDNE*h1PvxXs= zCLqsICn{tBG{Bz`et{-rvWXQ2VxaUHbiol3ph|#Qexnp0q=0k$K`}pu5O`<~f2e{f z09Htxum*yHBnk6Ip-jhw#A9`$6Q7V(G!rD{Ju|OCg4#zA{R)7f8j=VQMq+?Zfg=%H zIY>1qlk+`hC?ZGC8UafbkuY-A6&3spbjD7$Y^2h922P@(L7)@U%rdDt{{TEpI_fv( z`bO1ZfiPlbMAU=Sk@(@)R7-pVV<*Z40VL&0c>M71h!PblB+U#qsvPN9@%*tMDS}3k zL)4Ob$*DA-92pyF=nM&fXw&}y#MYIh`LGC~Gys_Z!7-G_f$4w+G$1gZgo&KMsF}bK zm|^H7l@$^|X*3zho}b4HLZQ7h9nip30z&67dJ<=>P8Sl|@xZut6k#bTNSintBNh2BgfHnFa+!QU~zE zB%&xhNtiXyAWT3NiNFOZRRjqTAoznlV>!SsAU>vIS%`^)5!6A;ED5!tP4?tP1c;DM zsMJ1H9SNu57zG)GAyN!61Xrjah?t?Kcv_98T}Ikeg0upVM5qzqYaot>~WDrRKZ}AsD_M1hs(&H{e>Nv{w=5Vw% z+uN#fY}oUs?pyEw0NeinX|C@(f3xjyCG1Sbo{ZeHgX#cmujrQUy-P}^&Et+M&7 zqiT$nnDD-#>isuGHF?~J_?~N{^o{~`q~rT%h!(cgamZh?NV3pQwM(ij1!PhK+<-C@jlDn7I*z99+x3O|{{T}C zv(@&tw%vAdE+F);*{`*}54No@BfQ%U*5`Y5Zr$Hp+cnj_yDS?{($&Iu9F5B-%B;Xx zNy;(reGjDc{UudulfP-|eQ&8>c}Fuzv$-}swZQgw9GCg2<1B6%`dod5_4$ro@B`Dd ziDg-W>Y%f1X&R-BW6sq&H(I3~$BVVz<=oiAJGOz?HJQ&6`kOZ8E?4;%{{RptSi9&FhcG|0H#+n!FJ6lT1$!5Ybs7+~V+T2vnL2!YBd<8L+z22>|m1>_dN=de? zl_lT;W+1_-GzLKeF*4Ruf{6)i0VYFrsVBoZJuq`Q&PM~o4Y6SSk5?~sEoEpqj0tEO|t|jUL1=3cOAfLm+U>XtA2m+x3 zX+lhV4^tU|fCCB%$_8dk)+R+p02er?mUR9#>*M?|0HtAoCnHY3APAb6zy)PBtk1}q z1OEV34geKley+W9fi(mHk-!0Kk^rWWk%%Er#wi^$zyLIs1^~(pVzEIP4DbO^dU>)Q z2kItfD_*z&w(p-#^Nf-}_3nc*NhM%OH3wBOj{HLHkS^JGs0j!Zx@RQR7iCso@4=9Z$CPqU)oYM$Y);orQkwQTx zu{1MK1kA^V8EiXYNiL^QG$aBdOwfFA5USz@ASk59s);nLACST&sA3QYh#Aw&PmB*7 zGgV~t5ey2zSs6{RwkgEC_Q zN)m^tEXT|JCbDFl#1#X;{tL3wVsE(64Mgmf6@e$NN zm87gmteKglXO;q^GEz;tF()HBU_l>9q!|AITmu{)HfPf=W1OO{h zLlp5b(*T-QK`GBxbTmB$U;;le@W4_~p$Rn-vy|63K35rhh#g530LX}=K{7rn4$Q|If03- z`*a)$0aOaGmZ_l=&}Re_g=;6Kpdkc*IBxjzgcQUapi*ciJS1derZdz8 zV(>LE&q+FIl*x&RzyPy?tPrZq37M1e@XD9~OF)2RES4mUqNGsJpY^~2su|TKDIY4I z!VmMn0mhM}9Yu`Rv-!x#U;!COGpe~%01iM22LNH=l@I}miWUa4Og4GW1m`MXaP;C* zhYhLTK?(w96!r0vXBjNt<~5){$=sHW925MJb)j51;^gQY$Ml5xem)uoCrndP=UF(uExmDpP!b8&{Zb9B%HaKKR{ z2%7n09Jk%O`kb@L?CfpPMHD0ma>PI^#~?ECGe1Z;=jO9=bTpF7gg92eQp^cKBTVI} z#ShB~xXrcfBW|u$&XTa8!s+WYoVxt+G<+VV>91jOwx8P!swSf1v629o_;kfC$ATsrPq1-H zk1Wst0>wd$!2(Z*!xKClgH0_mH|hi@LaL9{2-IuTbur^Hi06ecishA&o0pJ>K2YIQ zwaJqaMe!4el;^ezh_DQ4okTndO!sd1WZs@l%9oMmTg&6G-d zKaCEmDpC?wh}Yw^#NPFbw`~jN-O+yPqJ&$H*R7weZ8DK;vl@nvE?qI5RdLM@bmRCP z9PO_zi4l1YP3$>+j?U1x4`_jLE&kaM6WR@r#wF?AW%k{lGSYZ)G5g=R zyKdl1_R{Do?QzhXw^@vTXp+Ut&YYAe>xEX@mi)}Qtz0zYM2&yTbE9u^?%l$KL@9IA zx#?L_f>;g0s|EsOk2a>y9NYVrPelmXR&?TGO~~zcqSf8Wx3^X#ZOw(aX2Ag)b9U=X zHl`7z4;*qm)pgByQJ~tjaaeF-T*oW9H_q10wq2#A(AT{)0?}E!xB}~fN`v&1S;sZ^ zH#3*W%-UQdnPxw^Y`NY1ClTq|O}5I#rBJGGZXa>Dy>u#zyNlMty{k5^RkV^=nq`Uq z0G7IHJ8h+rf5+b4zHP4sz}H>V-UpQ2J)M%a<*pw_-OaYuuQFSee@Rs>vRgETf}n$* zJbvd@_bn;vcT;6jyqRXS+;g11>h=3~c6+U+)FUSGqtSb1NkxmmTGY?f0p-Lk%i8)i zLe&yUr;`BW#kGG6Iv>!za}J65X7!ZlLXOH-!jc$=G>gnL#LGLK1a z0p}x8XCYOWRY;u8a9?$$F)M*su1MQ$w%2Cbw(DdC9$S}KJMMMRUbe7W+enRm7|zyq zN!uT}rMcd^koP3mwzri+U9d@AvNP$ssFewP(cR$JNf09ttm>xN2u}tb$?mr|cjD98 zW?|}FZJD`l-K!!sdW(@|Kx7-dZPeirOzKyBqfdGQqAjpw$!*0r~^PJFfne|R*f$o z9m1`elw!ATHJir5P0@DaUAPy`Zt}P`?%O)DDA@>!@W!(AlACR0#V;_hQ_ZHyce@u; zP#Q*)8ssrBNe4VtX)l$yOjd0yDP^~C#h5!?Yj&J9)nY>^Y=SPKuHCXn&T^(Ts`Dh8 z<%uzu!-;I&*h?0ePQO=bq!Fc+fs$34*d|sWYN?NgH%;5J7a#0qtlgtUCLz1tSRpOi zW(L}5D{#qR5V=V}Re)yBMB_HoM*LZbau=>Wtxk?huomUfLKi^_r9dnNCU9Cc;wNZR z4h$=Jx9wYLf9=93CIPXSCJ{***!X3QYemb<{-Rfz%QdGpy;Qw*ZrvAj9Vp6;q+1NK0}}wB`i499=?zPp6K(0F zS5sD8-}1btA+zE*ou22B<~dFEzCVuG?6&te8}37Uxn;FuYqzk9&i5}|F-i`k0glVp zZnS&1#VWGih~?b1uGMzadyhrh+dh%M$3OV=+xul_jrSwmzCUNl`=QP4k=^$QH!0bh zJHXtz#c)VntXbZI0`9lpTin!$GzmVb)%836r@39dsi#R+@uc^^*!GT(rmv=Lea*(L z)?T@5MclkUGu~d^;dpKm(tg&-xZYI#&YxJl@PpS|QYmv)0f^Em6ONsoy{(1$Nz1>x zy}a`O0B-|saaX%@b8gCA^tRV6S~iqC+PH5#ws09IBao&%r7hCl6HwCEMtF_o*HT)W zPJT$f?)a-|x4M>%&E=)E9_5?KYjTF$rlM^-Fm<@HBS|ETRr+nUUR9cF+r-CftF)%n zT6JB$<(PK<<85hoowdjvmhS9ay~A=h9`4TXq-7O1P8$Bzwf!UlvSNb~{{R;2YoDRC zUyWZJ{-;9q4Xw+4zP^)96_*0ad(U4bb79T#>&No8Ra0@q?*m)BN`Sw-*5gCd$!`6gs=T|;S^c|Chv}_s{oazw+fOo@{1}{#+m|*)Hg9Y-o6mJ^@3fm& zRZQKsfSIuFt*1KtF|PWZm&qKyEg>-=VzY zZzbzi-Pzx34h{Q1+#ad2a}z1lW5x9wl;5J|T(_(F>Uo})w%Xi@npsD8b2Wc8-EYTV z+YtW%y0%dssIE~eunF&=1sga3+H=^-saG4$u{jF zy4LOL)#<782ewG_7A7?l6~-Hvg*JF6?eeselSubpa9Xs2`!X@IRvjP8JwvDa#F7oN z4C#oP(;3#)c9}EWPngmB?dfN_&dGkys?E3>hPDnFk(5A*Sb!#DJZsH#{JoOQ?`W)c znv-z$p7!nR+t#-?M543kYq~71k1<&Q0VYKvq zQrbWwO03am%+(oSs+AFg8(GrBsb=NNimvEcm2?NVO6zS<>j00XJaWdBv^YeoE@|&B z>1OBl?x^(vg@zQcBaLvoBl@cp|@3McDT$) zw1ZJLP*lvvUmP_J%-`-kFf4aOc`k<;4X$9M%bL1qGOBny?*6k}xUUT*)|JA2R;ks*`+hV|(84vu?n+FYPVf3_|O= z%W&Me3g`f3WlMPg246f1wzNjS+^xDzva})C?i+=yZZ3ef3!hQ6y6O%DnKIzI`G%2vu8V;p^jERj2B0Hf8qi z^JS@z?>T*z=KlchBK@7h-gQfxJ3E9x^e)T`=yB$xf&mkV=EQJ1tJB%lc1M5ukavdW z;acVW_U6XpXsULNxJx$F+`L!OWWQxW&;Z#$CcnZ&G}bGQedMB7)Ne{cghbnaxB~6D z+wt4xR$><7GBvHe!9JyfZ2@bJM6`qTV@)l_fUzJTZ7X<$RQ-9oR&dgnlg43z)OFK}KSd!WG zIP&(GgTYm0&Y~qXksuODVgaE2L`=cKRF-&!pA7)K+LSObOA@TqFexLgF+{exa1WFN zFQtuSQb~#EO>oH&L0HrYB%I&~fdex&!Qvof4O0>x1m`hA1waNdTu8Hg$_GxflLc4- zoAi#L4;=8u?HLpGEW>4;HBdx+4B;70WJVd7P-ps$0gBIr3~RR3!E-fB#BKCJpdn@f zX^0|cDId=lRomJjHBc)61$qG@e=!FH*PEA&0Y$Y4nfSpHXaRveF+d@K5Zw&MeFP9< zGQa^gmFOmi^#MT;38|UD0wd}zs2>6(5IV@pf^f5;Hd3*uj8WG~Rw@J!)B3)tsjOkd z>p329Do_ZJG9r;*luQHo92kK&8kKRuF{qNXADv9o1z|rBmiz@umNC+1a`E_A7lcjp zfOUC@Fh-;1n*I@pDXFA)6zoYlV1h|$s5SBd^1xJpS-~gGLp14Gto-nsXqLky5&)=- z%{t8d4RG6SWK#I*A$0&2B$GMx2gLYO35%8g0FHwO7?IIxX{Jx`BA7;tLBUd3hysGM zs0xff0Z1i)o`6*TG!Qc<18ac6Bz#CBU`!A?dg*9Ot1ts zz;{uArXqaPQBz3jMBo}3Xw+NkKS&}*okY@34&yetR0^^pBBrx59R+Fx3g8mauHl!s z6jB8AH8D9slZKEgusvTW3P?Ev(27ua3ByaYx~8=#>ZYa;Am$FNw`es+n<2?-lIsX6*H>|xFkwyZ66ehhZJ!29uWD*3#b@|R?JOj)C*CYP`NMTA( z;{uo@oXFm?7-|HmF_u})55ou=#6HkTGRy%YDKfragilN$v(a%wO>%}-C<66@M46JLunsH0-%vHoX_x|~h+$7C>6QpHyIL(kXDG`Mph4(l5jsa+ zm{EdIf%OTRQn?((3X0}%#SLNVGvx%5)L~Ae#K1Y3!yaA;%)qlqW~ds!BT9(yI9N4> z#B6}(KomKg$OMQJTqlz|WrPJKsA)+iKrkS{7yzKamVltB)MR+&9y)NF!)OzcrfpEf z619>k(j+g&xI4os_z`b1vgsaB1ehmK%gdLSFTmlUaSm70T_uAZK2x1)M@XL>1<-9v zBfGJXs%mA0UB$B)TiK9B|x5_WY$1qT7qGW(V*sM0$L7hF~p4bN}<+tfJIt_PGU_+#RM)o zfDe{h0m=c)PGtDk2Lb2v(r1c@W!1{V@+q@d;$D+nrKjDrBcBQknn5jeop zQb_Yokpm-I$ucR|06Pr2vU#n52_iuKOFn5e0+YZac>!AWmPkz5J`^$2+SYnf0>M>Q0H|rrjRe%rc+|S4tLD^)a`uI|%+hUw%uK*g zMER#8KQ5SY+o3`#3#D(|)9MD(Y};?`!$AySd38-e#P}~P3q|rC({b($nRRq(E?@>| z>INE!1iZf?y+7Onbg?99Ao+-xfhLicOg<1CBe-og((vp{1}93WtQqsy^#PVJw9JBT zNJjnfeeIpNw`D_|0%>gFvL# z0fR6JnHd64=YUQ)gp8`bL8`J~i6GDq46wDyD_3q12x0>_ro=HM$uhH$3Y^a0{;LUB3_fkRM)JCP)yN>SntBWh?uxC&Lmj(zKc}#!}Dts^+tu@HgC8+ZGXX*=51l8EUf&uA( z6!8&}QCcCRPL>TCaweeuF@T)J+axn-%d{eyfeO%6nvGM`k(oGhQr1w_$@Lr*AVXD5 zkx?Fgx=+e*lUgEEs@Fl0Y?Ohc#CfVBNikhgI(XrtXEDTwbpx-{sfX$!3I3jtxpctM zNjx{H8Q06C1#60jQB#y1Kt*CdJSO-8d1^93DPhsA=?FrGDhmw6sH}dWB=s1@^H%Gb z$V-{vLOXHh(xfmDG}a_&X{4}k^~U_tCuOM=+5}t#PL_rlX)FH#QGumN%L>YB*J(@h zEf;p>Us8jmo)^kkFIWT^J|y(SFC|j8xCW4yEGv0ws^*pq2ohA72lK_W^(NG`d07PQ z*t@e6>M$wgYV=l;3_*(ZoI-}@Iugi_wG51xq7gxZ1TbdO9gM*mjXKgXa$DT0;Uhz6 zvuG-j1bJ3Wf?zong;P=p7#o$6xmOXZmcY3>A(^y+se?5{=_DUak~2Ou#H(kOyddrp z<)Nq`9%9;xl317ioj?sa{aJWo)BFaSdJW#N+EjXC*=HVO6}Dta0sxrn6~bD{oZ=sG z8140GRte=|Ln_INfJiiuI^ndME6J~a<~BA(3^P3ei3-jwgE|2eR3x7g4kopS<$Z*@ z%D~Ck+Z7hT)=4^M2_h%VCQ*CYQ&?qzl}Blw!bLVkj+%Wo3{V zNy$JInJtQ5Rh9~IIc28*02Oq)8)|exB7`_3QJ6?1cpjL#+nF|QoRA-hxFvlvsDmoO z%RvCLND!+An3&p}!91#UAU_^-GL;AvFw_}bX<-OUeJtGv$MVEIx0U)+s##Puv{GChOvC_4&#X=}@Ej!kx)!_qNfK2Ms)M0dS&|8o!Jsph&IqM(ZP~w@Dp%auW`$un`l8!dY30g8EnbnWRh^@iQ2fr9iaQxBk(;xO}Be#*zSyBPTMWL7c#?BN4Y=Roo0^ z_O}A)TVh0p3JN2kSrn)OdWzQy%I{qYn)0NJWzD6F5SdG zG%2-L96~(z8E~;E>874^BxM1*u9MO_;cJabP4U2u%<)h^xa2Vk85DpNbzntg^e}#S zwPu$swGkQlo;hM3ey|7z2$}j;pv8W8KH`XhR;^vW47S|ogD_pT-JHc3tboA%c?mI} z=ZWU4;5^4F!!gcRlk_&%H{91Lwc&Pl!)^}ad3|>2=`BC7j6*w$!ok!`XN>Q;TK#OC z**gCKn&NYRxE}s-J1xEbAFvko=XBxMdEA?;M%BRp7PrRjShj${s?HGRDUTby)w}s9 zqB!=QdwX?>yvfNs?f&n5yScpH?yl}{-j=z4a>nJxEmEM%Q5eARq?}yOwviuVUj8kRo75-)I5TO0|u>0 zt~2o&IV|eAEUXxP20bvxH6*Zrw9ny|Hd-MQPy|(B+{XblHZNy8;CGkgbCRY9nlk<`S~ z%>e3Y%Pa*1Abm?(49x`5mY`*rzyrvk$znqTLR-tG2s5WSDkw5IPRRg}6s&oJ8rHGk zLGqmGmK*?xRI?Ep)_M|Dk*g^KFZiw#O29~4ZKbEoUm^_w=*D6Va_fYaAPOk9pn}@P zH5D>gfK0|rvSNmCqN#x5UH<^%RW3TYGP6mT^AIZ-6mvdZAO%!ss8D=0NSf(_8|e@; z#ej}9mLd?ms3r-LWSUQwBjtf)OO(m@eTI;`?a=cdCf?CLQ>JF|F$5U${4w9s>^WPO zkZuuqxcc=Lfuv5k1ToBMO2`CcPCS}fg{hW=HPl#`H7lt02bnqJkd2PKqt+VRGhN#rZf>mn}F&EsbEH(L{?&?i5U!MY2q*x$svm@g=&d| zlE_gi0l?pK0-Zo4fiA&fL5!fmr_=@xXU9MpaLUU~T4N*BlR*SjgMP|@)IzlifkIT8jDROKFd$9`s05022~t5~pc0wC5fmp8S053bt0ih^T44X2+gu>pQ((nUntU_sApEl;MX8H zt{X`p`A)3hNzcmw5(Phw6Ig(A7}T=z{1v`U8tu0hH!6~+NA}#3X?O`+ib#X;GmdTk zo}1Ng{L8CJm>FC9YyOVn*|T+JN-!l~OpR9CB8Caah2GiR+WNI$p|mGiS{Gft)QMuF zQB~2W$O)XZk=Mr&R}Z*|%$HkktQ-c&EOpfsQWVhqBN~Z!Xg*GmrG}|0CLy+ zBZ$8M5!xDnNoIiFWq~3eHIOOt#V4m=1?Hb9p#o_z2%n7r{IEQvyBGljQ6NDwXGyJV zKuiOJI)LG}35g(8e(%0JTQ`cdraDKFM&d0nn~0E3_y<+8nVb&4@6oO06Lt= z*5O%)(lq7e8O-Mxg=NhjxA2w6y__a;4(Cv z=7X$PBk}m+9h*f27#dI*0L;T08fE4fO+b>%W;Nb>1Ic#3aPi>Rd&6(7ER93d79Ehl z2k9d|n60kyayjeE9sAI9YFZV9a?QTFeqko0kt=9hl@0)e~t-wVfuca8h%C2Y3 z`0y2CGW2FcFP%h0McS} zflyx`Ef%g{62BSm_TjX`;7d81-iMC{Cw0Zs9o@>1MJE7JtZTP!Z zc-sWX)T+v_c|kp75s0qmmkTILwrel?6Ks2V+E%o+&MA2d$5UOs$nG!i9^+AoKDEY1 zVnobhExCOj4XL+YUzw8a`2B{;->0(K*xDkg1vb`F)RPs3P-+0gb6K>wiKSNvYVERE zyZ~Zkihw*an&YEK0&DOf4^rS|(-2Iw{+O*6Dot=c@n9%*NBWvPumOW0RFe@*5WZph z4_E=!gCuy#p@CB!Ow;3m$k6?u0_g&LCP4`*rUZZ-4N!+dl2$JIA;EbG3d)h`;Kt+j@!`=F5Gzbxp?8cWe==-NjZO7>n&& zW%A!9)v|5XeMs17@>s|LgU5*!uZDQcztmEt{E7+8K8EI?CBY0eNdSnC4~8-~SzO#&4xlh5lO_!#ul^VX{(mB&VARA4ctt^) z;4DyNh|4MXkA*s50)s^vWXw#NIlzutM-aCb`9(TgFr7$p?qcYcKI^ia{R*W7el`;p6c3pvMj zseVVGV$+P84M@^6CZrNG6sLg4FFI`AA&*-}l7CD@9IFsUW-*=Gco8qtF9d)9{X!xm z!X(ZiG0H(QiPNMIAVg}cM1xETw3=K+I2t>7ZBrs7C?p>SlaQX6y51Bpkj0QXeAIOK zXP?Uu+j@?1Bcjsknrbj<6gi&(F@jt}&}z1R1HPC9hz5`h!JNn+4~_^Gs_Vx6&mfCJ~L(5s5v+xmIz^(zpSxHDF5P#<%IuV0Cqg+s*9QvP-sr+LD(@{6d zrD|4wG$a0WrUluMbymv}Nyx8-LHwlnn82Huwx)H@mw-(pDXA2ifO^gq-u^FEYVkkP4U?%|YsDYvGBtQmb!KK%kNNK{$Py zA&w}ToX%bm5it>ooP<6h5DuA<5V0~vD>(re8*TZCb&vp(W6ey>Vmkal!QI4j5JTQ? zc3gTJyY24RWoQX6yxdvafCWkZ>#P6<6k5(Jsa^)E=RNoKr-FC4y6)|k_i&&6Z^WhE zPVr$Y3Y$c@7|k=rmD$|0h{&EMTEVV2{{V9DxMH1|?XPzC7QZc>=Jwd(`1T{|b~k~& z254h0xE9oFsh#akY{_B2-k);4(QS_z#rC&mZSGM^Te-?^(Hg358GYZO<#v zO6}WB7E8X%d!^l^zkGYE+}qn1kb1igHuw8Z(4!ePmfqVz(4_T>b-``TrHGbKHQkiT zFFa4$ueV%%#oX@rpZ87Ng8RNw?cM#?Vq`Smy54i+(*x=(^ileb+}UkC4T7H8cHa|Z zTiI~?D+_I6*|oK_fnY&1r_4yDdSgGiX_VS*N~yyO2~ z>+S1w+v}{^#@*&2XwT9;uj;FFZFKvuHSIK)aqY!~Hk)wP_dyoh-dkmfSs)_<0BMt2 zfPV~rZ%e9OHse2u?=Br=<&Sc^XKl%Bu9LR(O^a92THU5l?ezext_vt*F`a3TC9%{! zt;M*$rIim%nLWL?OJOwDXNl=Q*+;)u{nhsR=WBO1`Ip=uZWm?8a_-k>dC71#iLu+g z)oc)#8t&1P_WPp+ysAvhQ+dM7c*B;aHe_r(M&rj=J6=SEo zy7+NlC;1+=c872d;^FOIx&Y)hWbFA%dY8$$w4yGoWp46$ga|W_F?#a3;Lix!!ptr` zsLB{sptE%nIz-7ikOm}|6O9A_7^Qm8LVEuI@jzhV9f7BSjZT6<8B7{ZWZ(|r1xm4wINPG|Q$bS@Ux60-6A!Ab?^rpN)PvxXkbcok0Zj&U{3D zKj;o6RV@m#Nxr~4n76 zwCOKMBl)0$@I;s(Nk0PCT6L`?a5Y4HC5&kH3* zbPy6?0wSQ#@HPHeWWWx(e_G5Ifl(eKrVeaDYOW`M+?f+GT>NsbaZ~cb5T)8+O=!lj zY4{ouo*!_b38$zUpg=uqm3r3+!AUk$l_q2Z<)MS&m^lG}O>p8g0>Q}Vku)F7sW=88 zsVvfENc=oaW^i`{?GsE?0Wcz_2@&!JMgR=SfdG>#Vg+OVI$#Y3iqPsHz?7V%)8{m% zE6d&kX5mRLRu@qo~P+L-xN2+Y#BSb7S3OjB{(clY;SW80f?zPyYQ{{SaOeX~Ej?w(U|+&$ZUbn*N)%?9(9+}~v; z-JOpgXtHc96HRZVMM=Y!<-AoA+F65^yX)LO@An7Q9pAjY+dZm7HJ-%a_dcHUkg!Cf zcPA}us{+gQ*+K_O;vV9w@@i>XJ1MrOGW)^r_qM*u_Pg?3=gslGr^0NJj>CoHz#NAC zk$ko|-XhpLo$lu2kQtdw6Ep&GNnNRo69`z=U3D0Q3)H;(@{OeJBgmF>K?Cc*4EyMo}2r3?9U&=Z0v2eTwco6t8A>wpntV& zMW`Y78;xG4Be?*}d5y3}J*t~E+oH53Uc=V+ckg!XeCJNXZS1e!eamruhqANWT*bXR zZTE6-wGI=BQK@v>as9jZ6CrBN0fKR9Q#?D&>Xh?FtME3jYWs7y zj5l2PjV6>gCHIT9w%vNawY|38Cf4Ka_Xlly-PPOfEs^Tkyj1@HX6>n#R)QxL%~aI= zP-g7mHxT~-BP`kMEfrdV8op8pAd?IkNmiepGUkTb$#qbnIYtxTp6YftwObAEGwu&B zwC!Hm;o6h0oFWR-Ru>6+oc6(b)H5=sIzQ7U}NSyI^qjdYc8J|5Jxo;9|-Ip!G z-QiQXw)}?Qal+l$FC?6mseP;Q;@|E+c#IcQTJ(I<23XBY!dWzKt1YNTJpSu@d24aV zZ4Y*FFS+8l&L^4VHn#8jn~k>_&R)4=h~3<>JpP{{cG(uGEJhP@ZT`mYzy2Hc_S3i*h2;BuZv4r{^3Afjytb36E;a5yak|=F zwYawotd2!s)M6af!_?JUw^LmV;0VhugX8h*f?F+qLV##youq0Wbr= zfCUW!o}FNf01!D5B6`Qf8ISb90%sylWXy^Q%q$aA`CtLXJu;erNF>kdnEoHb02L9Z zGbT@mOsQM|5fdJ2ffaxU!oD-t01cR-kT$_8_u8BMjI01+w#0a*m*I#5MUae!5`ZW&sD zFf;M!2lUB_>P7*&rsQ9#WC9{dW9I2x=w|>bqz<$LNJ8388ooaspThv(cBM^3NTh%> zAR1Hj$BqC_aQ>lLWCB?EvlW>vI{1NrPN}&l29gw10tEj6PM{_#N%`e~ZbASp7>N-l zpz#3wZ~~alpp*^>F{ky?l_DrejaUX!u8`2~Re&o7VhjK>AW5bG6;!l?Az?vU#&U9= zr|`f5pCt$JU6Aeib2A!a%OTmT%w5gA5#9J&vW;BWy&4~;+SsWmx_x_&qSrBpNk5CD(>%!z{% zbFW+gQAZ_7{{W;=h&_BKr7!@cm`fJwC;*)DjN-UXQkVesNSV?|0ttc%Kh7~c>F61W zLw6l)sC$g4lm*>_g2$wj1hMeOc6pY|r7d>}No={z@z(Xl=e){Fg|TcDW)e^L2~c#A z(m=*n-=$Q}dyd_%gMWAGgrv6~aqiO6`c}vUK@E1Nt->Wq80NoH)`ykZ^u3y5*|+3c zUhVt$8JV4lK4vUg*ibH}B$ELAvBzuL&&+u}y`DspNmP?!!yr0T5@Iz@qnybG1YGDtM_DFtzUC6E(gTq; znL5>=RxU67RTLxi!vQs(xE-Cf1i57*T3Js_TlE+p>#TxA1^F1mO1!b9q;oBH5pA~M z?k-t$VQCb4cUWo{E@vBdv@|_E{r6Fa4oghIbt=1(Gpnj>0MfV&+$X1G6Xb`(|G7*5LnF_!fk_AEk09+i_dW0?n zTbE>()RyW=)@00oObMn#8S_o25eCqmQsa#aZQb6TLsF)*sH)41p(uTee2k z*_^De*vEMuQp(eFaX?u0Nl+Hp6=qiR7r3fEkpND3=H2QkM%L#ZJPzHCp6?V`gAm+u zmToXaOQl`Ow5;gH^|I2JE)sO4sHI_7JaAg{y^~4CG2D3t)7dZkqq08&Ci|1IxZAsW z!EdV~T^n627QfoIjR9FvMOt7A*9PwH-Rjl8zTxfC^=YZ)X=~bH`|e8PT`E7bZ4*tq zmt|M?9U9w$>2ZNMk(M}ZxZ7BT!0N4Pq3YjfVTbSe3zv4TmbTZfE4i}H5uGnzL#pXv zY(uRHVq^so80Wp)S~p!J>aN^cWlDz~i?hVC-{fvK-7gb%_=U2;>?MU3gsHc+6d*fL z=^CI+j7-Ya$A=E$aQ7ickM%9r_d7+~{{U!<`t{niV%D42EVBS^6f704GQ>a-zBq8X zBOJY-seImOcxnt|de_q9i&ny0buJWJ1?)yvE%nP+qaX;SHRx3u9l2` zg_n@#*8a{n2rNCdRr5?=ziUz;d)7v)iaJ{mCo?#`&F0iJ;<58*KPp?ZSMlI$u44J* zHkPd&&Aq!V)_X|S(E4{7g0gMxNMbJ}>(px)$=jN-XXi}TR@-;f#9T^Csla@9s9=2ifuZn1>_JJ%9sSv29I@w=MqR z9^|frZ`QmoI)aM>LdXIpF^iwJ>nWv_iK+FRV&osHY6 zY?Xc8uvXRaa3+;OLUF|DDrIY-G{)Rod=6j;?xoJ6@_jY$#Qr^RhEyZon z&*)1Q?OR?Nzs;<@`QIcl!IybItD-?f(EzaLx|WZY7^toLbh*k7nk(mm2=% zb0;%0Ok#YyHi(v9Y^Hd45bQGUHrF3FP^+i|!wCR6-#|Lh4BqsFlhwqORLm z)3=F}v^54ZxU{;hJnnQm>SkwIGPd2uO0Yi>jW+k6E}DKNt3rmpWc!c3ZGNj8)-2mwo2K0{WmXIU z41xhvEf63cxao4&aMW?blOE(2!L-e3?8&omCgBwof}g6x0i>xcA%1z|JHw-{tGiQr z=)Ogk?bJSv?dVju5Z>PHe7=5RFbo{AEIcJeHi9%GHWyl>rEzjoo) zfl%63Vu>!RQXs8rOgG_Wm9^ z+@ZQ{U6W~jP`iZN09x2E%vo5Ibw6^rpG>e3mD5}g$0=)>3av0uIi+_@=ex??$E1gRh zA-gPs$`d0;sLJ{+vH(~~0RI4RctuWloczgKeY%*)v9wEvMWe0K;@rD+hzw*mQ!^$3 z$j%?!w~01V;Kcb$7S)#RlFe-TZ1$T%-wxG+s%tL*L}K?Pr2E9?a}sM#Yk1)=tLw7h zXt=?HH0l~a3#5i$iKOFdZah)w4pnf?DcpPI8t*mMwyG9PsV`R4Sxid<;f?5QU*l)(0_ScEUh{i}+s(f39!kR9?e0H%isQ6+ZOYtXaN4?9+wKlT+gG>%^(0$#>n;BP8*4o^EibaoY2ue>9|PLG2h&!{Tl?|<04DvvH3YXbzbE^(DI#cMZe22ocz1Z?Pr+3 zvuk(uJ0IU(H&W2sTC_;FXbn2H>1)4*G%t>&AS z1h7i-M6INw{ut~asbC%b@csrO}%$Z z*OuwVaM{Dw`hQc?QE%+unwqHi(9Jg-KFij(xY_a-whn{VmAZEuL{)fK^e(rjZCQ-~ zG^}H@h?3QcY#k$z&*l*U&ozBw#0PZc_yK#WzHuqcr z`+JKjSwn)>^-B0t9Pg^!>DSxcNp7bz+MD>n)BgYpo9pguxuvyV^tIZHFL5sy+;*;U ze4ftki9>9pxY%+`#jW!DJ4H?F?6uRmvV6BKf=MDq zc<{A-M@_o=UF@z8gGv6q$Cll$$5&O>Y(kd~y^s1BuY2;_f7{*U>|IS@+p)ezv_afj z^!%(B>qWGJ8H59ot~KhO)n{^?aA(rw*;Gc0#8BH z7*?{mreMi(^GeXv+urCq^d;WfEP3Ej85D*g*#eeqjEu3a*4!z2YvKJ)POcVeVcY%f zk)I;63L@#g!3nHW}<9c$dLXIaj?agdrG4b3++lRlowQRc^TQp18E|V&6Fq=xr zKy9e=R96~2uHam=ojyMz?v`%up5^Oe<1*ZJ)O?yzp@Ul=QCV_Cii}pneEpJA?O&L;~TOl_&9BJ5{S>nCgQoS% zjQRr*v!=zuq|F0C13Xm{*D;}$?3OL3=4t+0x_4XK%I|S*?h@lN*e=$s+Cl+KTYG8> zTDKqxH93>h9W|^c%cPulZAF~AxA7(^f4Z(U%geb$MzL|UtM0X?+gbH46}zB4z=9!^ zG~l&d`J4{iv|QV2Q|{2hd9L$ayWibD=Vqv&?e8l->iaX?Lv<~#+R9TZhAJIgXO!vZ z&z0k_ll!>p4QfZ<{T6zTwnbI&N4R6kSVF*A~pgf*@hN{$~pey@bKuxpgG}0JZk#C4B{_;x+^y-|tlltLe3D zGf5u9=^l-Ky6=B>&2;|&tM2{JOZOMJsnFN#Y(8$Q^zVPr_BXUUKeau&?TwdZ_Ad>$ z?e5yxT)BGJAGUkBOd$H^!q(7+S%BuRQ%t2 zKQZb$uA{8od%aD$w;$!)WEy~i(oSHRnp47<==xdDD?+XvQ7m+c3eg`LiR+D1!5f?) z63rRXBzVOK<@rtlCfaMU0@Cy*M9+YdI?W`;84oN{&?#CTl&tAAwz#RT!%s~(%A)n*$Bc>eSVn`#QiV6ymO3zV+ zDr1PD4YTA~bF2V<0-y?D(Iyz6%tVu&a`;XHRol`u0^{016Ws;K^Ld zU@c{JGavmbVrM-hNw49S0B#0e>o=K(MCs`Vq0VA(;s+yY^-v6FoZNJP_9|oJNaDRRF@$PmOC>BL{g&LgwN&0a&coNj0J922utM3KY3A zrHPS2N>@4PD}^LA8AAn(iTZMYM6*nIK#v?R(1{4#8G|MUq2ePc$^>VJB`9o;*K`#t zq>F|LYGs)QgRkX;Tp?cM80bK#sVApd&c7@IP&AXr0UJa%x=-m$q>^CGNP&iEwUMoHMDnhn zOi3bO!0AEo7y;EcEQ@$ExYWeUYK37stMw6(t|rP#3>69)srqCL+G0QkbLofP$+IIh z*kf!E2!=D^A`Eo{JW6vbh?8!xiem({pAbZ5#*3yrpp){!;6qJkflE3VmsXiNM3q^f zSujEIz&5i8XfgT}^pm85I#NtXIaY%Jp{0^N#`J(iAOOLI0V3r6B+O)I<%hs{VFod5 z7V2D(HB_2GtP?fBB;!E~I+p~%6!B%O^^hn&coZ||)S)-PVJ+!mz>w^G#(JobBcT2`78p@vje63x)tih3zzZN|h5(r~`beLi zBGs4U@qkk8ok=19TXoX9gutK_0-)vj;`kS%%Nuo;T}(8pnfjEHa;(T5F^#PGqcRQl zYDO%oLo$*Hg#o2jCr^~pOya2D)7WJ(m8iB>$`LF{656YwPf!3k$BrAbwiX$tHEaj7)%4_uJmWrc3dn-Z;7au6p6x3#Is3itF;ZXYPzj)NPp57 z>0o|{%j$~8E5J2UQj;$v$%*<#oWzcl@Wfq8LRwD}BPz6&CJA5^up~E7!iS(gjxMRB zs__F^v~~>KR?<{3M`;uc%3~ul6!>DbC{Mh1Dm*PJS3T38~a?(@SAd zH3iNpro{n%|JD#1kcNDQPBTTni5&Gd$+;4s2c zOR$XP{Hh700N16cufM_6?&&L>9wPzT}G^f03>M?aeY-x#RkPIyV zhy=hjBL^+5omi$YMs+Qi3J~eG!MxBYYf3cu;_ES!Jo6;9k~3H(N|g<)l++CAl0k1U zm7ckrRHX9qZOW6J=vuGsQT;H^P}?nWS#?hg|E`nmY`<8h7>WX zzmWm9;@ca-6ifm^Es$pN$=9pphehU>EoxiB8GB0WQKUwY;Yn3JH7OdRN9SBiN$^5) z)ab@-TE1PiASx6jh*~HCMygOu_~DKkP=~HtEH0t*PL(A_pg7bqaVP zwNFT*vPx;FVf9ImtVX0(^8jU2BKj|lMEz<(>Y}y%M{)l;tgU`%nUx#ZD|OFm8gIn zK}>@}34j2cqZ!Ryb_puAFDd>6GqC{bWtUJ(K#d4RJi>!W8RjPr6_h;$t14L;xZrd% zmh|MX2wEfo3P~iCA}8a7=$eJ0e5pC&M1D9nk|Nro$W=MFHK8#1=Yec)EU5$2)K~=y%Png-{-Nqj zWrw<&T*Wdy?m3p(SF(LXARQDlnw2U{JAb8dG*0sP0!llJE&eE6w$mlG5EZE_Ow7ii zF{CzG&Eq808Y+S~yYTVNMbnP>zJanQ`p zSZ=bQ8cj)W+;J+*T35=YV8cp)Kzg#GkSR5Z%9zVK4JR4YvEActvuF}Du{Ow4a#A3< zprCIqe;hQjXKJn*maDv3BT1okRtKN$G{k$33O3xcMxMtQky3f^~w#!B7CK!0JwTETI7s?!}d3O9fRd%pn>h@$kjIzl*E+5zBtz+rM(WGV5X4ml=>d1zu4!I1pD$T(YL8;2`uP4SJ1k z;ig|Lo*Wj9&)n^!b575*_S$kanOLxd$V(iy9dyAJ*T5F`1^zE|~&<_EK=621p{{TYOYMk*b>wG*H((Mgx%xjS3 z5Wp6iuobSOGl;gbD_PgXzHr=a&QADpfs)&*xe8ge8-rRdnraJQ0pUzFM%R}_7neoK zwK^BI`*G~8tG5)FYl`7kJw;G+)O^x3$)`h>H`&}(e36x@jisngGIT!+!;3c3Lh?ciV$J^I>-kA5ID?sVL4CQgsgo z%=v%kimPv31j$0$l+R9KK!FFS$a!P<;-pFU1{CQl1n3g5(n0uUYED?2OP=ABz!h&X zEZV9Dn92x~^$xu-R$76FYRR@WX&>BZxFRJCM_D7UNH}o0n_?bxmKumNQZizPCzyy4 zmK|m?1B{D89ZC9#0d-IUN{qAq7->KTx-|KW7mZ9o)&T=ZF;z(X@BrheB2++C(pZvp zoW3NW5%a(UDu|{Sw1xyUKrKFCK`^2+7=)c>%n7!Yv=H$HimQsaEJ;%Wl5t6=pcfu9 zjysLP-QJJdS^8j&PUr#Cr>Grz5sto_W!>|Ci7pbskX^bM0s@3jDyWz%0u)Em0RDLM zD@ZdV5J|`eU}+Lc5<&t9fLp|3s?u$M(WaeE2Dx+qz*(v>@2Ftr93guz?T}FwjgYio*&1 zI9hi!Xc2H8VgCUp{IsE~3531Tbdn7{&rG?OGYr3O@FOnHQZ zHNXRkfvuNf26ANAq18ZUFx&G$4g;lTkSGk$_0mW65r&iCfGcuP0@@HzLwSo6QU+mw zfjEb(@e^%pk##AVh9fah1RVSn0BePkh6yGbw4n#hnbQV-sTIX{2s@0-r4ZJ=kYz>Fp_j!R*;fWC%KB1169)O$V4^j#JZ6trALtI_+VsTh6h(NTA{753aUs(ljdO(44M(+fGYWv43%bB2q5WzwSZ$*W@H?v zp~D=i>cjPY8h{i@R4_xBKT)k9<>QI9U6c(oeyj>9te%1(bsh#W?5ci7L!pR<6hBDn z4AP2xa8)+(q7uSM>NL_zFf=U(q?6JQKulq|=8iHFidJQQVuhQv&Z8EM7+Ej*V^Z6eY3ja zT3B}PaPyo(#Ko<>t=n!aTXy&*`2^I6$4>2h%E=_%P$ZS@UkLm^b1&U@2Mflp{`-~K z?Ti-Fb8~B5D$s$6W`UM6bem5BO;=%$?mfuhZHVIR@|^9$4wU0K-Np52q?_de+f{03 zTvc}0(`KNhxSPU~HSXi@t@;zi_LZ%exF+7?ndB1CAc3YV+E#4?z`>>pQ)bQcYKe;{ z5Yhl}p5Ss8$NQgk>^RWV>RI79(9RK~N?YA-A6BCkXs1jca*GR5ay`#0aXo~ae%^66 zP##}-%ky`O0?obO-_fcn1*=SmEwomcOL@Fu7iv{y%$Z*q+uRQqr0lqDhTVt>tv1%n zkPLyT)tN;6XAx^-R3wtJh%d~cRE;VC2go3GBnbZir{#>L==dXBuP!@F11!+UpX9Qz9FfIJ< z*O}b$9In^5`72ycJGj{2+wokb-Jz@|iied24DrzdE8)wR*#AyYM|2`#IeG zvhkcJb@n&g*Jbj)+V1%6=G&a_KFaQ{6Pw_BvgPgVv1@1C9F>lEozDLNZM<7$6LD;m zW>P3bV+NNZwOrAcw5qM6SF*!=PS5noQb7a*^wf=6nvWR%7@j9b2`5{&LX(gy`o64y ztk8IP<11e&EjWo*&nrREWXK?C9v`R}=~5%-hVNL7Q28uK2TcxsCVx5@&ls9l%A&!C zffSl}82M6|3Y38)5>8Nl8Gq$~B{G4C6&0b*Jb!?|3mD-7>ISPdCMPNxP%s&(s%qM> z8CLD1Xn^6vBcqBC@}&&s7)5v~s)KIN`V)mFn(A9iK(6;t7)g2G|d2l2#SM2 z{ON$d)Nl|~WF|V!o~I!>;2~PA#}QXhXwy#}K#)ynI!xdjZD^#R!&Jea5BzkT1~_=qtwbBY?^Cbpg!5Ey37fC4fVr4Ri;4-6`)Z^WWPm=j+UIsQL9RsrP*TjN>E zKZnfWncEbHsJUlcfIrH;U|~U`YfdEs0iVa9%x8tGaj2b@brPRC{Qf@-CuFtDC^%>l zo>Mh6$oSz|TFyyxz*VGp(hukP&Kqf{T82}e5H6rHGNuU2D$l@9CzXb|U4Y8wIuTF# z&&LL1IuAXlMl;|}b3Y!x3{M{7a-J~zJ3-aamneuCi8V1K;?`WS%5buoMTg9o{{WQy z1|Qt3(75dcJQ6aA6F>6CYVh-*1*)+VNb8MN>!)cj`LU!8k`R`5R9KeQ>ZpJ~CsRU* z`Qs-xvx1g}C(V0<*&Vi}xxVS)woC;2Z@sm0><2Fm&ugm!2>aT1@Y8~j-+=tw6 zW~;r9-Qv5Wy6=W6gNxy>*xIvcmHz1LQzE3`ohpi|G@1YfC`CLlbK1+whgwCGS{EePS+_;Du?MHn zq|Zuch~~6Hg5s&nA>T&X$N>u!5d)<@7|l4;Emdts+TFb|001fC0g*l!CGa1KV%^x( zkUE(k5G7~ee}+0U%_~4{B`nuG_ZYXW-3+2gVI%^o*#ZQ?X2sE^4eC!fGV+{(?ni80 z*>6AIc2=0~b}k$%hS7N#dF+N>hvfj*ra3)Fqucc^j@>ruT$WEd!P(Mvdz~ijZ&uTs znlrmN&95P_+VWcjO~GO=UA9@3tZsD^bqO9>WvZy8isR=GSoGWaXIE{F)hRaoPuRU9 zuCGt#PKUQ^nC)%)3tYz<_Y|Y`pnGBNHx z*Y(}cNc9DEKk=^lZ=5y#R;cywUi8a)heY&-KgDbk@FP61@5vfWLa>wsn)!f=wuh8MAZ8ICXI$gG!Lgt59VS%F1bsv~XnmV;`YKN{vttP)AI&kDdZV zp_M8t0u4v!pZu@@kTVhB8a^F=*B4fnpdztTs!8#f{ylTUwOyR83g&tOSQ?)xCVV9H zn265`zF(*tZHk~w6^X2P(q}qQVXkJ=;3wKI!byW55fl9S;>1#r4Ag3zfa^1rI%6(I z-gE|>cN9VLRElLFfX*>FiZ-}e9jaUtg|IC62cCinTa%j zRv^>lFv)tznr5_#kE*fMka~hJ(`!vh{X+#oF;cOmqJzX&z+r2yr8nl3A$pmu43H&A zh%iNPKsMP@A~iA7K4AbvAH@Fv90Y-@rD7y?6vz)B^uRcfN|8V!jAYiGMQTA91H?u) zz%p5&P>?!!b)mo+-~coRH9#jx5W<~5JRzkbv0Ri8B8H^IQ}Q?mfw|LNP|(9D$o%O5 z90J$CqDcgXgId9m4RSstU|pp?z*WQ(DruY(1}iX4Fyb6>6F?c00E3>W6A|D+#a6SZ z!HrA_H8iCLS@aadwGIHGBRK#N1v1R)5PBcO2mxR|k~I@m@KNGeMq}nD54;N(C(dm+ z_Zx7xcYF6A+1PDBySTgMp&)r|S|Xa9fI4E;Tg%W%%Y~_m@@?sCuk&5=%I$bg3v9o* zxyQEXS=w4v8i3#KwJYwNEea{q@HlP%0QYHV$#_zkWGxde!bH+Krm_?{3=F zx4+-Kw#?W|mf?}dZgF=NTX5G8(RIX9V*_a^eYqS<@?htk=P|+d&AvyLZQrfFVRLoO zcW*nmOPr1LS!?&-cerD3X=MN;B9KvF05O*K;-Z_htNR*l?b^@n*E^3-jtj){lkOk< zjPV>+`+M2m#q4bNpK~K#wY=`_@V=d|#9kVdjge6IIi1)(V!~|*t8~Y$dXKK`bhWiM zyw^`&^Ud@giM_vNZRHrBkBL0je&6pea(Tz^&vUz*dEC6_^8TT7l6Sl$Rc7VV->jYd5qs_VMnQQhR(ZMOdaF3#iJwt8-tpxNhz%^#W39^ZQ--2LPQo-2=j zBZ0E^()Q~6TTSKrLZC9raaH4`*(kK>vO109wV>yYR@83Ri|m` zN3;I`ZCoE~?Y6s{9B^CLblqL`-M*{am;{#Cao3BpUi1047l1;>lb${EqV(;ao{Fg{ zpTYjetMz?u<=vvq(dczIDRZzrq~iGd{prbV_=C*u6KleD^@bac+rIPU z`!~Dpo4vu_=WD*dvtB=S$n1AJWa2jV&eYr~Z&@XRnZdcX+lylk1-I0;;c~XmOnF}8 z<$F`@uKxhJ9izbQhc~zO?~U$0H;mhDeQlME?<2L^yYKF8Yyoq3w%Lp3^RL#(hvSIp z>G#(w)YE?Ii_BO85%%Qa8EKiI~@{|WNo%LxbEOQryNDi#@BGxEv1wf0UDw!3~J_aDi7bo@Tu zIfk`!Z2iZ_^R_vjC3hAs+Ps$RzoJpDg(U;!Om%Hqim{{0j}@uSy|uXamgFe$I%l+# zb-wMcCf7aNmUtb{`(=%nC)<{3&oMGCZV}pg}dwaP#A8>d3-g|}jE0*qU{{SIlXQ1~FVcgtb-FCmX+>%_l z>f0XJxpW&(1QNLkIO@Lt08e(`E1%rsT_x3}*|jFa?a#GM_Y>|1Gwu&1?grzO=C^!L zaqygO<9EaDclWOBdF|Tn$NvBbM*ijd8{1rdm9uMaWLmH+uhJNkg>Iv1(NZ1_Hu_sq z?ei#R@AhxnjjyzQxykU>d3*fE>ze0xoyE!S9>Q!m`#bIGrMKGfTs?<d@ukIe^4I*N{Oe9Z~+r}{{YP!7K#hx015iNHWVMj8E<_F_A;xCvUzg~XvC6Y zpn;S@_>6P-mt6{pjOmmM1V5YPMv&khh*kfgM?53OBE7l z!m=wPI{YvNZQ8}~Qb{AAsHxQ?_yT_n0&P1_0)Q1H5-Ml$q;-Kf2WwTV0#toQ0O%q> z`NvRj(N$^!B(j);3-JJvNFtR#>wusKk!nn4dQ_RGSO)-1YBwT87Aj3L3jXQ7Fu1m^$~U*n9gGu;C~>3EhZ#2Fxw*C1*BxRjot zP*`8?5DBi3O(f;ud~k5@kPv`ifh!e05NYul;Q%C^Py&d9T#kC1DF$!=c?l{y69!3x z{NT<28wmg~4Wtzy7-|zy0-#_4#Zqcp$^-)fKqi0=v491(o*?~1oiZ0tG%@fP0H#2! z7!rCg0FuP~N7DpnfMK8|WT*wBR-z}zrcH(%JIaE7ohnSh{{Ua%iH9>d7Z~CxQU{45 z4Q6Wt@fatx7IZDUo$l9YBK6YO1$`SzE?m{%!eLL$;|j)84@|Mgxz^35i6(h&m(r4lyyY01-@AO9x9&dRq0)UvcL9gh zpfweQ_+y3dy~i@}d1~~VTYg$41dYDWaeal|2Er(XH&lrgI#p-N#0*Mr@iug)()bt4 zdrMZWs8tsWRFlxml0|1cC!9zn7$(|Fc7~-zCMsAFQ6LY1jApNaT3U?|k~JQ%A{U^H zt0tM_Id8->$3lQJs76(%=RP==+WMJQQ>GFm+5ius2#`xChJb1$=44aD8S_P^C7Ug; z@=*|75U5r2unne{GXgXJ0Mi~A*)*z~(9e?1>5iU&i;>)_U0aQL%Q}LAWre+LX{xdC#~$Oo>a8_{%I#HC zHlA+pjSL%ky;f_lxVg0~heH%rxoK|}(olLuQi?R_uaCnViZ#1UCm7G^`W@+}xhpXH zb?$k}D|@?LxJB4(ZG*QK)Z4hqflCcfxw~C|qDnVWvX& zX>FQWv>R-0D7i5T3o*>&9(47z{-5Y*?%h&Jtvr4^3}bQ1UAwtkS8w`vSwV8UR$-^p z^z7N&yRxmckEoi@iNQ_A?vvI&B1?N!rF@Iy`j#8dxwUz0+jX^RlSA3DWv^dHANMV- z;;3}RbgpeRrZe4cwTifsXKu@jvTHhiMlH*38sje1A41v%k+iw1cC;+0e8Sbcp@}S8 z>FZo@Ug`NbM+ccS+D*P^m*1g?avYcJ*6X(7_2f;xKd^}=nI?dw-9uA5eEdakRjg-)mdi8#$~ z?e1FKxm>4z%*B>R8#{+f>o>1BVQr;ty{ky0(iY_DY8f+*S4%^9%lr|0R%s<^YqZ5%m)sjE zx4f6HCbnI&ZT#095LVE)6oVC{p172+S#9WaI?~=`xEB4wTO}WQwsyXxww5T{v2w~3 zKBa^wLP&rK0(xO9RXJ-9@dt$qQpK8~XRYCn(oGV+ICa|E^sihB5Hdb$XQ+x{u z-eZ2-FYYcBBn8{C1ZtTR9b+18sa?tiYw|oPWR$zKU6I?nax1F)o5JCGwRRU@YjK^C zNe0sqay>v45U7Do0RzjFVI>l(rzXE`)z4{#-nDyeVeE^S85;2P?ya)6naxa{P38FH zemL8f6eR>&t+;JL6LGyzJq@$m+iKPn-D`K0l9FcbfXQg|I&#kiuUh$5rYmO8R-@yA zi0^N`yEiVm^==YDDqyKC7TN?$Baf5`j73|IHm1}{tCnT|08-Pv+m+gDw!Wp?OX^&$ zy(MlvLcXm_rbP^5oX&>2IA$}teTBO!_g_nmMF>{brJaSwWP>I~an_zV(O}NjO=D8U zzPE6Za?(cEP$OFnZdTu@_Zff$hxkG1f&NBTZdd4GyUW{TyLn8l!DCSZHE4q?H&rPn%@54-8_s8WYlGpo zd!Ad9-`^{?xTx*!oKL-`lPShT|-4g}tubFFlvIq=s8| zmcVPTalkHaUeXZMF*96r^gC4LT+dy5zpS0zPgT6H{@>EHjdlHt=J(tEzcan$IZJm3 z8@jZX+ikqrk4DDRaEw)UmbR!E?l$*qs_GFsr1;?6^zFW_TKj%m*G?Iq-0kW8X8koQ zwRO!`tn1!A+r7ulc6TSouXF4!*#VKZTdSJ)8%{#WaccMXZQ2R7yrF|4+#s+qjCvlY ztmt=Dddj{@#~wKkQRzBgQQ3Fs?780ss%GWpHrxkwZFhI}uXAt8CCi6z&RDl;Uv0W@ z4XZAy`gfkLmA9s-v-M6rhktLT^$nM5INjl8!SL}%t#tdHU#IR?oBnO5{yL_o@-;s9 zzx%thTWiDjzZr9HYj?cb+qKDT?%2D=HNsh}e)RgDuHOFO4=t@kO(f&MTdVaxhRbKG zQ(0bRr;9yZ%u?pwWJ5p_3vl@5rP zQGd6(v?y(lF&Oif-`eZ8d3PFWHRC6Rr$N2Y?)}OpuICR(MWWX$d$xA3wd7GZqi}zH zZ+BwrrS?XfqS>_!4(iRVA?>jQB*%s$VcVvo+kS2~jZ z1vXx?4ffvV<9Ek$Ng~d|JDw@3k*^pRR)E~|FC+bXUVrf0C|=z42(okF#x z?6j4a%;rAh_Xl{lZYJ|^_J#Eub6}57>J{>9E@f|9+~_4*qD^t)ue;B0GnJ=j#GYkz zyE8j_CTiYCxb3Uovvpb4?W^Y2mINtKNtK-op-yA2G3H4+_Ly}I(f1n1ecV2#*=-QT z?c2Fw*-Wu=VBHQ%%UD+P4+$8JrDs=F`EfCK^CgKiqjJ}6?RR^1V?Ms;V5G1l+Xq>= zl67j*^Evd#eRh>psO4M^3*Ot7Z$wGo@`{@iZp*#iJaf8j#vJ@I%Ga+8N_Q*(wYF=2sOi)+ftHuOa7}ZrHv4r{Pqje_W_4tp ziklW~T0m0m(k^aiGtuxf-ZN}1+qU-=ncSaJsKhJh49&YOIO+I|cW-uV`%7qa=)cNduBO+Eja;IU?BM8tyNKB zLO5Pry-j1v^8z<7bxpg8=dzaW8>UZ`uC*#OlbJtBGG`mnO>xA#TMCA?etP3DxwGBd z^&LW7+)dlpR4iK?c)ZG%+S_>Nn8vD!;_D>kX{W~m+kWQx+2;1AxQuPx+cQ(vT#j7DGzwIrj9nAL+rMY`2xj7x%zx!8gUB0S)8(YI;)!e8cowASzo=32HAEei>-FDqm zvsdQ)bYHpZKI8SZ(d_-5kNmdNyS(=`g^Lz8yFI4UZL#BaTWfn>KaJRJ?QJ;jH)~}@ zyE{#e(#Ts|dlrxYssQ-Ou0KUvblcliqKd8u<=4HpZud7EdyUIvTZP^Dft{Y6ogwy6aa}c@T5quiNlNzN@mittjzf#WJw)jfX*I)z+rVj z)*;CufHEiGaG5Vy9so#k&p^T))n*La1^J`HU!x&No4=Wtc{s$LIud9fH)WjAe zFh;0~$B3pb($cEbTt>AMLSV?u)@l6lQpPOI6W~9TMi3P+W2*z4#0Zn0#}7ado~NL! zL`^9l3?{&-f&rE=ejgYeCjd5=%%<}b(qP00>sUTG1CMb~H3bYn>PRv89|427h-o${ zBOxcoL{Og!j0Ke=tYsv1r}_+Bu2|v#$TbA@lh6uR@feQqDoLKP`lmV1BbdNVlX?y7 zP!H-ern$$;NjPbxu12&4T)CKq1L+0_iJu(so6p9B5$-@B%E_by=BUZMJaWJQ8-i3& zv8I7A1pcEx561*?5^1Sg0}i@?T_h9dq11DTCZcc*69x$i#g+^$37t?TA`Lun3Sq+? z4hNJ100KO701UG6oFgkV^z8xNbqY)Z-!f1C0BQ~zF15rh7}lmDNTW1@GJr`Ea+p6n zIP4l-j{-BhAXNx}832j!8eqYKGQl5+EtrT^u*8LN_x*|-nlan zu|jf*i36yoTq*noC~UDJglGhZB*S>Z^pV%$g(W9G0%{CKK*31_&SN9imB1E;psGX| zB~Mda`oKd z390xPGnNKtYdKw+0kvv1$WV|YKc+vZ;KT`j!#6J#EBc5ch75RuAed}8E)~4fh7P&X zGBHs!0#AiW!+}+P0vn)}48v5&2O>z!MF}1mVQ~{pJZLwqR#?b$^+^=102G@1uzrOs zJm@z1U;?K|GeMaqfcyjwm>W|A=8hN`d&B}v1xbYj>n1>$@SF~H;6rX+Ke*M$a!HUN zMMX@Gl%`l(j=9Wd^b)qh`PrK&Z~!3YM}Y9aH8T%b8rEWA<-87%Go*D9@W2mP@f%WO z%8(>LfK2|Ab+=>QrMYw^M09s?z9mTgSr5MXK`E@Wqu z5t!?MV`2aW3+a-~xzryl$)cQ0KHLFG1f5dlq>WJk2B;l6Wr|(nK(eYU5KJ>_p(c_f znwl^fV0smvJO%?SmXH;^pn!GiB$8q%K6smH^DBgo7YcxwANAJ09S)*mxT)+Vw5^>W zi+<&;Bs79lYYPSpj-s`mm?JW^WkS?wK~)-ADgZC~t%7u!p~4sWHuQ)Iol#3ari%1B zPO6hYYnb>PD9!~L8dnzo0Jfu8AQfo=OoIRz1TbUqrW~nAWDH16_7}#6JB)mSuczYX#rzMDthKv3W@&!s75Je5|VPbfQ~>g zbdq4kW4aQ_v_qNu+0<5S;M^OICz~Ad%5?kU%qBJswI)tw`@0 zyxvk^W($}g6DK7z(zuH@v?e^#v?;@arC`L!pF1e10ObxpEJJUZRY^%g0oVfr>bMLE zW*&dhOpJ`?F?OPI)5tkoc0|+%K1|f!_r~txds>7f)jB3_&$XO`H ztZbK78bERhkj)?n0F~-V`C+ItZ<@TUH&%xTH8Xu^L?99gKLbBH;$mKOM!Y+SrJ~_x zPfV;0IWf{{AN5d9DgOZ3mK;J`|G}WHo5*4PcTK>C7?H@SssjK*Dg=bR{gtsH=?k zA+Af0>HvVIgE$qDmI~IX!Zd3rZsM<*5TB-`8G=MEp^yhSJ#gN2)HwG*-GpmM=*6Bu zI_^}=d4iP^6h>yX#&oT#GEKAvZQTqQ9b}SBU~Q#_J#|SnDh*aY zOcB$h3~9r>NvMDkN+=BeY3L{b0;I_Xrv`{mDg^)mBBDV6fJvo9els0#0&PCxh$P4} z(!McD~Bd?WM1)R&whgbgBO zt5!jXn!)(a0+NLRn0hS2nOG$#4OR_GgG>aZ*0=$bgQ_L7sU(RqU}S#`1uX{J88af3 zF(lHaD0O7?yz~ z7|6y^hY_IR3=~#rP_rUrfCRuTU#P5MG_?*@sLR?@p-7Tg`J|G+^#PPc4kgm9%TmTf z+}jLI6tVIEOsoozC=@CyI2un6v{-Hncchb`l3Jm4eIy2=n1TU0nqs6Hm4H1x14Kxu zVGRYO{;a^BxKd)<*MT19+TONUFxJ6+AQo_QpZa4BWg62=jXvC<9$c~lS%9dT2`yMB z!xhVzl3kOu@FIFen?Wd0LY2}gNE#k;gq-@~ZLDxbb5x^fYITXx0Fg~3AJnEL508!l zwaD9A*R7^hFc1L}2Z4{$KQn?jfQ@6wNhWnc)usr{M@3^k7??7Io^$|MLIb)I$4;dR zrK9N?#*je#MjSP%RO1>9w%*$_P!?e$#f1zO`XC&KOh+oLw6fS+>BglUuo9vG@}agQ z0{|JJjZ={jF-l?{2mTYL2(PwPduL1n#te}{MzG8Y6&^YC!ie(r5b(KHgYCDr>fjQM zBx(QxC}m)RH5H_IVWFnhco3V8pY~mA!rGa*AZ)4xoS|-g$o6}_>uJh1q(H~8bb=sqxBH9G^xgRb+U@;9H_Nj z;oDEBtLelbLsmk~8g)cm3?^eK#Lv$pwb`Kqal+je?lRl9_bmn?RHy)uN~=MEaz6uw zBTe_F%N5Q#^64&sTx0~=kNb6@Lq#CXO%61zRi(T!@rFXX#fAsU&*}L=U>Ny{GISZN zWt3ss6?tF_b4g}_EZMmnz389v4&l1ki1Zxo5O%(p7VfB>+)MtS#U|N=q z#~NPZ%c`gXx=261zCbjwgd`H{BkE8^d@vd>%x2=7qd`dx zq!mU4um{Qxn!(TI(-xD^O~y=iTN5$!)|V1_WpXe{Sj(sWSjf;krI#nkMPO zwmDh9yHm6-S@gpwK(Jv@NG^301Q9ygB*3{|azXfZBEda4Dup@ZR$ilt1g zLB1wgw%eTwp-PHS!PcrG6#oEE&j&Jj6S_s#+T7KsX(2+YoQzZf;-N(jB^kV_?PZpAX1kUf~p3u2W?SO3;~d?EDBH>qM460<_#z^P)=SQZ~*V5T&Vgg zD6tixf@H&yUV{?U=ZXU9vDvoi($%x2Kql?bX4tZ|Vjf4F&y;64(_?P?)^M?aZ7ocO z@k?54+Fds6sL-LJ6o54!>MRVIG{>H$RZ>Y{$-IoYO(0~(S6P*zCNl(2!|}!ErhDnfheF(Q6o^65@P~8AN0si-pqj6|(C zfPR|gr=SWAKm<%N%1lVa%NRgt6#=T+ene5A0RWmt8%)hvR~GGJ1UgJAs}Whq9a13E z%>;}J8}2m3!x3pHWC&?2X;GJ!2{~tkz-+-GrjTk#45R4^qF}Zjf)S{TsOf+y8P=8h zvOYMddhh|{fI-qN85GFr2mb(y5KbYCGF_m6zG;&aqyj(_LkwoU4tM}+?TZ_PdpFYC z+G}M>v7FD40>J5lB%CWHbq!!JU>t`PyW-t$*b9GR?88tn`*B#-KcalI^2d(f>A7b0 zMb)YC9NKQdL{&L}LDa?@R4_CkWtWeJI2w(08>)UK(cS_CxSEJBCP*tV!kq!Z#tBlN zaVZ(Xs)%C}%p**iJOeTR04yQ@0FHH$#b79N84)!;9|AJL-Ym@UD@vVHMLM7XCSr7u zPM97&Fv}hQl|uqT6hJ(>6=z9ks|hqUz(Y^th!(*Fhai{)7Lqj|3L3O@@W502Lkn|I zbrM)pAa!b-{6Vis!cee-nQ7QNY|0SD^paF+JxG-q5+ux0m}0YQP8y6d!HN|?vruUf zBdiwrbjEX((Cem03Wa3V5*h-=f6_q`1Pt+c;wGi{4uh!uR3=@D)q$^CoiR$`=u%OD z#)6K(LQa68OoPy{%$&$QF*7E28gxh?F#}Lrgr;P6gd_IprnZZ}po_U(ej_ZO|& zQKU-%U4Sv+o*Gu3XND(avWz2<_g}I2+xB*sdEK_-dAVXNY_>M8?{`;<0$DBD+uLH$ zGXpGIqhR-Hvxp1iZR`8`){`Gxgk!{-s6+rBL4vKwhVnc0Mty1R}DJPXf=F397y~(wEKOH&RcQF zcTaKe@AG_%^4y)PJA~M5uWzm*+Ix$)+X3k-+d!}g5Ik_Ly493NV7W7$VSYws$M#2Q z@#FhEF3#n^!1}wjZQadcx`oT^?n_M0F?Vx@%dXvLx(vG2n|2q|vX<@JiY2sLNTvY# zQ9uF?CS|7e9lW+(ox-#*g9ONl`f`m?6{Z%C2As9*kTio5f6xk4wN6on?AwwnZ#sMf zQYdIaijWsEm>w9Ay_KsAP#WVY`eG^NBoi68!fB0u+Jy6zL?(io7bR4{kWN5;rv8yM z#5}cBm&mSW{JM;$MxB;}nlk&SBk zl$i!Bk^uY|3KIrmVnH}g^^6VTQw#RQ6Ci*nO-V8Yb&nMMk;w@rFWY5r6#8a4>EZR^BK4mfrh4V+?W=X{T*3mMD;s&hPz_*l(>V;jd>jr=A@ftrg~#lmiSg@B=WcP=y|8?$0hEE+ec?| zUfZwQmw0!7c_(%Ek2}5h2ebE`xZFp6uQ$(cc@2j>&GY=0?$0G>eRFAf1@yQ-v!sLs zMmpk~mP)TWb{X#7{rAgRtJ4M3?W?@^p6q?c_qV$qrXPD;KcELRhAg9Sc1l)V2Gioh8dSH zGs|BfQM63PQAsj?oiRMQoR+ZK99L;!QwA#oKaYW&J6YDaDGo@PH1Us(Xg*k^#Q478 zNCrn(&#Cy3X{nth(1DIUK9`VA1%L36s#!f)9-+`BNF)O8`#c7DS4Eo}j_c z6rH%iHgH6_yE>-aKoVwT=QQ|uj7qFNV6%L^;C}Aq21JNnlcdQNfrn`3hDSR{VBfnk zU5AJi8RjFdD}hz4WoQAsG@`kplk!7w&&3NW0v8S8v&R z8$3@OH+R$?gLS-Onx`TZVXN${H9wFm?nYO{me=-%-zH16&D4J^H4d6hrYEt>4tkk00#kVsYnHjsuT31P@mAk+{0R4!18ev}!X1=Y?*f z+}Qkzbxq5eGd-_t@jE16LuX>Z2T%6xpc%n{1taqq&F@}e&P396@BZcGIQs}pTS90u ztWb~QK4THjXo)LLbtNr?wg3tQkPRvi&PgK*)^^k+cTSmLMOJbWW2hf2P7n#Hj+hG! zL@&w*jDk%5IKEk!)&mG^u`^9I=m1g$3}#6`3^iq6r$_jVYTo9>^_w?R@~op9Zmz28 zVUW7W)U84@7)d$K9|C5rgmVKklE+&7CPoWYYMA+wae~jg=D6LZwYhh4nl5gaVy55s zwCEteMclzl{Jms}it*0(MoWD@|e2gsz-v0OV<<+rEx zCBA1GV8nM1vE*%CZI zb332g{u7+y`&YTUyMW=lgP&lWUlG6GTerL2>yiHeVCvCs=BgWo12q9S=vJzHt|Rm@ z-n}Z*wm;YUo@{$%?@r&`Z*)E2?LC&t#g5tRzU~ z-0!x}xwuo&4mL24K=P<|2y2OJ~>Gg!z__5NQRK6bDO9|7PfXFr_y;$5dvibw-iW2lMn>zyMT zDdonnE-)Z^k1z!F>j&gO{{X`i%-dh|vB0{3I;W_C6+RRB;=?fkdYNeev_MP0&rHF9 z3`EH=P7|*&b)s@EvSP70fzvTFlwxf}l%g7j(OQgwGC=c8z%_yKF^t3@0<9ikW2_L= z_&}xs{(^~s0a6T-M4AlA%K(alFnr2Lca!vMH~tE*EIXhbNe1FDfqPDcrsRG40vh9*cO zp$3p9vM{wNu2kP}1w#EgfHDA{k^~5v;*91-ijSLA4~dF=3}Fvl00D=^Y5;7eD^MVS zFis$NdIRMJq68Dr_3B!`_~EwZKqYZl^AqNw6JC_~e++3yGTx$NC5tm0pn??5BAx_i zh_sn$qyLTFP=tXth5;_cM`6#iQ31!dt8c)2v>Fo}{++FRy&)Hn>j{3RvY<3%g ze%{^POzwH!WwqMdAb+U?7L0}?FE{!}gyOoK%iNroE!`W`<^9L!Q@D4ja6ZGeIQy3^ zcDD{mF1Gy?I=OAdk^pBqjEca)_f=@pQ2zj6bb7p_kG|x7@cpv(D`3{UqnK_>xb9eH z;yVX|Hg_D>@!3e*t68(E&lRvHN2_x{ifWvAez(;2x>`G5U)=H?KS#aPG^tk%@k8BT zetq)$q2!v^JG?@9cXUf!wy*-QBQ1*}2W~HrLkP-Uvpt1#Ftikz9IDsQZTf zMV%<$Deiuo=zCifTf4CLKVoNM`(tyD8(o)gal1}il)rMtyY7Jo$BsT_w|Q>>{;l?M zOIt%EoN#o$pVal+lenKPr#~8e&io(iW2yJW*Q;&W0&q3SiYTc@xm&Bf-*7~;Y?c1aB$>>L8dsDO7 zS=*-HXSMY9pclL8uG@szC7(OC#=!{N`_d%dxL6M!nD%N_(!8%zz~6rR$|du+r(vFr z-s^DNo-5mpy`DpwVr=hw!6-u)9F6;D>9uT&VCRdguHB`r4tTrJjoZI# zJ&SL>c3$T9Py5e&dzrA@+u!Ybr@47O#^?RI{{ZdoZLV73c)MkI{wHF~d55EE7EMW! zI4!!bY;Y2#r$;59+>f%p*ze8W-~RxE>)QRV#@^#OE+>>-=WpKRc|&WLxG!=$ou>Ua zw!K@Ipp~_`OSVRb}`pZKJoYddeXyGxJl-rnJRYh!7fjp2BGmkYMF zelD@u>~^cPwzmXB3y8G_kYgNGwW%(@OZ-lSMQZUbTsOBJo5OKijt7bDZrz<+2EvSQm^*gD~W;636{yy4Ga>1Q#xXrSQ1NQrJ zHsM!neH(xKeIfwcjWK6Uu^w1~OiSLgS#ERwrTx9Nh*&Q+_P`Y*P+1_Nkxvk5~{xc(mI%J%-K^|c-Riuyv z%=`rYcuzSEJIQE(g``kO8IjjBL4>tq9t#u|$YuHX#th6Mz(SLhd<10pF40GJe$Q(9mG zq{qa56rPbuk$?jdRM#U&jHfw_>3|9%pymiN56|?7_+SAKiOdOzAeb@;2k8-j0WU*_Mx%*1%P`b4A~L0BqxfTwfoZ6fks8?*Qdck*0VYm$s1?fu zkF?l znI>Zi6I7ch9ZDIEe89v-2@z4y{{S2e94kP?)nMvRHkgSmFxANChH5z)C(LVEB29V$ zNYC)VCZqt28&H2B6Q9TJ*Wg(l0p*#qD+{OV04^IyPXCq0<|ROOaKas{5~h9bBIs3AW`wD24lgd zbMPWCfGUuBWl~otpa!GofB{lo@=)H5kZ( zWxOd*!}(wVN)Qf^1obW9G9qY6%K#J*f#r!)rXoBlW9mQ400cTqlTW5aOpmD43PuLw zP%G&LiB$qxU9^P&)Gfx_g+*k@-y| z%kAxLCCar#cT1O_$#c_#q`CbDw1|_8lXkYblcSezmFA4C5jw{nwsbNf^#HBwkXf3t zLS!fN6N^f;&2?upw=L00hVpg3{`f&w)#pafT8-RZ*Ehk(CQj5WO{0n9H9FmkAc@ z6DnWn_zoRKHJuF-Nn#Pe8B_fxxNn))y%SrirQSxlxJR@X&MuM+X(D5(s8FN~V%)6# zM(Vd-YJCGYE}&T;DWC^XWRoxgnU?&pr9}Q6gmT^?<;iG!$n7`RO9}LqE`54Qg26}d z>5Lnzw>6%BUlXlS*0WruS$BKwy^=?(Xf?vRP}?N{Bq$EqqV*W(zV6z$H#9fHf;ZdR zy|9$k81Ey#u+o<|9-}6sYR#oKTII)xe^TXA(s-DWkjFmlww02#rSOhFGq+}&iKkV= zE&OZXVEevNPxfbS*Aaf$B%b!%CiTOrrws!Vr0b*<9L@Y z?JS~cQmwZ)ku6xau1~DCv5=&bzod+Rc zu;y-AwN+~-;ej$qGmKsCpE7a!!ZhUsN&dJV?)AA`%f(kVt(b22eP@bI z$+5OJt=(mdg7Yy%Wi#ra@_J4TgF25~J+HQttyE(s6K9ve*Zc0`+ql2B*<0IhRA?r{ z3xFcHF82+KfI8_D=6DQhF`c(-UoCQt>CI;_YwqLaEdZBx_Y%#^HZ_8`HKJSro6^;D z$O#QtpqUucYjf^Od=d($dqi)+hl+uUoQI$g5&BHYVdTb7usYGI_?BAL!3DHUZ77No}Y&)Ztaywa*yTYwmL?O(tOck1M*eJ$ts9Md23MlGd(g=Ck!Rx07E0ajUM~RJ^|v zzizda5s!?P6gPL55Z}I=Wn{j_?%~dcWArG{jLcjlR7Z?r=-sI*6}0&82d;G;cOX*i zfD>JT9-Zk}MwO6#H8TS|FS}OZ>P3{~wq3VyTz9w~zTH~&E!<-!0WuhQkL`=WXC)vh zp!{)iwJ~WD+KBF4- z@+w=^3TZJIRlM7kaUJZHa&yNkxaIq!mD%?1ZtS;Qr!&f4HhBI!Xr870$-4;5#04pC z(us23P@^74?rm&Q?(en9j_n@~^T%4ZwW5i;Ju?ye9>@KieUaJhoxa<;d!uJ-lkZ+h zHm=;I+UyeWR2HpTkjw_NLVPjmexvHUoqtjGs+#Gh6@P!3-_vyUqe(fu z{a>m*jO>2HPB&$^)S(jY{{W5J+S{TFYx_%O?z5Hhn?YDg)RqLCW4Ex?Rn*lxB^{YO z_e$2wwKn*vld=1Ih}&+q`zvZTwr$^G`{z{h+_Sd2nryzBt&+<_oEbRwuAgeWs8RGA}Z#ih&AgK0PtM)wcHAmXyEW1{=F~ z-G-)Nc;`?r_g4x2*#7|TR%~zWUDvX?$L_4H%U71`dUQxX_XwFaSm}gm3o&7EOP$)h=)&vf?cau3@)PWAXSzQ<#`v9`5x#?toaFt@fIt>nC@nwTMB zqB@LtE#LWFJm06KzQTI^`wwa9mq*p|uA!&YC7%57E<9D<6Sz2=yeBvNedf`2j4nRr z(B5x%yUp4lxSKm9v#s^K^|(f>K|HmtJcmt9uB&70?zGf+w%=jT)mwj|-mg)yuQrPb zCEFO!VS#X4?dP_f+V$#drkR&AJp5&2nS;toQQq$(vhmPs`OVuh-M1ND9yOX`_?Y9QyjV9jV^rf++C9>=p zZVODr2DCs8tH{JpTzIX`%=0cR@~ft|Bj;H(=Xr8Ad99Z52JY$HU$=7Qt1W>xkh82JPK&mR?HSwZ;~n(a|>5 zv?axFHPnFBsUqHS)Z<3ZE_B@dY985+?((IZp0$fkMZs~EZMDT+3AYpFV`Lp)0hTQ} zitrznBZ-*t8*pwl+lr+^twgZ5ZHZPA#&z6yr{g%C%v+IYMY9#x^#i>-?_=5feZJT| zyS(=D$!(^|irrnN%)%!lyGhY%(>c>`Rc>4WL`lY*TTbs7s@0RZYS%XTFY0ri^SF0A z#<_QYzuaEk?k<0Gb9I5ga1zd%?yOr_R?>h#Kwu1cI@6Y^e~QrOdyd%Q@XS-1=I(~H zSnh8)T`Dd)D|+0G7S;}hb~+dWoIW+^ra3lvs}%!8j;Gcip&x>htspJ+alU2q+10U zh1dZJc!TEpye2Ug*s8CI(MxjRxo{he#mn}07gg;wn!e+0Ew{SrSwXwECsDcCV5AmA5l^UJG)|T)dlG2zNFb&g#w0K48ygQ%D&^wBtQ94^QrH?VLSDZcuKndR93j zv)y{cUA8vfiMkAyYnGr|TXypTqZGW=TpXG6+2yY9z@N9;4f~aS%G~w+G&{Rne^u@^ zrd9F)3z#H90Dyi27t76VX5m50zqyq79R=<8X>(k^CB<=kZrblV%X1suuNA;>{)g>v zavYuQ-L0*yqnkioy{hHSS6zaEZA(-s$6m(Gw|6VIRNHPod=4J7sjW8cdwEhv(Z90Z z)N$U)dwIq7Cf54z`EhXb9plX)P&vNo-P=*Tx{9MpY&gYHwc0AsShf#bev|2a1$qvd zZMgf7HjdVQN$Ndqy6&m(IptVOgd0JawLuCX(qPbZ@W+#CPamqwh5f+>L<2$~mFjCE z4_r#BT8hzi+%{+nH53CTk^nRxIK}XUXAwX2lu0lFg@R<9r>F-iVT&9!5_H$YF24$4 zlf*#8iPIVNlS&M{aKZL*3_%$Qni)TjTHpXh#SBo!qOvJK0f?NW{&-_p6z4RjPNU~I zMDf7jBm)L$emV8|;iTJzsSzVBbPlAARlJSJpFrYHgiN$Um&N*wk%$O{E z4Ppv!5C=?#eQ+cLH#Z8by2u6FN=!_GWC)R7olYEZ1ff8T_efBz2UhVXpaziu zP6z=txD)j-^HyN6pbkLG4g}PcZ|P9S%O^|#NG@{EslsV-Cy{UoiV)@iCJcad3W<;E z{P1LX<;JiwZx<77ff5A46QtC9D}%r*3VUZI79?f?nFHW+mOslZ16sB=h77h@f)0La z3gtt99PlWUKU4?+4zW2Oo)E@vUPN75rm+JuMqm#d03zO3T}v|)rfVjk9=J@KK2;$( zl?HQ-a8J}vNU0wT3?mJ)JKP~Zw7U96ptV0fkY~dP&Edc|F9ZY_3P)Me35lS{VWQ~N z4coX$C3FR&X$D}gMa=o9t_D@Kp5lW~ocW3RL8T@JS)b#CVga}kK-9o|3{;66s8dB`L*Cg+}yYpRZB2n z!AlWbwCY(g9Wuj6F=rwcyvPeBJgh)4Wqz#903V(fo+P)Cz|4P43V}26%fsSuV3CPs zkQKCuWr`6Z31$Q7CqB5PoSRkQF+9l+b$o!+NtguGg_9!*#|=odP64fQTO% z>q_BSHxb$uN(Q|pTC76~C^4w!N$>y<#|{vH0aUvESp}KTA>t%p8dw=^L=YHxXu3%x zQV1eM{3i<{X{C~twKAb#2ohA7Cb`Gy9tQv+mT{Na!>nw51HDRutI!IaF}p@NwLbdW$%Mpc~u02~8NK?>ltafP-ppesU&2QmmT0;eIC zAL=I5O372K4K-B+$rb6S00;(uJRD?B*^UC;E=s?dP-!aEFigae2EW4uMiEw+z|-7- z2oidamr*1P`d~AyKrTj~BKfM+sT#9ADT78-C7{*KMO#UR1f5Yjg*sOumxdum z42F5KOjSELo%#O+bKdxXe5$82A?cncrGq-%3Ej< zHl_srni9oi139T8nc*`#Y7x2t3#ZDJBVJ=FwsY43RjO)O&C*@GlUGpP6ptAKvD2;@ zUrNBMQ5q;(4zJWyf*3J5P}j!@&G4My8?Ng}K2fNo&2jOgVx*Z|ZnFd9Ibnwg}W z%>Mx6hmlM}?;b{S0dh)#AQHNdnCT#zpNq`8Zf}sV)G)~gR*=#LmXabGvz*p^F+_uK5Zb<% zQZoRG&<2`ETpHv%gmMe4=<^*pFox4u{U8zeP5=T`h(S!|fO&M7AkribxBw?jD=NlL zkUXN1)qo-h!JsDtQwB-WR73%&d5p|ZYWSS66y_u{umKto5IW&xuMyC(CMqaY7}6kCDqG=(O`c$E>S#Jfp&^2qfn7E6V}Nx++cKr} z#Fz;38G1>n27VYwEu0Ee6%rwb%xV!N{NVmrY_9Q=r$Y!WK_W;kG@$~Klwm*-Ehz-6 zu`8FD2!Koh;Af@~51%TKsUtX@M@)bZLjo`hM3NcMC5qJjTABe2f25I7OeiCkC0E3Z zZCeV;SiQno>*O-|s1yq)6_}p#Q?kr_h91K@ubFkM!zg7W15Hz2q*Ja5HB!`!Er}5E zrbs1Vl1K56!v&mGz9RvwFb0A=+G-4y0GW=FmKQR0&tMTWgQO5E<|Gd*8O^#+&kwv! zc4{(gsB*GgCrl~kC1r#Q;+2UpP>7f=E&n^zy{S#uJgbys z-=0XR-9`w!EuJDJ6F-MX_(x zU#K)d1*5E%aKPyWyfF)muZ9yc+RQ+MZDql0Kxoudg@H9X$kkm)K_L8aAgf$PhQ_8& zhEOX2h6L7fXaheS@tv2IB{E#4rve52j1Z~-*33Z)bn0e?W2lp=nHqRtvx=(f{{W#9 z@2R72mB5+m900cZ;^=bq3O*(5V54)CeTZQgV#3 zQDmiIvH#)IpqOes|@!)7)sMiEZ3)jdLiN5Wo@{ zo`f#4-;PHPw^d0%rA(!%ZN0(yODgJAX4X(iD!)`AAxQ(nEG4-`l(IJs7DwUPriwjM zngc3^6#$Ym)Km$W@r*Y`6U2<^-de73>P5vCpGxXdOsfXeKy19gX)~Q`h)|S087rCP z#FlNx5H!Nt*B}9<0Z<#v!0C+yf$;?6O4ah=FYY$3@xZd);VxacOQ?h_bd@D-#T2-M zGg^tmy00sC)(s*QKd81{;K!Yfr-mZqI+;-_6pBuO%bfKdF^)x%w<-%o{uzS2fX7fF z<`IN~(GYZn0vP6V#U1fCp7#pvXc@klNJ43u8T5 zQv$AV#L{oEmgnGZg33eMP^t){sCHuxlTZnY91#o`EXrgB?aS8S3q>T6a^{93Sy_eB z3jzjGJaG9Gb3-jU@YI`Qv@f|Kmgx0VGCL7B3>DDKK&8Q!N5d0Z&NX72MCfN6SGQiN zv~@5jJm}V@)~E#Ay52_Bu9GqW$3=Fmo|+ln?@Hv{eZSb2?X|GBZQ3@~n(YnMX8PpZ z7b*q6Dv_3T$3m@b=5nA-s;ug6J|DM5g%<_6sL~k;Qr8wnu&~mrPYJFBs@r@P2Rts;W#VAVV7FOh#sK0V>72n~T=1*#_$~jU=c-s%KVFHrJ`k z6-~QtzDnv3LoQTZt+m^2)DZ!$Jr~wynIMV<2j`YN*3Q*->Z-NS%e-ZYC}<^`Og2hP zXEi@8Zy6J5XMq@!&{T!2YBV4U7}Y}2k?V%UoQ{E{f`DmIOvEyRY8%X1fEA1lLS5qw zu_Te^l2;%p1g@C}F@a%20d$Q(f=JTZgDe2i3nn0dKRiekIh`Z|L6Au#{{Tn^q6bVj zqFx{%XDkVjRe%Nw1w|uQP<$}juP=K*KFY&G625073Ie*2P!wte9aPAJoK8a#m9C=@G)I+66G=X4{!?1`;n(UA+uLGG zGLWDs1OEV})*#YPm#@baXAc-)Ef^F8+tENk0K|!@CLo%|Cdwas88Hz;jLayPG8zRn z1u?5o>(dYgXa-BMG!=6Td1zHN9C(z1u68+a*IDoCN9jH3#W4~VWIYl5@# zBivIhq!412o|PhnWsicBx0-TIEDZKG9p9}H4iZd!kCEQhACp-PxQ;`J_qRrbjY8c006d< z6h^42h?vS%vzhr}sNw>aLkXo=G||42gpgImYPd~fxC}>=;cjh(&F0CX+=jWgO+kF;I0b2u3u-dj$x=)bN%GAy1FypjB2+mY2_=Cb+fXHng5F~u zUZlzR3i*+u8dJ^B9$Xf ztwG4mV1uByNw4~2B&H+gRa;V?r41{tvaSk}qfk)-pyUN(#N%1YMSh`bC=jfQ5{PFt z^1+#5Akungh6MuB7AQ%mOoD+0jDVsKjAC1BfSpq+Ke!aJKm;)W5awjWW=J{oz^t0^ z972R-r$Hh`Ca?&_Xwmxd)9X7tLlT0n8&rQMC0L{joU|pMXuHE zt?CEod*gaoq#GPY({Hk|C&KAhyx~3R*{Upl_ygan(F;)6sX_c0Ix`NBA z=`jSsnh{b0nW+B&Toq|N=uR|G05-gdX;1{tdG(&SwQ7RTmZkyj#{tdvU$s8u_SbE0 z?(zM{&vq|!ahw+OZ*i>dHvGoxirgl_?B5V=UOSB{8hoVA1!Sz6SxptUWVb5bla_gd zz4w3L&vW*FY(0VOZ?+xz+TP~-BY%qJz2e{dm9gY|d$Bi3+g-JLfaSYSdCy+ex9$|~ zJ>&ZJZ`n6Ooi`}h>Za{opWBx$Hk#FE9sd9$3rg6&%AdPyrB<_!*82{)`(XC>-c5&k z`{D0by&FE#?XKbXgOKfguN~Mulgf^7hwc6=w03)qosLU?%BrgGxz1Q$9;3vnAXAnj zepBRHEe$Pw%kNi3O})NVALRJA`yG}f3XLSh&Qy>2Qyi9lZuDtZo;Zc1%MUK4B#5S= zGc)v=G{Q6t7$uC2Mq~59;J<65sQG8)YHqCl1rAU1lua~YU24l`a`XMpV-te~nP zU@@j-pEpuS$Q&l-&8;MkO4(0vdImsrgF<2>;hf}p;ddF=>2`W)^8t`B1!O$YdH_5! z>DK`(vw-~hKrlg|_!u*njt7IS!ob$Gog_#A6#XsrS2|CD#k%xA_gm;kf?bxwlJ`Z5&x} zYpRiszMk7|9q`j%GZw8p)QRso7wtoh?G*06Yq;NVyPC&gZ+)e`$nqZCc2_0Y3E6zd zbl>MK?krp8InMaL_qP4tcJ9}7!P9SiE%zbWO)<9hd1&oS-$*c`wVmsC72Llw?Z;#6 zJ&?3mmU$IW;DAXX>mrb39P-DFymLX;q3%kZ2f>1TtU9rh-x3UfWc)EEkb+$_9$>?% zlRp6;3>j6eGqWhXHA)m7v)I0VEJ7 zGeMn3L+A0pWmc8n0*TQK8cPri&(aQGA}N5^3_Q+pS_1|F282du0HyYRXen(vRA!)< zG$uj#jIb0W)j<;?k2Mn@g94dg6shkVQ>Ilx(=-qWQ#F$_T(AsQBoNR{3guZo9|MI| z3J6!DaJ3y7gC?WujEsr^I?wXMDpSxLQZF!Ic?+1QQe$9Wk4Bn307eBU3byS&5_x5nMFwY)LY*{zA&>p(KxlpW~ib(Payn zLudwZS(XBzDbx8L0`kcOYA^r@i8*ArE&_J^IU4XQg2&3G`~_4cOMgNfE$x};&g4TT-?1r7K2yut`xoq z(rWyzk1rv}Z$#|4ZP5gPx3`)$h{wdMlJ)swKH^r388o!6gXzU{yP!_vb+y>6gQIMX zxVi+N*KUky1vt&C8Iad)i_S=>V%K$&YlZi1!{gx%DyW5%0G?(D9~yoo`RxJSpu>1zySy~ z(*);O29wZ|YBIn8!79-Jk2DD<+wA8?)W-rxI6-8{XkyXzd6BX4WkycOOn zX?K0fr#0O7mx|e6<91thYx}L%&99rmP!{q|Sk{#1vQzb1KX>_LPRgm<-oTjB~t(*W6wM+#SERd*1o){vQ3lLv!0HwQfs~@194B-<`O-xaO<_V%uDA zNZ(Re^v6xQeqGA9isn~_pEk12I`7`8^GxcevAsT0Yd>i{)bEqQ_b+R5-sy3@qhqvr z&v-ev?~SI%X?n-FT<;IuTdR8x8)^IXZIIbmvZ&W=*e3PeK~R_{8dqxD%{H7uh27ft znO}Ev{!OV@S4R@omB;JeU#$Dj-ki@b&EDku>z?5K&DalZIUdUPlVP@7TYg_>+_tPQ zD|Yt8?O$=d+ixP{vt3{|in_Fco&By$D)RZ~UI`7^+R=Nu?W(q)YfOXLeWTp{i`zcz z_P=g!JMQPY4fg|Ux;Gn6SCQqpJ8Roq{{SJk-fcHLUgvhVb_>N@Ys?)j5u{tvR18Pk zP4ZF|R_0l%ygS=^UEb1ZFOt)PB5(T#zxm!W?{0R_Yx{x5ch%kpy>|Zeb6ke!kl1j& z!@lG(ch|Q!HoMK^-f?o%Z1j!3+saBDZ}xWE=DS~EPMWtrq0bk!6Sp_~w`Ax3 z*!&Ko_K(`D-rIL~dY&_ewZe99aCVQk_cnVQJBPT7-JEX5{@b{>Ce_QAO71s9(>Gp8 zy6Q9=%Ia^WsBIM$B4wdJ!*^}y}T&-Wd9nx(4` z{^zgD^)U`N*gel=H@XjU?$dF!?%wWhqPShB4-SC#&7)x7Sg!+T5j+QOEbn`5b*t-p^CDZl8T~QpvB5^V@H> zPkuK3?sgY%dy&N`vD}?ugH(PTWNpb~OA3*wl zS+m!4l^7W^#kKACcD-b2 z1gRn&8FLS9sNNBdog6dAG}`7TGwD))F#<{HSgD^1VPGY~To~8@)QF+X)SV|PWri&Q zC8Cv)0CY4E42)c-SXzcSiPTa@g+)GbTH)35YpD2l$V9B^Qepy_T1XN;0&yztbD%hB zKH{{1B}HP80E%Zl1b#TadXqh(3i+lgD1R!_b2z1(jvVrepa&C3sE|yEsLSJ*TxYp2 zLaSt!MP?J74RY~0M&d6IlYW&|+`EQJCT>$mReNBC#W{!hU#w z4FgP2=?WwY5i^%rG@Kd^9keKoG9xi0EXe8jiRpk(SbBryfj&|6n$BiuGX`(~?DbF# zEg~cd5>G)n;Y=3l+EBOyrPxx0gA)Rj$jp8?axO~*NLzZSqzxpo$|K_w7@j4(QagtA z(u9dMiqC+E1}TeC+GHsNgE>@!4qpNY>4YJunJ4KjKs7(-ovkUNr^8+{goIcVx)X&{hibK2>0>-Xvh=%+_pS9gOxo2JVjQqoPwt&DG^(St#)cK-cGyP9yt$I$6Z!yf5>~-(A-o|r1?RME-J@_u)+W~Ox zP3A#$*oxoYsr4>g3f@s_OAN$DJ&V%4x|OGWCf~>6dj9}j>v1)rvaD))S?wp={{R)+ zHnz6yY<&cEw3hAK+mH86*a$sQwzqP-D>n=gcITK)2*+;6!%$~9W`R@u3@-rkc}{{XV5Jb4zOb9Njq z&e*du9hYqP7k9c`?p1yhwzVbAw`uHd8(WRtx*KPk-r5@8__X zp%laN)p!e;Om}cHO}5RHX#h|_ITC4D&-27j6rpe%ZRKeN?#|T|uaxu@1o^%o3fJR= z?%FD0WVu_k0Uk7w^pIkJb@OC#5XgI(E>`V@6zd-`O#V1Uq)N7#b&>#rBk?(cFau=7 zSy+>#3TdxX6F1{8fq*F$ir2^I@WU5~Vn~V0^7x;_0AMjDW&sd91QH~%@SGtI zsDTAR8H!inbD0xC*9o}*gqrm0&{Ri{=Y#<$Q`hMN2$52HNgi(u060jVrh0VJ0WeR7 z00+dLra&322sH4>4~7681!6O$LFqkAKm+r@0cn^t9wtS9q`{=eOaM?lD+Ch*#AI@l zKZXDmMC2q#g+UB*5&r-K2N>c2ki+T@AXJh8h0Fp-lUiVj96khVm-grgySUrifLqUc z(h>}sYI;Y2z#OcH{_Vx7{{Zlo#(z}q>;fQ0MZu<6B?xW#-Vr3fFUKqrE4#L4mCA(R zkRx2~j@(c|=5{2=1f|DdOwX92G=r8GGFbtuozL5wyW2gU+mT)GBYSe5j^4)KaKlQ; zxpM8+w6?9HuTsK#V=L}Tg{abNQz17LA2fmE9VTb^V*^Ize1{Fmf(ZbMQ#wrG$&yXs z6dH2+geeCiK4P?t8fx$vR*e}&!hrxlB$7c8W(6xUNWw+YH1a5CkPK%-Gayfa=rGF? zp!vXpD+WysAb3UsET;=mT2vD(0sf&TJWNgjrH=4Hi7Eh9ZAVCo{;$rMMr~PTh7PqR zhO{DPvmu6Y(+sL>18M^1awNbRS1Q%88U#==8dRyF2Oz>^56=J;C0Ggh9K1-74pW01 zMAYgolIBPRNHQcC1_?eBfdWvVPcbDx1ppao6DFd7f8&EZ1_4(uA)v;cAc~2oC&c3? zGyTRo1Om=tPnZuiBRW(7FxQoNfT`640u3OF#2K%{I$>JLtN}w%8elY^851-3WrzV7 zIcms31Q;=uMp6KZ8~`f}glYz|VzW%dkUkgy8<$qx0%QotK{9d_B|CL&E1G8M*iX-?V|WmK>O1!A$1 zkYiC5%76-~##eItgsR$=ugB&%A4#P~Q|1d?5yTb0p2MXJTmze@vR1 zN1M$MK3H^I&&|OW>0P?Q)Sjx!i~&YKe4+}K9eyVo)iqdA60m1(UTMl>hUriNUn~;D zd8D_}vEmeXVxHqsT*Bf?r!#Hg$l_fpe6a*7l^_T@PLN>!l5-!96>rL-a8s+Zl(Lwj z@+)Y6P^kLgK=2S}%swKxo@%&I#`)8f(H*WWT^O5cN7eO$W@z39wW*9svq|#l->A78 zgyWh%L<^hH73{F}g9s&tmt#n06bb~=xWfCfhnCK&Y`9mLU7S2S%Vqn!Wk(|Lw$bO- z{-Q|zAyAo~v5t4iTDG2e=i~A&oc3v1N-SHRM&+A&cN$Y!0ZIrW%P@d6i2^ESrx-om z%EH`9EO_ARuFYM%nwSrAZ%f^__IVqYw$|X>+u62S^}%e0TaHW}x{@kEFO@OkJxBe` z%G+xEyJ{w}m;Dbl&{nmpR;1nW;EN{XoZIfKYt(%PUrbpFR2J3M)HVCg>^w;WGBDQV zT~(jap=)pL-X5!ogKzm}7jInkbnN!_?b~r>2zM@I+fs_e6fp`WnVH5e-f2$@P{Pu zZp2%+TkXI$ozCVpD`>l)>cZ3E%u`6wOH=PrI&Tg?Tg&Aajg;%FguAyW=YoCjD;Zm zHJB6_o9`|;Y)fj~$))9=$ktq+CYycU=W_bqzRs(A za7*diSY};D<-)()MN%LM02ujVZMk|bQ>K)yqG6iG)$PkzyMJiyVD7J8{pzyozq_`& zK-A<0{kS8`r0F9IZ7btMJ6TUMSuIT4ZN9cBE?1LH%JgggQEu{x8b}y33Kk%q zTFh`U{zr3jkXBn-ZQRuJYSOZ8{arAtag|Ai0(`V2R~1{@){A{H`J2|NstE77TXt66 z+etfpZFb@x?;DS#HUcGFi+d|-e=`Izt#nnip4@p>< zuUch=RnKn`y0sIj8~xE-DwtcgoY+(sM0w35iUnx~dgG%BDy{}rs^*p0S@~O=aBWSS zsMiQW5z9iO0sDwz9lz#-~yhF zPMdyk3CNN$J2=Ib8#mpn=T5jyWanP$?j83jy0gP@`)$_ml;p44+HJVat%kq4-`~E- zmeR_iwx%vY5U>RF#?+;1p6=s~wV9KbcGa@wqRgx#*YB~PvWtDZmV3jzcFDQ#ZQYxD z{q4uGuW!KZ?Yk7&arbJs2-Ftfp}BD6RAa#PU044AQHnWR3n@>2TaVmHS7U8GcewW+ z$MF57wAgI+N)qEUGexGdgxIlU>vGDYNxgRD1Ekb^F{Z}FBD;x0oj-G{rM5YgXW<(< z-x%9o+2!~5KyBMx(42!-A=u&_x}Jg zn`${)Y4-7hIpKLbHvKQ#6Z?-r6%D0w1=qG1D*`~e%xRGr=;`-7tCjhh#~+cGQ?}-B zq?p%q^80;_yW4H;#1@|7-D_cm&BETi3H3JTNJIhF9Z7_UHO4(g;@hitZCmp?dR?_| zJr`%-o`$~QdF|HAbGaOn+2z%(-M6vY?*-(%=JPG|+!JeGp?L&DK@=5<$0tjufHE)AzL=rb8!Go z%a2x7R#|H>G1JuVb-i6a*20P}tFYIk+UWWlE#9H4TUCtz0Amv7?RQ_dyW1O%Lw&O3 zc(k?^xh_85?86ZuwP-a+`CrWh{3+z{{Tbkn|7rr z>v_@m79J8{4b90Q^?>V|V*JcI>yKYj8Kik~fT}|fITW!DfH+TI-dk4`MnH&30 zXt+99L1lTz3bna2m!ah8bnKoZ!}2s|G2M!7?snIj&9z}EaDdmWqg`UYqPr09Zs`yS zoiK96(`C9hZXX{V##@(mdCQNF$iZ)SfkC*lySsOFb;#T5wxv+Itm_2<($H!^0x?yp zqH3?rAGyQ15}U?M3yS6g+_;y+C8pl*OO{{XA0Evirp7ehs01324bZEe?tJon__ z>o+N8mSn$ew?f^!%&KnM-tI2x)KoYMzM2^z!cSj@HNAO{6}k0y3>(vJuiawLxVqM0 zOKG)bU?Zo*h!SAqO|=iP9J{TireX+ai*eT2@>>@4CD0fRWO>T0RZ7T#5%9*oPDY+w zoQ zk-y|F+}v-uOS_H7A;{iqmrnBi)>libX++r4fB=9kpaxXOl3R4!tkq3t=a--KIhWI& zKU|WNlYP$US@kaZin^Niv*@+0A;T(1rf$H3K+7yzRJ9wd%;c1lT+xE&scG+7{msuz zIv4eXupxx^8rjY>^+!{8HbEQ4?}-}IL2LOUhIZA-0OK9O=8OfHZ~ z&lZyBNvtmQ1n2T0lVy~_BIwY-BYLXVbr1u3htvcyp{N+yI_Xse+g}7w+g@-H?G(AK zg{!1_ZV#){L?h|w)vQw$4faG4IPMGmqWanQ?v+~Ao zZd6O2@SY|A0E*%pZFD`g(Qp(HDXbC_0yL3cpq%kLn@jD=*NE$WS18P^?GDw&-`iX^ zuEJhjxqw4B4RoRnNqEwF9C-U|H4RKZkL+rYi8jo zQTd)e_Eno%%00IG9s6}1t-|bm^6!p0M{{!37+u{Jx{>dN19do%@H?Z@YKV?7t$_{>Pv!LiiF#)jDzj z)Si{cv?Z%OO<_k6S&)HHdYA>I3ebUqrCKosgfo*V*6vZ??C)B_+v8HgIAA%P24 zERYPJC?f@&j8Yq0|To~O6MJDOnk5s@Fu-UsH-eg57nQ>7Y-)@Z5MD#;gpax z_4DUxoMxYDmlHG9%o8fGwLpEUOg>PRYJg|C`&Go<`ZAL>66BW;%L^t~t5Kma6?kfuQ^IztYJJSP$m zwImmpVhIpP>o6*F0&q;=Ql1Le(L@@_$VvYIz~G#~MoKJC$Vktx^#S@g<|@7%}oFqVNeP$|RQX9Rz?TnPE?0r92I4QXml( zU;#4#)|vkR8Nv=AGxXjEdnUCYC`#A05g^3@>wzc|tf8{O#RylJ0to_!2_}Sr zfESk0z+{;Pb!KxN56?9p941wk1TZor&*TB|IgnWXcm<{aYnKO<52yj0fP5g-82s>p zF(9*$7J^IZtjHNtD$iU2#BAOq(O8lcGJ`4yz=QQ*9ieK$_4N%g3?vCKC&W!Byay#gUn1+ZfasUM)NHRznPtOucc!h@_h|ZwCYo>C6 zP(<|UnEwF74W|B_2}{BoxX9`ty-diVB4mR}ApCIBWhCdc6F@awaHayROA}t5T5E?U zkc4(+g$lu{OA|m0RMsY+#}M&uZsJ}D&$+p8Nc5eQ(^DCS`b;R3;XVTr_dA$1J_DtT zDuV@x`~f7%YGsXDhC@whp+*2AvLG6109Pm`l*nKNLk>m4iVmE${U8%rGA0NHzBrle z2P*|J1i~FUN{vN;Flb3J5-Xl2GTPCPn-E8BM_E9!OC3b#rzJ61m^tB)+_?csVhbXd z%*fIS5vfFzs1Fm@<%T(dzf(=k1(*B2Z6_rnf?^E?F)-eb3xR*)($WF8@QWpY4!|uc zI#Vzvn7BZ!xNt(rWh2kGV^9&HFKsJ zdf;zSpw27&W~Z%l!_XE6pQ}%pf+XZcNE$(!c;PX&mZe)_s0dP|RMJ5vBuU6(EpA<8 zR$qVvP$X%MRS-djGysAr7)#4s>ItNvDJ)<+kpKk(Uev&&}4C6%1608_WQPE2SBz$UcI^b@$TIkA8Ffepc zjF_63T~aAigF;CDn;18nT7m-FQYoa-!SDpo;rJAua2sh7rlyiLlQEGbfB`4?;pC*! zQ1HesNdeGHevs5%R2pCk4~=BtN)#3_t!y~A=MI{SQc$%dYx-CZhFA=n;GPMJ?CKy} zlF${6R44BzXBLwgod>A2vD`^4+2_VAh zFb;CwY~rI2Qi=%b#OeS6Dn(e6Mm`6p=Y<5gvc{xm^(qz%0%!U_gQTzZ8S%m#Hs^ro zk0~r9tw|bTveN@SQ-j2)L6TGj4X%=Nfs{cqMtNcQXe_tfBMO~0V;YSs2QmgxIgA`J zs7xgzNuhNDA&f~QHXTVB6FAD2ZRJ7}wo*dGM42D}Ai&ipJv~4jX^jE2+;JLV`k2tL z2g+)-Ak7FSm|f#eaozz6NnItu5(^4Os;MFfB9-WHBQ(6+MlLHe0il;ED+>fc3Ukx} zukpZYH+4Y)Nh_*B3Pi{>=qgC-o(>|9GkwTlTeyYQfrW+u4O1qhzz|FciNkU860&HH zZ2Du=VWo8)DnOD<2{niyNLCOT@G_~2r`iU!`u zxo{9P$&Vof#!?T1W-^b*7M$Cggc*_A+e=ymlu{2_48pobP{2fdaVrgJ_>63zW+2;V zfOP@{X`%XPz(DCtX%%7);wS-GS{euxfluwJ5}{%z;W(z($fnc68dMH`n3O8zRgC2- z37|Bughmy9lt>DU%oYJ%NN5=crzU9wGIGj%aAISLOIRDbX#vx4=_D-Ch*D&V^=!Ta z6KA1RQkuZuqCi`MfzFkRNP`rqEt$ev_Z3|s>JUPgy)XcvBpEal(1O!7#os`7OHmrw zjb)XTk@)KRzLA=N_~R)v8*RFP*AxKYs-0DVCRBW;Bw$Y?R*XFXwP_1!CrKHCD9zv) zK^fxz0LLBx-em#lg4vHK)0hf+g3>ip_~JXq#Yo~QVnUz@0+uzHCJD~4N9BVH1uDmg z*5bq=nT*R3FeZ&T);|mwVs5r^t63vk*e$T^Jf(`3B*AY}#)OjtJg`S;QxZ0&~$kpXAQNil@$gtSr+l7YYW`+7hiC{ZvJ7nPVj3?GegNj*3XL&*qn>E=&0 zL8J&XBth{2$sI8{;A4cy?Zp6$RFcAw!E_P~F)ks(#&{o@XG28Xs_HUdC(FvHbnQzyy}gHS}0YeP&+rCUwF zp++)WF7YhZy+LVCU}=S9lL{mfG=o`#h~<3ES40r>S{8fUAC*3#tVmpdf=p}EBx@OC zZV`gB$5P(hA#G*t08BQ5fGim$#-5XxiNT`F{iE*DmibP)ui{AA}Cs%-MUX`aH}+qAPj5&cQl0-=)5`GxyZd7sj>@&UG;bEEAAKU9^KsG%aNJD)Jb!s52Jv9j< zI*eqM);JRE>a><+dtN%-rYj1?i%zC2egRr2z#Ql?r|JoDdY7f!ohM4w46_rY2|iLt zpe%ZI#I-sWtdRIZ5tIWZ10}fC3<)w#S`X!i#7#Mstd83bNvD|PRf*8x4MqSoHKs=b z?czG^fOBSc!c9oHlhh0nba+rM$U5t3Dl&lM0_*A?9!1{;rNR7=SW*p zbd!-*HK1)#1TTegQc`WWY6G_h_uiXDc~CHum-0L*{0-a~8nX0ThE>L*++Z>CTYV|R-n#=l1EvZQ><`Ba_pwH@<8hVU&5A-RNx-#0;sZO;T zz$AhvNXir(XtCyhG96UulDw`ol~pIq-C{_9)YB$EEJQbyRQ!V~s#aEHlErlfpVH8# zVCDGYpVH%40ldfr7$%SmDFnbPKuJ;N@cH5Zct@K`uy!;RgQUn1!%YSTpB(@{Oy}~L zq=|`|5Pu9zj6D>Gb^^2gEPPAHUZe8CAQ-762eLXNOnj5DcNMM37XL zE+;zuX0jL<@W!dbjyizYw#;Z@NP(mpLdb@k&tHHT$-IE-!2w7F07>ZHV?oz5&z60%U{v<2N${3`+$?)FDBXlCTW0 zV$}o@7+BSS?E>p#tMsXY0Ujj8g&q+xjaO)fzy()PnrRe@W*KQDk@EbpomZM3f^W@^ z!H`l2W{5P>Bo3ucqC;ngW}Cvu#G|o^1YA-;fHE=Gdd>vW*GMHVGkyVqMl_U<`j!kp z0Dz?Uj45#q;gsAd1cq~^ijv-GEIfokfM8}a%L@Ylww)pg^R&b+qcC+AtdKwDhLq2M zifA5fEg*`|_W&f2uxT2yC#C=#RSu*ns({%|WC@y>)1DWI#b8Y;K@v%gAQE5irw3Lc6G6(oG34LZ>`*!STjfI5F(}xKp9BFwN+L@M+t;V zi6Tm?{XoPnpQovbBM3Q=>gp<_Wf2BR5J1ijpwUr<2zriLC0s-R;9OB6e5Apk&3XfY znYy@Lq=gKmxNy=OX=F1eqzIUw3YJUZObu0mLXrUxNs=H}<%W{fb#rL(9&I6W zoeeqZBrvQJDin0_!y9(_d}JqtATjd=21qQRku@2?@HkoKPq~h&-{t|Wk%07*9%wxaQDU-sR~1zN z)8fStGB6^HM1nz+1c^0>!fCf6(g`3;ffZsp$imlD+b?an&Y&=0#3?c0K3))JxJlv)v*l7F zDQwLYPvS;@2{^iF$w^zx%8Drh7F2a0XFzL-N>hD;bxC)GKpkj&NCroTh^8b}e6~-B ztR<}}`dp}BVg!&4M^icC=(zC*%9oc|JgM!@7lQkc?w@x1!|p5Jo=bt^yA#}=?)K}5 z_CL2f-~RxS*Ad%2yW3myx8r#}>D}%3doF98-uD%u`=N8x^gSmExnr+$YIdu7S|?c5 zM-JmH^?Gl8yS`MapN#P?UdE@i+!x(%3)b%&*?oJ?YN_U}!HXa4|K`s6?RyVYR3M_-Ah#hAokq}t;e;ji>y!}S?Se_%XqM!;9AWo4^pE>?Gm*1&jd75dZh!GVr zSfdk)=Y7BsMuMaX5q$o%|qPSWRz zrKK!o$d{0p4$@2lbkidd88NOMVXjx96`MA$u^Jq0?_b-OcKd_wM(@7+Q<&@}UTfRs z>^?_p?k8<-d!ajeH#>&A&vu5+-s;xZZOHESo1HgxrB z>h$Q~cej}w3d z27r^-MW>g%Jyiga2290N50LACc9l_7u_ls7QffqlKxq~5 zz$$6;7JQL)m*V4R}4MQMOasW}eYnvv5f1eNiQhXC7w*kB0;RDqFzA|wM@pW%R9wN6%{C^-P2 z^b-@1HKkTC1mb(g2~u+uf@J6Lfu2}coC+15Qsv?MhQu`o(^*q98ReLY;gpg}7J-Hl zq(vlyl?`e>Am@M@z}amFrALlLj)$ataGI425=mo0b$|;=F^h8aX(3tHpB8ukB0!P>gHx3#P9#Y!c#1k|)F4MdLH?3_2*5ChKzwRqVL_S^oK0{DQ(VdGIS~Yj zF_5qDzyXs_Gf5SxFa}W+{6-wG5`R=o<% zAAlwfXFk7{7!@VD)XWZ%5gs%Z!U0P%kuBDM8VKkGO+nA&fCM1^W@F-f4~}C12@*$_ zNd$O-6|HDKf9Ze(C8;qW2+N=_WM?Nl09d(h3ybD=97gMs+NSdF1<70Gc%gNUov$Tn z87*$@+np_T!nx2+Q%q}3%T=Vlt{;Scgx-qFI)8aBeD7j*cXXaY?{N0-70bUbx7%$w z8=LL2-MPEl?47RdE#0_Ezy8+av9|_SQH=3b>Nji0zxMqFZMtq%CcL5!!R%Dn@%(c3 zcWo~p#ctPo$L!A!vTdf%djU@F#g??z*L1*3JZfl?NyRR&f18;+yb<;`saBH13uoFL zzsGkMH{Cm3hTHw~oc)mBZ{EeLn}uFJ&+YcZYjxDV+S*wGLaYeITd3TWYuR=PFlA-Mx3%J1&j*IG0?h+_=##^8r(C9Z7UF5EnxP-X^bbt$LBLyuB9lwE_ zv`gkSpK){jCjvn^!>k8=&jS)Cv>L0%E7!dJgQe=J)$J|n;>{fQ-F!8z z{>tsG#2r4PBM?Q)PjAg`+n6P+u{9qYa%^uymH3@D*{#~lGY0#3_mBSovG3kZvE{cn zt$Tmp_cr_occzAGJ1eI9f3kNPkbkvzgx*~Y&1AjPol4EJDc{~x8V18Ew<0Kb9fV6pCEr zNC@wlRHY0X%<(9a6;`LBnq~2ihf|2Y0#i}g z7za0n@{KVyFlm)!ocdyD+OWI0KsuRV<|FADejf;!3X0%#|U#82y*cqCOqB*M_9!|<&kkHX*tkVJY`3Zhx5V= zgbdMYNsoKH}*zR4t$~C-omF#VWTgeJC7vmR-W#+*rH5=eJh4 zzB0;s*LH_+meDP!)L(zQW<>yX0EO|KT&093ti29y??1RByt#k1y_nxN=`9V4V>S;9Cpu?Zs6{2Q*qyY<9gfOUSE}B z{BFe6jh-iD(YM;!wCxDNRdNSW#%|HsC0A;6QgBDy*Wc&2-qSwog5mcc{E)rLBIShb zo)+=BvEuKMCN;u24f6URRP z0PfFv{^WVD_x}KMIltX;+e_l_8`@htzq9RLA8gXd*7mJuco7N2hhZr1y6kuf(2=_CK||E-u}t+U=|@ zt-49&_m&rLwb|KAWeDQ-w{+WP&_D0pkYYtK>>QP(LRkDy4ZUY|Dfwj0Hhh)s?d#k> zw_7#eU$*aSlkZ+dN#nMRXyaZn8mD&s!dw+WZaRGPQcZGER1r%fge35rQ1lNA-q z;f1P{{{X35a@&(8+iZe}(GmpD z#)o5}&mkX){#aH+UE+Z>13wO*BZ(M7pv58}K{NcYz^I6m07Yp@uhTeM2(MdipzFP9 z00MPhMIyfz@xta$MgwP(5##>JIGj) zJiuDfO7y}|+;It&4^b1eIG1)ehW7gdA+Pcq%Yp<&4frI-3Bw}-IL(@XKmHckECK6EgE`?fA|`*eaY_tv`$Ga{ zY+6wS&_GiFc#LHCEiu5E9ZinGK?%38sznE*Xbh=P0HEnOmv+KJ8%?#dsVyke6$k+y z0!9m3dj{N~(SfW6Oo2a9sG*vXI7Zw)M1cCFgaT+hCZncu!}7u~p24*Ynu7@p!0R+8 zQOi0Hh8b|0=HeTuCPcI-5kVvqkR*8EEoUVw1x$>A);xOrh5%woW93pos|sllU{sGZ z;1yi?iY^2Ls-(>U2DvO(JOva1X)~hQh+s(qrb||Wa1nIcgc|ukDpjUP0!0a@Lm$pC z6snVz*anbEni(dI`k=@YK~tUqgc#9If25FPDLn{*fB<2tB_82Zp`<`EVMsBMI88_n zN`-=~A5Z$wOvFYQ6(K_cCM1ZiQ31S8c$+UQuF>cy?GUeS^>Jueh8T#oMS6*QEJp3J6$I3No}vX@%a{Zy}!QKe{p@h+Em)K1)D)s>QVxqGfsHqzWwjU z5#~0!9-D10RJ=!RXtNTk%>i_&q=`C#tT5^^jN`oO`&BMB3Wg+G49)tcA%#wmWMq6X zGWcr7>D$1P9sI<$kU$bZ>75RLJQ{cpl@|M^>s-=9FpSGWYW+2tBzOait!A7(4QmZ| zugCfeYS>Li;Ad|f#2nNCo}Z2;Qq>whdpx*76Xq(WDI^Lr4+BUMg?m~j{6d>`s`F|g zaEM%pCLm=>#-mFA06a>%Sxld|4hYxoAqs9dRqCQ-$e?4GBlylD)~w~=D_gv+NTn63 ztXRaQD~eLGy9^w2VsKTPh%J=^ zQmK%@knl|=f=ABts2`3hUXOtdIPagxt1hLP zZd^y13>ay+rVJX8tt8VGOE-qrM{4PGnAiZLpkT+MxYp{zv#4jQq~kqNr!=K1A&i^) zRaLG@ll``;oXIS6KqH~TZ6sB8)vb*m9^%iq1b~1Y95-f~f$Oo~JBfeblO- z=ymP%*~VWPEf+ZlEu^yEXeQvfa3#W^c|p(u>4TKcIW4^|7IB%>=zB`5NKm`}Wt(%q z7KsaVC4?HCf|j>nOoc05W^xlwxaPA}iznsn?C$Xrqi@W-%(3qIn`Rd7o2(GIE=r>- z5B@n4<%Caw#NT~4I=D8b%UDhsfO1@oh8N!D+m#?CgaYD}Nn#WUU?dn3mySGk=H)J$ zwrqJ_s<=sZaW#i4-I{^`+m*j>T3OoLDgvofqT#p*QujfF2g)g)IWN4LOFYX&c^$5q zrtIO;H7r|hd6?g8yPe0b$}Cy3=F=*b$#(WqEm#@(*p?!5IL~g^ReaCQ@z^chmZCFK zHI7qqt#;VB)~?;TrroAB9->QycRB&2mS`YT;f*NmSIl9!mD-&YXZ;8EuYT_6-F@xd zHV|5Ey|5n1ku7oWxHkPz1nMLlfTj=fZQ0^6!~ITe>#e$~)kAE9$#T0*nYDTCF6pjb z8tw%3F2%+n!`;43lb{HuL#7SRqPt5gGKt!E+-*)5;Qs(~0q405zRu_Fmu{!i-2UR) znB3Ygbbu|hirHq=Ac>M9f^p-ocCF1EPN;m4+)9q~0_OSc#^69JXO6H-xhBf)uI^!o z42rH+=BgoCAX5>0yC{E8$L3bmRhBbj1KxKZr?k4{`fRCnQtiiPOG-fs)~#KV_rP&1 z-ci!H!CDP!{LuyryyZ5QwyS34`}eKfP}0zDUvkP$vPfcWW(5bw4pYYlJ6TQ^Oh=dQ z%NtgGw$bj{d!=mKxpoGXTHIx}tD@GanPcOKSE_K-qc8UzbE&MmgOhE|i#9A=)ot&8 z?qd5DyK;Qs%nOPNf(AhT7|P4;E>yg)2S&qGUVTd*&hhmwwf=737q_&Uzj3;^dwFv6 zkNz~4EX~#y!oUIm{4q+tT;bw7O5EkOr;p%UxgEXdH|}hAn{Cyrt8V`QrY^SGiMux9 z?VZR=XvL}tdSkC=ZG8JoU6Zz6B*t#+_xE(3UggUM+bzYlYS-^J-b#^m?Ob9_&@_Uk z20C3^`irxzn{;Xt9lgojwPx*?Hig@hXxIQO>H}%s}~~SP!Uj-Cb^99m3E~~ zg1J&#A8o!@v$so@u59iCcNXbt>xL{WB54hA(H^1&X1F(Nd{=2DPA0TN+3be&*=tw!JFT^y-GZgHgghhWIm!A(8ObXn=83`kyhtA zNse8-Zy>z)8FshZLf&X{%OhU9XbTk%A_#%g#~ludURJ$^k8-I_utRH?w%eaiZ)vU| zKyBY1Yrc}n8i4}aqLNJ11)#&@91cz0#bp)Hw(s{hcQ+Z?y(`-FsZC0jt><%46nGT^ znc!3TncD8nOL#^d$?uZ=*jxL8!O?=7q_wgGRFyE~G&Xey@WEt~&Z4ZWH3|%4adz#2 zuKoQX^&;9JF*@XrQTh^U7y(Q})BfY4wUy;f_n22H&;Hu%i=;QCP+YbTke?{LKSr?x zDS}|lahjzp)t-d5)w#RQdhagfzrVR-jN2yTkmR@flVfYL+gp9k?{R+PXtQe8-rSbH z#6*x_u_qlnHLADVZYYJjxw$;Lw}|4;Q$EK2%lAB1?`iHAe{9=#-4{02uWjs`M{#4f zEnH{O$Jx9H7dZ{Ua4y~y5K(9`>-}$0e!FpOZGZYYehIb3_jVXK*{3p#Zb#w$d(U-y zQ?!$ZCwIohyCY`os=bDQCI z&f4AA{j+*V_IF#mPaBopDbzyTB&x#Bs?-cR)9-Kn?b-Wl^JIPJwYBzkmz$4rW+lvT zc3WK`~J=o;-%${?ek`qsJfaXKkzA z&ew$aKhW0Q?cGnj~c!u8Hi_fyMnj31(bg8+2j$$A!ZX^;8 zJRMrD<*4QlKfKoEW)o<^`ELEUzD?La?dVhmx`}Dt{o)mfOKi^u+L9U!rlLkV>$6@} zWc5c2vrm;tr8}>>uCB|}d$z@sYTE$t64k`IiV3;qTTIj9B#d?P*OfQj{SIx$==rMt zKTM0Z<}L2GH=5PKx+%4@cW|inR`f(#ND#La)aRZXs@DgL>Nl4*CS-4iyK3dD*KXb- z?c0}H-rc}i2*wp^QH|H3tuT^mrw;YqpE5EV8@78Et*P{$#fyN_w%xp~ZcSAeC8u0f zQ=a3Ga>+Pa_LGIchT4namfgE(i2`nJ90q36)O1r*@e_;DM+rHv9rMHEuz9W{GKN=B z2c}>+Boi;`wtltShd#ItOI5whCk_ldzrD{+!LxIO;O*PL-TRHB+&int8pmze+%a1_ zi=otuyogOqmgEFJW|{-n)9gLpGoQEmmwnpp)lp}|hxItaljpe|=OrAa-baz#Z?`4x z?{D90`<=$(-N+Xn>9n^kMZ#srb-^7jz!XLjqSXUBPTZ`;_r>o&U~bX*Bz`--Jq0ehebQE_~*GQ*-utFam; zmzO3%u-_);!(Q6kwRtWETZ+r1P@nA;xuu2Hp9z5@7~8Y_O5};=Q`!1_cN8t&Ea=AS zS}ktT)(d)UzIXF3ra{tzXq~cSHkW7st1$AYHGmBaNW|9trgy8W zhO%T9csRB+*}AscO|aU9^bsnj!BShG#9-r=~f#7dMr|sB=T|$+GxP+On4!A8BAI zA(d{~^&J4KGpp&gpy@2aWn;q$RnoX7_IrD7)_FZu`$GFtz1@$(`zf5e{5p@&NnrG5 z+j-TIO~hbG6{?A-V6$G5F>q$?vX|6H)D>uDq?nkcXGC~l6seV|M&$t&gIs|pAOz+h z&KWU~s>DlBj+9~tLopwQ9AZPjrX%W-2BK7|T7(2ZC(6WWq41alXH$l>6u1%9T}qy#Ok_j|5m=EjFcU4>I1JfcKiWQ_wxAPm zu=N~@LlIdq{4kvG3ldo5Dn&yR8bKnOvN`x*Q^QhQ8*p^Wx5r56Ol3m==Zz})mn#}_ zxj?uwPzGSVL;?jMd_cve2m}I}zM3-3)J#-#1c{-p7z`DL^J?_nhzeQ_A|kQoKf?zy z(dxi?#-Par#ZIS*oX^2rhk180bQURSu#XhGNr5D5TMv;0Vtf?Ni;8ub{L8b+neK>!+=B+!u^+bhGwH4~? z5*Gq;lX}2-1kA7}R*}_zQOK`DroRcmD74ItIRs`jDXwZkSkk@{CkZ)h7Baw6nqg$C zRA*Yq1k#5LZKbJ107wKVP-H0wss5McR)fDjD!J95<_d61tmz-M8TrZS)q}b>r4gPPmvw3F=DBdsnmWZ zNnGpFFb6Wzh|(1#>0%h^XDQUrgJc9uU=_9bF|u_)0Z9bR2rXZznThL$RAM*?e4qpi zGE|as)zr+I_3*-+XoY3A|aT4Bd(Yoa=@Ewn3v^B29>o6i4b)$AQGpbpcIS(nQ}7GIWK`N z=OIXgEA$|FL8K!_ zk_{Y%AeVPsKnzuR# z?x>M$}!!=lX0!ID;l>X15-Kf?|i@F_WRpb_RqGD#2^0i`s9s30WC5`QclN6eFj zp;tVBmJl?S5J5nqr%f|7%+m;+8|(sYk^t0N!K_9cHK;Yjag?Zu z)J0i<3Pm7lVI=LIYUWxT+w)X70uWiC{Pr(kO7e*0TD6> zSs4i?aYKcu=?J08CIn3ZUWOMY=xg|4OEDw*(CcUdtlnTig__l0^-^$g2~!+Oa#nPJ zOp-}7Fcz|YkWc4;U=Xga>bI7R4FZB&%cOpzIadHEZVGlFY1ZbNSV5K~h+qV)9=!$w zMN}vn<5B1bmQ7}*k5l1>L&c>8>`OGAFd798s*ou_0gj*fq!r)-kg7knR02SWpPqnx zr#}onAv0#2lzy#ARDl%8OlgmSz>2HRL<-O(P?;S;o}hH0j}eDhZzVZOR-|=DeZ}y| z!r!Kv7@w#a)uMBO)QnFN_!CMf8exG@ut^?i$h5^r&T!DDG2Ap!q%;GV5J)gh0qcP# z-XaN5-X{V8-&6oAs4$u7q-Fs)AgC4;Nz!D@fk4aG&Erfg5eR9PO2IN2OBEwYV<1Ri zG8hM=(*T8FSP~krJku4bi5j!OI_WPAYUQT5$IP@Lh$c*_CsB;NI@1WG6a5wM-Djn@IyR0E~>r5@MJJ-JlAM zAW1SQlzCc_Ad%xt8Z2lw)}cMHK@0|})M+P4H7;_HFoh&TXe&=eJmi>JgQn`h8YT0m{we>Q)NSNDhFbNLn`S2v_MP0 z0VI*7*csHaVh&RxlZUsJJVyN18#YTfm;wYM=_E<6q+n0gtEsQyigir2g$R6Yt*{7C zqWM@AI!dvrJxqc=BM(z0W}NnsmeX2tS*3{}kyni;O-&6tQxSK;ryaoU%=ue^fQm&G zv}ztjFwDxjnTo-Q6vS0GXhV4X1y+41&1{4wEveFUktj7h10GtAm~j{X0JK6aku4;X zGBWzi0idy|VsrS@7gV`LAvK$H45)5u3kn)S>4gVSD-&L%;qt{}fa>AM-=ZEhumj3N zgQT=D0FgxrTt%j169$~#S>grlyM+N%+&aAGYoAFpQd>V9N}17O0yw<^#~e)jHeFGM=t`~X*a}#c8aQI+OhQsEvL+(fCLj7LL6t= z;zu>38j;_L7w$8_P!#G|)R$2CL@*Mhf2JuZ*GU>y(e@FahFfiShc!m(nZ27v*b{+ep0 zbg%KjDl@31{D!Y^o>8jYpCJtZ7bJiHD%A?0$tMoAcF`AIB!qZIf`-zGDph05YC&2_ z1ka6U6W1W z{y0_3o;n*(;yf&Z%0h)dq^JOe4-xTb=zMUJO+v!{;>uXmm!OjbnI2&PSHiv{KA3#9 z6?E|*w7zjM1R0PfifXe+2R!jZX~ZH!D$bc{Dx|`yfCR$<`l-`AOI%=xwwN4AWMaUI zfIgsfg9}`v;A$fUW%n_vsP8J}qR>HLb&84d0~OQtNSdCwp}k$ZhgbrNzEXh0xvM^t zLIr-UUysiLODL4Kw4ss$qKJ(|>4|6n1FOK)&H*PVW7Qs}g;oJ_l^R@pT;_U?vpAJA z90o}!7cyFA=l-H-bma^Iic=IOl*=At2`5V1WfU|dkO25sA>)8#cR?sgU=W6sp@BiD zAF2=jSWPAbv=bS$$x_o2d~MAj{&=LDc+?yx4^sKFvb$s#?=Sa=EP;vgA&)VDL1{S* zhCGK$(@&npZqtNRO*AToC(LBDL1Ls#R8BmWf)TW-^3rsL6ZH&*DkKv=7(0X;zztSe ze>;UCk^mYHi5?yp(#gaqcmk9uYD_$=FH<5-NHXK6Oz|njAN@jpFg@w(hy)RssFenV zpn$=8Mp&6qrbdwc%WkM=%*+aaJfJ?BLFyP#<(3lV;sZ*KG=l}86@xQEAmkJfe;ifb zosa{?9%Qfz0*RSAa)3nSf0iM{NXlZm;;I+QWCP^@Kq8@uZ_5LO;Q%1ipEQR0j-(0> zas5EW0Luimo*+DE0UELbqB38kfj}VqrxoUKtFA;Zq$;2kFQ$?t2#{u^5i$I*)l=<| z0NN@wDU($u0=Xd4umLgrbFLbzPGvv_fT{_YA|Zn6QyPSlNCFK8Q;M^NAR>jNXgWhs z48+xl1QJif7(9$nAV?$v2wD~pq%%vVh>xVB~2Z7^$9^GA0OLF$_a7 z5MryO&;V!1LjM39JO>o`pv|yY5vNa<6i_Sx7Kby|m=bW`1TYm6&^~4}D<4VJO$3lW zRm%>kUVDFF{ROz70=Y(OK?Vkr9GEomoD#HJ8SXfz%!wqp%hL-8dgrK?Xp($zaPKtY z3Dp2IksuHjNoYP;Iho41wTB66gF)iDl^B9UNi`K&AjmldJ~`nv%Mrvv&?^-HX%rck z1VqgiR3DhZqr`wjX$4dnfOQfG($D~bPA|s69Y!Zh(Ck?SLKt@}pDCPfW3%=FN8$Mn}#5CKZ0o{xfxI*6AHxf9)_I+Ht2# zIMYDTGU{>TH@a)AJrQdty4l!!jYQjm29PzW6#7K8k@#UD zYiM!YNFW_VjUZG&FkHbPlTZPrC~+6WTZ$(51O_N%1v)_u8k9s(f+!ki#+V)IlZ|9t z&EtfM@T_1E%mT$t3{)+Ay1MvdLrSE9^vkDoi zk2aE4unB0?YZK)Ld?y+_0(MxoMgsuCv2+51QJEk?Fgn4R_+vJ#)_Zg*PaRF%VZ5Rw z%nC^`Y49R3?Afo0&AF${RW#Ei={;&c15p@gnrd5li<{dVS1q{X65ZZIX~pmNdm9&| zS=?^6yF2&x_8uUrUcGHlkyva~vaCPxk=vPBM;JWU_BZ^6{{X*sZ)|rL+>f^$x3arF z>3&FXUf}I4Z@Yuq?pOV@l-_Zdta2RI-)(ns+S}FL?OM>cyiktcOII7+?5D{wy4DwO zeChd_?mO(>>G`(lcV1=2F{WSaXMVu@`)l2=y03dUe{MU^d+raiJ1)WPZe4ksdrOD5 zJ9pd>fA+hs1GhPcw{3TakmFD8Hx{)&r*L$fX*K@Kn1osNNqsr z5=;giNrM!|suGO~h8QNGP)LzT`Os6qPlhv9vQB#nx0yl?W)5PI2ZvArlT2o0>t(1H zG9_uJBdP#1FlI&?Q*Pld^Mrlc+#nZX>w2J8LJ6_Y1pwLh5#xb(c_q zE_YtZA7Z=BweKSh@wUgIBORM+)Lh$dIB&e2>#TF8>bS<8$0z$0%KNSV0K>iuY3+*l zHrtV3cQ+eO@$H`5?OxyEeTm|In%nYQm0RbZvA0{C*C~I67Mp7Ju08Km)BsL8cefVh z7YZX4eph8#%ssTDGuq<|xb}I9mtks_%Ql4+@`7}hlb9Ism)Gz+s^2Q@9VChFuBdTJNqs|D1U7PDR7B7Z9BFpcN7LY2=UOEJEy;*&T4YXS2>8@f5a(89 zRNIE6Ee%~dpu-X)Q%IzYiI3xiYND0BuC5k_ZGq5kmydcm%8Di}s7CsBikf zXab-HjI$y@v zq*MSvD<+_2SfwN5fKNY&tvN)}W|2x|<6HpUlJe>b!5IpQmhg&G!cGEd5hxvSatjSj zBxy7tk_JRzEONBcMr21$y#b)600_`X&*Mpt8~{)yvl+%`_~+w*1QH|=EBO5D*0>2% zGWe7L6resG1#<(W;3zP_pAsWJo)`qwsAGT})MXH6nS5wK{&)#jTtm`ARf2>1a})51 zGh78Go`nV}rb?L_a*#41fv7qDcm_OKNdyz(*-0b7i6a4>nzDs6;3uk1qQfE^Oc)&` z9-#gh3)94A<3S9vvz!wLF0)($s)gPJ!JOzoIdr5Cgy0;dmQW>$CovE|gjXTsfLzb8 zax}0tGdh6EVlxDtCU7*`g{bhymSh5AkbWniBlPM20M82uB{4NpK>E5#(?gV+gM`|L z8iY2Zh|S&h&uE^e=W({%1D~sTY{;7ZWJDZGR&HydNno;G?{40;scr9XZ?AzXZ;#q; zcg)5}(x%P50#8yv0|%X`WVc={MD9LUd_wWvx4KJo(|?q`YiOWM6X=gp>;X}UZK}S( zbI%4p`%dBAR{r;Euv&*3I|l9HK4bmst>*iZ-;??; z?%Lg^j)L8V%Z%JC)( zS{DF7AS#M^X+i`@gOH3$!pTWsB1i)%>(IxH0aHF0c;GOB8BSHo0gwD~oLa6yAb})T zrdiM*kB$|TH~@(1f72jxjIfDw9$wTG=jJ3pB6?Ox08ktQ7G@!JXC(P(Y4n0?G{7gS z>?lYFQnCkR-?FPnH1UE=NA3!~-5QGc)6WLW5W!0!e5iA^M}l zoB%9lusRyh$gWd0kCp%wAE+=9=G7G>MsiJ9P5=p2^S~O4Pfax*yvG;7 zaoes_n%`}>&M#wV-`#Jwmj$aEdrAQ=?A0(jER)j|m9OPmm8z8RYkqIu?`=4~*G}zT z>)CP~R^)OPxaQ*Q?)e?Y_jSf?-*vm&+t}?aUEYSb%;@BccoLzRUYjWt~e{a-< zdZoYty?~d~$-hIySoEG8uH0{3Z@80QNKbh_g-pjN2 zK)Y@;xBGw6PG^0{Zuk4EJ4;7k_W%ek7rP@sIG?wZ`=<8QELpe5Zi?UJ7mc&KN8K_Qw@@U4 zF)w3r)9+cRc8>NpzO2^X+HZMP*{vcTkGJK($bRO#r@8x6+P#-?_Is!M)sFP+1hs1B z>-O6{&eNIa_B%b!*MGSR%)3Ujx|Y)hl*8KFZSq9EXwQ%A6|%m~w;aQxc-40rBi-+K zdyV&<)$Q*$#_hHp)4}aI&A#uK?XCXsajFjmXP)A(Y^^a%?Yc`%=39am2^i>IJ8i@A z*3p%h;AMT=*0q$S)nmD%pKW`&-`$nk9H#fP{{Ugg_c!~uc5XP%OSn^W%3Il8x4?1R z`xcQc+(B_KUcAf$QsJWbVcVx~ZMuBf%&gVkWv={S$a~kmJ>>0vSGW5YyZzSXZ}#ta zH@AH6bNijg_V*vdZu>8c=l0v1{Kp%|{@Z7JX}8&KxeG~d)81CQWegHcaZ6%}roZt{ zUmZWGZ+ED!-`!EoYCLv6WuL-H9>DTkr?_2%?g8gJvzPBg?f(FE``fhmzU1ZX+uQQH zz7u18ZR{QFt*c0a&5MwYq?V0Xovup9eXP7vvqU+pgv1cQ$srCsk4e>rxIsF!$HC z-L|djeJY+?MUq;l{$C^BeYfg=W2$`~<966}=1uT_^!$yX&+tiWc<7q$T2;HE;H9gU zoJxzUP>s_nisSLUy56>RuCVfcmsXt;qru942IaV%RZu)y6+b zWduQ~265NZUfWi!oAaly&tH){n`x&iWgdfliu>og?*7d_)^|51_dD;~O}Z}=y>__! zu6MF__oIs4hPcJA@*S~p*44lXZ`*)LjDGR$Pg|#|`hVKGjs2$&{^h~{08{dRar#wy zPOI;2um0<~l$QsqU(oh%wR?mA0EApF-+D?e>d^hKBWY^Z_cp+mh>(}mhf|rHdll)) z^F3;E*8?V2)S!|)2hM=W$O>W!(cq?ms7%WbHd$v80H5cFpx$g%0uvyCIhcVoImp9O z^cH48DnTc#D5DsyARhn@A1%hSfQC{`XYc|(Bg5f~s%z>CRi~1sJir-%GyI4(n8A7F zVMdd4*im(2hBXilsTyH&{{W91VyB5#Y3L}Z5lHaq*Q}8z8>m(J8N-sOK%`_0_{`A$ z7{|l}n9cJ(T7CqB;eca{0Y!5lgOx#~3?@}tQy~Hj0R+i1&~yHvX#iz|Q8yV;s~ciq z5&$)kP%1@8AD#^a-!`I_oX8_N>CjXE07?At#84XGis=Tq6Xr5%W6CfGa7AiVRka++ z01xUiVweC8ETogxhpNG$%9sK{ll*cO0CXd*P5=|m*%Jyx*C-jO{{T-64K(5EJRl|x zXW=t6=m^M&>x43c>ykwWmX+1x0MbqXhy?3ar_w3``hbxJkU=;D3?S3exsh1wSt3Eh zNxcFEB(6ecNrOp>13g6a!0~{I)KRL1fRE{>e;oXNSQ2bl;5E42?e8Y)I)7;L+_N4k7+xwp2?;ZG!w+FEczvsCNj0m^t1uVRN(6aqcqSzQ# zn9tG`Nm;#F%YEa|_gA2O}zdw0O@N(-tNUBCVj@71+lB}_6i3sXQb z4%JF(^aocw);as#&wstY_II^UDc!u^71@2Wv{p@@A87hFx9+M+S=ek;9p@vtx(1O7 zz#4!v$0t+N)2F4ccBVA_j_sb8e||X@r-z>Tee!#+@1Ey>+P>6nxgTyj4)ZmQ$1v_! zySsyGUG2)Iyg^*yW8Jq6$Y0K9K%o{zJ+clVkD zwEeZ?_(GPq+iSePC%bdH{i|Jl-t&EW`3%?ho3hP*(*rv0Tw+)p2W*?sVRtU$&A;e_xI#YI|Ai4|I2h>wE4_*ZVI9>@C=^h;)+vRI)94Ubg#k>L36N zx57yGFG=?DrK;|ezH<9DNcHZ&)$M1pOE4(~ZDq37CxY5+HrBSA zJ+-Z_+REv*wXzW`T2xRyG)3~nemG9aVd@ulZW4$_TeaF+wnn?Qg#pv8e53#Y%u}W( znR8=L+-i+vyjy*OfAz(cCPDM8lbnp=qYAfD-HVFqToZrAThc#tti-?;(&Laof&zqN z7|z>^ns_!RMBWMZ`8}MFtGl_RevPH#dKns#K#z}HOKEt9bY%74hJkO7kj^T=*Ni+oP$ymei%ZbA5#H3tjsRg9HyamcV5c-u;5g|}h&cfeA7B4dc)XQ9hG1mj!Pk;^$ zwZ-n9+9yg@!P2&cmlJB`a8c#6Ci8fa|X zazv8%ufI{_a7V`!L_=?Y{k{{7K(n#iwn9pVn$k%ubHl;YP{*yoxCuH!fB*{;C*kq@ahta; zS`*NGBI^yRgXs`M37)<`(P9_=v%XBkD8Ig240u;(6)X5{lCBq`;sj zQGzShJaWMASd<CA~|_h8?sbR!V>gW^*K&@SFu% zH=yaABk6CXOn`j3u?9y<92x@h*StcF1&e^h`9$O>WK8&B6G=jqAO)CX2gFS0TGU~h z3ML@u)B~IlAfJ{2HkW|dVj)N^UnxHvl=$Etxj{o8DXfag5fkMV>0AIHAOVnq2m()- z3N0W&2LKgukylm5>I8|Oln#+mgxWwXYSW>#D2P8C>aid5!&y_n11>}XFbthCYBL$+ zem!t#0J@UCQ6$7kIfFuENCGj7a`B+VWq1m*GAH6s)G6R`cTZpO6rf~=f}kxF$*h{t zOy&G>lFAuHR55bJn@k-fkg#HYCU5}Y{@~JeM9Gju!6v>6Fr_U)XF;30n>L*puG&OC zRvOTi1136Uqv4)1w)JZD!PT|X?rtaLeZ(!tEw#27ZQD_a4D)SgA@zBgOmq{Buhi8q zCZ|O`H+tIOwT@$OfxQ*B9jf=9Zrn5-8UR6%80URW{{Y4y@>_nDw^W^*WOv+dZV~&f z#lj|Zh9PUyO}!$A_~VuDUdg21PW`TrW{b;JB?D+6g`~>K&oFgKktZ4RH7V$Ht(B%A zbdmtjfNEc=2m|rXzBrcG&*KHwt4E;iow;ItNi9MZvJwf9K**1UFlFjoE(D~us&s{+ zsX9cjf`}Oth1~QPi7W(Eg;6pIBvu6dN2!y6#d6rABMy$$V8j7M0z{m{5&(=ty5NgT z^&3Dy9;*KU@gUPlkOgWDF@(Npwusg8r{u$bkY@EXNCHWLpZ@?A9}gTaxYkgX+u}uQ zg;`uWb`AIQT@W2oWzn` z$(;0w1fLvX6PLi3Ydb2;FOf`+bj2HcuJ>w$U1O^Y7 zlN6~l^2O50IeMe3c8bYTgVyb#gDfVpq_k!f!TMrrh)Q+PZP`zR5(T!j30ZkUK?JFs z^%P^7!{l|(4hDS6@SY%U)xtw7qL-TLD!(Aad0?DPT85fZU8vMGF@eoWpapUaPLhNm zbC}jE9uQ*{J-Uf0eq=_uaFe2p+CdAN5V?^50966TeA&cFrD+O(G7Zh@*+T4H7gH^@ zEu&Lq0p^y;$o%n>+*@_#w-$7Lhj+@ejF7iHlWszwHp#i90_p-Lkv>v9!E&!sG0%PF zxtUzkj>7h~KHgqhMS}kMLo!{u>7p2dieFeKOkB1kDb6c6!uzuM8_xr&CcMy_{S0e& z$lkMUn{#CuuWD;Ik<`1Q`B(d5E+_=&0FIdC+_mdg_Z4#WJ1JV;IUD9nN2lUqo6d18 zX;-?bY!xeR>pq2TB(Z7IS#9U$kvQVq-}_fw&mW;x*ymsO7#Ahnmu_7?mD{araDgo$ zxJHsjfpc+nGqG|>R0Kd3#}?;PcV?5Cots@dt}e2dXX)N+?q|5!6|L<}y`76q=nLa; zKX-d_RfXNaF2O~xCZ>oDF^1;reoFaL!}mMe_x&mTt>r~jv1y69 zc4Nza{nY^6B4`8yId#CDpJBH;+HkPHZvtZe=Ez04X4%q?j&41jHg!W>zoNjKY)ups zISg*yl_tyMw;!R$ecIXiAAgBAZEDSjv3By>TNgByEAH4w)#cExMv=n+u~MI#gQd~l0jkS0zk%FmbER*Z^Yz} zxtliHHLpF+?KVI#adpc&t=sP2p20IW?pi>>Oo9HZWxIH#YD9>kcaaB%~2e0VM>WoX=R!Y$ljh5Z5HM5gl^L^QEb}N63 z+*!N2RsF@y!H2i#s}u+>T#Xjl&(=n_ia^A>y5(ibOK!=U8RbZXna=JQyp?bFDYZ!=Q%=W%#{ zcFlsvLaG1=t~aGB*D}?WYq^AzF(Gko9b3Du_dvKU68BA@h~(SV2h_QDP>5=2%;Bmv zY1I)HiBk-=UhWOuskT6HHH5c!Z??MAPf!-6z@*eyP#I$Bw$j3c3bt#Xf@Uqq?zdKv zHQ5ZsJx8}-GQG8Psg1BnQv;y$3C|htZC>?-^)jty*D{3oe{$OVz2mkPS9i4pG>sQ8 zHS5ax+AN2+eUu zki#w96o|_hNZD|C83C4F) zpgCOf;!$)(-(R`5-EFNEx#~-!`f4u`ZhaRl&29BC6``VAPTC(b2Lv5fTw{_sLCDcod*n>&S1y&-X%It_6y~^8n8*RcS()zFrEf$SghC?x= z50!AI544U~{$C$5-E(_-)xs^@xqSmT*2h~i$Clv_CI&}W&k^>meRyihc1dtZvU0nd zLfyyG4a5SBWk$IE?W7WM^d}D@=TNic(WJFh}J59m8za*mOljx9F7~i#Dr; zwMo;g&YZ}{RV!IetK*54?J9T{`}}~jws5-FaL+8x?Ee7Uwpi%;i~5dQ4F*FB=|nyz z7W27FLm1rh&&X{;HPdbGU1o#?H>GdNMwB{Su>_xprX{lKnrci|>n_^*z1!j43tYEs zc|A*vGyusTRXY9=h^%J^O3ot&BitR!Z7kngZkGju9$Cp#a?La=09#GEfgN$1m2BrF zZSF#8=x8o$xcMGOkg>yXyM4ze%JN&Ado7O7W~Xy@_4|TtC5uW43d2!iW&kH4jW+hx zcK-F_?XLd-kCC443lMbul}avi?V6HE2C!9vjrsr!P}g znTOvzen+r+ZsWCIO>D+jV(mkJ?^f;b%Bm2xzfb#&+C=)OKvkV1_U1t7!!wPkyY~8Z zUOyk1mG-~h=AI?1x-M~C{?BJ~l(-u9*52oDvfbDtZOB+REWh`^aEOND?Tis_?yF=H zDV`qnHuv_aYyEMmE2Z7t>F;W7%uZ)V@!WIwDctw_XM8rBxAp8^)o)?R+;p+C-r1m? z(l}#dbrGpgk&J018OJRhwtSB@;QLQurpz4a<_f8yG}p4>|EVi+yif6 z%S01YJ-NpPoB5HZNqWSmm4S?%{^q@9uI={D z1Oh0M6?K=zMH3ew&u6~HJ=kFXIiAbtemsR2W`gVbG+PK z-*5LAKsk_T@u8>yIwiFI;eBnkWDPOnGY8mZ?`2S{!Sd*2l*Z4%>-hS97^U zi*KndR55#`O9~Q!LVTbJ@WW?LbVfzDwAPugTqUj-RZD7sPGy5g5QGuXV=c=jp=w=H zS^oegHkKK;H*On7+7Bx#>r-)c2!vn}&Z9yFWAj^5`K!Rvu3BA&N4416v=oW95gD54 z5a#;>aHZRMu><4`QxOR`TK@n;dN%7l@9;7WzZtl>bJwwOn~!eD^(}=SwW0$%s52J; z�Q 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

wKk*n~EI{x-Jgb@T!JvMD5g-^Oc=b8d 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�Rx-+>n9%a5 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�dhQ9Ow*T0}50MXZTa+6pTDZ1OS;N=Un_e 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

#uYQK1fXooHv`<&cAqQ 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

|x6}im1;E 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

N_h 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

Al$9jLDEq4 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

0gs7U2B2sBFx6*{N=is)e{I;>H!dVH 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 y9 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 z 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 Y6fExXl zW95P6T6D+3{{YN?z+FeD-*?u1x3_C_FU;z)>ephA$of;*U&>YL-910nZyTv3tn_~~ zM%i`U0@hBFt?87YWx61jVqgOXG4bB!&gRYSP3k&ct{QlU#Qpngs@vV7+}pP`9A#v6 zR?%Xy{mWphp+O={hDoBmXRR@Z`&*u0^IDx0yNT@_vANvs-qp>aySLnJ?hBiJ#j8YOJo>^4q_?=Q}rV zZAGp^?vrrtIOSC+H*QTWsR--VV;^R8JxFavsRrvnjYt6bj=0fTYoi<|lQ-;NaC@uUo_g0i+8f)OX4+h~ z`<;c)TQbCBRS$!R$arsYwUH~esLNj91YWvHBZFIMzkht+ypZ1o#z)N-eaJ+s?B>-7&r z>g&|>JC~;Q8sm!|W_$7W^4qP&q~G&>g}64KXWW*pDQ-67-SnGh&3a%hzfS1@ zT!67tkD0yO><+Wg-TIA+^K?$lsMRj>?cZVl04;PL=h>%8*KRGJQiWXNdq26(qSfKI zV|fZKxbqViTT?@TtVvKoETmK~hCeW}r7g)gl-J^Z-?6=0(N}WbXYiQ~)vRe-EjG@l zDuP%$yoC)Vb(M%Sj*qz8nbT9Vm8nldGVGslJI~uLZ)4njtG~Uo+>6$qb+j(SZOv`% zF$uQa+g1v}+J)pW=tSerdvn|#qv%~~>N@T$5`ulPBA==xn*Y6Fd9dD7lw-$MR*ycSD_gQVIH}pio*b$z$J>DF#6l)`KiNqx1#ft69-m5VcWfK zr)}aS{I1lt-Qv=pWOfX_@wzvy-d1~Hn^x`IfB{Q@hX#y6VU|(z#`M26(r}vof^UhP z`+x2ycKco2`yT7;o?~;va+XSs&9Qpt?YFyqN^fzyjj|s~<%`7uhsvisdiSpS2SMvy zJ+`{aD_N$#eW>!Dlj|L4rgatE>F&~|3Gv7UhjuU@&$8URwwA%s5cK!Rv zqkQ&)>fLdS?fulcq&AAOjC{rJ-(&TjgSz*2D(}(H)vS1*yZdw9y&tOWEv}-~uTi9S z_%p7djTm*UK@>2;eqA!hpy`e$y{4RU=>P~)1xlQ%dYr+@fQ;~Kp+mqEkugxfiq>S* zM2yM80SMF;Yf41;KpLx*92x**P{jxXFeDfP2VAhE23-h_tps&2D^u1_Q;Jy2y6uZ}y(}zOlH63+uM7#ZzhY@t~I7skjZsT zRj14yX1Mr2)w&+D)36rsCZfEuAcyNb^b^LP&~1 z$7e_Cokyp2H0t_Wy}jjaYlp9I=5zIZ9?w^@`hKRhdrd=6J;y@(d+z=IFzxt`>3>sX z3hnH2ZVk(}QG%s}-Kiwpv;u$}2^o=|KI#4#{{Yy1x!UwUc5g)-R-2C!G z_?^+))V&J6MVnP{?lF&ke%W}xaO_|2UvFN=7v0;dS2sJ0R;~r&xxKxmB?^QdmA&o4 zNn4<2Lyx&VKh*X;OJco8OM2g7tXXK$^N(H7Uu$yPJC$|atIFbem%ib-ZYzDh;`yD9 z?~CO2Ag=3Wyi>Q`*cQu8eJtgmX^t7U{lH+BUO}D^05=p znfPPz&E30n_IoWnH;>!E`ZK28+UoX}$KP|`WPHbG4rjmprL}XP?YoVC zbIA6MwQJm$4`Sw_GBL2X}cr>Sz;0ryr*5$Ui6R0KX+G|*0=j*BR9t7j$aSzL}= z$oCJ*avWCw0AlZFCFY7(HYluQrbOtiV7hlkAb(?Qz zsjY2Bv}#W7m((}9JF9G2)vV*k;U2$ztbOqDecf|o?cchW_WVC}ZLNA7cQkHB!<)2_ zi+6E)nSbe}Z8i-INj{rcCNC!Fic;N41jL#SZ1F5J;1~oVT02`PllaV>$jpfL_ zW)6_VW(8Ql0&AoUAE*fb0Qyf(lpQJr{uR#v6l8!!S!f6(_*cMF00jk4n>Z$dq!2+T zGx9h!&{BYkDKJ(*JtxZ`MrOD>hAEL1h9*v&fYN#&1?zwT$b(pr25P!$XQxAe1q-B; zLcoa)5eBnaGb8fA0u~NHpw%Zc3sXfC6^sBntE(){Cm;w0NiYZlrUt;Gq6l446oL$A zQymUoI8p&Bz)=TNOc^XZBjY0j0+`GN5XM1?5zxDJP$%%g;sU@hf=q)y9+VN0@i;rc zSBOROhytnxSx||Yir`(KQmjDCf+(~jsRy9|oD2liL15BYR8uL;PG$uDcpw5qEToF% zCMtYCi1IaUy_x-q3H`P^CpDx*(Q_f(Upt}$>?KGox zO_yoV9k1REY$eOvjj_7gWnSU6agLTP>RPv7E_8}h8*|nYw5q|4s`+q^i0yvrUD8`F z0Js%JwJ26Vs3=KccwI7Dq6fo~}j<+q30dN2(NN_yfGZ@L$H_Q`*&yTzBwqf2|8{Pi^ z+Td)vhmPAl&PLl>L1U5HTUK?JRA*h%1%P8zc;h|Izr9?;jTzg}b#G?;mVfQGc>e%n zbINf%gE+X>H+wC>RlRJmzh>pSlt6TyA+uKNoMVY|?Cx^#N3zy0Tr|_yu=FR{-*c?@ zj}vQSzq@AFH?p*ge%N)iw=Md9TZwApeQs!5GEFIuBh&74tezjK>E6xf{7v_;-Mx#J z-`Di!A&}+>m;wj{5s(u##_gr6IIU!q>TQ19?l!mS6LFs4TWY(Tp>?gsX4C%waJq(N z$iB8C^ohhJFPP5DnL|kE4%_Yx$rhAuRzL$lRRyB0b%|o*D3|ki0Zb&;t5X`*s>?WC zrt9K)ZF)_|U(z)zdAdqD)JK?f6+K88%_`YK)(vix>`c!#d);cZTYY2&e}G*^B%Zw& z=ZspD74k2ZFA|{@)Rv=2k`iV|Uoq>Oe6bA`R^mTWdfOKT3m6R=i~^uljc3YfN)DJ@ zO2V!(q_^)C-q;q-k|22)C<8Lh6sLs;Q-E#Pw~3G3Yxbwphas3NlG2Jk2pl zE+Ji9>A;A_;ncf}rXW#Sw7Fph2=gBa{{ZE1oN#4hfZwLNM1!GZkk9F;h*DUSDz?5U`pF177YM)9#hu2W@<(S+Vv{A??sb&brqXUlX~)v zP3kyHEz}dFhdO$Q!&2NPS8-~+yxrXa8CpW=WwKjuVW~h^i9Z?%7;R)cNJ7@`$rtY5 z+1Nn}6a_w@tdK6V7GXJvsEku{jIquPgJw9VnYj#>Qd!UPA*b_oz0YO^e zgp*HM6UIxz+2W9C+;0ug6G*rFlMEZp3WDS))m2=`64b_g*0G;7@E%Rp(%gD#g#bEc zdCTiNj()3xor&AVtu-7LM-OJPo=4CI{!gt4fp$3>@c zf82TggR17*RoruQ(Z;;*ZCtsn2bh3ZmIm4dqcv_A)o{pP`bI}QWqqz?uk<{dwpEQq z$#Ir;!s;%&fC&Xgkl-uC5!rM6pKNmb9%qld`)%IF z{jJr8B(0%sOkK9fbgM1vWQyhwTuow^cZ{!*rsXNUxAyGt-{yLK?FYL&UwiQOxmz|~ z=J`-A{?*3)vRJ)ri%eH;2_X#8sUYQ#Ax*`&v7zf7M@P9$)~%w@>n8XqNGIuqf$9_g0FD*h!{QDhMj3NQODz_F+&BsZc>q#LK5sPFD63|1KcOqJ>N`7| zx?Bdd6rEa|(=8{WnWD`n=5S(1GE7X5si~p}qdLhlswqMZWaXLZh;Wtwkh%#)1Je#d zlj;vK9%4#>Onmy(;(3#Q_W;e?F60;W8HkEe5KT2|^UPL)NvZJ0i!Uo9PCEwf?2%>l zsR2PE+ZH8yhL~okul(^G(&H#bJGul5qQFafYFMP)d9IKNl@sBOQW{xBobA0pPOF09 z5?<;M0th4k0}{e|(*~Hvg*jc25~FPu?d>g-cH?<&G6x{A8kfsh+tk4!tn#mka4p@%ZXC zM%|XVrLWz&wXmQo?e2!uZJ*YbgxtPKprN441BRgx-eIC%&dP3rHpPYtSdgIRw?4p0VaYlOyy`PO5D0& z#kU)qR_&X1yvV*wYPU_Lw#*4O-*l^O9bj}MmHFU^P}UhrVM&E@d!0Y~eV*KM9KPdN zZH~@SR@(??H#FS4yCkrtr5evj#o4}0CaQ-mEihW`Z*1(X9ltfdzs92iTaDp%-@Lxp zn0kM<-nEOXV{WHRHf^L5Oyf1q{Hr#d1L=6k^Y8bj-|cw&7P#$|vTi-wM{b+T)}R!3 zyXhw3NheW7VnHHts!ihapk6QFW4BG0asKDH-CNnccN@L33%i@P^_BF6olfs@$)h^} z-ePAFm`d6qL?u;(V|V!uBySea33~0sxb0>)HdE1=Dvhlfw%dPFC6p=B00RPruMtB~ zzr?oh?%uL)*f;i;C6sQx2V}i|;sd1x@#!msW0GkO#-zp;bRH&FvH2Do+k zK!Pv5wY#{y?!qoux-FtwvfvS=t}y{i048uLej${RXy0->n{Fkp?{3?Zw_A=KcK1Xw zUbqOl8Bv%sQlb=2DJf93MJb#XZO<>e-rE~}^~JpFaTRt*1*`WBsA z(bQa!n7Pi0w{+)(4_f4pWYYSn5 zp$TrRlQX4cRAF${6D?tlCgRn!f7w|ZZN0(=tG&Bz@2gLys4fu3(P{F;iId@j8iMZ_ zzjM;u+172d+d&O)TiUs+H&PmI+d-O;2AG`j7I>Aa{DhKHo0q_P;%rZ^h;%!u(qC_Kcujt!Y zcWt@`RJU($YR=u>bsfdibN=L9`g4Qh7)p7$UQlLCa{1!yU3-tb{{Y-Q(Pb^#{@NC) zYiXzZ*Ou5CiwM*_Ck@Q^F@tDw4P>>A!r9x~xGk%;-L};%8NdOW{^V-N(yEyv?jO~*_KT&PKrl#EL2A_tI;=qkA(ly+XE-e`z2!Fu1Ii_@Np?FFy0)aX z-O_&I<2^sR{+c3NMX9z(l6n9!6Bw#+{v=YgsOj9^+*(W4cKftTo}yiANG`p>r%SNX zMX(tffWTEb$;9(nUMl?G5=2AuXfEC11&ikW9DGstITg)Pc6G|s`^RN!4<1;mVikl z0w^F(H)^%|wJ(>?!<4ow*tKNcHdtC>$ZlV_zNNYMKIfwMe0j8KXUjExh?6!ysxCeD@MYYhtl(g3hh6ICB z2-Q-@A%?uPl=Xjzo>P1vMOGIz+_-OUn_i8%yE|WnpGu2!(K8bZGz8*OSxx9>pJ8^| zjj*=cbq4k1K;*ijTlGL8zin<>vjFRu8Fj|BO=|I{aiiyTPFMEt2I+RYZS7hYFR79q z=sR`tfUj{x18D-#4JR|#1)`O1t0hM&?E#+i+fetH(nmL)HewTXc65LkDA8`w@g#LQ z3{RJptTxQ-=FzGdOP8(|vu@b4v$rm`)j+;j#)rOg4_8TXfD z6#* zj3%UcS>i<&-*9eTz7FM)mCftLmet}I2J~!*)NPV!8Rm1u-py8Rh!k-|q3P~J+uMh` zcW&D51ejp0{k6SwP!8fv2b2k(xP13&D?Foz8PJ&4E~+ex7SNeCtVx%W4b8*6HOs9? z)8#l;(p*R<4s{zvP>wBa?&%+0$qQ}VkW9XJ90TS8gDgb2z~$>XDOT&ibw&;xA`Htg22d<~ z&MLQa4?=6U=-Y7yW3k)%j0)ed*4W4d+y$9ThD2fnl79>oKg z?e2M-wga9TU%9IH{>*l^`}ZR60mTnhQ4y_eO@cEwE-3{a7`*)?5_7?IOJ9q9llz)0 z-8E&EJV?8LWcbaCDC5VX2wS%e+kys~X}fR(>8M|B`;!&7w}=x0A1Lv1_@h}&sW1QrCEnTm>na?hp{ZR*4s0EL-oVAIkm`GJR6 zoc1sjkpz<+4Pi{=Mq?~U4TEjGphK-h#Qedaf(OqUK4mfVk1^aTe{PIHVqod4khHHr zF$p)I63i;V08c{^mtKP%dv)be#BU1%Y9~?Y<$^>-CJFgtSYp%>C(R@i@X!AMEDubJ z4?=+h%5;PA&m*2wJ|hCqV3PzdK@h;6fSjTha>K|8r0SC-mCg(i;0MH00YByP8`J=a z5)N`i05UWaf`1W=ZZCRP$pU{?ua-binv+wCt$C1}OHp>}64D1D*}UWfLc~b`^nzmu zd3m;@p`ZX5lG6ZEv^s=Pcv7bT4c;S4Kr*Z+IF%Cwe2mTkHN_N2Veuv-sV(xH@ON-2 z&a7x#O)VDf$!699%CLgIbu*}$BE2vs_!A2pJ_*>bULIIZwH`UFYpT!@hvJ&r{s> zjphE%%8LI0^LU?;$jf_Cy4tGE5hYO~j3C70`H{Naw=CAP^6);LbhZ*wpmNhFw)YuX zwKFDx1Oo)mO)FW()!lBhy`C9bV9loNsx)_d2P}{HY9n`@zafV@cg*Uitbb{BV%;Pmz5S$MXA!YQ~F?! zgaJ4P4x##(egx<7@xcO=wHdo{K+?xE0Iq+O&|uNPlUCCsUa-{&e^=5>fMnC8ll(BD z>a-3Mz;5lv@}h^hUIvh00n}>nG4R7#UF0rmthw(v17*GJuKxS7<$JSrvhGe_YuQ{2 z@jI@2pZ@^iPi%0W&UY_mt>4_8t=-tzc8@i*?quXkJ;ZIxH=`^-0~gjix3kjiTbhpQ zYhLxo<5Q1j_FK2z+^gi})vPGbmG<_VTe7{<_Y&{3oz?EYF=K`AeYLK4x%rOGx5Mss zU9V?s@*Pc})l;~Y+obzQ38cgmVh9|<#?dy7}CTD}=> zS-YoA#9-F$s9D!(*UHwKexXB(vbAx?<5Jg|O3*fB1RTo(Ao+BYoC=tcgq(@B!yyZd z3W)14N%HuS0C`N|;A(h?NF-^H0m?}-M9?3HkB$Hug9MX78k7rbiU~ck;%V@}RHcEkWSAhB z5h9#nBARnC_~(OAU5+_~byfsY4G&Nw;A9YBV1zQ+dym_n z?kcsrv#E`Sf?G0lPLn-jrU5j#>O{Qzt1t$e;2w>p;7~zdD^!y>203qhfrYc=Ac9fg zHEBo!AOn%X;iwLs!jY*+V89!V=4w<7sX_)6HH!obsemk!!Hhv5iqOCn8gMm?Y6VP{ z1ZkRTpa2m-PEcd>!Hxn1kFFvLgA|$wAd`^-qXbCC9hQ(!!el@qCUeUGCE1|SmWJv9 zlhz0WrE7vTd;lm@~}&X8buALW7NU?LZA8ieM@Nz>4Dtjq!z3zl_&p4|aw zGQ`Y`zeps+jZjtx<}otnKo(YwOIQ+7iR%TvOw|Of{VbHnsB@6Dmb!pa1}^O#c837y-M0idKXfLL^6wbvYa$ z6U=AISP@C-)~6uV!GVD$Vo20A5;~r;$037=0@YnCMsqqtDFhi2(0qCvCLQBNK$1-e z%Cvz&J|_wQZI%Eas47~qC&mxN9)k_2z=q(V)ldWzZ#&t! z>q#(#kjre4K`GWg806li>*Z?$<-%$PoThQ+1dT2YDhil-2*wcjj#aby5$;^MQKT`~ zO;P3e43uL^)hhgk=bIgaK#ws#Q$?Ldbpz%n^*4aP{-p%QA88ScI2ujLlLX8&brVAa z8ekJ?V4xLS)Nm?FfIMmDW(34Va1L$2Q>J7fV_hE2i*1=Z)JC#lHRPx|33 zVQ52bfEfUjs;5&OA{f$HSmZ}cCB=e>&Z46!Wnlmnljf3Gz=PC*_+vZO$2a(nuOZVT z8bKhfG@V%!GY9=}QfqAX1Al~&+}pN6V8k?eK&c}m6IEb7V-)LVrUxzSs1nW%z`A6F z2la(5krV*w_!?q6iq}AiYiCZi3ZzG=O-gzZ^%&@IC&&DP5-5dcWzq`8SRW*jsOg#r zAbfE7tqU$exI;$OtM;^Al2+jIkV1mBMkbyT2TTpwxX7!`U3D8-a`3HeC9vUH;F20V z!iE@s1C3IvTo~GM< z3Ra(xPk}()h5BYhg9k_%0TcBOy)ZP|?<1Qrz^iF&E4rxE>Q&B~(9_NEiX3BP)6PoJ zw*=fi;^1JTYAq&%Bh)u%Dpmsj06Y|qX6@KKJwtPG*m@|XQA)WZOuCpPF*4scgNbfj zsT0x=^4exV9fYhMR^WxzGS!;tq+sqEn8+@G6*C~IgC1h1qIKve7eu2VmN3`?00o`b zEdhxHc$G3mKaMlwEKE`~LtKu(B3T zY2tsL6;$>V+-gU*R`WC4Z&3&$WDsIQFU%MbLNRp3+`%&|yqBZ}1Jr^*3sy1VLMkU0 zS(t86s=#I_ib^}g22?fw0M=>r>NUkE)eaozLBfHEa~@iNGEzW^BdCvz91eMxV7zqz zB7#U$1Q=C6N$OTa9bO%93OJ5{G)}D~5htY7Q^dw`o)`v6h4O+-X{=2ob=Br*_+dB7 zo7DhF1+{HMEj=kU)!{}0vxu#6EyNEDY$ECmB(VS}TK!cK0GU|G(@rh4l<*cL0InI- zs+D7?NQYt8PE~BY1~PcJbdEbmSzZ-^)ohH(A&C>GND-IgTx+IOzTjNHF>TlYi>(BS zi8NI?Nbwk+MD5JxMQ-8h(TIfxU>XtB1l(ug$P;>+Y5FNjyEO~$? zDS--9PXZadskmUM;hexHGLupi2?L?79|7vSi-Jo@Z2@F?#2tCi04TyE3Na!i#-p7; zKMLev8kG_G;l?C-ix722p%Ot61^^ExvcJa&JH&~QRs?1Yk^#xO`G@-9fFwAoDP~&v zn8PR3!@`5{rU1zJ)dNUq8e>o(kVPO?Y5cIq;8usa0C*??S5P7*qd18eT8h&c)R2}e z+MNIc3Ix#U0$>jx&jnOA`$U|>h+$MPQ4%VL`nq|hi~;;`$__7U2T&H+D*9vs!K6zQ zH4X6?mp|ex5?a-@0u;~?4ylO|L-E3^k1rCf9I~QF><9#(&<>Ccd;wr)Qu7PIT*8ynAwIPdYQV3QiO08w4a_fm{D>zty><-#A zmh}rH84L^x&YENd;WXR$z!FMH5*mgzOmz{Y0zd+P9=NU<6lc7BL`!+2RFl+nA#%$+ zN=nynfpZHa#93`XNg@@LfT}yiuU1@ z0|XgHtTYoPtAo67JEmrb#IgE<#Uy2_xBzuf%&3`}$Pyq-ABeyNt9HVcEIumtsq z6sQM0ju{qBtPU!{B(Yck0|2NQf=M$;>6RK<93)8en&D850M4k9GaBSf#xFu`FB}QV zx>w9129Pv^q)Y~YV3IJq#o`!91Hedv1cfGJ{{T$%5rh0&$xz_3ZY~>+z%kMR3K*D0 z$oY?7<%fO??P{ULcqSdvw2!sq_dWiVr z#r0iY-4^5fJx zuCl!Lwcl$zzSm3U<=axbIQSkoea8LS_U~Y9xA*tlfZp9YwxNyB zL@||%f8%sA?PtS9;(I4a>Dx>F?y5Oc$9Iom;J>{;a$V={e?#tv666xMZXf`MX*l-pK=zK$O8)@m^-G(mPgj|q&f_k>);4xm z+3DOw>H8eB%5&EC`tEM;$t*NW%Ra232_%WV^_B-ujzbD>w7x6er{@F=Qo_D3nsMPXa5A*4-Z8nt7iSE5*FcG~dLQ@vmCSrLgxuOP2J;l_UzCOo|C= z#dGP4aiEiio=0Bgy=62F3XBh=Wr$#Ou9=2rCV*lUTk$t{s?q1;^B7x}?jTeQid>Re zmsP4j(F1P^L)PoYq>D3_=qkpvdyI*N|gXKgf8u&fIee$HSq^5L@oq# zUp3%1mxa5HaT)I)F*;Z}K`SA(Dus1nSgZ&*>W1qYVAE~YsefAHKHIHL>C;h%yLUr1 z;x1~_cmQ<9gV1!uIy^?HaP9u)txtgcuiKj{mhN0s(x^Q&SZ!^WKUE-rXmM6t>1v>g!*b)4m&fzGmm73? z8>_a;+*ED7-FIlG#lrdCky;g?0dKD zC*22a_xBaEd%U*R=^?H=2DfhItEE9(8;e2P_U=F?3msiC;A0ST8{Gm` zd$nojhk@R`vEB=5Y~QzWu5EV(9fI8~KoN6NJ82DIgJ0lr=5~6HS}NP=Uy0$jcG{Op z`I*xFm)_TQ_bpx8-+M1@*5FW1lctAIU<;~)m_2@2^4&L8eXYgH{H)~N+UBG+=KT)k z_UqhB9LOS(v%<#L$K5mB?w}z62Y8X<) znhMPU1X6lpT5l^jM001ndq@gCs4+uQCb?($oE)}etLE_?2?|tDpVCfCl)%oPh835a zNT}_FA*qrC(@joN*-X$tz@wHl&+G}V4=_IfMtKQ2sQ&;-j1I7~sKW{x26X5omCQuM zkZ`6n3~D@Vn#$$nr3{&f2165usaB(iF2n({Qb$ohI!HNX^-oF09GJ#~R_)MRX&=&O zGg%Q_##v>C>Y`am)vogCwzLZ9B8B8?CS=q}>lmtK5}y+p?#?amZC>q_o3>)=9U^rk zkp?`a@TYRNR!@$63!_iTWht0v9k>mq;5u2OSTZ4$831$&z|V=te5^T?a@r{3#zSi3 zInkK=%`(u_fEM0tZF5kLUTz$hP<03JsU0hk7Yv8X9N zU_PlBn(>?tLb_#12TdTJihAlDCk>{QCN{-T(6UstNj)R2IvB+%Vib`d7LS1dbR9^H zAP^}v0KuVOr~-Z_VlZP+3`AroVhu@*vN-{UH4y`froAbjh^=CC7)|z!42)(^%Omg^ zQw#$TOq}8ruS3+ggyCo)NRVnI{ZpS$0ZE$R0b?*n@t|Db5@lxq#Q;=(s3SS~&%|K; z07Y8K6__N@S1Bhv@G*X)jR4TWBQpd*=qCVYh!X}HHU5$KN&KR?Bk&xA2?NBzfq;w*usSAVxKptWM_+|WaGx=eRDIsM66Fy-~hG5JQxPq`?u~J;f zH6%Ah`A?2V2Y^Ua0BVqP02qe;IsX70AQXbrGbGeR8q%Fj4gk;+vS8Lk4x~UaSTz3t zmH-_<#uZmnGXN9;QAr@wiec3|I9iG2m%Db?X=nPbu+;70Sqs$EXO8WywN)Hg%X^(> ztr?Iepie+38csVFFg%Sp3N()~1Pw%ISs#duH9CMl5J?Ik8UPsNSe)bu!vPqYX#xlZ zgc7nMNHN#pfIz@#T2@TWCTmatkT48N^)NuwKqwcfgG>UHwFf-J044y6R=z)u4Mk@) zZn?mWbko3|nuw%)YH-zC&^1Y}=4ig}_dl|>{pG^@d&_rU9l~#U!Eo8z-`pjeyt^gA zXzeWBxWd{vcnlbW&`vrwJwL4K8@|AR^>1!% zs&zkAsIfi@Kh*uV*dNKeo|$@dKCgRUr*0E^ubInNEZntz?%Q!?w!6)(>z2w~LKzu+ zt*kf%l16!cSojmwy}jyQiPzhr>o#wUvA7>|608>H_Op zV#>g2Q}nDAFadyku~_lPgvEC(pVWCu-n*4{qQZgSPeQJG!9p%n8!&vA6pE{?XVBxf zr|LKQP0H?U*{#IWPxtXE)u!zp-r`P;apG?7!1sT7z%{-XxNcnDa7sd0-w*EZwgix; zTd_a6+Mb}*Vrdxq%lL!;0ARYmZeE^`?v2O0>CL5E%-Wga_^$jPgMT1@7Igh?-ThC| z>Z{bLZmW;TbKcLkj@9>{VgCTae$l_j@SWV&Ma{nd0Bp9$9nXN;#lA?`rNUi6lP&Nw zkLU-Z`roJe&qrRf)3+ zg^_NSTb9W+SW~P`S*JX)tA0-NpAQ@d_I#%~!Sg##OM%>6;yIo;hud!U*KVcK?k7Uu zwCZmy#i5yjPMDpzo^SCJ<#~UPVd;OezjD2|?xw(Y54u)3{y(@k0r>5?-z}%&`-b13 zMbvAzL+$?nc=qbcFitV+x-OTl*?Sw5R@-VCf0^YyGuFC~PTsEe-Q9Pp)HUOSm%ibC z&pBSh{{VgOZ*9)&m+c+J*WdD8x^-^1oK1_KYnOPWT~D~!*wRV0nyK>0rapW3&+)Z3 zU;O_7N!ysslHk5H{SU7H0F6JGHage0=^np!t)*`JPe0zsw{qy(n~z}}HRP$dNH9qH zbZC+^SMtZ=d)pS*GI(!P^nQcY`df5ee${QYY-uqksb6hBcKmO5?CthX zy4#*Vjpsrgw#Re0Q~uM>Sf5YOFLW~Pw`>|cHz68e88MHfy_x)(x79tam#x1iR}inH z{QLg^GvjaM{{Z2w&q=oDsCq3P=R)%98h4~?zq&uND?GY#9^m^gX5F3D-&>RAdp^rs zv9jIV7TW#I*B1$=ZF=HQ_VOkLCm&+_ANecoa&%s+er>x#t@XzP;=gr!3vYSfs_3i9 z)Gcc9`F=-|PqN)@_cwN%y`JZe-fcG~#{S0t0BrkfwwQzJ*=uY|`r}CqJVrlx>H6)y zrnTPKvbNo{X#7{H={GuSTW5Bzx2s{?v=?*+-Yzb^LhFT89zYnBCWNRH;3pncH_7Kw zW5>Q!*Di(Ah~>B34=ZPy;Wy2&$L$`~_qys`dOp3y;U#X| z@jWZF=;*GFw{2V!uWgp)w^AcryNYzWk&y-n$K)5Ksb^cJt=@j6x4XByUVXPU9w3X7 z2{e@%e915>27P4XJ_ec+5C|+xgVrGG$mf`(&J!2;cR<|%Vg!IlAm$`aKxgr$0fR%R ziZaTACr)$#)}((7F-PVGfbMk=vtFX0R8P|%9~=PZhNEo@B-94-$TLdn*F%`XvR12B z(Tz%SoHI{*h3%Ic-L?-Qu(!9^_XV}nYjmi#cHEk?78bcBwgCOq`EB1mF#b6C+xd_9 zE75)V(tpnM?YeCG-4lGtLbn)cYbWb|!v0F@{lB|jkFLAi^!DM-T~zS-YH{x;#P2vw z_Un!1cDs$P<7si0?VZJ!UGsMj>_Sy?>QId7}; zcmBg|8m?Ofib>P`OQePZK{{Ag20A)>t*a|-Hmt2F@&5o$;N07*q+U5*9Pu{Cx8CLQ zy{mI&$8T?4-tbzji`H(l+}!PLhdQ5acHwL&6kPQH^QY7eJ~;N< zC2I3<;&>ZY)V5Srer6YX%5Jwif(TZ*Y%i*iVGt6l*Hy4d^9tiMl32lx?C{W)q#Is} zC@QPwF{IuKKe)c248$d9z8Dp}OkrqrN3@@C9mDODSnd91)Awh$H+0$D>^D~}U*2(B zYu4O7-Id$w-mcoksUDdcnwXu$kNjS96N)ecvVytdg*t>(*jWZ2yY zXKQ5|)5H2~Q23AMkDfZdgR1EFFSWl{TUF(L$Jf4{>fJx8Z7trK^}QTJTu>^F7WVsg za8kpIvZYP5MJ};Ajl#*1>5f%&_T3!HN08i3zHjl7KXrd?`&+gzUE95l#@};mb78$L z&ffKq8qVQvtlYD9)1V-V^y`kkhp6g0E#=f~K3&Df`kcLAL(_VO&ANWBiu+cpO+Nik zME>0V@{Oa%_E)>RwYy^A{jVS0tSzmp@%_7dUTs*@b8%0Vz|h0$gO8y7jr^HQa{70v z-7V=+e$MGWM*dL#6SqTq`meU@&(lQOn!__6xqq{cC){nW>)elLZS3|P(SK^2z3&5Q zS8c@iHr+|^^6#Ki`bn8~- zskiq1LbEC3#eB~mIX*X*;Q5{B3CiuaTsJqdxd6^UF~5Ihzu0bU+}mHZcW6ktcXe*+ ziLDgm%Tb;_lJwtJ=>1n^Z*-Set4rY@KKh5I^?e6W_Bx7k*-wVOqyuqnzKd#YUUUTO z8b#9(j;TIfZ6l}f$C0$%{{Y+go;hn4#ENb`=C^R8?RQ&O7s0eZxo-86G~e~X4RMm_ zkr4+hM()KgPEFLUw`Iq$(`$EgYW(zWw_nusEA4adZ zwawQNY2W*HH|=t6-LL@~Tmr);nq%>wdw(76^<3R|rBzpPONGS!SK8k5zRYy~p?RY1 z*HhWv6PV)rgN)j996tMR$?@CU7Vqu%TRV$#+grN6L#;^)K+G5;AAt3pA5qcny`G}3 zn~Q@#W9fRWj;^13Wy*RNQhh$4>N1njMs&^&IMrvePP*Q4j0S`g`i4g=gdB&46E7CV zr2G8n3fD2%mAjY1)X(FRnfx~PAs(~5A zM^a3h#K`&9m|B5F35KK@5Dg&w>LdOJ3E%>WT||Q|LO`I7fVF8Ko&W_Dg(O51FwR7QU#J`~&&Z;oXiZ=lKS-6;HP>9Qwu(!UI7vCIB)GAo*m>5=qMjpioALu6n>AuxyAFm5=3uKwmQx(6OA1 z&1Iy2#V~-ZwMJh}a-kIj9=Ljd8f1?d$WCH_p1EL<4Tt~$bul0XCMHEEC;)WA0Z|~< zg!!8yCTJFarZ6@FmS2jfAEfo@RLRKC{2USZf#erAvJQko-nf8+HuO7aBU7OgAW(cJ z1##yR<&`>#H?I=}yR+RQddJgH7?B7SYGxc1O!|`|G0C|_Ty3t?r)zVT zj;ljPa$I{`8V%;QKxQn(l><#RQeX(ub0-|UyozQeom(xstMF!f?U%Yd*JE#yZf`dm z-YB$gHanYw>o&MXxnQ`94uEtAJZ-boy12WVhUU#(TVGQ>B)WIHx2({EWZN*rCDkCY0JD5C-_2dbopPTO#oC#T5;{Azd#nc0a^t}Cw7F%t45=Yz z8Q?8Qm=TVht2DV@llU0fIEca0eYe~jeF=46b9qcJ_U+mOR04#Tx|&U;HKinDH_H6K zfw^)M|!%28|6N>6&u8YX+Zf*BL4Xc*OxR(}I z?X&e;3c%|4VjFeB7c{i%8Xh-&;QhO=WAeMc`0c&BFAvLHxqErFw|f2N+3s$(vQ3q> z>DsYyHlI^uH)IRV9phh!cess?G&#J1rYsrt0Fki*68VBv3Iz z8B6LT^vaSvD2wyP4=J{?XH_u&0L0ID{qElE6}YpT6?%{lNg9ZnYRu%c#5q#gR#4!+ zTe{=vS0MNpVN)PX0Zy3=@g6#YZ$v$+-jZ%8aulM7lc};5&IVIbbHMU73on6T-dSY- z0JdjdL4z?2Pf$LfekTs9SyZ<(j>6S>87>QKmXV6ph-E87<^W6s`JR|>NtS8CRF?hj zO1c~{_Svag}Qr8-h zT`X7(RqZh=t_U}1Yo;nm@R+Sm2ApF+miS<@?r%glt8(_ECGM2l+O)AtNS*8YewqY9Rpmt0oFxkU<&oca=BGg3~qGbCdZR&g|w~r4pl>L zF5FzIQ7!6agZvh_ueaZk#yiZfYj^2Hvtrf5C4yRO+E|IHW+zX=WwSKIy0qYyo~8Y6 zZxjNpa`PK{+TvNZJrFavrzr3>_*WAG#CMbSthXdzxq93#onEZH$U3wXSt<e7klKBP({2hhu8;w(#s^7}HCKI7#<4@x(wNLe-plGI&NP_P0StvyQ#ApA zoX?ba90D}Az1@pryE{{TW7D*En{{2z*8TQnHm+L*ix-VwKp+BTx+XN+yzzu>)7|ZE zCoqpMc|O-mzO}6v11V&?>R5F`b+Wy}w?H6x6Z%G2))t@Sdj)rF=&h=QN_U5C+p?tC z+n3UzP+GPDzOqzkwNeA-B+{n1mA6#or6)x=07pVchCHgWvhwzxyS>xevf?~WmErllp5WU{*IHzhvKdIJtAd&>xKRMf z2CxCd_p^o8(L4={vE>mF?b@=I%~$F!6vzU$;eiq6g3@VRCM1jftFyLtJBI z!HHI8B-}INE0z<6B%7X^pG*;$2jD4+w|=AWEStwm`kA*EthKof=r5~!<3Jisg$r#Unurkf ztYIjg(v-$aI^5f(xl0YR(!hTEb$C7JI%(-$3PQM&L`^<;)z-<(N@H->Y9e|j!oBvj zeVvFa$#32@7a|!I+U?tv>7x363$kjtcW`Ef+=QtxBN|03%|zy zs4S>k3!n*LO%wnHPA(%Qx-^xS9FR9V*WF#VX644YuHB%|aW?y#)MT`V*|eWlgdd%sob84zf?02C7B|r&t}V`LUrDwmUI=wYI;w+@zaGZXru> zOsavX6>(260EuBZBy%bmWVyXt?ABiE{_Fvne68J_jM z?ZOoan`(eKm9=Chr(|f7SO!oa#NnsSp3t0VS?*li?;P#jme{lt(6WjwTz9N1m1SFx z5KgEBzyg>alLX8W?Ow65ytY;L$8(+4XKluql!OE|vr|c`!6erT(70+m@zB31c3(%( zW@STt?`}gq#|i;vYfY(A6aWTf03c2bi^J(Lqqp1Ld%NUo*UIVw(7IC4v`9KwIaO3w zoiL;al1TtzII_c(4R)cs+bzc_X?;gLe$Agv%eEPHMh;wgevfJI<3oI?2&7r!!wwbj8jD1U1m76d~I?qtCiFS2sA2}C0 zY;MJ!*6agz#i9|#v9h(O-AzF2I_^MLR5DyB0W!}DEY~%2RixHzxAArM#pPNqa$OuC9lVmpT@@?Hzu(m_FmjI*rP_iDngs~qJ zI8T|i*ofwQ+^;G~TZ6dVJ+g;$cpw^XGI;~cLfI@9(zIlAikch=pysVwt9fHPt+MUT zt>ZCri*Q=nMZorCi)>VeO)WI7D@h{~-KQB{gOv@($hO?ReL~xBRd34+$#T;*wzARx z0Cf=hX7LMD5i}hRCSNx-mzDlPmh*z+XLq}054hZoj+FlZ+gr0}-@Gj{k_oqMb1Ppr z(K0$<(%xBJlfpH}X)dlDWs_5NZrNM5uWnJTp*ItB$$smx`rgvpA#Gi`stU*?z$S+d zskupI=6_-GH>~4K{77ecZ*mswxwxc7qQUem=E}fX)d#46Pg59Gdx`SdK3@TSw#fU- z&$+vA(q=87HK2)V<69x%3#C9*KyqVMBAH_B?EJXT6547P5+iKDx~;g~TCr6(?iG8R zwA3K8ux4Zo$4;4&Gm7IH%G`FZ*Qfdf<~WxCskcPawbquwZMfY30Ckw$&;I~y3o1R@ znKS_E@EBKa*3P2L=Llx~x4U^8d3ah9kEC1z=(eN&&fOt}wLkzA8F_NSdsmwp=u_7N z%GRA(Y}mJK+G~Vf-66T??a7uQngP8(OiNa^Ck44v^3FvW#-LrZe)=`rDY;8F^e}tO z6`39k+#Xv%%IX6yry+s0`pIDN_K|f9x znq_E5D~aqKe^G_OK8;Z>Fp!A)N26t~&#Qf&Nn$+Ga;_ILdbwtmg^PCZAGW@owHI!( zy~hu6hygAs9zYBh32XzDx62i|7fIz$#)V7bMLNq{ySEKKMD(n#AeRp zd2w#8#J1!!0yg%owV3q`dY75CX}2OI&xnj?&y=c&tMl+{h(l$#+uVEGtLb9$5U*uR zUwtD^klMXKB1r~o&|qq6+tkrD5VMkA-r^uBYii4Id6!zNU3roSf;~HDGpvI@h7#Rs zysJ(<ZR@Ji1&!!Ea)PRRGl_L|D!W+<+YU`V3)wNp|iopfV%Y^s~ zOag!)$*;o+rBx45b!kf;u!ixvmUZ1o^4D>w+PVb2c2 zcHZ6fwuBTx=eYMTG^&VzrI*anN>lQ}h)k$cJW1AUCEJ$XUha@fwN+8u{^yhsSpkfx zioz0v+b(-PKGAk!7jjZs-Ko+o3eCn?(gdF<8DUJak&^9+RT9ZMok>K};X;EXynQF9 z^1~Jvi!u$K4r0= z0Eo{Sa`R0Sgn%bvqyy{(O#LgU*-78h5kbiklG znck~9XTuSB=5K>3teto453u*SciDHpdvQy*;l;aK-r3=|$!%MgxbjnwM3NvkN%&v_H8&tXKJy}eB^+Ekpx1D{T#!x?SU zn$tKETuCe*^?T#SE!304+FbO1QJ|d?t3@{K%h%89}!JNm$7#}3{%dAd{xF&NBv~ zK+rXHR^3J!$>tS zNRgR{Ck#`V1hkQpc}j>8JtjXaCN!D`Oj3iwO-w-i4ipTd(<4C?KZrjNaKNdm!6Ppd z&;uVDUP_1mM|yNXpd-(p!RwRf_mex}l1F9)Cg;`c!A zj`8MsF?C;QV(RgHO0SvMjM#^_W!Mr>8_lWAW?LV~Z|ARi+upy(T~}4HxzEsa+m_nf zU5dDEcQ$>W>`y`e0O(%d*y-$-+`W12-t4%T5MWxGn7M{iQ95QwAF037ABA7dxZ9a} zp61=6c#fNeK(?Skok|$$(nVRch!r1}9VNF)wGyW=yjW4T@-=uU)Po>oH|dxJgFj6v zI6A$pwE1e&s*Wb=^5Lj#Wu8z6WhjPKB$;aE8JbfV-B$Hn`KrqJ{L4>?95OYxV9#-s znPa4AFeE{s0L6M^3*NC6n_76j-_#;nkrL;c5K~kb0HG)Aoi!eB5jbkiVQ?*|9BYA$ z&ZJ3@50pVNf2v8wj;iq9Xqgs$**drF`?rv6IX>#RBKIQ8#BDugCDUuPVRv@c!1DTg ztHl95bmRI*{{X07$XySk^*;3K=^OoDEjFBgg;uM@>d%+|0GWNk{{Snl+VpL!d3OBQ zU-xi2R%w_qrbJLy3rA3YJbkGyVEjND2B9R(=mrm%c}b~(g_)iRO~-o+Q8geD;2`QV z1QDEoDTXl%i2xab2?9wIGd*A&05(`u=Sox`Fs*(7U=1}jFT5S!f3*8T{^w(SZMl9| zd1s2^-$;9^_Ytn|cQ#dt)pKXIS`svdagWCT0Gqx2x%_|Z`+Ao{de_yrZmG37%hkts z6W+g%J+rs&Z(I94MP0fLy0>({MriKa_w$+9n>&8t*^W-lum#QT-L2T)YEUZH$s22m z!k?thK6UnY{@gu>x6ymIr?%p2JDY1Wr1IzWKU4M3;hvXyJF)Lu`m5%z>4PNYxPBkFc%A7#P^l0uXS*)**Ws|X#2Zmei$*IV|&}&{omYIYQj;WVh-rchLeNyTFboQlD+j=p ziKcnvYe9tH0)CvavgC-!9P&_O!>kNAgf!DBNT@OoiKzI{d~iWbqQnRi01^!*YZ7y) zz$T?YlTb)M>p&y^JTMP{*@8haC!iCMGoSOr?jhAoja<~DR%B2>IZztp3BcIZd36;@ z138ee4q(C5OlBmZHnwyNCJQIInyd&2I4$MTH>%}Dty9nHGoMYsR9OA1~TXx zS;a(U<|08gidW&55Qxue-PEnWQFMXlT53P_4=^w=)Xp3*ZZbf9v9`_VT)AvSdTc{m z_=Q~m03MhtoU(|=ce%0u0Di&I()F2PA4$}?)@eQ%1U+YXmnxS7{*tDXkjbQ+qvwR- z4+N8ONo~#lhyulenbZeZAY~v$Bn&8#piC^#zyeKA#yZd(HG}{LoZw}V z&R|k11k(v1kV&RhkO-1ufRmIH7;b)I1&*yiFj`bFh!m`k8N@Xs8Y`>IaB5W^ST!&v zPE#E)jO&bcBq4M9eyR{p(y%oApkb#4ChU`98-;)xOqPvNFvc}O6^I$(xBWuOYS0SI zv}qCvAQ=EmNzB*zVn!KqJhA0q!}@~3fJ9`mhMoXrZU!wR=~@D6Ng#qqip4%%Fw%e! zmoS8uKs=;DB#Ok32Ex^2PzGdF!D_Zp0@M@#092abOYi^*sQ}1=3lq?ZJ}`bW5r&pC zs0|i?0jL=h=40~s91#9sAu>b-RsuZID-r}?hyj)?3`mjn06wA6{IJ^MGK&)c(AVXp zQATqjP6U8OCop7qXXOA_#E9_A2rxIQOD#k|21FjD5#tyoe86dxvCzcC8j1)#2&Clz zj3un_5TOXtAwq*fq6`6?)Erby0U5M{QMEB7!6pQCGZXOn<1iXo1;H;QWJpk=KCMCt zWBdjf4ZD(jtXAA8tb#>Gb?aG*;Qc^ph%VO>>=b~di3Lprh^Yj1oH)cZ67=9Z`==J- z@(X}zt5$2~G6$6SQkcg36t)(HRp%o{&5OaVCC^EoU;C$0mNXE=&SR*@F6T{ZsH<={ zW%DC8+Ul2bfrgVe5bIMWxl~e>$3NP=T(k)`y9ldsi(D!J5DJRY8lZ|%d`2iu0_3m& z5CJmLQb{0m{;D4w4NeQHjDWg=kgUQ;f<%}Z)cE5aq?MyY5SW@v1!JF@VgZTqA~d#S z;_9=^B{DT~+cSfykyrGH^La!PL71P<6v=1+UfdVcq;#Yen!sF)z!)?T+lF~F)@npa zGGKUVjQlY$f_R9!nSgmsH3UJ_O&L{41PH_KoQWj^?W70^= zU}#Lu7<3~n4L9H}X49Pp9ZFnXDdup&Nm-Bubuf@hgEhu{u<$8NZOz1FAxi>DiEk)0 z3`v3r9XjCWwO({7Dat0>s)Sa7pvm%(#MP37WMJo9D_fb!-bNXdQAGd{6{G@NQqYL- zICbTiu`?b6I*X>F3dxF3nkE{trbZ>-50yb_k1CxC!H1rxpop0uIrtC`cuQGA2I7#a zAQ6yhiGw~;KkEE3bcZVw0J{cARXWU)NYu3>Jfp@>OlN@6hGAAh6;@EuFg0q=tjy(| zaBvwNo-PYf8ocaDp&v{FYFsh=v3q*>gu{YEDyR`4`2+wAoZ?6TFNQU;l^jEeCMF3a z>Zw=EfEX(e{IHU=@RBgt&A?e((;A;xU!B!Tn9 za|jF=0Wet0c*$QIP!cR8XT;+BW6rQ-BCXAj#DA zq((||q;HIJ%<2sAGh-fYs)1(Dx^D)#2qya$L=NNO^7$gyGNe~N>MHNMi z!7VVVIcRv%Y=R6)sEMX12ja`>Qem?s zMx@X}f=H}E!Wza&5V}T_Mnl64UT)ROC9PWSYDN%LhA|f; z6XfVLgIpo9R+Vix03fI_EC8v4Ou&OoA$JC{(XU(ZZ2sI<5cwuXW^#JfW zqef;LG=gadD4k!0FxPkzZ4s%YRY4J$X#!tJ$e56DOeq>32?JK6P-1Idp8+_ZG;>b@ zrT7LlkzSN42qc)S{*zA(qZLN%rIoL7I@X~9oy8R*Ai(oy6ruRyETPW=Z1PRC4wL4H zUB=vOKU z^8y0Yp^EAq1QCoc^|#(s81#bdB*-;2InP+4n3?g$Y0QtnP&E<=fPAezE0@A>agG9N zbHxrVuz)Hqk>)TwqDjaOfQr)%M-2wp_ol?n0D{xdnTV17S>cL!4l2u-sfxims65Lg z)Bt)6un3fikN_wyO=N))s4w{BGkUWy5>l1cp|IiSOz@f&4wg~YZIS@EMQIrH{mXSeuhjnl z!|3Oen>OL5lf?F}kEN$avigpu75@MjJQ4Q;+`fCf`F-av%yKt(H}@>}8L!-6p&g9r zwpgu&P+|oHcw_W$NA~YW>3b^bzwR}bwU_%I8`OPQb9&CZE;g4B13`0r)#wJXvx~PG zh%Q(gXhB&W1NjVw0+{wH?bg-irYg?^yK3%2d92L#n&)-Becj`F<=4ExGPq(Ghp7yr zWVVXOUX{m1X^5&sIN^jqM`ZO2T()i2(E)%Uk*GCTvXBWe(*s-{qfOOH(f(sO+bjsU z*VMIOu|*{WY9=96P&>B<%v?Vhk)AX3aYl+)sUuE^`fl8H58I+=PK1( z#{+WYU#LIc^W0KCf`nW$6_iRt09v+<36JBAFDj~9fUD-kL{p@?`ox7 z`T^5I43<6^blm2*E7aR-4fo^s9#&=a%E@RTX@BlHX^lh!D4;-Gsf|s^M^C3dpjlAO zZG$W+Bqg|AKqELLL51ou!@UaG;QUDmZ(T(wzMZ!rnZ&}}1=KCT6-0yvVAg9G&aT|) zIe|2qB#X$)H<3wa1zD$Epb1NN6q#)1WK-aAuO+uDjJ25}u&mO5F5j5l+jlIKxwg31 z1cDn(y99$U- z01YHBN@}h(=8S5ZCi``|=WmyX>~22U?+Y9AXfutr@Wn2)E#(XgLmI0CLJnBRcV}yN z3pJ0<4R&`g(=RrwitbpGr+uvVvzzP=b8CN(-@TGqb?w^Y9k%w_Z7pK*2U~4Qt5#z? zdT*+F6)$JGvqZO(n0yaA(e>+gvALBP{5~*y?e@3#S;lvNAGNc++@jpIZq1F=i^Sc% zvbw=-qIzZj0Kc;?VHf}wOx6xPZEjm*ckOS_HLV^PBX?rSE!$PY)B2vF_P2C}^lw`xX4w#GpcA{c;m_K?>b#s{W^bh#_#R(Sy%j@6R5ifY79LN+Yz_NEb+@g=Qc9@vT}TCi zBlRlOVclAm=3h?}Zh1)-D}H51w#AUHU;#ird8rZOipR-`R}ja*dgYZw5jn&XY7d4K zq@{v|p!kR$SfoTjfs}mlmF9bj2mv_*{Itaf&kt^@+LMOhd<>vPM0E$m2oX5e>&vE4 zWiH{>KopvgC#RGXpX1?-QkMX-O916Y=%koGO$qC$4!v=8Sdp&Lz=5WQ4rJ!URL|!a z&E;f3n@p$W1P}#aWl&&AjAjGYB}tl83F#969Ethhs^w5TaAe)hmAhqv)VflW2d6>| zo|xL|Ylx7m$crueWDBr1f=o+~=yx zOY|?BTf_hX0!%^ZMNAnnKbAVG;Tb7PHG=;DX5p3d8pI)pAPFboAD#tfvK49N7i&&Q zQ>jP-46Ov8k5SVEw>^wc7f-aAWmwCSb!SjYm@o|VKZZ1}gJg?$PMIAJf?9NjGXezA z&IaNaYXRp_+Dr)(QU+A~GZ<`aJ8GcJ0(yfrJ{9W+JOGeUUZ7C)2k;$m#y4<-~BKc8GC0u&&?0z?^^0tI|$ z$EF;B4Q&exkyJ1yW^?N~gMd+<@#gY~&XG@-$EFZ0joctcnV6_OdY_QPU4bBmI#>~= zKmb+&jQY$B5Ce(>37D9WKaO%DbHV`n5;7v zGC@Dmb6Suq@bJN)6dinuQJ99MBOQA+bdGF? zcLBS%3!Nh-6A@S>$mm1^j=HQ*6vDFf(1gSS0bi;*L5Yr)@W!JmMHUPR)k+4C0VHO6 z_}~H#_jzNF*>3mSyY}|`EscxYt>)(G31@4zvZb$XFS{7GX2JqX7yx3SJZKQ!5svns zdv>3GaCZBLvip;U?v4)a=G&(w!*A?w_MW}ET(s9LGkR{m1`HX-pKdkM46SHCB5XVZFgz4++5nJWH(;zv?ATBcA3=Nc5(r&Cmv_fJtwL4e!iVH z#apv$J&TFQ*7elrHlFtEExMmQp5^!d05|TBIlAtC<=vxiKYCYyTN{g(w>tz<9eoR^ zRn^1!h@lNmnEH#-eW~gGpXv4Kw<%k1^5yrl@Sk1x4^iq}ZLhOtwkq(nJp%hy`}4WO zFB$FMzFVic#~Y`Q;Jw4U0^Z8iur2L&T>7&YB~@YfKS(h-+jQu<_UA=!>U#aN-tD*hU9R_z+->*#e)Df{akJiSZVTIe&5MY)E#0wk zNmoZg2s4kxx3>58Hyt+@EtAUQgY`|F{jJI^&8D3kCGpr?5rCS4M3BM-24WjJ3KPJ3FL4~+&Gy`dmzzuhJ8jLfU~YEz2pa9&6(D8TAI;Bs z{{S8PgV}vn=Fh59&b;1REh2aySo>$({+sR&k#F>OO~zMY2J)B$voTc$6o|M$g0qtV zM8}Rj3YPnuYSZQH(~gI>R?#c8i*DJrp|4HTt(6oVC(H#oihly6Z^u?)MLs^AnN zhbhOtZQie44^H0c?YErrn(FDceK6pzgt>Cle{ovNC-#D&jZRA$(_HbgN@Zl_YE%L) zS~nR5+nZb4R=0N7q|Ohi0g~;eP^R7Be8;cP3R1F@H(bHoKX3m4bvwQ+ZMz5EOOMI% zm+l?68Qu3|PTtkf?3*rPWF@_-LMw&SIpQ~Iwba*^%gx6aXJ<{-?{vG0+|QM0)*!z9 z#Qmf3z2mpJ?l-fxHd}t--J|Zg4l8Ktygzbn^!kX_cGf|$XOM6yabPhp!npi@-Twf` z9XF`$->mf7s&y$g(!zXxXVM?Wzsx;Pq;6B9^{d-+)9nggsehs6cPnR+;yEqm&v&rg z@jQmY{p(xKBYKauzhiN2BIvtj;@ff(;4nn1W-;@RQ|a6NF73K*u8y5Wb;rb?W%?hi zbRMhISF7kZ74|HYXDj*zv~S7wxm}2JZuZj_glz_szTFcMfgw-PO2ex^}=en^rl7aVEmRMY;hg)|maf z*+0npy%#4%>i2JLL|az8PniDzls|>`y1HN1J-xP;{7tsk9}nnsFWev6cVv6{!Z&#K zE&exz@0->J^I^%Y5wo$a@^>QwHBjt7bz=h`)1le z+}PX`6_ncez4QmgYPjLZE@~9 z`E6TQDCuxT*9_z#RqBdFf(0?=?%GbPL&GR({vYUFE!s0^S-Ef^x>&j~vv~>-%;xQ~ zE+hjXg!G(axwB2}u3gH?eYr;4Tb9|nwJhav?BaS2_QChJ$@_Zy9>(`Z=IfX2)poVV z_X&2~avU-~m9t}a>Pz3)+EgwGGv+kukH&rJ{BO0?Qr&l^s@JI1r11X$x%zLled~Ui zu9vQE+cU1Pdo#gz2MgT%X3w7Bxh=0N#Bc3e+-&!IORILx>sLT3%22Qk6lEqvS06t0 zT^CW&Z#|BpuDgm)*?MlXW3AX*y*;_A)(h|oq7s1li6ogla-bs|XL_D28P%vnk}?Yh z49KQ+6M(1@RF5q5lj3Pn1E}a}7$!s&0O%&2VlyUUBy|`7X6Ot8hOH_OKx$*9a|aa| z@d1{%1!4>WAjM4TtkA?|gB~HFgmMuH}52wZ*G#Q=ZP#-94x8UsU$LQ(N@+Z>CQ* zd0!>kahG=XUpv{m)3fC*ThVYA+HUs2?rnFwVdYDfUrL0!;7eORWHcg}{$>9FBmV#y zdz08+seXslHk;`!Je##m*2#X2tj15TJ*V#f08RHlO#hR36?QM)$qmE+qZ72Cxbxi zMd2NWRodOv%J!b%Zn(?Z(7nG~X>_~VyePb$#1ab5?Snf$}%Gy`$=$-s)}B^_y?( z%Zqn#JjwTS*skpMUzLs0UFEw*{los(-1bqfLbj(}hb3y-#@}&Z08Q5NIEjLB`o&tZ zPPxJ8yW2a7PPP8#quK6O;sjq&RT=Lo8cnOJ^maf&2I?80pdE0nR-2s;TUAwm-6YFa zJsV-s#lduuX=h6eaP-FXt{RgJ8O1#oObH+ zj%T&6UAz9G`CaIRa2~T z@s4NSe((Hm{ITjD+v+K?*IxJNo*}t)Q~9N9u06nmSs&+%(6D_XoCp-RZvM=&RIp zdzH4!*R@X%>R30MR&qe}k(Hr>f)Rp1M$w+Nf=o_44R;+@W%nM>W~)@v!y^j_9^pv5 z;dR_%s-aYchGjAkEKG{X#opVScIT_}EgJE`lC^B3bthLU9%SnO0Ac>=JCE9Z{k}7~ z`3^(5J1*_Ly_+_#+LLe3Mo!Em=-{L`)^VegL#BW$Jf5i_vZfqKj?p@Dp_s14?T)x)nx3FtovDtHWS4caKFLqZ(+mKzdr;rLSJ# z^lW-&8rsPs>*T{pHSrb4wSCIk8kp}rYwg)tD=4;5tG2d}Zr$5O?q9UlJyHjye6%at z5)PQ5lTj4KTGe!jPQ9E(Tk_g+pJ~#cZ+~?i~z0*}!sntC-J=5D>@ajD$b#3()cG!50VE0?w zPjve;-JSz&+?}7xZTStg)l+`LvaauEcS@U^ZPkf4Enc@Z1PI5>{H4}g z8a@pD+tR&bqxC(tyVKb>*lb`)Y}tS^AZ6k+m~RYtMv{2Y^D>rGBq0p5LegplMQNEd zpTiQ%PF{3t;eg6zL=q@uW%7fZAIRaMi!_NKlNA7YgjKZtGk^svrV9B1l4c2>ku|Os zx_~3}zyunTR_aWihA_Y;02nNEs>vcr8Ay>pXZQ>uETs6fHY->(H4Fg~Gaz_@pZej9 zQlv})ooGRf!x%qFJupmwF(HhJp&FaZ5zt40r^5^bojL(=q*MYRie?~40Cd9C03TWM z%oy^CK5XEUW`nLD00Yc2A5qc-WmC{~Q~6as5#CO?S|Ivyt-|IzM-^j+X<{yQ&DDSp0G}57hZa;7D{soGXvzf z>2Edd=Ac1)PLX6sn%b!^se~Vl&xS6p%|2};)_kku;tXSbcEyxycbeV1#1L(pfv)Lx zR7;K&qF?mphz6Ls~4O+>>X7s`!BzHch5W<>|b9Co}eS}aVROL^9*RYd+D z9mcGEgX(rB*cRhJU@hGtV1mso80jP#pzBkPZd*)NPKRfRd37?r%kNHGvAGrA@%x)W zuG}BEvTm2Re!{k}mp+h%0?>d&#U~wA-{pl>p1{7%Hz|eYJqGr>-Ci5KtlGV^zi!VX zX;$YUu-vw{wBbu3OK4a%vzUTURsv%k+jn+;XOwuW({hel!PecQ-HoA^xGG_mL3YSTp-;mAcClf z%Wp_NX^%Hvm}-sJnHgP0qk*}0JcX;EJ>AeGNd&HcZMtb}AHlYQ>1SWP)?AL60R(%G)%}7w&i-qiO8! zI=`oZxOo0wb7tzji>e&T+_px3Z8~lijbVVIlce}#Y1@c+M>}bwc6PsX@9d(ltzytX zJyyKHUpj;qRG@Nl2sAA^;;#;|23*UVm1y`K0oy&$&uLcRd$(Ipov#(Jw*IXEwwrpu zsrpb1fjG_5d=~>I&8>5ToHuqB4wozEe_Y~?5;O312f_|bt07f#kU3DWZOEwn6 zeAg97a9vGCUoW0<0glh?=KebhC?P*tEx_ss)th_He`P);$x zjdt6y4vfwLFiUAwNP@rDic9Kon99MA3dH4T z9zG|o4m==lwGnPzxp7!KExT){Rl7F*BBTD7c$H!*YbKduTuw&|whVuBX&jfLvWW~q zcoSBKAr$;bAmPRaqeNr((%6%&?}eFBSz4F?fS^r$I+_e>l+|W1R-8*m`>LhH7OksX zU!vNPxQIkAP7Y@#? zacowF;$N-ql+CBzf~sWcz6%``FLOX3s2LoWpqxyTl;M+Y0MtM$zwWKJf{koAg08_SHykby1Ho=XR3ItUI7LuDiC$Uv?kE?Iq~rQe}*wAVF& zb-uW&Lj?*Ubd~amKY;k0RHVT?_x?rB#mmidwkQ|OFEc!nDh)=eRE*AK^umP2%C*)@ z&8w_uQx+wy$W_&D+&~9aKyUh>#y}H@h9tOfCfpvnG8CA7Bfuk3P1cyMfNy`UD@{{XaXrK`!KT#Y4|0?1Z$EoP(xGl%*edwZ*z%FoFd zId{3cFLiO6=(@JhnI}SPMM|?MH(@RahKhxujIj>1zNb#s^&3eip`>|^3eMH8xw>7& zN+>K4sRV1%pdkS2r%Fd$a$b!#)OH=z+~$f~ML+6npJe^cwb*>?aa+6FkM=%R`VGbH z!|AcL-m?R1bS1+gY9Jnw2NkhozuQeXBdOb4l$G^%o~HJHaqKkMyk7R`-L{w3=G)U< zyDR?y+AX=b>V+K01Tl)7bh(L8de-f2R~Cpj?+?oU<3O}s2!h%)xPt{s-J&9}GNKuP z6W0}6!-kG_+~Cfv-)oEo`{LrPD7Ny;QBNo;phZc7N6h0sJ>>E4F9P+2O+}f(9-Oc? z?5t1yv1%1a{A1^VsSh1XhR*(oVGPUymQ^GwM@2$NDk5d6mS+=bK+E#(*<}swOb`Qb zwqggA05ggaGBU(G;8GUfY=r9;p6MsZT$6H^+eyEv>fW8J zO?ZF|=~V+kA~TqumL)0h0`+d~z`DI6lc0mE&2%+R3(%J`wqoeC=(<(FljJYy=URqJY1=aNh-==Jdo~fk%Jr8 zgh7C+S6S&IE2R8}CD|+#wK3h)DbcO3mp?_3sbe4>={iz6>HP7eN{9&TlOBITF14ot z?to5}F>cV+9%cZ7#Q0YaF~cQ8?tzWRroe!0+|jB)I#phkZ72(X4J$ZuEXE99d&u2( zUB1OG+|jKr!g@PPaRvZ7p6aln6_M0VDyz+(%s*2Z+-~jOyx+XOq}pJoXR@|d&aF_s zrh}Eg{NyNrx?L(eU|F@RN8T)ZkJh$rJc>dZhb_#yP;7=oWYVnB%H9) zuQWC{5to9|e`T`UUq9{_mG=-=ZMK`qbmT?LjL3+n6=VUBf!1+u$|Ab=6E7)gBpvSi zbO0WqTPhimE(f^8C;=R8%3ruZ8MdLRj&#LUB(T9gTq4JH_q((kbG5g3)K+VIt=fw= znbm;`wnJLl+O?<5y0slOIFy?6B@6q(O+S%kZS~!|S=;Wd9o?%%h08XXcH4W`C(G;K z^#1^Hy=5QJG|2;2E;8J?{Rb&HEqsUjpCpd{f?DIvtu3@rY}iyP!0FpBsk$qe)p6p4 z>8=X$rJtytde!%{8g$xhlH2dLHqD!WBHguW*5Ni`ew4PlhMmm>lu|(;NWymQQ60Y@ z2(;%y(Yf8AEH+kbUAJf{H}^<(mXOp&ox%s*Lit#dAj!eF-L#k`zHDU0_s_P!b$9#A zDBCMmnO?%&D`~DZS(U(aQeYc;Qy>61IV{w@N12+KrzOfOo4XDI!t8dpPfSB7 z1$DLRTP4#eeBGIdF@m&)xuOTl#>O+c+zpj4@*`0X{{UmQa<&mwj-OB>+ZP4FAzjR>hB7AvVdDUs zT4+Uk*X|28S7&Cz`Tbk(U_IAFri8I)%(^5Q0GB#NaXCvm2{hAk2Iy_=rMt}6b)p+d z>24lvwMLtE!!uadBx*HUnno8M;$}KI~y{G%~C`BNWL`Ef~+&t7u5n|*O zuU{888^O2RrM*LKwogjSr9vx!!S7r)>#Az7D}?2E4t%`0f*IfKwxBhQx?DDx=-d`X z8);G&s5~do?<_+ey z6j8F%T9b#$s`03-om_Dl(`*$@w&7u$(_0p;lE&hY#^Y`-$@Lu7fjPhcLBq!p%r7wg z&NFkk^o{$8$5|IZ^53-Ef*|^g0v7WHm|{RfB*`NXo0-HJPb{d)BH3$}Hw|Zsv3ldn zx^FjD?KR7dXlXaEAs&-mEJVvgPys`P<+lqZRnA_d)Z3e$efH;7)Kd3tTijf^ZRE@< zYV_YzO@4sVYXcROp=u{Q(O0QCc}^+Sty$x(*|?Ga0J_{UvvCT;T)LKR!`y@t6u>G( zRGd7N@t2^tHx|NMw9RpCf^H4P`!-qGNv41Zu&m{&sFEAUP9oOjvh9B#BPW|lYQ4DH zgqu2*S(@W9W9nSFZ3>sUb&Us>fGlYeB5+SD(}+uNKO)q}ad2w6ylua#glXHjMY*l3 zt`4WRMsi0%ki;hH-E8OMLr!PK5bd?Sjgnr{SbL?z7!7gUQrHR$ltn=SfId^=aFn*& zTt!BoZ1<3NE_U}VO4#IY1vj0Y&6M>Rup4x?NV#$CjL%bCgkkZFiYsT#+n*7XH}0To z)(wLU>hP$RkisxzFk0FyLDEPjCQc^OvsZz&NSsINFka%?xKq?<(hlKBunA&F3v4;R zd7w;z9v}gR`I<{i{wN)>43}|i?Y6dkWpz7+P;D_Dil6{%yoyE3j2aGrL`V}P;*(K~ zzVfE78eV81oA-9s(Ek8!n(<`YAa<~-tp#pw5oY$cW%-<_1~G1_wRJCmV_qS!-CT8T z-J5%1>5U34jlGq(k!D=f2B-{4Vth_5UzJOhKMZn~x)RNuwzG2YCAGPAin-ZrwZ7z( z5T3DhTVwzP0r(70I#u$f>brGB^F!uJM_ApJD|+6})v#HW4W!)M)I6^I)(OUH%b8)}=ekJc zTI5R`jncXOx<9P<0lDbh1g)q#$keP6g3?Enbm%boES_b#pYApDl0xm()vg`E+S|8# zUBK(A^Dtj7n_^n?FGgb{!kD{rS^1o>Z}lA8ZxX>}+Y`J%S5opuY+ZBadyI%w+bm`) zC$4x(tuEki5)Iwf-*bP}zjd{jWBXmZy4q2it4yQYn$ydX=~z}y6h(xmSjec!>iUXq zU4=I7>9wq|3PrR~0Ai@wvkKA%XBu)VD84HH08yonF)^=hN?WkjZQ2&pTtqij?j=IK z$^vaMV**IITtih&@^Ml9hYDwim-j}&H!XS%x$?E$x-;$^{*?+ohHW{jiuLJ-d(kBg zwuh#gj@#Puw=AaS-ob)jd%kPVJ!-8kEw(C&X$C{-rd~O=^mwbxi-rc1Vw*KnySTfC z1ck9}&E$7@1@3Oz6IH0LmC&>Kn5{g|UI6)ck`?dUP}^2}cJ-CJZ&s4-XsEY7yYMIs zl$rSA72&l{#TnKoA4nDeS1OjTJ>5d}#kA#Z*e#p8RPGyALSRk=tnHO%SfKey#Tizn181{fHCMB;f7|rPYl;IaN7Aj-XNbMsvA}%KrjW}8pgxkqB#>p+MrMh*5V{w9$rr{5z zRzx<4B36S5H2eW&Inqn&YEnX4^rEEO5urLNL56;kdSHzA6^MdG$7N+DTr?Q~YrN|M z6)078P?Py#nZ8vPLzeefVJ)h*rbu9*wZ~9(D;LPjbcnz=Z!a(AT{c@y-uC6YYh|vn zic1lyp+IGUrG&@G;7&YAO(j3%ZeH2#uSIO`H#Wt~ip79wD21Xsh@7nE< z>ALOi-QOeGZhXg+lH@HlSBXL<-LgOT6F*KkclVvG6j1bK)y99w^gVqx2oxv?p%G9j z+qG>}ExT6HL@FYPP&^|XPI!>y7DZzLL>M2!v>j&yvv}YOLBB~8=~bvPPXk(hI3?-8 zXcK2i6JDk(2Czr^_~4LGLu&zqeL3`*taOYJBsOgTV0o$LgOvy+rkRWaBfXFW04PbR zsE{K+o&nEk9NJ|Eq#p^Ic=fQV?jO$d+a@x#AMCJU3 zHLFg!%Nah}XtW8V8fTdC%wtWe!tWPw(F6u3AW0B05o zZ`-`TBeh-a?e{xv_jcG@Qui)fwq(hSUfol+=TlUj+Q;`i9{u;WsY)fuPIoc;oowCZ z&UTk<_MaA;ZP$MHcKd`)=H_>Mel>j!uGM!OmnFa4-dM3}$put0>vKpIj(&=pme^a} zRIYo%NoTn3-0MEyF4oiLv#j@HwUawP-=A&!y||5*)3`R9UT>GRYB*cW@42(Qxoli+ zKIP;_+MU`1IyLJHSi|1`0A;nf;inll>AJnG^tD#~`;En@lB7wB&q`;6yUwRA#ZaZ| z2TXxI4re&XU?`w|L>P|_vtJwl322}YPgo>nP(C;T{zkX=Q@M|9_ID?_uuAWD;Bee_ znASHN^klhy+MhA~w%9Q&CM09>ALjo6c`s)F03Y?8X5H0#?dmD56E;f_nH!=-I4ubB4RQ;ZN?oh(IFs&uq@K+Jgm0IoRqb}enTzx-R&(OWXGQMiNB zwgF>s38C_!{Xw!*J~hKlRVt;;kJ|;STb1rkSLOx9R9y~L24nRrR)NU+vB_#(?x%RI zR=xejEyUl5mYI-hRRx%_VhnkRrDm%qrZ-lMs2!VjiG+uE+jlqH{jS2uXTQJPZT5R| zf>pO0tHR1zC;=t4w_cNvX!f_H?t0g)^q!Bfows_O`cW<(XOn}}`rW>RrQGXx9Bu8< zxAI@P=@)MB+iu+9xZW3Pi|BECD|=KZG?%$-AKYJLA5&f2GZQ`oAKK4m`*)@GueQ2B zL+L1~x3RNY!tI4G@je&z?^3_3`nLZ7sBUH7akbpI7p1tQ5=1oqiWnoP`HXu@n2raA zR(4FKB7}mi<*9}&xr5ODJusN+v7JRMrcawmlB+Oe$s!JVbNq0I3AkwzAV3Bu$~8oc zZ zocy?cJWVTnoiS%aT17sp0x2WPz_F4^`D5gb-lpox)p546ezcVnP0Yy;)^llnJC^`N zJy}h@uA!C;lNAO|4ZmCKdR^-8bi22vgLB4 z%_2HSJEV z&AlJhsLnpR_Ama~`#;xtdT()abX{9Z%+&4Ajxc^T>%YR@r_#>%qu!lGC+T>%hk3mC zZsXzk%Vy^h$?Z48LNg}b`U|$zsHXLuLhZ2RNCX3qru`e;9)a#1h17aCSF^vi(tcYf z5`IbQ9*gRJmAP%Mzh?V(Pl{=NB!uGleYYdK3E~t@>!6B6nnp$sN`E=P@>12V1s5P^ zQ$jp*fFm#YVM5i9A2c?sBDHLYGERL*L5JW?bkEdRm`N?D)G!`7=lW@dz-cv>X<`D! zDoYb1>G}My1jwP_bSlO=$jlKybrBJSFg1BaNjiY?31U~{n+n$qP@bbq;!8<`&{W%= zgCYs=7(h4bvC=^jT4N~k`H%H7$K!ws^#D@JB}f`W8p+5+z%yT#2D?G2!y`EaokZpY zfg>RzYg%-{6ArqJXu&fC0pK#Jf#7B^z=OHlSi45Iq=TqjQc=Nd&ZW#T70)~<^GNi` z1nu{hYijqbMG-G`ioyLPS2Gx{WyK*Z;frsRfUCIMUEAClhXA9rRndo*2*q;qG?QGT z(+HL~32;%s4812XB$J++pN=C;65EVwIBp>jG|~@9gIu$z@xo(~30b6qz>2Y5SrTTW z3;~d{kf;piBjYWb9U}-pF&UE3Gc`2MDV+4{hzMGZ$DM;OlS4ozC13$bBr!cO6I!+Z z0LOqOfM7^vrAhi`l1lusSbFMMCBQO->F^+Gr8WFSe;iBzhUhw}22DgLI-tP-RDws3 z!wqYkpc7D1ts4F!B4p4Jm_2Zo7y@1nuOJ2_0&D*OQy!J2F-gXV0M(@H(m*mzB0wU5 zc0%Ln&Ec< z3nU#vN|Gi3)KBPx&`t$9@jxmA<^<|9B0yMPiysL5P8=tw0@nhtl2v4>CSZyg)6^5! z1N;!AVa&?t3Il49S`$+Ouw(N$mXZJ-4xoWbjWwFY1E3i4n6JYL>)Zr8qe=4-{W=85 zEt3LjBvP1Y0cCNN1jJ^E>L zT?ICoBiy#$o7}cl=79{Y!CJ930LElz;f!ywdgJshyh0;2tLlxY6)Gi7!AXpX9wQu& zZ*gWC>>YIC0l1(`NPr;FED@0EARmo!d?P|-tyVyCrPdjsl~5XoEmCO{6~M&BbpV!7 zGt3T#oj*JexNjNN5!j#v7GwqUJ~KK&g9OeJ)FYWnP~;sEpch379FnX+B9kQa2lB$^ zPSJ^tLo8c&0|Kn!lt8JZE=nRNERJ|{+93;T6Xgm`VzOogD3T-!94$N}_bS}nvh*8P z48WJjfer_fPGO=Zl=xvM)yp(xwZnz{1=&68)oRw#dVSW1RToALI|TC zl41-Bm|nBj3i?4x${=MBqg<9#YzTu2(@M~pt4GTiL_XoXtPL&8H)yUkTk_q}GL_0H zNciJqsb$_wW4u<0Duz~ANz8(2`Qn>Oyt)-#Cy1~hB!I@CgXJfrMNM&?K9;5dxKqR! zI+6Gf(g|gF<9|9N~=mkVP4+hSwJz70(6PjzK#?ap5M1htkT(JE{&6O^<6b`curbrMNtX0O5pNVzbsm7^JaMgM zC}PI}5C?BJ=@TFtfHN}~p#4W?*%i)$Py^+eU<~9sk}#n>hIkh1*0&$IvvDr6pm4=h z$EZo5Az~0o`Qbik$7q%mJigNA>={Z5WEr54D+DMxQv;QaLIJeCqawfnF%boUAW1Rd z7_Mv&^&V!nS%6S|CJF|i+DIgM=puwb>4hpKXhY`hh8?w452%eKX#lejztUEj06sV# z0VtKnQPXY$A1ESCOpr5@N!0)vcwtDyFQgJdYO3mE_(?G^X@CkgeMJO3ump`O0l=A2 zQD2Y44pMLesJfcLQo)FiERa^Rd?ieN7(h}so6T&UL;D&l1z zhzy~o2^4HU9Rv;A7p;QU;1Zx{V-~^BP&tQ#BMGN7I3EaO)^_$(`hiBbQm#u&)JX

b{l%dT0I(pe(uB{CjsVvWLDjcW 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�!Me83`)96YNxUILf$<0d`0zS>^r zrZ@LC%2^O4t+=|tGZaf;AH!4Y& zFxI9Q$Zs#)XI-i@+P2<}z24n*TDNh@^OU)w)w{BM%*4ZGF^2h~YO%zon$gNJA+p^$ zy{#?oE!$$7i?;7M+uM~Yy0>P3aMBJyg@Q~@Bbg;U2hGK37~0>qrP}4Sv<90tjo^uW z*=N*ygsU~;wKE}%3gA{wxKSeJsG6motix>7aH7@Qn96epb0cMt!t#?7w^#4maO~TL zpIAHjuUXX4uE<;mb_f2Vq~tW?Eb~OT78X-6t=p)uqV>z$S7tEJafwSNQAxCXEfB_VoB*ZNiJyB zzmZa_k&D*u?5;lJcx|5XC0(BRrO|mBw@GK zTI<~7TXTJHkc3@$7VcaF)0DUo#l`8;eghL$mZ)%&b}d_<-CizQ{56>d)}Z%%<4h52 z%p`PTSwZ;V*9a-35;hHT&}3c3;B~LAmhCH%0EAZhmf9DfBQu=_CA#+cy8_w5B`LXQ zLOuI?R@?@-uY6m$&Sb#_gxdjTgvnawa62W29Ia)zU7y@bH?OtVx5n8wodKQZ?%;dZ zK-59BUX5w4eKde`kT9ps4LJOQ)=SFUg1>ouI@-IsZNPscC#j`U<1Dc)05jVe86fl( z!ilm?wb+GdYcCQnrMXjRZFcquwj93aadi!aRwrDo$u^lmCZAEP<%(@^k-Dn5TD=&> z`#VdaO}m?|^M+(q^_W;!6?>XhVWoykC*uPX&w9MVPq=Bcr--KJ{{U`Z)PLLEzP9wc zS(h7i5SI44WrJ}6i6p270g_G?qK+d_Q&#wvMzHsZd%-tX9j4*9TJaSN>I*iQTDNcm zLSjD=i?xzUac{&OntE_ADaLG*&v2Uo!jkOv_dBA>LczD7i%qNQRS`;>9AVDo@^KSy z{7AmG-r5A(?VS}a5VzhNb#%|t#w9Ju$$p<2;JW3@a>Imi0_w3*dgB+dAhq4XLfyMr zgtS$zBGl?6Vta?cE0^ux+p=2=aNR|8c0p#WYhD8KKh+`2EjQROng{vEdRWBslo|u0~UVY8IDhsL` zc6CWFWk9L6fXQNIu+{)|8uwp-2;bpapWmK&~MxYRRnUn2;}}hHFuCZlOz|Yhv%HK=R$V?f(FE zob)0W25Tu6ThME|16^je1NxV4TQ{E3WF+X-0iRO}#*ip5vH~mU)o*XA>jEP6_Lg5x zO9l$sQ5c$>&HzeWBH^{(dBwYSJ$=X5cJ2GhcGjKfwyarLLILVYj)N68N;F-iSu|fQ z?e7a^_m0lzRnOa_t*aJoX&`FQ7t|oo0aM|O`_Q$0u9Fx zmImAg3dl4nh6Dh@fVZYIq+*@Cvr!kt*`ix6ZWHH;qiHFm(qw>qb2!Fj%N{f!6??6B zRmWR;&V&b#k+0e(?&+O<+wng zNti%MBUl;K_+SF{$MOFFxVolGyF(jks3=yf0U&B`13)mRf-|$6BVusePo}|OEyf}5 zX$lxFp`%kqhLJ$46f=z~mTgqxF#AMj+iPoS0;n2Jl_>=Ifg}MSA22zL{#X-y%{~Ke zOp}J;`EGlW*zp`j(*FMdeZJhT-)FV3tow_*i*p2E4#g$;1`6m ztQ)t!yC2&Rb@;pdH@jZcdui^68M(6CUDn&Z`y;n`+n2V?W$k|NeaGD1TLkr6ib1Y0 z-08MAFVA|Xe&6V8wY$5pr)t)teV?N^>wo?<{?#^{hvdDF<~{iPN$w9_w_9EB+uyuB z-NE+m*LYmrH^2EGb3B(T*?Wsh<{Hy&G&1>MV=wsjtbMK9)*e%Gn(S-h1-Wgl+Q0c5 zJA03}m8<-kYxE`9_LuyUdtPVTAG?oZzUMeQDow7}`_hNUZ;Zh21fB7MMWY#uK zcJPJuZ)_N;^BJ64uJvb~R`ps(mHsY&LptsB+|Kpf-`cEVwo7)n>`77nEs^g1;C;{g zU2Hep$N2g8pMc}+-Ftk8ef_p~H*EX;*%ob}m*lMQyFJex-;1&+H3j{X+!;jTZ@ss- z{{WF%Uj(HupY{*6)hhX3&h^{jWk(&nww(7#p8IwFM}Erv&E*GfaKCVUq1xTwoSS>x2D^oF}+DE(-HpQV5hRq~vh^=F)9e$+w73Sv$L{r*YKM`%nJ*x-Z4z zJI>G8?(A}#6y$iV#?zPMub{hckm2{6eph387y`E}Z*~_q8&?DwqZ(q}8%|V}M_aG< z?5$PBIbVpT@LwvKUZFih2&uxz$w_|WC{|@_gs!I30!+r4m;ekI0rtLN7XigU5Gq9sQzP@kj=^eG zx3WxWVM8Puto0CJ$vB=>+!5MLUDlKVSeY>deO(|CN@D2walixp$qOeY{+%ogXZd*J zUSt>uU$#s$2_ir==z4X-=1c>XY61*Y)J#EvICx+Iw4{<_C|u@^^1`_LmvM-R(;p z8b2$}?YMqNn(iB$kM^Dd#^`CWz1;2g-`;=RU(;sa>Gd2=Hl=Fz-J0|8G2h&^e6?_= zEH2ykN4NQ|e{#sS+zs1ze~%mC>VgmW_**VkBmkWPgjF_y6CfEUgm|E0C*OI zl)&&fU#R8qMJe?FF%%FQOnAtep9}+En1IBBCT0MkF;Q6pgXC}k$RT$U{I2EG-FRNDN7VSp2Y=P9)~fetFij#c{p0Xz01i-8_#VTgt;>u(_vg zY^aI1y4{l1qYGmnA%E@1zAx#1*y;VL(BGGTt-m(!cGXuO6ZY@o4?zC_k=Jhe#`S;O z+NxE3?}|B4vpv^UR?s4)g+QnPir2!EkLKmKEcY9%r2hau2hu#a5q!yZ=+0I|_)N(( zP<%1Pz4slRlJd4Zw!298KwD}-g6B;MjJ(0L)@Sp_EvVHKb1bFV-UX}2Ko6xsBG@E} zDnIz)VIlw-9Pzf-C2KeMTuRP}tIKKM)U^7N$C&CKYpoe)rVb7Lo|@Ksn-*%d?cybC zEInBbuG+L3;@i^i4sJ}FVyRX@ryH>gb9B^-T>(%N znQCM9@8I8PKYRP%r1aZYpQf(rz1!hhL-Thx5W7!K_s^|u`Y*Tlx|HK~)M~x5)MLQ( zBG6Ev0iXb)+L`hqpi6ed0!D-Yd?O#&&Yxp%rP!xSvZH5iim7)c2gRGam)_iaw{vFO z@sQcd#;s614Pc3r(qQ9gGqdGVf-R^oQA0x+4xa-!S_DcP1Oo&ffDw=x%nIRxQEuXc z9)bwS<@o%t6q5N3y~SD9!rH+u?etqzQui*Ba#XenKP+XvzqQkCTYGuN-74(-5|Qm~ zUwe6NZLc+&QQF^O=MQ}MKmPy=JI9*m%iL|I^LE=VATxrtxUM+8jiM~o65^qA@oaw` zznT5(e|r1>0Ic;I+nb`L?X|T!a#6L8=6${F&qJr7`*)}4c~y706|LiCCL3zwu)7y6 z8@j-^>N={aEJ6O{fI$O1vH0HVz0;*3?mWhw(t7~MKsdioHCL9}K_779%CTlP%Qu(K z4zf%Etj4wnEO?9gZx?ZGH8iE#t`b|3l5oS45Zgd80TBJyZdy^GAqihGl7(63XWNnnUw%Em5~Ly00u4WFZ0p< zf9O^BCfLPS#(}-(LMQubPNdXfrGK~}kLS}3Z(nJuKgZ*Ut!22Qfa>m5{YHZ2%C@Nb zz#m%-oQ5%u+FI9h{%p$?!P{QJa3Ag6sdt^dZtCwli*T=JT510P=T_7d+KX}*Qr^1G zGOuIrkzm6b)O$)6{GE_(0(08#b-0REk|X7)N|7}2+{ z;BPi!GZP^|05+jB^q!v_eNcW#o>~R99L(lPnCaKR1D+F&c#IuXl`??TsPd@`^*|Z_ z01PoKfhHD6^0a`&R)#APN`81_4_E@UW79oD#wY;sc0q){LT=? zYlT?OLahMgL`+gN$IlE1cP}Vbx?NRKbu%#vx(077KmsX^6)w|tQn-?@ULo1O90nd` z)2KSN2w|&GY?)XZc;hJiO2DGvU^JB`V44#dL8fFJJOM@u$R$py(9kg z3sAy?F`t^Fz-6eP%K)tB3qcu~yv|_7LFhV9z>Fl4(?Y7-Qt%6Tq!{rB$3BBBG%GG; z0w^)0)qo~U58?0_H62taVjP5Z15R=PiR&a`0NgLsOiMT6T%gcIN6!NiQ9dka+y_@! z@dg@#W2FXoKq6`s)C&)$0n&OblTl0nA#y^i0$L<}LJcdJrU8txF_j4>7(^bE84u3@ zhNb~600Z>_sAW1@PM~S*{||i3%nLQV0=6@xd?}xg81>Rx9EuLZc&;d@(IX zKw*F&f&$dlqpHPDL9)WrO+dEZ<2LsQxEIoBGkU}NR|#R^^s%3W(;6)Xo*#J~t?w*( zlHlGb5$L(obb%6epQy%F6~bxp2~iwMUQI2N>x-LdqT9YS%S1x3`hn?+*0I45n{PNL zTih+e2!{j$be}B*5I`UK&L%O9N1h0K%19)}uR7?=8KCgf{{Spbr3mJpGbMW8obmFh}DVVQ>y0ORV@2K^6Fu)+BVo$P{xbCku=8NuLbyODaU?fZ5Xq3n`@x$4E?JbDv~e@;ZFfZnAN%yg&*xh!!e8 zSv6vZIEfgSRn8&bGKqr~C4$HkP%A?sacVR{5;1M{78;2PNB}NeK=#mXc=hy@(#Cal#~R{sE`69i#oayy`~33tquK|)DV024@1(}dD!K-y7gg|!K8 z+-V>fU#cX~Pr%`FDdyq=g#?2}Z7^jCsU(FlP}7jb0OEvD0aA4_nI%GzSpZT`@auv= zadoK+A^;Jpi{?2K3`3A}!UBc3bE(ZjlJQc%qfBN2q~Is~zC}9~Ctk0t5vCw0KdeER zD}bPoWsxVSmLOcDc#0g1LBIjsg&B|v1LY)8PzsYdNb$e{S`2+KLl7rVhM+YMG~`E2 zumJIrLr^I55J>^zMJPPO$F2d0e83v!Nn&Uq7%`k0;rE#GUDuU%jg2HK5Z+vfDl?e# zcz|Y@M!Mv0cdpU`i|X7OS3;VQPLO9Plb!%1+qb3~7gkdh5Gpj#XMk`!qyPz%rN*+W zQ9d9FRN<3q%GMl&*1|9Xpr|^91k=hy>7R}b29#V0Os5oyU4i*Fw zNe~M}5fVh6iZefk0hQ_W4M3%dB*LEom(<3cX@VAyK?neUBkEJ;^%iKN1cT!<1H%pS z!b^bUc>n>1u!wZ3t5lEx5Tp_fFoZiLNdy%kghZJg3CPGJt_?-rNw%UM-~>4;nG=>1dCm{%@qX88r zwdscR0pp`ipjNVw)lgb|(q>7Fyl{XORA$h@e9Blw7!nE8!~p~WfCu#CtB`_XpTPZV zI50}9=9cgo9-x(vEQy~tfrHeM)^PPMBxv3!guJmrY6Jrrhy)o6{BVUKmk5^3i+YG% z2QtU$P%Bbk;2wAmuB{3#0uHY*%!wzkt9SJh?5nD5`J{>!2^IIKm}Q$ zi$i{%nFylw!NLSo4Mn7w22>h+DdI434j}|*paly=umDh2BQYng41qS>sfcTgA_$B&^0CtV78(GuA(wAIYmqZpT`jF(t#6gsnQIBqaY%JMI$<8id~~aTcTFhs31rb zfvX`T&pDm;Ruu$<4{1=S`rM0oPi(501oIUOi6$Uh|tUZKoTL3 z<}d*Luo_`Pvbz!}SkehoBoBv7CNfwC4@om7vEnH-!Wkmc7Su>242Tj;0Z*7C6rp6B zIK+~X0{}veWCBGfGXY1^pfzXV7||{y+3?^<^vQFm2+<5w49;?ThWzkK1)Pj-ivj7b zoP!w=Kt6yfdSICdjF#}MB$|&A)8;0)QN@(7;FE1wvVbJEoiPAs06-dLjSe(PLbizm z(A)fe+*sP}?1j_mAPv%7fK6ygla7>=$}-|y!vaLlTIF8>`9>|i(a6T z7cO&<{jGs&+es_wfu5UTLd`PO)|l4r&LdZYG@YFHnSW;OM;*i+^~8&gA9PrNp@;=` z;7F{R<6X7OR^J?jvuJ41KI!);*l~QnCAoGhwA=14-c&Nz9f>xPR2V8)SNgi+!1|W| z04;3RcFx|PXYRbmf%3)o$?vs|j?21xistTa-o3lpZ9lth!sOd@+uIEYf!E=jOpJOb zTW7nwU5et@aSQYOk7e}Drmy#H{y&ZnmtSzZw{^+#9FHe{>3!Dob9-?mwU)nmA5AL6-s~*K{qo9I{YxzZ_NoN#@%q^ zO=NdLP!)&x8KQJ(X=(t9s+OOGfEr5$4uJ zLavs8uDV)5)Sy((h4I z`B*>DA5$v9G6Wg$!h;nm&9Zfm{%5sqh;T!rjU}37TsoTHm2Ct8KpFT`3F>W0<>7`= zv*{>BI<6wCF=l9WAd;;ihmi;qLKM`-GjBMw1*ThnLdW7#s*(k^d(Uy2%Y+6SFMYpzJ$O#VG zS#%X3dI(!fc+}yhxv{{?*rdIGPz|jFBOOw}+i$Iq(M{Ep2X20nWPnCk*87T7JoX~? z?AnB}8j@|GR%H$a+jjsAv2j&nUAASCA)FkmCpZ|(a@M{k5b>82{+tPSX5l2UYi_IS z+5{t`=OOh`SP6kyJ{ZFLYM)Mko#Iw5mY<;QmwmG(HH1;=vmG*xHtmH31%dM>lh+x< z;MpZ-mkvK{{$~F6kG;2jyUp?UtZsj9>3?rgQn#yl6RbZc{` zva)>ZEBb!^Cz$BBU0)(=IQ+XiVEVWFG53zwe0Gl>?Rjk7^akH^Zr#Ke4(`aZx9lS@ z^$oUWHzu?vq zr_9&voflXKVxUL_h{urIwRcxG+DYT_;&R)|Xj~1ywcxDzfA;$;WB>`$j8FdnLFFF| z4((5wLN~*PUoG*<2b%S@Q6&0F0Kg!@Fa!)oJ$qXPS;K~jE4A39YPim8`hcmJoiRg& z&sf69)m+2}>+E*pQmwTs1Q&x`#&xV<`>l3N7OLmCiF=&epenZkiuqPWa)KdojkhiJ zEq^ictxGQBn!RzMAr?h*nCL{rd~ms&QWBOCX1lw&a5Fu_QaZ>UYM!to3P&>FjQ2*J zTC0?UHJOjg3FL=oI4yVYX{})902Cce^b?D33$$~DV_W;fLo~qwpy!@KI-FyCVWiPo zNvpZ*tqe1nSrC8f3*%Fn#!X0ZHP*{~_BZQswT82J7g4A{oX1|eV?1|k>Xm+-2;E%N zX&a+z>qh}qSPz7PL7LN12N!Cz;hgkpbJ^NoY}`^b1`;a(gCI+ISK~}ca*66GB>dyy zG#(ff@hS&xg1~3c$4MX01ILKeM6Ck?nS)9Wk*hlR;VdDQDi>K|2!^Lq*Yd*5zQAFU z01!zglQgNM0hSv4h2x;Aqyp8aK`?4Z&S&{xZUN^3PO6GX%-5h93eWMtA)-u)I;da* z7y%}|XAGfEn5Z){G7At$G^r;50&Wc8K_x)UiPPq!O>jViC0Iy4Q6t3WDoL!a09X(- z%o-U0@Jb**F^0)n9VXeduZHT^v*Z~(ETVUL0F{{Yeq#87@X16P8jnV`@RKS)3F zfFl4xfVEXuGGrD8WD(M107ns`m7yV&k|e;VkI&(NW0u+tMP*o%kf9CNFZIACDH@0X z$m(kVlTjzae~tjtJVzGMVv3Sjuw4HDDgij-RFyYe4QwJ*j(~I| z3X#_xyL3rH4+1mYgIXM@AXn)V;sE@y(5b}&&&iRSNuzZH#E&uQG=cSX%NC1}6-)pK zT@|LI1Rn#|xNX5H&AC7%61AbB0!-KRl3K z8=Kf&x47E!b}lu$+k47Jpx`(6EUHRrBTEAZ9o~=XomZ!BtdwhxZp(`N(dzfxuiZBb?uORix1Q;pj?cL_yH?s;UERAY!*?yaiV)kdw~4lw zogiGZb55r+q>Ozr?2qJLpRT1VZO6CP(X8m(J|O;0{w3=@3wHfqr|o^uN^;?4*Tm=F zx$m+rL$`MvueiR84&m&8y03BeQD*i20Ta^+Y`>kX0V7F_;~!vqANeAe zrFuV8v|Yqm@%f(}`=i-B&izk8Sgx+W*z;D-&fV*m4Te>@w7+uB>dupD{k_e(^)~yB zz0D16?c5-cz(E-O)1&LQdb%ymuQhGo`X7?@9X9sOoi3rS4RKrsZoCy1?r6R)5{!JQ zaSF2BVx>Sf^Utqbc?e0(v^;TgvAMltb+^B=+-^2prylli?RVQN?_-eKZWIQ!a>nHf zmbt705?4(QJa4G_Urp+J4`->Wb!+fD`X0A`rrl3!&015}u=UgJZ||bdIdh2i=ibfb zt)Flo{htfp4QkfYisp0`x3$^ws2Gi(ArP96lHsh3eBe?Y`tL61{aR%80@(}_?VG7`-Q-(|a@#G-Zm>$5Zls4+12G`u@;%MF?c0{> zES^#NX4d6yrmkt)Nm8s7eJ|8VBmzv-iqpdq+;}5tPeEMdWK%kTMSMr~3+)34qS=GvL(W3pt_Lphg=I1HJdV3z=BIUz!)|(bL>bA^n_kuJn(nT%^Cm%ci z04;wBdT+bBOZC2&w_UGONw`>6@jq1dKk`3a=siVtI?G!96OQ=s{)Z%QxZU>?x!rNR z*4g$Pm699wms8VcL7l}`t04xB)Es|0{mty(R`#b+xzhTc+ot_(h1$D+1M0s<_0EIV zHY?P07gkozx$iB}>B4E%s&XPenJh~5Ri-^7sr!*sr$2%0n|IZ|!Kd4ZlEh`E0D)3U zX+AbLf9UEXU|(Ws1ke&gKpd0I|ZQMG#q-3|9o)oySKPkup>A3lZe4rS@O_8l{`&qi={bVgk#}$a8d*sOGBJaEiCyKa}O@SmCG&wTa=bbEEqzioGx z&i5b4TYJN4zZR~)6U%Ia0=M}6+Ym07M*ZfttC{?+KB+CD!s8f%sf zrL}AnyJyrl?w}Tb*{{VXb032-fJl?12bdA*I*Gce4 z)j!5R%^Tet+VtOEyT3~*D{)!vJkAIXW)HHpA(E6uM>ODPruA1uoCDL_k_Z17gEtj^}m-|eB zA5l{+WUsC|bQUC?x%q0?KV>#1AqSv)+Rll`@Q;9t48 z+jdX7+xu3<*BgF2yEl#KZTAl0ZQ8TTxdPp%xJ(<7rJFHX$I#x#{!XQ~snGhh+TE-r zZvGO_lK%jce}yfzZO>Nr_S$x)4BAwSs42V*q_L|oe$dB>$e{7LuH4o9}xS;*tP1p?YFn~ z`s(VQ9uFEhZr|nmZnt{qt%%^gg89*?3m$&J#U$*zfkd zj?Tv+$L_6fHd~ZiyKUy$;@#WsY`ikuwQ)5o0;Xtk$Kf0OHtxmUH&d?S!%Y2;r|P!) zjkUY9)wbS^5<>#SfEdWtkUk(ye1v6=W2yxr3DXe-X$$7BjESd?00fYLcnI@kvr|w6 zQx8&7g#$WkGt*FzWtvPA2g0KaW9La4Vo2%KY8lkf5&2;O8`A)dM>Y_%L0B{5<}mQX zCcW>!Zuoxl+LykmwB~JFW!dtnY_r)bKAoNNTN?L!Q?3m|u3(TOAC3P2D1Q(75Aq*F zYg=lYUa?yL0Jpl7XTP;}pP>6Y-+rU*o~E;VTcK@DHC`th_djcL{jJJf<9U6fE9q8C z_S;t5b7_31bG5nw^(=vx>gYt{`IYalvLQ9uEWEBJH5)5TE8nl=gdtGkzTDIG1N8tYesO?3fhK$#>JKLD;4c(^MZhdWo zxoytU;;~k#kQ@BD52-|POz-`VM{xoi4=Kc27tm)M^l)cnidf5(2A z?me6D?QPbba!)G~&GpgifDiR4 zBOlVAVE+IldJn!mJ8!M@?do3EubQ*wPl{`~pCo&e+Z}(Rbx)=1=+c)DgFMXlYuWDX z_Jf+dyyo2RyJLU2Wa4|LkFx2vXVIu_x3<75v%6^%NI4KDnEfTX-KVvb&rsjldvVK} zqg2{kH!a<_xJ`Ey+e;QyhPKT9WYcu&Eg}i&gOxia!}=VYd*G)}QEwqCt`!+f1k)OW zDk#*BjJel5^Tk^hO=WfpF#FA`?GL*B(d{PqT;Z-=-1g@p)`u_Ko0cE8bqu7p8eEH8 zJMOY%`Cfc+HdMRjvda1VgKKwpYRT-{Ib5AF?mx0#+I`J%OYSGOo86ZY-xe&o?lz?q zKJRpj1^t(DY;7BRfcB;m^hgkDG5LqQy@S*G&c^2VL0Z$RX}Hl@{{U0yALDQ3{=3jO z>CyG~w&z5+H!i)g+30?OtiKL191hz1I{SaO z+?$>^-M;GDM+LIJ?b@79_RFx}U)z?pIg9Ie%X4RAaD?sDte5jl41T-(b?lqo%hh`7 z#U@gGd(WMJnm?2;$$x74McrI~xoY;fl_#po6fBStYDRuiS3ipqK6v^9m9E`YEA*q~ zPZ#EVMlM@pUp%jwdIdD9oae_E%+`cjs?S4`{^EYqJ3HR}tMfYoJ6qfxrl;F;yDL`K z*CqwA>FoJ?3aXp6c3&$rlqQEB?d^Yg_5Ovts;=Kn#dda{t?T~S={;jKu%x2@b3x4Tu;qW;GEfoA5~<9VcgGZe?ueuwTJgVwrQ z@AS8=uNhoty!;E+J-^p_Pf=~X>i+QTX${T7wtZ@w`ri=D+Gi&GJ`|X zvyVH>_-PzZ4Cv{vZ{l@d+K1bw>+T1*jy91fANj|$hN)R=e~PG(7KOP>c0K!8x`Z-{ZD&# zwl>>qRyMm^7VKHt+qY`fiy$StNQR9k{{YkM(_?14G>EE# z$U_f=rVnNMkfIGJ*JE3d38FUoYJ~QyaAQ>RY23P5d=5nW41LuSS5J?dWKomrfW<--GA%FxB zz^cgvk_iGEp{Rp2spv5D0mWH46Vd^o1LHKGPOlK7ugd@lq-r$P zGC-J?{{W}{kT3w?0EyB;GaypGoe34D02->2B+Ce%f&tA$)Su;q(qK~sP!vg!4yh6V z$oLRVaKLFpz*Uk(T7qMsCo}jQJOH4}4MHjx%0m(){LIgeSOD=~wR@vswKnx#i>&}6 z#4UtUz#~t(HswR>~|Un-GmiT84E9#kOB}0k(>!N z#&)Hi7KSbxnCEWp?P2O(x<%d3=|=TgfdZ1hVcKkcVAP0ra6*WK9@MWHF_jzFMK)*3FmFk)(M(KHD3X z?riPcRfW}c+tXGFr&F@3mUbB$7Wrcsi*m4|vr_amhcmHKkd_h3Tw$d>SON$PaxZNS zJ|>wA4_}c=Rr?b)S249qmx#S$&}NB9o7=jCl zcXpDlzoFTl*ZZp6dRgPSTeo)`Nl!-UyP$2$G?Q>J3f5Vak`$JuO>x_`y4vNlaX%xD z`+iPk^qzwIeeMff+U@TR*txO{4%w|-0GKJHyHBcYGt&r+?w21((*O$MxMM?}$yrAdXS{yZaQ^Q0HzC`* z>o(Hm#JG6f`9NQ5yIW^NB?*Om#RTGcRk3%78nfH9)$x<(L*0LGc^__j%a!eZQqf)3 z!ux<9Z+6$J6uDi+wQAnAaTY@g9C+TRWo^D?5dQ#k+WKChZtbOSsu$zlYaxF_TVx7d zVU!|5&ZDF1AU=~YOaYEWcPsLwk-WXF_e*u!T%O-&y}NgJ#cu8kS2otPA==9gcde3W z_RO&p3nn3+k1$tk7`ge-PNVMu~MK) zn$A3)+mx@5kBlA}()Dp<&9&Q|!MocORoyri#OY=}pOknPG@NKebZC3~<%t>-`QG(X0aMus?GrCdQ&WP>KbY24B z)#IrbwF4*F-nD(%p5P(~0_LSKdIgyo8Xul`hM&wap*3AzGQ|EF)Up_*i){PDNsEy}hg``U|raQf73n zg$6ogGdO0i7%;9<-LSHj{+}>gHif$0=iK=(5uSF8sDTz4B7j*t&jCUFK+mf+!Ls_wH?_6bzmoA&IHBqA2HoSy%m0zA5 zwvyma4NSj{x462%tLg%+a9drnSyl4|KCz(@AQArnQ*;F`GnLgI>I^Fjv>05{; z-uZSFKS)(4QJ5yV8%9pNg!-TM+B`lQn7{uYoghy0>t^D|m=a3w*w(XgUI^ zl717Y^?)$aNR>-zXB7r@TZ@+cMR3DAcTs}ox=xh3sn#Oe^_&YjYG$Hxu_qgQ_u7|s z+v`2Sve<5YHw|xm*6v*NzwOKJZ`rj0P-zixqFd-B3iNH;okh54b!}Z;L}-pnVQ-H8hO{n58-)3F7ZTV~MK7eF9_4y6Q%oOM>pwwS@e-*{d7B7`ymG1& z=4~1;?sd%QTcr@&8i<-kr~-o+Vta^;!_rHq`=;WkS=)pH}@{Ft8={yWgUOI*dhz`1jG zy}xH{3IyA2i@le0V;bF7<7q5&W2L_gL^Z=C#xav4+4K7?ssmx|E}#i_o5ggEacHY) zRv;R(k_B)>oN6dm)V}`!@Y>b#E$#09?(u-OErm+Z#_swXb~fr`s**(oP7>Q|EEGhJ zr$4+V=c=~0$^QVy74NfXaMfE3z-x!-7H6(0Rkh*xi<+_AGr8_vy}MzU*=D$~=KDU} z++!veR-toLO<80EOeI&SnyhhyUH1=lHQ>tI%#(mptKtA?B6D6@FcGA-@y;HwgDEvpNz=IeF3 zi#Dx-O500eT<$LQ3Km(29WfJ@Q%x3q$1i_+7S)Bg`$9Fo?(niU?`|~dw`Se%S=501B`cJ^C$Urm8BT&ioflIlQ;T+v#ns?G=NP zbiKQ4tf^^jI;*5=rXj@ZEA$&l>O{GFMax@T8ztm-B6l8=fo)YwvoaCLfi?S`_Ut>(}pPLYY?sP*6qib%Buh~oM!JhroWMm zrRDu3SG&91+Bz>-v9!CSTpOoUYmKW)8vvCS_O(AqW|=fNd0MoYRkF4mNdD(;+a|Qv z64kJ6D_eg^k-2381-l2;WdR}?{;EmE#Nd}N>7G&@_qBZ*@$}F*D4Ufd_jXAJSf-`5 zZDv%+f+hwhOgDgwJa9%ge{r_hy0`XKq_Muh-1Qlcna#qi?{T^zfDA+dI8|v@b!Bb3 zWmvNQ^VLIEVQnoF$zCx4GI{TbB0QmE2lz11`?QE8Lw+Y3??XSQAT? z41QR3y=676hIwv7)dF4n@`~(1 zSTgOUOGP5IFa(o^?dF;D1Sa#q58Uli87#5fBC6PXg|8cGOgXn@0re!Dw8%1Mn98=d z_^o*U#3gHCXis6g+$phqe%UuFHE6b_uC29_R?<;MUsV(e<%?Na`jFmUur>bxw6vvm zmM{937fs8y+3sCvDyiz+F1ArFJp>8}rZV#?#C|`ZJtE(bF!q(3b6}gy;5DXcI8!#0B<)Q+$} zjwY_tnU3%z8ykjVE*m!V+)?T~qqVk(DiBpgDIyo;gsPMO0JH?Rv_vg=uPmV-_e#3m zb43={>bL-`W&H3u(J9RK1Wu$jwoU13+PiJTK9lKsgU#rrt3Z<7KriNglVVW7BqFPvYyz`q70E}ww z73H>EXijGZrt`6NHx~D+XaFs)mJ2ba$|{dF!}`C8#$Dh=E4*e4xPL@k5XxLA&`B$A z#ccvfe2mizJV3bZ(`vh8Zo(Udl%WWQ@MhLOyqb!#0x}SKVg7?oG}O55>@A?hl`Obu z7TEf?7f{lLo(i?sKu8Nw7@Id_rQj^(XY$m!?Dpo=8`iGg@-r>V?dCzQ0Y#rkxdvl8 z;*~tTgsdo97XY^GsJXgyH_nIIrTtoN6=KbKl61YrLjVfF#PN^uk))D@E$#iQw-s&J z^)Iw)AjP|D68iMRD-s8g7{%Jj)&Mq5#my^z-j#J*t6>J0xJr<^V?YStfS|+-WoFuj z1;I9qP%ZWwbhqa8t=(n-MNt0$@z%XrBDhgz;?K$j^1`L1MYm&GxPYU{alccCdi`@u z$;%hb!DtF6B+HK4Jr!c*)PG{yjdsC5_Soejzm8`T97nBMbpiJe4uk=<)sh(s9Fhps zNCf!dvY#v{C6*Q}vqqO-u9g8LD-4zg*D)fI0|!+bwZ;b>oWTQ#{3ixTA(*lGd?oPxki9II1= zO0?n)kHc}+v{+z`w+`N|!lG`oBWN1S0@`i^AZ1)tRO+Upve<#gTW&|VFW5^wr*Ll3PU~<1pF?1Vf7`Ye z$%VFtNUIWYlWxvflZSCQC}b7{T5w_{LkU38wOP*xKj7;3LF z$aPgxp92f`7u(-yz2)QX@m})#LG5?CymsLQyVkqovU`7<+&aNg{{YVo#>DT@z%*sL z7<3~MeVv;p&s67AZLQtir8`%(TzId{<4w=_&HG{Dx0m^UVLPwxAMFdcZeKgCuIt!e zc{`(P+M6rKHMi~GbZ+_H&26h1n`deOm=TU`&YJwo>~3C(a8D2MMD8t(+W!Fejh(wS zt*bS^{{V!XenrCHwSVNV+aFcExBIE~7w(^i+oFx9Y<9u>@Pi`)+ z5c{WC0`1N^3`vYyuT@(&bxYB9d0YK*MQgRL-tO%-&VF{85*_>MMf3(w&`VE)oNMyN?$WY zPN6R^CgycdmHz0Io8bjJSx+FthBZYw)o z*KYUb+lJj+zNA3{K|OJMcCPDdZq>7#DbL_5x3uGZT95waA3pWoc81FJu1jfWkmD{{ zLWY} zTjnQMIxf6xIqKHp;16x zLdn(v0Jrp-#ZO$09I%hXUs#2jgE=XQ00Hp>PxHldJ_3Q^xFA3vv=%yyW(UOd%MDmE zD(?gW!a<~h3H*e0!{%L~kKp++Nq1-R$^IKv=q$_IJ51I@$Dhm$p~YUfCo7R-ogdZ{Dd@KPup1yVLFN zwQJ8Z@B9s0!TV**du!Z#P45-Awa#s~H~DR@+h@Y;PafjeD|YuMdz0?%_3QT&b9T+u z7OgUXNg@PgJC&yGmg8`zLzn(N_IEkyE_ilNAH>mI#_PFw-sJ86Z-}wYaDDH(?mf>L z-CfDti^!hc+qU}s&8HQ`UD;lHdo9k_Yq0+S+}k#^sbxUzEOFPqmG<{Ho^F!mOHaV! zzUJ>wyF{0r+0D2v&zIUHod{iY`cqV#B*QmTvu@Ib{6>c_cULdXrR%M;7hhq=TXJ+- zw=@zhYn0eG91fe_yxD)b$qodrkiU(Op{ca(vJH#p~;TuG{o|yEnJCrpvxD{Z5a! ze&3im3i`g5AROQjPIKYcA8hbH5m&22#th~3$oLpJ%xBXELfJwCMHDn2g${WP@CAOA z;0t{wplQgipkgFU89o%k9&$ELp=`-gYDlI)$c%^MmJabe_ZpMlj_0}CU5Uw!y}&sR zetUC{n}taI{ipr*;WWeR+H94GBk5-q$Kl`m2k&b8Gx+PO+@ou)>p$4rhnc#D{z&~3 z_{-33>ptbBw-of-3EtD)qBsuXouD=q?Z2mOQqc0Yh!CM8^o13g&OeWxUgqxBf!n*Je@$*L zs1`KpP;`cZRY)Bh;44gJTSnyWR%`u=tzkFBVeebGgt-q>Dx^vHMy2_;Ew?R@l^S8q?dfim`K9QcUX71b{UN1_#P9u)WAA4u1_eZ-rKS0^9Ki%J| zal*WF;CNqfdalo+`bPf%sc$$`+iiI8Uy13j8?xGQI~|uDv`E`=+iM#wxDf)~gb1%} zFHXOXKes-O>6;#n={-NCbjep^V`{WXcPKs->$<()Q0sR(&Ft=OUD>}9Y{+;r)Q0E` zkB5Nik0lPcIiV+j31#SFM3F+?UZBtefvEui0(26qNvr~5d^3?>96lKh0h6SuP;1~M zNUnL)0Q<^Yhfbz73S`bp1ZHM`=Yhh{0xI#A3A(TvWKy91GJarF;e{(yT2iHCO<}r{ zr!YyH)c!GsrIRWS0Q;M$mtn(aSJWiv?ALdf;Twy$ zd+)!wFL(XX?H<;C1GxRQ_P4Y9YmV3;WZUxFuKxhuY)=0Gal>*Q$#(w$`+9A*99Xt4 zJ0go$E&%31$0JW;f2HVMUAK2O-K_O#Vi${<`4zLg+uq!EOKWYVRodEfp2eY)`#0gduk}SleO^ zU}HyZoz9}&KGT~~$A@$8IyP_5w6|MMtzoSnfw;K-TaV>-cDW8Kk=b&5ef2js``wP_ z*6(Y50P{7g_Fb(ygZW}DS4%qGd68<|-$R*X#lLNe`Jz@phy>E2l{lO>H485vpsjF_ zbdRg7z#SlX06&fnDR5ygmjh~Ls7cbK6|GAD097kJ4jV*P&A9FlRYcGT8sI@EITI>D z09OdmqXYsV#FZ>XJXk>n4o3hDvuP($AOcuVh#7^fDJS^g$eonK)MDe2P$f((AnQ?6 z&{L)m#=t!Zs*LAafTpIk^JRkqZ6z;23zEvx$}0;7D4E4hnZj`3Wiu8C6tyc!ol2%5 zy2^^-@d2{zb!AXLNGN=um;lbdh5#rNKuAz^z^9gJqxz%|59fde-JeVrBS;kn2^ob} zA5l1Zyot{ZK$&K(B#i?iqyk^SemIpJvh^aZ%somh6p%og2?Hq=>*6!d4P??|B26+R z5_|#h)J9NzFxfJ=xP9Yyw)Sr+w{;QFuhVdAUmq_~r}My`Af}VUEiK0?+?}=Sn`T)a znv(WJfEHB4FPLRGN$`NioI!ir?XjEI1?2`!+Y)?$86^ck5i#+@gc%QS$XeW(Tc}(a z7TRsPs>mgkgg_NJVp?GhW#~^^s6o!Oipk5&05h5SVNYmETH%fpNX{Zp{B%AzrJ&_% zhS|t5BuJ-Nngf^V{IL=R64B-JMv+o~_`LF_00u;{kSjsqq!3TSpA0#T0A!nr2tceF zOTmI8^+rIr!Jn9gSJSMrodA)j=Ef^h!=?pp&=mmHKq|l4NKiDum{S^v9YbUUVz>aT zQADz^=>kZp0tQt&v&i6i@d2j-bVz^<{{T)}raw)544ezR0c9l)ljS9WBx&-I8q#T~ z#W1uG4BBCJNmZXHAcdfYVK7_gTsTtz+$j+12umyoK4F|lhy=_?r^h@N))#22G3FbC z8pzKwU_j|22@&{bOioGxmK)9qp&(3#@R9{b!y|^J05>Rfw3vY+2B=fzP%?v*N5>D0 z@By+22um>%PL^DWfvEJMF&KDS2uB7^l0$t_QVC`Nm`BB>ewAtb@s}mj(*c)&1FI-5eMT$-pb`a0VFEOfIrYTo#4DoRw!x&d=~_V=Y0_Yh zvMOT{Wh=aC!;&jm&;u=DSQ5mLModnAa6ddZW|wH?yl?jmMfYA#+WSA#Tkxfhp0%daW#&)xa zVFPPpTdUi=&=4uMV@P2nQ=zZpgq~Ac4taQFl?P6+W=$Fi5_3V+R~F)UK|EO;f*i?U zX|1g{fQpEPDajw-gCBvlfe=sRxO{YuHFTYVvbIhSgZL*ga2<3e9x?u{r*5@Zk( z0U}8Y*8<36 zjQ#=I3Yr&FvXWpBV^GYG`g-^b1L8k$0s;VF2$7nR<5^-31`K5xATNl4CrAW{Ai;nP zQviixwxKkZpQ)Avbuv$c)5ib`zz6{gDLQ1)lmYq8WMBd1wspcVuUI4ielbd)jvNK2 z{B;Zl4i(clf&B2s@ty*eP!&TNQy|2X(5+%>Bjtm*V~T~#2oMO=2bNe(Ajl?82^NKE(h8C$ zqOe#2QzTKMaM083Qa_-_kRb{QkU=tGbpl{fjN*Jr6crZ~YAplEO#@P=ZfmDA;7+Dz#KIAhW= zR*1%eN%46c2%$n5VkmTwDI|ivCO?71&Le^-OR6+!0LHK-1Zqi;4@Cur2yX}qLvXWd zL2M8Q)F6?Zc)>n6tE#6JnC}9b-<{rW7FBQ+niWX{H2?}?Ky`Hl3Z#RknJ~;21NBek zfMK!%paKaM6G(`RhCu#!a1bY?&lrP8CD>+Cj38!QxFCWw z(jssN9F8%Se=(4Rg$i{-)&hv1mH~u(YM`J#VFg5i9Sq2(02-Fo3WK4GDKG$1zpgri zlwcQuDh`Dz;3y@&uPmIRYJNR1#y*~z(pAeaXk`KcJ!P^v{{RdEedWbenn)pln55Z; zplV_cObumD0(g>iuwkfyATS0fDqskTS3bA~I8}=3T_ao=KU6dpfl&*92`M6;Qvik? zNCPS9CkTs7_mWUgg<_O%0&79jt^{bCb86Xca5DiGoDHQVfgNVCW;#3$yp zoA;65fBYTno4ZZ5{{TyQ$=tY#Q2B+WV4~$9Fp$7jvym~6N%an;R^C0hJg-N#`Lp#- zr^R>Qzq$VazvYvH+wO|3fpYHTT5T5DR`0288ri9Ly{kB^)aQ>G={+mz{X_muvrV@A zQ;hycvO?*4Kld@YcK-klulxPa605P|CtScW<*kKIBu`2B+ zJhQ~`;({8(A>21Dl8QvABU6F{p}FO{!m)2rjZ#*F#|<{LWj^%-tE~vo!s06c>8C?8 z+>fH%lv{ww5MZdoSLMQq4qj@?$`RF&0v$BDcOU$9bedZWY#%f)QxZ-ox$|4L1iqG+ z(koajWkQG+Q0jFT1<-t;TcJ-hmR2T31~YAFQmwIPpz~ZYX;>Sq+Or;zVv-3Zi;##< z%Lz7~FllM!YT2@1s4wY+5qK@DfVZlpNGyd}fF(;Vkr4!luUuVj`JJ9z64G^8r53Tg5y=Nh#DB)YK=OL026`A zQ;1r~QX|WtcJy3WE=a%X7Dt%6+7HlbZFz*uoj~L<&Bdja@u70K@DA7t=}~Xghhzxo zOIri#CG@Fi_y!*wT@#kOzjHR1+~)2Z^nkoYwDM{U;^MRV;ISdCs}6;h{DuM zHMX{Z>Qi#zaxSZ})B&fTDgKj(RX3Cj!-TGj0O1uy4 zgaX&7%Ed;LK~*6}rZ7Gk;|<2${{Zb-93-8!w;u7&TR`-l+Y*P$un2%)kueIZSs4MA zD!kuZmYOX>&u5i{3d@&2 zk$V3CeB7Cu1DC+~k?|O=Wbm1M0X(+p#5K~VIA1Jy)J7UkGUNdplHXGoB+1monU1;4 z^ufxbxd#Cn`soD8tpLn;pOD3Wj6Gz|tM? zAdygLK!{TZ^B71g3R~5Yu3rL7fK6&Z=}(!AH5^45gju(ntpJIU{+1m+0F7ISa=LC*tN^PGpkHAD&0%v|&$NQ~nIP6NA%ukP*` zZ`eb+l`Q&lEDWhX8-|h6G1t@8bH!#BqQ922z}{OIW4GJLI<#BV8|u^m&Zi<{8(A;7 z+S4E0;>yPZA=|NlK$_R-C#;s7$uWrHZjy{@TUQfM>6n8Bf1daqLu#E=L-AC4u@03Lz; zQPv|eBE3xp86_~E5CH}YMxLP4q5l9}04+>|r&LsB<;j=>H5gz9nU$C|oT;P|M4y-A zgfU9_G?S30K)RrbpeH;TncxyLrl9Hs0YmvojH&tH=2IL)#CD}ZL{Ll-HS>9zposkX z;fp%48rfN_sS`*MCM0w@M~(reCXxwbkrY|;PmMFn07#%vFU!pySf8ddIbnBzW6I2A zl4t?=h>wT*U>2yVK+KbsPmB-#TL248$U1WiB#?e5DWu>J0)!YHMQf2g37@7ioB&V+ zu^<5y%pA-aufy=b90CwQ26LbWYn1dq3<42>gVcc_L>BRiNKuqv8X8N1t%hhB0%R7| zkp*ef`C)+i>C-?7Bo!tJ2TnqI&*yjirx8JzKg(#skw*0U>fMR8*7k$6n6d zE@!BC6wFB`NgV_M<5>RymO7}C`ie-1?FGaVBkHD=YWbK+(m=(xl^TAgbxm5`k~Bj? z(ng^{*0h3iB#csmwY09!^c9$>jEL*hDE_KR1Yn6PM?6OUr~m>Cf@lE%3DZ4C@Wapn zB4tzw{Y@mqcn=&o0*Dj+!9G~=ks~k93&1C|ZPi6oP?0215gs#`AI}Gfw3hTVzq}sl zaQ@wP*8c#K-`%q|kfR~G66t%OswKKs;XWTsiNkns@!}Cyrq2h8J>lH^*SI~~y6#b(Rlt&-QYJbe`*wjx46DWL;Gzp zOnx!%@8g}nQQ3Z>=(Ss2a&qdw%eFh&^zZS9^H*2to4a0<>wA{m=$lD5o?Zu+Tiz|U zo4xkSd$qmC^E_VQ?e`lk#fM$i+UheFwRKy{ZZ?uo3G$45@z!j09-qDc028gHtGJwJ z_3l2u={lZ=)i#$|>DH~Qcyga_#1IzAxp3|Y)qd)Mq^!aylH`&k5Gp=CIO3v|?3?^Q zBgpOF%J%JxB2|D@Mg3p5dlx5e)>`6TvdVQO>o--kTWfGDI;Z81-j9ECq`%zSv#sSn zz~$ZeG7~>RQ_E zdD0802nYuM0K`bg?q1IRN42kBhtzE9*V5DM;?I;nlYfNm&AaOU+M>O6zS>%LnYY}3 z+0Sfyv9`VLFSMJDmlNLCt+wf`?9HLT_g$5?7^dND#hZJZqv_l!mS~w2$Jidn{zlyB zR^H!Hetwn5E7lV}Bll;rE7UvkQ|k0WH!dxrMCxb^$kGo$J{a=WrsA%9PaRvXX|u)&=*UrQZ>^>6wZ?Tx zQVyHaNOHA}Ktx0wv6kmZx{5kps?~azsEJ|DQ{8q#H+mW>)L*m?QePR zbeFF~*IS=!^#0$O?LP`@Z6=FTdjvB$KG4pea)MSthyNqDoUJ; z9~^!G)byQ4OT6}ain{JCQ$J?udYz7^X>RoInvG&VLhf0LxNj@O+hZC*8Ay>dra3s^ z>8~?q9!Zeih9gqm|Ai8$y8Ba{?CtmLxl0pf;nTL{Q5bEvB`W0!`dF_+k;n6E z`3LyF*FBZ$JG*^W)Bga4FnTf4MqJ?`&CDsKnLkj9brbkQ1$2Q1S`W zKusit&I$3y*DF7X?^NBU;)ja^aQb8#)B35Ni{OouMkh141TNpZ~U$9e`592exJDQ z>1xZHZM=M^PZQ8R-|SyZ_cqI0l&yN4#kBm+nC3X2ZvNprLiZERZN=cWbdhkX^85zr zfsMxBaKGLH-O8g6DT?Fzb^Lq$ndn~m^vd-;4&_%}3!iQMRc}+{&vtt|)IGb^TVt%F zdmPR!!Z>`-Eq&hhTe>}v-&xsm>3^8*j!Sm`0PNk*Zq3V^e@X8Un=VU8*SFpTGc0sB zLpc3Tmaigfj31uwbk*B@%Qb(2t1Wsvg|em1z^=}2qe->{N)pXc2814+FxNAAIc;3y zNG}&iYX|oh#rp+dYMFGECgqr|qL2EhBx6a=H6g=t)()=rOYVD}?2X46+FkTF9RC1j zUb41!+{N7|li;<&+OxX8>`wD-Xb=aKJ5Fa2ZL01#e^+V0OVsXk`>G%NbMsyO=Gyn` z?Ps+;?Bn+R{{Zd2_lx4Yiss$-wznHyLyGPa(Bt>RZ9m)~5Lm31GD(bnWA86v^nSOq zecqm{Z`2|AlGpps<-q;-_}}?wulCmUdS0#DchhXrX}_l@lpWLCeZ$#Y?(c->_@?1` z-YVtWclMW+y*t+Qu}#L(<7xfo-tk&G%H<~?FM5x+`tM5W-$~Y0*6FMgw?0zh3jjk90k(?*9O1yN35^_n#4SVZYnmH#QuYLfn5dwhmI> z_iubkT@7poHi-_cLNWC>p!=7h_05{^beEZ4Wc5t>x7Gc*)_O+$w)d+WO4zpt;%ni3 zlJZ*A>3yACx~bGjk?Ao2L1CGSOk>(8<#T_J1K0N#D}>bdeuT@`?Yw%3vHM}_%CHPI z71QE107r~sH!07y>8hOrZq}`n(WUYE9e4KI_jBDo%J25PA8=mX_b0cHbXd8t-QRcJ z@Pg&rYi|Dl68AMlgCzQ7fdGjZ{JY*>!Rh^FKBJXxjaL8SkFj_lExfrEV^t zb-Q$J#6OJ@?nh+z&usgF!R&jNwKtRJafSP)6>02r1c$@ztde>jeZ7T2rFN$m?@A}Oi&6|2l2;>Y0n;0 z$=WSCXeE)0GDwWgLYfoM7!w_E0U52jS0D)@M3OQSCom7^ikwFPF`nS3*}ZOVageT0GUBDfpgu(7na# ze%|YA)$|*dty4{@!^y|J@$I)Q*(di1*SS6(_3uj8BD-xi?Wr1tjpBwP&E!$=Ryjz= z^N;yU_&e6UiPhhGV!wCL9P;ij@y->#Tyc}@Ph@`}`ggghU9H=4b=o?<-qdSHK-!7| zfS9;+>MrVFuoN1}jG_fG^XC55YPl%VuQN{*KivI3wsPgH42IU<+a<0n2Q2!hFbR+i zJTc>){M@vTWV8K#I0>|uGtj#6JeMKC?o)Ti?yhb3Hkoc(dtm6eRQZ>2Y!NoVk>U)9Us^}l5LuFqHLd-tVi*ELkS*-DvQF^?0|z0>WFP4_Ot+ux#lv9HI(9b4O7&D$RB z@VvKbbNpg&9d_ey$?W%5Mav}|C|%CV>jUZBpNL>bTz^x)ihq>)4}SVZce-_I_0+}d zWs~Fo0D1dUd)oe@`aQ>6Z9J&#ojcDwz4iNY=e?)g?mLUOM(dpHjn3qRA+ByY9tzu! z?G4IWw#D|lbL1BedaD@yn`Zl)vh5ht@jpN6dRDyqGW$`@wr(cvE$c;bc|xP5#6k+T zfVWoLOtVcvt}VMvtx>@?u3`&|Si5q?#IW|#=CGGl%a%bRaSitm0WjM#Ut4R>$5-f?Wu_b*#3asL3@cLCDn-Hz_nvTj?N z{-HSaPg?fJruxOJxz$p46V-l<_x}KF`}fxU3u^ma9`&nBrny_6ncEy+7qQ{?8(u$; z+gRCcHg=NDot=wmX2q*W6%lRPQKsLKKnf|>GEO|FOVe$1n=4~xsZy#G9uKMN_qxue z-A_|@ee1bx{A7^Cm;gd*(xlAEjYQ6W9CYcPCS;Y8Nc|*g3>-`s7WL$=!X<)qUrg^OF}Z|WAkGJc{MNErRgZ}~f<-1K+UN?lr{HQ(BP zJ=J>?soM1gv9mVm-K9S6IX$lIF2n8bZF@g}>~7ZCF3W`N{yN^*Yi*;{xJR1y?|9?Q ze|fsPOWboT?8K9gz&%gYx{p-rFV*k1?Q3!D?(RQf^nXg&^sbV`ey;xNpMhsFbIOcgA%evSX@g8 zQX4NGlOy;VQ~v-QAuT>^MH50lR7^Mt3k zjNpS=zybpV!3U>EJ_LBE8F*j;wq{UrKhnN1e@;+7JuuKYjA|lzjbT6_&}#aOz+ePR z4EkUL=3BOX$lJTBSsSZ2t`q9tH!VA|xzh+;JxgffD572>g1GZA+rz=pZK!Hi4vOs` zaQ60|+FdtYK?6$`v{}KDLxo~X4BmlaCl^(BiG*|Vd7d(Khi~`x$)44txwhV+)ToHe z=mA(;q%0}8C=E#hxTi>5_09$Ml~cD9aBX?Lmnv>GmV1`bT3FjQ&`x?;rL|9vAuBAs z4rQDzOn;i=HrMSFq%0a~`W>|SLlnr2&&L8>UZtyYd38pM?rz;sinpG_GJ--~Mz>)X z>JV)^t1zKDpb`Z5VygV}U1ZVbsxc=!_ZJ2e)E0L>mAjW2O@-UsX1#HVVJt}+SHhhJ zSXTOr=6tv`KR3r)TaJPEH;W)fx-qZ?*q(T*uc=<7{hTwo+h>P+7_m-=6L%z8SaZj#FbD3TxMY< zS$w)abf?Q1#d&#O)O1^xlNfRF{-(3!Hp1HtXhN0LbT9!3pCut^M4XrBj%wGL>S;>z zRW2lcISreOaC&P6oy?o}82u%t0P`WvV00MhPOW)#D^(l~!@=%HrDTZ()oun3XGDMv zR-l=!K3Lw0wW{rBChePWv`pw8#P=6>+xOFNxG#5(xXLbDCsQM&6}k%$6GY5F2f*WM zHk>UC9aWpgVDuN;KXSb<*zPvli%)7T=-k4iDi9gg;+8BGwFBmtV?iA?R-8^wP2IIs zDS5jN{p`;2+VY!AcQ+fGHyy1&x3;FGL`)81we z1bc&s-tc^m?~dJD7I(W_w`}fhy~Ai(dv{$OR5X@QMHs+tf-&K*OKsbh`kvFZy5GU`CeWfQ<^Xq;QJNh&V( zO}?b9ik$=7-1XaPhUio*C4D>Ip=BrmDiD>RKTz_FmbizUzATGZm%Q41Zz1b|OEE60 zh)S&#Q%k|r82EMTjBc8FP$MYYT~*Q%)h)CJGbF*N0<1wf_@9O(Fw~;-3X%anul*x1 zVt^805t#U44LE6*-QBVSgJ#?hHX~#X1LxRy5BcW((TKQEVo|nwNkWA8rlF*I!dI+)r}~vEpSD57Q61|(w4Ju zU3q2DeI!X>u;;IdIfeL~XJ*@PfVhEckmIdx?bv%(uWs!5OI;vZwNpBuPyyf>iDelH zI4Ybu&Xh^7`J#EvELxm|^%7H#h=Zv8O~n^G;JI0S&=?ulrq zk(a|2R<*KXZmDYq7s`8sx8n&@bu1yBS1w$=aoh$7$!^x&6gQvC+TAvdm_CMDDIXY23UYA+RL+d##6)!#DT6VoqrFqZpWDFGz00=MV&PF}o2ho%y_G1ywx^v}04$L~+-B!VbN`3c5+k)};5?adQ|N$W zzT@tu%YCxEm$v(>Is@7u>TL}UfNBTKC*UU>ww!K1%xCwPME0 zhuiLSS!>qrt=-DFF{K$atD#YqI+-{*eB66Q6Kv@P%yL0(BV6PyTtjhnE$7v7!h$v1 zu_!??B1!VrYZz%X`yrviC2CVpV;6 zOQz>0BIfSxqKK$TT{bLSHtpJ7 z3p#;5SQ1IXZOW+KY?N^^{m(mVeRSN}ZWGk0LZEJ~C8muo$W_9YBx)XJ)_O)XeUXu* znwvfbJ-qH8**iBWaV}bPxVvTA?T_~Wi*It}i+2U&vRuMyQK$wr#MwSrU#KM*;92(l z;$G@nw;OIeGkTY9S!?Zj8GpHI-ivRypap|N0SX{a8romv%2m&rWAi2Md3)RQY;A7^ z75>s(7jB_vDQe~Ww-V*MVod_e7AH8ySxxE=sJ7kY`0a!X+u_J=$<%DxOUBrc$mI}5 z=F;2>R-t@?X*e+nuc#uklG(fD_?xz$_ctzZmY9QQYqvHH=F~;jyL#QCi~~S_?llIL zsm0RS??AQgFz#EqZE?!mem{*{m-hf5-M-vkxwsb#e|G3*Iv62@TV?gg_SCZS2`V`+d8_`GIJGGH|@nER9GTj%RS-7T@l7 zw}+;eEpXwiZ7eOeAXzR2yI0MU#tCU+Nr9&i>dOd_7m>cLa@ObjJ6(RQ-KNs>x!fUf zrQdUNSai7&<$$nGX9Tpnzj3DyI1_C0mv>_7UEHf}tSDWt9?x%Uc`b(3r*d_v)PT;S zOEjpa8%YWw%KAgG%8OP#D<^HnTX{Eaddqk=uk9+SHVZm8NPNLH!_3V|wX?6wyqCsv zzS?o#y{_=(JBy9w4Zq!ShQ{A-durF0R)c=`?i&5ux9$MStgsL&fVj@qwKG_rAeE&; z*IfR_DSNqgPkP?#ioLwvShTI9dCBco(%raO!wVMd+BU_zI*ON3EZUB&Q}gGDt!CvA zcl@_1jW@P-E$nW3X6?gxT)v*7i>BqvO?%Yzt`-CcC48bf;!?^bC{0%eHN3ZQhTmAZ zX7$U=_S0`_$Wx-wAQtr$vnmdxg)mIwd8^F|OHYEyjPCCWXt`|V`;@jVf{eyl-4KNg z)ba|G8RF-Lg=kv08;cI*FWDBr14@fCX5s-FN~sDbO$j7`35+W=vfc#o97|R0#_%TK z*s-!G9dx~dw~gpJf?Tpi%XZvT%*51>3`LhRinTHkTP#cwmzmx21~=@;Eupd+=k~2z zNCCY&;VrOe5v5lkbjdhYZ=}HiC4=nQNh07s@(MUh=$l#xqkJvVCqJx44O3gO(_7ydSV|pE5-v6mRPs# z`-N7$V{YLXyVK zkVyh$$;7}X<%QTqJ9PzreYm%|yj_je^;wLPC0qqv3=K7XC*v4nNh}cyMd$s!i#Af% z{kv92t)-fZ?Qp=7qDVev6zhx~lDCya5Yi*xC`(23kV(32hPvdM`fy+YZ!$#$l6qns zYNmLNr3oN^-0s?hL^mz~x?0)v?p(PP(U7!;MSc)E;nRB2=2-;XXHc!( z!>R|A8dMBb9DPrKoN~j^aaF7>p?yu1zKJ&tM2MRAMZm*SErN&R~?b0hU3F(aAGjaHq+jt=pwZ6sP^~B!X(AV14 zEN$6S=(f^TU6e%u@tiCw&Tvc9ytR>2ac;M$CfeJyK_Gu!$AIh<45}yPhT%MkOh8F? z&{j~$*9MnmeJ=NOKo;DHZ3bn5h{ACW&xQwtfpmM$P1m6S{1@_JRei+q6R$ z^{z22t7!-uU{r={s~Yr}p%pVYR;#G=v~eQ~_Zv#5rUUAQ1XEk zh@dah>?s`&h7-USL{zeD{^;8c5VqFa+_@vlrsjj@yQ?B7D}_IR5{DtU^!*zaw1IQ` zLg$?7CK-qo7XXQw@Ho}SFPjpI<$Am#EsibkZy$BYUca~&&BohWMfBR!F#}!4EWwL0 zph*L-Ok&&;%iW!zwojvD`;})vq_9$@OFh6u6>5PqhnK;DceiaUBHy=lZd_GKhBrLR z^r5=L`*PKQ4KUq#aco!#1s#sP$M&U^$p%?~B*FU4vRkMF5(WPNV{+jk7SOV8LhGGK zs0W$BfEQWtCr)?+61#f~kEXU+Gy*)=3B00jxdC-FN0kJ{dgX#AKqB3{Zu0_B*4nh) z*H%UVLuw)%={aX6m|6J%<+Qta5}>Mu2%}V9xaTM!70^e4pBz0DfpM|3yL7V~bEnE} zBLNf&OVrSj)^Ly3GQsc7K04K!wZJ+8P`TZEDo?yR#Ym_~O1ce;SwjxqJRO8 zb@`EL<#~iB}8ZmX%rDM1!iKC1|tER zyR~6}OwDQmFh)dl2A`e*D?)`bAOu8wXZogUuxKP=QfWc0ESgd@z{^v_$64^4rhIVP zmnIJ_v8`czwepfkGv+76j)N>CS~qI)s1#iuBpSh)_~{kQVpd)-kr!ONf6#PYI-n9f zCpupad(4l(X=DhxyP!_NW?eS(YI>t?$P!>S0DaS zJh3fa)wg5HUxa?3Ui;Sf_uAE4e{SY+mf2a_?@vtnaO^;f|5DzuNuvV}{?0y6NSSINxsjTeaudy==5?ITt)bvUTxV z_#KV5yZgNt@g_8t>(t!I0bGd^J@2OT(;oRgAj2}uBur|>EUILCH3e* zAjE@~VhZ&*A?d_(+9+`Z$RN#38SDQ5(BU@@1`e#wy!axi@IV<|uIaWd8r3YRqMc2cB}OD!aU85)2G;fm*Y2pk)*N0rV{ zHG*VE>B@xTMAKb{cC~ThJ#TW%CIf}6Y88)%>KJ&CeA1wCcNX7Hvj(tc1ZS3JxE@N? zU?{TENfKhBbpUDs%n{QBu!7gla9l@lao4zhcaPfg{9fr|?#F#>U9j*0QWTv_aaaNv z5JAOrTDV4b+S|X>lU?L~JA&i*ord3y;&xUz{y%1d*4Jsawk_DOlO!sLon%y#B$+sz zCo5J}X5RQ1!(|9JRs%<9J%f-Bu6`Cp(KI;0%!mfkBP&c%>|Mj&8ZRw zdSrRJL6I?5fq^zAo8oG3c6qP<4t7^7e#|ECeiMn=Lq*@*Z`Ic2+Z{_-+AFa+2^jo) z`Pbf6_HXg;S=Q~_m#*Hc+S=`#CYxRgbHMlC%%qwx4+ z#_q$nGG1Q8dc%2tG6^F}mPhlJFf@`+LqAjka_~6i-Lw03RhgHd+_xiET~+T(23vB< zOGpvrg;60%oNu=Lxt9TY%~xw2vvmc#hg*hcCsS$6ng}yGaPtzLNVQwCU*iRBws*Nb z=Ferd4SRLG-P+k%K(cObFWg&pGzE%=X^wzn&iiZ8Il`p%Z(9!sNM{B?1V~^E z8qP#d;g4wIczY+q<|$_fPNUMaBDt+^8#a4Bl>c zdKTv<>CpN}wyj90(ndd--}_(h+WOzRsqM~}aoeKkYZgmSxc>lH)42M#_?yse>E40= z05@@R@AVd*{$3x6q8QsyF8=^=U+R)T)uNhY(j<(0eO-!fSN+D-;#{Asr@31yrRDtw zZCyHLl(w`XNQMJCD@<4U;M(b`wyf&jj0o{DS5Ff}(30(gGsE}!nhb_gN_h>a0`gjptt)qGj;AkFZK4~UNQPc^@ zet6Mx;+Kw4Tb!x2nL2On)3+OU&2k;fxwaP154K&l!sA+J7k7K`>3OZ(X|}Jlv2Kwp z4a|Mv{{W|6!hJ`m^*-+FwwET#RN8MjdbQ!CpMn1XH2U}1={9{AX|=h!`K{i&8Q7~e zHOi1pT4OzYm~s>fOBmfVz@hN|8n_-TXo4!78zo4-z7 zg!cCr9tPduz1!{nNo|fn?r}Sp2o1aHTW|FhrR0@5rfV73A8UI9{{U})jXmDiOV@7S zq4g&VlW{_Cx#357=w74jpH=8*cWHgyh1tN^`+M6h)~(*j_Kxjn+Wp;>v2%0iY78uk z=nd7iQRJO9obmMMrh3<d99u8&70qMZrr=}taCiIjt_($KYL?isoSpCQC0TS(Kw$HCwKQhydKhfU(Ip- ziT3Zs_m0oDKiPY0w)kG&-SPG|TmB~g+*s#3zkS-4wQg?ln=6H%_BM^}=HMFjILD>0 zNzv84)oVhQ*0yi^@iM*o-P+oftt#bKtAa^o{Ej$#{O`7V4&dy*#rJ!<`(wMd8*U%G zJ6Evyz8h`8T=yf~UjG2(Q<&ZHTRzg|t#5e^muT=iJ;}3r!W(w%w7am;ryFkF?DS8q z-E^+ymo>P;(N|tAr}8=Wt$n@cwKsc-s9JM3+l~jW`xo9PAIA;<0HmCiy{^?a=D?l1 z?~dBp-y0?%+qb$d2S^mhA5QlzvYzk$RmE?^++JVAo*vj1zHN{;e;?QA%PK;i-|Ho z>g3i)7;r;rw16R+9zW>-e26j(X*C#Dm*QG;k+9?v2qe-6$W%xj26z&Ih|b06C~FWS zS^Y}i)6)(Kti67cq|7iSq=^|xS)nr(t`R_zDH^p%S((!!zCKeQJS_mCtYsttNzw?Y zsA7LmIC#}+O{>h*@Ed($&z2h{Bv1e*r>Q2mN+fHWUIK{}3_8eal4CCr4@@@_G?HI1 z{ZBNNm=JOwszjfjcuN5AvNUMgw4b1ZCpa@84-j#D3D(oX2H9qy!%YaxNyt+odSNoi zo1K-L;$G5voh}2RT!J|l zwB&AV-Lh6xHiF3DjY_HpsAUzI!%R<>i@27%q`01?wikiTQJ|F|0zl3Q&-h{T*MyZU zkgORLDbh-fLPHQmAP%LxaGC;$KnVhpTfu5Hv5tX!F+Kn`9hjC>lhtSILMc%h4;-;c z;dTK^B4hxpH8K@2qF{x~sl?)OgaeGn%c|UxXjHC|Bn?o+7z%R5YM}rv46RT?v4LG6 zff;7PlpQd@jz^HkT}Mfyf7MVamK4CEM%7rU2na9`24*V2A2R@JUmQ00y(AJyq++af z0il#>Y7IGpD^dqvmI}vcH7WzS8meVTkVRCPjWT~!iNe*4p#GTi5vFx%fabraRankg zrKfm?*~mg5QVPiP)6J%nUoiO*iI*cI`H2MiH8k|lKmdU&RWN@%IZa3vD+D%Lqs-JJ zQLR9s{{T!D{{XZGq6VTtX)Tn*&()j-8Df^5zyLIuQv*>ZnpI2)%D>FvflCAlpaMae zg{?ky{P0g;0!w+i5knP$nT)B4$IJ%AvqVKHFfuWj>DLmn`-TJwK2l&AsDMspGoc+i z;Au`YKrqQt-e@2KD8`2{B;|<#JvEh`SrZ~ORLBGosQj=1BtT#RrNV=s2T=wICcg>50JJNCtOkuB ziEk(~1OZx5;1sPmlume39V-w z_t~wM0HUJU2FWE{RbGaM7=|=8@vbqx#pc| zr#4}c;5GYlFY9NJ={gAX%AHdpa%y~zA*VSBBPH9K8(32gLY06t)GEYIqPh5)!>ywa zLB>hSWI{?X66aKTh=9RbL66T4W4=TL1qGMPqK+fS#$?L|2N$juqKflM)s1OZDoH8{ zl0g$n%+?5K>5#+yN?n4g+;^x^ZFLr3tJJtCN}i;yA^DyL)GP~X-Np^1l(a-D52TYi zjV7ll#8$bP$euh$6|RLQ30ZsxxM;fv}e z)zTI36cRNfi)B~oB&mnRdv!}g`1Yi>Ok{HSRNP~#&iu-Jh8$-laWHw0L?%$zg4JW zYn32Z01P7Q)pV>}KSV`QsHMM496sQb)-)c`45}1;I+z(ci5X1^ukpeG`?`@SG35X$ zDoHT{O+?KG2cQjGDs6#nV>uKAT!Lg)Nh9#Y*GS?kK3MN#f&&E2j*!u)s02tAkTpU1 z;)XtG+CrL&5Jq&GO@0_-0>}<-N|bF{hNW7O3|UHAk;`KNLW2UfC+#HLxkFx z;tVmR$CyQP=>U?tvLu+UC}HRzQ&1*KnH3OxrhbzhZ~$dNSo299QXs&fB$_~D_}~YT zn>%wdZX1V9RtUG&8Z*>7*8*Ll(3&j^a0^J&sDqlC<)*Zp`Wz3iCPv(#D@{R{%L+^y zN}2*BSEd9R2m(ZtKu9V80s4b9CP(Ff0@UTggx1Xj8WEzphNBWmoDK}`+DR!NNIp~= zfrA02pl47zXVVGymOKViZb&jZ!H$NYW@G{|fF)`sw2%+fXru$>ia=S&8~_crCS+>R zOio>7gBdqTzyqP2mx2sRqK1eeL4z~pS-=_j3aE64)WNbRtdMFZrcM)ZfTY&GMjDip zFC>DnDW-(RemJDy2`aEMfNLTv;Yg+(oVk!gnaspZekaB}DTGl_h2#($Oie(K1DKQJ zfF(SqA-hJ9)Fco9pqZq=%M1Yw2`U(Bs67OJRGcr=KTyrGrb?@44d4!BOhn2Yorx+68A&Cm;Yn0aF5)0DW!Si7E*aG>n28 zR!nuk$&yam%G(oYDxm-bBPGnR>eDz`9$uu_P}DwL$bV3Z!GOe$v-)5fD1RVlQJC0Gz&pGa+uRN3I6~t;lLOkl3=Ni)Wp}~V*tkjf@jR( zfr2R&00|HTMp#lA;G~v{LCiBWi4>4>r^^k)&^c#3Nl22yv8EJoYyMrXs}gzE}cV3eI!GD);0aw2sDA}KkZnyFk^WsX1yN7G0IQ}FnlF8(7= z5L>ST*G7=lP&ESz#Ag(ONW%aE`MP~XX&?hk;yRIrPMYdud;$yHm9XR=OzyeG} z88M2YnHML^$}xw~b1o)vJfi zT{#lWI?1LM`-RPJAzd-4;9vP3_aF8=hU1F0d0x*K$F;+5;Wqs;$hRit)Nj#o$sh>= zI^)p&PTc#B)P|F1vGg3=w8o71q5F&P1KeHb&u)D}Rrjy9wpg2rw$Z=1z|B?eP!T3E z=KZ(Qa%?Tz{Z?(Wuhn;XZ}wDA_BlrRCg4UE)m5Cav{OTRViYmdS)k9FkbYS9np2i@ zGI%T5#AP|jZDmVN*9x`kN&f(Gw6H^N*blDhBx{L*G$R@_G^OKMW0svtY9SGlZXy)Z z2IA@jG1W&>Aeh5&u#rh~<@~%zgbSLSvNLH*g3tv#pp|8jP>$_E^qkD$DJIGvFJN~4 zFfE&ee{Gl1((vch0EtBk0RX`UY6N1OLXBgvrCK#P<_M~n7cNTaC2m8pLuOk^Q>H;e zbbuqS5>C!EC0mit5L{?wRu0DJpHsBy0V7FJbg^SW1pal#T>feQ02kb7libdWuv=>C z2D`z{wbG2FF*=a5qiTU|MoSYtainHRSA4Fv)Kt>eW(?c`2E8O&QlRK!u$4*zJf9#Ggk(n{_!m?Lw&IqqGd4KBthQM>C<6O7u1Or>zVu@}ve`i%a zd#bUO8xZ#9ZD*hCZko`NrLHh(kL|MQb^h}zgl}z;uv%QNm8asRa%4kk3*g&sY|L*qfoN5b1pju)P%UA9NSX>>no@#60XS2 z4FJ}$T&ay~F_jirFiV>{GHaPae2&Pr{LFwQ)h(zpy=@f)LexRboC_{H&WQg2rMVef zww=P8D{|t7aLPiqV0nPmZLNXS(t2ZCZP_V9tvPFlnGe-qG~Lq|7(KIXM1%0D)K!HB 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⪼L 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%0DgC-c81q2DGGdh;Qw9WqAeJ-}Jw+>q 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

A_Wm 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 z%0A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

xWlBUV$5skpadEn6#T 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

H)B+Iu^WU$U=(caY*yE?(bo5Lwu5?Jl<6 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

HU50?RS6CyX~R{ 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%0A6pl+6fDPrsWGLc;syXTVQg? zB~|}%DBZ*!upw0NN$0jK{Bq6Ui$TxYt)?sM_iwq(w`VP)6G7iV zs4M6ym*_wY>h*Xx{GG7#6sV8IjrD~f)5myLy_Ds z0+g=VUJV>hyY>4I2HBndUdK%s(zd)dBpt#jZ85T22=1283EoYo2emcYha=ICo~ia* zPBhEObr`|Kdl)*(UMVo4&w3UP?^^-!PR=;`R+|t695QQgf-O_8mIQ42i&yQ{srp2C zx7lKK9TxO%L|s*rh{|4aXsB^7&qB%d;I(tqCzvltJ_gRyt+Ik1=$-)nC6;*;ueYGC zjCL8Dw+G#jSlJ-@nw=4LC@7ee=m_+3oN&}i{0q|eLA1p@8pqZC2RO7&7k)m0`VSy* zsrni({--zCiB$OwbOK^RJ_rW_g3nKFVOA`g{X&!d(~eJm{D~Tv zz!II@SCx9?R}k%3v9*HW*F=ZbC_U#p?pOIfqQJb{`p&`qwqpt}v5#_vCI-i(4MNMB zyW6l3CFt$n2jg>x-0(HWMZ-o zRr$S-Fjs~Q1fEOFtENyHOc&{Kenx;lYuoGffSzuYV2^NcEGL^1{n!Y}SLvsHcUDdC z$G!dX3M*o0Yuj{7SSY7m^-6<-NS)VQFnH5*@|2(8fm3q8Mxm}&0*UXFNGcXg^!5Ql zDJ$gHdwxPP3R}}oaAmG=e|%dCVK8SQG&S34+s!i)TXF%xhKs_pZJ(a`iP@=kl>Lo5 z;Ibw8H8T#Jc<^s&+Gkz=MK1(YWp*Q56H=j2CHlm%*?!N_2;pt^T70K00*^t z_Wri7oeO@V8#{h=jzv-UH-f?(RsPy{{P2I4HxM$}qp{RY%-{BfjnSLDsZ2F-sBS;H zGLS>u(`=+GyZlDb62z>yTn>63S>2wGI@IcLT!L6Y!tNWS^Ji_(=WdJ2?Y>+B!qs&o z_&$`Jcy85iWwjtCqAk9+snEWd;Q^lA=W6S2Kiz3V`Pn*Bw<|HUqXN?mddk#rXXDHs zF2gly6Tuu4DZW74ffaG*lDw`7>s5E5we)i9n-!j}jKO42jbkX1%7ll!b+q{k?-VMK zNwT~PIvQwGc$icxY|QukM8ugREw*VV@iArfKN&Z0K1nlLg!#j&e8# zWcNPaM-tl`82yJ((1F4BuPH$Xab2JwFv*$NGd9jv}o|$`H>d=xX($IY4 zN7qRq1-;{EHi4vU-W$r~jou$OJS;EuFK_T06?;(*6{qLWuI2F$GRZ95%KS3wM$23R zsM%Fv`AS!=1_;-0elv4PQ>jHiG9;?I`|H+EY3=$*^Dt+_E@S_DW`Gi5;~x^PTF1q4 zGT#|z2C5y*wiIt>n#Vu-{NUV~UBt8R1E+1O=p!kq$u}mee^8f*e{5HM_%e6~tntx) zG-25(jA)m!)$mEgDsBPX;Is+#cN2ipfGx{kso!T#=bnX}+^VCcnr&d(aWai4{rcw~ zXu`#Pf~Q3<1Rm+Q;zGK^v27QnL?2=7?3C_Kn#X&+-}+txlb#-@3jVhIL((abt+Y;gO@ z^Y3>B`QZ4C*%7+Y_^(FVIc6NwoTe(yMYdb?N<*)`wF_CLUeht;Ti4XtzWq&kA~0$x z*dU~xDVbO9$H{6So%z&^4_3|cO+3~Q@GZ7gNdG6*4PKAbVA}>>N6OfsWR_2yA2|0$ z*$V+~@9#a#I%DP2zm@gyHT5*5w!+D`+H^X~PuY$-(px412EkS`X)Ti03FMY-Ycppt zG=OV%1!GrD#!sK5(0Rs7>?c#!;qXH%p=K&T&wy#@GDM zXr7G69>?AOD5y`aM!CabKoY&_D+5a>{YaYC@Zw}aX@Het&<|_lKe50<@;quY=Hmhy z0X4qJs>*127=xC4tQ#~Bf1e?-nV9ZWun~sse6K;e{cXgWFlG3q7FY~F`1Hd96{cU< z*zj48z_7H_itQPg+wTg2?w=n22f)dv%7wqj9#;Rx*epgQ;f5M`+-u@eRgbw$QFzY>LtzmjhEjPoP#QyMC+kZ ziSlXQ8ZgqjA%uG(^#bvvVz?e={T!-i!HgCbk$4)u^;*FVDIZg7g2S*b^ zGQXcKZ^TpYAE%RN&j#fE0s*|lnojK%u+|aiu@HqoAc6rmtU%Cl9s8Qlx@M-Ynqe^1 z$X4*#b$q(G>6#CYr$ymLOK3Oh^OEBwmNt<99wS)d=P*IRA~87G_aJPh6dB!1Iz9V3 z@pawAMIw|R(X$d&fP>Uu^1!beV95C!gQ%F-U5O_hSFg8;^Fr1szMDT~ei$@WhR3&P zZR$w-;$%?{@ednH-uH};A@4Q-N!zlyfh;vq+|)wsY^>rdz3h^M>-uc=yL1Fjl68J? z)Rv(r;;!Jc=AT?MA73y${T4?~Pj}}-+2Eh=1LbViDpn~)WDfizLTc%~`K)z3h80Fs z%0k~+h9vmBUd;2y3DvhSJZ5!w7H}8-G6rB2db#lw9XOyz$5a00y#*5;g?8y1E>S5m zjGNhsm8f5&7vJZj0h`I+c9QT;?Sfi6?go)`rw8-t@?wMixg(*{H#Ch54CTVliAP0UYH6@%)FdA z-i;f%2xhdUy{={furdPPJ6Y(jyAKZsQO9OIt>0Jdx>?+7ASjvQKS~5}^N)VXF;TZ4 zEYi?tUQ6K^j|q;RCdhSN4-q_EPTg0U5mAesFtGnuG=cvOV*GR#J61kS^!XWl|Bx%> zBAeMCWIJtnTO2s6;O#{23pFm*8C)KZNhd*T7gu~DwIIZ}p#bp%xzK;hyClGDn_TEU zLGk6wBcv}7xzqEnb?wYR?{~EgP=Q9i$3u5kaJvwsBB2qI2OiDdO6pa}>6YhlQEnr- zTZlha3|DXsO&oaD7{6jLm=G!rbJw%){?zu5cTfbN{jyd_N{MZUv_PRTXJl$>X%GDviJbrU+c}W zTIv)A{Et<6?&prKDQV=o-eRUowI14j-4Uf0%{mbEm&`j}M*AO49N>QDGxl4~1wU@Q zm>s41EFth8pq_bc#*o^BgHE6K8;>?1i-$^CzmPBI?^mc1MV}VaB5GS67cYGnO5`pg zXC1qmt@BQz5xT(N3m%D6`jiTKpZH@>q0bJ{L?Tn>sCRh%~a^>z#^mS!= z(zpm1=m63>zy4OS&Ru-cxkdhxy`D*ik>Z9z%J7p7=2$OS){t?q>p-orM*Z+t6|WH* zinfSc%H*LB!&&pg(z85C9Q@fUQ_}G?In?qBF^vK@Xek;LGZ^v%JSfv1n<{3vk`svo;!QQ0%elq6*>OKDcs}* z1Z2jD{9$5D0&pfhqBcg#B4F@76Z;W0NDv zl)%vxi&PRWjF`{;J=VDzFy?N+R~Fl^tn~h_Bgdt~EP>}mc|*UxNyOZHY@iOc zpYs<|l@c2aBhn8)+ijnyT<1(st+;dz+bF9p@8%Bs_T_Jf>>=}z=+<*~&lG{aEDgq& z-j*uzf5y|_SJfBEZ=Q3|kN5=B3SE~y0Wdx>rm}rG&9ol)snmq}#qBSe?))YcyZn_8 zW*fhkZSlVJrabc+N*Qk{Nc5+$8N!G%tgWl2hewA&AOG|kS}v#LP*&mJFuIdiDG%5V zVqPnu;Wa+)ui{&m{l_}2O??r0Gh-(yN$Ix~?B8k8~jM40KQ|42C}7sc@M zeWq7y)eLvHB>5mIV+8=(f+u%>+_?EZRKJCqS5ZB^H!oUVGqGbfj?Gm6b-h zB}KJ|t+JG^y&xY zQE~{Fec95#*IE?^93H56uZMJ|q7!Gx=oB+{(ztO}+e2ZQ;(-bB zRKrXax`nT{!1aZn7}ejcUCn=^@a9Fx`7K^qK2S@1-6s{_r?kt=q~TYJ%THlK-SO$h z>i8m+oYijK<$k_GmR9?H?^efJ_lQ?~arsJMXOk!YG(1g=f|MT+dsHHj5I=0oejJw! z-`@1;(+v_WK(%E#@0EW~(lma@@h*Sj#asT74}vEyf?$!6vW(-W7WR5KmbC(rZ=z2| zKC4m8NZ*mHzgdBNS%PLqB!kRI ze0n7>z1}gEK$Ixe$JKnVi!40e?PG~zbW%+RmGhe{I;nRjeWLC9J1<|hrB@XJVvF{%a(WLPKH(!yBB zHIrp)UcJctmNU6_YyJ=NTP*;dr(~2IEO$&}=m6Qa%oZo+)Vz#>#@Y1(yJl*fH~SU4 zE#n>|KV$r#4@Bo@sx#lZS2L|$_4PF!)ZnM6{y>Sk4yT&eC+eS%s?OIES~q~-nR)dk z>W8)SvH_|#_3Q)3^F1*x1}2KXZdwePu2bH5u14PR+e}JvTsGn4fDb$H0v7YwiizxD zWtx|uan_dyPg%0kT`|$@w|q*!AA;6N-h`|#BD})4++?08WS!C3HJ$ZVK1XjnKZMVq z)h*3_nP;=RKPh~~PcrmFA5x4f+FO=;rI70DlTeHop5 z+bBDooL1oB{#u>MnT+?h!d)}|;TzEuw>w^y`;MN%2S$9ww63==VtkFcEH{5-J5#;N z)sQ#@S&e*4aSJQz?N!S4w}+6bt$CrCFMQJvZD*0LOCWpBnv};kYl@HhyE_}_X65&S z4(8eo34O)C#PhqIOj2B|I6nyF)PDesa1?(db#Q@muq|uN+hbdW;v8PI;lUJ}nUG3A?7xS}SEas;P(l5;bavoq2q7Xsc?#PU4z%}#jaCd+2x%=2bg}zQ!9Z6U~WznFb?60_4zJaiG2pAo{AIx0KQfT?nn0-BS zq(3vwxOT|YfUmN3QJXho$z}{Bj(At{T3^RIxD2;T=`;RV z%VI8lS_fvZVJ@Ke)Rwws*Cuih^!1TIHtmgZGKDfa3-3eE#)h|$UnB6jqzRDd^o*yR z_4g6A%8xXOS=8Le<>d(~jAG4p8tP;p;ti9loCe-->L+VitK`2jo08Y1;sdDlwCf-sy>6CDL}nxf53G&?*6C^FfPX(h4tD%0ImPiZ$#`r&Qd?$jJXl<3AnGj+J-$K30?okmQ)?hG9%;pY~^Y9o`Uz2z@|eju5h zA_|QMP9ke8vK=f>UXM5K=U}~IF zEW?Nx){|fPr-5W5S^Zgv-0DtN33y01W3W+1K!hKb-`TV3;*Uh%m&@+-rGv_^1_-^&r zmG0HOeRV27EEy?5jN(VFJ3$J^U4qMBmP|wc1CZwq?=#r>$|NHE@T3&!Zn}|=$EN25 z;=C#RvBzi|Gg-RckFp&9h|B$7oiy!qfBgHjwRb-V{Z>PrsMjIYP99~1E6bi-%%@(o zg&&3mq4y!+jh1p#?1+NIE6depUVD~Fo2Q?SnKPDDfOx{_dL-J!yH8G2W(5ralkE(G z2Iy-}^Y{UH9*XXp}}y*!ukrByk_M zLLjo31!cn6%0EyK#?f!}AZ-I{x7PDTV84*DPe;Ro5$gI@yZnY}2kWq~9t0rOz7Y z#U!vDD3iY0ov8BZ(e=Nn2|ICuZSf`b@pQkLlBkooIb*-u(=*-V(6PtPQEN;j&|>{sgl;nb4kDQsRol3fNjSUS2s}UHf%8+u5_Xf@@isZm92U zm6Sr21V+^!XbfE$?W;z*>KujcUT? zhG&b4g5O!CQoPYrw7va(-pdcApBKbG~yC5La>ZHMHXCB zzxAYpGsj%!RPk8qH_je^$Mo$&4=hTet2^I*^p5M_{J#Il!;HVJ?LJajqOV>g@n0E) zo``LAhbZDCml5Mfh~`#qOg{JvVW@1mL1KbvO<4>&j)#A37B!ExE*$$~gpOYSGac|p z)wz0?oID!YD~c~MyS{j=VS5^*xA%{+2FvSY=QKy+{BhEcR5dC;h+ajYx!1;A*3Z>D zB+}~P9Qd#Wf;+?=e#6%piZYmdR7g9HNf#R1=wI5f8qNeePhK1>NiEMW;yL}}@F*-R8yvBdU7px;(;o}xk$jikgt>z+^T zpDy!~NYX+G>5}~t8kW;?GBg|+UAw4JKL4k$cGjwKx2d^p#+&ng-#WfJ1kQp#v$Yj1 zda+$DrX)m}Q&4bAW?cH*VUjy3h#=UPbYFdc9O7$Z092H4g!Oc+W9KkHiZ$a1XxVId z+_eJyuFBL^Iu7D7W&h-6OwI1Ut1^2^G$&8WCE^m(x2&L^Pe{e0QC1!6 zh=zS1U|!;VFlHCb7hxE3b7#LQHJW(fzxfT9|LN37g-~a>e6f6dc+z@QeW|W#ced#l z0?qfE;;9Gu&Jjwa#Gs=jqo=*I1M@K z4@XW-0H@N|N6>aqMRA9(%|GJuyqY6xL}W8QAywxhVl0-N^o(Bqnwd>4e|LIGYq5(y ztljgO@a|AWqX^Atm8Y@a7T#umT>IIqlS65is-^7qb;8U=R>{e;_vWH^n4a=-s48$JtZwvBPfAyP#t!+d$@YsmJR`s~MFTJ5-dW4Gd`cO_nxHZvppl zrG>1t`Pc=ugvRg)cb5C&!td$z=0UNwI2hRRPIQAk@Q%g%7U9x`1fzrHr3kK+-WYuQ zoT-)4Ic!B^VDFMO@RXY~Z1=(6>J!btvwoyPlwsFyL|v=pv6LQnLMWv^3k_}IlUrii zh9$@65#}X(h5y(l`*sjNoOzpSUU`u37rQz~D7HwjQL{iKVPzx~6avXXh9ue2)`xBS^N z?0CohYf8h{>nMNmhoJAnJ-;J@bR5w|cVPF8Eg99Ra4utgDTn>W{knU%jiPK${2p&N zF1$P=+oT)kqPiDm>vsJ;JIaeX;{)@<&UodQfe5d!pdtc_1V{U4JZv=~+D_S`t@j1wK?bQ(#1Leq zyjUQgp_WQ+y?(NpW3<5;OzEMKBM<)jFD$6SD`=+Ol7p4GroE(1aFFJSf~=VztazUz zhWk_eV&I3f>97-QX;fI`V-p0?GqeqU;7b6BWWQPRe=u8Akdv{XnHH0G>9(XE1?u#1 zsX!E4ELXEGOIQ6V2a^P5kUwWuiszdndh45KCW%CDfrynb$Xb;e}JSg5o)*i zl;{>xr9NS%f`8QcxGi=zV^{AOcjEbxgsZ5v`r#DwEz}VWsy88eM}`ypz5nGydl4a6 zkPB+fk0C$}MJ!%gIXHs^M-V1JJ=-MqtM&cBi&50nP|rI1M#g2W$jg+pKpm~q6yuQ8 z=mMgc$@q5Av=MH}`}5pvvRus!u336P9^Km>W)JVH)RIWCqnP>i3!`6@X#ZwxeDc_*!hcknwZ}0ugtzKTV4jJok35r~VlHTD7=58IlV<63C#`E9H=$5Zf!_ccU#7CAfX zP~2_3KXXD5to`!(Vj8WP)}O0xgo?89ng-zvI}PXkb(PShFde1BmLq2t;Kdbi;S`CO9 zCZ@2NLxn9XdrO38+t~Zs4xznFT{tYXnhnIO{FvQbMz|>}!#OzdK)p~={TJxXHGh0W z{csH7lz|9w=erKE9`y; z4(Et|{0QkW?`eN(v*>9}Gr?O=(mcP}@W=l7=TX^8&N0dLeIf%&f++o7oU2x1e%7-js zM8vd&>_hx;hw{0~7n;G_(*Y2-=08qL*zeP{Lj&`_q(E{ggx4sB{~d*Hd&Dn`Cd?aq z@X?sT8%FgGOmojXv8?TbPo*SwiXF9%?jYIOJ~?HvB|jhbe?W_WNq~C_xs^|Ckz{lD zUCI2dU~KwE1cZS|g^L~vqjbUh4CUjat-?HZ0?zyedW3y?JKlp_`iH}j8k*U$Q3{lj z?ePFR-cr)^(xq^VFFMRS8EIqXRb7w2S|RG$?EE~w<`YRWy>O(Y-!txlNl!ZLVlw$^=`^&L!&9NN1|S@@@Dc(;FfuJo4)X`>q%uc<)cd>(I=J_ z;y;FSlwD73l#Te=K3>n%xi@k*mX+U2`9&;c93atSS|o#F)!@q_{Wa$=&UP^H3=S4> zyT@-m0lLp=@8qC!--?4}E2x_)PW^=B!o?Mt@EYRM^?=~g^LY#6?r;koGzCWv@dJDx zML8FgzSJ5sQB-dCdAYf=yQ3OWB2;r&9i*@bCEAoNcSg*jU;5}aV;AxbI~<{d@1K_V zJE@JOZ*{eyb>ng z=L1trfx=fBP8@?{F=4`PR`OH5_#`86m{eK!8~y#bdFMV54TG{}L@53avb3GhGLr8Z zd1tM22(!pSWi z!-4@S(8j;#3v_#0mMYA*j|Qkx=c(-~=;^g9TWm7QnC2)K_~=&$0{Xl|m;tvmIfffX zda7en*@l?61zE-f_>!t_0a71>A!Y7~=M+X1`jwfsrP>1OIwHL9Uf_p@DVXc%UJSnh zG@IGTWO2(_etZqE)^{_1rZ4@;M)&%oN5jem5jqrt#=AGJ3wanEx&JZ^9bWD~0`&uq z=3W`bKK~_8U7*2gID5XKD^vPZYJoC2X(lYSL33 z^ouXI@;XRQ{M|yApgs?C{Bhk4is!YpPEIP?%&fv{LThg3Eb9X-p%fa=bp`(XIFBt~ zOZt?zr9+XeJ-G+azrCx)M2@z(HhZ1|<_5EGdh;dm#Tw6^DE}GiItrjMq@+910?^dC zmgIb3Eo1R>dp5_E5WLr8%m9iY-l-Dn^yE` z9gBg?);_mP`Ub+W;gO<=L*z~GBck(fAM(Ifsw;PEV3$)zjH$6QO=u$3exmMkZ?gnr_Zkzf;hMzp5&6bM=z)MEO>gm_d)&Y0n=dErxJ6r2 zECm_M$HC_yu zMx;1C&_RTGXU}a_reE%DjzDK8W30;iDqA*#WSTiT`(0(%>*YS_=I;kjMBc~0XbPH{ zqp7gEuBpA<9byeUeOxEnz@g1;n)Rr{+&%u0h~)~<+h#mZTtNTUGiU+T01q7SLBd&R z_I-##NSl>Yv{%}b?3*zyw|4-WMR}ZCGm9q3=XVpqkAiY^`FJ{HLgR~BY$HZ*7IefG zYws4=3tQ7M*#GvBF&H{{uws3topDm~u&>BocPgkd2+G2k`9zy2WDQ-MZ!PQP?!S%vC94}5dWWcBK_kE3Xx_S;Vrcx=t+`3`k z96G=r6Ke_VMiu&xIOpYDr!LA>L8 zIY*`uT#^5V2f7o8B_6gR_ObXuKhQW;6l{6--;1`RTO;<00b0fzGqKQAj$&`QWt`(6b)|*b*4vsFZRG2{%G*?!$Z$|a_~y6aLrMo zJo)6okz7|UkC%&^8y$Pd(c}Bzt9emJajv|O<{m(tOe#^uq52BjY_pVHvlX7NZp9z) zdGVb2?CA-5EouNAHpbTdqp@ShlrS~cF}w>USYi(?SLN?-ny=?yB#-zu`e^Ri)OUvz zm&g0Au%?rWNS#~oD-^LjbOhWA%jj#n97n5{h2<;z9dP;7;fGJ|ZQ}_z^nnz{d@+}9 zjz-41RTYeN>`ym7bXb)A09nK1sJifdm^HYhtQT}C@WPIl{7X_V`q18i@)egT?OPe? zenU2YKT9ku+)oqj%oZ@dXGXk3*kL`;!}%|p^^~o1p*4N*0cES?Sr!(mF!q*^zK@1+ z!L}s5-nIEUV9|E)oe8gkO__3)Ry){qa<4<)Vvb82;-SKE*(Lu z{~Sxf=t&F*L)53TDbOn@LX(P$w_VSR4L0}Cw-)A+GQDPE*1^jo=oW?;%+(;te?=lV zux~ZSr$4F<-S;~!aCC)|E$3|9i)E^Ulm4A%9@p_;BpM}E9qmz#xhw()JLz^}xyN2C zGwcap4TTI8Mbz&t$8lEBO`6hst04C8Jw`j2Lhnm$hcvm{tj(|6s-{6P zPOmbgFYQe^y=5!To7(z5lKTR2URUTqc1gxxD5KJjszsJ{l+!A=xkMkcqv3?j&T{!#0Y`8?e z)W~-G_1q4wC;HTR;;gtw@y!Ve8wBy(Xp-fo(A|U+TiB_YBpP34MlhvQhH=?C_I?_W zI_~*`BkJIA@K!iz9uWprP-ew1dJ+8ET+qi0{tg&_7*K#7Rf=eTeq{@sc7GZX)I&=DPaTKg;GAi z`+BjgMShUVnyu`8%i!>`E$9)&zjQg%yYF1(hl3qSX$<|`{F4vGMeE!*oiP4%j6p6>uX4;zK{K4s?x1Luf zJ<`+8vzWVVej@zw9UPP8evB)#0jz<@_q4a%BeGH{C%}?1tE-*UZMPDV1@#`F-U_ zw{o|m4=Nr~_EmRG8Fn(KS9^LNZ5 z1UGw0atW{_DMSq)HYSuE`lH_5NL!eGZ}e(XG$lx7qbwgvIBhvD4i6qDSsS^+S^k98$Upd7F43(qay$*ub(bUSHsPpqJs zhHpCl`db5-l+5@3*Q6`#Rv!jJ>VzD+!?qDVIVp#S2Y-l0Xlqvn4+&$;Dt8 zp9;qO#;BW`o`nN>KY+$sb^Tt$sboP9VMr%J>4`HW^cZi}_Iu*OBTQI+GOFjMdf#4(@+;>D~tCB!H0c) zzoeK63Cbf_?O+fBd)7CZR!d2mFkc_t-dllkc)wwM)ZJUu|G?*EzF*|c$Sx2;$zo9U zDUqq)C1mA$cXKP&?C&WtA#Q{7unID?oM0A&u(w6+AwQ>;lQNCyP7Qj6E5}s#do+K8 zRx-ZC7>IT??-Ru$6qhiM&xbpNy`ylKxujgAnkgD{nej4=4Q~((y_{TEMCSH)hUCq6 zV4OEW+)2H_(Jg_av8Onzc4R5Srf0_b>Yf@M#NQv>9oh*t`QCkDt0@~qP|wHn5H^^| z!N@YEvW>$GDZ7*{Tewp+w+r3TL?D22T?w(r1lC+io0PaqO6ONbD z!b>HgmtVr;H`37xV_^X~xp^Dk=fBQcZ3!jZ^$S7RH9cifAmt^3a|L+Nm$l$S|6sJq z_C!|;0akpoR{`A@20?CVz8D!zLCfKsqWV_w@X8x^BLmLke~Y>0qGf^14CzX7OgHAk=>%)A{O)uzV~Z$V1oPJDP9?`_b88Ho_y6=F`RK;@`oZ2f|NiX@)DQt z{N<|`9(vD4#D96LLpI?>+V^#mnfafL2=fESs#e!|E7``ywH~+{W>LOdG~P7e4s?DN zSa(ciOvRQxpGYgSCS1qrXk?<6C{~!Qf351eOs(3mZN%DunnGEfR|(%9(B#2d4V5Vb7}nC7~?aYxuf3znc$TewxSp-TyVCAxz0R zWW34L*~ePyha(zcHSinZjAHOh9MQA4hq!!#@J9!!`cb{Z!f4P4$U;jsVxfs49c@#g zmFrc~F5lT(a?*#5VZ4TDL215A@BepS`_?35rghw1z;!^u@rd^eRZyyzVA7)-Pct?0 zB-YF>qzf3+MD_FDQQA#B^0Lb0QDPulLQog)kzunPi#N5P45Qy{Eaasv%mEgH3kA&S z4NOJ-CsY_k^?g#+Sq6%sbPVGg#=Qc`Db(8d**$pHXj)61odkzh-Fgzm$GK4sUO+Ak zSJk*A5b>%C*${(^{`y@e7zFrYBqh24B`UehLBS67@wIMxQ)fF~SeFWdJ*gHqFGYu| zuFm#vlvbSR{p4J3Apk2k1>2ZQd^}rY@X|xLUP10G z<@Ibj{_8SYF?qM<#e7Aw;(LFpKXMlwqL6d$JT9T`9ZKhGuY3OR@t*H8eI|uPF(CM8 zfNtnW(1ztDroPI+qc@x6esI}kBfh9uj!fNZtdtel#jC$oT7cTX{@cPzI)8L;SF zzu~pbBdmWb;D*{~j9|?izxja1E0ws!nf?n4;f+}KfbgCxv#1d=9TPnU4$PN)XzG@L z!%I2z%0HOxZ6_JABh__`WS!aGymQ5JC<6rVbMcM{Mth_+dM=UeWXHv6JKVdK^m%vkHpu9(`B!%=(1P@y&c)H? zPxrbzPsQ~%eN6C;cJkdIRC#V>NfEK^p!EcK@Xr~6BXc}?a8cvn(E+JeESZi+GQw0( zWg8QGk5!HGq}uuDm^w=BUvDV(EZ`N0ubR`WE)g_0&O&R}gV7n&w|x8*4`-KJsPgYI zAxqyA$Y$_bu#>`Upc^K7bh96ImXBvC@+Dgy+%a7Kf_Z=X1WUaB13b!Yuq*RZ6F6Sn zWJh69Nli2SRv-HGf=RA~osPbZB@{uum#EW@C|@AIAnCGj_$ICmP#-)>ASx(xg&BJR z(EE7`KvJ0Fe6;h7cf*J345mH*i9AJH@FX#hfMNSHHBkqmh1Ixn4*=sj=ICF$;+J*I zx@yir+%ti+7{%^Lm*|61<+7XZ(=Im_#ts#1C0BsP5A%pGBkHU9B=b(-uY7{Fwzq~4hhEk_i1`ZV(SkTSqZdkZj+xqqkaAG#8i1IZyf3U z`|f(eti?RPY|@B&U#*wuV%}*wE=jZ-ZQ1FpUTbjXdH#Y(YQN*}w!-V$vyTV{hf&>E>!DU-LmTGSjW7ja{U3NUpZ*E*(~*K8 zOA|CPNz0!*rGaRkJrv>f&A};kg{WVby@_)1Nq1lD&f)E0cE`ur&28BA@j54RMMwn0 zvNM@4X^%rgfaz$$6>C;!lB_RUn({ftj3ZTdfPxTBBjqJA+R*39MQhP;? zA(iGMP$U~q17M^+-@C&LM=#rPDy@8I!P#17fj|Tv#ms5Af_Vms-^--WcB2&q=Y81!c%AHK8cT@FMRod(G=jzLJ7H*)F3bny z&N7uk<_B2AUd%K&KmoS^RAX#+N8j@3NPHM{7m>c5Wk}(eZZkw_m~i89(T_LJSZZ7| z$97@?ec$pVWy|?RR1!;7t|1+IMW}X?`rb65e&kvF-ssyx<9JWpSJX!j_sN+q^v?6X zp^Tn-7m#N!q%nlV^&)am5`}gQm#yay9Ctzi>$Z$^TgOtIqpl7$ei0kt{!X0!1clGvx1ij8`9=@nzmzUvb;4wo#Z+eL zBQO*S^>&$#Lx7u=ecOk&GA94Dd(hw3r3SE9e490xO3+^9zUHp&%_PfKA5$tiqS6{1t$H&Iguzre3B`MID0=_w z6~uFtW4Loee+*sWE~gL#T$fW0j%(P+X{dimlNF1&X~c`iq6e{lvT!iNOM{M$7}o-E zCNai>-oA*1UH8^gb}aByUUg*j`<*yqN}Fm1rYsD#g57Ejj{1pKb0OsiuB!RqGhf|};u@XL(PEBZP0)<=$ZRp)F+G8sqp zZ%7=KNYSB-X*zw}296^=Z?+kUT?bz{&yX$oiHS7T*RYvdm$Ktw@rn4@o))vnaA)G3XQ*H0{Xr-vz-t}0m})IEf+t=|1{<)gKQ9U zC*8@db1Pk~!uflPBii_{^z(e#E3TH>a@V}B>F=jk8_tU!>B)k6A`)){C|->so z6DH-oC^m-d;H$>x-}euO_SU?(o;WarEh0R4NwPdzv~;p|<6+d)`Jlc;;wMQEzYqzR z)1>ET{V@}tRMXe-JQ5@-I0zebw-vn!F+9AZc+>8ClW>hvxz10e&E|Rz$L7|Y)sV&d zJ&_xEMJ?>{2I-B%W8!=m3+5xY$-jmaCH;~LXG(dXum?0##_CjAGQO!n zMk*u#9SQ}*oRf#1iADz6?ElmAhfVJLsqM*fddRPO`4u-#G}~^^zy4XPbX-W7BiD8M zpOcZZ>c8e*XAF34CjHza@@$!nYZYJwoh*CrkU*QI3@D z*8&%MdUBv?#@~5g-V@6SHM!@K<}BgD);gKnbG9<6h|k04d-NFD@%puEqJMmev!QtP z%qn5~b@}e!+x4c;VsIP3<;`A0*wCfR-e(g?RpD;cR@aExhcJvI?cMQzV5GWGOkkJK z$RQQysR+Q7wVJyJCR!4R=fT26B%vK$1Sht$TZ_sEMbTMa56^CxI3$k2U zm<~Uy*(Z{?YtBe%s!`?gp3XlB?!HcBVk5_)B@uNJ0+ zO%KiSTHynpMYjX8k=Q594yyheC0fEr3Z4L8kpjO2jd@-+s^athN;Vd&=Ka)1`eMjZ zk7cQH5I(fq#11kMHh5NqtHl;H*w)^ZU^2OEBki2AV#QuvcH*#~CLKeea>t)nCSA;I zwSdK{i9cGfH&=*F*nY_q&7_u8u#-x=Oh+FsTFtx)mu^&4+M zGIP1%s>#I&9o=G+?aP;1mr8d3v>q^1H~=bA8(kEWc=zA5-eUUPnChBft}C!ED8lc? zQ2*GW$RFo?i~{p^JK?ch=z5Q7*1;2C4dfkvxsDHb<01I@t7PL%z?i~msRFj~lylxB zyVQ&)W+=?dUs=jGYM=CGM;t~P>%aQ_TlGre{4x1r1p+65@_F_Ss2JcYgqFeV=Bg*7 zkA5|*%$VqQ`*$tY+oT)zr_V;m>Se=IllusjUx*{R;|F*USLAVaD| z^LrY>7B?_($w0LF9X<{_*0iwgZlFbqy%3q&7eB%~uiQGe8lgj;@DWlT>M3WQD3dgV zEeH~hFZVhltVz&Zzo;$~_J`zS02Oq|uPbl^c_H|(rmj3!x1$Gj@4DXkt{ZF3Xg_za zxqj))!c`+hIZ#8#CM}o)cr!oqsAAY&U7L#kc~aI<;*pRpKq>Z+IgzEOQ0~{q90NJc zF@~7gk+j=hlpkcZ3;#}kM+(!`F+54;kfUbdr`vP?eEUVUH*dXe*RY9>S-z0#HGLr( zpQO9If#JRmVDOVaKRQkBJgyW!c_>k5uPM%GdB_m(S_%z}Cz3AugFgR+7GGgVj%T$| zeMXC!SQH3R-UAaz-oSo%`--5j+YkRDDwnZ4sw%(TuTaoOK4@z0y-`>t6_d7iN0AhH+fL!BqVVw}~w*V|2qOYH9mbGc&%>FvSO2 zuWs2}n~#?mrq({NvvC%FbNL>><4+V04pv{DdbSdLZ!9SIb9n$EofOrBfWaU+SV!y! zAo~io@fG(7{I?c>(+!kN_UlIrn_)J+>!1H=MW^#7uYnOj2#=UoyEW_+2?*4mxADBg zLnmoamt~RuuR+xC$97P)so*Y;RM4TnVfUB)!jcmjofrdJ@go%25kp;acXZ%0-zlB! zd{qVq;PT0~>1zWMyTrL*PaT1d(557MI%-M-sx|5nF^)zs-JWCa*asWqrkoA#r_Rr% zdsr+tPvx)iv7P_fea6Gl?V^UHvbLaXs-mK1aOPn?9%^iw zvc2}@c2jbQtWd1>UpFyfTRFPa3ks^bEFI~92a?pJr{jqglS#6GY>MNgyZ5|?a$oTk ze5HD(aYN;XCtE?w9a$qyyLEb*pWWj*pkD%o6V?D&%$}sAs6T-rL#L=|7XSHd5Sp zf5WmxRTnofq&yvjpn@Xpb`TRVrE;y9aK)0oafew0W-zX4vN|!gT`Avg@+;|sqeTso z3>fA4wuB7!A&ZY!M=NM|qhgKOwR0ZOy0z!qoYODd8%>p+RV7U z3#$+^~y z9@8=|cB3aHhrR2c{ge$jBSKejXWfmqh_H4NFyT*94;clo@O1?kn=RS0zV#{8ukgF6 za4FLDLTkpxJo{-tD>%_{SGupj=7z2Q3>zPy)48C)ma{O+RTuDE0zg?ioMxZFxwc&W zp^Xl_kKq%{&AgUWGDuyd#ox)1?=P1j!~LEu4&aquIQ8(@0N^1Va>d5%zhceb;J&+;X?ZTX9_fgB6i7Ks=Q|iClhUG(SjtkT* zz?=F-U#sG)USC(f;z;Kpr6OxU8ni zRdt=c^38{blr{R9a+h~K*XM^@yn^ebtA@h0{{z&?R7}SG2Qa@ls?e37oz0s2G#q-1 z{u+P(^??~9dUw$Y$qW%0ajm(?Cl|fEM^ z6?|f%yM23tRl0Ilz$LTS<4I~lnutq&?D247CDo&lWWe*Rb9ZB<;Z<6W0&4yAtnHGH zX@P};0;XHz02BIxukMJiXE3L+Nm0kuYtAt z2bbbBg%N_%H!n*+M}*y=lAm=vy683?H#&T@iS6V5_{rrWL4AwBWdP|x9%BzAF%SIl z5Vyqc7vJmy-ZxdFiN?9Ef@2f3dEE{o*$b$xB!408Zqkdht?5RLYTqsayEXAj%4Ito zzuX--CyfX`LxW-NCcAHSC=2q#-UF2+Z1lu_EFlqiCa6=bE9i(j3r%9T17?IAfc&In zTT4{2n43+Tuh-por1%>0liENZ?aiSU;tyk4M!Gvb*1QMRnbT@>WMyCH^L}0Sb`MbU zHCs!rX_o#qtG*!fZSrzi`sIyTk->CM3UPC83jxW_ld8C6bBv_mUmC+SL5>+OX{}wk zjC=Q~0q0*cHI3so0H?dL)N_*+`ny!Esgbf(s|-{R2VLVo@q2y)R%+NcUA@+_)oDsp ziMMbO|1rw(=FNcD)kh!OSfPYE>aBOy4-3DpKI5^VP9CfpVB7PgO}ZaTQEGnuwhW61 z;IAvad}a{MlRsaR3zTB4X}QQ0(58zwg9-}ouW>;Et{If$A7BMVW?;sdOG|rc*2^e>h8p zRu(45dddA&97v_rq8AY|d#1coZutC_)eZgTzq#dd8CCB5Vg_F_h7HH_CK^N^$8wxM zmjUP+P`>cIZQ+3h<)*MO*5#&WB56c_Iv(GUH#Oe3b9$5-6YLuM`a4~sl@Rs7-WRr_>|{!my5kQf3Ye@UXqzZerzF^Qv7*?s%_eu-I&nMft=wg?DyUcq7qi zO)T#wgwH^bGqJ2kyXJ{0|NLb04buRH8Iy=7i{Df@(-T-3JdHE7vxSd;1It2&N6Kx@ z{07Gsxhk#|5#Qb7sG;>jc8wy^nl){L$**VW%b9C3$%wa4@?UKQ$EO8it5YQf^-L_O z@5v2==mot`SXW?Rg)HUMYF=xa% zQT)B9(>VP|%5pZ+$jHl`;(J5q&4|c{vfpJn*l%0wW`uso9F64_&t)il!#8b4k)Wo; z#*ts|j$o$mdH*+!|E0W2YP>Rxb?5bP${+FKO#1@E3`)l8ibq@xZ)ml=18;J&*eg=5 zHPyK%&OgJZO-R$+yybPNqHRtmuQZ)ML6gN5Fl6r`O8cLU(lD2KX-oNJ?^R$G3()v!1Gn}lZ<5)B^9vEk z;pS9IHo&st+Mx6&3&RWeZBsoCvo84Z3j?ip|D)(E z!WzTUu*L~gBb)LU7AEi5U!I%Xp`s|-i%7+R}=l6;e9tNndzWeKkc%zOB z+khwq?@0d&lPAs;L^zx)<+Bh@^fgPYfuzptZw8N?UrAt0muSM7u!ywQ%Dxw9wCzi< zv5=q=qx|KX@JMvb1M}SBv3bJFOQr7|8hE9`^*J3?ANuRNZI8WRSP+r*ZGBOqbcxaU zj{E11G9Iju%q1%peY1-5s(Y8+FG2cvo-zR(1BF{f z$*%I8o#VB?Wb=MOr2RtZFofUB(i2wuWUS%QzH767# zd|uAgc=6)DuJR$JKXM_T9)(}xlFc8!z09U_H(vXJO>2sUl(Aw`E43{+Mxn+Tz^P8R zFRyNzA`{}z1yT7A(B6p=YLjrN8F~30zzmR}7i(Ey%UAea32M18+CaOa(#da_U35HI z@jL!*cx{M-8p_S5%R`^m(8}_TK1(6^iQo2I`{ib-CtokYW3vvgKBzOkky3qLo;EP; z&cpFQj=_~5{GB+5;Q4-ex1r1+)%XVQ;FHvYp)^djWKNB^l;}93R%rIxqpQ7-FM6im zJ~(l4Rg znTcVr244^~xIW18O?Jtr-=T1PBXSqqyPGnGM%(LBfv_;}Qq-S^#clp5K49RQyF0)u z)*$1iQ!q~>;z6fK&QyE%hisrxfr@v4hu0-$fSKT(eEn2j!`FX?M2jsVuhdy*PrjNG zph6eEL9H>kW|>ahA~Mj+)8?#|WInhG9d$FW%(>c&<6@^q=?(WrjL#eNOoeszFE{Shw0H|u9KANz=Ja^P6K5+8j$m`lekv3 z;Hiu*mc=i~H4V-$n(1?SY5E@wHJ_3xO{X8XLkrel8gxC})h?q6;HRpg*56gm&zfOyN|B(Qhur`_JWR{%-1Ph!-m<6hl#xd` zC#vR*$5A^-&<$l`;W0|f_cFbO0GphgEeS9FgGNNg2qXNrN#R!*K>+DJB?Io)m!oJ0 z7+J6-=2P~7*Vg&xzn$*sja4z%emR6dc_C4x;;tgg;0C?ja5WWb#S*xKV38V?BM$c= ztMc9YhQp9L$n2HGB}5Q6kXW(J@Vr`3=Ll~!@2@QPSXNvmr&!~PYR6S~8hE&y5 za+P~v#??W@76rn~Xu^-c^aDXW0nF`OULqr7x2#|wFSycwfX9J97G2`p{TI>4c)NI9 zWQ;#~=za_wigG4T4t>HRjjP2G&KGw7qEYwSdKMk7-_8|G6mnTW2V&3In}W#A<~g!$ zywRJvM@uiaqZFfnUfmGEVG19yoU{Xr+Fc}~JUU{$F!sN9K{Ca9Z*X|K?y=&I#0vqp zngggz1Q00?V(gYVzPb?;OjT_-68Jp-Idse3!qA@(y-u6Z2ObgX+u;;JIg3%)3hif0 zh8^N^NYzWLNAesuE#z2CG6fo-!u6{&6B~uEz}v|R zpe*{%T#@k4m!7@Qnom3=WGE zlhy1M8GL@@+?%?2vNv~@v8{TvWQL7|L9%~vwb~``M~g2IuoUYmYDNWZCNRAy^)2gu z37Zik%%bt%IM5Q6$jIaHolAK11EX`fV4fxd;W@W;LJ1N0p_t6^*w&oy;YVF#@m?Vl8X(dy+$aMm0(S=NzTf*Y@u?0CHl-md_cg$JQ9D~yD>2LEZ znSKncn}V$|yfJdngr7yhQtd?4RzOh=F_ARMK6ysmg_u%Q4T;0`^OnvdqSC)jAa8f& zI>3|YFY7eJc>A&R#}?3i0lo;XxK0892XwvpbmZ&MQTIr= zZYhBWrfE?_#Awv_i0YZ(xyZJU9^!fDJ5V{i{f~f2+(gxyhSzuCibnddI~F5Rdkr!y z^W`bN`R?mo&K_&JJPjBSeqPHxUoL$( znEmQ&df-X|g*#*cbgOcwxaBCA>CyVrE0sVq$+3{Jq&3}!RnNfWXA~)*VYoW=XETyu z+BP@?gZ>8yIvc{wY8vYECXd@To(lY?J;|ULD=fLFFnx!V9=libjRCvzHIcl-X|l zD4_a33GO9&9!%y|39M*3y zwPwFXW%CoDWx3k{mVAcWPjvw*x&Hw&m#fy{yNyr3+81QO=MNk}E4-$HiuF86(gUfrP%_$%>ftRaBQ3NF{EV6=w}$F@1v~&1Z$%a5 ztWe9HeFuNvHp(VP;tTvH+~y3gF5_S|xrI>)yAEqIgoKRHY8xcQfmJkyhq0TCn^>jRx%eaj`8&$v^D(RNQ5@oZYKBo)e&F=#UCR8^%Z=c634 z`SzS!13%v9=FPzPhLRUPfnW8wO%n^=`!QJ|f^XC^>W`HTt?*HS1w2sbSoYTM z6FvXaa{`%gj)B=EDLAF+o++0#C!9Kq3VS+j7xrfS5#;}O{pnqMp{#ob+drOPyW`Tw zG0=4Ho{m^RX-Tqnc9^HF>qDt!FZp>1hnwHL{p6X2pKS~(&5m=J(v|$_3&hBAGKu#4 z-Y=@eCy2JUbz|)H^jbRT-hGyc7~`lLTp{@QdtcFvSvb2eeb%={Eza96c!A$Sc+Z>r zKd|-~KCsW*#zV@FmA6l&I`=Fa`8_uTy*-4euZfV`7*Jrw3Wg?3d)qY#5v@`Uqt<*K zKp)t!uKYwi>3EvGUl^mUov9tCX^r8dc2{oko4&VMKbOW&+kQHXMDa8c zWmD&PvB#{ByKMZt&EW5k<-{qElkbSVEONbjhmO_{ExdYSx3Sx1S^ZJl$-2Jz(SC0<^rJ^M!sOdom7HX1PP-(wtA?oj^C>F*0A0-GMULJ z_<{67a|Ha-GGfsc$V1S)itA&>?4TbB)8BLlv7eazAK28_yHy+aHso;hJ=uG48exB$ z52z8D=vQW{607w-+GUcn?{lY`k|?22xp6!67j(=g;>0>0hNcMt8g~jlT64wS8a(vm zM-V9&C%xO{^_9LxX#D#2n26uC_o?={@FRIjkSLDVc59qg;cGl@L_Y3#Hx?L$M7u43 z#y&L~w$WcOObbvAYp>@8xyQl2d4?iqQ@v5q z;gg~{ zT5MaBOtXJ$R4pZ=OEZ5%FoPHZBJ~9#dBU6UXz0u;QaMZP>P!LGInZMC&OR8F1x3=5U8>v>+64;IbBEp8(~6w~&S5G@>jCA_g| zie|WU+dU{0`}-+8`a(>_^#JgNfQf;wN5J5>PFMYpds@(c+q$>rPeb-(Psi$`3VHXm z=qY>q3wFQxC`bPRUSdMGY!3+cs2f@y+1h>%zD0|>+7dAtUrxf@BdkQ4TE2LuR|VEQ&kH>2=H;*M zu)@j=U<(iy0TbJ=W*R~D8MO&p>7T3WZL9@rh<4!cj`G8uN^8N?A@*EimR6g6%hnA` z7lbo62=ny2Zk|p0C9c5_Gs>;pDOT@5KWP#tLNtb=Ex4rlae}aNznvQ%w(?)*|iiIc$}f&OVoFlw&bf+|q*0M_8SOMnKzhuFQ#d z#DE2ZqssS&_#jSQeD?EucvxvDzO56-21!btsi}+AP zL=I3KoQL4nKcixce{V%O_+-ypZmZQUd^4$Y>>ZcSFq3$=c=hfTO_^?6MeND4rp|O( zyxv1Gmo?$q0kPtE{;RZ!_j<{U__)q#teT^x@Pw9&x#yGUQs8Yhz$GDN^`~aWk;Voe zmT#!vbc|!~J7!K~VKn>?z<-zS$gCn`Qv{w3xFB+KYV5MZW-KFv*`>0Jy76KR^^wj< z3s#+(=NGT!oeA|`kaVR}1Juq+7;tdhWD(@_q3P@Co(bvB8pHw1#6-TozB~h9YfZc; z^!R2&@6M^uzk4B}bYsz!Gx)y!N)8E(_2Cx}{fTYutYi3j81lnr1w_e~srnS&^fZS{ z?Kg&Ca6q_5l*cVr*59iX03Akp$b1W+8B~^kk~*S&9E($SKH`9P35lVXcO7FS6WYjM4nLG;F%m{%&WovBa+wO=6{<@~O#rNqvYd>eF}!xyZBO zlGUTDto?se92$R(5&4RF_q11G5r)S2AOH$DK~$O7sn3orl22QXc=FF-x~ln!ij(pDV(sNMmBeFKY?h09ZNci-|Fp zU(%#YDRl%q+t7QIn;-P@D(g`aKw>zKK0TQ38q;~*CE>rn9xnnrSZ=u}1Pjz%dan== z|Js|bS1h_xxHL7znOQ-h??w@8Uzj!Cu+-A8MZ0aL!IIh9~Qm2=W_6Hs_1pyDmAx@SgLswK1cPi%{PE z6Q}Kpi$`e;<}FpXQ&$&$y`uxjCI_XsP^F+*W2AFOUnZJUYL(3_53usyfz6?kke*{S!WCM)q!*IfTR ztfJfOGE*P1(oJ+!^E#Fn5F7jWV{*mLbN%OPUyBMg-XdH@`vUf|USw1sKLQwtv?DJ9 znC|)cypf4C;E`=C6^d}qM+ehF<9BJ@zhm8?W%IME%$@7r^3>Sp`EG?-k7{!sc`-~N z>p6}Jv+vboOHWROe#m(P_o7U4foW{0S6ee?!5o?SCmwGFyo}#0fFkqn%w zZMNPDg}XDy^?z6~_dfi_Ec)5=eBz6xwZ3!wxKvHrB3oclOv+v5aFH5BLz;tKYlVCV zaFni8QYkL--asGY^hnzpM8+wzpZnRbCl6~xc=NicmeRr#YvejlD%(nkTm5ST0K(#omtNWYGV#G5q-Hy~glDdG;nO zI0+mfS(c-(_`)!~GnQ>bdx%#Cb^~IbK7OTI(2dy%WLNrDPQcFILsBbEJ6XQK7XI#! zSlL>5*he154%HVqv}g!@k$!;Qe1#R8)(vdFl&r#wa^YnZPvPcXau55r0Nboy{s^FE zv$Esi1P%-O%%ZFzF|x6jMCEz0(aq{;F3S?QJ05k9ZkH=-a%6= zEP!!Ow=|7qf=F-Qa*tFu$V&KO4EC$1I3_eZ*Y4uO#ZDq$dM`N9e74CJ9 zBvp*m^PRG6zi0wQTNUclvgl`tW5F}U@{w{}&8xvx;4K~AQcUIhtM)LS|QCPSBkz^G>ue7SFeCJMZ~ ztfpg&xShMDH@sapzq_Qpcy7D>z%5CUF}Fq}4DifK!jzRkolFz4`FcNL8fScEa7%o= z_o~MbXJHE8YqXw$C8zHD_fm%G0jcZn#PTI%_04>$ZkGc1j&;j~50fqgzhkd&dQo)M zDUtVyq(S1`e}D({i5FgEaZ0Ga>*4R^R8(#f+}66r;L~J|jR+aGc=(`=A-zA{Rp*Z5dQJiS71vP8;TeOfi2;+X-35_A=|P8RIY#WKWd>*6hKPjuRaW(tkos zCevoPkEB23d!&q7&et`+2H?A|78s7w1R`5}IcdVxfEgE1C?OxMb z)JzCETe{G?8Ll0J{sCu>LWT6e>DWDXL&pR@8PhBx4%jTci&4C;eyjPTVNXhS?I%8G zgTyfFrb7pW0S3Wz|g4ig1dWSk$LouOgZ+Na8I$>c%fQ5J2r!9owOK! zEd>}?BiF{09T&VU<>uOA0Jh%qo1MTu()Ea&1Qa(Cx*l(P-*FCf<+^SidV(BC+*vZN z2WgUM+S&|UyuY2pr**1E5^Tao#7k8=kk3dX`r+KZl2ZU}OO<2z>Tg{ItY;P!^9#Kr zsC;r?uL!+&&ec6}AGAIh`qRN*^B>iiRFBYnj0<6k*h7M`z|TNh!U-<9D&vzm$5c((?k(Nx)!mxc)`4=35z7IV(Og3yXq(UC4o8zD3i{63_E3s;RRB z8QntKSU5}VB!T)rIg%(Lukz3OK;YHQ!_s~oTwUDVGCsRX0s|yeHG0D zdxDoj&WDzO+95HkQ+V0MMc>|I>MDj0+I>izxczx!mxhV*!?Lw)SWsB>o~a)jCR;~j zTP)_DkW`xWiI#3rD9g!ggLAf=$x-S*sw~B1kER7PTyPAO9Ru%OCV5=$-X)%rB=|yl zkVYu_A-o4#z>9#=^NlRt_kh7xz}TVi1CdRg zA1(<)+kpt&P@87P-V_|y>_Q<7gG2Q6ZucEnv7u~Bn8t~H(F-yCOC1$5$B@QLDtN1# z#`4*uIn`R8x%;Lq`M!G&)opO>!QzvQ>9Lk#`M}GR4Dxyha)_)QYDXdofB0UgM`|X8 zV9}F9zU*a?fE+t(2=XyNEBm{rbBARU34d?B@g-q?pi$ZQE^$wRK>IxJl>`ue;#!8F zFk(-@%f&@WRUokmcL210BGe{qZ+y3r^GColb4I_IktCbOn&tOV+6o8veJr}rw2jpL z7|7XA-(4z_2Z3m!R|K;WH2b|?N}$+W@gAoyuAMm7cQzL|-B^MIG&$8#iqoi}6a@Jf z$r#1<4Vuu0LHTnL7ilQr`AwTtDF@&bsC~Oi?>f=$+Uzax*2XJ!hh$Rp(x!|IiLY?= z{tGuNCYLTOI9R{b)bN)hV84m))gW`o=!aiVdw!xg>FC~@KW>Nv-U+@L$JEDiBfb7( z*r&y>;uFO*6@(*QZbmUbkN4QdZCvEYUv7qEi~HUcPbF?vUkMydy{SEBimv^6zHo?Q zYg#M7h0;Y&e6$*gp9}>chlrqUrip;L1ou*rph3;Yk}56BAcQ?=ba7L0|4>G7bq`Z- zKXcYX^%;bOG}1J-CtnE~3|4y46X?Nv)p9^q?Z+Snr`XLdiZ$qWc zt#Jv9U;hJCu%C_ZkL=~(QWt4n-Op0^U&!MBqu{HNP-q1B9NQArF3>##K{@L4MePac z(8aRqb5(J#Y@j_?v%<@fUIJHcSf|$q`Xh}cMG1r$3B7hzNW=oz?ru%WM49frL|&O! z&(H40(k)+<>Ke;$n&ip4n>uX#%<17;;OEyDdXG<*N4#%2-=WLTy`ZLWE_n1|zynYz zI$o03J1Y20yv}$!X>vu%PqIal!P+MAWM%6CelWzF6vmGtm$$XW&sdDos9tFX2deh`SAe;1dhGez$wh45f; z*OeAx%I}wZm9(l>>2-sZ!jI+U)>>Zo{Zl9|Gv*Mb5=MNt8Sana0KnWngkzM_zcan# zug!TQS+R?{c_`XPKvFKBKeG6QL*o4e#{Lu(ui?G@$e>U?RV2#A8Dbo(cG*Z79SVbZ|D))!Basi}imH zg)bF@cLNHI;n#Qm!%7sm_<7gM{QfJi1qdQt{oNi zw}0z4U9&51Tw=Q#;Ftvf_&k3F$6bufn=4W4OcTE|I#eVYu`h zkSV6GxLzFh?D4f{625bDkNx6@_73_;RI&q1^+Ypy5ZSY|TjJs2TltZ6|BBaOpBIQb z7nvcMJwoY+M%%-w*6Aq^H4@P#bv@VcEqVZazzp?j^^lay*b9;Y_8&;!1D{9XRkh z;{+|%6+2Rsg5W`DDV*;xe&R_JHL2#i2Nxe=W5; zvU^b|0+_yL%n=XgCOr zG%;-pYfRPpMpG&;Y4$HJ9)#@0G2BDm5%ahK4l2?jI^Zg;-wCdH!6_jaYDlorMvtb+ zRg&rcHS+tI@N?pBXb0^yb@2XoplFZ5(&nAra)(6?s90u1#3uVBt|wfk{Ki|9y2s7# zPnMN!$Oww6xZXb$7D9wrp)!kE1XoIXk)~}u2T-WF1PP4zS5Xjs)g~#wz<#7{|A@=Y!x03$bLR<1Hw9o zT$>B@J9i;q+Cd{g1!j+LW;JJcj-%VDLsV6Ya9E)S7ip6jgWI~4qXESwXPpnO%fR%A zO#(Lf#u}VgS-}_gjwMJ$cEf18G(zgw{J7ay?XTvQE#gE~U)Cz|01xY4MG~Yx+qQHQ z&y74Ld>46sClB#K{lN!s4%s(ct~WILa+ub_XV2*l-))xu?wmj5Oq!#=B=mk<;?IpL zEe8SZ+Vy6fDmK)OQoI*B0@g5fFQAeJNz^24Q(pjB>oeFE1yk8Y;hX?op30N{IT&O0 zfJWujB4d2P%Ygp?ij&=c$5e@APnYeJr%2*y9aF>I3$=9Z%>&$b(NXXF{dGC#3U9 zr`fZ=NgF;1d~;c$Z~vy|_&n&SBdWKxXip?WhxlXt&yT1sczpN#H`$#a6;-5h`OOKi zW+Qr~Jzu_r-}n^PzJxQ@1B>@{jqDx*v-DOX#EEi${i$9Qc@?rOC6s*#A{*gN)jVH4 zD+mS^zSc%8am^llkDL`=P05E$f8WWT*KT3=-kvI8@7mK^pd4aIf3QE%eW7}S!4Ssp zCffu3bjkFv`kd=JTuL`)NU{vClz#D<3`q^{ea9_A$f&os4OCRQo6@umZZqGB^m?YO zzHR(BBdXE?Ehdr>XK<%Vhh~M@`Sqcmc>P2``9DCmL&QwmS;=Ntw5oq~25uJ^ze>ae z%?0Lej`{k2W>incs@xhbYgjF*%Q6*f?ppG))K-t|ih<-coqyM)P4n0MiK>XA`hYPY z-j^EV(XlRThbUXfT6=!~7M9UVc4M6eNLBaA7MSDWxxux)9w-Bh5uBCt?|@UVGy*vB zGVv7O0)?ULOiW2qJqJqllixIH)4t5+K2!xf;d2y^XqA^W@k zSQ?1){7BW=oCumIsaZ6-idyov@@*>tX6P>R`1nYtk#au^6~XM3T@Fbnud z@2wY`yOqtx0`u~QA3K-L!tMl?u|AHy?Q>N4MNuWaE@oZU@ODs5{3_d1`B}N%l43Rk zKpG}VUfSeo)y0zgqj9+)L{2RTQPXX9DI*OqEy1b$)aZ?5ZR;&yx2P+J{>2Y>oQ01~ zE?vLEbg?dSqQ=XNdG0#s=CyzC7}|<1V~r;qW>~+Xhe=Ar;_*$Sb>}b@taX67qfII> zF4On@7{5^at<|s*eQ6ECt6FyWXxFrnw25CrYyBoQ-I^b2CECzxQf$X1SB-kgSil1J zep>%sp?;4)L)ffVzum?_d)v5lrSD{`J!ow z6e1+;>7hRwa80D-%=oX1iwGv{5{|`N8Nl|)Q2*wy*a}Qw-}@*8%}?G z-JYr{<2k92oe@&hS&*`9&-39wKxB{m59}gp6h7K_zyrdFe6%VE7>|h^SR8x%?y=hP zxmvD=7ql50wZ7E7295gGEE znEb&7z*W|_5Rufo{{d?ATOZux{F7RweSlgjNcl&x#+tgGM2!P7DqUlvQS30N@kyDZMW&J%_>&N*j!54~6`VZhi;enx4aox9$ zMJH8pS_{9RO?^Obg`G7r^dor$9%#+9{+0`t(Q2Zht0DSsVSGi9W(pt7IXR@5pON&U zb{Y4)P#^s;yA<)3qL~r0@>vn>t%q`lJrDKoi&K>3&{Z1JJk=^Dwikgg?f`>` z@j6_}{V{{vTp5_o)~GJ+hyMZAeNnXT=xMXyD)m|ZSf|?5LH+JeR4A?)W(ql9)i8DQ zjo#_fd`;rh=r;9-85@U2hZ)h1`jF;orL(k}50hMtv%ca}aH8N^`#)t~>VsmV$oxrT zE*i59N#2Q}dGDA11E6oEl6tTUe#s$%AX1KVK#0o5FQJd(p&lUb13+&c)FwvS%f8K> zvW`f{b<+57g<0g?48L;Z)FemG$sReiK^4N7FrgGt!3hkEo1e=>Xa4kYd)5BtB0oT-|j=45kMbnpj*JUH;C@Voovha zvz3Y+UFDaY-Yy(mA)pOtV97-(QBR1&wx|68m6ns8g@hnADQy_X&EV9%lPvYqGt%B3b= zgs)gDAfjI=Rzn~CYoKmoE-vxynPRKM<3XUyT~kh)#mlQr@^7H!G`0OJh3hI&etUCZ zt2$gu!&Gd2ixJYci6aiWM`0p`E(u^k!~`(eBM9n6G`)?+sz!!}MgdI}OV&>6c`k1J z2e^POWJDl4zJzuv*`xg1>vB2N^3nLyDQQb|ShSdt*F5o1)}A?f^Rw0%d2l9fIn3nR zyPtA`1N#raQy*7CP=1_qMNOjvDDFnSn3@RB2HUj>p;ZJJ_R_&z+&=(Y@Xy3`?{a}g z$@&!W!&JB(@K!yh`zQFX))WHGtKxxDdElqY^mib?7IYOSVBUN(y(BJ(OUgO!!S z*m|7Cqke6p7j)M)oaXfJp}k+0usFqbC)&3k(&>tuoqBCtq(O!8y$mYukFS}DaMH<_ zj0&@Gm(o}KmNuzU5|^|xnB;Z2+ebGGxEg#*GJ-ko+3fc$hGjrpL&=s4kUhlQT2 zhxrsuVQ9sEsT&JKj8K1&di*JDS+lZWL4+D`GkL`qy~%JseZDTM<}e?yl@eVncfR^O z!KWcUmc3YW%wNk!u9aCo2w)T*J}79Dc7AOW8E=-oPyc%g}1AzWugvHU^S zt}Lye_(LfnOgU-cP}GEF%?=6=DjZB(a8o~dPp$==^?dOGYAJSy5HOWvK5gp=Xv*X3 z#@`UtP9Jd%%y(vKj&(iRp2R?L3=(GdrRCK1XbdyuO%2Qx(Tw)T_#0Ez#9&gdP&Rd{w?k%4SOPeE@Y7RFOVlTm*i@A+p8r?tp3A#}aw%;=Qhpp=MaTL%>N9pmW5oMLFRuzi2&f(>bY zb~8sIVs9k$=@7PiibSAp^ol3khej} zUJO3Oh)W+*{z-<&i9&wLg`clNKg>;?b4C52F5&EksOaxnXu=|qxIvVbt+F$Pqb48} z24*QKVg4wM1C1`se93PJ*v8Nz*sI#HlgCwkcdz}ie3$rjJ~9r3g)X%IlK#!|sDaCK=uZ7s^Yxgs`5y`Aa-CsX;>MJiHOpYWtmc26 zPWZba&2H&$rLHcMU%^K}`4g*~Ip$BUzEP)(yZbWn#0B0q8u)dXrY)w~u$Le`Ubs+! z^IeMNJ`O)hM~ne$xX?a_?v+r0?Mc8&oA{8 zW{Ck&e1jglz-mGW4KZU%^m((<=pX%?>PF$(ty&2G4WG)}oAM2{QZaVweSudlF!l*6 z@W?yIAQe*}e+vx$?xq*3xzBB>S4IOD-u$IqP#MLep-(6YHmkTUr&evA;STr^YnvZm5|HQnm z`g1vA?nkf~hyb^lY07xWTxkBy_h$O9L;ft1Q8H(IYB^~Aduxo(cm^H9+l266v^pxU_I3OB z<1;ua{%n(~H8C936}3V7TP*I4f#0eo5vGF9TWzGacJ~grdvGfAXVyxYmOIb(GqyVO zZB%@_33r0`KG~dUmMCdz=SDHUR_O1`A&GID0aR1;gA9lE8#}nn z6%quZ(3;16cHL|8A`_~s=YaUF{#TxZ>~uqBpw;N;z4obaXRsOfhq`5c;x^uLvP-3VTMU`b`YtwTq zGtDd$okjGXS%8#pnyEdY-CE=Y_L^Oz>M3$ye{6mIL}=Bf8%9G4Y7{?JJe#ub@ zkM_@ey>1zzF05v0#x%xjC7e0>oxoq#XwIYH^Sn4+M3BD9Z&>O@uY%HK@%xU+;w@$;U)ILE&f{GP1ZpV`o1*B5m`wEVY8}F3VQv8Y-9WU zj(6Qp{*8xSJDiq^KW4p?#HcJn8>MO4SM<_5$2!;Bd(bOWkhexWU>d?mBz|JH%_nsQ zk%K3E^qy;M92+!pHv|e@icgHR??J*iqpfRK6Hd}rLZfEBo=rrJ9Ly_2(8rXq>{T_; z+H~yxCd-(=TA$P6QJVudcV%5yhBuEFs)y&+IHNu z)Yd=B{Cnw63f=wb9%&0Bfs0%L87qMZf_Tss9GS-Tg3Br=Zw5ltCV#e-CcFK;)r&-P zzg90^AxhtqlyG2GuWhxfLV0O~7BUhOc)VmVbf!gC&vmq3!vH{ruN|Tru)+|~^ozPVN zxeA{+6l`eqY5z>)3TmRE0a(Ajmj9#p%)+dz?EI-NxZ<%~zKOT7R>ri8V$%9l*rK1Y zH9hCUn(+&~vAGwPdwQJ<4BTAP^`ZH*UJk}z4_zOzBwH{Ug@r9QIPLSdtZbUN>!f^I zKYem3mhM~QJBAV4{-ZJ_k&>~4B=rEw`!&wq{@x4$Cw;De6)V93y*B}84_)(_h2oiN z%krJv?&~mnzcHxb)JY4PeFX3ro8i5`+<)7TE^nOWT$WiVRkma`aeX8yZzmJJepjJi~HA)K&USEH@=+h3tRMF?*NDyyNU z(twwq8s_V38)tpQC|JMI1l5NR3!UgaDik(uZ0T@CvRrvwXdX$nicqcDp36}VNCqOQ zUuoY%X!QA5D~cxVJ6pm?S}lOcO=MygOmR?eJITSwTtbrsLp(Sb2Svy>0an)Rk@dq zyNxcv3``nKQ#u5Wpp^u~Vw2{M)!!$}Y81V>EzFS`kq6`{;3oS1V&-5>AU_XeMXv4f z`m>Wf3MA?al%vkEeN7}5-Q!Kb#xI9O^A1$LfYCy$L!k1N3_=$tD%>wsd`Q1|yL+lK`%6p8 zH}Vp`^4lIjSK8qAle-bDU!-fC=Z4kOJ~Refr5V%!QohLhWUbJfi5b&rJzwQbP1JO$ z=@%a>Wl;L+K4Ku0t{bPUzklJc(}K)!=${L7S1;tsi$rHJjGH{aaVt=J<)?lrCZCh} z;KRdM$G^|au6<~}NxUlX83QK`4aZOUS6Z@p%(};Z`1IEqq=-?*`7HUNG2|so3f`Vb z;X{XA`A#fAWiDbi{wAN*^IgWG(yc+xCm}pdo{VMg05wj711xLyuaI;1TX;eL^NA4n z3}zCTwr8Rm`i(k-=d+*My%Lz%(N)4e9!SO7H!ZmYM#0@%;L!Hu$Kf@OEBPCdosoW` zU?QRLcr-U!!Lz4xuj`}z00rU!)gW%V9%$`SsU+r5;u7ctmFniZJBF^0Y*t0L)sul5 zcSes7`WJtH1T}~r?ke|SOYn%Ee-zxNJb95KN;LJR(mEg1P3l5>&xz)k z!#ZfM;U&`3p^aMq$tNO;b8Iax+3U@X3>c?DeUnv>d;kW1`0AB%{7mfKiYz95$+}?X zsVB4)6nFV#Z#?X)$1vir^=?1y#*Du5mwvx(Z)3opjCpP*A*#P@oHTT`4!h-iXrg^MhfEW({voYOv zI6~fYCZfpGXK)~V?+(EnW(};7mAXA#f3d8utu;(TDpTuWYuv@!>rLtG=0jx;nKbA@ zqFpR+93W0K=u?`_@xEAYe&tvut0=?PF#l&)!`x4gzOPh1^EtTqe766VCJjujJIY|p z@NYkdJ=gOttLMY5l9^*2B`R4;@3+;2&-Au@&XB!5WdN3WoulaW6m*ve;)y&v0uABDpLJXfW zozvUQ+aIy^7Jm|OHdy$p-!L^qZ(<-(V&=^F;`J@>XN)(81>fCzmv+hdi{oQ}F}s~M z@2s;`QLk8s5dBN(n^y^D`gFP#!&MR{iNgCA$y6WsD?AN(W(JF~I<9x)WGaGbXSa)d zccP71xXmg<${9Cl!H_!$nSw4vxF6KVd&_h1d|(h-kp>4fRy$9keGK}5R^C=+-;C{0 z)N=B7x&HuasrT`~bg+$z+7;o@F3YZp*EAy{$L0)YMd}b2D95@^|07sr`rR7BfzpgG z4krHGHFZI~JN|f{-XnoSH2k3&83pNdnjim&x@mA-=&w(ad}M*)mvsW8HFSfsd4+Rd zFxYOSlN%9$Rn_FB;!e6w1#+^{Ur8yb9zX}a$r z_hH#KhAMcU z=zo9@R5x;ba(6)i8jaq7)MGj(rUEt2jX)9Wot5~(>BCc1*=UX%R`{&ZjLzJH27 zEf#gwsL9R|2~sl(310oaySRr&oL0YK+eQZI22(5x(7eDnEV!#A~9M>+{X682c9qzpCr5ED9dA0A?`Y7N(fGzKB3Zu=s{%Br)yjX|M)mVn) zht(Aqn1(hN0GA)#)Jh)N=1~%W#hzU@p*5|1a+szQO^=@#A^!>%Pv@Um$}{g{%f*UP4}zCKJfNYi3=+ zq&jFP0p-};J+>fxhe<#=*E&m4)@@qDk>fqovl*L8zA8HR#`@Jh2JD(bp*G=>>VvMn z98C+&H0XKybaqFkX`+f^BmXt}9?AMyPKiu)A$Yj_pk(~mU!m8m-t!idp$nV4Sj1wS zA~H9}?}oe7FNW1|y9w)?x3ZiSE$_=eX-Y0*ck5yp?`g<9cUf8Tb!$Z2t5)Po7PIi= z3%9GoHT*Qx6JDq1c1M{NFgky|EpDYaR;$xhDffLS74n^uIkhxZJAQNX9LN31NDejz z;n<(v!QrNskL(6@m0EEay+@QxjT=5AOl^%b%``I|KUdww(DWhD zk*`;3$ky5Nb*EQ;gcA$Km;d&Pj_6xD)T@X0aee$4driE}BY(fEWXf}p zsbo|8uJ|V}k^b*5&aT&Vas*#(PXC+oQrnANTkOearl}`APuR2#G>;hiq`m271UFq~ zGrm`eF)?`x`8~RlI(8zggPmOypVf@tvB{g83jiXzo3ZrE#`_9UF|62m5qBuJ{cu7 zp={C0OE#Q3&SKidI_KXo`^QXkaQjT1i~+tT-(da|&UrX%))QjmYPdnd~A_Y*k%jS4AK3EhQ##^3J#8pwV^6WPH}H1TdliymQ84;| z7lRk5bd+lpcJ^qk`l~3<%{Fj@Nl>kIXz;0RMbtF=?XYzHtpHa&4?xwcSD8#}3>R-3 zk7NphfUm!n;tJ4?b*}+Kw||$4u3cyEV1M*Bxj^gT6ZzB>9Mt-`>&4>F+WX$wpnJbu zo_N~kC@x>s<^x4KZz^?k)d57tEV`tlGDW5?`>BY~BzXH9KR)JtKQ^ZKGU#_}W%2C^ z`9FSdyUd14-n8^VZrY^i7T(Ade5m=_AU;qsff*Q`L&&;ltCtm&I|Q|(y<-Bp_r;eqorao8MJ6Ac-OqPMwpXb^X1*L1|aE-T55~yn3}I}$<_>PLa_YJ_b?Xaf3f;AI*tI8`nO|k9N>BWhv24x2 zShMVHNNTf*KhL@^_?V^R7PYbYAf5d&NAWeWJ2x^p?mI<&a*8csiw9S{_{?)_gpH9; zESfbslH=&ptBES6aQbu2H~Om^5&+=jH!VAov+bS~6O~({{4z64tosm=Q8!mu}s&io<#XdjeuzAz}b+O{O znE!pM@{FB}_N(!-XlB0xfdXv_I*Dc6^s2ce+o&qB={Mh#tcyzAg`)CLJ@+qM_7V*& zk{|wd+u67BX0H4&eYJLD(sc0`8^rp@O9!?hkZ+_C^TA5wH=|6!J8Z0j9Cjsy!c`u; zvg9zJYD~d~@nz8c%$~2W^hdrA{CxH5t+@RN;Nm1Z?{mg5^DDIt?r$ZHl~sANt;RO^ zelQqpR2KpcZRM{puRpff75~9;)1JO7KGyrwwNv!{lA<1pb3XGt+REcq_?A(wfjT4{{o2v1ryQ*TK24bLkEtzSJY9;If3@(>W|+v%ZU$OOfhnAS!K+9ctvfY zxJhJ@0dP(39>d@3%mu$b#n=GEUoq9WI^Ab7D;`N*US7dH!Ug)P7crGN~p=C zyg3{QN(cN_Z&R|fb;yoBR)-FZwSND?z~oU=8`{O+Ir?NWuxO5e-%zm{$cEq=5=Vt+ zl4pejtze@#CqLDvl=x;!_#YTJVTMTEc2D@8_c&!4OS&H}8f21?Xp=fD*Kpl$87!@E7yo#@3l6Ze3;$EAQy|uF4Qq1E_aS(b@CxH&! zH|(O|5u3mad8CCJuI_3QT}^}!A%5_OIYP0ebC?7=F<-eDW*rHM>Vzdb4_xaiTL8HgDX#nU`Q`Y*vLa zyY7^<6ijW`@&$gN3U=61ui@!|KM!4;dJ|>z*lUnzZh9?5dGcmu>sWg*Y{>}-KcqSXcRxGW_Jh_+;ZEm zjyShY7aAX&RTj*nrp>Kwx_W=!ADlwQHAAOXY>^v`9L7aVvGE^h2^B@XLLP}$*Yy@5 ztLU`B=Mcyc*2x%cTDR#@H76iv#}hTIGk{P?`$rbQL+Nc983t z5x{M1DC2O2V`>SD-WSIk)Oasty1Rj%zQ|$@S3OCgSy{zPAe<&nuYwP;TovQM;_iJP z=47CuBAeSqz8)I^gQ76Cp5WwNGjHb4L74@noVuY)LS{KAFUCn5fSci)HVGzShPc(W z(FGR2A0=j5TAZ3(9jhMfx7kH(rIsRYoXB&;A#;(uGR1%{MkZ~*wZ+vfNygmgZz?;R zy46z~RW)~($-5^z!jKTR%3N$uJPeV_^#zWc{D8tOe92{&T23;dX4Gq3m}|=okDo;O z__QGHpM9;qpVtMuP(X{H&^T9FV>(8xDE&GZ<4+%dMGQlAkC3bC)qE?}gQ@iy8n;vV z;oFhEj;LEYYR?r_&*;hN?TAbN+UvsbkVdM;ebh#?#iDz!LSpAuyL*I4kkI-@rM?n! z>b4Q09RBC$5}pC1Q&G;{*_YxuFRCNn!24NG+<7KMa&KN~+uu(W8SWpIaf)6bp+CZ~(ldytB9>c%mtss2wC+9UY;gh zZ5Ny*$w|_lHJ+f|ffn%IYXQsr+4|y#;E;zd>aX-m^q;(cz%YG-46+VrtwLZ)!<7U7 zUgu5{PK!vwL=|^mD$SmvlH^SsZ1t3E^nr#tUJcXDczm zmTLG4H?MEAz8gZANWH;o1##z6m%7P4rdDit6 zKHUWFDm}vcRwUM4>;-z^{$zufBl~pkwj5^E-TDWA2u>~();^mT9D0TGi0Frj?+7?; zev{lg*JzXd0UW2IjM*x4mrX*nB3>kgQ+lys{{eJ1rC!Y9i~NVJXh%@t^#1_#qY_t` zHC7D<*`CUFEVWdsH@z0#|-^aq6JS#y>!Z>GkqFl*+wn)bwLRwj$K= zE$n?zBbxo+*Bqrm*UEEiz^4h?_gJ`6?h%!#9@#n8tN(87x7a$il!RQs%gtR?AZhM+ z;&RuU2qD5Qz*-$p_g2QS=iY%{dnf?i@G1?S1p0Jz_Rt*Rz{tiCX0yY3o;{#2rukOi5Pq@?v{9)25 zDA9I(Z;l)t+EX2mq+`f}t5})3`s4O>?}#Dxv;oCkuTS1+O>@f^$;R3Y z8anqMAa=uvG0ghhcf26OsPs2dxqE zj?ZlEQDnx%Pi&XP^^!lSRcE+X;^_Ia6?&#VAV;aNWQ0OB#sG=gYUGlyUR?t1WR-@; z5F}v_``vrBtFg$xX%TrY1oHiRjsG44(e|wjD9&xjNb}Cw%l`n=Vb+k4X>9(J)qQ)< z2ITlZ1E}bq(dC_0yD8*BjRR=@1zF`^&fh69UGjK*T!4^>e766sh5J10eWJqGf*s@9 z$07ER^2+K}P@1pedc%@&p>oT|9S~wJtVP}2}Esy%jXZ8A~I3(ZU# zoR+)C_{$RTtsvbsr9e{16`z+n8CF^b`e*#~S@R^BJZV<0QaRKU=e;tBIJ}ZE_D}y% zY~baAe7LL7vDG^Lr=!~LOK=pQwZYFsf713i2C?E2^uZbzB5Rt|TzDOGe1 zlzt_{iiykFHux!HH*tS#(c`Tp10!!|wcg z&OOry3nsoB!>EsxU))p}vKIV899XkGTLFWtw(2N(L5@JmcqYNWwWl|*i>{dTQ8~g6 zmm2mAEPO`wzq(u&&A@zd-61Go%J>Gx(Xfx1ly7j0|AnktTR}DVbzL-rp2UaMj|%=b z}3MW_BG=ecQ`yJ|rbqCmIyx5F>S^bQ|yJU5P$x^Kigf8t8 z`T`YhJ|mv?QmScb>ASz+)5l?Wp!>iU}-P%p&RK4DWt$#9!r7n0u zL#gI*TX)4Aq5eObD_dC6>Kf}`WR2?T&lAce!a@^%o&*&fy>~}4+6f$`^h^g2Q*Lb% z5PyY(v5RbiR@6c8xC6#ZRyX6?<2BXejQNNj__GqS{p2Zkh??%|Z|Ujy#1;7HiT%m& zFItjIUdGli=wDvW*f(ObM(JH!A92g!f`K2IT<0AW9xH$IjzQkY30J>@PlEWWdv8L}@qzDts|QJmOkdDKZ4o zv_U=P8}3fYv!EGC(T(!=Rxme0g^nqyUd?Ojh9k?#Yw8XJ6>6)@U||ih`9})h>Y37Y z4)8=ODDI=Vuq*7^v7}EqB23QGAM*~Oc9egU)-Z#rUf#kg{09)`D-PXpKi7;!HC^7) znd~gS{iIn1^m((Csvn?}ygKHUM1Y1RU`fcZ2Z)TTeJA-Lo`J5x6u_FUMN_6rJP7Op7 z?cJLACRat`rH7ek`Cg0*sZU_#iVii?wu3FLtg76l_3*zB?Xg1t=4TtMDvfP4;50Yd z>N0GMZp9)|Ta8hqw%ulauxNAXFA{liOmU_G(;U2>unI9ATi4I|MCT-iMF<^+r#Ag- zOHe-uRC5o%KsuYDmh{@bI3T*N&W|}JslCoixO@L%KhwP{7qgySVX*PP`Bs|Uqv-^- z-&nYr_3x=~%~LR2%J-L1#Z8|oIiBCoE32Y&u8n0zMs717IZE0 zyk&k_8k>^wbEddHj*7qz2AwgV=am-E89!8;zrAXrxYN=$46SJ)SPrAb-IX7b($0M( z>vLOETZ4Zb-1p|EJaxDE(Sw0iXNH#Ntxbkpx7pjLt0UJm>esR($;8|(VGK_a*AS?? zduA`*jZU1~sg;8GzhSqVND)g;SHGKWZoT@@)3lL7<*YVz3R~@hBjeLKmsK*oMISM; zit*iOa#i)cGMFVhe!;fUPY%TbOvAjOQqX3*@N9h3MtJAl7#@%sSJQXbO(x;a^C_=G zAIH{Lyers-xSXw1VRAE+4^0_lh_d_kwrb+Kr<2)8x|{ndah9?670~2iw4r||edBvI zQ*EOiUUIzeG~RW<@7YqXhCZs=D91qb4%ig>@&@rs$Dn5K>Io2}I{T&5dXSol& z3&^Z?j^g;|cC=_`_O;xFJ?gpiz^&v*tYR?H5hg{c{T10If-_ysLoAC2#LZr1d?$<(AcP&mvvrQuK>{_5iUn zpjX`MSQ5LrNO-b@$1PrMrmV9y-j0hpeW?eP+)U?%d!86acCwc+@I9$`J*1%ImYf@y z#ryc$!1biDj(f>!3EG@uw{vPciWsFV%WV}O1RbCJWfAK$cq|b8qi{HmUFo%}dhxV8 z!=dD`$ZaL24n^kna}t?dDeA0hI+~eTlK+ydl)i?mP9@wOMy7lO6xT-&=*XBT41D<* zuIezbNjK2|myrEp48@-!i{#=aGn{h$w$K8)$}E=@m~GCDU3nSwz-6xKUnYa%^~~$^ zn(*i&1+KDghTR)%KgNwqV%;1eOQyVv)+=w!SZ0iSL`!%O0P2e%lVXF(mb|fOqUhKu1Od%Tz^`rU-ZF{4*KZql4-rEgS$ZKHt$B1!y1E-nfp%S9FMmy$ULG(c9OFmbw?_ z8F>luc_a#yfhh)z7{&Xt<`?LerAjU?zB~WJ;#{Gb#huE__w4UTXlt?GJ+CRv>gAti z@Xynn%jF@iB;L19Esn84+vxU_K?6m`sEh+`iFd#H3$#0a1#iU&m>hm*>%$E?>H_s& z^(%^62Hbxnf8j#x=04X%CWvsz^;|zJr)zNFT{LrE#pNeY7GGQgg^QvnBrjXt7K!3V zdJ~eP{w6mjeiravi+-&1dRy4qWMSiabflo~!K7dE!G|#hRTC-OXL5r2x#+tszxh_{ zz2A)3sBG$`OSE?~h~bsx2ml-dbDE5Q!jrQMcEw+BqPi@VJmxt>6-jNqWTUk?xAsy*XK1(oS8;_0+N-guf}-n=`=j0=jACiT#9q>Udtj1%sE^?%pB zFIb006&g>hVC=&Nc>YC7u(Bx}EdYzYEyt)b-nn%CV$w~<$gesI^oz!eq06`Z_y}W< z>U3}Evj;WxxoJro7Oq~nJp=Q$mAQK-P=u0Ue$kJBBwbAKbzFPj+tPQ zh<>@Esd_gz2Vr{0vk5+J7sZf{STR+t0cBjwpg|s&o66po@>}pYZYt zy?2X^Pk`HNl|vSGt2FvacfG+>N*#<~S9LXBhvihe$>@Zh8o9RB(DB z$+oN2EjtwSmW3?1MMA+U)xbC(%Be=%LTsbs{ww9#Qj0WZZKi1+hliJ!rv$xlV zuSkMsOQGL}TVKEO8DuqmuC8>|~X3>0g!p!h9(P@|Ep7&=~(ZW7PS93n^?`~{>FSoDS0Io>`QY`fTKH!bK z<8WT)g?$_7uGjC(RFO#C!X=NGd&bV{=}5@?m`?pqp8#-KfZ7j0UCn#9sO4zg?{GW% zq_lxN2Xl$(&NKJJd+>olkU9d0Tx|yiRbN0YU3v1E>>l7slb$k5e2Tj}y0@J4oZzmB;eRjJNN+BVq zl@7uo5MS;n@53{55UPdR7}7@Li~7E}}yPOC%|e!-=`5--bOTh@;_IH|0M-h-{ z0*dz^Mta*}<2rZy^Px`1BD6bHFPU8$Bm@P|7$m;DaE@$zxs3#(j0bf@p_{RDc<{|? zT+Y;=YMVdy*$hNOD1YJ+ece5POfzrP=*C^KM;!|h$)u8%`1n3(hE#7L zg=`nZ=SU)}__r8d@vw|ktiCh!=sZN)^3T!2Z^23Whr^>0WXd#Do!$!Phry?&#_I|0 z%8xWEE6hy;bG$^QFZM&vVZsK1Gph51h}s>n`d89cPLi9ywc}1U9ivPy>|&BkDx&*C zUP&unzQ+vWjW@$2x@d|`g6%wNIBx8!qMPXj#2y+-B}3(GKBOiT>ajWKgUSXTlBV#! zYm2O}?)cc}DsW{v#dc}Dx6{;v!dra0@Og;pV5ugQzd-vjfFcSV#^o(YzTSo=8X{0s zSaU;jkdV(~eL}tAR=J7N`lI`46e@)>q3PM9ss0=Z%>xA!r4|KcW+K+~$scfNbT14` zqPzE$F&0ROe>*>XP8RvdOyds9FwSr_{ z5~gk&x<*+qPVj+m`oFJMPP_f>2qvrJdw4ES1wV&xSk3vtpB7ZnvfSBlFGMD(t;W51 zj(J@Q*E)sIY(a5vimV*rVL?;*_(OMRN=+6y#J+rh3nEE8D{paYPIZW)CVE^a3eX&k++^@OT^&qGZr+}yMFd9Dz}uX2o^`GX=hDg8;m?a$$+ zKNaSD_V}!uFPl1HyqPq}V4ujB5aE3JuEd2%rt$Agzh3Ivp{72lo%X=8=rDwmzC2q}vMna$Z$9NQT(x@3^O?<6J_8OXpDun{AB6=%GK{23`kwG$A z&evQW+8`2rXTlj+F^R)zS0drvQWp}OmbH+w0l5hB1?-!)*$X4s7loX7S9R9>xuBZRku$yRY?Ik(T+%+iOsG~du^lOar#I2bbzwFEHHyT)q2HI!w z=Zs4Eyzl6P%s=WMOn0Sv!MP&e)QKQ%>XcsP;IBN+=3u?@ufpSE9it=i;}|{K>3ey7 zNZCg?5WYx%+~73jAcNF-4bP8;r^}5?OMvlS8FYT8|Ol~JuMT3>BEj@l0NYLj7G)`g>S=Xf)vjG-V^Ij zcErNG8c-@KWMq#|0+hVaAo%3#B1W>LGRZ47v{&Hlfr66zWmA!uPwN(kM_FC^IUiw< ztbpbh?bWOYo^a~K%HK!iUHl9I%M^G{u5i!h7PEh3N(Xd!U;W%w<(%M@p`5Ad-gcy3 zMk7&+ND++%T(z6Xe{Ch4R46i_)2!5GO2Szj!_M^Axfw_ENuja6m zQq9lNUHxbKiazP$&Q_XlA{53V9PYbEBSi9}q&QiUnOuv~P7=XZpRX9@-vitkXuHK% zCx6fC+790|leVRYrIi7@ae9Tz%jYRRAM4XUy2{_w_Kst}Yjcze@Dh|Pxlr`OCULL5 z>0K?9(}Ed#vybb%%R_%5VBpZ*#jFd$L}G8RToG~=ole=gOYejwkPzKfh+)LoRPM_a z9bRwTh+F(!`-`=-x_=RcWg0^ieG+C~umNGQy)jXqx)hoj`080oj^ZmDfw(QkOc9Z_4M}yP5YQh#&nc)fF z=|F*p?Zs|uMk<8%=7`482#hhQaz_}0ff2(;scQSa@b6SwEbgrLbGYMz#mu&PDrjR? z4n0qVLE~EDp_9|ObXd*Y*{aICe!C6ETwg{8hxsr8M<9}pu`bc3+n*BWw5Pu$OA5v@Z9woF5AG2EXS2Mx4#6DySp3e+r1CL=Yf^?F|RDa z1nF~JmRhFQZm@n5e=)hnrwFG94$K*3E$0yDuam=A>||v{Tj`E+T+>}E+YaDlsdlk; zg4!2>IxiAxa$2eBh0V!_;Y{=U9jo9Yn$EV7dkBBxWBlp+gzoj5&9a<$|Lh+HgBoc3 z`)3}$nZ@J0U=V0XY#h{VlhpYrcZb7z4PHX;xNn1Yz?}sCvk6+~JTbWi-{4@FOV$r= zow=r~Z|F_zx_C>%Vwg^KF&rqL#RP|rQZ5gQ+Xk5u<$dRHv{ZT$B{UM|`yg?iY8+n& z76dzDk*ist$a+WoY#Z=r7we>h*Kqq9I90&Bcd^VW8(NKURghaL*ch3nm#-X`cC(e2 zup<;00WA8N8-9-<+uzL9w2fqi?xLm!o71HAV*mauH4pkqsPTOhas!cO@3(p?{NYeB z7RUyWGG)+=99l}umD$RELBESrpG(sMgTP&x9cSCu=R4zvG6 zL1S=VqVh~4k#=#li3~Y;3qRh6_XdMPYWRC7Xg5mrbf7=Tu@09F{}<6DJ1iu7)s}(^ z{&Fhgu-jV~+&n=Jl+y_6y?V_abc$`6ZI>$YF~#p}^8K;$V=;TxaZbcD&+d&+g7ugc=fuMN-gz==8Xw{I;B<9(z{cmH z_02ZVrUPeBuRzL==vrwo`NiFGv61`4`XH|*eM?$SYh~Q3=ZvT4+yXp*@i@_JP*Q20 zkR(1YP}znJG0!4oPjT-$DHUMcfC?u3%ZWyLdDf#v9@TTUli8l+WoH;M@h{DoW;J^q zO0P(3^5pJZ;(zU@eyPC$5_&1Sh_8p3CTno)?%~NZQ5^!T8qOc!ZcnziDgsH{IeR6} zZfi_IbR1^rR<3&7cSQBT0594zX%=r-Jqm#sTs4}*4MaYRQF*3GRlp#dKGaz1mWy38 z*egf{#Emosc-~UaWxn`v_+jBWz$FEvm!B&4eugTqu2dT4uu@;<&XTn-S`f#63iCd? zDuj7Ha|OG+dNt4n+vleaPkLotv-u7ZsE!ZsgPb90YkPR>zE++9l`rRal}xDS**xEF3@*$XHTY^) zOefh!C2-_goP4;xViVbr$@$byWWCHY@}d4Szku>C|A!gkVN3B2(80iF4~a;;wrufB=(@$MP@Mh_jnFmRZM3PU;-jCZqV?8zgvr`vfe>j)r{cy>$`4yLUW zKmB=1H)#!mwPvIpCnS9TrX$j-I!B%f5ap}E^#n8>Y#zEv^v}}(S`OA?y8&%2I&WAN-F&mjl)+|O|s&vy`+*?DG8DBuRl&#n9QsW)v!os=DI(**BUwk5wYTlr(Le#tz z>QzN<8aW~5Nj2#q{X+2|>>Q~Yg31_h`?G1$?XOP1glwu*AQDH3tOICGd~kc*ejFjU z2H)-`yh0y`i_UK0=cH!Zn`Aowo{XZ=AtBT^A>aT)0@g}JAh{n)wjgS}C| zxc?6{ntsoQZJUjccZU84xQ;yQwXC6EUSzg@Zc2UNvkm#)b(kOANt)ZLw{6@`{Acrr zfv6i}Qgtz1qBuDbD=hyj&tr=7bR>j|CmOrMV;3l`)K-n<9%$bD=fif~5#`y+@tn&c zCW`;GAr9xWqT=NhYwm9el2T3?H{d3iu6bR`_E&vBG$Mwik|@rjJD^>M(FgMy1#%nq z4?l!JuZq_#gYD$X9VfROQHvU8N*`DN4qLH6V`Cem11AN0Ur1$T1;)DRkI@{SCQN=G zubvOq__eLM1stfv;r%swd&7?{(q*>%Luzd2XGM}lN{YA?dySQx#jgYn^`ZIjXqnwt znL=yu_*GP~cwsoP7gYnYXuCuT-Y9q`#?lfi| zoR|5m0t5Hl6n%|M?uaP|`SU4)@2J0mm z9iy>PgtIIkl}nCjEIpz8Y~jHV#rX1Dvs{7`X5!E1=L-9+9+jdc^4=b5eM3}$N6_gHhk0q0P}qJD*3 zdx~kg^25T`wDoMJ$@ZI)P7+;U_te6}^kEJO|5R9*WyffgipQND;AV(^8u*_9%5t~r z9cTB{4T+WUe$`1vtMOgAfe)-o`KLCD)UDHculbUig|tGnP;(&ktrx@bm400opEb*v zEL>8J6$)}??Pr$l1& z-^H4-t@!mY*wx0Gu%Wd@xJ81r?;I^G@QH=GpV?_l5}?BP3tIRS;8H6!d>#)?x&eWd z&0|~EcOuYsjf}aTX57VA@;w^QRPcLU=o^Brxst^XWFvg%@F0zPN-18mcNRn^VW?Zz z9~o&(O#mBPk;4fH>Yd>H7yn{*ZU)D5idk0+O+HXQc8u~2TXfe-x@NFXlXCp`A0TZ9 zy#vM#?9hBj#<+0%ImbVZ-<>?sJF;eLZS0Ow{yhF$bGQv%hVO;}UF4_eyQ%*o-tduz zZ?7({P~iFwO;qrW=HP0FCheEFYEG)e(_PZdWT+6O9q%|GF-q0g#{=7@p}CXuInhp+ zJ>L@d^@?|~<$+)T0ntvLD=S_!Oe=KBZFMs#0m(r9l-k>{AM^10!eGZWnmZ0kQFro! zO}oytWJA371%NpUqE7$yoK~?ssU?&KL zm@Rsq&3U)R)SYrh`0k@B=kbvihqW@+2`6Y&*KH@^>7uRQr0sAbjUR7Bm<>=K}Q4+a`9);izqdlogw;qEpOBPkHX@$`Jh^^P>gn`td6V!@>j zW+sxKu9SI|rdxe_suRiJ!l3Dt$2qumZK~K;v$c zl-vFJuJJAh?xutqhBzrB_RrtjX44)Lj7QTYQRwfn_aOkxb!%bWdj9%iH0>(lczb>p+W)T{+h z+h-{DIgSdg$_aHlU?K^8uuQ&hJxl!n^27F{-Q&h&_UOm6NTyRUhL5O`x%D%$FhsRW(6XS@)`7k;1v8*R)-IdfE0O55MoZaqy&__{`Y$W&`URfIDccCmt zv8_ym&$YAdj?%$ZE|{c15DtBk5gm~DeiG6JtQ=|W*Bf3xF^27suH^R4<{yhvBkG`2 zhJ#Zu;W=Uv6~X{-OyIt<^-%>1^#v&EgX9(RZk=jb>b4C}e%ZDCyYL=zWS{PEh~%^@ zu|GDVpX8K;euzK#va9}j3oq<>g=YjuydzcL86`t|QTYK{ zUUNsY_3(P?I9~P-f&2u&NTO=-{|p?2p6{0H3ZN>(c7T@^|9Cxcb!xT&`!6MG27jDY zq)qqs#B7KEnzLhE8zCMK@NoB!BR@bXS7c4kP@|0nu5#BKoD7*Q)0c2TNCjh&8to~*0dXg{{nmxYt zjYXd)RLV63$s^lkoZ_#%5tj9p`~ui?(yO7a*V2N2_o}^ID}namKfqnbabQC?bqCje zgFF!fM5~Z$g8rq4uqFMmZw?#IrbVG^N4zhJa$QTm27hWsON*fi_moVo45u#zhrKF7 zy)nqI(%!OC|kHu-v<_Ca6jcz+{&oRP~d5=FJewBb;s~05XKL$ z{<-O`mZ=_9aQl4R)EDGDk>JqUVxY`Tw5S>gA^)OkMb`xv1qSS-@5z<@VVQan<0O5z zJeCnKCdw6)=;#^pU}8@Jey`?WAK4F5ai41gX&vUu>T#@BfbYcb|~pom8Rn-5xkjkNWgR@H5f;*9Y-XsR@_?O76i${V+? z9$PlK86q5l7wjK!P)oD50nXp{d((yR|L%fa<1(2SIP>%Y`8ET!uilFcyUp%=TRfJx zQiAX;d2M}OQY8d7uSuY!VNciVdi@C>G}@MenepMv;e&NJ@YmicNCFb`xhs~<=L6bm z{`yElV{>TxfPp!_O$KC(`{AMaa@wmxkK_Aw9_K%0QNLJ61u?dbl1Y6I6$4sbTV%$e zOV8gvmt}Q{o>8;ltY!TzV&ZNP47R#A#5eF9FYwZ&#f6oxUA4L@>VEotyBdyN1;bDB z{gb+xOy?O~6cG}QJ&2wshjLSTHtZr#CRTHjFUSooaf!A<#0T(6cNm}F;&bhJd`{cP zLDF7BPnbt6;nBO?M_=7|nfeMQ?pf8YzKh%Bc71Y}W&g>ee!%N{6Pm9}i)FNH2)CHU zI}SP(`Y){to1CxEJ_`D&SIqavrWw3WB46orT6<6}nefy!h#nUu&ypTi>85ZWPPjV6 zcyfHfm?|Ts;uVX>1%FVVZRZ0<66WlU%nsWPt7jHu+V2NRrL(Qg{dQ=vzs39ZaZLI5 zs=wT=vafu*vdJk_KijJ$bc5qYNCAd<@F6uX_$>twx; zY7#Cu`dH3NKjXeUw@#}e!>qMt;q}{RJy$(&v&4{R{;0jPqVHKFqiz{r6gH#E27Y`} zJH6ZQ{3UJj7U_ygW4=Fe1O=jIwB^wIG}Tg<&pPpQ0FtnIVZ1$@LfInRt=3bylO`3v zR?Ro|)Z4U5-RK++o=>66YXUK_QKIG|D_o z{vF^_SSE4(`MGoW#=8o)VWpdUQtUnF!#;UE!9i{cer>oqAMzi-eOuLNg)F!e=!a^O{dG#e zN3kBO%#(V?BjIW7)&V*1PwD-O_5>{w|1g9W6Wy+Kc@x#V#`7SslQYHt^B)$}HW8$}HXd}fjBFV{LmhW`zzk(r-&ezVS< zBgapQAWUEAD~0)nus|GULPSLxkT{za2f0EY5O%LzB%`eGllQT?<)qU7J^ESTal=S{ z<_<=1gC3tnB)82|IzR6Sh4muO4r%LWHPd%3DM> zfXY9UKj$c6pVQ((J+BdtUSEsAhT%ra%R6n1+dm9#(FG_#Y)?cgqzN<~VN=%)drOvU zI3or+{-RgX=jdQjUo!MgMDtN1vAOl8J(O1YWUj$mHu@b~HV;IJNI5I6TYQkT{Rp|y zZ0E$~<9KbRF9M39YSP2V&q?)3PzGhy#Jz^0{{aR;`M!Hw%3W|RkKFFAx9zMPp3B|0 zx*CgpMNTv4v?pyDqpDtQTKx}Q&9y?-z@@fe7yt`HKvkU1sl$x$HN+n|zvlC?Q)AwK z%X^P+(p2TReqXfrw@SD-Hyb_5@3yOvpH9=Zl4&$F#O_(Nr|Cp)G?YDB?>s@+t^NJa zM~v9=JdOK;miXO<<9Tpu@+uo!dskS6YDRU&a?+EZm8is<-?2W~{^vWdf7@KIWcw}d z9{sKIn;q{JzTS4`{{W2G+`F{gS=|YyI@o?xIkSw9B8)glDb$;exUx<>f>4c z&$S-LPFQwdYL0Tk?D?x*yTn-Lwx~f}w<~97WN)p9$(1(&fR32cdoIv)Z6{i!^)mHc zLX55wpG}d9wjPAlEta=`)dRA?SlvCKf;qDl#gni1V4^v-1-2VV>a!l4cQ?vWuy0By=DsUEEhy+q;ARnj$PYJ;;BY@*L7F1``Ay7dx_(+e-2m%ah7yuZ-5PSg! zz8Iy7&u9w*f~IFU$~<6`5z`5_#t@&?rc4+HAjKpRrdKmKb1q)60fm?y29pM|qGw6) zY5ee$hagb5NvV?)kre5a2^nG8%a9N$S@M{IR4@}Jf`rgka7u)@h%q255E%aeSBRim zfMd#k6M}dxBm!L~jLqfpz@!j5pN!lfn67zF7=>unI*6h8gCoq%6_9em z0H-2EPLQ+o>6(!vuUzoJIA~y?Pyrx8InYTY)A7O(Vq`2zz?n7hsmf$i{V;%2<%n1^ zOwyA;PJUYcI1tJih1F6k@sAG-02s?G>Onc047x;D00$KUBDoqs{{WT(hjfxb0A*a@ z80#Ml11LyiL6KOA3z3p4Cjf^d&8R6cBWB3-S@dZ@OO8;e$D-x`w!fkzi)fD z+%lJG{{RAC zBYc;5N#SbW447AL_kXm z+8y7x*^7H!?$494belJj1`J2YbSm@1;V(Q))TY&xSFrRG+0SMBFW4^2UcmPH$0N7x z>pa&p&#k^!k=$~d#pL!@pkco>sqDD80JM-N(09t?l-^KXy9<+s}JAYc{na?l)UecY)`wHm@nVFKH}P5_34KDO}62%V(CC zwNur&{EtV*QAQsh9f9OTEC#Q8uZ4M0%T;bmEP5ohL0 zy%sISk&zHJR2Z&ihoJ;wpK)`TEL*EG8W55TdCBsTmzqPmS7h`TcZrSf$hOR%kc3XRZjn5T-mfHGzjqeA&w#6@O?w7G}RElD^ z60*!_MN?0iJsHw{x7=3u>7|OT%V3Mv!s!;+exRae(;wrH5xunb?TLnOT;XVJZN1xf zQB<%cfP+|)21oi&!{d&2keY`a0NmLjivcwyw2pvNFB6RIsZFNHOr!%K4!s~waY+WX z#JPd2WsREFNIFcF@Dwy8XYlKU5CM{81(8wt4CGRW2N8`j)2B?q>+u~Y^PD1DoN(ea zGCpYmfQ6=#1eu`ghp0pm!v_zmIRFhXVtS61ABGt|I+2=nY9dpt$c|rx9d|)s~C)+ehV%Ei2Wm~nZ(~fESrm9%LIa^Ji5z4 z6(q$R0zU(cN?6HdzhEp7SZb2m;J}H}z}91+t~N?ki!fQYJ79G{1QTu>POTsUPN<}q zt}?gP2qFsw{yd#UkjYa;X`IZ>0W<{sF*=QRnC|0cq!AN3Odf<$R%l}~Yn^@=&ed+Q z-V0eQJI$k8QV^X!Raqsx(HbF_OjZSB8MWIp`2wuV;8`~o*jh1aa14i}hSW(4Bs+N_ zTC`Hc&7(8$oCMl2J)|eNS5}Ztwjo@Qu(9VRo>Hgt7!sB)SIx{@?%Z%yOolKNtripl zH3%h%0F{r10@{ZI7cZ$g78O9&?BD`JNhZ34hR?udfV%DTRzdy3OEJ?d#tCC0o@{cGn9DDmAZ_gD`0&g-m{v&}TKK z0hg-=WUDw}LV`w;JkoSCDUlEp6sX9UDJYrNLz;Ba84ZvWTLewVg@AQ=nxHh!f0W|Z32iq#3+C7W z%BHWb9BKqG(rGo-UW4UkAe8*qN!)z9vQApY*+u`sf0Zqt1vNGIcu8@T@f<+xu${LYs< zF&|N=1lwDOQH$Em%Z15s&2TXlu9uv?7}u3m@}ntj%hicy(_C_NhX_|#LNzorD`=r4 z=RGl5Rc=UcRJAjHI?xcxjg;!tMHW2BzxuQ5OlegZ;%5!1Gd-5nx2D?JO0vlcD$nL% z!Zi^BfOz9nl*p|46fdaHHdfJei%P;Z7$6Wju|PVp>DL!$FB}I(+Rmm$V%VW7ti(tn zl!^ch!JNcmlg>4Qn=&1$pDY12Q58@~f<(j+e}*(&qTpV3*2`&N41*IBAdY}$)138; z1nKiGme2(vOI1mkECI-XAO-16QmSkvRyEMOSy;E~2#7T_XgNviBjEfwYYxH zw|>U|0G&KPZQ8%PvCH>X{{Ue&c=Uz3xwQa-25a`P}x^n{Q?R0A;w* zrR*|#R?FKY+qmYepb*s)o;2Cn`-`7MhriVFFR@2AdXc?^`;YEFXEzo&ZclN)?oV#_ z8;7%dhu&QEH~qSot}7e-WyT@jZ)hW2(-Zi|yyc@!b2Hdz{V6_|Wgab3LW@ z$L@2qc0I|$ZuVEX2HA_;7k2Ri({F8%u)KFB78>=dP9d#1)ojdT^S^fcAEx&f%qZLH z62+re-yAzn)jf;+i|T&V>MMP_J9JJtsN0Nd2anzR?e}zhXWX0K-|mYKV&ZOh17)~j za^BB>w6I~{XRg}FgAMUD$IHIG?cY-L4yN5NTTd?wEgW$^_V%B={UhET6*`YiwSM}d z=A`8~&l3o}YiqeIR@hGP_Rx*FoT$kwC`kBG|}R%P1H92XOw)wB9ia|qs^%KgFjXR^HYtD9Sw`JU3g8M$88 zy?CN6yO#jDxZ|D6Ev?XMyvTU3jz38DhrIgVLcMnP8^1*2Q*Tb=^6!2B02q2lygEy| zD(w22t}c{I?}O4l=k0H0KJ|USUFOSiV$V6STc?lZYzsSn;^4UzwovW)8)UWH+-|n> zBT6vyDV%+G>|cK0rsVYxPu%C}EfZP%p!f^l{{Y6_SEg^@(|ucSmdUscIe)=xo(Mv~juyg|U*rD|;yO6r<>yj>7)N%xj#c?~k8(Xz|Tj^S_R6VWT%EQ~V zIF;IZ8}`HZugiN~w&S};-0S%eNF!W6=NlO-L!ye zoPHPYU*pQ}JN3Ss3v*XgzoGh0<4`%JVidW2}7~?`=8uUU;=-n+hJfe{jaO$>`Gsw$6{KUwZdU2l*=rHr{{W$DSgRy#-G#*7 zZEs)OZnn%WTisfH7pz>i(r#I}gcb8N04RPq_CIg>uT|*XWj$BZH*dGqS1G2}ov?V{ zRrH>d)w*}mb+uO8YBW=y6R3T>_g8Dm**&%1Ld)+iI_-8`h1+VI9#Y-K3O3t-@|HJh zq{$*2d~y8<{vQ5)^#1^G?bFcxe*XY()oaUDcH*~u6uu|RKK=eO>U|e--G8P|=SMn5 zpXhV#eT_R__+wH~)6+K4~)?u#Veo4=Z+h6fa^j-4mp4^Vv6Y7~7~J}WVmvW!I0^Fd^Dn^7`y0M{pW9yH+4nbT z?wf4t$NlGwxaa+|nA=`pF4)}IRu*kuIg6kcEgdlr%(+^WOiQeoZ+5LpO{x8lIQ{JVYwmw&x7*%VjoR`8_>4*blbk)+hy{YFfsDay}yt8uW#<(tLdBE=v$QwPs4}9KH>g5 z{#f+?0CV*9=>0~^Yt&pUy<@Y)=Bu~u-bA)7wZBtCwcSghQAU(Hyo{ln$^fjH$L3VB zvvi1SwEeSfS~=?vACuxG-3r$&Nl^M$*k&5;9+sNmkil4zCZchxcBhwv`I>F+-*3#+ zt=!dwPAgI_gz#N0RWSuf3zzA8kG8_Q&o^f!%gTcND+~s>$mwQ(WNjA;?HscVtlTeYQ21SXS@%4AH{{WD7{YR5?rQG{{Wm?BHOJ6*n z1b-uc7<#X@daHEZcH7+a>pv~|e64t%eErG&p!2@eT-2Jm&Ek0=@AsVXYPvrf(i6m2CxrIz&x$f~-DHG*TyPmu)I zNXFAVRDmJaD!jvagmupl>g=%-@%ezk0IWeZA|#nnK4S;W!a8FsRn@}~!79d;Dq|l*EN@#zkut6D zCm%O|F8=@qdVjj>e_Zr6O`lk;TXjpzemP5v?cjdB>_6n5yU_Qm(DnAV=S1{v{W;S- z20fql^8Ww{vToq+ZHijwueHm3e%X$@++NANvv`Uw?{KmWX4+G!#}DvF@U{J?YkQmA zYL@k_$*$hqV{VDW&l@|CzW9mUKN6`QTjv~nGFy%5sKUTWSXd18)2%V0U3C-Qe!X=<%`oiN;$vY z{{Xk%-}hTc!SE=BfiAh{oG}MzHG!?e4Xvw7=$H+b;(IId2~xVD)Xou4CROK7{azCczNMM4uInCwwyHOf3* z{@dGeWrH1dxwtHvL!#;rZO5j;Kv|1ojRqztbIT2;o^WF=RwD?NvEA}~R_klX@VooG zXD_w9o2{24vp${c8dx7j@;CkKT18O#NW`@&I1>J(_@0M*8TTc{cgEayC%Ip>+Hl%yq>eJhusX`+zCmtFa ztKZMF+naygcXzb5p7zS}+}?8ix9X!Mt9FZDH~3SekQ_`|kUyp|_*cHajJCSPx$2&W zRbH{?+i604aD9LLSN!0qx3}oN=X14%UCGmePdXlZZfqhp;99kCZY(3)ySKPmZ;i*9 z882C2x-KCRq>TO*$IjhG&r#BKR_S`m+MPvpO+N$by`9aDt7g4VNb7C8!%aC*{$;f- zx{OP;+ zb^R{qP1e%8n;VsBrl$<_kJwMUdtAlNGqF9-xR!Yvn|nJQhjZ>J$MWPd*t2Jo1O(gi zHv#j%{kP1-R8_WUU>qf6v7Cm&+_Gx;ZT zrsV0m%X4&&613^_;(S%^{{UoDt9IV$>&ewuRS_@4wH`@s_|8XVxa7F5V{N(OIgO6t z_WR9-;?r2(TD+{t))w21Phl?GFv5JboP8nDdY4Vs>{EMY$@6$|@IMRdIu5I$-?vZH zRjaS-z_wck&D)z>_bqyg0wI#&orE7tHXt$clU%XnV{XY^Cmc>B?ew&z4xJ%Iz3{lj zu3CTGu9jsME-l|u!CyLFvQ#kB1xS!_j`vTs)os1IrERyt{C{Izt;=m)TCOaQMgG~o z_4z)`+-y4^-HqP!o9xZb;@;DS?>)(V&nLmVluH{vMNqNaaaNQ-yk*xjIpgr3e197* zTY873RV&MGk@&&-ueH7G_IY|vy3W;~srG#T0MzyGjO2LkYh$zJ_=0_i5=yW?7@#$otW%~Q zqbfm`6V`-5tphDOkH&BSGG(BVA4r&r=K#-`VTf1)w5ZHTBC#~<7yud>)H3*uObO~f zAIks~%4wv9paEDI$_)sLXM`}sP!p>-rDSzE5fg?YzNzz)Wcg|YND~u52l!zO610Vd zljbv0Is_)2e~u0^1|Qy?joUup@H@WS?(QbfDaLN?k)q(!x!bt_4bIbY0Kc@qZ!pS1 z2O4eeUv14<7Nu;nspW^e{=#<;v)irbD|6N7yAJi$wa4=IQSa}#p>d2@=Mhlo(##ca z1LhJ;W3smAeAU)8I5&EGZTX|hY6iTIcEyWn3~lOd2U)#khLpK&kdP=dT)N`UUnmP{ z9dG{SEEQ)7b0O*`mOyT4pEJ+ro)Z=3B;S6^d;b8=`&)H5&Rw_s_hkmMm$sM1-QOX> zqukIgY@Jw}yK6Q`KAxRML7E(Axwl&>(V*GgdoEU!q3S1XcQ*&!+(z4*?d|=(Lyp~6 z)$|1EYHCZ&q=9t}2n2v}!sfQ+Y8)P4YkHg6u7*PT3jm~9GTK2 z!TM=W0Uk8KAmRbdAk0Vt4__0P&)2ra(0Xn8_hkNK>A#fgskH zi@2yVp@OfLg1tj&>oN62)2=Uw!UM`qk(gph6DJ}jk_IByRcKNmoj~fXY7Gg3N0j(= z=@@F<%6q^Uke*!LI#RSc0LwfvgHsBp%@7S_5t$<(3`J{+e9JTC7D~1?LlYztVrfHC zO>6uxuej^wU4Yo;nI+^59QhB`^qST?9I)PoUG8Di;KbJz%s(6lVl)g_OHk{d=*N`6?}VCd9! zWC1WTG%y&*H75~ks)m9QkRl{%6arQx_`wl@+gQv2@g(-%^AOqvx{A!70BnJ#mCGz) z4}sMYkW#|1pdh!G)PPyQBu!3`K^-Ru2N)6kyalA6Lz1I$#0osiBJ&5EKiV zA6XzM0Ze&NjDgArTsVzMZKgqc_g&i6wb!UAQ*DFfC(K5Y1brfF^1z_ATQx8?*4@|# z)DcR+0ETG>Nd`n5zCJiK@ewM;fLmXtEuc{gsfEL#q$-k3kA`Q%1ID0Cw`>}e)vT~q z84oe?06+_%v=VC=mzYWM0_7|%f)RmlC<>t#+K@DpaFSs4jK(OJ*tI8%cN~N_2n+=x z6e0=`(ewt(t{iZXQyJ89(pwF$`)1$(`J^K02hE_9I)TjB4J7r>A zE3a|O?i2S0)}R{Yt&Ns@y=X~Lasw=2_iU`|D9@QCI6B+2{@4A!;B9R0a)Wi;{FS1& zE*?VTZTRGN)2$C5YeL+#ATsMEvgwF>?X?;}*5)}WK#_1_XvOU}0HSaj3Lo8^*eAE`q|ocxh#{MH#CEO+0YbQgLkt)*w512GqsCP}L-| zevwK7d`2nTmGZ3tS^`VKn&{GKz=Lr>fGG+jd3ubAz>`^@D;)WSWm=U|7!YJoHmVOX zHO~=l?FVOW1pu0ZK(_jP(BDiDJk{&)&kGPt`Ct|yh}5b<^O$G?8bh(9Ol5*v!8!a& zRt0~zjWZoif5y?sn6DnSNxj;oLpks}j6XznI0Y?{ZsIU#e9v&Xq>wzivg-CP0u zwy#}eTN;dpXtoJ~6~|vsRSwDm*nQ?On}khF#mH8Xtzm7*kouxL!2EH$QbI{+YQKGb z!@cciv;N`t_R+QSJXdY*_T9N)65EbPyL*HV7q)oaqNq0;ce>_xcGB3+PA1k>Sxvc1 z9rzyA6}RhEtj}~Tv#EaDy{%7Vy@mFx+TX8{?T*#j-R=$37AJSzeZg|)aCbiP>0q}T zaetZQu7X;iEMl&be5uSLtktaTTvfS_&f|2mY1CdDNFtzR{{Tl(6Y;JkE(nB@&~XZo zHT41lk^ocmg_;9Olb!+hghKhF&F0l?DXmRR7}QwhfB?C1g-Ox^fdOb~1W1A9C$0nn zD;+?v@|CL*0I2{4Ql@Kz^&4)=9)Nn_F)~z=AW}gzTAF9m!wv-6X=6eE08z7`f(1#^ z2(Oq4%wj~M%2rWJbcO`Mn#@SffP6t15)*LOU`u&gg@|270iP^n4s(I_GPD(My|}q* z;j^W`_}j9?WIzOJCVJ(HmP4wt`0X-HpLzEt#=+ZLka1E?B?n zTXbxogMrz+GF@v`%g4222RnPS_Qm#z@9nGB{pb5)_NThHTY%`?_Z{1tF4*oBYou$s zysvMsAG#N2ptBew8QW)O?rfC)W}AEa+ferG`8yt;f#(l-e}n%3w>IQ2_ZQm_+(*9u z0Bn80ZhG53Cuz@aIlj=_?m_hu-N&?QO2@c74VB zt9x~0uFdVq48K9f7QXLK9O++fa`>;7zln8SKT*5MwRgAFStOOdnVv8D9Zl>{yIqm@ zIqd%c0q+lFTDh^=@|SOMyw`5>Pq)9wcF%F~?ti(EZ@W8hxb<54?Tx_!kD_g`VtnQl=<=-rCToSJxfkeb zPHWp9D|mNS*KK7ivwF7G?2@YB>yk}c>rO_o*A$u;6HRv?+t$O9Tl2@;^vPDaX{?7v z^%b8<7Z*!2=_f@%l5@m5*4kjcWZ|rSCnxvs*w0~iE8e-h?5;ZP>)xfoxZCW;&vvRL zr>D5ui$0y=^b)dq%}yun?Z+*W{^eEiZhTH_z5YHpy_WUUjNW&rAGJ48FLB#0YT{WY z;{+CF>Zvx!=mS)cF^lQyuB%qzt$WIvwygD9e}C?JclN3F>D#`}?B8R;_WsX~wYssk zy}I7dufF6i1|sO*-?*N>;e*R5EEQWJjjOd?wf_KdJGso~k8$YN4lM1$Tx*vFjksHu zs~Q&5D2rfFJLwuhtYXz+s~BA;M^}V-b@u-N@2>v<>_6^<-*0QZ%-h|6Y<=$U4cEFI zqumhp_Ez~l<<=Kbx0jS{PT>;yw|D|Vy`Tk2$B(7n*8TRaFx;p9hh@2U`c1y7npV7z zwKe^9liFU&`FCJf1$bgzS@S z-Wv{Uisfys&O4Lix5~?@TWh1+4t^Mx*8*)wQnWG6$7=S@_nX>xF88;%P2X|sZKb`BJAaPaU*+~Tl0~)JZ|>V| z&4p0LG?4(9%;MZS^CjjQy_HgbNqcc5u4g|6l4hm?z(3Cs97vsGMm9?WNCp5PnPsdJ zLFs^X=C9&IXGUhS8_gt^G%Yy_oihUzYi7T&)yuk81U_)AC#6b{fE{qsOjfexjLG14 z`GxmmdOLp4x7-!-{Fia=c)rEsw&=v%PD8kNHotV%v_7KN_LlUT0S%6Rqmk9^*|gd; z*mkXz)N-XU$6P;=(O+);hqCtD+aAO0-LwmRx!Zhi66~oSt=kq=_g72+OWfVubMX~9 zVzz3Q)oRud?R4!Emgna3Kkc@`J=*^OAr^OH*57m5Uuizm-{sjudZ};SKXps-J8N2m z*-hUO!|mSSQ|4WLCkxANs@DGi_jKj%n?MA@HsaZ`PZqLK;CBgm za#`VlV$Z5n>N68kNEA4imp!DfsZ!bow`1aKA|ix}iJ8wo3^bc%T9KNR>?L3k2Tq_q zloi#htPzTH+D|3g&JA(yuXS7P4#e(GZu=sQry03h3qpNsh|6hypjKPrbHYkk=((=i z(D|nON3h=Qeam~}??&xCeU`(2XR4hQ zJo zH@AAINu=X_&o0|l`m|mx{{Tat6|SckoOd1X_UY|*-`LM!J)HK2$`ssoS7LDcZe`ka z?t7P(vb@J}U%Chk*DrG$`?61(f^oGJX`(aca^DC0o0f~_fC&L+6i$&Oe8B2FF`+tx zd0OJz(#J4ZipVk7GdR!uycsJ|xkjL6Bp3=sSc(G1W}lWF%6g1zRAu^Ws$wK*H6IM4 zkB}j%8*r-Co*Cb!IMomgFQyklHeLV#1b`w^pHxl0iIRGD)D*^AwVBd zg;IR9l4B)(}$10HMedjH{{VbFg7)W% zyl(Q_4|6+J_BX5-H@3gAw2S8tJt<==sr*@jt-^T+mx*=m8)ddo*%he6VH1z zxg8x`_q5mOdPBdvYjb&>SzH}TfmoMmr}Y&I4Q6EHtti4Vy}9ii5yuXm?S0w%-`>A& zzRCNDzRde;?KaDg-2K6O>$BLNPqiv>U+pfbz7Gf1ZY#rY1 z-FERr;r{?{?rz$p7c%q5<-_BNnDgJ^=i8HTa{k+W^?lj)cY9lgPHVh3+YaO6cRQ7q z^>=$dE%qC`Hm+PVq%$gsfrovFT-!Ig+|Shwe3DS_0ScD%gG-H-cV(OuQ|AMXDEw8ZT`>VC(4@Akbcx2L}DzR%&ez0umi0~y>| zBWl}IWt-_?x-z~v%l>U^PHoy=oEvGx_XAVrtE;b!Kf{S5wSMEi&;8f1mUusPyLY#F zYm$$__vYO8k1K82&86Fvb>hd2Pu$=TD9% z#ozlU#q&Es$#568JhsiP+___U!|yh{p33T(^vho3@7_X#GSUg5IMTM|UECw$3s+H{ z4PCwVGnf~e-Jos;4&>aW!a)!KZ#Se5>J_JkA2n~P`1sVO(^9oJCt&+)y5Y)P+_Jij zEWVNk^$LkeYl|bzP;(2J>47d*`x%X$w!WP|Gp&1jUc?~QprWpnv?ATMP&5`MtW1Bz zU?$D4E?zqh1^bistG{~>-i^QAZ?GHDXT2`**0`T=`%$+Iw*LU(KG$rjt-aY0o||90 zV$zGk;U(At7#w*0{f+It-}yTkomcPRXK6ERsJ)X6b9P7lypfI^T=us@`RCpjli ziyy}hSn@R28(x#B2q1zg;Ls7_;AD(AT(iaoq6qgKwxv=O>a75h2TH&v^1(4&Xlofq ziN{M!=iF(zS~M8D0y3x!+NKU>K^{}5`QZ~>*)G;L2}9)}p!tfiAW!pZ&J9k6)5~&b z?i<=y*nPlvuf6=AFgYvS?_+R1k=uMly`v)b-ouXEUBAgXZrQy%ugYJztW_5!IP{NVcoi{-hV?C$#A^Ls;w3yy~J?0(zX_D^SamuB(Ew)S1E+k7_(wX~uX zorcQQtH(e92W`f-Xv~~cMuVl3tX~h0iI=HT8zOp1g_@FJ{{T)$!vNBU3G4a@9gG%$ zs(zK6h%!vf0zixeIZheM-*_J4Y`wGgQ@p#2b#*Q2*Mfb}B7}Kndz( z$4qkdJCAOS@n)6UcaC4|ct`#_yIXO*?M~|VLzK2hDehN#a(tq1E)bzO&5q{vyBZz^ z!n=*l)+41S9Q_)%E5lj*e-pcT<~6Sdb${ND^OEI#ob3MqWcz;ep5*(8_b;?PtK)5L zHI2aHx17G)bKD!mwybVl3$R*>sIIDGvvJPX+mEVL_I8}~r#-D^^!|spJP&X2ouR|< z-KD~!S>gLjf#G{giL{?e?E7<%+woQyC;%f~8+}A%3B_&ER-CDMemI!k-e*+~s|D#* zjX{CsCr}V|XY(*K>(d%X6Cu%$htgF|xTFbbsp zcmyQs0^k9W$X`;~Teg}ELOK>*Go4@@HknZ`{?Wh)&5FVLjea%hTp(&6VL@b)Mq)~k zJlV&_X1^>k5)#>o6sS}9PNHU_J{@q%SioDGtG3$icNZH}zSq9?JXA?_L|UbB0q zr!DsBZul{)y>m<2uU&pMI49g+@iG2Ay~(?CkmCKb?+;?TiurrV++NK0ZugH(t>aN~ zI4)`V4mD6e(x|EzpvN=lcJuaaYHo0P$A+fMe|b~PtGO>O%Q55JXv_Zq;{)!q+V{D* z`%(V@AXhoQCd(zwm$&}_a2#Fx-?{YED(tUwOJ|khkUT+QYRbUrLxR08Q@6_Lb#%3F zSKw^Ao|BdxFSiM)t4@CzF)mBFKgv(Agl;|N`zGOi=Lv$rK< zxBb`H`>Xcz-G$LNJSV!nh05%$S-X=9oR-?s`gV`?J(Y!-#aFG_wYhMc`1yRu-RW+g zDA$I6soR~q?#Hw~?eUiG`)%%rVE5&%&9LU*Z1+DKyWX(6pekMCzj1GWX5eU}AcI3V z-EL9gwU>l*DpgHv*EeQ7O+D@pw)@NPx@)#?A-z^Ygj^Qb76#x{^qEPd1%^I2)0*E) z(eM-7jxrt$J^&%_h5THVExw+!D>%3&J1gh?~Yh!S-?e%H^n&*t- zmh#%Nm&XE@^H|$(mZv#x{>i&Di`<@9+Rpa(FWL@SE^FJ~?at!fZn&E_43J-8ykg3! z5G|`QrA|4&Um-vZu6*5bHK$ceL`1Oewd&(z=VW4d#!ID{rjW-Emi* z!tb`VN%Ecb+aB(<724sh@s{_jjP~s(A-$!r(9CO=eEXKZ>-#kNQ=ann*EJoh67ii9 z)#!S0*;`vE>w9(S*x4dI`}Yr&rqKc1UAhGobXvCy)s$Bo?aw4Jb0<`$bNC#O{w(&_ zea-IQy>GkDM$k*%?)%lc_TRJjE~8NFuEC3j-qFvUHrH=lu#7cml=x$tWlrU+^>+M{ zgKJvKua6JzdhmgvT>hgi2g(3ZL7gK!vDRQe2g*zkM1vx;K?Xz*93ch zn(Cah!VoN?3jqy~GgUxh8a_443fdJ|%=~062(t|4qI|%%S@ogI;fKNrO|1kgq!ohz z$Tb2Fni_*qB+dnlAS9x|GZ5iPfkELzn3Dux5aNgho2QhHtg}Jopf#t%03Kw2mM?f4 z+P}2E`M0p$T(iyhhTs1Hg4{wOWqX^BP=3+HrVI?VmvAGlGu*u@veduS(u%G5zLC$e zk8Bg#AGZGhXMMlBxAb?MZ)WklmoNg6cm4aht^WYOa*cd8mbZLg-vnw*E-JBDtJnKT zuWCmnG+&9zzj{```yhYFKiEgwZqDf3@cpOEH@<%1Z3d>YoLW z8hvH{qmEv$&3aP0rzV>V{ik_p^GC?{KXtiV`>pN$Km5_Sy>(O&G^4uhD~UJFY z7*Du9*>*3wJT0!@@9y5(_ZJzr-2VRnXKQlz_V>0s)wk)c>t(syT(f^`y3j}rj1Civ zEX*#zP7Vq8f3{oMj(@j(z58wVH{JXG_4iHdP21km+3sQ9J*~lU8khH-(cb?6{309c zy}8?4UA*XLb!)8w6ySB-uPaSDt`9AjYgch9TE1@7;ye6LL;E{t-CTcba63-(<#_&c zyKHegTYbyR@%wSK!Jr4Z5m}dsVn}tpQ-5^~GqiM=GzCH)vYECQ^ZE zhA_t>ARMWQt6Fyi5>yBbz^Nd|O;9|!PDUfg8V|g;bG(hNCy3v2JBykv?KYS1-F1QG zv1Qzn&E*6YpN1mss`x+d4aOd)ho9qwKe}G?{osAf@>cyzUD@sq)7uWzzjEohbvT~f zYx~Yd_RzPM>Rh;Ot-^)`0g%QNeDi93E&TjEKT}1>(o>YbHg&K0CHH3k0JDE%{`&Jf z2W0LJ>)=6#Y=3h6$A0eY@XzR*Ot&@J;-2#{TICap>Nh^t&wEkvz{aZ62+dbQ+xy?wXSkC)(ztofQD!08H*3J(*z1jZ& z5IuWNgX{l>UEpVAk1UXJAZ%AmG{E>ghJ#r=KsZbsja zYo>{gm?Cm_Bx(t%eT!%#Weo_bGp5;`<44t_sh|5YJK+h z@42^kkF95j9mU7-+|nZ|mk-18mo|IVx?~0gSb_1z>vpcZ^>})Jp`EttSIfE0R^x_` z=8em^?JM>!rs~6~+p)Of=H0*cmu=qxLoLfJ*4C>E0mUZMNovSds=|j1ox^tc+qf<1 zomT?fcVA72nF?G;xFauy74dFolqW~bn*0r`u-n_P7TSF*Kst`4N_hgTWjJ+&;jD%g zv7y7CdcS51_XU5pJ=gZjyqDVFxc>lecEe@bz3g`1{N(OF1#Ug_+a2PT6yANMi>}|b zx+K~zLk3eA=icevtoL?tx|B5ZvRph(X}YS`-PG;Q8i}uZI1v5Jf02*3FuPxP{@OVY zbNF3~n{D1c)9+6yYjbABA9;I?vToiEZKRaYhPdZ%s@tMlwTAxy>Cef;vrE@)<7)M_ zn&ajDVA@{Xf0>`R-Tv!u!Fz+e?tg8$!umHnXSp4_zTul~b(&t%@1D>@YTdwAOaO7F z&i2!?+qIW8&T;Yc`5AIvmP+aPtgn}8=;yb8cAm+5m9@3I?JoH3zHY_kQm@4Ge0KD< zv{rTrZvMMs+`-lq{4v{SZ>dA5TbEU*?r*)Hb8uXmDcSNi9azn>&Vh&?XaEu-;p;hk z@ffq59KfKp-EeO-RZJz|>&?1m{YcADeg+ z^Xr7=sCohzc4=VMiC`79kw^f@(n!ucaZ1mN9u`jrzsdFe-@V^)A821{JZrY$JLla_ zAD!-vs$7&#+U?EQ-SRhgHiUs<*3#AHV!{w96OKz(&vho>A-CPz+1qZ@&HJ<3eVVG@ zTXxYGWwo+c>|0p)XO4uNLRdMf`Ik3omTj!+QpV#bt-^Fp zu~i{DQ=!JoDqjNi%E9A@yqwwZpMHDamDR6l#d22rXJW(xtFz!$cFa)aCwZ-jk`6Si zSxVO*xwRs+&m5z4dws`?M#bGkX#>@5EDtd=DPh zgMz+o&8BcTWRT7^9P!|^_Kt}zlUovOB0X{Ng{y5(g8Lw=lL3NYC#VNo2PRiys_w3n+e{8`N4 zA?eixwwlI2#QPzUbR8N1N)7O{4gct?)nS)1O_D~!=em+hpdSrBkup|DiZcHJiq=3K z2ZQMNkjRzWbxvZO5sRg~T<3+fGn~ISYI53k|2_-it31rHPf9cBlwHD1N1ZNeB=tpJ z5PC=z`9;Jv1n{s!P!r_(jLNwlNVw{FvM`1Y5NxSk~`3?|J(DMmssOi^^cPeObUl+BBX8U zq?rM}HAWtWx905KS>()3=e4%z7mTN#z2c468P%G+?XA?##1c9Yt5S7k>Y0gJBE!j0 zZGs|yye&JcK-`zT9dSDI6uW~2JAbdAzO>_2*B|(+WaSuW3kQ8J_n7peQ2($ghtZy= z`Wxh|N%T*cdmOweq_aaEujzoz1qNv0TFV_^-|);7IK!C9iy^yi)YGWfNcK$`Nl@Q6 zQgd;+m!`-cNE5{i49h^gTno|-#PqIj_MscWD};cPi|Gz$LE&kY=2i7JZ_kRPOp_VI zsR9|$J`!Tt#DB{k3)-KDD;U2!S|{=azU;+AMV2B*$gGDLNL{dSIf32(6g$*I5S)gL zANvm;5`w8TjB^5mcNTJKqZirKsuksY^Q)mL5TG^cjkYKrtO+71{b3^K98M9*HN<*s z*)nmnrNb?x6X`Y!GZ+Wkhl?2Wl0({|g7vx>?7+7=R6t-bjaQHpV(^yM+%^X|x3;5P z1MSkVt}ll?R)s^5FBH5YRr-(mQ%={ydY19IYsbeV*Mn2N;#MrIua8*2(l~`#>qFww z))b-$WH(aw?;bzjA2U1T7;`&JryD+lK< zw*sOuF!z5AF!rxdsf%4DZ`65t*h{>e_c!+~5(>WrMH6)6ed;Dy8`55P@`X-Ui3g9! zf{~!;2Imu=T-S}-VD&%644q`}w5`wo0n(JhFM1Ctz3%JewH8g08EE=xo0dOWZ&!3E z%e1f6>zHs!O0FXX)1Z=)jQB$zMO_=~{Ih_~2$}xY>bgua5GoCf_BnqZ3$Ez+`Vt zl*s4b-Max54Jq4$jjy<#M$CcO;TN652b&#@3pkL&^XS0#jzhPd?LJ_qd`l(&LaYRD zlOI9XO-g}}ns;m**wwo_|IEPG;F;*ZB;8c}T5IID^#&-iwd@cI8V4_ru3!#cl~ewo zmUK%n@%L$okDadKJ+IDgVCB)h-h`(dDie!c6PH!FO>+MM5Ns!FFsosTwrVRWZ!eo< zGeD>Hr2p8`a{JcT5B{a0SKHU)n?9XwQ6ahlFP;!t_l2rUZoJ^C`_AWA?~uE9E;NES z_|eBqn1<^w1c{uIMuL#Ns|&{v;8A%HHY4n%C82Gi-XGO5e^sB5?%x82kQirIJq%?8 zD5g5=@0E>Z1_InpfAq2MmU=C;(e9gqnJB!s7nCCA3_^PMU~8Tjw-B!>Vj#n`BL=5I zX^7GltdE*pwLV9Muh|_K529zM?5mWEda^CXoPsVAOl8M@PCI;^&b-WoW9BRF)t;sKDr=9I2x7fmOq51W}$I*=7$W4rp@{28U#_MH;md0KD z9|btVu#ly4Tn?am{B;XxYA#%pQ)=;GDsq~v`xUQ%V+j5a&<#>t_1DOMjd9uL!2|Bo zqZ^iF8vtJ@R;y}DyMbfX#xqcH9r&lGL+^%eMxItF-wQLObeMR$dg<$Xssi84^-~uvee+l1AtD#jW zc5dj0-gj#N9F89-4Lw5#~fXgf47=v#Fq-to8VQ%T@p)`2zoi2?6vfO|NeZb6*k$b^^YbwwnF%B zCJVbz0we$T?I{Fb2%l+fQ~sA%7SAm2lz4k9GMQXAp}& z@AnfXB#+jZr{J&2UZKG_ z;Ee~s=1ke=eAs4&(ram24*<-~b8^sI-}VOh*k`Gz(otpHoE2|nw~3Jy%cQ!VEKql= za3Ujiob5@)O?3_*kDLwtoRhbJ8v=J|Q`B_K=T58BIj+#Y%;J#Dq1VawPZUV6OOvLZ z@w=u{R5blg=sH-K*-$NKeqM8MNg`L7@gqRlq%iZA^4>CZXo3fm(%gxT0suMn@?@cl6|TwD8ws znDa`K#5jm#A8@Eq%-YiixjX=Oy!Z`#g7o2iAuYiw7ZQ9dTkEKq?zZUX?iaPKmqbEF zkAp?#VYSN_r=v$Ner`d8WaN-Ny>_jkZYxjFe3UUyX|$NR=d)ROk_uRk63b>OnBa;g!=RS(Ct?lI3@jiZtf^S$=xttJ1}9_B~f zh9?YrM^WTrR11XvHp^ONo~l@?W$sP%cYqiy^<%+gi@bpYvkGV?ms{y zm55j576sUkjPB?|61w#WtYef7I#`G=h^$TEC8we_wuniABn<+v<0tA<)S?1>VH1KG z56E|=y#3>~RMJaPOZnM@|5e76jVx16X%oN;BPevLVs)$J7=YmV<@pZT-BM z+v$v&?_N4D`$1enA};%szMZ&Keh6L@L_z(dvU>}CZ3_7FR@a1qui=r~ZUO6dBff|6 zzVc4XQjVh!J>?xfNIo~N9o7I%0c+i4O8Y|f7b3?3F1Phk$#2NsKT&3#+9IOJPIupn zsSWa{u)yc3%dY*SxK8Ghq3RQjpU1nPy8x&CTj7SZ8;dw!B(KZt8lD-F>QN$6C0 zqQ{I$?M;a9;2qvtZig~u0~LRYojqvv12V_-Pb3eAoC~X+>N~vu+{S8^^!D<@ahz{V zedUul^`Tf9akhJBVdpW*TpvR|F#V!>A*K?0tw8uiw)e?bGbs$O1z5rPHMfqBVqAL` z2i3JNl^$$yV0Jdo$7ab+Z@V&IJunp8(V=C~I!HDJBCSc;Zp*lx|SL*%S8p?lED(`#>t%!Hz)=KvY z`prGUV#xNh@#FI|>Q9fa^=m(?)QroER}|x)%4%wI%jHgpqo8^WcjQ?#?(LYT9BIkW z)>@qBjqgi-&Ek;tRR490W`rg`o$kgw9LvM4R&++oeqC&2oD2RUdb^ZaZ!5=LEg?OT z&D+*nMj~$J$Nt$g*K!1Hq)x18GLQU@I0eDsOu2>&HC*o#ul=(yq)m2zZ7F1mm%eqI zS@*(NnkPwT&O`t`g>1NdfM zOT9L}Crusqa5K5BBPN!2&P4?-I5*NAd?)(p1mAnKN=2fCU+aHJ30RAnN%`USpQ!O>i4x3@*L8D!Q1*?_2)A+{wzr$ zc0;)pMpfc8s)Z-QPVMbq$~r=W+iEm-^0WCqBEuNw2lJ$_&{~HYYwvUNx4DJBv(uvf ziDc;#ca#{j%mJuq=h~GE`~>kPhSv9ddq(9WzyD)um5B^R%7qvE2I46O7=~e5y6EUS%Nf4o0K(^DjK0@Mk={` z18`0LibBvgW*(LGwCuM%#t?h(-~7>`c4#Ij9>bFFL)IvrlSH(Y0GlfH51T8k6SeBuHBTnA4z zN?VDyJvlG?DvhEoy@3fJ7Eod=-B}c9tcakk@w@ZpjwH8aa;100dKG%AQp;=TDu21o z_lWy79Mm(>l`8g#(ywN*ieti)1PuC9g8qj$Qmr2CTc4^&1aJXpoIaPF)9t=(dRIU6 z69gh4*~}v}&YU0ehOZ=Cb}9F+fSb!cSNlf`_E)n3YZqw{ay5x6=KpT6 z$~0}pfvK)&Zy3|gbcl$h#}7`h|9SfIiizpxC#5f>KA7DZOGsd(0gP(o`8m;9n417h z2iY}53Y`isEEV3rKsPH`-Fz<$P>y(YYbc~^U6H=vp1nrGla&{m!bQd}-%pR;tJ2pJ zCNqYDg&3fMsk+XZN+2a>dwVmKusC|6)SMx&@D;eyf8wasx~}QDh=1fdd2&TCO4lDF zWW_yxTmroXCBobw+X$hky|X{?T=`Y3OJ`?KXY)sc(A0|#8Iw-n&m5WB5hsipGk^cO6nbTCYgs)YRi}Ir@hg7f z!$NN3!L4f5CxwLva~ucbRY4B7dKF#=5d0#45|mzqPaBI&pNn2^G~3EpIDH>&aJ(fAj8s; z1Rt``X_0U4^gMl_QWih!u-E~iG&(9%WJNCui7xwvToumv25*>Uw%1$%Vumza8Yf)i zy}<|$Cb7TI_(gI@;C~rV5fpnXwgI7_d$YFjDamjz>WB!ff}!Tt9xlz+2dns4mq5ze zi4Qw2zf)|GbeD64C|!?|$w?GuOG|hU?w$Jsl($rQxjpF8VdjLAemv7$ea}47@z82Z zxU6%o{x=1PxM;6kt1|-iPPd{AKC=7X=nz0|WLMA{_V@UOV9HbZ^^SqtJ>)d9J$?;| zx7@vj;OnIL8c^j{={t1!eVxlIl9y|qPAF|b$1zFc17&;4#2UfWRr{QPnRFH*km zYT(|Egvb~BxBpoD(UK)s@EyQOFD<8a47@Rwl)2lRZ33XPk(?JO7cEbut0-E!e@*Rb zS>emeYc{L{U(mTM*PUzzw+%Sh95<9+XMZ=&dlME{D=r(%t!$u_D3RM;8T%zm>}?JE zPQ*Vp&6F=eRJcz!o%2o^j#w&`^%y-oH`ufz($X6KMwV{t+B;g9Di-IXyH?O`4U1{d z*t|&+%P>s`@D#B$&jOv_*Smg?+aGeh6qB-G=5UAm*N#88);al4#(x0!oBOFDOOf?g zS0|g`0>?#CBkdQYbJ8DEET2r}-vLlsr8DyH=mgYaXwE+jwB2V?(o_A=brOMa1UYwt zwsZ=AMKF2(EO+~j|1^he_=Z1Me8$Hl+x9x_W|Sr7J!?{$=Ht~nl4Sq2 ztaM>Sc)LsC6%GlnGR9o>x*Cyu|tQ#!yho+1!9wp&FSqk(22dy*@T(rre! z$_(D?=k7N%jgix)y{fo&{)LUqf$-34RMLV(}(%%o%-CFYeBd1 zUrC&k0TzfA^h%|#+s7HM&<|}^WOqQ#&{7~u> z@vPo4?*w%vZ1*cr&nxI6!y+=DoP?W(XyHb@NbsI&ZtU;?m|QQIi@=DiV_Xn)i<@|m zI=Z6*K)Jw=3kpV(4|EjL8#DaQ>@f%dzsI|gO7nlyQ|l`0VGdCZYIBF$`FK8@Xf(#Y zQ{;&Fb%dP67U{Zn6Ak%J63Uy&RK%_Y1yw?IgP*iL`J40m+sIVe-%E`?tDb1v-(k8} zENVsPRDMRL{PX9HUoA+ODqjG89>32h;lQ>;kY-<6H-H)>LOay(!y76}FN)|2m#? z{+U|A_kDl3*C;QTHZAcKIvi}TU7ENX*1DxtItF@)yIkGG5gIqp!>O8A;}*@b#IpIR zSy;l^tI$yQZ^zZZtbb}8EYpC;}TDA}|386h6nL>uNG^a;VJve;QQkPZR{DSU%bMKM% zlc@6j3-?OG60EA*OQVfd=6C}JClW~7=%{mW9#Jz8_)`DxG9@AK=K$kC!0ZkwuAUEzWLPaoxXbLeqXPSyUK_qKe-W~XMK{^PU3-4*ONrBmNWPpG z=@D1ileO7CKKJfeIK3&^Sd|>3Q!=W}%{lA))+Tkg{fcR541akF;MzB)cw-qsDaVt+ z44MG*FUn$hM;wL+<}L3BIjiiR7gj%blD*1lP&h2u_gFq1xc4_idwOq-VX#EXOlK+{ z;G4*9=eZMWV0njTLuXi6&NnZn60!Oy5g_oTVCDsN&it@D3#)p#85c(iVz_)^8!%dw z!6~k@X||xJ&Pcs(W5*O67m-ysv7IMuW0y!1%A+rPhr#v?cz^f?{R&gc=kzL$SLQT- zelAg^^f&ZO68qqhb3Yr8B1c=>cN$u^77R$;QM-oDl=c>D!MoboJw}SCJj`GB{N`e7 zq)XGiQ3|a;vI5@}0Ly^2;1!zc2N}#(G(&M3c&$m|EP~=R=+Fjs@>?l;zK_3Grdzr< z)}-Z~v9IIxaMEGxMX#AvU&rD=suef^Wk$zH%PZ9=(4oroFN$AX>sL-;A=mKQT>Fy3 zGRzs}z>0#xTM?MxC-3`!xOaX2)@e@frfT+zT0eUmI@Kws4-jqe@i25B4x5h`KJD97 zUxqj19Tt~>#gv*29BJZjZl3We_q)*%#f^rBEt}_oE%R&DCXRo+*>{iWr%B_u4EV+O zA6P;Ys1c}j`ODuy^X}rHvygj`%kzajJlD6GVuby5MM_}mXk@4NH<95UKCQa1HE+7k z+R0aHlEQ@d{1v@vu*3d{xO%3;{EDa&zy*>U>o_y=F5JKO+?(lI`X14Usm#lWcbyyAAVqOqstC)GzwX8S1JvIg9lQ`lLtQ)V_Yz$jyety z!uilD^!5}DO3NGbSGPXRD}6o~h?HJEeTFQyxp~ST?-H4I7`>%1l>)>AvH0H_<2K3} z@fX;`Is)F^vmOI;1xk4tmCKhYz*2C#P_pj|s&R?1sy=|o z9vXME&qW(AIz9I@K;+bqXQdfEbMSX9I{K%(22XzLH_d8db>3lZ{DO1J1{nS8KPSuKHaOrNr&KKl7)yr>eXj*sxX3!1sd07fQ177>65Ac9 z!dr$OFKwO!&fhsTGPpr%Iwo1{V*=~89GP^h-ivgo49nY# z=+eP2zG7e1(_GLAwArJ)`>lL)6`nbOn>h>Z1s=S5->*~SrxO$L_T~KiuA5T(iOKsd zUy6vL_xv#CeLK-r<-^_Y=~=n5!P4R_Su~9tR~}QpkkjU%{Wit8kZ%rnoNL`fl_OR_ zUn;9^?aAJ+o6TKS>gTpU=O1w0?lLMBy=7zlej?{} zj*a3SV?9ZlyR7_%s<$f23Zlfg0Rs)@{|wBBBv_s)OYU9cFqZD>vhS->etmZ>K%+Z- zI;?q1V^I?&yj_jKLyA!*u)wH=FLv46NIKK(dF_n@?}wAFcU6SgH7`!c&$r0Bq{wAl z)!<2KpRW_1+0g3MDE7=SBm9 zbbAZ?RAJc{2|)*aQDpWy9C>15WHUn;LI6R?87kio^~(cuP^YTdpT%An#@eWqiZhDe zQv0eCmr48CHX(WPJuR4{X+FlgC|sew@|nrr%0+%c8GobTvTh zLM`y&PE`|^(x&s3`_gu)@6Y9vDfo8Tq7%X)Gy|SV9|O!Vj|4h5IR0H3r1`0@)%s8# zheh+K=K->B=fQWTCT5?Er1L(hy0X`TsC$xOH=pE1f0fHaSj>bY_#fCrQlki|SSYQK z9jW`lkSEiaiZOxdDx)3kw;~~ja0Q>yc)u+FvkTbs*l*)O1+wJjZ{{nO$EIlF1)qLUxXZCX?%X% zpMR-@B*Dl7fvrCX+N^VV^iw0=u+Z5$$tDjxytmHYSq1iMs(mcsoS+ z-fkcWzT9)mxBwi^4RANFqYMfzoVWb+wrsm-T}H2Dy)gWaD;?rBllqNWSMO8FSE@7| zrY7<}H&DUOk8Eg6m5*g=0rFHOgwzKs$&rc*U z;RPVJ;fZl}RYKa$)BPZI9o5dd26+nyM+3a*)QLtnl4wRnRTwMAJL>2uvB_ytZT|Fw(6r^1w1ZBzZ;U!Ah{H0~3ho)kA*qRVeLCHc zr#`xV$I|PJ%o9BGI`S#B1?MGf-Cc3@;Ty`N_?B`pDNDGt#r3L~8}#v9b3d)?EWX(X z+76hBD%O|Ti9P4NX=pC`zVn$gNHRiw@41c{J%br_RYJw2uhV*hOUKV!p-wkHIM4aA zn48df_~}VbZ^o!r1^+~1TN8KdhJJ8-GSPpOJebF+>MWsB#&Y#AJFB`|EiUtoKf?{$ z0)Ta5sdBuz9)`g`@H4xd_M|z~Dp6&bQ&hT{^(JAXOmBiV9VnDrxwvPPpIRTUFJ=*Tzaw{-HiB zX;`L68u9clb;8UIW^U=kYzwg=9c#HbTDjX-#72KHikleN$sOgCQNLOYabd1u)JeU= zLB+vtpL3xXbZx=nQ*zwa86f-s&ag3)bfKc~2$*1Y5xg?Y7ixUzLiU!l@2|)rQFdM~k_JqEyg^86#p}$c@%cXZ& z6kl4k+>|DVtynfFdVRVuxHa5#T-%HRc4Tz1dB177#4cY<6IMx)XfkUjYa0^gKcX5u z-F~lerj-;ZyYKRr$w+yRyK(IE*bZ{kWN9AcH0d5TMG&_jwjV*PxhCO56&6JN4vy<41T=7y6=z z3DYC|x#4nKN$2*G`{0uB0D+POZ{3Hig}HAMuu-A`=?39zm&4N?!k<^ObVy&PCc{~E z)c}aRUYT0{q^?EiO%P~XZgX9*u?&-TQEvl&7!YMCdT4qm+7sAj1rBE?ULd<}L!Uvp zmCs%(g>_7>Jq`8^<>)QeyphqWsesK?TVb#r^mHQNf?9Vn%GYZX_MZO<_}s9*3RUvM zX_a|rxVa-KUW3wg5XOwMSLhi%3{T71=kz9%<(8Jn<&WMt@OCfH4=p?OI(w4~a}S`_ zlPJ^5NHhIPvVWk(C|trgi+a0dPHV{P{Ce=%1oGs3ep|Fd6nJhB`cm+pK}b+Bo2Tcq zz0Q_1oHz(kJOIpf_v$sl0s}t)t*c~IWUisR@hXf<{zbh`w@1d^GqN`OUPacEkib9^ zY^t9`(+$(VD1QCqHx!kcXHG9M(U|>up(Oc9@-Xl6)?azbQ@qIRa59wZP0ovA$5Nt9 zgcqP?kW%M)86`o9crjOsSVszq*l#B|o^hQpI}~l!#ki*ONLqt)DLJ8kzw_PkOsI&P zCdA#%_B}<)kzK9q7(z$ZReBlOi0{cQHjfWMwYA=!8h@lrat{H|o+G(w9!pD8G-zjf zn220AtjFL&sgR_#`D6O-#fSd@ss_Na_0qDXoE?o4{mcIVRiE=IxCA8D!G~cH{_U@i zLan|Bf3^>UOPF(1X7?zfkDa^pdsS|UdOwA-^W`@MD!UU|L?H7v9SNTfVl_og9XmT( z8wXF7zTyEp;id#c`da0GocM)vzo26)afh92Lo$#My!k z#vDxZCiL_PBO(`Zr5@tW&h}zd<^kxY!e6byAVt zFafC_zpgWWmoS#(D`XfGOYh}x|6@x^&)s=)EH6BQE^S-A9X2I{fy3G8+Vd`s^*iv}&b6vBw@!D}A45lPE?ZEZtYjcs=U5qY>B8IOS%Pp{70UoTZ_$PmI4Q=MxdFXB-{h>1q-@YGa)EPKng9vh3BxW!E3&h0rh10Ep+K* z2i%vSKjJlc*vRQ04d#3!wT%!pWR~IFhF>m}xJk(jK~6OEW%>@zuv2jX06k+-F*7#c0-u#oNS96V82kAO444ZwtQmaob?XArBt#-VvL0) zMr@ANH!E+|JI7Kqd8<$#)R5V|~L*6fRg3;53tC}5w zu~91ZQ9I&~;oU7NG}=!(cNyk6_X@)E7yIWM3tYJ&o!Nc_rk!vT$W1;@l$q0%pQIWz-Rx}ZP4 zz>!MZwz6jYf!$74({b4H?IciS?cv4HuJt|%y5ju`s@YvS01MXBCB4KyjPBUf^_%l! z1~({OgD(VdGq}X2N99U27hB!(-V7)T>}>P5s@`^yn2FmTuA|MJX{d>D^4xGLEMf`k z8n%Sy>j0*JgThkJ;{(#1zD!&9>rhJMq|kC2+w#)m2u!zbj`wq1Loljgct#8f_3ZJY zK&Xpe{Z#^L)<=V8Z$9$A&R^~8z9_nNq*kx3rqpEs>htaWn>Ipubd(UHKDuqNZp3I8 zUPK8=@xQO^gQ!K$8alLt5({2D7bC<%BW0NC=}5!-3F6WXAAz+ zKc?kb_#c2>6j*FV3Rgmkb{KR-BR~<`Bb^9L6Ig_ZGt-1;BQU_AL+z`W8kP4eFGaMb zFZpD5_K;1klMZS+msiZMl1g*P@P>Nq&FNQnqhn(TQ4{|G#=PNXkr#a=cN_`7hJc{g z{3)USCUhjZtGP~3*M9gy14)nH4>!J;yCI##1V11iEojQZTfyfJ>pZ~KqO;JRrZ(S& zMqk&J+M=~=av>>c*?CDma{eL{c8cRcG4YbZh)K*H1kjwjVVoT2vHyyBqKZl3JiAfYVGy+*Kd9nr#izh&Fxy$X)?S~aE=qi zlGCbk-9t3{zCHk9z%_Pre)Ka@9ll>x|BsF3nHR34pIQYaJ zQ5|#_xmOXJ*fsUB;dJ4ZZ(O-0^7=1wyB;Tn29$Tv1uMyWD7q$$fbuaaP(r^qy;D}= z`k!+9kE!Qr($~dAeTD$f7J8(|By5T!%6&D8eWAiBgD~We$bQhmMUpO(`6aut`hf%Q zv47BFjUk6Z7&+-IbQFhs$szHO` zqZqRw6)MUSRHuu-=NBB%;5Q`TGOgNoZ&nh|TI~f11e408cr_xcF(o5GAW{3*9a`!7 z#GT>l&WbwMt~XU71^j#PRjdN^Oj0NZ^nm-edHKIb5XeCi*|8I!amzO&^kRsdv#Ng( zTwMQA3A@>NqN&x3wVnlOtP%4Xb<#g1s_d11K<{gp9j8!$R z5V%j3Uj3&e?oR=rE2_3!A&MHH6Qi=&p==khzwO5`!RbgJLS1BKl4TV$AY5FDc`U^x zE$wli+eG|5m7zrARgc;9X+Bet(*EnSEPi)w>Aiqr@%pZJMq`iPa_!Q}N;Vi|9Nv7! z!Yj*v?dh4HtofU8kDnvdDuef*%C^Y9j|RU^Qm~$+jw%1<5n1V2@47q|kx~Dx)?=PF zL(SxG$~Q)}qNiLh9WP%*&Z0(O;lnWhA^f#Y(EeJ$dA)8}2hEBgb}RyIeXq5r5-?M! z&wqRYEP4|?Kh;xIZM!H+!2qr3GA$uju@DD;bi2ax`nmos|Blx0O{CNp7!X0dKvI2j zYJF5j)-%FxY4n;ADzm#&)$+>^8C3aJ2u9>u!{sTWclM%j_hMrAP(3GjmK?iE#3bP` z>|EuY7^fA9_mYpV@Ng$UaJ}`Ha-u0|Ep~SG?R|8$hrk9?-cOT?j&Bcw!)|f;%}g%c zhTJ}=o!ETM6)VPZKZZJ{O3F4_%7mV!#5h5I=PI>;QMnpz-XkZvC)Yl2DK7>wlncF} zB&}C9yWDotJ^TLjivH;H)y*S$21TZzUv00_J*D3u^*&yx=teg|Z z3AyDneOqX3;lvl60CIa?r77+?!tdh#iyeji)J?v>dENxOsK)CbM2)V8_tLx}$)PW| z@%o;fFz-xUV@MVT?C__TZA~WPY*i*_!#x=3Wz1eN6>9w}x3|vJLNDa?9R44(g8ne154+_8^E@N?L8f#DlhM@6z)g~mcv$;4`ksj(=Tl8zL|< zL{djeFhllYD>Jr&hhfMD4QxXNwaavVy#7mrk=0pJ1gWn_|Mv+MdN&LjNNE*0_ebU# zZX!rZfq&R7ifu&|-cek$(?XGgRXBwgoxqJ9|b+FZP#2p|i91@?2B8%&*0!k-&4yO|>2WUV3aVw-fFzTw1*H zgJvvOx4Zv~i<-NLBevs~fZxDwYsaq$VCOLAFjzT?Cgk5}A5+pI0$P`I#t7I>nw!Jn zD)dGsHm>hj>i}&zu0}r=FqVIIOFHCg(}*y=AuaanmW|+0W$nP5@#>FO_E}^YMalM0>ocOqB^>8igq1a5r z47juw>2KEHa*$3}L2S^4bhQ!w2yx<-&MW@|h(>MU3BfA{2w}`2UkFxHaTy=@j649t zEK;5eFa0jae*j4gUd4|84^Ry8X@Flp^+kB?q_dT8*uJK%oUB{DqvJnoqf~5kntQi_ zzq$cB{|_B#_a|ZtF^8G%=oP;h?5dU0Xqr?gbNBdq!}&qxZ6k5Ao^?60Q?AGRIBu_} zdC$wwt#IOnZP1}wU=+EBv_wQ9;p3587axOqMsSq&57g~)RPP|Am|+uA{GgLhThUMh z*{Ns{__Xd2%8X#UZ(Mb2WgprV+R*p#fxtdWYM5_|fq2m8ez|`D<>q9iPyt%WO8)_} zMtUN1zK}C;O>*sc#c8}nLc^}`IPeh=%3Gk!*U@X`xq})GMhUJulV4D8sQFC`zgva6 ze%^umH7MNOXuC;#NunAh+v(S!8}p>l)bw74cenG&WmTUy_ul$XzFw{Le@I;7rrSa> z=b)D(Z>**cH7gV&t^YQ5D*5cQP?gKwkg0uZ7Z@;*K4+k=<{1AFio{gIFaA8mL8}pw zO;cQomh0!Kf>95o?*7e#qNFf*c@)3I)S!_{@9;u{0Z{WiDw7!ssguzg(E{m@>B112 zO?^b@3L*5OY}<^kB`_9mu}DZTtMJX+Aej#@u87v~DHzjwYR;`UQZ1@Pj@mi}df7Qihj8X%8ribR0Yu$Y;w;HvI#3(r+;h=Spy;4J zf;*TT+pvmH4;zm4PjCOGr>L8VUNKn4NCIR-2GE~Af~KIN!&d@F$6Xvce%}N3yY0Zd z^M4XCIjt+FuAP%X7}!>>E^tk15CpLgET~Is`pnGn9PvVCCwzXl z^(|kh4fV6v*OVRGV@wANGgUP3GRgnw4PLi1{YEpxj_d`}|$%Z&VeF^89TUV%&_1oaJmWB`#gj?j1*fseF zS3Yy=Yb{IApR;{zRy5(^pfCEEq4M~c^XRR8x&xO>kZ@p)kGy0qhnShSK=lZVi4cmw z-W%CZ`5Z-!k(q~&v1f!PrB>iDVFA*E7MVTfvoV8ObqHQ`hGJYEp%Ey7)fE@O9j>5N zu7SLvBy}rk*TeGW645qiVG6yhyXv(2e~QjCoXx)t!?CLpZW=v4p-btZfIf zS4rF_>bt{t$BiYXepil_PqmB*NFfJE%VGSV=8eljdjL*vC z|8D{KDwv?3wsbs|eM3moUvi)0yABYuA+c{Qco$$EJjq}pWLbr~$}J%ZF^Ls0S*2RS zYn)l!AJ|Q{(z2BdewhJ@)nvC>NZOm zp0)jB^#8MBPkTe7ek(`jY3Niip)Ftqd%cJ@W9hkgyi}Bm;y9@+E4MB>4!1K-Q<5!&!tUg(%HjO_$|+LSXwH+Gs+LTM?0JcvIT?v2nbd6(?)i^_ zc5&os(Vr?mxkDN-`8M;{WA|A~Fg4jC%~{f?0`$tPDyot6-p5^3!R}mfhuB$+-hY6N z2J{*B77PN`skL|g+=>eu_?#vSj_%a z(v$-i%4W0EVxc1>4J)eMBKrV3?iV!HFFmnCIb`xCK}c?=N4;_Xf$RKC^}?29Qq?S0 z@We)Bbw2oxJ>rHxbVsSUolxAOf1-vJb9Wap9kPe+G%lZ7N&jer!$V)DJp9C7`TlFZ z;};WVwAkov=UD5x5kJo^OD2fWssM?ulv?QPi?>}C~pwVASvhGmT- zg-tiE%B$@*2LAYEv6j`F>!twqRqBo=PQY5!o{j&;_ zrjP;CmB&v_4gLerX(43`J3#7gl@mUk!e`p(FoX(BCD>m(47C;-QhWHg6BeqW zK4xy9621IlK1ZQ9H+G657?zk3RD-<#t^|r-;&MlhEE2D8LK?>79lrio-Kq&>1Jf;) z>f1i?k}%kaXjRoJ6nSYSGEs*_b*{E;W%kJ(3TEh;7a7l3$no~{^cSPdysSda8vT_B z2gP1lpsaxI`TvWK9a^<3Yq$Sy$WC>jGWIUxV@#&Wi6Vf%xH>Mk1=Q3<2eG1m+a8*n zJr5+_h(@pvmttvE{{aXzD#Kzen&`E6H-|XoKkhP-TN6F5gzp1bFfoZ%w+k|*5^z5h znd3Iem`JUEdU$Y^E#h-Nv+9WY>WSJy99nX&kOOtU#&A zt`;cI{lpR)mL^{X$c%rnC45S13@|fXVQ4f`V`GqzSzBFlL!kY${sRp7h>cp_20{o{ z`CuQMyv607M+#VFd(KqE@DjNbQi}x)BZ~N!Ayi>#c%4l{3#gfR{QrY)1nX>t_!kE8BH8)~49w zhYMW8XkJx&bMT>5mBA0SdvbFqSnYx|=C-$GhEUETV)A4?dH!Y-G>q<^{}s=}rBie3 zHug}kvSW|vQlB#U6vJD&c7=I6E{9))CY~DTLxfmG|df#JN0n7uL zXrw^6Jzo4Vz~@i~nR5`4X?-N>!v0_^8V|y1BSaPvORGP`?zVN}MUr-)r!4J_@zG>W zXv>8V7IY&|(FeH&a1HjAyTdK`U*Gf z#wFbClw0!O3kfBSJEjL29~&QwwE+-bD_H9U!Z*nYiHUC1?DGVp!DggR&x~$PGE@tr8S)^TR~_h;KxN z>RH{l2hRFdZ?-n`{o{<2%Fbv3$?+7^t}zLenM0ZZUzBzE^)_^pmjXQP)V-(D+i6 z!%g+Gx!K5bW@ zqtD8)l*H#d6Hz`(8TxXxG{aEU&as4qPpwviIk@4oeQj)P(krI4i`%o*N5=!Qw>6UA z5{3z32UG1mPM4Fjhc=*M46+A=b;lplEOWqN);EMt+X(Q30N65|(YQgP)ewx-?RJ-} z{DB1fjhWGJl8>5ZXI@^V@FQb4k&A={f(M}$r|kiP$s@Dxb{-IJ(1aO>RxknTvn+bK z9zYgIxbtTz$Y42ZaEi-q#+HomW?k3Y7UYWQHhI_(^Y}kNRUr_WzukiZJzQ!&4k>!P zI^=YH6fzmGhR(zu;e=ccE(t(v!gG%g-Yb1w0GH#W(m9+~zwpdh#R~ z?v0~Yw7=PeE@gGBpdpuI)=6C`-YR$xXn|Rz3BFrH&CgoaRV-4c2-0!7GmGlpS&c=^ zKlsG1vQN28q(3dHxFYij1_yTrH?NBhxjqnpOGSS$-5?mk4CaBX-&@7snaa>TpA1V~ z2LA&3B9btJ9UZe3=I_5`B*Es5J7Stn1xE=v=r=COg+zxfC+a#A++K`W)yLK(E*)GD zJ4ZkiylKrkVHuG?C<+}4#8a+02hx>cCAYGdIPYO_qi_-FzOMr$1#h3n%w4gjkmYlhPklQ zbwuu!eubBfJ!)_695H32K8ad?c{JecRoR$KfqQ-MDFV0O8M=wVqlw(QRTOjqtGBkS z{Gh30m09cn>H~$fqY-9s8MxX3R+a$XPtP{EEx4^Va4HQi1m+xZv^eeyNEaUjv?U=E z9zcO1$krAY4_9~d)*5QaKpD#c%BmFz2df$~09bdjmWTOjqQ7XfYv1K#%FC$CAkEA< z+AX5)J7lx0sZf(_d15D!lM^fTLOeYizyPRZ&Pi|5AkWh*E{z>5Nb2t`rJUFQd{^fW zI~lKzx-x5Ky-m0Z_p9Dm+Mmv)A>97~jQxsox_uXEM}LNC#pXP6zEznMpSKg|-}jT; zz|S@I#XE~|uCy!h%#y}Z%0ny|+u=4rn7lmN#UB^V@cL)w5fpMX4FAdYO1UpSElv5lh1FNU^W^{<<{$CgqQ()dj1`r~jIdsDH+-xPlTehO} z53=VVBx!7vZlZ2tN@OH~Y%js}J^0$hnUcnomtloD3~l56P2M}g0}eUbxqfz797I55 zs>@p5EPOn>AU@Q!qD7m$Uh>6|iDpE(U1ernZTObeO+YAL_J!0yr3b7OlkjB20eUxE z1D%A)oh^Jp;eg#eNuF$NHEJ~;+L3w|>{dfuJiK?N_%@@iS7Lrx435yO=x*_x>pgCV z(f{xK!7|DdEffHbk|^4)ww|R}?XO1!ec{=Mzq8g&;88juG z9aHU0U-v1f_Mg7`%`N#XIpem|s{y^R@E;-HZm-7jzZn*K&BH6uuv<@+d_+s9S~*=u zy&`QFP#@}>^FOx%W4y9!6)7s2?N&xAo*r4{G6r?1j zl?pj78?JBWi-jM>j?}Z>`#^ek)1!M$}@!lZGVqt~9KKfo1G% zlYw3)nas@x(hpv@(KS!)Zby<-0^%lf_b%SG&cr+#-{)3~;Lu{z9|F*;^0@L)Gsls~ z@@|Ev+6T`?>h~Jl7QWCU`B=&AnjBU3q>;B_=oY(cE8)ejx(ac7yK^!zz-uegr%%Fz z=NPCfrE{1JjEmYS8P(G7I2YH90w&!+5wTSNKDt)!>E0iFLKQ<&!S;Ne5QTq>rCR3d zxI>S5fNAKIOK}feNpVQ=RvO3a7ootHFZ(^Ahz6IK4TMh=Qe@;Xz!{w%eeYvLmdG5c z3*j|2aAdouju#t0N!RA6OH*D|nj&sZ_5Knf2m*xkKkY?-4#PYUwyrJ##DocK!8S?H z2c|d%3LTsZ2!qrEqp_GIR`L|_j2Zf@*^=$SlPdx*p3&?>iz)gSK7hU9(6)(bX{~Jy ze%OZPMJf)ZV^X}7HV?ueiup)+tR3h2mZGt@O3!vX7WCO#Rx}xyY^&M`FrYPYKI?*E zsI}_A!>#sK_Q2W*ZHgd?#O&= zH2NXG7abz9!SMu2qnO>=I~x@6Fwx0z@AqG=J*Qs=BvO>ls->?7KV58SD44VX-gB$X zTxJ-m#gP4UwaEB993{m?>Itx8Dt(xhN}C(ONcpOOH0S42fPq>L-_E^s0i8yw6vtRS zM^>JXyK|ZuWL3SQ8~6DKkFTbPORK<86^Aje=S3^Hf)wV_gM-5h>`RcJ{WdzVdAV%t zLBf5L>iSxKDmKecUR5Er1P>hl;tjAv{_y>EEr!dZ!v;I!LHsWE$Ljp{J|uBL#RX*U z)4Z6UP4mDs{*inX84Lb_;n1e4ZW-eeB3Aw0Ups)nn|T2)VdqlavFu81iFL_Wq!g-D zm+!=TAHP29jmQe5|G`VgZaP-vAa+h3&j>iqOXn?R*Z=pMb2Dt~AygAfeplRwnAjvQ zY9}(nH)0{B+m0kEu@a<(!Je;4Y&x(a3w1R*6SURw^G`HK#WThOXbJ^Sve5HR-VD!6 z?s#nvPro`ZXWjn*?t)nau-u#fLTaZY{JoSmcB*&75~4_*+j=B%J-BKdBPq?88|bEU z)g_cEevt{%%{aKS^|D_EkKSVRBSzoJ%ts^D%0Ik$oabFt^!Tgpjq(Y^T_(%uF?T)~ z>}IrAcgywa4)Y#daBsnLn^O{8kH+Q$XN?imfuspA8U|edWR1PHRrAWNvHIuAJNhBS zH)7+HrKST2%U;w^gUig4;JlE%o?_kBAE5ne&G!hLL7`lzA1XHODVnAu#^-u3M|< z`llR7jViaXRt#xOT3oLlG&UQ|LQ;Llkd%&=gj_&{D<%1k@!AI;22lY`i))Ez;kT4Y zCFPQ6*hR?7g0v*w3~81>OnITm@rshYyrVut{?+WdOkCi1k7b@pi9$`IJE||$cDcsx z)s9rV;#r`bv610X>a?%3K;&wvbitmXeN)VlGar~LCAf7p^I++|wRhU16vpvcV>LW{ z(&`$PI>Q{Qa&+r$Lfe*yrAZpjUzp4#$|CaI#sgy^SlwX$QL>L6%f189&e6FELHb)l%wm2S(WJApgx_t#Zelt1;u3s((?WY;kNl!A&x)C_~qNlPpEpRkx`N zNefdcsoo2>K_Rw>+M|b0;nt1G{n3wBSS6%r-vivvQf}LK+;cGy4yaA7WhMjC2>*^g z=g3Ku=Kyh;83-kMd>jNexUYN+oXzEZ^Etu&-e-k!>dNDORA#ebl^I;hu;i6SOLcs8 zCpbm0mVspYOS&_kj-$9~S3|3ah_<rTSNh^ZNI9yXwC*A9fUFVa$uuVBmgMVd$7OHdrS3YXXSXt`bG*%PCPhVwP zr{aiFxCMH?m|<1*=;55HA5Af80q|YXG!pZm2x|K=I)zvtLwN>oxlR#Va*Bp!y)vaelbfzWQa!XOdZO0s6e9Rh-2D8R zD=?SzxSH;cp^hk}M2)jnD>_|w(Uxb=gw!zSXBu;%1i&RrCj0ETcQ50TO`oexHgEAZ z>cu#~Ni)^|8E$*ZE+U>GP?d0&J{qWA=tmtu10*vz13Pq-0{BTtR;62TCe`G zRaJoekfn`oMAZSkx0jw?)@G11oXzSCsZu`EPPi+Sj7APUn$xs17fe#nVt<#zCC<|* z$y$AFeWdOAdtBy$^qhO6X^66)%x}h28X?E{k~Aw1E2sF0im|@dDLG8~Q$Vz{sHJ(1 zwGAmCQ+^&PKI0GbbZ$OvaLqozP|V!*`VDX}xfPkH=l+CyUSac9{)lYr3k_}id1LNI zdB))I7tJ}NnTg4iU%zK~#03)R&Sd5y_3^JXDRikvmHh_h$6o9jFG#mHU$$z{?M^h2 zjruXp9?b^-kkG0Tcv(dTji@2;c2@+0-3D*-*O@0YPth zSBlbe=A1mcYxN1KBx?V{v76QT3WQ(DbU0sbM#Y!-8?py)A(MjX3!6v$h5k|!OJFl6 z(4#%MIsZR;mAh1D5vfCIWh|)pze6T8d8qV>5yLOBb{d`HHlKH^%DqbIbM0IQ7GWYp z`z7dW0<(Fc!utoC(W}(EzqNE9J!RL51Dnj!(UDXQ$mAE^o=xwzFQvYF_G&hQR9(Sd z%dmp+1&UKT+>iZxacMCL=Uw8k1JLqFHId=9$*9)xoPL3Q-pAti15D*MFCG)gld!dW_17hc&(OSzHQ-9|hNHxN4d@ws_`o})sF(1h)taV4r{HtYW_j5ID7 zKE|!)D%Y(oue1RnFX#Z<&m}JY1DvFsG^k%echC2BLlEbfGV7|bahdtX3>7t;elrG( zSaS);%h$e|o@ufAknsU@op7k{ghhag7QwQXbvCGzhc?)Wmi9%_sEYI@YuAqVmt_!O z<<;?)O45IT&)58Gg%klnA_F$v&(FYbg1r_!q2HE50$>3vvTm5^qpo+~CiFu>(Zs1D zFlF4!tRa932FF%6@a`_JcwY&(n=~PTZx%S`zR^N**?r`$UF>o2?D&gIu7X2Mr*&(E z`%XIAyUx3RwZ$uX1xYZ#9Rls7J6-v#%%qewL?^)#l&-o?8H*6e<1tv>1MS^=B7PQH z&2~(V!hzv;ue?O0w5;M<_zpt%u*xG?r3QbTihb?8V8c`4hL%GYy@5rbR#-ub{1O~X=?nk6vg+xSzyv=71A+M~)!Yn&q_1CRdcC7OX)FKeS-!@JYX`Nnm&6D5?{l^ha6y zOI?roU$VF2d=y#xk`fo!yH1Ytj8|b~e?@A>*E}?JpAl!7sw)Z5_dWg_X};2fnT`VY zUQf+}t@Zm@YSZ(T1r_haFRlFt$R1An?(-aef6VLZKLFLR&Bi4}@EWqO5vd_7Zk1H=YJJa(E}SoS3QXvYMz13`RgSUpP^FD;wFAIbA$eGa0+Fz49UJt5U-k3h&z zgcshb0c7bAmj1hq%K~rpK|8emFa?&N?U?@Md}y&~^hUG6xN3K`eA9>8((}qiBls)Bg=zZ*TGOgyR9#`J$Cst?k6noVLhMV^Y83XNmnzDX1!>_G35a zhWMzHm6gJg;2WUu>+r2o1YBD&8sR@kfQ)aYg#*LuzcA2O=Dql%*5|n@Wg1uhC&V&8 zYRLl%B`i&D5L*~=hzHgyV`YSd)_}>^Br8A-h5Aag$dtCzm{MoL?>CK%tPV5CIgE13 z{687EVE5ki$jf4;B_#baa5Z~&4kI%YXL0@PvgnjRhJQfh74#H#c6|bS+)u_PMW=x} z5K^h#2~$V;Wgoln?hHxoi)|xk4V6zfzC8~nD%Zh&t5LJax~+*8x#nNRh#>xY-_^R7 zDUGZ{!9lqzPX%%-XIGwQ)1c`uH>~Ha*-VqGCyj4(`Ly!FK{=Gv6*^4<7VEF_kM9+< zTnXqW3zW{Qe$Cmp>I!us)p}|P_-$my?IIX)cV6RzS2!i@cb-NHNiL}Z4apUKlh2Q0 z-t_5%=78>)Gmlzk+9y>HvT0!@w4h(lwPk4Bl}?djA>_SmCaFjTDIs8A*^=Vxq{^Vin& zDHpFD<~B?JI~JYbe|9ff#*7+c;v+Xog5J6NF?H3jCP5b%g)?_@--#afE+R9q_a#uk zq`G|ggRnm7LEsfs9tdNs^#Ic`KV(wSy`!9W!*k<%p5o*OC88?)Vfa#6%M;Y}UWJH0 zHdO5@;tKrpABM~Nr^(yeH(npFbUW5o(f(pR94#O(J22P>fZ_=T*E34U9<@lm+yNa3JbJYcU#<)M1D)UNARcGDRD_oUtv;7;I>BR}? zCPW31u^d8FfiyM2Umzj|yn)cf<*-N2!7=k2dt}bo2%Z_nKF;+PB;M3>%5)6{4fqh> z0tjjOgenh*VLFkRmoHh`0VZLUkqHL&tREhFe2p^M`ncSDbQtJ?S~0(w-*F9^8+%Y! zht3cAVFL$nAkVnb0`8iVx_3Tgn@O3cg3-_QwsAt(&%|vef_HgC7!-y+TKV}q=t1Lv z#+u7;I2jnORZTG;?el*L1q{C*8mdsi#Sq|&4BZ~s_g}B5o^225zpnBMId$+^Q$}Ir zZWKF3(bn@jPOa}8;<0hIB8$4FGFIVL+Lfd$fwO#3DFfGAS6;u)TYG@JRc5st?Q%EB ziW#m!uJJ|z8lQaERDE7fM^>^%I!3@5x z_9-5gUuJd}Mbv31-=!8r>?do2p9Rz}RCB}7KAqHd%)dClEyLL7(3EH);JXjcf}&Kp zV;_Ylx;FK6%s}ce*<&3x3ZcS41c$6iQ)qDwQG#kPqg8R@5){&Xz2MDJi?}n3Co1Jb z`gD=7g$~()1}sic`*F)yoyMy+;koY+}iy?I|8o!J9GwNyL#s_f`Fz$+!5=i0#;+`^%P}DrtgV&d46R zeJiLKr{?8yCO*e`uIXIiJzhtXdrb>1oLC&yn^ zKK{8BUHRi*0B0M<%5}ed=O?=O=L0%hV+Z0#(Hgm-1nc;6t*IADay&#|^)EnoFP~*` zwYtr6BYXVdZ|B5KRG^2uMGb$oQWn96FtVxC_dt0B&xjq0!j7rQKshZA-)|z4&l~rw zIna7&FHazOjcPhTDkVQ;|0-@A*yDCAO)@*GqhNcj~Pkev3Byb^sThTe(@zvq9kWwIiz9oW4d}-!kJR8P#91=-+IlP3*3g zIvL0N(ExE!>7+A-iw+}QklqI$HU_;io#ES>4TjQ{`#fIKosBw4Njy$227KQsO8e=r zdGCz0C;xoFole3SrmGNjTmNMd7lW|U26?1i%w)qe4{cKODG}@cW z5r03e@tSgF{nXQL+Kuy5&du3%x6kS#%a&pQxCg5@+0%*e#%{jF$}3a;r1PIng)LzZ z>X=H|KO0K0V$jRq%=SpSge^YFC=qJi+Yay;r|*@h;$;r}dY0pcct4Wht@Vkbua^e7c2?BmG* zKlByUW(}t?U~qb0UbcNGez{Yi$pz#UC4uxZPS5yrcZLmeFlV^ZmEzz(N2G9!4-Li5 z+?+v4mTpdt12R6h7T9`W($Fzj-6X_IXj`{otLVY*e}Lshkr&j%o3kM!m>xa6n8v@* z?l=^Y)7KqTTnD{>Nk1QwJuh^&(AKGOH4E;0d%>wj zrp=B7J?R8=$e5rA0wv_VXg~ToMp+AQ+oGh6vbHQgK!0iRa?H1cXO|3xR;=7i;_=_0 zGcz@Fz6;v5v272Girw`Ji*su^QH$ClVC#X+zd*4^b$f-nmYw29_t-WUgkJ4Sk6^j{ z#m4+tu40d`2OEE9Y^nA#3zIw=nY~@blUe2(XH-Y+u(|E(CbTfYu#mFh!R2&~`#<$j zQAWmoM`}rQQZ}R(KUC2+w*y{d4*cHX;;R+ee6RAE9Dd3bx><)K;ts8AQ1iPFMhow| zsqo#X-Uytfd^ihOMI{v*R|mtiZN!O-#NAJieh{Sb9+;bDh|%OVWD%He^BM%1tKY(e z5R#r2HNJ(q;Y5o|3uSqNHun!52-oUFDx&tPhsT|{;>8R4HQOPiS=sshvneZ7!jp|( zpQ`)9;x_*SAaD8tdK$Y1capF)^gS4*t@(#yff$)u1l{23jBEvbtDb@vJlx@A@!s^w ztIhplSHe{3IVMkAyGmQyL#e>VEaH^DL#b-+pESm|qtoK^!ru#amWys!1VUD%nI?5E z%`*YCWANn1pC`04T;I&H>C|@h;Kx>4ECE{Y*tcNL+RkhB@uQQq6zulC!hp`;Uc0uy z#&brvsJ$){Lxot`KY%N`bU=mD9k1umVTVeH(Cc6QrwHi~eGqgg7w+QYWuxNRxE`KI zmZE{zZ&gxRz|~EdSf3RD6EBKJ{&M!r{!=l6KSiS<98Q1myo(L(p@Vp0L}7|L?7E^; zhGmF=cRj@N6Drtz18q)T-tAnn4m?}o(@?g>Q^AP;pxPeif#!BT)Lk{g*ppIy(Femb7}Xub^62kqU095kW@6Jk&gHpI$3IBQDc_Tk z@J-P1_1|KAts^e<`0Lc(tojq~v^OL=4^_c)nv(bSD9rC_LK1J;k+24?S31NEhF)AZ z9YB-d$Q8^W`rQCNX&V;s(D`>;5q*~MZ>8%|3j=>bDW`|wt8^i$#172&Icpc#1^HY4-wjMOXdjXtL>+ry}o5Zfx$Xz z$I}A;0gCP=l9T<5$))?umU}Y(a6-Wj&@9C-RZd}f$7|ZT9l%N+xhk(2S1|Nx?70MU zxu1^K)KexEJ++Aaqh8{I3_zhZUa+pqH$j{L4|s+@+Ons&;2vO&t)rgx1blIuq{`pr z@Y$)!(Y|K2O!Owcn9?~HCLrIX_OL!!)~^Wn9Xj?DIwDv8Ov zJ(lED$5h9&@pof-yho%TV@_R3T_sewd2b))C368N3c`&;(~S|NB%EB-{{eLLd0PB2 z!>Sv(kxiBTqdzGaRmf(Bm}qk0XH~uNMylM}5BD{VoW3y7E--VQIc$<0QQw*)zbp7o z^GR#8bX=l(mHVPW|CCuCUm-U;30q>7{Q8s3jNgwMw8|Xg7(oW=e326V%ceE8&r3?> z_|myan2KIFxe2xoLKOQA#hJ}U^}>6JJiDP6{G?OAsRjZtKdRWR7&`wx)+l*op1538 zB$wCiwCWcrY}I~$_Qe-ggGXxQk$PYG$3Z$xs)kEnWah9f45Z`+27-oTQXNhmDo*G5m@40Iq^}STtEGWzD0W z4a5&>UB))(Pzb6c)cs}*$Y;&i(B5qW1yYJY^(R~F%INEvtzr*ff8<1-wZX=YR43{H zgM#hv(GASGKx2=7CJozsN^&{a8%us z>i@W7O#=LN9RvT1%B3x3>>rP&{G!=A+U3cIYX2w|?f8KQc&^IhM=wR}taJFhzujk5 zTci8FR*}lf!mv_v{pYSSjmnvyMGgXEgZgArKclS*V-# zcJ?e0P*gYhEhTWo&`p!OiT5T|hdhUCF zyhTE_%g@VcFeD!ASpzXGekbz7t2ToXpU2RY#9f;HlU5V@a$%V&# zBS~8T)Bk+cB#8jQh%B1Yyh3ib8iQvYPuA4wYP7BoWQpSW$0-5?AiwVbOVJw|N zjzS^eH1{vJvH*Up6R=sN)5mriqb9F%BY=P>gO+?&o=$3KjThBWK6;!f2@_-X=!XeNMGg6nVis4e$`M%8ecW zooZ&C%d>p0IkWXoe_A7k);Z&xtXSv8+~{KveJgxwARsr`gyzo+=k z;h!FKyY6|v$Du7OU$+|l$okMWgj|4+h5CJqcwD()oMP$AvFIoRv}bIrG0m7Wm`(+4 zYCh*>S=z)L@6Z(?+};xme3V2KV^q4l*=v7cz@S(6x|~(^R-f_|jO$7kZ-%v9LnOFf zj9m})U-uB8UU%Q1F<~I}i7DSh8Ms}34>n|NWCiXOK{B{ZmL*vsCe&s%cEuZ^4{0r_ zhS=LCT)Yn3k0pCX`IL`6>dC7pl^8Lmhg!Pg*P0fyFIC5$@7>E#JDvjknB#6Nk9?ey zr&&iE3HAg@@Qg}~`Pz9V&k7>S(yet+{yk zMDgki;b&pSVsJ9i-ZfXZz%ghGWoerj+`4p96iGt3QI;dVjxk5lZWae&+q{xFN#NTn z3D5U0l-L{z{09?5@E!;<1x=`HdGa41Y>0E8*jo#q8VQhsKSs3wQH3 zD^u%z)8?v49Z2SAM!X^9q7A=^&BpL!qWTd;mUtw{X#MN*ZeMd?4dk_k;J}y52r9#Zqbu@s?e^jpEcW*Xjp$g` z8u(`+{d=1Z|1p#uSx}a!1PnJU&){V=olGfHZK~IPsL_e1M;+QB_s~{o=mPHYV4;&H z@HSC{v-D8C{(Y3>?u6I84DhUrESTL_!U9Sc8~-|{oT^-B*U%0yEH!zIT5 zy%9QfN1b7FZ42^{`>QtB0*)7D^e0hlDtS&xRee~m`Eay#}g`_QJ%k&$fI=ucOyK!-|q&=mYXW}w2NKfhw{?f7Iu>R-UOs9 z>#w-9l*~1B>NnB{D1wq3vxN_dBiC|UFGY=iljW=hf{h+P@poK>xtw;x61u25tsti@^4j-PKAVTF z0>O19rQbaaqV(E3Junaf-C+N)ch_})Ryx?dafQiq7ActL%FsV^*K2 zhQac>F~6-S&-2%in^>D9DYeS`xpH&eZk_NgNk{;XWwUKZ3AAQWB%?NVe>@|y^osp>W~M4 zV{iF(e;8H_8)y zJlcTSj4MTNeMXKgXN!eUz{=H(=56CD4hgY$a})d>4s3^yE$h4B<;hO=p&CChVeM-@ z#ZID@);&^v(4+zP-}gZI^+KP0(?~>x%#~YQNp;d)StmsHR^5*mdwLEO6ck1S*M$fU zn-L4hxEmJ&5%oO9b|}_XxP``+tP~EO3~?^cPq2PA?H2nA+*mY}p!KQ0e-+!Zt^4Fy zjtkXU?J8=v^bo2WfgQR8;SgPjH@K;m%R4TJ4kT{bd=VD_@qAcVuOHUaUPh6G-MFqX z^+%hwt9BUK2W@H}nzj*Pvog*ga1Fon6|$ylKFq0TA%N?_NI*&#=LWj5d!5iQhFbB! zy-UXtjmR`+N)X;~(~NpddT-~~=`zv`?hSwc>Yino@P)r4!UDE(toeQJKR^)2ubu;9 z8>-k>b~%KY6NLmO^ShuxU8YVU$!iE%LMVSohph1)XY$DMaC8*Y47*1as#T`-+9-^d zvnUQ*_WjBF@ki8kig8HgZ$wzDQXLN6s%R*T#!N08D9@~4JZbLzb^u!z9T(XTAer9Y z8g!{JEwE;cJ+S?HrzTUn7Iv|>brUF~+EL9nqF|iKeP6-FF!5X8dVF&d?Xp`uXYq`b zHIJj7V->en%+yK$pXzIwqw7(ITXSVPIrhQhEidxiRBo|)-@N>0uVSm{MBG z6z0BYTDf)&ubGxyQHl^QTTS zR^iBbd<~k*QLb(Rodr!nz)a;IyqSTl(e+zvqv0&mRqkCQ!Mzuo+5R3KmS#gooT!=r zq_nQs5PuNCp&z|@F_AUnYWKij1}6;uHAM_hI0qPaxvyvguR^ns`O5E@S7Or}W{Xd+?BhRd*X8K{46ZAEr%al&UUK zG`4Nl1O6I@^V}SW+1vV46HT03WBgqkzT2H8n13M~HoYCk=f*>89KpIfn9w!qDB_#i zk*<}-ZqFT8dL^FUY<@3CrNbH>)^v?LEIMk9+?qsVIDK-PsjLU5-g#q}D|4pB0Qv@$ z%#DTVS#sN6C?EKem{w@nQhL;k*RG(1h=CX|RNMGLY?`}pP!P2rvsMK@eZ z$nG_NB3uVrF^cZ+$-;|u%5z$XSqm=!JrjDs8n* z`47@4S}Ar{zgyHH{g2WY%%Kayn^5$Z@R3+C3~AmFvGBixrd#8Og?gWsXg4pmjy7z~ zFv~4enL@*yNE7uE6ng+!_)XAu z0NxCq;A`t&%bOepwlD+SrO${ShA75i9=7w@1U^r)8P5efThH;-FQp4oInQ4pnQrHDhfqVEDP|jg!+-E@+GDv#l$~ z*z)z)Rh#pW>HvL}uES83rMgMV`Y{>8#f z{l19&hJ2ThQ=61M;=s?-$>Z%i^-kmcrZB07YnhGg>$)R_n!HV6*&48j#Db~I2`tI> zRh)wH2ijz5KgdKt>bl03_l@Emdpv0Q(EhryT_*Goe#qm58nIfDuxfhB3t^S#8MX?3Y0J8BLWx`V0LG&rt6>2<8C$HWz=#t?GJdqHqQ`wisME zmMy!IRRH>J9mB$^SYdwx+;p3SO646Y#VZ{HP{tx`fV9(whqcod4!;F zCwsQInl+m%Olp)#w@}uq?N)oQx(Vqjw0P+x;*r9|dPw0YFbz0LczgY^P{h2=r;si? zV5PX5b7#Z0HPFMKXz$$&h?PNL9b(p3ph>V=mWfSRCwR9h@UvmI7FF%02z*vw_;}9W z-_aCZ-Ui`6zPP$mLxA9FVsQ9yc;kjN1dg~->mXu`{;1#|!exh7!NBB~Asu|kl`-Wy zfyxqHH$6q6mf`Z?@lQd!Ym_&HRLqS>5y2fF1yl6#2n(1zK}L;m)FnLnybNy>KoAW$ zFdb|%YV60u-e>$&h8DYG=+T$?ka@+hx1M21^d0&hga%9)YIR`wmEj@Jny zu$|zm8^y8G>N!4Yx{l^9=(;$5kaFlp7Z$IG`}#IJZjZ|a41+0g4DRMlAlw3g=tSn| z1eQLCXnyQ7qGEe4Q$$`^YbXO{g|$586+v696`LKChaD&NtznC3u(DW>jK zKix$GW2{A?RA>`Kzk3~Kk#P-<7?H{;e4M4)57w>6^E~e0+%qvac1r0#mwuf2p8j(< z3rV=Z6T7zcF8I-^3rMrP>xLLVsgFLJJQY9|&#?dJ6V|tiWhEgpKPb^7?1`tp7ZNWqu#&TiLa##447!J3YhDlae zi~@HoFRh}n-OFtuDnx@xG&aR@KEJwmq(EI6mDyHOsG^eNBO3q@st^l8C@%2;_h@$F;L3JyQ}RZmho z9F>5GS5Q`I#O;+$&EzT$xx!kSQ5YCYZcI8x&CbH-89c zDZ^70HNo>2whtZg-@JzjbpvDEj|)Q!Kfd7sV@N!}u4a!-8Y9AJAsLbGSD1Kq7In%7 z2?m{sH(R&AIBh08o+9~G7JD{A>Nq}G&cK)c^7+D#9J27al_3?lp%3gbU|n_(aQ(AU zv~K@hnlPI49QQB1SA)boo}*)lvkF4Vfo z`y5VMb?1j#6}ju9tfnkss`=p(D@luId)%L0rIo39`})Xlc(;SHLQntr6GR6N>EO@e zkQidh=>%;9OkAs6J_b${VhZP=(22IWj(3<5^Gtc8w(n!wCeusbEG(xsTqef0(I;zB z<|7+i7fqd4UW7&*;nQr<8m^~{5OU~(;x%1!2+Llyepo+cZ{BE3(+V2^@o7~JrTk5= z#dy{Zd1uocDRkzq;&zr(IvmSzJ#wR^Za+Nb3NDdoag@D_x-tR zSm$6X7Nk709 zWPz;{PO*1|4fTgLovDrM=YIgFPL!<$T}+?12kpe$1ej$fEZ81f-+Zm&dcGYc@&FBV z_rf%4v*ta-kNo2x%Hfhv))m*`gp~)|nIHl!PS70$v|h$lYt40T%T#SXfraKR0oAMv zm3w-tP>zoIK^r;0P4^nVn0c&M#lH>_Ag-zghzR^emiS-w9!0hzWyWryaYlk+QDZHD z@unKJt?I9$Y_XYVU*UP3=QN^wl(xA`&Yj$cyTTliz~n? zep6oEgYXuerm$NN;tuv~Y!oqYv!#4fTG zi7_^3B=UO&9Uj>ORZ9FtCkv&DIa6pGu17eFVE^vm!2z2s%1fkcZD^={87yRKpxXx| zr{W&@T7&Wx+E$hDl<`&A`&|PUU@^?|X%!ylf05lh>+q*%Tj_P>xxS=|f1 z9^nRl94G6GJrru%?NSu#$2rhbKFq&BJ-0%-qCDB71B))AuOdo$3zoGbT60@`=v$Wh?Q@$p=x6<`zSgqrE ze`dDu7r5S1kwehL^?TnJ`o%ewYgbK5Zt~Hp6f;Ikgc4-W$?7uN&wg&`27YJZ;uB?80XA(1F_|2YtgDdR8hSMWI4FovaOKj5VYE} z53;&nEsjtEj#Ry^7OSb zieL!|AB#R_M&f?&h7`B{?gSSYN#pGd3!Jia5P{L1(7Oh%FE$&|z@KX$0{^l9gn3mX zV@sk3*4p8uGy8fNuG9IiUO_Q)&EXg~4el&B@-@8LS;{1NLP>>>;|;&;AnvbQz3Xl{ zG>VVRjjZle-@ja$>sew@Q4O3seej&t#2|aFhIF5mNE|Wn*Ac#N;-V%vMmMc4{=!YS z(aY~e)N5Ie2V_~XqI6+P7HSP6;@XYG)re(TppR#R;+rp6X?64tNcQ+y?Cz}Le+@Wgh+ zA{M0c8A<5vvQQqyLYJ{iv7HEPV+k$#p5eZ|FABXy=nfPZiG1DQX?_!Ut6XnL7$j$# z(u@$*0hxa^2#I)uG%eOz!+``j~wBVBq)^(G!Ju(#TFBR zko3-gS*Zd&*P&6KpZ+6Vjc)bVGFK4A=e>5dCcTmiQOg_92+(-y`neM{q(Hf9Bw>^3 zGk^Pve*r`(>L)ga966uOq6Lt5Y0BERtJk8mSoDJ2mgzyaL9o|0J-d-hvTSMC=Jwk@ z9jb2d7pLLbqF^@p*XKAJ+~WEY5LEPI&0E-dnxp-iATi6-gzgL}+nKyfb$P`Yyw7mP zNLiTVYHea$CBx@$LzYg*!o}k?y3=~b%5m;QCMJQj23Lp--X(VuD_0}yVF$c4)U$cay zYDc{4jG4g%nVeoHv$=2Hz8Vhn6sCBTf*62&ShfFxqh{)YE`pW75g}^~Bp~EB?d&$= zC#@(4YYQIFVBRYJCU?;%$*=XyTPyy^RJRh8jtP#Jn*RY({sVwPYiss+nccR?{s4z1 ze+U;!5jT#2b{Ulg`QeZl&P{3woraG##dtsiPmn)UvrWTK&$lB=IiGq?7 z9fH~6-|Nl8waawKr$HZ?DPOE2^_pSRLDmMCYWcRiTbO9#R_J($fzUYcu5&dr47PA+ zGX>9rj@w9~OQwzc9Ir4qS&vz4{Uu)u?uyjvC*|mSXbg|`EJjDphCs)Sn^D(40zyE4 zEk$gsfyYRH+5Z531P%);Xn!zsT0f||cJ&1kDW-~zm~2`$Yu++mt~|P)+$dze!o)`Q zUc0HFp^68}?S$J{W5j;|AlEYNifd{B0T+x$Y|LKw8l4Sd8k6IBy;f1B3(hgj*6fX> zbFzC8AA~a27rExT+Jp{oG_gr;j+e|FMT4S#t1Kz+!=S!iSLb+m7YH5eo794~19MF2 zKl&!N8MlQ4g5MFDD?gLFD+LFNnR{uJlYvg?Zy-ThN2PsLpmY(Hf(8E$QiepwT#uZ`=eye}H~i%~ZY`(i>Ji#=nXzSo4xH z_ayBd>&9E2_Smr}->a#sbcl0?7?TLmA zp-pq3woU7@Vv07MZwh?I9#v6p2+tig{(z)gCGo3P+=8x_?=-FM_$D{ZpCs)ar|L!~ z;xoT0e>#l1P5M6G#PAUiKANHtPkg1)LoC>a-BJZl|LsnE023X@6$LvW{4%Vv7)$BB zU)0TI9Uuo2faBH*v7Ru5kFBZbn0#ini8qKkr|dz<^m^Qvf_9F*H!03U%yvkD<7@ez zxlaF;tM6!Qtp0%;;fsF6)SW2xw(YXGD}+FOL%Qy-(Qkf&grW5*YpFT z(Rb{@l1x>9OV^suTx5s4`3)F7vCRLB%4R}aq4w3$S?^pr6$U~kqn1_oRiCzGJk&Q(F`%l#<9AhDT%&FlTh zoE-=}=5Xp>7jxD&F%=AUA3?2HdlxW=EJ9ClAdYu&v+)M*pBlNv>ZFeZkf-(fu?mI` zrZj>wWS>8BOJy7_-nU2b z$f=jsy39(--!Lspph@vabH}f4{??5@sZugE^3TY^Cv=Vn zuHRx9a(Q3c4YHr7n+nn`W-<1Wn@yRkl-&iS(ZA!c zy2~^5WIa&SW~q+Sx%!yt{HQKuD`}*#&g(WsPJ}{=(C|& z+N`$~oVjB>apIJ+V;$Co(6}M43;Ib34qrn#$2Epl5lgx*9?;8BE@ROZZnV(}LWeFvVG@9MPkD0m+R z{^c}#5qr|~Xsr8NJK%mEzd-`EZfQfDZ^;PbmedXN;^2q*H5czpOYx# zC@(!3_7R02g^9*Z*!be?P&g?5BWtq4(1>ZKRH4VexfIO0qPf@4hE9?s8(ED__m>wt zU%!EjDzk?!1<4k~2T5qv%P@>|9ePNOx@1#ZTrQ@jb?$rT5Noh1#{Rx8tM-kUB4jsQ z7}h%C2mcguWG7?|iu$wPSVSd}reo)Am=#gYXn=eDrz1KeT@><(z=SH$=4!!GO~=ZL zlxRevBO2>(I&Zc%(Nf|A!p1EEMBI8>NZ}dYv zSL~wx1}rZ4f;tNdQf$ulxKUz6WX{d-GVNy0O<9P|%4qh2drN_33byC=$46^S{eGAB zZ7(Z)-$t>#o)@{w(DXlKVYVJs|$q z4@%c69z!p6US4*t>OMN2XSsWNjJ(yKb1BvT(Hq6mnlnz^sYt95D0R&pb-F$C43Mv_ zeZ#}R;50MtKfvo>R(E*LpZ0}rc~a9TQ6}uKOs8rv{kr|9kCR1Eo-dS1?>~Spa}1-` z7lSRmbnClsck<>oV?1vdbtOu3Mn9sDXk~X{`RYhp%A{iTjQ02Jlep~Gy60rxe9YuZ zRT%;MTH=q{{C>UNbv6pO@K(_L zX@~0b$Z49ZKX?h?eD^rQ$wJBVqhTXJ?cKxvGEoYN!P7nQIR;xsp1xe^F+CRPJ&sW- z;p{thtAGkmDQZ1x-u1NHTI!o>loGX8xfLHx3eR+Fj{6vw)hh;{#w2Z-21l0ll#WFCjKHAv6;7ZS!Vxim~|F|0*S54 zHsv^#iewmZ8fIY4Kgqcsjj@XWv@^)|Ib8J;>DgWF$g(S4>CAPjv&&0!i>o(d)Wrc? zG!yUMTm$l*IOq9mc^G)^2vO4J@#&6kzc;^zZ79?^^O?}a3Y3@Yjt;I%s9%)k(~RmR zaB0zNKPZ00_9B5#TbK7DuvyKo!uf6uP`;h)Bb}yc`sFb(w)-UYvN@#M`vl#OpIf_( z_6u~FAts_!cKmx#I0ONUy*@}(u3tvJ^Cc-bztC6=x?nNWDzdrZ#TPF|%_Ifrm#l#~ z1^0G;)?Fd59KEHs5BSE_OE#qAnxOFEQac9gNKC?(K(1QRgy|0D%?S|HZV8MB`{B`p zO7=L%j*b;l-XzLxYOBCvDx*P5V#Kf}!wU=7-0fmpUm48*4g|V@qE+|9B?*rBy^+W% zi0lN>7o4F)9e@Sf8vQ=JwL7bZ#o^a)g5>PazSk{jFEq#Gyki`?x1JIS50J}kxa%r( zTbj6=N8BPNVnHb4LjpDSg5V4av;0M>Tn#~7-rLzC3Z@?xBQe+}%uXoREG05Ur=X<` zVCB3d-R60BXes30hn;UxG|`^E((Q0pym$7gZ|lh>HS|6kLkkvn@8hq~1+C@dLbs8R zt71hw*z>E##>Un%wVSm-1AuTMqVo_r-)?PKdG+b5HSjs0+LZq7$=+rH*{^VJ@e;uE zvCE)zIe=-a<8+o9#&meP7(qP2bJ7XC`F%{}n)>^bDeP-Vc@hqKb z9%`l6=@qBrRpbu2G>;YDSV&Sy{0Fcx8v*E^eJy2r#Oh*_K}Icq!u$8TGecMIgJ7wdpe5(X177H`reKhqySdpwxPL}@S;Mcqf+pT4y3!22fQqgHr2wb1sZ-=839 zeQye}igP9na_I-}iqxg$oIjXPI((NNWHiX9qdCq`svygzkU?5MvNL6HvBM~1>BU&y0%a|LbJ}1~XE#N= zRMf#sZoTVOs1!^tFOO;_I# z&y%H)q?SnKU2(qN@Yu-)XTW^tr@UtDFAvHj+JT!Mwz!%Z-I|zAR|x%z@Ogpl-#*A@9j&$zu(nte1UzBSki?Y=vx>K zbte+0#d4k0f*8XSsDyZeNkRecBq@Ixp9svc&$r=3P$GJ{ z)}eFqVQO>+iR3DB!)HZ7E)|s-lVO4ef>~(2R{I@%-^%*F_ET`-wLVU(k-*^CwM4cz^ihA$9&}65?CcvI`V6BLRMR zEz0<E`V@S;A%Gyu=Xubs}^L^#P zt5?>#9LWLGqPitCEZ-ZmBJ}HhO@BuF?)5pT%Rjr~DG?o}cxgseB4Vi!Ds)rp;Ldxd zM~yWLt1WfW#@0zKAC@E|W3`}XG1811jG5%t6@WGlMrpH~G}RUvzKPxlm$CBqtpJQ0 zU0UDdXbqocrh$lTd};6VyU1JK0khmfbqQi!!CrnG1{r}AlzvX?r&L|#D8HSzFAAIi zi*6PMvk~Gi6FGfh&t2iBrC-m42E`qJp5_X_5RY-nl+(;;K>qEQpl$9Wr_rwaIGAY% zu*2FIKYUqlB2pL8KbBV-LpNYS@0?Yp0}z7(i%TlVEh_H3>59>llxmo}qw?pd{hL)x z&GhcOQUHBaUMZbwwlwn3%GB2i09#u_oV>{kT3u3E87LtXf3B_O;vB z<4JwdFCfwA-zyyDrrA3&1tltm0DF!i_pD)_dN9xK?2yqm&Yf2b((;A3E9R( z0rLx23m8}!3w-#*2j77;XpYEk1%pes%3O^mKWM#4IvD^S*vy=mIheyhTG`(Ba^5?5 zhr3VGvyJJ-@-W_1I%DS?45h3jmD4mMzW*NUs$j1DM6JPT_|V*4d^7o>mwQtMnae`7 zbXJy%C*?u1TK3yI)O88HNt^w!;fT+Ym07+z)Tr_OHM zR*~k1AM0zJDJh<5QZQ4_`omvtNg_&QKTn20$?FREF5-3arfOC78T8XQ<|z3ywQ?nt zvr2<9)La-0`K2`}n5f=)CVP~BdkvPsY3oC8Oy$kfzO9x&s9}_pew!^Mcw1YRHCStL zp|rw_+Q^GOL7FR^BC&3}RbRtSXh=L`-E9?(;+1H5{j%bjT6v7#TmCqE?HinrJdIw> z*BoArpOu?`{u!S8;BNNuzjNos;F)fI`V0L}AiZ0K%MYMgy1QuNf|p~3+M=R=07@pFOuf=S2Ci~7l7?f40wR3#Uw&qK=@Ws^OtaDZ4cWfC3Gw2CHTO+f-dVISwvEn& zRRzi|9*if`h2Oeiw#`TjxMRps7x8$YLR$i)CzaC`wH|%!{s|2XF&AyZ5z@ad1qxl zzc1$Zc2HqI)h!9UFCx-qwYb*U^c0DJn{Nv;Z*)|JJ$-o!`n0H^GkZ4QSTpZx5D`Uf zgJNGH*vmMRNuhqcM?|+C96~FgfdHyj=a-QQIWJ1NLyuVIFud z7^$9&({Bxd7UTaWQI^<-4X$`PXD@R=dFUhWwvsM9Sp~b^BkSBLXZM~cJ+=vrND=&Y z)Y-I3Xc9%AK1ITTSbL-+9s3Hx^BokkpU*hz{0!7{3g?BALQoPyD~0s~dBIisy#6cC6xj?1SL1 zXX`>5xA~hqIcr9>oi-d7vP%s^UgL|)A@>NXL*REn$USuMCSG|Uysy1=2W9IZTw*2s zC1~lP+_ky-!-eg8WeqN(xE$XaWYGKHXU2(J3M$RuYE0Aa?7Z|FujY=DwwwO};21)5 zd-mN15Y_<|fcQF$vb)t&59-)qgdQp6^QHaW{w;nk+uNH=svilD|1y^o;)-oj;fh}< z8RnkUud;QB#|dBtJS_u)PL$>`Kv~)@L^}%0iS)tQAsySJkd>3|2V#q>^A6XW7kqam z$f%WC{_ehP2PTiS_7s7=)))4_v|TJ!t|1RD!q4pav${emt);dlLKe|mr@)m{wKN7~ zg`LTyc)+h`!H<7S$OWU?T|V6ix0!oL#ls3~#zeKE;Art%0c403?;+ zP+XhEhD1kJLX#CK=Zic=)`LB}a8+N-uRjEHQB9kF#e?gbTV21zD^K}_KgAyqa^d=m z@Tcg5=0NYTCGP=}XU?H9;{yv>aeUL_-hJ7i zs&x>kH*B!Rw7|$_Q>N5KgHBD3D7>ONy13V=aQh_;wFhJhvobhWL|+dP;W_BN1N=qT zm3cxoJe5!Wo?@{uq+|V`ebJO+*5;AeT<}-S3LJ*Qf@6ukpl$faCgdkDuaLG%++J5x zLH(+|vB5uRL!~q)cU&++;7DuUwi;94c+h~q9QV^|?|KquE!L`FjpBK16>n&1vC&p9 zd54mGScUy?^0U_$jU3QecHw1&hr4|>8u62aNgE>Q`22xE+~J`Gi)${^J}(otLdrM2 zR{ku`ln@v`%nEysW;(_xu{DHKYaQ52Llxeak4cT4UmDBrVVdW|L$<*(1(sPO@zMU+ zU8EqI;)jkA{Y@1CT4;dmh*Il68Z!|DBGVlzRdM<{fhlbVa+Mj~xh*Jm=-PN?S%JgkZv;u^0R>;v$=nNRk|17w@o;pDyho~l9F|S=`MWxm^ zhFmO`h;7vEIEYDRBCqO?o|@rDEbVdGQ)s2yFQ5leiYZTUO>^52)d-ZYpev|8HaJWa z0Z;yhS#=X?fLYyug*{K!^{UwX_vJF{^7VmA{~6otnXLs(PsM)7a@ES0+j+Tf<&?b~sn`HCYuE1WXqDtfq*sU6;4Xj#oxKdxLeJUl&Jn{RiN`c-n)I^sW01s$UEcjD)#9IkAekokmJvJH90CuBLc}I@$K`KjW9f zCXcAUDbHaA1(qDf1JTtTU2ETV@YyKTGIoJwWi{ZF*u-L%ld7qA>H;2Yz9hM%G1FBP z4?XU#%CXe?nkb|p`PJ_)+xSg`lbx+UmfIDo(b3L|H`jXDJkdq)uH}{O;U7)@Ttg$_V4&TZ zXgtg%(%+o`kqQ1QOx5x3#ktGh<}f021>v><+O*o*uAaX+)t~5iGV-U|5o@?Qi^ZMZ z8qaV14Nv7)9B)(1LH4Yp@grgWOQF{m1Bior1s`oadsf~(_mw;NbyF5fte7yWkbj$+ zjqsg`)R+m6pF3;!;$C2PM@6j=bSj9|71d^YOF3RU-DVp}o-2v4-xE?bx}01yUf$k5 zF~(I{6ZCOP_p6Q}qV?k*Y4)e2kCR<0ENM$k%+bzxNzeGv!(d1pIxY1tD(mFk0kp{Z zXGy}Lg7ETMCuj@*@p|dgmZSd|-gUf$h!eTUffY&=kUW=n!Sv%kXF+^rl!Ip6)kI#* zm2ZV_WJ)9aG&|HR>lzWi?)c+Bz#tcOM}73G(=7X@&L^JyJJEb#-_8ef5Pbr0rNALN zX$=VNCLK>-h6u7;d$;smBV=p6UB|3xK+i1S;X$+=JlXl(znDELYG!v8AuUgQkEr01#>=Z&Hc@rS%8S(b09Mnx35KWSTH zCBQ9XJ~Ww`mrK{4TXI_xNyaql=F_#n>Mmk>{)v6fzuu)QIH?(kXxVURB;sVbWC%NB zv<-Nk%tvjiZceqF_G(Ai)cwIv==NAZs?9e~cY4^{=+qA1n*^qxtg8+8EP+`$XIP17 zWDohw#|#huc6{vu5K**R{}SJ{mfDxUN@TOB_q=8d55)Hq+Pl`dT~<`EI7bL_NpuBy z9EmaS^&fuxkQq4r)~_IYXrK&47enSnJMydN-?f~1$N@t5wx#aCv8olm8c{r3t+OlZlCGO6xS-J1WaqjWv>)t}pWWJ~%manpaq(g@8m&PQs}EFbf)cCNEPKyyP`W;HbHCm3+&pdnqTOIf*ieI4Zt5;5E677Gi~PNT z=S8x&{JaUxa7Hx`ZL*CT-ziu49bul-)4|y}Be%a#&&Xyh%3A=jFLYj%R0QpPFdwT< zQHzfTdiy(Xf5K;D3w{Kkk!<7$c*3ThrNs?vYXk24uj<;J9Mk)v@R46hjthZr-~6BXeZbR8S=npb83s`GHFUun=l!SMx88>w$5Ifekw!lWvM~rG8aZUWEh9_8)%q%EI+J&~vBU2A9+1&QQx|^<9jbkxir93>GUKm>3 z3cW1C2`>aJ)cdQt_beeVY=R?#Zw=L}-CJGLENG;g(KN}Jr);OaTP3mmsb*G{`Ifu* z2r+NzHSq)5Vfn94$>FuZAwd?qdUeDd*(A#_hCM{ z|D*YH$$$6GN1E}|FC&Xvfw&9%g6*z`n#0ik9WW|>xbWRG`e8zA!N!6!kRu+L;XyQwW#nU~3P!Dr2SOD=T@Mt*8HQ1KS>*5n(Tu+unzJdJSjYBEgI8-_czcwh$@M#4HQrAI#?^d0llc zyeAbx*n~l{oZy;7uN@3B{4IxF`w&2=BX6e4*zx{zqvgQcTX(}OW_m)FLIM#j(^$pS z_At>UUxFp8W#G4M8B6;cXUMPJM6Lz6Pi@rDnc2g)R(X4=HxC>>{0wh4xB%6)2Zd(0 z6$|(M!IbQyb<{gxGPaF5QJq)QZYrxPC&WN>di&w^C88Bu5}*nM9`dhUH8Y?U3T7?V zaVRI%$Odw}UjEp$aUNp*&;f=dLNR-Dy*hH9o|~}*Zg1j1_1O!{>a~w&cHRD}i6|!) zCI-Hehd=a^lGJ$aM}<^5uUUE?WdXOIzSNu5Oz@b<1kCEyT*f_34Rfxg)Sb%vn7_0x ze)()rNzJK(oG(+7B~Qf7eLd+n(ny`+BH<(1zcf8^y$h!Z;ZN*nN)Fz~Jaoop2FtPM zuM_-rot^Y*n@eece%Mj5N1OQpw7WlAOx4$u{dnWraF*2iy- zyo`GP!6r|VDQEvYT!aA^r?x;x}* z+|ieO9LJX?$@7t0_HF9GN&f(kMFyw7X(`2ge;j%GdJOgFx{v81ND+~v*s3C z?`u+|(I#C?safzPO(eCHAF@;INl0_4y;>qEyH0(_m449~b`KLg11MQ<80=7)M(|~b z8~Qo%4-4-&2~p5Yn*)4H?A*?m;(ftRp=8ys3_kFhW%6*&r@W8xjCUU^3G+b zbk3?!sFoI|Cz-q#;M=)XLoL4fl7*W7In@N!-MCumQkIF_Bo3P-ZO)*)>ul#qX3G5g z+WgZ=S%lNE42Ph1EYFgs>F)LagC-xtJOjquE&VPU}mIH&oLjs>Be)ds@ z;(82k6Qg|skyRAt-wQ3aEg!qw`Uqs;3dlFRhi&(fv!JtAA<^5SwC!8*yeLE;a@sZU zElk}AEw-W=DW>#ApOJ;h+J#QZpLJj60AzjBA+v&mbqza?g8$n8W$O*RFWiIMt`GS^ zS!1%e()2CPCjFUnZccZ(<-SU^ARk8)66=EcbObvyi(6jl8jiFd$AMP9>g3`0>(w3y zs?n#j4;N%X@Aqe*%t1fJ2ihhfU@TiUO1^V4@Dj`gTJEek3|W%3#AT-qZ=$r?VNUVV zQ~~Vr`H}So-?^%+aTx$)?g}B>h zMf?WvkUtEVeH9}y3 znA!cMGE`UlLMK+r_fB%K$?;Fx$&9D3!;KYeszHmntEp*3cBON$Ox3fBmwHSJTJ(%j zk{=Py^&Q0&>)3DK>QNeeF_hjad^DWuQ>{rcrCeq&(iSJ)N$WZ3d7;o)YU1GlP(jcv;xukdfbWMC2a^PE8WFe zm5Z+mq+vmOonFqYD-sp&gr&Kjol3>OYJA|yx?96+*hijOc{8l2{}IjWEI*d|SEoV; z-WtHRpMAGJ1{+XtY|qh*N!|qPw|g-RKc3unlxZ}7Ta!*l?GQ^pXXTOVlg-Dh#~-w% zE}&g2B_hoH{zuQZ7xd=0D%@N>Znc$_*YYZJMT^M$m@mrFzniRMN?;SvBZoctJHtx- z-H&zk^W5~7=yo>cy~HXMbIr4NGXlKE(*rcqgZ|1=k-$6OtykWwzpeQytxD5(7ucj; zztm{sQLjIzE9Sjzf|it&*X95L?Ow-V1KdsM`xDgp7ueU( z!g>fuihkiGV31fC9CT)ib=`?od=1XE!C7-E*AT z{}}Z6bI1p*Hxw0Ug_+d-%jo{FI6$4FP{OPC7FT~eng{SLyf3#_A)z|w)(b}YMC$(l zFRs7H!%o+AS;Vw8cd5Ko$}eH zB95`#lUMwaQ%T=-sNKy^Ugc4*@1+IbsYt2RR4=WLgUMw@xMa7!*uO|M|_NQUeY=SFY0T6bS>pG_^e z%wcnR*N;a`FN1Y9Qwrtu6O;Fm-=&V01@A%7Pdkp_&0WCBUX*`fwB%P}Fn%uJ+iyA0 ziarFhLxO^lb~f&8=mzp$I|M_ODIlun8_>a5^Wu`R)e-*1rx`1}xUYvWBt4|1%80`(a7y$v@XC9Ji zLY^_kIq^^_Z0d|Gn#OmvD-~q@ z?77=DC0fN&73{VK{tgBMLw19Y*I-e+og@HxXXv`V^DqVl?IpR zRH*ti6kR*%V=t3`WW>GWT##}b^kBEzRayZ~L)YlFDy&EfYu*Hkrp~{9UA|zHv`}qk!#8?OuQEIHdc?D%=yGIJBM3 z4@p6|`6t=DUu(bPOID3gxT40%BeGFH`^h$hhcaS`x@-9_tHW8paFG3`uft8C)+?wE zvse4)ol4Ww)<3IF(}?KWTGFD1Aw~VFOQ$}Fg=eq%0^6U>10Z6wk7>yryo;X(j4iz2 z@7cRlWN0{v=iYa|s>P$dQ?|4J9OCc$L562KTbHpuc5WSG>~`G+LD34jBD6v(a`~3N zjOFx49dipXdBvr#a9iN_L#z*0Xyx>??dkAmI^e&X`|rfq&hrF1n%76KX99cEy&5FmPkfj>KT z9zkKo9WeZoq_J?Uo#ih--)|-1*M!IlKcu6F^4TwWv0oc-p*jD^R*W66zOX1I5Q>l2 z;R-n$Z=~8zuB)4GoNcLLAK^rym+LC`PyQ8I?m<1n_8KQ!-6yhBS{ohXZ*7s@XKmXS z3-9I}N-^sSZDI@G{}Birb-eF-$`iw;eRWtKp(eS$PJ)Drj!me}Z$pf5teGn`Slmwn zaW(3+)i<~woWtBr8i^GrV;1W6+3)OyVJS8OczKiOEE<+JI|@uut6|Y)P(1M}`{c%C z)vj-cX=&xSY@-9E6yqvZ@ojzIEBfR05x-7XXvxK>r3JE{oI01PBJ3m6uO2xeRG;u` z!G=zD4?ZppJ&FmptOUWw*P%bXW(}-$QwT8t+vjiIQ+*^WsrjhO~n%cj^vRM z`Q97wcv4uv@YsxGHSql5gTp?RE>oim&+mSteZy5u@VUrr#6sB1>-akmPfYRdRU1BK zdX?J`QGK-L*AX>+*3mOcl5Bu+$Rgz5ZieyZj?IvWo~i3iUr6d!2T@il+qnu!Nh$3g zhi-l$gli_SYhnVKfZ`XTy8>j3B=5|SZdnlXqHw&5xdYii_eX+g zpIM{DD>do)TLFV~>q=WSo2xQgGNmlf%E+P(49P08ymqr0$+@2YcJa&hoKoY^XbO_+ z7$n?HYy7QsI@g@fDWFeNn`|ym|K$ej8@)HVb%39MhGa1z>2^M9`6Sjb{!TY$oS@%R zpAfKr0D%kGG?0Xr7s2E@zs!1=oBZOQc-|ni+~J+sCz0YCR}}#{@SL@h4o9%V->9{` zHK5|X*MajUgr(FT;^cJc%Sc(WyjNP3n)gpeTJ#;3P(KwPXaqcgmKi*q-%stB2J3t) zo*+zj((Zxeqj(eVIV`sO#Va=LZ{Nd5@V9vHBla9S#5^WHYFo`g{DG!RVLf+F!a00? z*6kWVgDjT`t6*5qD8#Xk7?0z2!B3M;mw+CupQ6zz!4jn!aGu-@4!G}neSlouX8uNm zxR0&ETQ@?dWW7UH*M#D>k#l@Pb+Lyp7iHNblcoan+Yj8sSDs9Vbtt2WYD5Xb0pVV6 zaMbcu59$xGLK6ixehsumUhlZQtbD5SH-=Tj0pc`g4rQq+9riB$UDplws_kKD=*_i^ zZpiu3frYKSDH*fbx%{<`gIp>=)Q9ciKd#y$7a@CxxA_P+56`1^NwJ&nm}T2KJ(w5n zD5ZD!=;|KurmQIH?aX>ldd1?@c3lZ|rr}gsS2Voc!Fn-8{BQKzhR)PB?mv}S(@$6M zQQ~cae;-i#H}a$#QOw;94!LWTPD(zu_T!3)rBuqcsWpA+iI7N#)dF){lI-3*IEnMI zkr(xH*RDQ^EmZu1qv%m?McHp&?_5t^{l)tRefoVQ9~lqCbz)FI8<3shJNUB_-4(XG zA1S;42;05b&l204H=kYo{U5+yiBwAX*G3D|;eBy!P}B#h#rNV;3b>kaB|s#Gl=z%x zK=BhD(_!K9vv8LTL+DDb{H$7_IQu?w4GG`2FuH#HDRQ#yU)|i1V>5-{N%0S??1K{i zZ=LRt7I)ihf>Ow)F9O-=)Ii?_-vJ!qkW1l%68s>4As2RbEak{V5G9ObsdgR4(^eoK1`o?@ z7XAj{4h-`cd$J}Q@iI$1W3z$d?B-{B3ga77@pu@Uw7~uSpk1fvyz4D&HPXKaM+`$N zck5K-5Col&*ix#y&9?gAC+9qFR|d0Fb2hbzXnYt}<&dxy!$K?h6^{R%C^O@~T-HUx zAQ?WSkkES0?cpP_+t=<}%_#yGUxkvl*H}!WD=nhrRuLAHpYss;u(3JgI2Bb%xT59S zQxF6?)HuzAQi|G{Jn#&e0}>#>h3YfLjxG=oXZP~B&<4HQrtzZ)+E8dIEyGak?$To- zQ-Fs4lC#jyKH}Y{GEOsC^fUn8G*jejm|NOxRX;Kr5Gm3oGu0qV&$IduFiqk2%Pv(X zk*h7JxzLMe?_nVCexqB25taQl6vG@&n#7jXBernpW;bFa3N?uwON4F8@-aR~FYSrH zvQ*Hzp?iGCGYO0x*Ty93Ng1xPG4FUE&iTR#isD=MFTm><2q4x3+YpTVNEr2`;JjMX|8+&jOBiNmgZwb+SZ0$>9CZ? zn9@CA?LbPYm`7wUt50L}s5d`JCeA&#?|4bgAICSOG{~qT5-pU%OLrf z)W?T>Shr%5&C)N{sp%bCKpepaA|1AIBwZ}buVCs7Ki)0>!I+Q|h`jY1jsNn8K*41h zCYp`D=Q`>rTr?hQq2?@q=Ue-|y2471$jTMvvC7V!Mpv<0O0QHWekj)vgYe@kXo4__ z7~H=7ujvfOVyko%MW_~y?ou3yejTjfvy`)T5Lq=UxqsU5-XYE3$}9La*n;#{f10LH z;4Mr|W8Lk1`Y^Xw=j73P2Pb{%e0SzloNrj2yFW8>7rA5aJ-HFD5o4f}d-v~yA{zsW z7kUH5yxv*6ZT}kn0|+9fqcN%-M;^)v8_fmdy*O;s-wfoZ9OExvS835}6cl|E*-*RQFNH?y0j^_JoaZ@)nFZeW*T(A7hv)(2ZfU_SC)B52MQY4xB` z(}RwT954bxbJ{h!s{FkNvO!JCIda9lC-Nf&5z$*uam{PP>Ydm%7ouef-nJFjavQWJ zJ?g#r?;c#c5iX11irY(k&JVIw@&{^N6m)K0@IOZGt?ne0EN$F&U!?vYMQ0h-WW$Ex z5dtbAf^

NSCyjGzik2N{miN3R2QYr*t>lh|%4`s09cJNNj{KkOA+v@8AAz$ByT@ zkNdu^^E_9Lb(_g=85@_|8WUN_u?ZxTt1jmM6+G|9OfmR0NHy?f>(2t!``h)8!=3Jk z0qV=@?${Ag6O?hZsa!UxTKDAvYwH2+C=?3gkAyXB-VQIy`nzH4)=_SSzZis9*H*w7 zA2*E0)SbTaXp<*HX>|o1M&(1q2z4$OTOI+fH0OMq2jnlS0QdSEQl6@jk?y>hy7r_9 zp}#MZ()2p*F27z%ydn{;l4mw+@&ycQne3(%eiZ6*vjK*p-tMEjVqY|tdZpvN8KVOq zPwDV28PAc|`2QtCh|)GF|E zd){;mdn;&yYTbd;gW!%y4~#4Ii@QA3RP;B8^W}a;!>S6J)6`^%nMzK>2>ie$U|N`Ay!)35E!U-MnS{ozR4T&&>nnXmZ(JsbAv*r^z*eE!J2W@ z^ty9~TadeXa!7E1Q19x3mI(?CP6$`kujzM{2sJ66HdWs^eo{WvA2NVDKzIaz9}eS( z4|m%O|G0T19~B-R_Rt25p~4*q%*$1R##GZlu6~t#D-P!BTm5-Cz2nuj{u?1vxl)&h zDzJh701vHg(0{u-rf@Mt*f3~JlB68t&lq6TaWi6SnDx_IT;v+)Kfo>3 z1?~VPYKPC=YFG~%1~sqZ*Z4*`peYdW(KxWz%YDJrg&yQwc5e&V(`a{uS=z&%7(7an zj1rzssz_OUhTGcLgX3)XeT#rT?2Djk_gMi}J*`L*U)kcI_f zF)c1t0tQ;XK!^+YFRPz*yqHCt%(fHj*7-Pp*a|9{RXcHHZI7@m^Lu8AY`#aAjd%}S z+HL~2206SS-HqA#Ie0QxksIBHxs8rFB1mOb97D#bLI!a~Z5{Q)@RrKdt^uHb7gD?q z1yVrgVvfppv*AOdvrI^Pd+)!Wt3nEm{{#H)_eG)0J326IiQr!Hr`zrZ*Ma`Y?h2=& zF7J~3sN2mf-7 z!+=$5i2A(Eyjp_Y&Fu9pL2jMy;V@l^(e;CMUCf3fiE%hf^hYlwY_MCCb2_8D28)Dn zr7gN>d(k8J|13)wH{LX`7hOm=Fey56`8F+-j z@@FWaJQbCqEGpr8GFAI(}Zh%snWYS?s__kf*Wd}{--_ylrjlQT4T$_e3Jvs4W0 zmrm-wMG+jK;z~OE^>ShRR0VwaC0#o_ZCl`4-=XrrAr%d}OVQZQU)L2^I5J&QGG@gR zwF>k=t9^5U$PyJ6n0d7eSau37(?wuwWfdvg%6-FqGym!_R)hlHZN*G8@7qv=?dYPL z{Iv8EqK38K(kzaN??ANm{Z#Anli{Vmy@#pD+EV-;ywc71e$QA!p5~Jm{oxUjMtXTT z@0S!ldB39Ms}1mNRUZ|?lGj>8H}^xIt`u3N8j0fF*}PN64VRY7SW+W3X_b4MmEx2< zUg!@l)D&;w^Ad49NeOn5LmN|I^2khx>&2a0iwjhWBO2F;fPfV+V^Qb+NUL+KIe*fs zfSrap3fSOrUnsZnt(&LD0KC9yc{3KaX9|1uM6AqQH-}x;U2#5 zqNqn{V*N-Y2%=EP;yB?B?cu#MucQfPK5%E_8ET720L!5*8%_qHh?9vd+NG#+-IRSE zib&O~M8)-Eua4|rcl;jytbCF`uf{|?o!ti*DW)S-3G|5S)hJb&NVdYsdA{mT^1b+4 zmp(6{^kN{4Q{Z>?6BA-0m0G=UQb5~%xsTDkVvphde~QV-)Z^i)W@iIBAE9@M)%7RF ztE=ICG@OjoIwm&kr4>HuCfsMcfAfikDjbXrc_zsg@-vw-NuFPq((Y^!GYB@H*u9}3 zDPG_!+m42h`VhIirmKr%%J~nFT*&x%;6CwuU%10e3ShRF+lYqr{yjRAxB{*DyK>Rx z>TD7X0M#mr+!t&P!2oJ{AKFa7;x~QHaDX^xwLQ0N!k!jDh_wy}_(8MRT=t~85xJp2hS)x0!u<_fd0tmnKwHSjmgsTeHcrJ6pFD`A ztGC+1Z?!+S+HUq^vsWk34n?s*t=qhK=LAGO#@(e-(N=e>YFXOMuXQx|lAQ1^LN?u2)P@Qj5hD#^7!_xup@X?H<>n7=U!lguGJYvO0SR2+}kW>-i5u^!E+Boi!U&4;?6IuF@k z!~RNb7y+^phRs*g2dFB%)|MU#E&#eZHg|ykoEhmBv=8{I=KzuRg|grcS><=hjBXH* z|HEG;!#o_!F2XSH2%kHtmbTEE7rHI^X{en>6L2tc%Oko+_JPmBOW$7hLi_g%o3kI~4J01{qL6}lNzJZP8qU3^U?30(~D-Q#*LsD z21!k_cVIPdM^#G0BsXyXS3?70qU#DTx~uPTilZL1)7G$=O~NAWs9^&00Ja1yA|GDc zX>=lR)Q)@%v2pB^0SXyiHEc0u?T6RFDa#(J z2|OmFyrc}!j~kkK<+J~fEeMGtUTG_*`1F{w>KSo#^;AUBZsL!>LKW{woDQi6n%?>^ z=vQywYyJ%nZW$V=8y{Mgb+q}OY0E(PalMXVkP&Q9;l?(hSNfTXddu+foq&CK35)5HT$!#e6eug-2>MrWHGzpM%K(p_i>l?Y)uLBiL)@NC;L=k-`H z$Z}$hTrbRMz=E%sdOLee>8+ewk)(6s`%lexhRHscQMX7x6d;X{_`dN{lY~8kjdV%k z%TQ=(YQ#TEn#O3@*56r5`f0g*;vbd` z!eAqs^`$<+m{Ar%BPpGIaP661ls#8mO-H3}3Q(1g_zz%BDf=CePD-0S#Z0lsFYzv# zHZ<%p=a1Ma`Z%U^gDiFKs=oH4h{5pbW}-7PVi(oZcD^rMR3^nyRB1$fd_>{F+I(+b z+nUOB4R&)rpej-2Oz8VmX{LM9Pm}VHs4OCfM4YBcHO<*Xs^Y0lxEhgTqbZv=V&aHAF^q(pPe z3b@jSwo@d$%3U4GKQZdzwF1J>H_gMq-k|XShDWWf)<^ELcvsga@hOH48ch?;nan#a z1DhX#=+0+tE}_;~-PIZPeN4lJ|9VIVbb1fD>1MUf`b|stDhhLFh#sDMew^=$YuKT; zF+|sACJgAJdhq#BeCQA^xffKjJxVX5(7t)()oppxXa64nsEo12Txy{e)wm^m5g};!D4Wj2yWiZG#TlSL>I1_gZp{77XZyq(5vK z35G0p?1t)WzQl_kSu2-=7S?rMIb|)@Tel-vUEJ1jhfyq=9X)iB6kmNT`NYuGW))dE zF7!x?>j}4%+ewTN5)|-eW@D%8pj$+ztLUg;xZ^CJ#gV+;)lK+YxREsTtlCIXKxXHs z9;f*4o(P?>Rf~tsJwI{nNR~ndBo^J;-IOV8zV0F8+Pg+%lkT(!gPyZ2sZaSbjw6I( zXRp4m%RC8AECM5d{{7L*uC1#AE)7VaT|aZyD>3?1sn&>jD(*sbDX@LAFU%;Tj4ri| zM)1x93C_{2I3UcNG|w|y$zZ>wVZ@&DT&4HbC=U?7x{U1Uvk5VpxE~rijthkHOkNB z%GE70aw5(`r0u30XjGM)ocP{aKQjof|pX=Pno^{*yXTi zkeuZVFuKYuY*H}mq>A&z?}n2mU#XVC^#JxCl1fkeh)C{{XP1fO&@FEA56!TL$B#QR z<jjC5a{aPLW3s?pR8bN=u4!26I1OJZT`Uc;WTBgGP<> z-VI-lQ9Ji>AJL;%XJ1GK$2gsNv@ZK60rxs%^wh@^5{1b4?4JQ>!bi#gPoj3YC)A}= z>;Y|$_mV0U`_2lZn3G_hlx0jIZyCe2v|oR@@mz3K6<1d_$sQYa&8+(^dS#<`K6hW# z+b8&)3t`izfDYc-ld+I>_hOBaojekGTTsa|0xSyX?vbW0eN*e^;?vL6w-EE}^i>QV zg-2lv(Ob8h3f!1?iP&|p)w{gjmMy5VP%7FzWOEy2v~+}9QrNW}M!ar^uCBjW7Dm44 zAN`(68}l}Qni-j0s1gw)y$fCq`MLS|K^sQbw<~?EVe%p%@q*unV3rGLDjXF!-1!d> z2eQcAg~}XIeKh@Kez!Nt$iYkX!k*Skf;Zr%n;WjQrIEL0Z%vD4UgJL8zm-zbAMb7k`m?d%tWgF3FveZCe?z|GQ_tKn076w` z1gFnu)fvDfSqTMm3Rx~e5c7U+go^0N<=G_n@l46xTa#Bp@*hYZ@9|LfPrPMh{1^rb zSSj51hw!e1Zuw`CuffWv%}8y}j=p1q#Z z5k~N588=c-z20>AGZDrlsUK`JFP?o&tArt5aXRx^sN2g)8|J(FAHd={xw*8^i=W&d zV#V{}qwn9V{Oyw_WEI8K-Ajreil4BNCo$eHUs7L?PpVE~bbkDWXBqIYj*VxW`l*Bj z&)jaf>QubGlQKK)FVFi!Wg|xCNvkA)OO5B0q2#|Z)4Kh zHIdE-FiEJ<=BLi9*K?(w3>*=?GZ7`t85^&D>1N3Io(=~Y+YE}v{Z)I!4scY9 z>vtRRc3Aj9zX?!xp&-tP+?o$%6f#-X^T^|2$;?PdQKtc<^1QY5IUeLf;M-i$@}PL>zsQykrRsmgwK z8kchdu)*kU24Y96#R_b+0cdHm{Sht?FLU;y{vhT1{Odnvrb>^1`ssp2f9!;tS|9s@o$Pa3nv zCsH-R6q!spoKH#9uf?C$Wgd(XNmCQIo%yTgF^@-BytG&*E$_EO0gO%HFMim|I~XR+ zT@#H=KRpsnbuoj;5Lt6YSKG0FEjynll_Jnkm1-yOvCkmj&3m21YGTtWRr!DAZQczw zJWdoid4~TcO!9$9uvtPaR=7%Id%1BV;h#_=(=yag&#ZBkdGI#HTC#RxL|UK0go}Uh znf5+n6ws132t|^A08B*N5T?b{t86hgqT~_i4D)3F1FvVG`cn13f@uJt<~@W9BeWVo z5&t%@Exp#`gQXL1rYrsn!@{K6=sG!bG-)o_~N&zwKHWTcMIdB zilQHDe*MAw*SSePBSbpgs4>S_k5t_LmGa|}Tv3s7f%+1JKa!Xo7h#x$6^=gJPoy4WZKIaEKHI?jE>%N@KU7yU?p>0Eyy0wr#tdw28fraZ$NbD=mJM%w)NGF0` z#2rN(BHW$=IE_sgH``+ISa5ztKvXqrdgKu9Dc_`KeJ-Mp@_gJ{fq@5ZFM;*V%(=yu z-S2KDn`{#S+zrob2`{^lrQAcA0K-$@Eng4X{gd!RCEJ8-)%mUOaZgK%M#%-;0~@C% zyT8b4RlR_ZrBOeWq+T?Q%uym5?(SfPRFl9TdcE-T<8cP)iIni9kX7+>r_Pe^bNy{= zVojO)wfAN2O`oIzSw(NeUVOddq-3W=kIKiIW2eA*;%{!8&E&iXt zKE?a27gJXfRQ>F66wRnfZX5}x?ndIdHFx1+n~yZj+2zeQO!ChfO2MDu*Fyw85Uc(h zjc(0Yk)^@!Dfe%lnmpR#i6h@T_)Zk({=lI2XV!xrur*dBjq#I1_`}7y%PHCjXD*yjC<_R<bE;?{dEAoikW|W>6oclS$T|S z%q|Xl4?UE&I@~cy8|;0-OSZ|x_!x$jTtVajPAR-&E`C3Je6v3p}LPL|2TV2 ziG&4sZdt8sl$aaJGPOq=-Od?tYj@p+C$k=J%+N&UqFT4-!u&#qhaI{xE+S%7zGh;e*-> z%mj6^Grob3V@I@?cCmomFWC3zI$w?7DWeQEKN8()__izqgrE6+IOolOx|2kCb^mht zp9dTU>DARaIJ{62G^+m>#=bRvGfFb$sW^g<+QC7a)BgP6>HW2=r7LUwE31a2y!PM^!Q2>?cjres=eL;!9u)|1sfNDuK6LaW4Z6cx zXTJem-wYm-$;^ZJ{`*=E$PqBHf0WDy5mr!MSdqEtur+;d3$&X2(He@X*b^y12J(uE z78t^(awLi$@w2h$L5v?Le#HG_STuCU3`{>SaKzy+ENAe#U90}PpO0j_m+jZOfigRI zOVnvdXMF`a-Lb(!*e3}|wDU^X*_%xq&))*W_wEHWzFS_!y4eZ<+y7pl2IH@@t`+9+ zkrlnwSHeci)z$9RPazvahaADm2&FcB4rcM-oo49?N^23 z0lkg^x?psF7#P3sWz92x2PLy2vbn(4gA*xGXpr@u&+`BMz+t$8lDGYll~%^lD3cx$%ms^5pWqUsRScWJ z@-wgVwW9VVj8gp{Jn*$tsUQbQSNZ-?vm>xJXd&nLBO$BcRs_1O^;BK~Z3Or7b}WqI zE;{_%ARH4dpUhdT{`f7p+K;0a%iXvAO6tB5Q6p8F8h9UaV>;${2hd z1vF42CXY(fO}s_yd> z`TUE1g(nR_i%II**k(do!e2L(pd!qSBoxf>9INY=1z!H9VD88aZwWVB;K1wHFwu?HgGv#h$=Lq@I*^L1 z9&~_A-H+#)y&Nm2g~0VU@j4&+%7S@r30OV1^f2?zGSDTm0}Zlrk#;dyS=b(4s0 zlNAM;=5rC$D+|9l4c`A4{oDF4>{53TmH~Ia%2Is?`-7SAYn)BDK(f^s)uD;>lXS~pL0j)2=O80#alvuo$;4RX-~KS!c#Ko8j{*UWW^h=wUm9EN89QsU4xcE9#vr6wAJqGHP%niPo5XBFt_ee2*JlR zy@GUqm5+I=(t-A3F~1)cFl1^s?N^6XS?dN*?$5UaIHHvk5bMY`>9SD%Z8qI^k{ytw zt?WaUx}_ta2=cCohP;GJ0O@0B65r%lO$udfg0IujjIWFh>Px%iXADEjU!F?uM{h!Vj;pPkY~1a@3|_FoPsxo(cto3OG6@DpaiX@hbLA zPMpX=wQNgfahdnl%*NsZ;d17MFO2Y3)NSkaWBV>kPrvr>j2^7F+B$QraBitxf7i83 zX}T+Xzio5@T2k7e^a@qD@(1Qo4$)pT>a?4y?D`!Vci0DPadZX=1Dg8id;Z)Z z?_!?`h-pRb95|x-Jn(jyX$uB#j0{8=7_c-^<%`~rXjwD)NTM!pU7`Hp!n!r&6|%sf zKBMs`!mP!_iXVMDdi(0E=(Ddh7+tH={(7-p5G+{U!35$F7ylzmjxB}M)!7~ASDxHY`T}%-BsP-sM36_(o0Bz zcJ`|7LzF}paps7LdbH;?tLnBciX6!h2x93#xx25R|DyA{3BJz@zNPi5ycZ^){X0^= z_#Xm`stNfO=+!!c{bDb~y9*@KQfc%zR`RJe>zf@{U|F*#h`A|mHP9Yx(fDgby*fK53>~mm#yfgJ=z1I z(5z2i{yyNMq-c0k&K%}=La$>0Kf zl4bYi1*laLwt}@Lo>sglejSm&drkmC4%C;ud3x`ssw!Q=sKLTB{+T6Ci6;^~+C&Rw z+3bLA@zY^SU<9AqSR|WnLi!^%&mqC4C!N0~c%7vlnQ-5&d`fKhGK0CNuF5;|B=xyP ztDif7g56$MDt=c(i+T4;jSwYq_$tlIKF)DxaiU5wp=fdPOd}yqqQ_)W+jFc<^;Qm? z?5im+<8#M&NR~d+^51cKvQNf4gya8oOgQcGq6m4}mes%AeTDB*+a2k#zpH-O#RJ@n zn1+$wxJK?k_z054Bgo@j(bg898EM~wzSgoznXw#Q1OIDa1@UQN%PXVc*FQr68wn;k z`4t)Q4tE~`5{QLaXCICDT!$XT?)WQ&z9Up@LVEsw>;{VvaA}Jf8L40Il0|*+eLm~| z9fbs$w;K}_vd(h<*g_tf!>;8`Q1cwbMFze!`-O&h( zk9;fIu_?^iv2VF*X1EM(izwBSbT*^$`b&t_ke_4}$<}~Ep;oTI@=Dh_*NyZ;(aobB zOhc=O$4{kxx_zmJtya|EhLSr1>nGhj z8Z7ts3l*S6nwZn0MGrSqvqTLSX3jfQ<@Hho6V`F1Sqc$&x+){9@VheO#LR@;$8H3q zrZqr+GUoo6cS!F9FldG)1MStl%;Am3RPwfZyz+9cPw|D4k|SsU4ib!vqu>81>DHdj z{BS>m_;t?i1nQccg+?yREBLa7E_y7OdBP7?X7yn)__7V9!B&q}rIGfL6WGrHSN8$e zv(X2rds~_;&LLy1p@%d$iWr^|!>f-g>tk&P!1e_{VT@l~5Kyep{zRGoR{NImAf)p` zNpnH);zn?K+Rl=`V|3?}C;?UWtu`PG%ioeG1NA7y2Hg%JOo&I0Gde;EgZh{72T7`v zMzaf^lN1Lym6rbiX#sQsbDuLZY6qsTTY^6lMgu#8fV|qXtJ9;CIuVYJ9d5Tt<=-fT zM<53GGa4Dxf*^?*p^MB6oC;zZ==}7%&-@+#FP(BATHQDJQa=7e{ zBj}khd5JTVVRrb?Eyv(JnFgRpNv#RYwmc#yBAEkz7NTO=hP#R?oc=B~e=}29RE^q$ z(C;j`9Q^+L4L5$#<@Jyav);q{#iBQGW$TiiP%Qw1mqjG@np?3fQD0>>8nb-f@O*Vy z=1{~hUmgXNwZmS`*R1Qxy}#mU!CS9O_3~@(Yx_vEE)?bLvvtM!PuGvE?YqldycaP+ znfP|OoI^|r3F;>@Snh_`G*l`q?Uo{o>Bc69ANS!fSwVHy5G+pWsU7BKaZDNFrxT0|9W5egskAH)-B_loj`H86r+TLu13yYIQjcv z%1bRRjvD^0g=c(yujWWLpGy7_lIkPTdHh8!Q7({3gCil{F`Af|D8k@T{x&>K@U^3b zIAB1kK)(og;inb9b^zNkx&bOqEz;cF6H@(OtUZ zy?91xt738DvRzVQ7EYfE0HrXIzD4BqM*+gQPM?Tbo!XiDljhCmxbG2KWLTK>$XBQd)!W*26 zPf?3DXVA4(k2^X)mXo?7m|}{?hl5p*^o@#M{#dxS8tD?1;a>PXG2c|?_h0tq{yC|~ zt8z20hG>4Xe)8b9D!Hn0o=cL)h+kzRG3dK4srV3B$6*gJ_eEWrn9DAP$>(%pOY{jh z!cdLaF`_!sbaIFz`W|{zaw1g?p7NSZjB}WRbDLT_EJ*+XelKU=7pBKaBo4ppC|Sd; z66H7I-}p3&%UG>UZ;U67>t1}?$E`RW=8$l{YygqP_w=%bD$WJt<6*3sg+Ga18d-{M ztdh`sehHnoW!ulcN^CWMQA}w^pxf=XyD|ga*$2(#>wEE5bJk5p#7ez~>4JBpwOtq3 z#{Kcy;B~VVRR*WWRHhjKmMgPko zG0@O^RHC&X3y7Q-(|4keG$@%%Bd>Naw=|=B+4Mwv+S6WrRyW2%2qH(@hfW#lHn%Y< zps-D+DZ5eso-c4n%R@vxp~*u71W-PL$M4sX{1ShHx^K}*O-CI5RsQvz+!(9yVP%u~ zf-6!Z&@juF)0cb@gZ=1Y!#}R%_1t%Ai$uP>7yd28w<+0ap{-3R|Aj%~gI;npmzZps zCp#z98n3lbz0AoJmwiv;EC1+|aNa-tgls%%v;k=b`A%suC7=8Tg*byEgwc7tJywb) z{_fcF6S!?udm&HL)Poka@E^$<4+)>R6CVAZ%ozS?pLyhq59eD;Dj`vo-OJ$6 zt*pP)YDTv|Z3G*(RrO8o&XX1h&)F(;8Qp7nFOad{&GsY%9yIwvzJh#+wvZ>h$in5E zE;3PfXP&Z8dVh3)Ot5Jo_|>~7pTp@EYdT-j%>yVo|3!@@N9C(&np&1RE+NZ@?|ZdV zOQo$6*J1h8I7W#KtvDqSOJ6aXRZrYIp1yE?qHgfmgM;$9V7z{`;rwfJ=tdcF^Rqkh znyQ>jVrmP&&R;$7KZd#fH2i7W;s2o~7GAsf%}79ti``n{mz=LTltq)fjp$KXru|OZ zoT?sQ&M$+Uxp}eDCSJh=HD$-sppRP2X?Fn0L|gH31}ksMtA81E35i56>^qo@(b%!7 z0_KXCF74iEEJ;XLaYaA#i==XR8JSHjpPm(C!N_80N}x!*-5}wK2P|+(jC@w(*@uS_ zg=-{M2ii3=z{l@a@-EzarKKC4e=VkC(}@$NUO+m1`!v)%K9DwFz})GJQb}UesPzaZ zRRCCP$QzEIHXn0_ys>fI2-j}liUyZ`(e%@2CYtfn=2B7QG6z1gL>ND%v=xx$`!sjo zK=F9eEFg6-iz>;EtA=qdjR3DEuOL%+{s!U$b^WxoI>wwT{fw5zp^Z&QgAih%OG^lO z@h@Ng&nI@x!0Q-+36J|MMNm{Tl6PF@aHXYW8p<=1W&XJbn1m@iXsbC_o9>boKK{a1 z!9ZF3Ws<7z!PDOvKp_crVii`iN5waj2;_z6S|j+#)@smtt7GOb3g5h*=f{B$yCueJ zLRjO00ovRIKfNy&gqJ=;j`eGujd)~UY`4AnFw(K{FT=V+!)#C5Lr^zTyC>+l&X&EL zZyQ3nY}#(&IZ{SJ=^%Ld{c%FEU4A$0^;QJ`(j$H8srer^Mh-W8LL1>c4k&#;A$p%* zh!>_)nFKBEFKTe3+EnX@CW(7F#17$|LaHZyB#3_A??qw&#|ocE^Ni=0zlfw+%Osyt zOTVvh)vcm=DsKy@@m)+%rGcr^0&>1^^|FfpA+H-W5Q(Hqv*B1cZk#2JC4$0jbHksy zFpH;=67eh$-OtM~l~&Y{4X$~izezmC{M~_jM~F=rAQ4(6(lNmkZ86)*M5;8&Xe}FI5*R>yFd2c3umJ`3VmD4H-rGgHs4ZlD-(&y zJ+4Yk0TM3N@-T`%pK=-PDdvysg-4LpTjbyC*v`1H07t^|MKZ&wt3&(QM7twJR4M`3 z$ZW8BXE5W_*PGe=^)^_>dO*(s?9W9`*762k_9yN?K>G#H)z`-T^B^I-5%;{YtN(cF zP3ZG2XudZHwLv4s+{ng!7j&MB}h2+C8behjh6HqN)JGHFU6 zeACx`1qK9=hd{N(KI&DNtOtNFzPRq75{7U6nbV;=+q}b$gx=EO){jLMyS4c>oC1b_ z)qV6gFfU|s4EO5@i|gKBhr-aXe*ymiqAVh@7U7uC0S{rMeAGWz3ulOxW#{64O&nSW z2i}^ME)NjqK9z^%OMZCH+%~027AIVlOUAUhbt3$XN9wA@k~59MgnW{RRu#UH(`DEZ zOsUcZ39eX=TsQmGk%az*PYwds;Rs*9lPzr3IL-E^4P|nEh(;4f{16707HK{0)3%}s zZgRF?@AZVWx+p+aXZT@Y!OU}?(B%N$M*UxaJc#c7S?O;GY!$o&J(3e)VJzG{(($03TdgJRAskJ9-1jTUCO%ewNLXn4um!ZA%#_$<~8P z?B|}IXpN84&|7f^IXnTtNjSf}{#AJA(M00g=+8~udUXcF!S5_|smatjs$L?9x(V)8 zN-Arev+X5?n6Vf)K^-wgKs-4ZgR(2AT}5{wr~UpILf0gw z3npo((i(lm^~m=};8w4@9)~h=gFIaV$$nk0k^zGnR6WXzMJQxNCduxWom#?fb|E5dCE6qPINDIZ zW^+O{LHOvdbW~>JsnX-su%!P0C$r5MbgwfZuF8rJ>Dj{J-yjM>>Fa;%CAgH}CE2=`mm#jh=wcub&E5)POaAuaEw6soz6>cY&Z0S!b(0Iv{;uC|}X;?Vi#J zPUAlSMtQ$y_y&XPSwhu!-Au2b-fnd%INA{Tc<0sD;6WhcH_tTO&B(-i4O~ox^v|tm zFNgZ}=Fts=gUMRK(qG-ku;vaWFdm85y5PWdS<$YE5M(b_8}~gRT~~{@@a?n{7mT~? z6PI%#eb^odKhF>vSX4{~^CU+pdH05R$xA70J(BA8Wo{t@ON5k)Aq)=Z8 zqbLO=)M-LZfW}$!ET%fo+k%$Y!(5f>r%-5qegueKxP0cq!{!9JWA+cTh9s&FpLiTM z1Kq*^=fRjeHGZV#s z7U$Ys$S5{qR?FEHH6g-jxz(0MOfn2EH)A2UAgQI~hik!MPz(Rnfd}ASFaI^nFW2Ow zf>M^^yZlr9CnG|xL44b%7b$z~v_^|P?;8i?dz-_iKX$;1ks-;j!r2S5F}|+^8@oA! ztioF`WBp{6MrpbKmD?BkmKh0Mk*u56=~5+d~d;y)c(*>4b!6 z!CU^=*E}4fRP55Y(#p^0zF0mApu^0zpnrxyCS7)riKrvU*L(Y5H_n^-?Byp#o)h2 z*$8YPWa<*3?H5eSe)gBwl$JfMXb3$Tt z3t6cT&+MvAZK)rtQ}UOq$_- z^7QwxQPjLV`b6`jwgxt_J~~B4LDuIMWuNnRUSqQu}VVt_oaoW!I9 zGdNb}X(x3v`2Y1UJY}AvU)$*N9xiKIHn}64J0H~%rtuTz8n3(cMP2=w<1Q}=z*VA! zvRT=Q>@KGPw{9j2B&!v$Y2TEowm|)ql8K39FY*O9vw_Yr!G6&hC2{vOTv~1JQ*bI^ z{PA;(2FFiYa{YbQzh%);xY-q}E%g2UtP2+5*>Vr-3hkwL&F#uL@~Fh=4b}4(BPz2iGW8FKeAfGH29Enph{c%5mD{b+gYF#G2 zay;{$hVI+bndifjlwWCG5iL!o|Q*0))C)0FqbCGf|Prvg)Bwgsi5~(=PPZ#H{ zaDV5Y?Zp!o9d;XM4f4(lRCR{q%6jvHHfO0M3{$sdsQe?fUk);$N$4RaY2fIIPudov zG(l-mDOt3&%l`xWV<{jH6XAg_%91@_&G)Ahz?LduGTLEOi-zC2xmjPgeM;heE=M z;en9rO;@G%+N52uLg-682);_#O(J?m87xNQ;i#Ks#8L+h4r1g6Zi7FW-!64k_X9f0ONV@|nP(T@$!U0J5V>tVJDGDx3x2&|P?-JA=JhV{G8LGtb;GmQkd zCJ0+6UkICu%INrD*V`Kgci6XYjvQB4-5Y9^dfr8y2Tl*vq)7ADa+9^crRTs%U3Mzpy`oJLJwLgdLKkmTMNQ?Ow zCd#frH6}R6@q&ToGaU|`lyU8Qm+LTlPh1gN_a6~15{EmY;zwJF4E)SJW-T9TQ(Tr_ z?Xvf_;QZkzAyKy_YgOuWYc12QRk)}!Tpdzr?9cJ96z$1S?{#|uvR+gA5p<(s?gd7o z*4(Zm-Zp!9gCQ^H+tSMuwk6}uFSh?0afDq6BBfz=mtSj?h;Y5vr6Fyg_-Cs~d<+s5 zioGQAR~-3u49bLRaXPGV=o)APT;6!WK4%_g1<+V63T>CVSL^5yLWG<}A(pYX$WyCz ze-3XiG;%#;qg_$f{g|z~w|Qc%H7tca@-+CH8{()KTyLSAn_i7b1?2mjo6q{y=RPlr zW&vrmo3{t$2Zu&Kz(rz!>#jG|n1IxrnCCFEY5(igu4 z%$PLP(&b2l%StThC>WnhHU?d8Ur1tE4!bZ1L83zevK`Y{-2ii_ALb&M!-G;s|e3F!FO!eZdpIpq>;b#wTP&aqLP|d@lmcIJNfSp)YdyH6pA9b2nt3pUyJT zy}lPGQQTjVlPvZ~lF7*)5dU+>l={9z+07Hq2$HjX9s`njqRP^g3?gb>wcMw0#{IuE zHWYDvcLW8zJYC4um|egV`zfZc)eYdeztTD|k7AEsmwz(7;knK2Vu}DnUUl01at3dA zJPTQvG}}-J%lVD%}>o0ZpcFWp-YCXXB8+COoCuH`AKhNrI32*nCem?cSKGSN3Hy?X;+N^b^ zJ9jN@y4!JmQK8St_cs+QhTIUp#Ba8n-pKnj;d|envFZ13+y{GiKf7Gr+rh>C#>a8I zyT}z3FpAJL$ur;& zTy#mwItU8JH4i8ekujMkrEtbQ3QDT#W+Z8Kqf!J`0InbEGfHi~^SWR{s zo9v@)xb7a)_cz{+``>-%y&mfKKXB}yajY@zz7u(Kh2Tw#Y{f>_=HAiK6(YE+Eb^(r zRhmk&&*qNTMKJ(^(+WT`DNrQ&LYh+&Na}|qfJJ3V0)!Zh^AaX}Ffk5=Fe{mDRd7K* zT2hVSIZhP7ey4_C<}1H<{D%eY_p*Jvblm3s#_rx9w{2|fIc>$&-f!%!@#)D6Whpb1 z*Bt#rl(zd`d=9>!4s?GXvD^OD_O8pa`&+j=OOLm=wYKe^1Bc+YyK6*1x5eyiZOJSM zhHKiNPDHjkHg?r8zLP!2Ev;1k#}e_|GxrPrVLMY`?!1p?eV_Yjd$_mBY--q9?-RHE z$_4}!8_WE+F=I;@a(3`Xml$7jpQ!t7Lrd~6Wk%b!d0YJv?f$K9?!#HSTH!2ZgO)DZ zsT#kAH^f1OoVh3*kbiu1;3dCwUVzG&YNp$1+epihl`0h`Av@u89-ngHn)Qx(5 zKM@gzn_4%X_Dii^sTjY1b{DoD@Nv(^d&lh;wf^dCE-NeA?>@`nxeeki!7XynCN|c& z3oO-^TY|X9b7!aBuO{x@ZC}ECT87H3)*UTm)9rDmW|D9RxL@Jt>@&W%7dei{?f(FB zzTG>mov&?q&uF{Hd25Z?ZbzEU)!?~PxV940{VQtaxW*5l+L_zF=Gt0Tugj*6W&Q_C z>v!7a-mc#DVm!(}{MeV`ac6ut-4FP*?|#a=?pM5AkKHHP{{Vh-8-Cy2bDaL$a(m~n zTK&&OFIjEn?cM#h=V7)Y7s@9+?tim+LxR-?P=a?rq!YwNxeC=Z|ZDB5${~ zxwrSaUTW{xH`}w7W&Z$YW;{FadjR|=7s_q+o4uo2-Eq8z!)?9T?`)v-x0@aHi(Ac= z>s30G?e8mi0$^jlt-SE>FuyK2aGXEIXjpgMlg92#i$E4C>8TcO`hiRYvupu2z@Vul z_~GfsT$2vVOc-A4vNsm4vRS{hJEQ{HvvYB>+V2jiK25#LseO;9<)X~nv8{i%By?pSM`>FrNwb32f(%gKMT*yFeCfkZRzwl?hCONz2B`K3*9mAY=9 zam%makJ1aS_V+I@G_L%w!O9`~S@v`G_w843SnfW}_S1seb6WyWAI|bZ?>)cR79!`V zv%AaP-X_NFsMBoQP*?ck7f-iat0nlzbMD*gYnFe;wXY5^m*RRC+jhp^Z*OySmjr6M zZkNMY1Gy4NP=G`4P)iR*q`_03x4mJ=OOu_SUvNueWP`?vJ*8)yDgw*c&UC z8p`u~o+i^;QepK$i~5!wFuayGrQ_g8}3Sm8UTx4X1I3#XIVTDP;iy4zmegtc`y zH*Lt&K?Y5F^X>Ii+=nqShlal&+~{?_-Tu{@v@A8F$7($&?N52VxbHhjyx=>liR5gQ zP>-?Yb{orWtVm`XUB%k45~P9Ut~(ozA)}Tj>C7`}Y`G1N_SU_o>do-kXmr#_t9cKZ zW5*RvE5IBmoEHVC1Tlh10%uf>C6_QLdgD(10GLFNq}G5_pcDh(TdfWW7};2;H6)TG z4KbJ=6&RR^OSC)2$b$w7o}(&s{{UPs@^hpJG8P48pk>gGodjW|mx%uWQy1^9e{0%( zquiary}Fim+%FHm)bV5dPWJWw?%;moKIVCy zvtQ-C_V<&S+3`DNrFQ+B7MQb7ru>!njL9jEewK|VYij-^a_Zt*gug?1f0jRT zw_e=+kN5X(a4U2F0EJ%l^Zlvp=Wgxomi^V+ozcl{?(-J5_N`}g{j+Gv02*9_i{D;E zlZ!VRk7=j5+WR}Wo{0M&?WZ5?x3YfEdrQaJU9Q{P&u)8Px2{^YffN18-yLIj%-p!D z7gg)Lp62Ou0G2q{ZoITet=?X2b{kfD(U_kimIO$lG5j%P1Wu6$Qxe*>P@(DN`Q&pr z03h16dBlj&Nr=y>8lwOemXc+s>Vr8UA)*BJ{BQtoB`8X%NeoDlQBqHjhg<*wGFF87 zK_gL#~$(oR2H3$L*Q3Q%k0DwtiC5Y3eWUMg+ z%}jZ*7X<`n3ZQ}uo1SF=QAbb?W@dhPhMH5_RJO#mdv&<YJ~G*8~&j++?~5FdJGB zXmb8IYSu~9rMZ(w_^!EgIx-HyZT-*S6%k=k6_Zuq|O?d~_0*Jag``zXdt`n+8+x(liT}2Y6<)57`9C3xC?>*1-)nG1}MH&XGR!K4pm?S{yjikyj zNkxFoI!RFa#Wk_g2`W#UIgHF=)1z6_u!w3Su<$ePkM0AsyMNxU;qGqj-0o~}{MUb{ zVDOubwWGMQmpG$qkF$FCMh4#8T~}kHFy9frdE^|Q-bYu32ST(;`g+Wyfm zTY0zW-7Z6BLdnk^JoHzsE1Ed`8I4_@+jqv|W;4a`p7QaC;Z+Z?as9 z_KyX^_J<x zo2N)}J4VJ8NxG*1m1KTgu+5f1%iZ?Ee6cFScI(>^9+hFWc@D z+K%|)IJR!g_XDx*+~PUz2bJUOme_CiSFGG$-ypeaZfiQ(jL5?O0FSo!KIIdx?*}hm z?r+a)c{e=UfAqAV$o~MxKfAr>?#Hlu-H*9Et8?A??O%KIzSr}d7K3e1frnA2%DFz{v6eHiULzg-q>+_$V2#KG_HvK;I8 zPqkf*%iXwE?Oy|?yMlT%L-l@LR1=v#vHD$A7SLSZ0)wJ^=9B(YO56M zE=_#d{un#WqXPPBNT6Kn1k6T8W+^x#aiBozqyQi^jDC0=JOmY`CKZV?XUbuZj%Oi=vuWTGMHM0hg%V60jYOWYBca1it`OXcN;xFz znt&un!h<^h032QzwFZiO>S76osXiq9Px8bjou`KY@c_BiZ%8LmAh16`sRZ?Dtwt(T z&v2x2S-L3(NvWs*02A=f5}ls~0|FE8Yiz(`WXLRP4}dtH*Tgsk zG>{H@ik1hcrDAJ|ZX`0t0VFh^DJEnBN&P=4{uqRp9RtHsHP_Mz5F{R-A)QH@{&;Oh zR)dZ#if$I6g2DOsBQh5$}2At9+NssdJpjge1%cO5b2c*qb#(xP<@gdYtVBj6WeE^V6B#Vf0}?Akh?sHT z`+%Zy64O>vDx*3I0r=v#9JQPW=sIMONlND0NHAof~0y8}c#L8|EeYz6^bXFRu-fX}#rj(P=;L37B+P7*QQV-PvojS1i z)&ZOoE?F93iXsS_kf%D34Mf%rZ~&{FBgBF_$%CqKRb1X6EX)HGFjwiIA|@#qO-7+2 zWWi+7Ndlc~QJqFB8omL>0R?0;A1UYv75-RHHJt>Yaa>UK)C`&-@F3<^D}=RF51;`l~FxgV)MBMmaP^ST%UkAtfdJ#jQ%2&pDg4sqDX2G(7>6~2BeOJ<%ub$ zrx1#?f>@GN$qNxfr%ZJCVZA%VI)W6>kN`ea&N|kA3?Vj9RiJ}UDFi`?G=cNL0RhoK z8CGjt<~%EaC$vQj4M0)S1bKuX7$8OfW3UBUI!wf$l=$J3;9_0%*<2^My_?-W-*+vG zo37vQJ`aD}oXx9On$6>|iMzSgcR6}*b`_*V|GIdD8bsZDk|Z_4a9Prkdx^0&qHOPpT?vAk`y$3z8$sfou= zC7O-3VZ#daC1Q8wu?vevQq9-;eZ?k{C~yV<;Ve*1aOZM&PaxsA^wx7c$#DLZ}B zahuEA4dv95UgC?=2-sL$tH&dBy zJ|8|l21{<+ZSPhecOS!vwf@bwJ=^yU_ZROk-k$TfxjxMHuerNNfcB@^emj@horf>o z-M7JAxxC~%r+>D(1E$<>-%W>zI#^aQ8@9A^?Z??`UNgr5UTax%>gB@VdW^ZvasUHO zL<*Y4f7cnaOmNU4Ge`hLOjqD5Kn8tq2yhjOn5YNiQYc~~m_r*R)UVPEAICWv8lT8v zzy_ocA|&QT2Z5l%U^oYjMF&jHAPUsr7(fsvM2XD#yddR}z%W7(Nir6IQhpK-f%xDQ z4(QB92AbzB1}3!5xFB#48XO8&DFVG>vj_b!#yA0xC?L>)CM%T139ril6w;@wR!Pn$ z^v8$szykTI%2!1q2l~>ai~ts$Rg?77r3lQAjsP53jKok#ffVrQd@u=)DV&u3Fejx3 zU__a~HOjuB!KfM4ln_VL@;!Rj;e;z?&lUv1lU&4%t0G5;jIhZJ7+DAUL>~p1BPx>RfATm)Es2!ol~#+nrowy$GF>&&PXH;WR?I5ECT>U=Mjl@ zd`YfvndL;jBcI>!uD**K`&MmlwYcO&eNAEWw{eKBc*ApLUtLWrZo_o&9o@(BcFL{L zN&)IvynnxGjK-^Dq)(VqpB#AY-M6)yXg8J3#LjKsOMo@DQl1npDbi*E=@`onva}~m z0LmPeSn|m;LSidV9EKj6feGx9SUqb8KZu}#fu!ZV3$2v*kuF-&L@jF_Vsj>Xm>9vl z5(xe{od#Ps78v=6X(k~=SH!FURDO6Cd<^-b%(q;%1}7<~k)(f6 zjLc<(yG;{KN+3Of46MYdENBB670d~MMjU}|+*ySUT#S|yYcx-NPq=rIgrHA zrP`b*<3cv}1tfW>9l1L{66~nl-UfTdm3Dp(T0#J;ipc>;X%D9!l zP`H+xyJIX@Nw!9%3@HI(QYszTb^NhfsqI5cf-N_;W);4otQ$=FVu=Mn6#z`kMB)=m zJP_Gwzqeym8c|CfQUepFjMAi%vrdpPrL3KCGEbXCwJkU708W)9fmJG^R1hQ*MNFFG z7~)-JxPsjFhtnF{%vlT&q?s{neIWEcIbuyxX=5455bZ=rL;Y&NlNEqiH`L5cO(0_) zS6jB6FVuBWDe(n%?f^k38RUS>6Rfa5q>sumrDn-J0o#*LkKDM}**io-K{`%~3R6%K zsK6Bwja6*dDV4V+=UF7gC3b6 z(EUfknCPzE62!@qv*W3>xW3)E5j{&{)rf67b@MZ<12>)n8>(}Trg2dkl9vkcBXfP< z#qcQmPB+os@70J4CHA`}(q~(P=DM*OKaM$X)mqQ(?Q7a>wqwnFRy5=NO%uy=JML3= zb9cyY_c!jeg$%^ovZkeN+cFZ_0-h0t_S0(3&53tyM+8`|-qdu5)F2%(=5-4o#AaG& zt`xN?Xd>Hw@>&49C>L0$D_K&s3ZjIFpfQA(0;O{I$!$jUZX>0_%&aDhn#60v?baWH8VY?%su21TA(}76lEZdQUCyx zOl+wuo3PH?kfJjtYqi-nuu1gR+AsyY$E`_%Knt1A6<5rsw0i1fJaxODyt!%3vv1H# ziV5_~T$nm_N|Xsx@y4}SYlxrZWxIPiiI8BZhFXP>sEPjof-8qw)hKH{rAyUlUMwm7 zA#$djP{dG$pD7)FIKJZ@#pRc&dfJBi4xceTLqn=06_6lF8Io#2`P0O7!$~EL1C>0F+F;sZu`;n)0u0uKAK`|ea=V8Clc*DrlOW3H z6XLjF*=^=IZNC$+xx8{E7H!)R>Rr0TA|&9`l4)!n#N-E1yAM&oUCtynsW8WAI|JuluK z%k;l@`flf^b@i%NP^}A@cpk^?zjFGAw))!jT?Oo_nwrap^5SvFclIYS*}KF3OYw7(ga>(QPyZoE{DeGRx>-RTy>uv8zZfRt@cw4eRL+f8< z`}3gpF4bP;)jHVCTg>+uJ=+eKUD8l281l(s<`6T2I(#wsPVU9&xa)0GKS`R}s&ruo zy>U?j04~TZ>J%^^sH+%eKltN*o2lx0UE1#S_I2G&H1r30ZPBKatKjmPx_!0xM|;}( zc%EtZd+rZIF57i-=()bw1!`MYyA6A6Nil9tnevg3u>SytzxE5L^o{EJC%NqJ>GyG4 z+S#L6Q!hjDFMt047VP@XE$V)bmfv5iqDd=vF7qe%i`ah1_v?e(_Xh)iVaIoV+iZ6n zS8#0XsXMiMWUkAQ(6-*~tL6dJ7^xWh%hEk>qV-;uoo}b^S9hkmO*GTP@IF-aPfF_g z9-{pxSyxT^;mT|EJg@Hl%##T?88Zu=krl(MQ6ZZ$)KFsdhjNaS5++CZx zxF2!D*?X;bj=6i&LAc>X$GEm^+mK$(Iu#u-tmx%m_s6yV)qTwN zlJ_40yyMRye#MvA^V=&{Ta)ANq7rsH{jncdyfnR=qLpD-$E5qG+C3k*`fKfV73JS+ z7D;|={YTh;$X=)IZmzq%CEdDPIJH~h+`n_kp8WRPyS=vVJKPU zb@%yKH5*N*8TmTUT&+O_Sb>cQJDbatO2ZAG@+ z2)T0R-EPLDX-kR>Qn>p60NCFCdmNp2rS9`>Ho2=mioyK&{z3jX>b)<2bJP7_X{&#Y z;}5+!JaPAz*$)2z_9MCOaDCIXySU-6o5zFheWE}6Uo*Eu>Dmm%MY|iekv0j{s%Ue^ z*FMIZ$rdF#}>XK7d@_e)F-q-6rBdLckr+PHBTsw_4Z3o@GEGr>JYkC5u`-Bn* zB9Eayp_H8Q?atA+JQ?cTwyx(YiA4K*pGwu+Oa=Y5)?>NaPOUl>O5d;#lw7x_3>gC) zo4YjMtEH0VYCqK3Z{KeG)o%|&zkb?2@_CPHS83Wl;BWWc;q7}_v-=Ku?f2hzA7t7t z5o~S?vtHhCHVJ~ws_mdUfse)g=lpoO#eTcf>Z#Nz^1@2px_(FLzSj4C?@eXWb#I%e z##?RGe?!@h1D@hLmx<%~{@vv^Jl74$?d|S%JdYc>wY%9~wQ&QhE$d9m(59fn4xnT3 z9;>9^=(nEM{atrc%&+Qx!PE6yJw+Dg#gnVfrSVt@W26Yo00wn4G=q#GCnt4pI^zS8 z;Zrn$)8Y7Hhu}E0m^6r_0%tm$fy0Hw2M3q+MxYD=wI7UE9PV3@6atc1^r$8&21c5} zlZ7o{JBAzvAd&`uQLPSAGc$r82?E=?*;(CLyJK^0Z`!(zX7!ua*6oeOtAMS`SCN4Q z9a;`VW(Xr3y>~;>`kzaFi>=$P=TEsw|Xw3y-ve*+^dw-{>Ll(hwTmC z5r5u0O2+4R$7{Iz-YJyc+-!YPV(!%2Rco6ygV3_|$HD&q%^&*xzv+~>u6t6iccg9F z`)a;wPyH~mzaHc1Pvidp0aeJT zuge@2-Twe}DDy(owAm!9FG0jNE#I-YL}a_RxGtsJWZS!L;z3rnO9HGLDKP`X9!H_| zPg3-MQrqRUGU{H@!7*xZ+IPto6&kd8r(RTGcsNASn~#B|=dUB5#2J6nBPNmp`k`#GO${12Bs z{rqLU&~I*fkE5qd@QnQvI4;n@m;|(n%l^20Wc@FN{VH7xwQ*7f_2j8-#|wmvvli1+E3SwyjiJ zxvhMq)WtySj9e`q7+HR%OWJ+Y-5%TX`(A&v`8&H!^4&|DyB6Nz+4B}rfo;DfVnwnq zsUureMn*9&IC)Hs+PXFVH(9~y=V1Gv?Z@12Y~Jnu;Nv#d`F5~v@|~~C3uD%B84mMe zNdo1EWt4kR@#W*_4yyVS~nr4opqIw(QnhVP@OkbRju4eaAlxsN=Cgk@i?Tb z%M%vF{v+G7+q&g`M)UE&x%TgNcPC_Xe1AXMT)yjt>c1M5hxb3fT?)GiADn(Vum zu0HF9v2OPN0DIf!@BPb#Q~RyPt*}XDmbDNTG4@Zg{{WGz*Yfl}sMU8NC27~OA0m6R z*!SDDy3b6nmseE36NR?dJsWo|-6HcFrNiku1iLVHOPX&Biozxan1hen7UtIKSKD(& zzBE55`+JnLrsZ0))_y-ho3?=mb7`OVGk-DPg6P*?qn4F00Y^m8Jcb^O@uElie?7eemqhdH5TAuWj!Ij!Mm|W0>G~ zg)MTNZsSMyZC%@zB(1BG71mX{9DKR%4{de+h16SbsI1a)Xv6vFe*5UYz0&%w-!{`r zcd@+w2JKc3vJ3{6$~3fy)zp)j$E-A^9>c*okkFO@IUa1!Sm|FG#+LFauL0;M?S62Jg7&3>9dCXpu;1uT)4REVK4Vh&_sI;Qg=5&%mvp#n_6 zf&Cx~#Nj7rtUwf@K-5H&Qa@2M;Bo?Ja9O$KT7a6(XabW_08*Vq9-lllRG)u{6wn9} z1)`v55lTS}Vz?WHAP`#Xs)Er$nVjHEMh7ipP#hwV6#0Rnljf~|jtK2wHWY^Om>oo) zEYFR4;%j8_+eSX%)xZM zw(Pek+PcxLP6qpo`$*b%JMVkH+ikUthj6=I-g14op=@#d+cFb!<)E;;ed(xEAzi+z z*B_Jn=lJ8I^~%1#)2Us*QB`^@TgSZmFZjRto2v9J{l881*6+|tO3k+Gnmzu>#)HhVMd*(7{nQ z+b(fYn&qo@ayy#orm38M=j^ZK*RZS5`n!A*y#5k=nf#;tCC`1|TlUI%Zr9n5n`#&2 zxEmwxKkYNNz2)P#KHz(Ge`&;b>ukp6+ii~B_&((X8i|y@h-|lo5jLUJ}yN`yw-Ry0?y8DZApJ%V6sEB_v$6j-_x&G1TIWE-h?hlaQ zxy~(-w-$E-Bo`_By{*Ekm$r;d+i(nm35sLs-%a(Nm(}(w)O5F{lUZH=0Mz^k)qN+b z^sc7eKT%erNBK!@1%<1YS!c*f-O}xGZdFMK>3gg*07B!+xtTmt(mygQNVe9u3NLLg zsS-c};*kV7a7CxK->6d&y>Z5H@@3>-9Fe9 zw7Xr^zf*P1_LRE%zMHc#-SKuUHmwp~N0u_j;r{dfKG^GRZoktKuHu%~6#gBj>OR`{ zhf&eeyB$+^+I{W9_~H2;()QPMcISBTdmiNNPH$n)aD0`kcXoWI8G7CO7gd#5qq-7{ zcG+lk%~(Ol&;3ru=TE(Djr8leSC!g+)6w;N9d5;Uwk)kijGPwI2@*kqSwuy0{{V_~ z$2v({9fw#!7KF_|NdS>p8C03e#|!RSH2H=^U0Fb+h+zXb%PP()D%N%J57b>UK@g-% zDv10EG!*_=a+2;DOf=9`^pjlrlUj@wvbI)$F;g18CQnSoNhClSV!#Gy1_>X4W+$PN zXdvJbK_G^TL_x1glE*6NfCn=IXG~<$NF&2Jz%YR#vrxSNfVGiKuz)5KL=w4m5tLLJ zGlYPm0T2Yl5)Dbu_|xTrdq4>4OPA0jsp3x1J5LyhJ zj&zTtC&qE5t;=M%F^vU`pjNe!<(UjX>JBskUZH3rup^{ElaYz|U;u#9x@tVNpac%4 zYakpsMbl-E(FZYh$}-RDV*YDOcNiLGqqZ7K9N8{K!gwpff59o%?5KAmzN*_QLYUTF<}|h zim|N(;Q{5ZqMoO$h8_x#YKC($C(hXe;g1?u2wD{_Y4nf*>Qu?MP(h*637X)9v?LRC z$qJ=TsUQ|41cD@iT~aYsN#*@0WgjYnNi4uCOaP`T#F7CYEKeMWH-V+R&FQrQlL9~l ztaSj=m;u0H%nvKjP&5)MWKBHS(vews8f!>$MjNoVO{J~CHGo)4c&>h8zZ^bQWz4l3 za!Cre8edW|T~duf1ds~IQcV1YG803JTmrCDF(#5v(gen;R(?1IA^L%|g3VQFD*&T` z0C=z?{#Y0YMZeY#rs@HfQ${XwAc2=mIeY|^6*8JjBoiN05TEq;3G0Mc5!+X-3w40$ zNtrKFAl3i_DeHla`K^K9-TA2K)8!{36h>YVffEB(pHU-8QK~^LT~Rv06w>Dd20w1$ z)o}{8og$16m*9k&LCXjncFPT|ogPpam78TnRZUnCT}0)It4hhe1Tf`L$#4Ns29-Zt z0a67esqn_Xb#^hx7Vl|&EL%}gpO{R*T~#`P>M=LXWpR(oKx+~?ZtFALW_>au2ojKC z^dIW{rx`>BAaQOi=@8Nha%U-mVgV2!{P4suVp!<~05dZrgY^Ky0oBv5Oa*G=ym7Aw z1l&Oa3Ka6gAEqLc10#Y5$i@=&v<6>BW7HHLKw{bW&R}7d<*aHo>U!wFhh-C{bp|kG zFb(F3ugd_wn&(mEVlC+cUa}X@NXcqS!7@&G0oHs5E#1CIYsF>()onw;$ zN_+v?51qqk2sEG|Ns2dFVOcmICkZ7|a`YSZN}1FNYG@1p0L#?*VE%YRBI#-vf2jag5ZR7(Mt0e*x_w;=0M zB$f2&6Fk5_3;{7c=!J2vtz=u7kfLBo60`KVJu)~Eb+dZvVja)Pw#$a!To;$sxox)g zgsK+3dHpb1g;lhgkYoXZzH6#ySrr|dlxU#OZqk8!UC*P`kmwvW3%`H|po-(jH9j+gG;d zTb8w!zFVr+W4o4nk5M~2-%o5i*3F&AZ+CwaxwpJgcEViTSx3H%HHWq4^z<2#UzR#y zH_Ek0!q{=!p|&>r`x~2nrJJ^IDOp#wa9##jK@meU`C?Qz2$_;y!|G@>CVfpL4SJW# zx`3?!_~3}tVT;T?LPoDsK8msY7y*_D0Cj~2%u7fbWC8V5e7r^okR0`-004nHfgu1e zVACiVAPO$506L@tq%47`(48mDW-~o7fDv$lJfLb#Abe)JK~Y)5fCRVN8fgMXcxet%S1yf4bQGGBV0lJo zJf{LiRpw3S%8x4l0Liz!*1f*=)0nn5N|$)92Y9s5Cf@ z?r*f!Bbl1*)o)rGb^gaGe~-Ux_Z@-kFK6E5_DsFQ-ZwXW@5~$MqV3*8op!ln_YbSo zFK=b(#;mn`aQ3MiX<0?1CEm%ml^-AIXMb^AP2YHZ;rmznTiV<=towoPWuI`n`)(Mx z+V%&xT6ta7t${#sAWou!S<$WscnZ!0e`*w1e6 zT({~sqN3j15pKn+Y7*V8t)MOKtfGJowYOzdEaWlKiS8lQ{Dc|`9VO^l$co5X`Llp9 zihr2Ubzn!B0r4P~=?5=8CVn_IAt#jlOgp`M6SKX+;+KZ+ehX*M@pkuCw|i}-_tjCe z-daZVw_9u08rAz3*I9-}1bE_Xm9-Ytty?y=jG9ROxY*#Yw&&Ylbp6cs?&g_YrH*v> zF9ML&BmfjKflN*oLv7*A$|bvo$Uq`Y)cDA1OZbd4MWl>0FrP3H zK?Y)Ibodf5pJ?7!c@ueh-rsF^aem;omXNt%NR0uRys;6a88}b8&dqXU`PloA?vw9N z-dACERh!L!itRoA``jLK-J*9}cH8i`2GfGIbO6ehj^*_zAPqkejCV7*lWP^z=c&C~ z`%tuPej1*L@tlU=j^a-9k=z?wPCJi%{`&D?wwA`y!)|v4%P|)8+O%bxr7^cUt!3(w zj^!rG8~JyDeJG*W7FZXB6?d~Tf?~l4$?%M4;*Q3?5*!`WjBqrM90k3bl z-(FSn9WiKlV-A(Kw(o4aT6ExPy%ybdt7%fIt#|!S4_WRK=0xf_meR^7W|5!poOB{M zMqmIKX%y5Zp=1Jl4~~)Y!Hy|3^;~E+HQ<}u^j59*} zrS|dmlkcUC&fnfoweM*ApL4q;UhWZlah0}qEWFk8 zJzB@;YxlZ}rS`XN4_<8kv+>+;*FF9qKHV*DZ*sqFA90^>-)vmTX1TTD+n>MPU97vE zB-lgfU)XX(YL@^6F}Vqjd-R@VZH>#-E)OaAyuZxq{{Wj;3x8&rUsZ7b09gDHs5$=t zw2$)7?Ja@1?5_UyL+=B&wxRTFcNcd2Z+dR5TAdc|*yQbT8}`0bM5g7=uN?8Mmszz$ z*DciOjO%@i-7afUcdQ)E+&^{x;Coqq_Z#1=FZ1bKg^Xwnx2A$`9|FL8=Kkc;f1-Of=tY7hB8hIlsLA*E=_z)pwKZ-aFJ3{l>{Z z+c!bOfePC_1=!>y8k*A*`hB}M%~hVx88mIIH-u^w`+M&W#NFH8dtL62efC!J*`2+E z$nGz3%Wyd%MVogPZQ7ZF2&C5-{{Y2xvT3n9R?2Lqdkx3he{+9+e%2q_4&?2>b9jqk zLfz#q?zTJUwh2;OaIdu7YhW@Y%wnm1^r7b2UoP`2>}}dFTeaO94);$l@8{iLDY4o6 z)4JljPq22o-LC%tf7#u!diDLsKe@0`tXt(bS6=D;leh(vV^o-!ILmXM@n*Do2Hx7N z+Rk?$$n_`Mz6#eF!fbZ7_Lg>AZMB56vbDDnwzad`T1!@v+QN-0q7?+{iJW!T*2QhF z^~hPvlN27~@cz|*kZ)tT-ub_8Yug>)?Ee6Ib`NWE`<7JN?0ct`-Pn8f+1#zIrOnc+ z+GYkJpktqM^<7nJ=b6_Xny<{gn@3M=%Ga6Gcg>9zlZJao$8x-W{@u6PZ+4rJ=2d%l z(TqgU1};!c46)Z|S1`;oM-M+8rQpMm$U$8o4P{=ZHYhug?jju#DmeuB9&*`l+B4A)M+4AfKy9KOu{*Yl4=8Y-R{`AO<7_ijz>F z(Cdol2NZy#d6ttb18EEdsDMadD5^Xnahzqo0_BrQeZY6Mj>`7KxcQs6#g{uPiE87x z9-BjIC!)orVh>1~Vl35Dv(W}t7OeTa`#RZP?{9E@-}j%BR=)k+-8Xn{BK_9YZ~ebx za_!yC#V}Za7T5$BoN?@1n*7OO&QBqGE^BP0u$Laww|?q7<9FC!Zk_vohP>^|O0KA^jQlkUCJamcpqubSoYw|j&dz&{LhZ`rMzD*aCju;!~%ElXLC57_l@?f(GV zeYdi{#(PEWEuFgAUd8M#3yt3tTHWV&dw=&XYjVRga_1wwxvcnz#+BP!OOa*&077kN zSz4!`#M~aRaA(X&kif#wPLT#>dUTvNn$&<6C`+SAjg5I@x`SJnsp_1lwU=%tb}A>vVdA4Ll$XJ z0GJfO;#*8*JipsUmS2o-7G$9UskaGI}Oq8w;Yyi*|D`2)hwppXKKcpuG+{; zDx}a`QE5Tx107piX;DU*3nY_E>Qf&d)QR>-#jm@6dj9}&p88(2*SHU6yH{cCmuPOB zYP8(XCw_UW`(_huUe?=Y@=_QFu6WO7*7w}rtD3jV9vpsUCaJSpwdYdYXyo=4E)p2W zrzHJk)W8+2gQQ5t?QlmbP0H*|hD-<~l2o%Vn6ySiI3|?BByQ^xfKiEHC|K#F01QBA z{x}hM`%&IS8j!fS>foR4$pRJ#shB32;=ByT(CTu5i(Ez2Bza+`fXR|T&pZG++I0r6 zn6Lqb2q!kqN&f&$15Py5a%A~+rkipk3Dr-ef;9*kbiy?IiB=NuCEC0Z#oKDi;76zk zMg$lHFfz5NBDfQ4<=9KJd3k>$gTKl3&fV{CwZ7ruJMU|^MxJP;r-U?it0+*4KsH-s5=f*5d2=-s5cSpeALs&LgI^ ztyOD%eAz11+uF6NzLeZgXK|Z*neG>5dr{fEhkN(7{PFxp9BtXQmMt#plIHn6=a*~4 za62V$SAENF-U1*RR2gChI&PA$#!II!H=F4-Qg+Ar7w=Bq*?0c{w*LTQg3o1gc7J=q zYxV|I5`ED-q`rCco?$)`=>~~u)-P$418qg+14mt0=)K8Ob+L_PvF4ajpt;$x9 zME?L+29)j}xejOBt;2EOa^Gp*`TH-(+PJB`=3BM*e3xpZDMNPF^5)XjyNb17w(mU$ z#}iJnu4}tjTPN7!7%rQ0db6==?p12jTzDm~$*WS0X_IPB;6T7G6h>$+23Fwu@HvvYk^#amsr&YT}*O9OHdr z<&kpU_m6u!%W^#8cUyM3WQ&W`5Ni|D3RPTKhg9a=8LPS9XZKgE-W$E1&y(A`f%{%Z zYiEC^*ec;}Hs;OWOjZ~G03>5~Rk>bU#HKna^EpjP&HdN*tL?urx%KzGiMQkLyPy5X z4eRlYV3xQ|yEimzLST7hgN|?b^oiVyTee^03kADg8kE_wJ(~M?>^{ro_S~m$_L;TF zGrF%a%a-K11T{i7Z+%FxP<0BdL7Bqa>Gt$XIcwvvr@MP5u%FA~PfNQiiG8loSo(^@ z+jrLvNVL*odI9CroZ-@{nBa1)yE{9#~6PPYj?L?b?yG!Y0B+xmGju#@td2L++DG7kkP2O zNEp?1TW#{|1Yc_QyRDP0)~T*1U+|vec7HW)+ibbbn;XG2o0l!y)L;>+8sL^adKzO+ zdN&E94qHUMB+oYY>~0X3YeJDBU5S8#Gj;z z9Z%tgP9G4>v!^XhCJh=2kJXgwz*V0$ox4HMAct9~h7aTS48_JBdf^pTt8Qj-@80*hmc6z16TLZmm&Ln-iQhEq zA4+Z8%0*@UO(0|p*BS3xwb`?_6c@E$y}4btreBHU_xRZCUFOHyJ>R&Tf=?&zXLs_Q z&wk*t4d2;pp7$TM)b4c~cW(NZ79~W-Omp;A$|ZT|rBInMHz zeTwYAWw-%w_dnbxxxKO2n?1F${rBQ5avMFy_VQ?k^q+Nh$Y5y8L5k~np3<#!z5f8A zl@oKh{uOy#bHw)l0JFP0jP~QR`!CymBGOvo{lD!l-t6s=MT>85g5vhuE6kvP0^Ho& zcKDXZO6Ex`M=?9r=DxEAN?HLV`AI4uN{@-^YfR#}R!!B$rbDP0mKsT-kl5-Q?njO>s1;o0P!=tGhlB z4%|m;cse$egg=$+xbGg z0u6_mc%i_Ogs>DpBmxyyw6a~;y*W_iF@R~ooN*;^s?R0qR?Jf*} zk_BCV(4BZ;!HJTE)W(Y`f)p^Ci!cM*nPav}$RN5q%QS0Z z2V<+RkihymMH{*w+_Pu#_n%x{Fv$gYHFe3|?gKr)x%+ATWEEZmvt8dLT#-InfcGWu z@|LU|lu$2QLY4aZN4h?x589mD#c3wNxEL=Vai#37IQe(uW-t7pz2^jD;(h!eG!R1Ux~|dEc|w%gOSzqCg9G}GF=-9;37Tysw|>!b9mcVx)tor8LLE7qbB|)*-$M#fG*u$HQjMP zT^n%wBh$YmeUpTcC=KDScPZ}7mT4yLS^sVy ze_o+CpFelbsC3K+icA)Vnle4IvsbVEQ$EKT&mEz!h6u`-@HO*hZcN?e0kXZY0-eSuXJM& ziC=F%2diP)>=d!Z5HE4Nr{1%3aujz9$mG$U58Qn;!Hb#wW3IGeOT@ZE>IfJqGB19~ zVCB#oi@J|d@so#j9pDyG6L7f(qCWQRxYEQRY3y>E=xGfndOB?F18kpxSH8%})Z)OH z^{j%v{HrFu345@qD|7PqDNa=&{8rD5L@P7bQE+QeM}pU&gV{&dw~iSf`61+%|(Y`byYdh(=b z*=EJka1m;TOhz3JL#;0L!K({7_svO++A!2&pkHEr-e~c-X9e&hI!qRi`CBm2nUgG? zenpQ!kbZ)ezf(v#_<1;f2iCWgvfmzNOdvbdav?>}K|E2$tn{7bC^>wsxOJgbG(fe? z(dsOp&3nZzdrQE;(GM){VY8T=<*D>bS+I;N7E^>F#ttt13F|(z9VXmL?OuqjTXcuY z(NDA;8c)OY&`K3pgc}D#tP`Waw+9PnZNW9C_*?^7_e`m!{{g5#{b<`JkL@gAei#kl zKHD}@h%VuFNp$jKEo3 z7{}HD*H*;T<|ceT=|ADHtJuTs?CDxv`G^(=e!50!?S9|YQn`7GqE5wtgCm?tr4Vd6 z+|u@D3j*JO#rTYRn}I!UR;*XRwiBlYQstdvfy5-(W2iJzG&f4rB4CK%QaAG zXAwdRa(VUh&33Hq*I(sxqUIgku(3)57<|tIJ^oeCdsb=J4rXxkUU^1o(DMP;ZWtD3 zkb_*9+2z6j^{2=>TL*@nJD|l&7HQAp1Ru;sfNyM267JK5D`3-$S!*VBl*&4fC+fu0 z6}oc0-Fw0Y7LjQgI0kb4{S=wW4<~*qEpgUP@|*&?)Efss5}5TA4t4XY2~GJmgBB-3 zU;U)~3i@>>$y^efr9pktxBJE^UOtq1Vw>9{jz#AlAR~t~1{U7XquWE;e9M?*Ixfdu z5{>XtIQ{FC?b?&Dfx)LBpTNGVPIPx5wqAC0iL*;LTf4I#K>PLQYMZE8-B*8)_xmm? zF19l&%_?5DLqv#g9|*B}-@)f)yzB^wv2V4j&+TM&c{Pr{`WV+vNgD2$?|v+ukrEmm zn>cwPhgMcEg$0+GF+ixQG z0^E%0DYK>~rZYA)GN}NJ9HkU`cgpf^msQ1(Ql=v5_-RT06J9os;&Sbj4=G51H%keN zmKvQ}R)(tmkIIcmI?8Gqx}UtXyu)QRhQ0EDTMdT1`}QiP7I#_6(;VX7KDoM4>wV$C z&Lzqb+25Y{;zj`3C~7KHMmP79#7ESgkG!Q7L-B`Z)M7ZZsy5*~31IeBAPvY%vR=)F zBukk*c?l5uDiG=Q*ZbdD1I08R!Y9?a&XY*J3qY| z+W64l>k-}c`m=z4V=muk8;wVClF82=TO=}S=a9#>=rxk*SG9<#jtM=hZp)(?6^0gab$D6Cd@Khl&JJhR9MQ1_q&1o z+pblHwG)PX!J5T!0wZnlWI-YC_k$|&`c2A55$P)J>){f%h>qXaHP{C?YyS`u6=h&M zBw`^j>AS{#S)#Iv_jrv_ZO~SJMO{NDZjI$ieW6mME+AI0?GRMYW*8vUqX8MIJPTl< z`kXS{{M%*KCNTY9&L<@#j?PrU* z#+?6UJ6>+Ps{aL{C8diH6tDanB7A{7-q$?@Xopf70hmb&e?oK(ZY#=zsXd`JUV*as zf>dGTrWaTik^On?OP22+B?bn1_iK`R+IO;TL#e9*_`FUSPw4zr3AyCbz&12rxh_|t z7Zv+pYG{%N(+8CugZ8ySPe^QhhUKr;|LOehm)=c`rObx5zY>PSb=a~fb@=w^YI3I{ zJh2jwf_;{ke0h`z>jb64r(Es$Z%e5yq$Y}@#%lMUt@@*ERQxJe)_QGM`uIJ zK>bzBNjoMD6ut!-@T$Z9+Q_y-w+Hjg7*py}XUyIwxYcG%@2u>t%0a$AKt~hB@lWEX zA>P27um#MRIkn=*+L~qe!|%erz3)sBUI|8qFQr6|AgTRc@j%Vj**z3S@i`a7R#UZ~2DtIqhc1l+OU z*kXuKA7aq5E2P-_C+T=&vHX1QAJr{ug}4SOfls-2)U6m)`wHGn^Qq2AzZfws;e9yh zl+Z7*`ZDx`L5UGSxc)u)J061eBIvevD#^QMYS3yJdN4lwG2*fzWGLu_0%q9YZuW_uzTl@Wc)L(S zojD#|FBr9!oQY1^TtTCJ>h=+GoMgivw?9>^f`!lRzWVP3{!-&6wDb7d^t0m;Eo|qa z&>V3TW_iSNg|%7t5zzP@6OxmyVBx}mdi^HtQKD>tMDvM$uq%IU6Ax! z!HBpQ z`u@F?W6lGm8l-Fm!d|?)bON@P_1^i%{?-`lkn)hew1%9$$7z?}O5k3G+A*tx{f@!OAk-sV<2R3v(LJfh!q52C za&O(aTmQ9R-$7shWyyH7z9!igs~{(7ZiJ1ZuZvE0c%DHg{VeUXp0PD^5S@CW%LEPC zE8e#bLiW4=`rB^H$NwkmKmId=H{ltx_TFi0?#Ims)_m`?Md+CoBppQWQoZ|?a5Tjt zBz_oSl2)phpsph&^TPEe$9GenBKeuBB<&MPCd*30CoFf*qY*kr!c<=-+5n*?6EEK~ zJknPGox|Vuodpn^QIsxRC?&gz%pPyTTx)?=$N{J^z^%*5MMi(L zd6=e^&?Jr-rO_Px>uYK5aH}0BCleg)U@$kzq3&Oxum>l)8vTC$jf1mPS2$+wV`u;e zmrs7&6;l0PL3J9y{+BfMyxxZkZEJU6`*!bi$C>Ihqrm4ZW4#?FJE?jlnK#Zg*VLalF%O*w> z##(Mx!@lDnP}rZfaB8?XXc@04*W8)SkHpvlWrIi&fJ= zf~R*uhZiD5>E*wu5W@ce0^!u3|DZm3{>p(dC>pXPu zCc?~91ARj4ryTvlrXt!cPkZ&_wjgEb6Bb6{q`deXVpxyVyszzIAV{Y2{q}Bi1f&pq zqe}Gb?B0hF)*JklP`IKk9Panlb@JwQ=MEyQr!Vj+*$VJ_imT7|5B$-}lu)oP-V{Nh z5vj-Gdf&3H5Z&jE>S>tNYF!lFd9#2Gxk45W;qM=&BExqARYG8{hlU8)+93kB-$gpi z!+r5vzi?e$aOiK?cU8JDTa8ru{Z0UZFUd8q5UtCzZny#s@bnXZ$@Mo=v??}ISCWIA z=1PM>cluXmg?*Zv?|%_w(@BrCzX=atg-G7;y$0ZZ(@-XI=%j0Aa0}>-uu}_D-jVcs zEYP%d&fcdRJ!chP(rD;c6YSJ~#}dGE@&3idM~#!1>h}v4++`o9`&lG^`fUb(KXg4G zCV>EL2{`T(Y=m#u2tIlWN&K@0YhS+pJQhOw+;{weK|QVD~5Y3eOyla-pzVLu;H#G3cR*CFwsRM6-@{l&^j6?hVDUhS2#;7 zb)={g6K**ytb?=QL>QYF2>aNo39+)I`vBC{DmbfaCN5&t_|c-*^cLMh zpzlzjj+Oh4K*Y59s7g%*E1pJ%{LzQRvIQ5-9A<`x5>G@JG{v+wxJ17M^pY2qssYl4 z1R^g~_sOojsl8Rrnjb67v^yJdb4fBjGU#XaYe%d#2+-(JqwaWaDxfY68ug?k!pp{hQuN*sV$`-#w3QrdVPQ{)Xh zAVecnAWgtSz~JMRHm0QJrl3%88tBI#NxUOR~?5-5pRn=~!zxXNFW2 z0(@3ioosWQ-u^d6?)*#Fvpr4+kicP>!=m%-ALGAXQKLm8YSo{#QvV8HENGu^+WPdS zS@gbOo=dFa3(uINsSpSBo#le>N)+Dp=WfTXT*Xhdv(R%e^<7Z%m`YjV$|9bVFHj_MLi6#gJ3=BGOEc{iks0 zuaLewbWMEX4&Sy-v@bRi;eWlMjfZR3BV z6~ErU$PjtRl*apGP}6KO6w{MS^JxJhusOEchJ+7fVJja0mg0FVx_H+^&^%FZRxkIE z8h7{aGU#}Wj;{1jcHcs#@iEkFDi?e!U;LR=ia4e~|M@FF;ZZp`t|>1lo)k9~h?(zT z6(`=VPthK}SA1GE^bpK1r}skf`BPCJcFxQ1Is5zSyK`h)F%%5VAdf5e=f3n zC}$-@DJqjfp@{NzeK}Yhb-?;HrHDP-lsRsti4rRk{X{`+tE;TC5RDyeboVGjYbq$+oS1da zlN_D)FJ4dE(YY&HrFlxN!$X&mbYY$RLL8M``dA`GCUc?Vya*9uOV$Y*w*MmW*A(lsmZ=*v?bc~fVAqyMLe6;LbCev$eZJr4r zQX_xM2soO$Bl$8ncWxzBwTb&NGTXvf)MmbQ)A-ye0$*aw+inaT0q~Bt#htS!>1tjt z**YcSgUtCImZe|*rD`&%)MS1+CCR|SQzTdFQ$gF-y~8Ttgyz0wiTHj?QeVG}jsKJI zbE8Y`q^4PXVardITM`ylx$6(muQ* z<_-pqyS?|qzUzesnD-dqm^2MOCywtX=WV9~e2P(Sc*Re=kpq8SymDp6O#PXFP4vGm1RmJI(U!^UR2cD^NAcCN(^L!YH{ zf__wNTb^x5Yqa;n4UouFBvaeZzA~xn)-tog=~m>7DiddV~P8kUk?q{vL=hQ%293|kxo z4BE+%UJ(nnCa0Om9(Q&z7Zy~mWUWp=lxg{b(!E)9`XE}R@1|-@l|eBQ?bPTk@=~hK zGf}WByT+`|dS$ls|3am(^+r)kOxg++3^WSdeM|_dHF+p-A4dbrO-910}G*;oLVn$5v?UuX>x#f6R}g z`*Y4|E`B@jiGRONVoGZB>$srYL45aJywi*{U_=ese#*(YjqdSBu<{ z>MHCmt~`?!iS+LkSWA1OO68y##mpuoRant({mOi_1p3RAw<1Hu+Dx@hnBtVfUccwN z>U?m4cBFfum0C!cozY#uO&Uc~lVaYMi5qs|{&s)j@V^4+vzD%=KY^&QwOK#f@L8ew zHwnPB3GimF$Zu_up|a(_YwG$_^Z%5zKwvN1#%;mt$-}p25;Zd&d1p3Ug;0-QL*ZLQ zn+~ka*s-;K-2wqIChF07Q-A0f)Mx_UT;?pAF_`DH*EvYtC7j6p<1xo#(3gt{;jp#n zvk;LOuQlWp|D7GrB>4@yQY#%r~;EGx|-R)nTnlABTLaXgPO z4hsh9L(FZ)--I$P!7*|o`5xSc*)nM#GSsV?X~~8aqNpOU=cjkA9ou2^)r-RJ$8$4} zF7#uT3rYUrz__!g70J7ty+F(nqTc3RrW6>zvZ+-WGF+`X<5H3oMt}9{YI(nVZ2w?3 z;1Cz$7(2YqG{`g=ws!@aCRREumcBcq=!C~+ulZ9$1LG0v-eKuziT7f*x(O10p$pNL z+vnov2&&x-A{-Hzvu)};#`Eic05@3QOc;6^6p~to6E&ODUwAh^n9TDCmW{Ukie2l# zP*)i(jBK>Up}KjGftX@vRQ__25wd<;7hTV`J-h*fV=5K7=HV`Mp8gLyT{@O8RWij4rnZ^Jzs4AYSa4(N zmNtW4sU;0L&5X|9#&sZNG18I>g6<)=?^@0+buYo%G2zp`t{K<~{N{B&DarMP?Rq!x zx+W7IYj%dhYj!WDi9AQI0zwBFlGN*pl$AAS+ygw`q>i8NChv6B66^7oJ7d9cbVP@B z^QX~&4=S2S09aL+4gYf;H_Iz+`{udZd@$kN*<^JI>Y>PbY+ zg`pM}YfiCa#(UpuH_jUpUk(#yu>@pS&id>Bd>>9ZW7a}|w|8a9PI2;u-9w=up;H9g zTqJi@ugh&^djhoSateIdU6F|X)-vx_*-I=wKfKVLxyH;ax>hx>oH?5cBh9d>+!1wT4TRFNM`*0nMrl$TW!G5*S5O~PtI1rz5_@WFm~gqFr;#Z56!=n?Jjyc zN}uGP^_?f>o?Ov9vLo-LZm0CSm9iq~*4qRd>gYn?xZ-{BP=PD0Cm^iNI<~I^OJWB7 zE-Ze6V9v&0x=UI--&*PF!ZjG3GG5~R-v%DZki7lZQ#u5@R;8yH8^#VM18z{UP4c;qAKW3jf>&%H`d~{l2~>|!Yqfap&0%$EiyFs!+s-}g%CieP zM3?>bZYgRBi*yZO7HA;Qug%S;~ z=QF;Xx+)WsvE;{VJu)jKF!)=wk+3NaClSzvG;i0KgGv)}mX9)0JE}-o`-Y@(T*Ri@ z5Q~1}M*|KPKnROBn4_|D9t4r;LMvhxO2Sm5pnKc=E~iJh7ZCsKz{Pqj6b4;cL$7*5 z!2g{RX!hUFFenCB(N6J@hxC-3g=Z|-mG9%Rh&hmavj?Z=WwFs^gw1S7yuNK^MRS{2 zc6gbYi^$(U86qp1*lOq${Ed zORWiRGt04XydPL2O_44|g8cmJIU(&vU%`vNl*VA-Q~5V|NM5)2mD)KEiFY2LFbR2g z>QsZu_9&0D4co-ug)6OX<+m&TKfnx^pU>Cc_y@0?fc72ZF0bqUS7P=lm3%|liCjeL zn)cKV_}{f_Df&QxYt*j1%cMqMW%{DH;Xk=cn*;xAQyZwqd65l4g=stxA%ESrisqW) z7zgPz63x_6u(ePBDb|<+=thFn;A9|mz4ffPHOU*!t#kx)qbX9aov(3mVaGWNghz;g&`+mva9nT6ol4k)d=O?QcMNo zQ%XN>x2_^fC4hd$p;ABQ`~%jP;R{$(I5sZz$=*%*+$pTBP3!<=RyxMX3B(Cvr3oCK zVQV+DfAuk)n04Q-%w}~wRwPzV?z*#tneb323~tE(Rs}%lIchQT|J9 zRQVK&MCllrlKQ*dvlGOtzr=?)UKVgC{;JGkJvw;JE#^F-jTV1)_; z2EDqp3SZc^>S3L#!iS_3lS~koumxhE&ggjMnsmPs9GP90;{uV+^a-fp?By&Kkj~pu z>b61}P%YFzeYvd9`})tPF67RE)u;NH zDdW>up!K)D7>8i9rW9sJJKrAXD~Qkk0PQ4kE?08*>=%?XsX^%lx|Uh-(@;Z79I@5a ze}a{YP`;YcDMAwOlQay&_@y=laQEu9Qr?@{%3E7Jfv_i@wPyPvug2!ZJ+c~ub&+VW zJTxr(5j?Eo5^dYki3W?ybRF{eNVMf=;jCOT>GsW{X;o5`la}}K9TOi9{qbhsCVMzk z==M8ozkOSSPhN9@3!GJt^I>0PI}cniEx!1Ycl7V6%hc9~b5u6+&QlF92xdHP}#2E`u`ELVz7yaGGrq>15}Lv$eMQ>X0a zF|cI>skU#s+3@1=zc_BYD#sljD2%5be{+optUmlT`Oq!=4BHTR+FjRX)3s1D$Je;l z%`_o5d7W6?)L2OY&WztxUl>yKURFL**QdzKP{|Us zp<;4n6U5IrA_q1+{m*^vS z#Sk?_TYd3JD0fqdAOEvEsRo3I<}Nu**MpU{H-)|pS$pC^29V&(^`qV6h8p6tY9KHR z)}8BRRo5xJv3&gU!(qxi?(G;(Y1a#C06CQB*0LW*nRb-@y>J#(#r#DW!U-_X59XKd zIzyx3zwwpTFklVBV4)13|8ZGQ{&4nBYI|4%u0e<3S}|LHdcA^@$(uC!>-J-P!7ycj z>-sgPF1-g_Txg-9q~tE$E1jX*m6rPjMH7}g+n!uiMFY3dCRJw0C%Qt&tjzh8T#ht* zDS2U--`2h2;brU$Ct~)fw(t?2NZ_A%s6WKeu7OtQLr7hK zjMv-`*lRZGFDX4WuxINSyKmsd(*1mdX7T;Zr?jD3?@tbovyYfw;lL2X(=YHYOMwl3 zHeAp=9$yqm%>GOAC6UB>HXl0U#)4bI{s$-l;}=7`pV}Yiiw~8HLIU^IdO$WkBnIA| zb)0fPUhbG}S9fIIU$NM)JY>Q3bTgFk@Tn8H4m+iPmRtimGtJCo`g8tmP$i)2>!FH^ zV&1wJp<;3yWp0E!vc4|V8T3Vg)K|J{syRS72@})i0R8aKskLDUTz$qWmk4|!9h3BZ zR2g)32ns0rG^b!&_ji(0#sfsSkC;Lrptd8HRR2{OGr|qSqylswIh0oO&I%7Tg24+X z<|4mRlMTr6bxA^UOs#86P{FR7Ew8XzEYRFMML)A{Diq3zeh(p0k9_;>KwW)oJ!^<8 zHJhs3Io&(tQhP;M0+arKVYj;fDlG~N&zBzwHij@&o^gMjTddsM$K+qAo!-X|*$1Y! zDP^Otqm~OCj!2l`{0Bg;*e@rj>Ziqi?SW(shjRD%>!oU>GEy^@bgS3SBT;ZqZ}huGa&SYk zG=6@0@opn>J+pvfl3}*YOriHjMJes~8CDhsH4fu;gUjEl!ZPH=LmN4KuNhezX~=km zWE}5(EodI`e#`fM`0i_|H*^IbPE}HvDdua7;-n>+;>TzKW48qK&Zz%9IZ*-Rt< zW~!W7tM+8%IbY7l{{c24sQ~~@cdD4jzO2LK=3)SWq}*f=|D+p#DQ0E)H?y(58l&_c z^S05n$NS^&#<%3W1P#d&03XQRMRa%p4(^#M4<9ZVJR{@flpgb-vZotP5dV_Kw9VeS z?MU`0Zbqa|YC6VBRXv0!#Uk4bD<8RetBHngghBN?$DHfQ`9^Eum;GA~G&3&uzLxAB zpFeby&Y4b3sE)~wvPPZz?Io9fvB1$m{!D%Zh=mvb;U(j%;^TUvpn8vm@2;v;i%0cqAW{+vcj0Zx8wj)(kIX5q3$y=ZP>_`};@GmZU*d>4KDprnFT@qSO zPX}m`lI~&3Vt(_`+^TA}?hCU^Q(Edi>(xOd1+esM;(}VN{kqhU)9NBzJVcS&tInfunQZXoXGO56$rd|hTKdw$yR_b&h8H^??mR!e z?RkAyR{VUo3;FixdYLUp&tCZRWRV}#et4JnCBZ>YjMA(sXINh{yfirIwt5Q{2?#1w z@$qd2MwW45P znlE&dd3WJZ(yJ^V^_;%_)t4HM(%$x4eEcQkjzC!eXLYQ}VoqweMBXi) zzrQzH5tK+@`8rQWXrM%g&=^_SOwEBZ#^26Wa*R@F_X z&WqC)6lT}+k+6+nTbQp?$JE%jrf;a)lk%8%`u_)DxHVW~SWd5oEJ+8L0QSajY3I3a zd~n&(5U)t+m*=go8lK~rXgxjZ;MKg1r02XH8G9BL%g5rT?U6U9 zW$=)^Uw2wjPP{d3^p`@4R~gCP{#b|l*$0=^KahFEj(~r(+LTT~YwY!FAN>o*M95A3 z6DWjtX3d^qpO<7xy2~N%A;nkKY_GiC#x|#_&U!~*GgVTi_6`Y#LRO9Ve%B}bO(B)V zn^OgBbiziS7vSc<4xq=I*DfG@S8bM{ z`pDymI0cN=aGtv^H9-Wy_D5QLLVc%-+2Hiv+=?3Ozk(E2`8(xd`&ebB)!U@A$)H_+ zB3`r)@>g1UDgp$403{!VfY#p2%4Oxs0FmAHz3=E8+iU!8(%M%gs& zfs!OuWPYT(q^L=Hs}sW?>f@jH>c~Rc_A6+mH5aA*q5)+jX+s?ohlXu!9~+-j+4LSo zM&;%!$iwd~;EXA*KkfHr`{S+m4l+zgHPT(IK0rn;0* ziGF{lxH>#5dr&7{tJO98r!Yt~rn1iGSHJ_a2Dd-~8W7;e(7pLO)Em6j+mG{n1fIRM zkg(;K;Kh%dK{&-&vkt zk5m6`v0uYpZ-z~W{W$b0$F1Y@6F0jtVJHkaW7OzCw|OTb-}N9Miq4utVe29BEuxDc z-}ChM&-u1s4|GBnYAwEYRC|s^xWIfzZIt5bsK>`@dpPM*Mu(inUadZ7B4^O`)}Us0 zL)x+&N783w+86;*>Cl&w%|`luqs(cqv?Vz$KEF8y7mG3C6HNt0&7^9@b=9(X-A;_1 z0PfpI?0gebPm+PxKko|#Gy=rP4YYHf85NLiMSHWFy%k?FwD$+7ItY}8`{!`Rv4|tx z8Em>3#J`^iaaK+6vd=!IQtxJ`@-PU2wJVySZ#K5M&szdy?}M!3Xi8QYK73aA_#;N&LWC~OBifX&RA<1|&)@*U9$6l!rpW*2;UxUeA z>g1ly^Ymmy;%xAf>w;6bb=AARgeM)|{d1XvZPj)6V9ae(_f>eJI-Jtp#D-}`YSQeH z+mC4uT6h}0nR&fK?;+zrslaJCz>;~s(N^Z>*J&w1d$YyxyZn}EjuZ(jM8(cj!5#6? zxHb>xg5;d3^=IL`Rr&O}v%oWB$>y>?A?J*_nO8c#3^@)~9uJ;T)9W+hR}w;cf9Nxi z40*JLe6cg3bxOKSagG$Kb@9n6+>flmid7gh>9Uw{)}BM^=PFBBIB1Mxt~iVsx2gznwSRs6^L( zYYo;f&kjKBdHfQ}Q++3@?(s-Nay-wmWuO4=P3)F`*oSNA#8fU_kF@>eUjKV@P4L4= zXxZlS9UGe%C_rIU z07A{hczxm-@C8{!X?mXG`#maY`tp>ujmo@SvvQxh-Od zt@!dmcYfe6yeWvj?S0_(zSH%0!YzCuE&wIm2dnJ!0TKzOS{!SNuGqq#3S1(Gexcu- z&>#0=QI#9XHFI7oTn`(j&Fb*~4%`;?!UZNFZt^!C16>4ajRMYE#I95HVLsvO0Ar?())ob ze@un9J4VA&dyukna^1%(co zJR?RI(dI}yL<iO=?F^R?Al^{U^7?aT2yuL31I@ye!l+-?#E<;MA@y| zc@et@YF4!Zj?C+XLh;+y3Y6(^t& zbn+W~{YseHA3jQl`xbZp^?~%1^lJ0G7Yq^g^x#HyQ6YfNx2JozUz_lxJg=20bkea; zz$%nc`u6GljMN)`qH?j>NteKRW+7X_%ca$Ow@NdC8zjY^O@Ab8`h4n9&*)*NV6#&3 zpCIv+W4TrMJhH2+<|zfPJrIF_mo7>9)LFT@azr~mw9)@Qx__Sc*SBr~@jTIPZs%!h zQE$_7_yXRJzP;58oSob<>?=~Ot0Fl1KLC!v{f()N68ZhJLiYXE%+S_LGfL<oBtasr;)C)Mt^Mv1%WD7LCCc`p4W5Bk^M@PKD5Z7 z@hMW!IG0Over-6<;)ndQRz`)9*&VA~=i&IAj|@*FHqho&8DiD`A0EH^$eB^Z@#dE@ zGkcKWsOqFzG;JBl%yIs^KnswLnec_5*FXLIM*>5WZ&Oa3@{XMF;%^?P`>N~!sEm?# z(=UGZu=x4SQ5cSxh*{KL{kMibYWQ)K&9|x>N)Yy&LoS?os3GBbOCwRNW85#W>#(Zb z`g^Wh*Ka$z^{Xp78_`3Mp}UCoqOBE@OfWT&fFq2#wxL{ecD}R?G!vepmsj;m8{d~V ztYVa!z-m;Vw^HUVggp_oPkTova6s$~e?IZ*JuJB6@6*<|Q#fviU$%b;-;jzin6<#O z;RpG6#Tb8(ccRaKi>5)>or%NksSjOe=4YJ+(m_4rb?CL@0zIuEf)a&gY!nOaiJAu| zTLyDmg)0}evfB!d8RHe@F0D4tZ>#e>F|F(-i1%~y!tvzb!1c~CHo1Pv9YlCgh}*xk zK!e~5**4dMTRy?*6Pc>d902T(y+Pqt6F~<;i(#lkxmFv@s0#JU+74dM`$V?B4Zan$ z7V#b$DB%$U#{k8?&oa+mkE$G+PbKUcrfPtjm{WL%+p4?tz}M0PaVGlnzyO|M#c zoUZ`KD@GO7>vsoRSpfcMUva@V3kmP;PzG?BRB;p-1a0*9ML8;2*|RAWxbyZ#p9(l` zob*zE?Agv<1q~EUED>P?7~O(YUmU)$#}mwzOl%kdt9ATbx-=52qTo!n*xq-aGAk;K zH`l{j)x3O}tI|>cUTnMW{5v^`ZnkPcW7-CNR>S~hHZ5=sl#2#ipEV|nFK;f?r~c<# zq~%jTxgD>5*!}3H!=VdGl9BVGtGvjdQF)Ol2tB0sJ$g`M27PFD&~-td*oM`G9o&~8 z^|oYD$pfEyJ!}uL5_1(ktgTFR)qY z{4KDkQP$4b7X+%w=b`JL;ca%X0Owm*Lme^mv5nNC+x7&Fzr?>S>r|_D1VL;Jx@ipj zC8TR;2?)GdJE`&6BYuV<>b>CRU`uh42DfBW-Yxo5^!>zI%{@`OTXkoJT5{3|8UIfj zc5_=rkSi^i-%s1F9^!ir3`mbz~*$F?+zE*d)M z3!}Oox~}$+j7;5Y1BbGNdvf`t(YD)Ry9B^`wk%%}ov-xGrjarc_NoJqA?j*51ibq^3=T^q8r)FB+Ljgx`MI8DvkUUo0eSk4AV09y z#@zX6>s9(PWvL~bWX$8-1zC3uk<3G^gFAg_zO)5>1lb$uRV_rte|I>wkJ$a3E18m? z3t#*7rGkT|e0J`4@_2Q{O!>lahWPo(TM>cSF@oGRB7B#z{dpF$I|@|)#aQqS`H)ys z(XK&@6GoH`Vv64Qmn;fesaf>r$@u&2}&cy9NUuq{saNNqyDzh}M2VU%WXz&W@+e zK>L`h2I(1^wS#GX6$sDC^e!7;Vetlo17IZHmSA8+%{_Ain7q&GB9vw`Am09efV|ry z=&m9~O!({}1oA@Y-Ky2jxo7@Fk-enN<|Xv5?jQej&y57z(wXfphYKttF0-u0dbB{} z%JI~-w0kM+;<^V`3{p9lS;w>u+af=)1zt_gLOLiT-P>C*($?vWsyWK+#}9z5T`#uX z{D2^%SH+@-L;C?*_tr6W<7l&$lLrtP)y_RHH@=S=&zqi6e3qYqn;E~tW3>yW-e(GI zK>`3RA(*|mMfaIM6Pm1oW1Ek?1@bb#ip#`Hi`r;fjZk@%y9?ZQ-M?eK#b81m-Lqr9 znoq1B`W;rg0X4YUTDu+@48(krO%(3{4G_is?|AK0s%Iu8Ek0BVu(^=!*@v9U?tOQ5 zg$2rocq<4lfqynF*~G3W6*_u;Rn&mXE8p|KH-k3eOpY0$&7?YA60p1K|gS=qIRgbm@6n--xiil1Pu*8~oa|6<&s zx}>P%)^sweRfeXxv%s(jiI-I8s0uNOuZINU0!Q0t*-=Asy1NF}m644H)pe`@Mg`w(s`2 z?_KwGp2yJ-O17rY%Qt0p6U_VY5vpicES>ikLTEiqMXE zoF?-_PSY^X_F<&Q=c-@}DI2Fy>&d-QC@Hu35*v%?bBFDymbfq`%hRGhyc)6~dpvh5 z6ig7rN;GUJBJ1WdUeP-?E+LlDbpmKFPP~VC(b4&9Mjq{F-i7Y#?D`?IBhbQ6`QG}Y zJ%UYg>}38-cS!-?rR~VM28w)j4JRj=T}VWaQ}i{eE4jVnd1&|s3dRe_jw1Nzhp7N_ z9S4CzspD9D>mvk?b?87jWtMZKj1tHAKF697B4e$<^uw|djWRLGRY`=&A# zG9Mmbw}o**n=Agr$T-DP_p^Dh$T<;UgN9I40m}Wz0qoHHju03kjbbh?KI$S@LfNe& z)RzP5)lf^@!{|>ubLi2SG3}hqz+@_5jg3q;dXdS`zYV$MkXRv$Fd zriAQo37zQ|@yF&Y7Pl7kL-DZo-jn<>$A}epdG0!iY3_VLIo~df(_j=b=f3p!h5ujP z&%C!Pt;g=NC!W?v+Hb6@Z6Tj@u@^Og8_13^{J+HxEcQ@t3`;Q6hiLo zjiihK+Z{l1^_-+QF5LhUp~=1{X{{gsmIxp)bnk-8vb)9G=6Q?!>-TepGNjy^U#I}Z z@odVjcU&XFf;0D5kNyKaHBY5|USG>^&7 z>z6YP{#D;kV%JKTb}RMPkszgR&l*gq%2;PJw8iHWx;FN9DORxYD^sadwNtuaL~8Lb zuFIJsLdqot4m^CYWVj4P@$4<4)`RGd7x64;2>Op7c;$lgwq6`g9g`P&Z_x+uu*pH! z#7C0)u~-hie#PzC2KPR5|LoexFs)044_?@1fp#|yQ|=aT4; zPC1v>nl=e1B}44~@h)>F2}zTg_wjKhUE*Y3GOp7NOVO%A z(u@C%&Vlmm9@lXG2LLV?=5(Eo0}I>&>LG_Gw0)qG zULbqE^L(ejS`of_+yyCBTl^n@O3^g~uwzTuVhY1T3e6X{YO7mZ@YDP(!O~9afu8$` zZgWSzj;iBGic3bUk7p-R>RVUTL#{7t zVaylr>N`U_g{qb^ud=^ft*CdyQwkUDrwSggZ)Fq@#4He=fTSI)cLW*U(%}OAajp$& z3qVs~7*y@};MS(8&SqIu!Vl<|?r{&2Y{V<(=L!3`A8a@L7`^Zk-Ji^MXo3hcv(`&I zeVMwelH}HX@TfhuAErVeNwkbHeQAKg#th?^(Lp?%nTt!1CO@~f1%;)$wc$}sUyCls zU)JWi533OEK^0q_X;%-0Pr(U#SX{nGpk(XgMa_=d=y%UcCtMaxdaBMN5`nO_oDUk) z{sz_-GmCz2T9)50dlv0T@8EEaOHo6ZK-L8K01y=1&oX+uwlh)gHF#VJMN0Lt%T8++ zI094hhutMFYCh+Q=jYEfnKiw1ePqhL&4Rmkk&i_rb$aDuAD}b>LsK`vLI@Qe2^fy> zMKI@oot?!<<Yi|~1&|Y8L@>7D>rz&0?vF~%qgXPbo(t@`qVb`W|;i!Mj|s9A=Hz8 zPe0_Cd5^;jGkHEH+XEW}t{Om)j+Ty~&&#;w>u5X_y$!-Ip~poIa0n4_!Pama?6&`q zl>~k>j!F4?Xp@XMu?>y#4^U<8_i?l93Fko8u)1-JC;2iO<|KuL+^v1qSe9Mel0!!U zQx(6eC~Y8mnKd142?eI6$Hxgl%ExyW0OWpv@G$cG# zoUjfu&Kc&GRM#{a24cq|Wh&-{2cuXYaV@ov;Uzl4$u1&dq$|wW7~Rs{8EwJ6Z~=X- z`b~Y=G)58$*{^&9mOMtHM8dAy;iTk%2(jwduBI&MI_ZY1;Uq%3j_mI5UORKVR~0M( zDA@^t_udQ6k}xp>t~FFeM~;cJ%^b*h6qqS?r{C)rZ^jB`<$jcVtSJ=EMAnf@>`_j! zA@lFYg1JuV9%Fx5B}th!r8`NwpwW|DzUkyYGFrQs+sU5~!cvHdkSib^N@gy{dJn2)J|7 zPfuUx^^D71hbM1DlnciteyJ;@C3+VYD-?*0R*I?oal6*ug#fu7)WZsQ+dC9z;bGvG z!X4MgFRESNhGxkHnJe^Ck}XEDVPIv%oIO{WIx7#3b{F8ca%eA@+WdCyl4sy@m_NS0 zJ#T^9^TAPpLGS9P+CQ#TBTAfE9s8t}fC6rXFobDrj~~#u`(F_p9RVw{JZ+dYkluCB zlOlAA>n!(;vdUbt%js|a0|eIJLlg~*yg#f%=i+OZY+t-ZtOb&)wO?UU2xGci5T&_? z5_+CGxIrp2VKIqdd#abaIAZbAt>qeL8hitO;1RU`C+$|R1BG?v9t+4(8$4c0h4V^eM2x!1Db0Yn_AU~*YAH9Yr-ZvxfpSmYx3QD(&T4lugUA%1{Ejl9K^%@ zWebUHss@GPb#+c``UaBfMElfnt-k&IdtNh_#aGek7@VymE$+Pq{&2}l1MIY}A_oR( z<6_VY$dk5j80fWo<<#EtBJIoDMm;`V`EN{#h2@qW{51&UfZGWIV3jss<5~gNI>$kK zrUVJC?nO2XLcldPFnH2fO<=5t=65b$zpwR>68&$rg^9Co6l&Mga&XcrhJ=ifXWbGM z)cU9ccNn^qAG!HwEKv9g)#LLE%<@^qeGoj^9h)Jbs*P-Fiai&aQ597zCpqW`bHlw1 zS?0NaLq*>_Lm-_~mZn{NuYk75+U+}Rqrq!Im$fwxJ{O#FZeYYg=H#Lk0$o!q1qa#H zrqso}4%cXiXV;On3YRs`TT_tWqIAe6wkp#t)C8CdRhu(h`)HCpWKZEcd&`Itgsz?_ zC%P5=I~I`M;#!R4G#b>2RGkof$|av|^K?)gRZf-=E6=b0lp~GFFqJpHpSi(|xHQu= zyHJ~7n23F)=z&&j#SgQ=_#xdq;X8FtUu-5%Z5pM&a*$H^#n$KI@R5DPr!?N=o+skdtOOl=bwb;zIg zUJKF;C}$&jpJ?ARVG}Wy7o3RH&opHJV`XKWMI@>)X|6+}&m?>YKqXr|%!(;?H)8#C z2@t;{d`B?-b)?Rhvo8f_-@CFFnQ_Fy0b10KL*Dp(d=e**-rG)iWAW1B{2>GmU4))_ z#w69v7QS+KNNrj7Fd61hjCgb`ZLr%w{+lfBn{G|eGk2|hTgMkJi%_B;wc>(gCwp&X z^B8^k{QLfbVl^0lJf#YvFt+6TBFI+X{aLx5mQ-o?kBgfiy%=#wgG-zuvAVKxuM@%| z!l>L7Km?ek{64LF%q=5th^P)`LL;X;Oj_d^i83j~rw!9mS@nSmd5_?j<@usfd^A>| z1J4P+VBM~tUwP!|*PJo44+#tj4D>1R+&iT2T+A1AZ_SS~bNCbcsnzVwpjT=BTFVR% z_f1hin#;`u?r<>;T-c7@272GLV4+=hxO*6lmVh>L#M>dCq>o;#e zfwQ;FZF)^)}yVe`5`bm@=b^(6wj_QgXa5{29vLZm1M3>~Ux1>*H=%X-54J^iKU zvIs|buUqm9bVCsbfhOLW+Jt_ZSf{92V|pxEEE&inanpJ;fGxhbTE@p(u{KBf$j@EF|-{!#q&c2 z2(y=*(VqVSj{Ey?hM_nmWapBrQjhOV6GHtKA3?|}d?{xbw&YYB7g*qKal_)(S38?U zOVv+y#M3fG1>XS&X{UAy0_*;v#UTgf-wa~|5Q9&2Vm7?0E`<8CJ2m@sPQ=vRYYwGl?-W;{`-Db!r@?@?DMqar^DZj zd%qk)N(3UA#~GBm{K1kR0hCd4S>HYt>-Oewvh>^yX2* zqk@K9x*)TT3Rxpje%BuT!9P_*Pc`|TUg`koQ-ZgnyR-r4HCjxvx_qXmyRjr$>=DH3 z0&4<{0DyKg(2?YuQmRkaO8NXF*8$6%9a)0&IVmX<4Kz@bfdRiMf&Sdy#_yPi^ zy#Wqgd?VW;>*P@+-tZI;Yx#0ZG*N9N86XuL4yYvAj!;b;`ufjsP2QZ`g#Sm=tpb2X z&3nMMwu8-EX76W<4uf%VVw8?XKe4VVnV%T;F6y5kLs_Q|acuOUaAcG~9Q7&p_eAUl z2Va*Pq{GklJ-PJ%I9SDXdnk+~CIkKvpSRHI zk_T`7)0NOLKJGmg+my(IO8&+uuF_{~-ayrHY0{O(?JM78p%yYO(>2b{MN)Lw|J*`PV4Um5=o9`Hb&=Uw}I(__=*dMo*^-zN~-hpA-Qm!$vcc8j(^+z zlBLLPq^)P3NQjKAKNKUKyhEPLp`UAL!oBbP{SLoogfTlMfMe|)d4}C)>v<-roQ!cr zLxdE;2uPN;8q?1~cSlKa{h_b}6GyHTVv9MQ8;+jFF}4`*Nv zx^KTh97F}V24&AO*=&6kw}m<|BVpPDHy^rqGR47EsqyIa0pY3zFJ)Sp4=ngFIUtASIlb zEIzE;d-D9QF4yrv{hj1eQJAKQ1O0;{VanXfaTaXxy~x?Eqy{}MYPC@#u~Iqm%yWH( zJH&p+-5YvCo6w#!&c@F!hE0fP3pU!aG#@((#q|F?k|DWxH=|fxR|>B{yXgH!r(;TV zky?UDT9J_F^$ePiKTX}+@~+Cv7IKUGm3*3ffKN1PZ*FMSqy*|M`#%g-^dnVHKJFBe zt{EGfoOzQwh+|deSw<+_oTDM#^MGo5FH@gSH5C7hP(O>q8GXJ&_o16!8VDTk!j_-3 zf!{Fb*S-R}oT#z=t>hQC7B%#bJ-d@VDVG5U<8XQRs5!3jz(7AS-??L#e^4`o*YJ&o zpVeU?4p-~DwY7SZU^tG_@uIMyhTgRTV{gAsW`x8+k7IaU%H!on^ zWs2<0^PkUtg%f0(lSGfJk0|PtbbYI888X59n=fDQ7c)sMqH8C<3OQ-IJ(A?s*OU|% zj$(2zU1hPcf)u;H%>dRsFMKKV{JWLbP@G|(+i|kE%f-Y$k-kCS#>Ne|sk=m^ia-4* zzRM-m<^!LTA0;);pA$3t{<3=dy{O1R&-sLn!(g0U;a{QPw@mM5Yk6sI0s`)ok=2Qq9a{i~)L zVB`#ZuSH1*hym%05>knn71Jg?U7p(&YNl>k%)Nuc~{$fD;XsYxJkX$keU$xW{vJmbIebkF@S z`Ed%Zc)fE>)Zi^1=eWe{PeAI`Enp7cf~wt?-gv1kyLxrulMa?2RJVbGG1&R#BjnN; z-DMMOOU35vLbOLV0PcBA^P6wIGw2HE6!>f4FrR&5rvX1YySOXUt91R=fH6nza4a<>etO9v)0!=DHbK+ss?l0;{G*S`BNBs^D*kN zS*F%F7*VZ#SRDGtoTdDJ4pg`_hS>;IwO>FjQ}n|;wY{r1mX;tZDHWkl6{<)!nUa1H zhTJ7!w@AR0{Ix*}nDrk}D(hMET^k5wM5y`M#PdY5MCa3 z&;WAd^4BqpcivX&=M_&^bPiL_*r@7x3`<=HQU;G!XD=cue7t+ypTf93X(jK#YS`KJ zW%ella<;24n}UHU8?|6(S_Qd_oF;f^$|k&dDbRgW-cO^&eq1g4vtKhL8TfT(;3#p9 zJC|6`^V2lro8iK5=@0w=YK&@JUB3G535r_;r%adObv-C=WP7g!F7THIb2*dkK&&`M zsYmC-7FPR1vC%`M%`bLo0g3xnS*>?Wpjq3pD?Uf{HoKuO$}nnmbr!}JLsJHitcToQ zU_#la{B7(ESg;%rM3r0Fx7f#A%Aj`&RGOsEzuakEkzg`q()W=NUb2{mH>XYSo3t%N z9(MU5%Yi4XLF$V5U;EabO?xT_&;wbr z7JaF>|BkI+V)#bwC@RuLc&9Yhy*3SB;Ks|Q0$t9_D+F7xh#{Z(i-6Cr{T+mAa|OsT zc-Y_ihV!${3p&Q2_QPUCy*FMLhVad?ZcgX&VQHH-}&4ODN`s z1yFK(q|IT0BiZz$Pzbk_!YGK&r_l>sZ|5c2@U5>pvCF0{2^irou_amkM9lWML)}%u z9UWozfiqhvAQs9RiL97`nH!A>Z>3j%pfZe+h~7i~t+7^i#x<+JbJ27zbADLt366fm zvLnYd=tG95O%o}w9&P+D(1yG3Hw}98o}H7XQ2mp=>~FAgzQPm|n?CgocR(_;WU4ia6;g-V1%B4L7(=#FlMx#Cx5oic|$_ zJlktmXw@+K*=guMOe>{gy!Qe@xKwBmVO*JSm+_D`m+>MbFyGPhP{_mUb{Gk1SFp)G zTbj*=YAStO`eXW7H@<)BbITOU`JSczYRyx?P2^gD|jr^VwN`#l%-U|tdy6nwsT?J<-Sbn)#ow8uaGWtz49dC;1i524{_zy< zgTkqHTHgP8%+Hs|p8Rpi@z-#JbpH&_uT9K;(7rC+BD^&7gME%y29&ed z?)BZDwQkd{HK^}L|H#eUgj&z!)!$LuS@^a4!ldY){_aD%#N_>#AtF2#2!rQwO|^aO zJnZ3G^=9#v`$r5BL%v{%Vh-8!@9F^kr-MxAPUeOuJu#O4v(F3aj;ovnwpZoD-F%R@tIQdkxFWqCnzvWd?|bS;;7e3a6NoW zUcnWnKJUG>78mM1Q>RgkD7jMo_MH{?GM=oxlaF{%yNs-lBjTaY#fuZ@QGE&i@K>kJ zr1(Mb(5Zyr&wt$$O(MIW2XD3aZ@|+QuA%K?5nyq9Rl#+XYxoujlmY*Hs$#Kz7%R!R z!O{uM)5F@o1ecM&*NsZszSn+}uy;Fgo_`fsd4TYoS!ZiR8+Nt~o_GGZ`VUZkh10XI z{?Xc8%Vbi#XVV;6u)uvY5bznp+;JM;s)0l5v=UTx z*|!5rUmzV^8JZ<@xrFEV7x|a)+0c|(;72<{Mchx7puK}-@s<4tP_ql(ulV%~+>i5{ zoawVYc<8(T0HRh(B0>02^kJu61Klc+c4o>A+t%?9xVZVLeHOXbm>+ArwRS#j zc~Dd7Pl+erc#{`)&o;c$;K!98WBY4>h^ifN$kogPeVdl+@t>W^{{eCzk83WKYwsCi zt~}g?ktgMK<=M95EQ0}u_ghz0k`hoyAzPE{LMXW~w<+%!uF56;$HV9Z3cUn#QidXR zw{u>-{ZNUpTP2$pb{n_s*!rJWb6WfDEWu+@zEDJCfjmL*H3avV&DfBA4vXB>b!q`} z8WYd+6^q4}a{0~f`H%PayKNSJwSQjs5H8-Nuq-+yluoSwgD;d!C*kOCbp`Yx+$WUT zk(cjd-MKvqZMxVP`z>oOSmnh$ee119lM?5v*~9(ap@94h_$#yg>5WecuO}qG{RcQy z{v|k8Qa7i|+`r$^cdL!sQIgn2ReJ(Uuc3v^$DvExBgI2+xRhk=_~|?*ucoKi@WrD5k$#fMf!Q2 zK%AGHem@8-Ps|x@ogDRO!Too)sM3t*%IG-sjBkp^$5X73o`Dfg$>p-2wGybJ zZuqvP6SDLH_X5p*QVy zmSdA|P}bCc5;bcG32RTu@v&LMKUk8QNrBwNPNl7Z#?EJ;kgY&L77yDzKhN1IUrHm& zG~)^p)sVx(H|vGVhV55}FHaBL_t{?@6wTuPqHu_v8?C;dEbtHz{mWW=XuyzdlaI8( zPl6qgjt9a0a>qPIM~#N-vx0xHr>~U)LY#gk0Otlb3zpyOH_>-{M78y*sL`Q^*n5*B z&7JD|-{6;jjs)Ew1(nn>17=Ge>H?-C08xT>A3MqPid7OG`4LtLgDeFA*4)erB5jsk zQls;6DorVe4f9Olw|>L|YDQv_KldFaMKeHQi5&~R1RDx8rt$S{j3%YS4u z{kq}$IZ67R!4ysAco{cdRZ6kH-`&#!)QZvcfuE=gG<*)SmZ5I>@td{$VK5(?@2LLJ&Z{Sb@hQ!OEZ0ggCZ%au-5wVDX0Ro3s&}cg?s~vq{XoT&z z@%)*93AQWZF!(i(eE%On;Lwl|WE8yOZGZgI!gJqiI?K-tTlN7tPf}$F% znjDHD)nok457_ZYds0&S+qUQ8;>9j!;xtt1Hm3y5r3sZnU&rnk?Of$g%~A@=YHjf` zeHBX)$m@HJ%aeqnfc5Tb%a~4=mdpWf`T!hfYrETJ9Rg_&3i-U%0%#1~Sn(&&H;qU8lT_ z$WPnA!tI~Tu1eF+Q4aZ@IL@03c0hU zOs5TmsCSaVmu)4b137`wXx#yZWKJyI}(z#d9BdL7&B@CtD2mQSj}EQ{Gzq zgPI-O;_lXsTG4&C#}6>U+XR&hFA4Srja`NYyecU7_0@072@0hC3E9utszbbnk*z66 z_rL30M3nB@yvtiZTJ{IURi2|-4i#^QKH19r2QWRWcL(_vB~40TwksR6@fs7$eL9cB zrJlX5pgFnwlc?;|`Qla!+7*`Z?>@!qeZy?68v#)sw$Yc(-lQD4#9!oW$DD?ZoI3mO z4cn7Yw*4k9-xLtN7>^aMeobok2gqY!T50xVV5pQQip9#KqL!0%iPsvuDvRx$RI+1u?9 zH38g@$L!evB-`(@OvH@H{p)8gR%^rn6lReCeoZFcaXDM{BkCbt8l7X_hX(Zh46e>x zKi|I2G%V9hOsCMA_)A7<$Vwz3FUQXF=+)~8BLT{)Astn6+kf9fLZQxu62_*r; zGsK+oS484|W5SJ-M44-{<$FZ3(?b9|&6ksz*1aPDnfJ29Bao*Yj4n>;j^cNH{{}Wy z_XuUJ#2Y<{&$AMao{-&@AE!%c9fe!=0b)#QzVlWXh0uJu`>?l8&#J7AgptTWem9$; zw1M~u*l&kon4@=(G|A!NNSDm}cT{Jxfc3(PCOs`m(oxa8=09?R&^5Zd)L#VCM@zp( zoJC!grMq3M01RFNf=AM3zOeUs&rRNHvZgn@b}P;P!R<7ixy37~?#j?bFUH<*MGs(oxRe2m}IH5p%|I6fleYD{%!pVvtcOW(J6N%R3gSMo$c+cGLz!PAVy z09dGN&c7q_nk&h*GJ)f(X&GCNpNEsfH@mXzGH4)n4{SC%sAwECNTpNhHoSSfOA?ur!*RMa|2$CFrvYK2@pZP~ zmD#boaF1*|*3G0r-{pLRO~H}|5i@HW{j+YcwYzz=IlsS&GR9KB;UOs>Kx>ENT_=YF zwR4JF0^pU8cY=T@%ZPz1U~ieR?lHjsaU^*V4 zM_o^@z!wLc2*rl2mB`x4JLx))_N?Pg4P%Ac^tk)lzbAw@C;)68O!9*XENruCG46LF z3ABeS&=S2zmK+YWQs=Ml3ap=Y6+lX~%JL`+&D5Ujzy-ypD-{^QB-)u%b)3;n-_@wq zaK616EG0Um1D2H!1W7j4WTXVbE0!MwjUx|*gXnD1m#IDcynIHhg?@yp*qBK1L0ZA2 z>AEZ#uG|PSvoZyj03a-xl{`!hN})-8|KoIU_{PuI#B@RH&wI~g>kcuPnFBh+CaAMb zr6d{cxv(Zhv2j@h^6_%+M>Aw)HR9vkT3R}u+CU;ODtC#;gy(9R5qAV0b*o-)cMj$( znh<)dZv%@Ci}d0=Dha#h=vmOcELHYIrE(Zjp*laGlzmnzxl(xxYSxITSNP;34^n$l zuMmLQPyQ7j62ee~?QiG(aC|qZ zs^1Idf6Zrg{bfzHcEz6dGlP7) zvHUVE%z8!32WGXlb;1dlVn`}|)}s1yXfI+TdkyIf{5y#{r%_f!Q?z{8nWapZc$I6f z({0iZ^)P9LU8}03>R=9k*Zo_vZ*O0Nd138l;7P$-I4BO0D&XTHWLsNJ50v`)zS2m9 z4fEk~jdIwRpUC8jfWyIhNzfad1loDo0&y4ws_V&xxph z&u!uP0cyd4i1~5l&~^MbEp)Oj=hY`lar;{vk-+#*mt%47K|Z(cc*gA?{rE3`PVGuM zh*;0-HdZ}>3`uO!8<0+X$bLnHvi}}SRwr^42+4XNe>8QhMv6VWjtgxIylHPbfS0F2 z_bW65REzr48>P8!YyygLtlV+Wt&C)$3PEO>1hD*lv`zl-&lzqvH(bauT| zMZCJFT6kmVDt;XI0699$i4*~c7<3Gy(K9pWAIcR5J)p4GAG#*HUNe$rWfIAXc2KDY z&#ne*gEDLa`euT@9eaO27eN-?Ea0D^AAH7PuCSR- zO_Xw4#;%uaH?X^{Qrk+3*Ls$ga@=CckU8lk)0z8=vq&g1$ctC#2f|mi+3leLjp*fQ zNJxm!cSDz#;s)%S(F1ORQ{CU6`hV|o%8@E&osAM4^tP*#4=;6}e)ch{AdD!cnxm=O zKj``IjnJWW#m{?3w-XEVCn~7b4g8C&Lj%;lX9Av%H*Q_Y2KY5*!)o5n=DHBSJuyl5 zJ!LhzB>&6)utovBkAj)g5&BB(n&#S;$MIv#Gx_k|>bvw=({4w}3|(g6+JeukS3|Gg zPw1-q@FyQX!71H0yWUqYb8rgsJqZ`k<(64-(uVoU!|7#cwwwmkA5r#1 zxJGP_U&`SK*OPFbF+Wgf+4c)5*u3q+2jHM9hcVjA0)+LqG6`WKgX{?u*j5kLvP?L9&10UZ>UVD2lehEx>E zMl52RLXh^I%FEu<)z{?E`9Ia!HTg4(u#b@UT1}XPx zlH3;kN3~G1PctE5KMI4g`;dLLPHiT>*Txto3J7ZWopx)%u2F$EH@SjmVhjWYBLnaL=XHh z2$ipnTC&69QdWXew`|~Ei$3jx18>$YMn_Yep$TCi2sj9f3+2T>6%#sTh?JUl+cev3 zlGX464R^v*F747n@j$-@T$?-ahIXbdxc^blsaNPXM5@Tg>>A8RU`)$fALc>A-3an) zC^YsJq&n5zy1golLM%+%jg7Uti;Ou`jt{^=^10UZh+HQ7O;G7`S5-|{@0)99@$lNyKaZ-M4EonRa=YN>9nh7Yn1K&fI*^m;~a^ zUiW6#bfC=#mj0Fzca-jwH1wf_T)u4%xyE|=*y4B(^$IcY5hc9F2W8q@#0NGw1%_vb zU_&*sFuB6p)%-b0FRyzf^>P`6Q94`Mw>RkUWX<8>qC*|to-bhUy$cNc?8P&`5CHW$ z2{~O1d^m?yq#dpOIchW>QUwq(R-W?x58&ZG8>H*8elt?N-B?vD|C#B*$zzHGYQ)lV zQ_-Izwf)wH0G<;N+I_p_b}tavMeld$iDSW`2=ogeRNMlWZ_gCH>WN^53=Dl+$cs>J zuR1XnIR_UltZO_}dH@aG4i4oS6+3vvd{I+a3p*?V`9V~}q*{I>ZJqo054n*bsbcTr zxu(bV{UWaZ&RLmOEPo4TKLzQe^y&H!0bON$p{=~G%TAwhoH(^{ye;P3?mCRw<~2I6%NyV_$g$BEG8lUFujjfu*v6)C@f^PDEEeF})FTYuRL6vlV|`-# zF`$FFWyAM@itIoyP+aWFBWVw?@Sih`Cl>br&0ygfOo~KK)2vEYT5wK-O@e%)+dhWz zfdY`#AY15R7VNrHPHd$EeLEjIOW}nmI>2K4gRg+)_fR}gx5IDvvFcZCNy5w1&&zK{ z1-O|z#;!IIjpJ7_0d~S><;lso7ZA|r&4&D2@!Rp-1te`y;I;j_S34qDSYCK8unF$F z01nU`<8!b{Z?O-1qK#zM>>dykfcQ-1Iae?L$Gv2aV!;VpFkF&PG;zc?9Cn&|G3 z^W!P;`bq_qgS1orS>|dS3fOK|h zoZ}zq*`tc&p{V-2O@*Gb0kmCVA7wLa$3KVga3#;vH6pa52c_`=-UJzX21jfzK&8Mm z6gPe6Y7{Z1e8Z;w4A5y$;H>8_Lx*Am?DUQ4W1eul-K~K-vVDkE>Hv<2KpaAe9Nh+d zse4cEjFK3jq4$5dgs_*ar+%FVF8mVKaPC*Q{0ir|#?#dj8Y;^Rhz^Aodx_vjdLC{V zaWn>vS$xY#1a~<_JbeWof>m4T<&>3q0ryJmmv=(Yq5JswPG16kHV<7)*!=jmDS7x- zBh}Dh4ufrLpSBR-YDj=Zpt->kcsQ{WF)3CXE?59Ngw?|b+1~In1^_3M-27gsyotlA z5gkaYk5&hKTjZ`Ha+!Z2S^aKOyuOUqf9KgnQ5FezzDcGb%gnWpEc~Q(y7*QV>xwiC z?KtRIR|;Qhf^J^aJHhYy`YXU~UCBFJwr$+!$l-1wHjQlYmBVakU(_7xC1;8CDB@6x@h8 zG-qS;)nqrP!n(j`!8~OT2gtNSJ}c$FL&t#?{;MxPx|gFtH8qd8=mPViO#b_6q{-JOBOzq!-RyXXx4e$GQYzBIXEvd}4)U=Q0dtw$A zs@RGR?q=$e5+Yk?Gwxn)n~-k~2kn#J)Er^RJ^Sh32D*rA*s)zKg z(VFZXoOZfPZ@pF&MshcACpA$=-P(v%-b5=?_CJ6mpRylDoB+r`6}#Rpq;C6rfFId# z#kJV)1F<&wg!fnc!JFp8aR@mUyO6#2AqcpdV?{Jg2P0H3V!zg)t=jDwzJb74^nv~1 zB4)eE193Zj(2w>+Y+l+gVLl_*fk)S!?w&Av^{qqa_C;Tiv6sJMy)})N;F7oCb}}x& z!@0&v^-=J3Kuq8R$aLQh@-ghw<<19Q=&Rjr75KcDn@Vx(1AC+&ve@MqddZDip+}z3 zb(EpT{sZ_@ziQuFVi{BroZ~Q=1)DY|$?I*7OZ2uItVGL04P>7<&`&Y(F|5YwoE5sW zMDCi9hWC~40xrYkvhNZ9>eUm#)Ze0}P=01m-}T6@5~&6&FynXr^1W{bTq2QFGYj3* zm-YCc7*|~Wp(7ao)(&d>zBi^Sgc1R-6jMc zGM}$nPtu}de^c9@pI`XT7}5l7X+gbt9gRRMVi(Vcp(E1KHs&K>-Nf~3PxqE0(&Fcg%Jp0y6P>*C_{Cf6n$( z3F5ByunkX9aDLdtl#d!L?U(4^_WuCOCu#;}H1(vB#Li^md>N0Qe0wIlc&;49V)Fe7 znWeLJ9;4Qd<<@iUJLL0X4hn!TYD8Bbt4RS&Jdakx$rsN!VlykmNFxB|-+PO**`_6H zl<5$dTHVHRx1B$K6bIFfzBi_K(X;=M@9xE=KtFicU*|o>1|1kJZr5X&=E0<9TsSvn|U6 zRX}J`|0(D1pEy5|d(KVE)|cjndlN@WK%ai^Qd2vE4_SGu(_m^5d0q5*n($wRuDzrF zb3&cd?)-E?=HP#Tgj9{@I@G56KlSs_U981dN`FXUHOBwXQelbj4v#_Q#;0FRu;1_2 zQ`CQrws(`?|0q>Cj{*mF9>!T77)AK20HJX3e}EO3{PsH#^spFwi=zi?z;7j>hA`ER zahyE@UyU%&m;>TwO2Iy8G)}C-vZZC?gH67YRMLlJd8DoYwQEIty=P8vTl=#xYU!Ev z+Y<1HjJ*I)Xt2tVC;xe9$`fPMM-7!lMCdS*76SD-V=&^Ya2TTGe^RjFn$yE=bot1_ zO?t24TVj)`@9jL$Yu^Lpj^s!(HF9zDC!e>X3EpOZ`*^XXI4yU-Wjt|}EdaMzr1wDz z`5V&iHL{b#ApH<&CoozQz9N}>W9JqJY2i|mTT_0?{Tc!L(-H=JleyTjoQ1xX%U)Db zK5L;<0k%VSMt&rmXKYR+S7hG?UW56Nz^Wg{?{>-u0o8XK2}GZr^{z&t16)gnFzQ$4~#JG0w2eKfjbXZK0=P z|4L8GS}Uf($M#d9eV`A!VGHAgtIPZ%f`t{Pex?*;mjVwDm$Y9(dJHgEq%Vq=$;NKK zXy?(Z4pjY|o(S0*xoID2ML<&Def;b-fk0BA%9jtD0~yBy@q}r7?>Jy4^p$CoQjVn8 zf>b(=XUzu2Yt}7F`hgaTImplJiKU1n_xOKvt1z5mP7ua=_ z`U2)I3vV)a2Lb_oz+j^ST0NL_vn11rN(y!VWwIGIF^0Ey+qB**s7&4RoAdn8-i`l* zk3=7SZvTsx*8Y7{hCTf_2WM)2bV>O1-v0;uKm)&W&f4troX*q&wyh=LjtCH;QrgH2 zP3uWPRPEb5a6W-erXM`U?X2IF-0k~sj^sHei)$rD_r4?+wR9~^fs(}^ZrE!zYW z1_S_4nMg4n5e+lYWs7PH9~Q#Y{Y*T$&X7*5rle2&gu)8qA2m0^H*97PJc z50)mgQRV;&j{!q~Pq;G^0W}ge5in+GMpVEq5;|!V24FGhs$#K_GDUEHf?|N~x2|2?&fdbHQ!hTP6p>Mm zZm!O|E;V?^d953><*Le)S^brJY~I`byL(OB4P!?uceeJu(awgqa?{-Ad!?6~-WOL2 z&3e+`wuOypIK7>hvcB7G*>Nv%zE#bK#L+)|J3F5DebIfEeWGmj+}iVf^SAdizBV@7 zSh2(HH-UD>@dVrbxBEXIyLoXZP&phM>D{fg;pLODR;=#jRwMUJ_on-8{cEFcp*GfH z#@k5JmbSZPTN`UO)nP&-_7cy7n{{SYZ<)GBJ%Uw>r@1E`1b~j{qhkS3Z+uQ8BL$!IXY0Bxa zwybe{b=$jZHdF;gP~i~}K%f9u4Yu;NCCql36YQ_Fw_UUL>DhdjCtEbuDauG3u(ueU33mZSqk5`5lO4G}bXmM!5u&<|RdGgiwAP@NyYIy?e)@q9lqak_lbb062lVAO-!kd zpyDlQt3k@_^}*m@*^6KId+$T;m*3adxZ`^g&A)5AYj(;W%JLkp@mrH?CABL0Tz1UL zsgde@anG?ko4o%3;FNwxWty(qtHOiQueqOffB6V~visxigYK7Wxb3fRx$As2({*jI z?oMB7{7(;OYUUZYExO%?PzW-(>)f{{%d|^_f~mVIS69Si{9=1X{?Gl5`zOV3Y&D+X z_XCgQz1{9tx}a|F@_qNX{pQuTLIWF?_^Wn6nTh!0Et;>km&S)qRXSu#NrNEBjHHSjCZ#|?^4cIDr_4+*jRBCer00rSK%z9sblPt>+bf=~ z&v&`n+z=P`_byt32TcSV=LZ0FQNY8!$M)CS-+VYN-);NP?U!SFo5OGH-P_+@>Fu5; zd&%v^`)1Y4`wnTgqm$Tf?GL8nUDOy(GQQ5n;^o|>T~~BD?Z*@(@3z&pn^sO&6T`o= zyF1^sf4^UH{>Qt2xH(>X*be>TId1ayyNKqu_jw!riQHUn+;aDL-HqGLrB{;KtJvIW z2)8{uZ5n|mn_`>W7kxFKHqy;s80>x>*frf%+>Wbms;-R(FHlD6S?%*3kQyXo6@m?R8MuS%|Kw3051p6h9SOyo|*{{SkVFTZ2CG`ajZrcDsMKp2@oIYmUaVon?ubD45 zAM4y-dw+(#YW23gYz5TbqugTmUBLvZk*E+l^rjV?m}ZM^Fq9i(j7I}Wwx>&~qL4g* z%xWVuCoHnU#P*=#aG%}}+J}30hqxW7_ciw6&hcHP_Yc{;U9JO`*>irSj@B z&lSyG+bf-yEwZtB?bzIr{l##sKu|{qQ?a>S&-qs#=!pYZ`YK_ODy2t5b13VdwB?O8Z&Hex9%So!Sh9e z+~NC}p55e8&y}q;j!4-C@FT_)n8$A3h9LbhOX`s&bRiH4je=08vm@bpb*Fp0Of6Bt>wVoG=AjO00=e* z>Jn9olA}}>sE82I2$+w@5~G>w0kgPR2UH0Q9$-4uL1@JYQbbOrk~E!C0?3#Hq4ApG z0?0xGQ%MkNAeES`gVbQ)90u8lwo1czA%YlcgYz+$h9>E>GBUARnGH}APD&1HDfN7D z6AeD$gkUTwCrQ-9Q6v)~r{Dq0{V=Dr2NTYuC~Y8VQanXTW8jlq4mp*V00o1MO&}dU zT_&As-UGuH-ClHZ1ZP*$57gcoat&Jbh!}^K+R7Skxmun){{WdEbT=KN_Q?H@$1C6G zJL z-c`-3d*o2SdiJ>VD5bLX56>FyZTXwg4{L9l-fkZmF%HJ#!ulZU8rIX=R|Eu0bqeA& z0*A}uG22&r)h;d(P8FXnhgo*6*;du5u85ZemDEg&da4GTJLd58z_@suV`8JqRaeZ% zR*+#vWzs~D{czn{aM>v&lkPITvO>&)4?;Qxgw^D1Ibev12mDO8NgPJR& zZ}u$z0Q{eQ(C#O_{{X;mVtc1~vbL7m*7vwc;dT1zO}DdR_*=IM-1>on7Y~xFweTX} zep14HgooRG*>_P1cXQa?fw8*Fxe8kU042(8u6bL~bhZ7nX~_L8NUkc1wbwEwBK}_usp>L9Q3v@m;yMUL$B$Kzmzz+M95Ta7ZN54lA9f6?ht^Ww~4t zk?=oi9?fuWm$&>sDcyI~t~2gCx0~MbqT#zGhosjn+C{JF02sttsp{uKxht(wNZeh& z?dN26&86G+{{U$A?-;46k@oyX$XyH|>Ni@^xc5i`xyBDNj#q)l12a{Cgn1PK145#z ziIEyWRg>Tb1gAPNz(F+_&Dsc)0cIeN2p_`|>4c_xM?Z)QZs|8A^=Xo!MI=a(<5M`Y zbHsHJiGdRz^sAZEU&kyiRjbxY8)#N4O+b%~_z{#3hBHp8)4&7OEv0-EOzG95Jw5_) zYU#dI0O@9F5J}E5sf{3>v5Mm&<0WWfNzBtw$^ghuN(?CD!~=lP%!EC8Lr?c!0V*YPm2El)8Ida4k=~wJpe-r3X>*C1$?9_A_AJpGfY#$kSGukXHx-n zPMMV?n3^19J|mex5DdW~gbb?QG6ir59K5rss90txm>}d%0Po-zkjrV#PfbxV1$tl% z=m}L>3=9>I`ixUglt7-o7;+h9qi{rp)#VbvHFD`455VCAB6_OgtC_BGG+mhfCu$6NFpMOGCIkc83)G;0VbZ=d&S$E-+DQ(WZK5>Yuy|- zZ0)nxIcJnk4#1YdPa;{Ek%zosj=H-mN4Z3Z$)<|O}kO+y@ zBmzf3e=I>+n0k{`8*2uV6+{5Qft3lFk%U%&YxC)X*}>1kO2$$AFa+cPOk@?w@FTyW5Xuy_xJgKInVz?uO>|-WRp^_wMYt9uv2A zLN}eo+2ua_awT4Tx7dqTt*y&3iEn~1-(vpkJ;wKgxc$@nZ}(rY zF8c@fHQN23z2!L7ZR7GivCHkZ=Jv~p?mpby0sD))O|IqA;}NJEb(y9WUp^9syGgyB zs_8iGSj6^fV1IPJ;eE*czx|y1d)YkKdh9#5?i<}+_u+k=x$Z}9?Jn%Ldjs72yTSQA zvN={>Le~-vwYYS%U8n%l8u0tJ#^-j4{{W}vWqNYg?N-+1Z&&#L0Aoyh!}fX0{fhf} z+kbQ4Zhqr;{{H~JeX~4IEANMH_iu3TIUe2jXM^16z1`cr#}RP9?72I)?yy^GNLz4c zT8X}YI<;o%Gd-QYKar;McB-vnwyux*p1^x!-yCnbzTNgWxO_mgIPUfBej~Xywl=qh z;?~r1dqmwn%`ZSVM%Lq$VnoQqxaV+crW1OZ;}0qFiiIP>BvoPsdYm$c?b{kjfv-#e zMNHB<0hIx)U;>ugQ0fP*uxn6YR3A6Wy=^_ma z5g~OGkpN827w8y>WX*m`tgur>f?bFrAdMzLh%_S(wudOf%Pky%_J#J9!TqiAp6j;H zf41iN-*x@Z?jHN(`CB^`+Fjdmd+p`>{6BB%CCl04R{I)4i;QC$ebo&{t-1Y-`6IyW zTVfWhNPz&<0&)k$^`v7MT5v63#`~kPdo#Yc@x^z~Y4*o>af@=@#M*a13CHsm716`1 zTTS-f@jx7Eg(A7)lf((B*WsBy%Vo3Uw!2P0kJ@dvTP>d6*4JgS+1a(W+U+)$l~Tsv zZDP`;t2Qkl0aZW%46x=@egas~nso{VCUPLqN6R{4Kg>!viUUZ1pk*SNh$Nb2Ip6?U zNT`EDm?RQ11EIhOKtMT}5hP_^ojzDYWm`Il^3c#0=xh9G{BQ#u>l%DINAo7QWQKgS z^FYo)i9a5c@WKHE$N~&!2Pmw`kPCQVDL7BP1|!7IY`{fhNDwMB6Vm}91kaW;&B6ECJv<0s|O>l_}+G&E5V}noD-@CCGY|j=;rQW56a+{; zN1BubO$Koo04RcTfsv$TGEQA6aDY=f7|4mrx_o+y$Ik#pBmm%w-VX_bDeOo+&5Lxsix3Tg=a z})E}#N#Qe*?v8vFs1 z@xsY3ytdu88fIFZXG{=4BQi4Sh6}K^-L(-apbW!QsHA6@KkJ1EA8~8FWk6w&>P1QE z3Qtl`{IK;vnP=T08jylO>z7HN>56_Bmib?BGRb<#W;8WAOh%JQHLjv(regzsS?(QM z(r{zj@S9aPw|8u9tRN2Ob9F4jM3Nfe8WaICagRE!rRp_D5?Rb#1?`{hm}D!Yt1Su{ z1gQT9VUqZ}Bn}zhd=O^u(2>(aR0fREP`!ni=^4 z6I?r0S|o1Wge$1I6#-0Dfz&G|xdA`N38eTB>hmwCx7^!*NF|7<5ew$<0<1^nIEz!T zSxz_>x7tH71o%r6sENzwdUe9GYOvQ5o|0ScZ5g!b6BAQbAXGC+mXnBa#7UOxyHbBZ zAe~iN&W1$Pf`1GV*c$kj`@2S&2O*wpTO|t=2?nDQ-v$ssy|>C*q)Au=8K#mc8IBc>(SE;4~AP+P9;SX8KCSPUuzNd!`iaY=TM#J1ep7?3J- zg%CjkNODvGRW$iwG_@WRg(L^tol*d5h5`rzrCKSNA3Q_|w!X{;btu4=Sbzk9NdVJG z>xV1`AC4zc(sH7A@4Dd}POk+yzFY<98h@Rt^%Q8); zXl>xLTWjPI=Dn$G>i{hlV^Joc=Y_e*vuOGM08&+M)XqcR@}0ZeiW7gow%7EQ{iewl z?f3>Xuu@e~GMUmkV=uj3s=i9 zF2)T!!=^a5H}|&`OfS@>%d6H+Q@iAMJFUyM_U+x(+lY>D-+gylr|X(P@Hye_rBy9w z^Bc2zmc7Q~Rn%nE5rhy=n_2T2Q{{Qn6o{Nta!qWkrD#HX&UIV!K{||@2s8^hiHc!p zq-D2rb`pbCK~<3o%bB4Bp*cb8i>uSKh!&vNv)rvB{fVycY{6<`p|#zjO7ZC8nm z8N}yADP}I>*=1#7L12VifFcVRWh7H9J_dT~TsHewy;8nrRT`KWCP6b30E~}PBNUVa zx7$;fCRwxCxuS>+6_VgU2!W)-QV5D-)qX`QCtPtdjfTZUNVzVq2{EO_fv7O*I^|q8 z-JC5+PSx@}nO4%sKq$7*u9apYSfK+hgq8eGE|!m+7GxG}+-(I4Y9>h1N0b@TDG)%< zqhNJy$tzedc5R_D(h9T@L7hRYC|Z1RF%P{I*AnEGK@6am^RXs~puU=z{{W}><4XQ! z7q#m3FBUBnT!;Wj3-wM$8JdEAc(o?WOy|Uwmi*~$-A=;yU$J%^&tdPh+OVl-k>U5govv$(-bTCoep7CaT`mV=XXzk_ zINQ~|3$64`-}wDa8c9U(e>28tENz%epMTqteF;8x$& z-viPJ4FaT`>N-;~C$0|TaEdHc3RZyD1w|`S)2YkNVv+GefURyr&xULNSZ`eP{ z9cQ=q>(Tmyd!C=9x0;-fyxDH{8=JcxLfy@WA+~l)yL*eJy-O{nn1+DDpHR$W`OEH~ zY5JG6{Z9Uy>T1>ArMRb_{?Ee));^c&{THhAwd(pS*85gdDe2oNZCoX_RnQk*S0Jpy ztj4pdBxBckxf6(q{QFNNq2*}FTW$9L0AstgyW{saHru-w678+cwq<2|W>q|lrR_GD zU}$F^#qDo)`oFflQk{3FZdq8glg9d=rF4F;(p#eIXsxql8A-&QS=k=w z@jcnJ{{Z0s0CZd0uPMB<=x%n+Y%d+jCB+DAST|3XbWHh71|4S~(m&!a=O0M-e@V6J z-lMrqpIU|Gc8Pt>>U^Q^&*L7i(047?`g(hwoy|B|ul6}3-`}+R{21kX&)Yq{-R}{& zH#a=rX<7{Xn+1zC>%1zc1q#BJOtYNv^nd({x~ng%<2{gmGrhF=n^0HRhx;l z{lVIAS9Gmv_S<#0AKkR-0DEs?#1O(io;69hmzTux_O)H7fj|EMZ*1LU14vZ0Zrh`3 zHp@n`Oc0j=kxIwM1y$9h>MKVL37buOE&kJUV|8Ki!QC$&iYfF(4wGCmT2>XuvNZZ}FxbJUj_GNe1 z5AHc0+}agwp6b&fxq9~$svRtDue23K8XSrhCm)CV+xXe_R=25oVoP?aZC=&g-hEO0 zU;NF#($=1f>#bX-Z7SWot{HRqo@??JHyd5n=V!dzUfOSVuGY7EEB0G&e{FFaMa0}& zCakUkno5zLK78u7w>Ecev$&miRh}LikI?$}q3Zf>x2LC3(_XjOy45uNH2uM|CgP$C zmXPhuk5M49tsU8XNG1s)MmZIoRwgH3jt7z3y5);C3CQDIH?8_s#rq>|aNM)Fwgs)o zxS)~dK&+Py!!uJD@?9rUxw9MlO|9zNRgDf_tEAiBnrtyStt#eI7fE?u)j;8*O1MZMK}1)@CfOCU3PMd7~e@`zQG^SyQ6*hZ~ZWZ~ae| zzm@+0g?6t?df&FH`JuhduH9v%ze70tllwE^{ma{KJ^pGHE()5gD9)ne30`eeQ{E^u23aoei2w(=dD)?;m2Wrq{OJKG$Ej zGgyw^2auc2D|y6nd!7fG*zY)AQ;)y6waIOH1Z}3`#_4V{-3?*c?u&##Sd<}!PCkt2 zy+fw;4xYV7OJ#alD39!Z6V>z`M?<~;03Ujmt&@Tc`#LRKXJuy$jknxgW@gY7gLV9% zQAk=-t~`phZ1B9XlyTWLuCs#kz;|yo+T8aW&+wea`?ourjYJ$jbnI_6m$uGO9ftnh zqPF*YOS(X1x-fE zM!mYOkvsI0*`fQ7w*BF;>NQ(ER9C1;XMK07{{V>nZ`l5&eU7$|cc8V~+uT)g9gVF%XV-qy z_qV3|t75yG4Q=%?n#!5*Fw=QmqSCqtV1*P-0mJzw)qs~ zIE&`Z;?~aM!?PW};?7=<=E@M430VNpjPd$Eu|59)>;A~~N_AeFxZh1R=c8{acWFPF z>3-<;XQz9QrnNWfmg`O}98Q$6z3g9lxE;p@&+II2H@55px!GJmHycnqtAA&8fx3!Z zN|iJ;oPSII0F6JDy%*no1uwH|?e*y{YB!bn{4?Y)bo)QleYw_KXQ`uoJo#*sgU)Yw z{@*$O0BN^R%I$WSIo{3PZts5Ab!OG;m-u@Z3@yF-AS-goCswlsGso0)iS^vw5~M`yP5UrPE$)9SizU1c6?g`h5K+0wKTS;nfe^^6=1K5ZdRNx#{>X6>++ z?g>P8lCGhbND35!puv{w(-%tBt6ws$x8 zoG7_EuW|P-9anbN#aS4FK*n2%U2sKG?_u*+Ufk$*Ke@itdwusS*_%#df#kNf`6IVW zyf1Wdi*DxoV#IojvEBj+zqY#LP1`T@fONqa^dEKmGobemPi453dZjUCA0M&$-|_GA zSE&0#s;=(ct$vQyO4Mz{cOFi6=eIrI?QcBXH+*sb0JV2^{{U;{ZL6LqmfMM2cecCB zgGhD?K~trHk=Gw9dhfRS?{9T>>H4Z+JX$dRXWl;3_m`vl!=tYM07G^6RaZ4-N`3|j z7dJ6|bSx{W^nq1n8b+Y4{{Y7n2&`k*<;0%Vxix&MR-dVF0@(ES))3nY^|*AExLoQj zED2cf6ekXkJ(fn>cC(ea!5tCom)s|Hdp)~drMs88?$l?x+r9&Ly12t=&v^&$ICFDX zp?w6+qI5h!13Z3@?GJl(p5NbFTb_P~%}Sj!5|75elD~+(Gu?eP`u_k2$8)@YrEi$v_s$o*yaE?T*m5<27S{{UqB z{{ZZ|^}e0E&$QxeKaLN8z3c2<-j{y8^iG z{{Udw;=3>0ozCx*?D4p6KV!~ruD0Ww;%%QQo%(=v@!NJF2V<{5rau(-xADjPw|=+M z*DmyPI;5lhPt<*kB{@at|H>kI4?>2Xm z^_#)Mx}A2Is5(u0_~Ym9qom*Hw{5k*UR~9QYw`Za?ENQKvDNJ@-HR(x_7{eMC0OJa zDX;Yb6=?o=#DBp9Bc zla$j*uTGyFG@(EUv#4pNU`;{mEtVV8ASoUpYo2uf0IEi3r-m1R08z;mfEY}yp12!liVVtm2@ijo1Y6pXDP0W^sOj|re2AL)QzEXF&dw73rO;kP}% z+`MMnmg2XT?Z-5P*+Wf9(=xemfPK}rw#V;Jd5|w?R&YsuHIkeI6E7Ta z+KX`F@c#f)lf4Ue?p!vm11K8es5cASL8U^o!!sifH7SqAHt)FG=1p#KPq(wg{pPu+ zHDS@_cz#4+H#?tAt|Fy{0%eK1N*IM=0D&OZqzr2kvVpo)Le0M;DD9r{=DR1kIKJiW zZclZ_^4lA#PUh9dZJzeUnRBt^cHUIGx4zUfP--#f{Rh{2uSMz>_e*w~dP|0yO+20Nl@Q`>|y>epxK`_j>KqRqitV)bzPTP=xPz zJIsIgcG=i}Y>!slj+pv$+J5!veQ#pBcC~5NC7RBs!ym|>#Qvx49s6}#b+-4Vw>7j( zXG>!TS%O3hP{ID4IT4vw@iUxb-z{fq^LL+;W8_Iygy>F_FiZ-{sV1hl9lYw$)FDXl zBLt5nCnb8Up#;Wf;tcnm_e0}r#U#GgosR>iJFpRnDC?=D_J1|17u>JZ-DC% zL;`0#Os4tXj{)9RriNlQ6957PPfEpW_~G&-V?fyVfFcZ{WTIHrdG$7^uB5^8> zwv&V`ib!$|00gM(@Q4IbF?FvZ(=a^*XjK77DnJ0`1Q`U63{_t@2m#fd8BmFylm7rn z6@i{Gx77SZBLgIW3bLQ3dUcNqbj4Ans|3Xwf~kT}mQ`{uhGZ+zgaYLB zIPqdm9FHr72mt|BBo*@y(gUo`4t+2H;h}4SrcCGbz!MZxG14OdaqlBF;0R}^T~nk6 z@{tA3lNv$%a1~Uu%sXwAoSFoQgQcKQlT`o;;0CIjX=EVEtX3TkoeEiegpPlH0w5EaQRM(m0$PWxh;C_WktNzRfm$D_MPhRJU=qlSapvh{A#DX9 zYBJJbz=E+{unlF85=f%yBs2q>nK=P7OuR4%PhD2lr(vLi1LrL!3l$ZU_>2Qxg=>jm z*3}6FToM4Jl0l5y_}~o~qeEIZF5O$2jUYlyjW8-fiqDP(Ex-;0DhL!3D54l?6f8-S zD@*|xYk-XPrPh^QPA5vm2~q^=29h(3F{JopRdsDFglS<=xe#aqb%ECgf{=+Y0JSYJ z#1M3jq;w>Fu!glN-OVscX%JPFqDY8{6Ed^%!!5LwJw*(b)mGiBcCDm~LfVKyA_P`{ zjt>%erL9G}b?PA7^J#(lPEy5YgdYQdO->jAj*VJbR49NbX-t}x{#YgV4NBJoYjf1~ zMc4|ZR!nI$$PR!XYYqLVi-J`FeG&ct^li)Rm*9lh;0Z%2h|`F)ljTpug3_=6HhrAYoI7HLP=YS zRY+ze!fKcc9vEhoj$byYaW4b~)Uqr2RZ4=2zyi&YWd{KDT+1wN_X5*^gt|F7nN*T$ z%wUa8H0ewx`-n@L&FE3Rba{X>Kv)DWW;CltWW@BYAL?64<%~H67u33qps-K}nMhg% zgCaVEo_I0x6Gcj5HX8f)(6?xVm;f+uNT4cJIzS1Yj1MS+FMC|&ggnpLa>%B3rr4!8r40b? z{*@hvI9lA{{U;;J5Jl%6ivR`={Egy4zM8Q$z9t0+vQAG^l!)gO*bgr7R~f&THUU6 zQ^QUNv3srGWOF<+_UCi^N9`{?+h*GBQ-b6@z3o-v?bub&n{Bqz-xijvpi!ktfMO#F z?QFbqsPIN~=iC1P$9tvOEOc8i9h-Zb zT(x?-H$Q`BuI^vA@ABpB%KF^rv|iGE((oHY>mFm0H+LQ?|VHUMPxx#^+JFG=JlLKNM(P_ufZt_KxNFKe+F=-+TRp=LuVTjsE~~ zc5eHW?fW-_mJz*6JAK{TPT97Wg&5kK+Z(p~ZNIp?Wqf?feLbg}Z_O|KT8!fvHiv9` zpZ4kQ%BTMT1HIVx`thz3KcU4ENu5G;cc|zu$yyH z^4UBWE_c}eJ94-8w)Q(kwRdj6x4mgSZN0?|f9zbbuEpeIo0lM;7{PkhVXWgHF;=UY zIZn9!PJiydwq7fj+uXBzhT3meT(!OC*KfSFp@}TPZ(1#2WL>l5NwMS@b674iw zm88)qo+l&sciCrc+P`yo!*P553w3W*>szkd-*33>%M!!Pt7X>3rnE^qo6FNYN7&n~ zpEGpt!N~iNwz3 zZ0kiUzq9(2{@ecm7N6sf(BD0k{zZQB{iwZW-*xt|?!AWDQEpxB&O+tumqoCnN#pm< ztCar$P_EUSzbo(2$9dbn+W!EW-*5Mqw%ZSKxDHpd`3tND=l%DJ z-E5Iv$ygh$UVvErL;$nb8rOD@>Tur!EzO&zuAZ;P4@P~s`{VWt+{+tx;QP~yxc7dM zXOY=&)U%n>8(Y4hBk6(x7^L~0H2CZ?du>&;+iPFP^Ey|L_XD*#J72ijcMlhS&`|6~ z>eaSHpe)GEDiM#3Mk_j+B9oX~+iSyL(}~+#BnCMXp1a zyKT1IR?lif&grl3FQ{8UmIfbu+-Nq?CNSgJy_Rjv$UI)Y)UP+xocgt<>Q7H z6#k~o`>xsVy~*w`x8JqCE!kV&Pjq-Q-BzvZd&jYRYjOOy5(pv$kEw-V5+DF;fyg*+ zIGA63b|(k!FAz8$e|OGo_J@0GcALK3=J#9&Be&dJqB!4d-rd5e5B;)qHb!tN^TNtg zte87G*{Z{wN9=G1vp(2+oz3@;yPoEIcka(8!#^9{`_F4TUy%0)h<@zdcUNonh1uPn zLwUVxclO+Mj%>ZFM{hdO4N1m{wOM&{`5iOU(Ji$rmb$Fv>#yv3CB~-pb{h+Pt@|6k zQr6naa(k_vpF?N4W37U!iKe%;)MN50S{I%#sL@35w!_Zq4D52)A$k?2w4p2BH^PKv*Fy zAweLT_|6BRc8*-QN6#1EM|3~DpK@N-dr!8zcK-kzy}@_8x%&#P>?rzMnXJ^OljpB>5huvM=0Rgt+*e>D6 zlx?=Q5P-i>(rVHr7OKWF(q$ZbFHMYO0Nle{zt5~nMHMj8g!I5HXW@+29(V(9P6KGy0cIL11du$S#DD;;a;U_&B$Un-fdqBb+GY)U z8UY3;@)%vdx=iadg{Zv)Jvf?)L>45VF3SfTu7{8(;Ne zzoDkxRjrf8zp^ebdA#kOZ`@8!+kd+Ijololb3Ml_x7%fVbLeqs&frCav2B=XCNdc0 zqE$^U)^uHCxae=V9g};Bf7#Dqc=o(GAACL4?fw^$wPjsy+w7j)-6t>IcZ#bWdq>#W z((mC+Uh1{oc9LASb8iKo)goxt-EY1B08L?d*{a9j+s|R`JFd%a!)3CxEb-e7w%3m1 zw(B}=?Dji!+3l?*umDSIV!#8#9Wa~b;&Qsxd0v%K;{-hmY!DfhN%atF1yY4*u>gjq zE+B5s&RJI&Gyvlu89~)C;7phpjUGwS%OT&~rrO(Gxpu-@u&;LY$7D-ZPy;uvT)N3^ z5O|XvaJgl(ORFrer}Xb4?74e8t3SKq`8~elZe5nv^NikD+*$Pm+;M9D+T+Er@z1H61#UQ9r zjT7cvw#`>=pMf!0bV?NParzwh?q}Nv+2_7Xc>A^Xz3p!!$!{9xuiPD<#y4Ph0lReS zHwOOzwob;=-vCdY2q))^w|4e7T<+C396Z0I8~*^x--T6o%f@rz@;JA+zr+6ku$ybw zc|W%=xnF%g-nnr8uE&e!`7iz%cAb{htXkEyxySN;k`*8pF434cR#XM zTE^Fx*xd;K0QUvG&9!i5nAN@giu3M8_Exs9$ND2)pX_zFC<&M)^a=zMLI<4+DV{{byV%Fl) zUA9sTE}QD;0cniZ1#rC9T)aFDIi@RZR)&f0kGHWEiwU;v?SokT(=F~p zd%C)Je2(_=hHq1m-&{{p=cM97gXzifjC5?OZLKBgCVQ9V&9!XwAGXrcZLF|smTh`! zjMm|Zv{oV`&2TB2*Bu*gLo38K@^iP@PriJ2+XuOR@BO@crF3w+PUr94_kVUjH@wnnb5|N1ziQDd>F(6dHv6re z^*1foWx%sojAs>4pIKm#Qwr<1Ix{A-CyaoDnWZ2wGYvEZ zg*2yA;fde?K9X5nNhVP1`eFcSn2fW-Q@}Db_dsG@g9UX)aT>%)hXB+-{5oNz-hg<$ z{#w1q-0l6n*n4fnU1sF_$C%?gcEzg>!HaSi!M|@p5X^sUV1gjca>qYWn#cL@IyPE} zd>*E{_M5jh{k_0;{{R88k!yzGxUN3XNwlHtShsHS+W-a8a`LgBooX?3Q?{!auD>0{ z-m2+4YF&Mp;g{YY@;loWcN2TH{?|RT-*=t+Z=v?Kd(WIJwc`@{#-CHya% z>o?zD_AGqIw%Xa2^J#I};p6)r+bc?zW@D_DATqJjs&x;G6Q71y>N$5lsqG#0$Rw~* z5u^}n1Ze^eYvOPavw>BbMX}|o>8&&~0j$({bsGFIYo>tkv#G?s!+O2@_Y?Ok?;hzd ze#eRA_|Ip%LH9PD9kxBXgLBS4$X-^AX~TwzIpg-ce_>bU-&)Y{Wps!Xi@CRg`? z&+j(g&2Bq8iFQtF-QMZ#{{U<_#02_|y}`Y;Ym~Z#YIjR}C2eug^u%s?tH_*5J9Xx^ z7KrI?2Z-7B#{G}+T%91_FyU?(iF9`EmBFwimJX<(n7Yk@ZAk_ubab z{@)cD@6rx^uQyW<=vw!#C#@fCUf1otm-~PAW7^HNwY7J&`vZnvT||bv++5z;-#6TM zuYRvu_b0q%V%0ie1k`xgD zu?AL1fJkBG5ISLT0ZJf?rAuiMtf`g}F-Vw^_*VgRS?28g`~_qXvE>E`)8*+?aE}nw z_<@2&XEto0q>!>i$|;h@K#;|aN6)Fjz(dNOZ3={WRZOhUl#*l^)${9x-UPo&K_;ev zRKpM?gA{;&juc=Ze%dSm!%#8+%*Z4`6Xg?-!%AEiRb6a&TmC}%l|iMU^z z;5+MKbuX!#+kQW8)-UeX-)DK;o1gvV z+mC1ag8t;Sr&0^umxRf%3;fo<_Kt-ki<3mGXm^I1WGE&%8f&d-vKeV>|O> z?6)avu>?*HbuCN{jJNW`c0dp#vODT({pR-H_^YUFulU>bZBeb)XDLyqXlq+3!L|E8-0!x( zbF`kw_j|JWJ>}$8UORovTj9CGcH==m?Yy__%EK6=K1Un#t3SC$qg*`csJAYuWwp4k zTfWu%#C~SY-1}$9Dy7}BwZy)yclR~|ZmfDrL|hwH*^Oo2xwGOnh zei{7HU~b9eF79m>+FB;f#wmAkwzYEopg@-%t+s25Gz}2I_~nXkNlB%yGBsOAD^R<* zo0qY>Z+W*0cUGCMC0=6X?FF?9fC!&TDo@9z1f2PJaN+U!gja5Ck<;C`YjL+*O>fe; z=tErtRkyWenY7$ip#U{vhdgVZCNA9e$I~Yiop(Ic{{zR*2!$w-5Hce>dlT7vWhOJ@ z&dM2Qi$X?ZuarGA?hfbdEh95-$j-QvdFk-|-S3b4`yMwx@6T&IU&Y-x$SeFID!Myz zjKF)o@$Emrnw%eD5Tr72z6$hTMq@U`gd2AtLqO~M!5$kz-QT~NpGedf1vrA<5Yq$1 zfQ5hTs;EJzT>@->I>f0msT`Z*pv)E43K6{QIHwv3g08EOFgRH#tmY^S+y_%6us&Nc zq{tz9)!9~y{_Hw;JWM-(7hcjRn06C3S@P=G|LXKt2pp~kDH$LpdHP-ohW%kj6vouo zz_wr>C;w7K>;|y+WrRO&a_hX1$5mNDJ3Hq3CJ_b}$kuB4?o%Adkp(}Ux6~@+iS_BvHn??njolQ>|U!r)Alu$~xm*CY9IYb2Xpc>^>e1%ylJYKUSd}A7Y`) zk|LWni<|Wy=y{(I(aoP2<6JP5pg3a$g9S+L#+76ZPCiyCw+fVWu2>7NU(aj zeISK7i?J&QAv$ocz*Zp*djiY`*>w2&JC4*mtQp}|sZ)BR{nC7ReCYFD^!a%kuwEjV zjifE#;-i_NQuHpEm@l+jDn~NS{}OLacp0TOR)w+Yu@MzGghhV9tzK(k$`I)mzD3X- zryF7iw$R5C3j<&p19mncx1jF=P9CH zySTnuTgX4YAu4LcV zVUK7Oo0eHA6hmW=5gvG>v$Xv+F+9uwZWO1Q8qP`~D8c})6`tGnGua31>chp%U!?jy!xLI`@U=fyo^ z$b3aTwAjjFW#$W3L?GanTTyd-fDVeRW5WKbeZuo*bjl$pM5XK;iHiI&W@kb;3_&!t ztITdYJpehPjtk3RzknEJsAqY)iqN~crCcE2wdylWOTVqj>5E6vpHi_WNTMgM z31{)P%ch8!PS}T?D<{q_ya4yyXxGMKdS3B2;+R5^i)wnZU#ZPkg})?$f_|zLkXC)B zg`fN@S@HebkWSIO0SQTggGL^pB23s(MZtB#HD2=9wCSj$LNj+3W-=7cvbTIn=1X$_ zyvV)}OkbB?>K+YW5;skp;BadS_lWD?)}KDJExuvr1rHf>ezoLNQRe*wv_bFi@qYlEtbHn~g$G!VL58cR>o2qn zRSD^4{pq7&ap2t{Wq}t~BhYkO77|RR{ug?CPvud>Kii? z(SWhJxza#X?a#T5Z?n-vB$EToL5&F&b$O`Dj_UD4tfHO5>Z>Sz7S~M^LIemL{D~|6 z%8{5OqrNKv+@>Y%JXCT45@@xuqLFOAhBRT09^yjf`bIALsgQCIyggvY))7e0YRNhz zVd_uG5AaCj!Cd|Uc5&_R6Ku|YE*yngwSUzeC5=SBV}F%ZWxbCLG9ptBUhu-UiveowAd}+FV9s% z97n#r(TPVmrcGX8Wie24O_KJ-)B4^qBCIpDVG`MP;!$;6-)etgz8l#viBS9J!G4uW zB28X|6YmkY!md#hkm6CI3feC~1cRFf|9waR;bq||_k^Oez7;mg?J*9vkp1Ndwup8O z?3zcqKwkA^jSY?UIN)(k-JI?l!oe!{aMS)u)MzJ}FtLF{(9B_@THyQrXsA-@`<;a! zm#{P7Ukv7I2=Ny197-iMygO*(+)<}obCF9fC_3m!8@RAf27Scq*MZ{xw)cW|?R@DT zYQ_n`W;pn(#K&m;2a4hBZWEgb!RPPS?8q^qHmN*nJ+(L8?lgW*Esaj?2jLI=*~NJC z%;4aABcB5ok5sKQTI!I+SVYsLFi%_B1OR09({BPJ#>VPvkvFZd#kx!{eEANTKa2oT399NWRl{TCx{ zx15(=Hbs_03KnIpuO>)i5=I}jC*K8eUEe+gIt0QUiiZ$Fu#NiEM^Qj4kcYW#m z>}>(q@T>b%0!6WnP+TZ7n(Sof?DYe z)yP*~Ny1cO4)*%J{c#n=Z;Kzb`aJ-A_l$cLLiURRo2iC2xez335FzjYf&&8yiRl*z zY4w8!ys=&JFHAv?AtE(f7_Q*AYgZPf(eWjc_E6-4kSNS?76NQ|q?2Y6c7{Sb!b5*Q zf<}_vqiWwusL(fRH@jm(7c3$l&08#|Fs3@2%2_vRd#lWyp7OQ8>+fWx3I0u?2Jw{b zucz6rMs^s&AU)X2pM^wgJpIVSmJSgdkyC(_scZ1E7Ge2$YNSW`QIh&0B%;pmw%hL$ z>pU~R4~4F+u-=Am4%x3>Q#uQdYs?znC6~A;X+J0z7M13yg|&?b9V_y_-~8K<+Q!~! zlD6E?=93m;kAZ%RwPf*$#aL%%b z(@u_JkTT5Z7G$!s37B-4XYOhp?DUOXBBtXLS%@af23;&apL8BSTt>oMjwN|UPjw1@ zEj%Y#6G}E8kD>B^KgvKvT!yvb2kD(tyIE7j^cBZ+INFD+buDxPorcHMRYwd2TzwO> z2Op0~snOlr{^AvQ(k*_@puOU21*R<&-Lh+wl+gts>U9v+t_f1b_ zKPy;s?`(f~jqfmrHTNc4r$8Ybb;~}+Y?wjE z0p!PaL4i3*L+6$4om_s!iQ)&H^4MkEHG|%|Jm>unJWrZ8z=a+m0>Q1Q7LLpay_4X9 z4`W8JS1Gt}qyRWFjID}IHMryFPWoTkykV{`vm}|%FU-sHs`JUT+y#2l*m7cc$YYr8 z4C6*>81;u==^XXF?Pa1{NzTgxBu#Z1TdJ~#Z^}HR;n96cb(cqDG`XbR*^iDZ3aA z)>{CwEDcjPFM)81k{j1g-bSqhZ-4gYs5DZmKFtSMdnIC=D93s7**rguNztXnoXRI= zhEj@9Y~9?>&ld1<Xq_6RZ-hN^SYc5=ycEKYpA3st1~_5 z&IH#k|HwTcOPQJg{GH#@)KHW4SS(b;rpH8i=}!r84ECDVV@smCuSW-Ee8TGNTGfJZ zA%Lr*)fieyH=y1}qW$)GGWYwL9M3Rkr08jBpk?#&zXe)pL8|x$C%c)k-dkU&EV=Iv zaKiH(*rQexT=o-0HCP<07P~yHSBt$qY(l;i1z&hxvFR&iF$+{P!Rjv zm>&$;FWwJ4?|SwP>}n0$q;aO1^MHX1pp%jeUDJVMwl>1k={HIQeP(4|`Ck9TfV$2%NuV11HG8>u@U$ zk3LN8ZFoSZZDl@8|2W%Hl)h0@LyPHNHNTgPz}xgS2QzK)Sq)KPG8e#SrqiTM^=SY@ zinn{~44Kp)w!U(GZ4$nHoOCV*N5k68U|$c2CTYt=4(CcnwaNRz5_ zlMdLJed`|MoLQ}2?7hEqj2xaxvJ3sSF6!kJx>Ro&jV<1eLBl>B37~`r)g4`?9J#LBXg6FUh}KSjtKe3g?K$l{fj_Vne229 zNoE1(OaSFzruv_!8NGlyUe(P0I2u!Kiy9RjlQc#;w15?5O=&*&O$7=n|9c1>(byY; zim~}rZux5E7Jw2deXV;_0@~iX`Mdo7QaaLgWK!DBOjI7cm5vfElB)TXw=5}&v?=F} zIls_&@qcC*&f@7|{U9JIqn;`K{=pr9DFw5D>z`hVINo}iX>m@ZL@cd&I3Plqca6DM zZHB+WPW2_({Bt+0wbYOVJ#MbYB+0vZ-ntzi1ek9KjEUgWrn&ocfK}s@hK%ShG6lN# z^{2fQRpT*J0o9xK{oGSuqK|q3ch}b5j($ktYs2JZ-RaZG@LzWfn5mrKxH2)_QKuxWC!Hqcs|oAHmR<(;-XN2ap3~qFpaMQv zYzIhu&Qqb%%;Ndx#myv7`GcW|mS zBj1~G15b?@wwM!gx~xx3fWMM|{+{+T8t@J2oH3dG)#^{@5CpJ%ymOkVe(yL#N&x4S*lKQT ztpeRp8!Gw4H%aevnRffGG#}d_ zYYp{vO%349fOLgbrTRZTK7h6qQ;z!LyMeX0j+s_bfNys+0em*KrKKA2m*qQa6u$S! zwere8<|lnro$!{F<8fiuZt5`*709_W^v3{>~37^q%fPp6^q zatO>e%C+TNCqW5`UtdId!A)hnk?mcJxX+h9@1bRGk3xASU4xsqd@HV%!dkJwM%39{ zFbuui^QwMVbPu@?GPUFOFn)F$W}oa;lzux)K|Un$KLC%Km*Wr~&U=8L#;D4U1RN+l z>H}UF;VMz*aPg@M0tz1*C0^35=GDIXqN_kZ^K(&4e_>GP@cqHN1uZX<@~$gY2=N3R z%=OesH) z%H66^);@T}m{_W9Njj&jdR+e|PGBc@+SPz1IB+Eqw}DSdz@?z-lvI3>>ldO;k4ThU zFHB@<1pFF5Jh=dpX~OGgQO3Tr!@{<(rtP5-;JXB{Ts5v)c=Gk1Fuy|`lunO*Q&eOn z(fcKW%U@-j@Uj~Sx|j|kI5=XTy+U1MiC(Wz{%F|tP%4V76T5OI`o-ZEYxcyAPN$M3 z6CmdN(&u<4cLB5zR>z>{5akf1Gn4KI?w*Dz`NZQ&6t8!Jpg25l>N?5TLlq*5G2LoF zKagDE1e_la3b|p>{FHA;9`dQSZAr5Z0u_M-K)j%|CJSoVL3gCqzk*CwrjtJJMklsppv0-fG+1>{ zz6mZ4>gWklIw?3)3VEyHGBp7HLOSi`ZZ^`hbFwG1W#T3m&v&we4R00Dg<>1iy-ATd z@Tr5ntWo2+&ou1txZ$9wM}PpWEH>+2eCGK>MkBqRug(QUyFI>OR^ud9BJ|RmIni)?olA|Z?%jewv5=yVS zxMs_lmG)8i&Ds2OU)9i@y+4bF9qs&->5e_DecegwDNh0hkJY`OYh^~>767Chq4nfJ^|EkRsZ^kZ~AP8 z^CRz%`hh)wZKIGoVnESv07hm#vSeM#E4$A05|%DX=%;6q$#1wbRI~Cat?8aemoQ`; zYbi09(l}~6sLnpSXVigiv9}Qp>vRXvm9-AqhXe}xF|;k)cz42<8x+zm@VAXN!p2qV zRKGIlc&tKE=}+%Lcgx;W2z=jQGlN~@3XLvvDDf9z=5~2=pcj&=UuB?oWs3ST-$Vr8 zb&issmFJIh-#dHc*zFX%V`$0zL|xZU){PXU7cqID*)O_%LKaZ4o>liEgN)O!K0lLY zN@^%9xNVGnhZ3@6qvvk#{U(VoV0VwH(N{t(?d%S2fqEq%!k9bUw7|1$|KoG@uPjo=I zI>6m%Vm{6$2v6!pVUYNqwyWu$W-rJbbS#yWXK>4L#IJtxasGE-wC47)U zW&iNMg$a9za=OpShY_(cFTFny&qp8~Lav+nW`m@#3N6-0Z2NiG471&Zgkp-wt9QOhhz3hL%jt?HsO} zgokm35hp^>997)A0|CTBn0%BJ236y7RcAOVhfS=$4?;=wlh0^vM-`oOwZS5Lc8dsl zXNYeHE9U8gSNnMQp8esM-{?110Z-4QeOCQcz8{u)Lt3UuW9E~G@)%qu{nghF(331w znIlBZ!cBh#&1=VRy~g=vTPps5vlWMpU+nbpJ(HSGdiJ;RPXdKY%JuFFqHYms-=|X;G>mbng21|{zM1ML0%Fq(kv|Ub@EN${ z@8V96KfkWvKU79$!yBGhE`%HjhZY09;#v|ulhYJv@YPJcAP@R8QsJSzQZl;Yj$bzY z;%pN8AURX5I+$XBhI#g%%5(`*vfdp7}E~x3zi=qt{}9kZeKAXr_T?_JE#Uat);c6Emsy&A(tJOVxhZ1N!T9 zx>7NTdD}X6kl*MV#;#Y1>v$=eI&Mcs00(>WWmDx{)?M8HiTcKL4G}S>Onm;3IqDQ39M{bzpaD^Eo>2WK7z#aRx03~C6%aPU#7NAa}9WqSHNcn z(`IffrMGqylUV1bZ4X-+L1XtEoaQ>-lAo_+wh`q zCu;UPh()Zw)2>AGNsgzm>xmi+R?2sg(=&6Pv(VDUkL=Akd!o`(0n!KDLOT?oQ}qBw zbQ`U6NQ2tb!v6r@ck6fOZKO(U{sY{vy?CZT_!l0`?pKAag<+sZ0$;n0E^t){NJFh4 zJ%%_5Zltva7gb;YulZ1pJ;I>7)3x)jJEQ?rMMnhBKULTLxPNI2DkRqNe*kQqwjD^W ziKdlgYwj>?a;^K|5dTKX8ofJ6d*;USy8S9dqQ&}Ee+y&+6}<8XvkDXM!UVkEE7I{t zwHM%NYrOPRw>A?EIwFQu=Xb+##n%OhLL)nvK3k|)seG`?eSRF&ZMU;XdY;qu@LW0l z&Nx1l)01>6BCW*y2Pi{s5MZ|Axv)){i70r^S?;X#J$~K#jnPJHR0(w&(d^9IQFeV1 zkC`y4fD1RtKG2x+&x6+Ao8K|^tQvW6Q9Ao=D%iRndNn`_5}}?eZNZi_rMzWN6J&q= zdwuV&gZiUtjSE+$AVWQgO5y(i^Ed|Q?%xWkbL?WX1kN+O1#IMN+s~j7-k|Pv;4Vw% z;+7^A8b`g~VWYuXX9mIz{L4v1s#$cjz7870G$nPYoD*N;dP3Xl9^!ELos^Xm0&FK3 zz9mcB0Q#7#Z5IyyRezfgKcD|G3tIAVS;%0@Aj8S!FRK z1OaG^R?_a%1Ga**VJMt;WS(WEVIgY>*c2VG*yGm|6tUXIj^eoQkHrREC4{DU4DBGI z!%#PpJBt&bBH}>cmr`7YV>pv!`V#WvW$gSvr}f_|+K5wcp1G>GrLobEqwk)UZ0;WJ zMWxk1_h$ZldU8$6FnBN>t`c*Oz_&t03Avtu4v{4XMtSG}m9gOz`k;USTuNbNx}5h6 zec)ujbg5~0Ohog!+_#>L!`(9yw1l*&2Hd#&AK>xKUkdDX|0;3mclZ^;_g@10Vsq8# z(bpa%62Iz;_!_y4IU1JZn(%EzPTc>gPxVMGl13yJEH`I7W~3|GVH zM9nUnSA|UWQ=;BUQ+>Fa)h=YZYA;LgHPI~bu)$vT+}F>j%EGtyGvas6F)zkctFb2W z=xC$})#^Q4Huh`vc0bHM7S;hZ$d#k_0fsD~{6tp~o*{#W4fH-;D~{%3DA~^djid<< zq>V}IBF^3ioU}M0bfhS&Sa^C~AUCO4QWM#7bwvN=NG0LW?}<-POHVME1eY?^guSZ< z3e2V98;q)a0>2^B%TjL^MNu4@Y>YHdF8#BMXtEnF;hMP$LaCmQ|Gv@@zGoM7qGEx< zi-JT}Fu+55H0g2w9F<}W7jbG1ngnej;;b4v^C>O3l0m-qr0cd{fOgin=N@sdBS_p+x*_VWdXTV+*3f* z3+oj3-88bMnA>yYJWt1YPsd{A2eKP9Y1JeL0xt2xq>B3(Fe{`5WA`L{qR&Qz+X3bb zMT}~5SZjNw-`wv;pY{ZWM_$P-$nJNvhC{POL&2OTvym?wPC<=Gn`a@8E6||+wS%R zL4F+isJ`}MQub+OlO0sAP8J&cw~`1Ny@LR87_8G~PVg5s(X8Y(B` z_Ge}8x_UwN0nSxMh-Qs5ph#^VjH==JbJbkb zYU3d>nRkS6{ch9#N)~Rnu~rlYH85~P4n&II7Y1UWzo9LySCzME1nK(@atMXgqClI0{7isWjEpuX{&XE=_)BlM;gKj@Nh1>UD3JVU}KnR z!z~My{T0mlg0G3?gaG18I0Scp1)7u_z#7 zsKQ(p5}OU9m}^&zPtR4s9Doog#9}uF*fI0H?sK*ao=+m8ln4eHq6XgpC50t z`y;9ht->%8yRYEv*0l1iuiKHN;izv{Z~|8cvKAkVzrC>8i1Wjzp^qc1cEIZ$jtw4G#HfehDu4mALa$HS6%DN%xW!-0m#9DJy_q zh*0wF{~JRKkw3sz*DKq9uS!nd+yMq+I!1-AR_}-A{^&$u+Ku{i9LV9K&Gi(l|KLAM zM++T+b@Qho#7LLKy_M3#pAk1N-(7m{MJ=Kux$1Byr@1Be74Mcy=EL3*=+7%Ks^eJX zB4OD6MTcL!2~Koil?=Ytb&I73tHg;{SG#o7+0=W5b;%{T)lNMm(9JsS-W-< zWrk0Ya|gxvSXABbON?yuZJRY>Q5`JE*VcaTA;=!wZrTzLoRRs~poTh~2&>T>*}L<7 zyTBw_P0stCTHX7}Uk`7f$m&)47xfcF)-nLE<}VuH^Y%@K%|Emq#WtDiKYguM#ddEa zMwX4AFJf5!1IR5C_ZuL^zr^sM_7#V~>X1uwtS9g*5BbtP))2m7H910hv!b{os>iI= z${6~3P3V%r|9q$OUy~lTL0op%-n^>E5)zH8>QpJklUA6BrL77E_E!m~@co}6b;zGD zd8b{&pjqI7I^#F;7g-C)`=md%N{pP1jeU(?&!WldmH0yVOUs|6!B6+>Yz5iJVItBK z6wj${QVwQ3jZJ6vJ{gXv%9(%jI3Y9m;~k!?)3XffL>`!Bk&8CJ$ev5@-SV+rfae3& z^o>-BPdx9;Z>lkf#~fY0?{|JQ_k3Pimq#jZmM7(12HUHh1WFI}Bet}xZH30#qCdUC z&oe9;>9QQQJ4!hWaDbpY)a9e~1#>)gm(N*gxr_s(_~sfY=jpm6z%fX-$K|F|kpjw8 z0QN=IFWj51B<3GYlZM01z%_uOUOYAFs~T%q%b-6+`I&5**Hnm)jq{5)!>W7yWa5BnZ4wEf!iM?*VbM=UQgrYFfwu{*xqV!R}pD3F0+h9?-H!fCyPUvKFul5 z5o3w!9InSIC%EFeCGbsRF@b-@(~3B{#I@9gwjzVv@-)h;@Db$tK-~Gel_gXX|IcEz2+d+*z$X8`Lj?U(F}ilvD8=wbA-Jv%DOI`ac54s5Z zV^E!+7A?UnDYDbmn=AHoNw2;9J3;nA&;9wIWeAh)rqkNVc+B>{Oxncao>*xYO0Buz z4?R0jezJwd(_EuCkSGQ&*blE9<0BY*I_^Xfl<$=;KBUnS9nA$j?5 ze0=4ZYQdGDt=(#6=XhA@;OSS~9R4Wm#>)B2PB~HEFo`kfIx)*mY%UARvrwp<*S-cu zOq97faN55uN>hDz{_G5}Qvu9qJLoxUAvSw9Z2zRyPqN{Jw#8#gz%ni;M1zS)eUxweL zYUSNvm}zKm;vySQ^#G)d;KA!wI*}cD=BA7%2LQ5NSnFoZCFqW zU}-&)5FEG;HM~K)W?l(>Pf3>mP)U6rw+h;8mlLI8ujp=t|Yw! z*Jo-eK0V*j?~5OEG$ne}g+6(ayBR$u8xQ(>C&7BFsyeZ}=}&bslV+4z%KR(3G%b2w zvr;n32Y&|pZOJHa$#_ZJq~!cm7QeKX{DU7qtSn-t{ z1AykL{ob&7b;*z18Q)c#72J78WsEEJVQ?1J4DNn_GHk-E2Axm4VooTYB_mxP>Ju)wI+jpwW=5Q9FK`9-+Stl z{%vT18I8I0lj`^zUzpz)e5^3`c*~UBVw!uCox}N^o?3a!#7BynagX*fy9r~SQB>m> zy;-)`JWr0KlepM6ynBQnIGF;xWd!x}rymv3>(IF+e1238@DeEN)Vc^rT`GL|_Lprc z_sB7T?&n$2^G-mV`)6~_5AQyO8pcTgG<;^ZC{F>m+ySwP6%s<0WIWH+ndVFP$jSaX z`-w2{BVBIC(!F$en-I)xW3lNfQpG8viK5mo)?W)IGkU&Vu;WNwK?)R|NY!UMGrqrR zu33HZX!@yy|9!iv4696v<`d?OR+jHcd4k*>lTY3jb-gyQ5P$pr;rZ_s!$Loi)SHuYKw z8G{3x=I55Gx^UNtigz!#95$(h8$}9deE4l4o%Xh+hOFk?nRI=Zlu@A}TgJi)g8?_+ zx3jI8HR;imXMEm%c0&e`UcwwzvCi*VMm3I))PaD~#tW?HV1?n&ycO;A9$a{`VH!9t zV@kvlX5Xgz-bjNiE1v*|pXOSK2lk^*WcMnOb{UeFIo0a2o@W|I& zRXnWJDP!UmTc>VXDH9{r-Pv1#vpAu)(tp`$Whzl*mJ$9#R$|Y^ph$W;3hxYu?e!QD zMrU_k-nTacyBho@fh${|;Q;YFo7uPZ1iYh4&-!8=g|bt?)O($e%?olGs?|^4m?rAy zamuTiei^9lM|V=h`*(*V zP+l1x**du8jpK9?FEYaiWLj2*8*d+gAlmQ-+p)m1>SRi>(uF!{1?Oi~uj8)Z&bKBK zUsum5zIM)2wfGN^$iCG6RJ7_d>ghubmjv#VWL*nx4FN!vgQsZqj|ATxMS4fN7a3Np zcgo3W*)%BQ^eERq1-MCN}?ujqcqCy6Et3*SUhRZF!Bclfg4REbkL7C=AAa&@dVk@)M7ioyS=eeY+?0PAf^_Z(g78}cPs?>zZaR#pIzB+r&$Lud2H^6z~CkOguF^9=>|p_xx= z#z~tVtaOf?b~mUjhaQlu@~rKo2cgajH=m8axH8C@F4_9KZGhl32!TH_Iar1G+s5G-4;-F=e+_2hT&V!5$-UgCaCLr1wzXC`)uVSQdWq$O3$J}rzQpuGAKT#kz?p7k#vbmAb*P?aR5i{!&>}EyZ&WSLBXzhSNm=sw1 zyvO0ks)(hyy2~br257@irTyFjUk9(hw=e;T98X)t7ovQ0Oc5c@FH_~j72Q;10e`1R zt-G`PrG5p?1222iB2#QTZ7WD4#nOb=R|DWGH9UQfSLE6`qFWWKLTbWXPbA^egF;VN z{3H7iLRYv_>ghsAWENhW`T8fa+=1@~|7RCicxv(XzO8+6I>W|^G!}*3-3T1Buk!EM z+Y%s}`{izb>`+QsL8hn>ZDgNMPDn$HHS)o%3!y5M`KUT)WebU^g&;OPR5!n;u?i5 z>}>FZxMpDkJjPlmBw2jFwK>|Kc_k^(xpjt2Znc^qh}p6q{-*mYrFWVDu`A$rNad-+ zbVu@~2UrBl_77`Y<{N9`U~Kl$1eSTh& zA7Mh$P%&6r%z=`P=g95*tuRQly>jA4s)Z6UQ#oNXQ}LGbm*Qc9`4&*?zRwT;g{FZk z6KAET=^UO9TTnw#dm&%@$jmK*;XOBz~59lgY~z zloebLVP_p8faM}j0yjJBd$Lq z;y=J?Z=P4N`d`mvb=>z^yX%!4VlFGQgnp@{LYzJC1M)8|5&k1DMT_d$_A$m=P*h~$ z^x@=SYlpGi8(7INuz28BO9H!=!LH!A;@ks#``1|meeZ)~1Vgc!D@hMHwjd@GvM>fU zf%u8!&GQm0c<5{|03hQ>0|2rr#e6sQuDh<+6di50u8cMQOe7=_FHJU!~P-!wyb?L2W zWkY8TQ0m&?W$CNm(JP)%ma8qG^_e-JbJ0^*;Mp{|!Vopg^9CP1k_%7n< z6=O5{S|pdsKd1&D3v@LEiGTP6x_fiph+!{7PkQkS_11-p$E{B|4ri}M##A!POfm%; zi|17Oy{s&@g$6>#0Qwr+pSe6$re#yoo`5aE+mmDD-hA(mvobQr>22A$rq zD^eQ^?gQ?j=mR#Ac_wbi#6$ZMH0fQQa9>70o?#nmydvwPkcZ<;7(*qltFc(vCvj& zGxXNxgxvi@t`+>>)Zw`Rk9&3=~DWiJ#8RPHF8nZ)dbS6&E{e^Jm z_|)i>wIj9IUxz<~`}{r-&O(=s=X>yzL}aU{o>3#F$1gHuz+1SCO|(G@z~m5$&sW5C zc3Ihu#A4>{@qX5)|EyO`kmtqjt5+yg6#D#~5*D-81uVVMixczfpw0QRg@SARfNsEE zk62xia;rg=E8=_k<*t=SM%^I;r%ylVFj3>U+NOI-J8sV|L$Z7@Ccdh(5StF!Cu8Sa zZb9}B2~Y71yaS-vj*-B~=^!6iSE$CQ?VLaVqV?ms-PmX1e$}1DRr;=%71xQ;;pzJo zIJm-=m)fT`X9vRa;f33Ip-(#o_;>ns)bCJsLv_&H>JbsYj>g3n7RVEO4vLB^5w%~5 zO}ruoJ&tXtH`ZU)3#Q}pFH>Lyo%W8`IQW}WZ-OzseKii4!$bE z2%Zxl`w;@?*ZmteW{r9XDzItYXH=rA?Jjxm7EoMaiZyd;T+I!Nk+`L6)K`?($dkf| zB?b!BgH>=h3bI?DMuEOYH+NxPo1CX@BK`yP;kBFsZ=rlRvYTDD#sHG`->MpAE4NV* zW7S8O-$S~$Ck()_x`XuHs=?w{D95jD&2SW6Ru7Kx#mAh7px76~*yZ*#5X6SmiA4-jP)^Bt;&t{Q8sFDVzMpub}(g zk?APxuY*+|^yTfPh|piaqr#mO`>UqfzD8u~I{D(ACWbGad0BI;eg{h-FKZzhSi(knhJPH?5>MNS~#OGD#Dky}=9+eTh<@14UCG&?$W9y_(N2|G zxdZV@N25CcQZQ6F5&ZnbQZHwMO>|{hzyE^urB{RG-|G>FKP6jW8~+OA64Ug7+~e(K zXn>zxCx`OVypE4P1?yCVWF68jUd-O#R_aGrbHpALjM~4m$3Nd$-x4%4{FbiMrMA6+ za&K-b2019qrf0)hKmjnKjL%6(%YRkAt?Duc#QGf^)ML<20hNnz4?sp4i?KJwn~St| zFwm;KUmd;1CEpXQ@*@ZCL zI}=!psz~ARXW?PshW5Fg*63WW()Hk%-st8b-@{{6D=>8Gsb|-woDFji4hNPM!^2hU z)OJ}8+F~Vc2c#7kSercDZjY!#sCDF$Kqeqe&m@?uyEMR|qLTEZCQM`S2Ecwte>=i| z07{4!GR681`mTs7@r`=o9L;Uss)%`T+k|f_Q71>a{>)47csH)?&Zk|*Z@tDDQk?SW zO-cz<8ETQ0&roYUMY2-q+u6P3h=)v%PLmV9XLIk{$A9;Bc}&Gw!n9Y1c?=;$SJc%Jh7%KFB1VEg66~3l4ONjy)(^> zG?Hb%44cMo*C=cUXxX{Lj+bSP+K+2v=-NE!?mX3YF)U@^P}cCeAcf(^u7{p>W?RvH zSC_(&)zE24=aVMV{E}&*K7ox4PSm6h?Pe3^(*c)@Qq~-r9<~$t4dZ+MOEwqLf&B`U zt^Fly5$#bdH_JxG!CX?qc(eHp;rJF2r+3BqClLKwKp<{?BA zMC%A$1{0%9n=A^rLNmIpFfX|Gp`ni!392tybnSXT2SCTl@lvOF3=1apGuUZK+dTfUuvAStn(+updG5TGvM!^gl4fK$yQq_M z#J8s@pu=G{Ia|*T3T}P`owdpRkD{~wYw~@g_(&1KLON9h=@O6zF+ftfLFw2=hog~h zkd~4L0f}wE7$HbXNC+(Gkk|-i0|$J*`~CyZ>-pi??(4qJIqyTZuN_Zu1pp7*KQ-RW z?eyFlaD@Z~h2W4#!b*?Qer9(a>;ON#b&klB6>95+cque43}Z=NH-V1&x%HX?7iWUtf55{$(Lg`ZE+%Y%JP#~0UN zgmvAJ-4dzY1=8y$S2Y#4&- z73?5Y;CI~HXVCw#;o>HNl*1P_ z!yiz6qql3v7utq{n)aFu{f1Sy7ouU!IlYCWBPAPQ31NwlzJ)^~9DU2h`%~keeGnoB z&539RpL@cK9Wa7%KCR*p{BJnu2k*dN&B$SecY_)l{LXYa&FlB&=8XMDC#0O3Yr?Wa z@Cx=NWCtymxtE=CJj!4>sJmoD7TGC*QeC&j1}y+V^7>>Qb0GxU+wRGEn>N?HCAhCN zPGR9iZ#!z2IBP&Q?udSI>onhEUfx~Ft6vOl{DHI1o%;T|dDTIuF0hR4TQJb`$T~4 zj?kz@LhrKp2tMrUT*X@X&bHTa*idJ#^(QsqKuC6Q>2z0FsLu?1*A3X@x;SZt>#EUt zipdXfudaZ0hr3MUL65Ic$30VSi!SCy>|m?RHAUh}_9gD_6v({@sEcX z*H3REU!Iy+=Z>maO|8HCrMjZJi)`fWB5zl+Kdk`2*gQuE?sSkmyVK@`Z-1WgWhwQ~ z&Evb7bEjZPq-uF76b-a`qOYg6IrHGJyNYcDVs1%UZCUM{lHiscz77#=CkiH^H84Tf z;GeQVO}6bZq&(4syL(w(j~cu}hnRtLUihI?UXhR#vW`y>f_C+yTeacw3FpPExWn@z zLX2Pd0xLdXlWRMHi79go3fjezBD$6sg z@CD8Vl%PNH=4vWo#bb~;3|qw8F>(&L``$4fM8GTu=^G8N2cq_hw8gwy5$t=e9oXY` z0%U2$FKncD*BZK{l8WK(ck86nKlwF=OU?bIJ#Dv5@&PGkr;&{vXuK<{npo~~=r66A z(ls<1IprBv9&w_%O(2Q|sr6iK1POL<74Mf_?fnPfgd?xegKgP@FZS!g_eS~RKTS$5 zT5PxFPBvmxEvLSz*s$#I@lR)Goz|6SY7amEG@H?$Q$WAJu6tebf%}_SwS;Ixjry^; zKeydpdSfZ5H@yM-A|d&Fl5_&C#+3}+t&i2x?gHjAz0mUdxzfNmX^v>!>wqK&;1Q!_ zlBn2kLkcmAm?|SJ%J(!^!Ab+&8Ta6OCoIKO(!RzI+S8}5QIv_x(42@WmOkdcS6&Ay zclhzv@*FZicSO1vBEs*F1_r@-}Zc+qna`~s&`>n=9zQiz7Gdja9U+N(R z#n_}@oWP@_t61O*^5EOv{8!~RVYVH1nT`spS+a4?LWuvwg|FZmtCxU}WA>31A3Gc=d5|~- zRs9Be{1l{wISeW-*pvtY`+B7d4F*a$6HaKi&VLU5gT+4@kx@;4tY1*qFQ)P+{JBEg zdfu1@y#EpdaUCQ4+6S(D62zE$_$p7%IxZ{AE1*MzoQP_SUolvnAW{tcTvc@!g_kR$ z$yG9ks^+I!rAaqq8;X~$O}l-6eDNvaA=BW^O3Ze{FRBqr#$mPl*yj3sQl>No0~z#n zwXuNn=r4tZLr?HdtT&8ryIVY=)Tr!cv%lFveX1KeSq9*JlLIgeNGPA>O}ky9cY~<1 zLLxT?r4V@$hs!KXskjn#bQim6>;}A(hKiZupYG|m?y9&-(}-l{MzUomtO7}%(lqeq zNUkpGEi(8@Fq|ZUNPmL|DMi3Q7*hz4W1^wE8jo|TlUt{DyqQ-pzf?O4NuFZ*oZh$i zA7Gmob29vx=2NJKM;d%Rs*G<2t{V6drA?IJ080PrbA7%S|`uk(!UtzrJldX z@Q$nP-qvSYEkO|zIHDG)>(gv#PA#9Ks)6y6ev2Mzf1;|Jm6H4Yt8}8A@oK4D#8atw zavI6rhZm%L$khKIAmgxgd6NKvo$GyXk{<33$I4zoS{Hmo+z#QtvVBGmm^{VB6@f&% zHldRWj(6^RoPk(t&c8jA8wuM#H?*fwmvTfD39CkC4v0gW=NiyA1ve7+<3T)3NQh(f zp(<)ej(Y%A{BsC+K8e{0w$5$Bg@p6IFT=snuC`{q9W^=>CIP|@(Ndf1^Z&k1TI|$g zEcHSi+e^tygpIc#E9*SGXb~)RXl6cDE{5;L$@UymyqM}x!q)iq*nLnSB+q(0aApPF z6&2(e7U2Wyjtog&^zoe^OWz#;TJObgWPB(J_=aEDxh4lGC&Um24!IEn7=w36#C8y8 zWZ`*n4G0K<6v#VXoi-WA>XjVxOuuvS@EaEU7nZEsWUVSYJSo}B^tp(H4j=`DYi(Sf z_*_%D61eOkpG=)#I502P~ErhV}3&e;1CaM1b z@$cISa51ukCV2JCqt_282lc$Q^H~%YM&6Z(UVX1s$-&!0S9~vcdEF&$s+H#T``XNh2X1U(qz>h|jzJ&9|zt!bfE?;!JHs1jF&74YtV`DIUjc=+j7^0`##t zA45ZBR3qTUdrP4m7hi*3fk}Bw$f>tMHn)6yLUVGB$O+9}6dng{+h#RAP@*it&ckd#_x6`?|Lp+0Aelz3&v6LD&0(3?JqfCY_rJ}~&Z=F9DD1ba((6sTz@zHq2 zeSEl^r5fz1#dgLgrX@x9two!f0UDufs7!nBmO`bL<(C*hqAb7bNx$6tz?%ZmlgvDKigf#h?4ul@Q1Thk?NVECft%PA_^%R9CYd4U&~ZMRa(?-R9XVP(o)HK z(#e8Cp+Hzs^1`DxqP87BwCH<^Tem*t^D$Eg$HY>49c3R-d4!SOJ$&{dy}l5{tFVDU z+CGRe%Di8U9C|NasYa1-pi+rO&*U`_OU%RhPepg&w!Mfg%jY7tk4*m#mh9mu1+XAC zV~WrnW0Bni25Kg+nfyKD5{~e7)2SlOyTn&r!!9J}74ErpLeCB8dFs_ND!S1x$kRDQ zE*B^oy#U5H38z(ZIOtha=6IE?pOh-vR$$cpY-h@ju$cpd$(8qE*61GJ)A1ltOc$;L zg1bqS;3S~l(K>wsS}6(DPcOq7tSV|D=1cYwq^{*rQt7fYZnKL5>vP%J;>zg)aOd=_ zY%Zwzp-btP|8xcH836rUS4z^WoOKT>eu!Fe4NLd7>|HKKuV8mNJxh>(H#-;52hCVX z?$lyfN;E~~v)y4G?Z?1g-t@j?g?8_?%gIz+sY6%^4rbkL4o7wuWi(U-AyE+>c5^*1 zJmUjFUv_1y+!K@5BbxUf$-a3iKYU}z=OUooF>T`vFZJdX;S86HcJ-2srJ+d<+%Qnr zqrLmRy5pi(18SBsG$v&>r=v#^{3R)Sn)0QE0I-BERI1LmP2pwz!l|fn6(1Fwx5|y2 z+6S5*hV1Dtd1&2hr*w7ijwZR>`?2kD{Ym1r%2#WNAKEFj%d=i*11fW~AG8&#rLoK+#gW3#`{e;_xsev?*Cv?9)r8VI-alq@$QF&zz3smxP)fh{?R^rl^x|dCxK@`Z)*r&XW1vvNm#qhW72o zJqMFP-L&2}yEgna_ajg5idfcVRzgFe1!a9%5q$S^WLtfl_R z#YMG;V>}Pjk>kGhuyz_bL<`A3M4jUqYc!cHJ5*jS*of)A95#1nC<_D#SW26Rm8cZg6!FdS zonALA#^d!|@$Dc2y>$KmLIlf-Lz9DX5Fn1P>g!*;d3b4Ul(I9GZ zapV61J`BWd^sWre1aN=dio<|klwL_RJ;}5B*6-m_ZXmL1vsnLecB=ybxKkUWHfQiA z@fKa=&+)y)yUMefG8`Xg_#+qq!r2;T(i;4frY=ru31}bp-Rc0+bsbQLsAs&gJdRTIruxQT_D1T?>ug$zv*4{ieFB_Zk<2l7 zr>||z8Eiz}Ex>CgiYiiM%Fb`R`SZ<(FX?_YmAj~iU({W|!!Pu!l*M$5Ml>>gR4xKkEJ<2pos|58Td!9s`l7YRt8~eHk%%S$wPB>2Zl=^0d*40&2vI5z zE?VcrvXX+raQ>u#K0eH?Ox{X1N2Vuxv=n^Q?vLE4w;%iNe_Ev&c_6JStr#UEvk_^P zqe(p%+*cEIH~cA;dgPtFy-#%tl)hOvDWs-E&z%;Yj<3J#9loKgE=!aCaq!mpP;C{> z&1=i|C+@qnT=3tqa?NkzfA?jiysX+mz0$;W0YEu6`*5%{@59ASHflQlCjSO1g`G?( z-LEfSi9fJmBnRG$4WCmLxlpumuflLScN1k^Az8XSj(==r8KM*c-2n zIn56qTkB*sNLG&ffW*i=;gHlDJ5HBnBy!Ko;w={l_$y8yyX+M*<@zN^f@T>luJjK3 z(-V1kl&1i({iQ%+i6b1!v~Ru4>ummUyY9QuX$2`5VtJvBX)Lze>=loo`QQyk8+3+^ z2H`yqh}hmh5XMdh6X66&$B`SSlokTQM_ML`@y=j!)qAf*SLY4aOe_W^Ej(Exfb_}v zJ%=}7=}}??B5a9vrq>tLeg{M>3vzp=k~T@y+e-G%aIjy9>JENVBKxm49Jve$fo;g1 z*!RN0lW6WDC7X88>nt_~w<3&5W9zKX8r_s{@;kD>z{e`QBT`FrgwSA zH*7LUI8dSoa_B8_H6F6eAXnjsyZN2d4^4oGZ=Kn0ulRppv8Ilragj^!8p9+j2FXq}=teGWozf0-RLZa<(dl zBc<(piReHSk74M?HywneEFpn!f!607HvL?IcAxtraq&pBj*yr za$}{Nnwe9df=NgKPfK(#tF@Bgx^)np+0x~sC_eVj1x60eN2OaI)^_Vc&Uv&WvQ*HP zhw1Gq%|1Y+0l4>E+G53T{aF5tgqY}DO08bVd{zVch4Me z2+0LIW_7@jS2VL18G$=sAJyeRiC(U7)C%)T_*~GA3kIj^nvS+YL6;@6HwkD+H{*Ej zGbwbD%iTrCJ6hE1#A5h@z=mYglo)q|5FvP9fSDkOy+q)q5GDUeLRdjZbjcb~EeLq| z9ft_*tr}jzi&J$5vUEl{I(A~*79ejsyMNr(aidOYnV9eLA8p*saXjvyolyc=@BImM zJbp;n>FhZNU#<3BG=_CR8nEb19DaUX?d*o<+euJJ+RP#;lF$ejbc|i}W0k*9o&7iu zTzLJU&YeGCm{(`Fh}*y*{4)m@k<=M{cGgeUfeZ;kpywqncK!#pah~YXZKV!`*@W_m7{V%K#f9f0Q*pay8yW0lsvVueX1$CF@VU0QbEKJQ|T$=C1JS-wFO*Cdmf-x@C}KIL-6f z#|C!b`v|u4V?2BZBR+-x;S25%_P+x~BjoC8h1DM!m?c;=2^k&6C3qyt=VWtXAkBSs zsnr8nD+&zvlyC>4F~VQ=aGPpVEHL>-%kTEVk4(C&Wf4TM|Mkn>8*Q*3H{3DyNS}Tt zj_4?_D3u3gDe^y;cgHVi%&o?|+utD$eGoN)%{3XepJ5R#t-0)!{mzVL8N!V2$KP>( zq3JRp41@yYi+cAa!EQ$$-S7*K?_~Uix4BJ(v)VAcudTvyC4iGDS==DS~+A38ym>b)Haeq7&RYlIBnRoNENLIgN)b@Dn zu2|rBGGwObdf@=v4!+In`+1{G!#nzhM`W2Zz3&{flp@LW&8OZW_aPF{VGaKC|3irWeWW&{KH(` zncAeqwC3Y?MH2_leBYut^3!f2+)$Br@j48BmVWfqo3s(iMiw6w(TuVMfE#dTb_Suj z(65}&*xtxeGs#AKmkYcod6=+0<)QPX)-zHwm!`kfW-P-gvT`tnt!mrik^5o|L3*N> zM>R6aIj)$_@>!TL1z41)qFU(9bNYvaBQP|LZyCx|{hqdf1Em&isUAbYih>ey}=aJ2LBcnCf=O>>?L$g9hCsLAr ztr$hFdi*rlmDG*VKKb-ICs;P+_55b3$5?$xe&fpu;|4=^xORGcoSX%nZS1#+>c_V9 zk!4hZle1P?T1M`Po)gLx9Z8jTfv_l5$D56{R2g%8g(LSvrL+p$cRD&AeJub`w@iMJ z)!3y;$fRPtXCoFn?c$#xB1@eVO`~9ScbjZs-0~7bQ#?>j-yIRHZS)D?L zj6h4Sk|HqAb;|!d_&SP5wL;MpkZ|%jfv)$paDJq!#mU_#6>7if8YiA5Z)Ipvey;cb z#qci2I<(qPu7o;W$T{i^ph49~=B4;R-0KWzm+04KuK$bVac8O+F9|s#N9$cVS{^Hu zuJCr)yC56Uf4D2~*T_JHRwAzi8WA&aluLAd`y+_{@F#2+io?!N=e|71s}t>d;F7>;C@Fvux}aDieKA?t?ad2NO9sa0>aw-DMAJS1$nXB<+6vMv91ITrZx|M!HF8M5Z( z4U;!NzZ%|>;L(H;FNTF$JmpAHFzZUCFyg$A39Z7$Xq9uDUS~r#H*8|~%roBH=2uO>$LlIAvR1ipKI+B++5%I)j80kE=APi1bZ zO^|-i%iyg#J0jL$xp2ZqyhgSI9=dpdU?HJEcz$|||RER)L0=*zP6hgeroWUkqS zS;B&64Gh;ASdS&K=(Cct36S2awXiR36A;LE^fscM)uQo@blKGKK33 zAg27yr#$QHM2w*P06qdddUR3Tj5-V~8s&)bs`;g)Q-JPZiw8(n`JBG0eqXAyhg1pb zvKA;dV`bn~4!~Y}Gfj?MhxfQ|9G^45PVf`9oFszDjoO4lok4+C`f&<=x_=Gn{8`(! zHHMP8v;6B!)u_+wf8M8Vx##AQbKWuybj=hj&SQ~!SHOetl6)ZHE13j>Xbvg zwB7@$D^YSw^VG(cpO)i8VrDIUbfJ?*C424gR;pr;_1oqVV%0ePlQe3QdBAWTc++h9sz{E?ddt;q~}c3uP~>sP+#palpg8fkbKIze--NjL$!bIvgC(mw6yXzVxCI#s({;*4SJdlVZ=PSJ$W;KUi-B155 zU;dt0^KV5*A3l4iH<{;KS6vvY%71P!cPUZ-Td~L=Ys)Rax6YAzOO({mil{(et*Jn< zTw%EQ$Nx$_5o8GL51T&Jb)_C9?=oxepAEXvf}#+{&>Z9JZ+PJFd@{eK7?zdg5_%jniA%Wzq%bBdF|4Vj_zWvEg ziBncM5}52~WDB{ud^qJ5)bJ3rS{^X#z%2X{&&zP(Y` znCI)hsVO=At8xs|+_L0ACkXdK%{+aZ_n0m>eNB@xbF*d@@&|uilsrOx?W{2dLDUY_ z0!R-rO5x_w2y*M69n$L$wguu(gmqWt03RF~X}2KZUjG4rI~tM?c`k7h@BihID|uc_ z{FL8r2vstFd)`a_w9=4*E8M(dySBYX_WJAEs=KKM#zcskbNC-5SpxO*^dgO$S&FR~ z=s~jEL)eOR0&u(C754L9#jJomsne+zwTwr=)2r+btRznR!dd&`-_`T0CwrH?4P-=z zIr?PW6q6#0D%eOzs)54}59C!M((p*=l_s=l#cwDmd}dbSR`|p(L9nM^SSZ?dRm<2p zem;|LQni~f-2MKR_uo?z(7e%87MysJ*Adn@|6cs`OLni;GOueo;Yq(gD;HY*U!;rzR@yFa3+s+=}3^}YME9jBHyw9}Y&tF4BJPBi{Y5$Bcau038nOKkaiP8Ix~ zJ%z%0kQ|Koc(oZw4JN{?GzdF>fX0!myCuMgHdIkODAzt95P#SKxubK# zE^XGbBj`dQaIUX7a5}{G{@EciEN1q7G?^Q6Wk+t(5`B84rbC!Qbd_Y9d)9@b@8;T- zT!V2pV=&i(k8FZ`3B6+N+h?j~WA+>8+^O@3cY8SuhB-VsxubEKG+Irn!TVieSMgzg zu`g_cnAXFmW&*5LT*j6cTcNyfbE^9JGEAs$yV3DwsppeTFT(>$o6r7z%mCb_Hq>B` z7VwaM+Ev*Y|5S)C@=n=p9rn4Gh7a1Ge6no;1yx54z4}ndD;|-sZ&!I`Q8U?-@9@ou zdY6_8Aj0vE-*D4F*RQf8YbT0*ct*y;^6s=p<*O`7#CuxNN~MW>2vqi+j7)2bP+8f-(aFmuhd2Gl%97mq|oUuqOvs zCtkiSFVMbgN9px<63ldR!*9^)J|1{!R+LA`+=iHq)>Hi5N{{Q!i#Xl-TU2zlNx&>34-mOTNDS7z^rQn>Y{NwxEsp>cHwqO9WC0@)+hR3wZy*l#&+$@)hsj0&{ zGc(232FI2PidXS9r`++ghx3Y-nmKB9)5v)I4td`jh0iUn8hL$YXhOh=v z*$OqQX&gFkH~@{me+vp4Vuol1PD>@ zcbW7@=CQXckMhv1@FF7?tl8DtSbe%)n2g_SG9><)u2}C?o);jTH*v5U=k=&;Wnrv? zwP_I_9?^cp$)JFbM={nH&Iajo}V1BRovsrUTv@eOWlgURVH&H&Y-&dxp6JoC<Au1CK+cV2*-%qwLI4m8YePQ=Kb1G_NSqYWW`6fmB7@Na z5y*Oj3g7jz>lhE0yzaI*sbhWZFjAfwqRn_!*l6}3BiwZ(p|PQ{r;N)8Aj4!upVn^ZFfyQLwRrQPm5w?;ujGTT z;cE1b+HBAKXhN64pRJ}fVz`P|7gAt1lhWc2r5N9cq@Hn#veHu(RLGwvOE0(US5A#8ehl+D zsaMf51lRYEgyr^{=tNY#|1%~YK@ImW)#%zk7aE1T-W{+C_+TUo~ zzGP!`T}fb@!iySY|bsruhPXsjoajW_AbsmGV?mM z7IXG=<`Y^ZE%o|tL<)dvk3u)I_RcijS!V8&_V(#P(1+*!GFE?8DRTzYS?Bm0sWY?$ z9~v#o#11`;dQk|?q{l1j6@hV%xg(st#yITQN+L@OEjBX<8 z-X3wH^e^k@?f~ef6ces2N?Z#po*mQaSxl!D&|kbC65+U?l+rps{_Vr9T~)waRp&~; z%OrJb3X9v}DvH@w?;&*bma@J^J%lq0)Vh8as|;ZVVEb>?W9+mm*#0MwQ?w_#VwA#GpuiMsJ|xkaoD(J zHt6Px-Q_pZp4y4yFJec?2e5w#h`ce-7Wr)_pMxcZw#_28?6jdMLO0g!k$>Z4D>aRP zZibWIt+kjB-qOq_dmNvxWlJlkssQrm0UX8v)XyM#xXrCMbQvo;n|%onwG-}Da4-1aFWLD-{ zBwcwEzp!xKL+!aLs3d=+_GenP#C{s#v9O9=KdtG5$>*AU(FZTTRQ_gJuc3Gd!r$Ze zwS1c^>~yYm`7-|KDd3e9Ft(0{o~n6F_dKzzY*yjzma_+yRs}e?DD}E`Y=)D98y_2! zcEM4#FmYQuoKNfiy?&-I_4Unj%!zLEloUsUfPa{*`#RFkaj`yZh^`^L{Vp^D`MI{yKS8$D#RAtMjb4%%cWb}21o4%pa z15fmUB8C>s)O;qls@Xp>>ghf6xK150PC3WrO$Yrx_j%&6rjnCBP#{HFan-Hp(qjC& zrY0+g#b#1v{db+wM(yUfJJJ_4o@F03=$#7NB@>PA>CrtLppFJUelF1cbwIl#K>$P} zXcKkaDxCeTh)&GQ<*vzu0C5jfr^j7$eF7i8#J%Mkczm=Q$0%a{Fi89>HRnDZ%e`ik z2R6J7Z}J~9xRWa*Fj)1-Z|hROG=#6u-epTD`|*;(^j&b~_pMGpJu5mu5;cuZNN@GK z{0BC7XSOG^GeI^SHFGY~vK0QQ^Z?qjEgt5l9G(m*<+(_pwpg=PxoOS|^T=}6G8vnr zxRM7n;OE9Vx_Vm0w))Tn$ub9V=VwE7)uiZOD9qiiD!tdW{121-Wgkd>f-XMy;e+mU z;dZHN$w%9?G)1?QYf544NBQxAuSv7c?9F>(K84%PeW}uK8t6WlU-J|5_DztN2hhkh zi6FP>X>5f1?cKr>4_AQV~Pq|@5^ zM8>S(;&^3tSU5f|A@90c9Sdu3vz9aeU5*bP_v1~g^uuTssR~1}HG-EvaPq2KekI>7 zVLl6=)OvXKkM=P_aEe0-2ZH|gf(k|+?q2l?*Cf6&EBz!}Go=b0-riK$i~b{v+9m~I zY$Oq`i8!NVr2u$4im$DG3Dwq$vNU8C!@&XIW2ST2U*FDqgXc{3$#c%F4ZxxTdvS^UUN84B}$q0U>k7BS(kO=QXViAZFPKtDDq_~yz9mqx`Drj=UIfA@w>A+!| zh(w6W)>k|hjobc z8*({z7eXRzt

u;wH5H8|H<-5M3Eh=`F`{TAG?v;#b?7!%LpQqF$rqLJg zv2Yh`PJ8vX-Mjwi+~hnq7nJ)Q-FO=hOwxqBh^8&11zp^^TwFI!==C|y4Y7Net?3yC zU4H(x{lgLlN5=spjhoX}I`d5kv?M}VwnD_KTg4D)S3f*({kS=K`Xs%0J#3NSi<=Zd z-y}ye2pGGujWjhNQXXuD7HBmG2jrPnn~IqUb1J`e4i5bCZ1DK_g0ZOK&q+O@3T21T zxrn>mg4lMzJ}r3pApZ>FXtOXc_7Qp;R$}y1Anby`AFjzreQ5}K-p4uZ?Cio<(Wseg zyzps7Gm;!0k>~yh0>V^x1M_?X({_`@@rMt;%FF%2OPTnQ8oQTS__aP(a!vBAm|B0g z6Fm!mZteWXuOk7ka-A@BksJnv|*P0IiXZTg^;>XuaO^jy4*v%c7+rS@z+p*hEW zJ8LB@TCn~{02TFQ4*j*9XF>wmA6DD3Rccj49`cem<5r+o;H~zsaU{GWx!ax*xhYFk ziNzw}=mSw}fvzU};bZFSC!gNo%vR*bkLBu(vWIS7BPkt(4ZD%-QMP{4}ba)jf-oBX}@iE-@^|HQM$`o>JRgAPilp#O~hw!%@ z>vETqSI0y=hSHF*;Npon_yV@o{1-^%EbcI6yq~(Xp91#;PJS+mSk03;m)tU4g6)Su z%U^9nlHVUThvQbt#XCE_xFzePK-068H?%U!jDuHnuM1l%9g9Fg!uHUMW*xT zJbCZOuDTqi&q*FJw>~sxA`|AM@9TTfhDpx;IF|j;kjkT{hwV8dy*r_Jvp`cU*(%!QQG=6)WbNni<*xTM`oIT-+T=9W|U*mv?+#vhY@yIk-F5~c!x zaerWl^jJJ&ITMJ;H0njH9o4-51sekU;-NK=Ht;leZMB!Sazg7amB)xWbGd!oBY4GJ zk+_YI(8{ygJ&hUa(M(%ICk8QZ;B|4gF)dFbol~SPWsPCR;0GNxFGlB@jVU+`-*>ZGp8(TB$KMT!rnW1;~j0!$m5!6z+Z-Ifhh0KA# z^VPqs&f{JrSGa;IB-00+z8YM7DAwC;BBj^N`3{fYD35py>{Azhd~1L^(6q`LKcDA> z{phOJqc?x02r&*DxFj3TPF`;_n|>G()(ci9NI>_yxn3QhML!w zaGk%Z~A~9m89_nM9+A&P3?`dd4J=tbFR)QNpZWw>K!a&mD z5SgCvz2Gat&RGdnmnfvM3x8An4`~9-$vdvVxdM0&bi16n!TwEXR9$Q z&C`+z>yOh@T$)#>iH_OI=1<_uzgK#F@I`*osZP3~q~XgvYddGY=gb0;pHjk~LSGDe zhoG-sT+ZtE5gZHP9%s;wu(KYwuL|BA7yu-ghzTl9KdiTsRuK`Q)Co{Z`uj0+V zi+QTt-&|X1ySk1rMu9Mk7(GauF|cFjTuAsj_T-S1f%DRo(xF|XUYJNBWT8;jZFcU z215yi!qCpP^N66qiP;f+iB-ZSIfsP_BmBl6uDINAQ@Wj-qizk+(SjXVn%;%smRggT zH6o>cA&L}$E-OyAfq0^|XB43*nIO)1U)&Osw4r-1Bc%Zl{%|MNGbPQ{_QuvSVVlS) zu%Qssf>#yG$vj)$+<+!6^n>0a4K*7yw+75 zl1&I9XdVh-)H+H%FB4lgiB+Y3m~d3n1{&{$9lns|3}ez_*4D;ar_z? zk&(THvNFovL`7EFo3b+Qz4p4cQW7E~TV?NcU0gScD6?#L*<{>n-;0ay@BSW-`!C${ zIp_U;y`E3p4*KKEFj#jCjD#6}Z6;R&4^CRcEs9Y+-wl%V8meuvkd-g#Tm(a2EZCUg zbc9BKR>^jl!OS0DHanlm`G?nd&2Im&L*qb_%0x#7GV;daE&XF?9B3|Vw<4~5`nbO} z`M zyRI*S8iKC&pdE0T?-P&#C9Lw*7wvM5IFZzld^T;>;Y;P2I_2!n$H!NLIf&YpQa0XI z4K8x-4vbIRgkq0~Fn6Hh|SH zv{`#ekM~^nf{|0838gk%X-MZ-Rb?I+*yKDPB;#u!SNDSOC+dTG`R~!yn6WWrIBenI z^b@unkyV;5vEwrMA3)xT6T9NCh1``r+D#kJafDwE3920pD-d!p&g#-*9EHl(p z(S_YFj74=!VjEJOFeHdEQO{gtr=`Zj#*FDRvRDEANf3*Ko>>~-xQNrAHE+9`Stg0% zyvcc9XeVbYN~;ul+4Y;e#I5FQv@9lP26}?|emuRVA_rD6eJ1wPFFn1$X4w2^1V4Pn z4jS#6I=8RxNqJ_lEoi};(8gxr`{e50(cs{XM_=y0F5ebWEEqE->(KOc6@IF>SH*vh zzxIPlUZS!1{V*@=)?|z`Ls?l4wHR*vgVQaq}jGSsZQg7clj6sTw^Kf2`q$Oc^TX-B!*!%^TtLmh3>>t8u|$6CZ%Gx~iaNZhd#Vv{Cisj64O`SVx3m{C$fJ7IC5 zj{ez9@#lF=0Atcohkl zP&QfC&;?qC%;lt@1K~2L`PIJZW*|DOi{r@T_{Wx?5_I=sHgdW0jm=Trw_cV`zTQ0n z;>CY}4ouQ+9C*`g>eOl{##wRM0)_Erqn$;(r4^=npf zzT3PnrAPXII58yTvMgCAydQ4@JPOoF=oc%~qcY|B0)(B=GnBq7$KeTs?rj?i^)iFkMSU}Kt8*0h-cs9(R$Ek=v?t!_Hn_@qbhFkhA|svN z5mMODB3QEi_e7Ezh;iJ`sZSHOG8J2~SP!;k)DBpToG^8y7bu zx3Jk8%_Rr%#?gWyDtL!^%ppH>XUWt;*8*`U;Pw}kA9{#+NPd+F*N?Pnl|sHew>J{! zcf2ZWL)Z|iz@ciUDrZCiJ}ooc-P|>hzsg2K>ta+#+mY(dE)`arxR=h1$#A>GtnY=Z zbh?7kxO6@rG-N|1(j~mD5g+a-^BQj+WbC{Mj=*5iU$DV-erZOHS9uY1ZgqDEsA4U%t=7Q~4vyb?Y$maL(Ydl;>HKo%tm!Hl z@RO(?0t>XAR zXv*=>q-K)ambcD9vuv^=vczh6pPb*J#hZgPz&*;iHgY5rhu=c7tK*I?%tk&i@tvF# zJN6^&-WaaBV~VV z5{s_m@NZ{3lzl<-59mMm#@el7{wd3OM`>70v@99Ng*7zHIl4b;zfh7#=>U7fN~Z61 z?N(tPi~kDD<-S726Gg^XBho9Nsp8>4m_grD3QvonK1aFP-xEZj2?Q}sJ=C-54kN%E&8v=dTWVW?5~s{7t~ z5_9^ELUEYQNvrGUMjUW)G@aN!5+Ip*$H?cJ$32Q_y887w-c$a825tRobmMgAWoL#Q zDT)U_{#=`^z5boz0~;F|RKlRdbJ9nV3KX=N(xr=V=a{1Y`%pUq;7s$9{Z~@mX9wMP z{caRb`glzG{s>#;3z#r<0z_FV?C2va7X!$i(}- zz+EEe+JJkf>EU1dNU+=nT$rFebgOMCqQtSY%lNgjCKv0kU=og;r8o5NY^cCpZ7po% zUTQqv=NK~fP5CzPpl)fmEUXF*!-(Hc-jgO?+sjh{r(s-~NqM-~1vD0I z-{QOa3l4K$6ybcR(;<2{2uN11^agEtUOhHFFxWnvG~b`tfUqai2|m>+Polo|tH7|N zbLSb2+NN>*DFgMd_~>sUZrtLkI>~|+uMCA-vZx+xr`>tUoJQ9O_@oA3>~&L#-P(gl zqqTqG>#ne*-?$je#%i<1FFU?QZCu)^ z?*#3o(bo#+uIx&9MR?O&S{!OoaEYi8x>%fmxAnu3RIsi-DkMRTUezn@Rc9R575qz* zyzUQMAEaD4=z&#kPWc>X)oj%HT1s^LpA%AeR&CEd6ZJ!p zy<~KS=zBEluW+Jd+j0XA*HM`FlT_CF?)?vrJ4}JotAbx_rqWz)gyn3XeSw%YlZ*)! zF}b7>qmfJ{*D)$QuxR*#5z_cw@Ke-iUxOC9rW5Qc=lpe_R<=h5AxIk|^hk9IJ1S z93w8b2?fTj8SiG`#QlOcc9LzqmXd*VY zYhmFvWef}G0D-rm$V6w5d>_)LR9@q4 z>6(s4ecq;hmMKg@+4@D^(B%2{EnPhepA$+GRxyKj1M7(fI3DQ-14$e?Y|El1%sk&k zM*?(wsn0xnhDNA;*cH?iE$Q@^^?1|V$82uvPSQHq1gvMUV*S7|kl>D(KEh*k<98yJ zd;6w_cqvYsEZaMX{=z`g@P})_l;J3bKvx23tZ|tG=Va(1dhb1P%jGK&hd;{>TsqY` z7WXTx!Z?y_Leb{d8SErWP4YdAk$4tJfD9ABw|=>wJA2rv-L#XVu$2W|XiV=d z@N-!A5oluw*o$_id;7rgt}YeNaUN`*?1>4lP00t{`}j336SD~BA9py=VkSDG$43aZ zsK!I0D|$TK2Zcyo;CCLkELbB-IR6bjhs0`ldeR}_YiAnxjt)XL7bG1}zFN^~ieQ4g z@L0NHK=cmFp@n>Lm(v8}g;LnW3$j7(Mnj`HYMdD_TCl!Hs={6($cUJs{Iv)Wf9wQQ zxu+5-IJ_vbdb{t>HFFIN)(27C)#Mkr%5Yv_>*r$=P85)x^sO-oSGi;qiX%S0dWgv6 zl8qVp50KGl-U9~%qmk(F36!mlJG@>ifeih?1^C5fq0g`RD&4MbatfC1%_T1*GNCcu zviC-NB^iz_ zq=H~hXxo!Qlm;SFcV+dXh}iW;_w*HI1Y+!KGv)g7$Uc1w1`Q8rn%+g4*$rcq$F>RE zUA`x2aaAioXWWdLHCQ}0&N8KI??4*q+=7U;#7*G&7Ueu(B^5h`Amzm%m5{L6Mco@O zMu2Lx&~83puwam3!7A4zl044<2mSUby4Y98KU2e2xJG4>$m% z@aTn_&Yo}yR5}We7#yEEd$q?j;*UZ|)5s|v)3WT$=!Y4dx)od|W7lPTRelWHuHT*` zw=t!)_ehqV(4otT%Sy<1T(g}qVyHg=1}TI+si7lvpm%Xj)~G~Ajv(gbJB1nG-=U## zrRRK>o|xcgb&p#54>Y)tu7@89N%)o)?^L2+!fGT#6VUY?UYd-hvWACi2(_;vCyMPJ zO5C9@3b74E_WZ7w`_SZKfcZEyMAd!D97xjW_P59E_YnDhlcCzmjs7q=a5C4E@v|1+ zd;TW7&s%9W>%fAZ`xenPge#qdBJ$n@pY-LVviNRDXPrFYaY~K?&x?<)_nrta-O85# zpwFWDbBsJO{N6|U!A?xRzRiCBQF^zP$<2ofr6V^!t5>#_B??p0ORrl$18m$**B^Pm zr6!qLt0eG*`VXaW1pR%Fr8b`*jI8!4HP-HT>M}*Be|=?D%|`F^9}2!viC_ddlhx)$3DS%gl}%?sLUY{%?wK(W2lStv)Oxmv!HHm3x}}Q^1)D5{R=fx*YJv^DoF1%N3x)g)13}N1+)y@r}zU zoSef+JOYxjfFchVvje8Qt=m7&x-Y+Z(t9{`C#j@%C4Q7CbdRE3~LA}6~WdnM=I9V^bh~`MxaEW zwA8$fjDKWNN1dj?T{94Hz2=c4jN;f)`j%gHgnVuLEIrTqYb9^ z|KhWUm%JAJ?P`&77SU}E>g#Xsl*#`h8?c!12& zp!4_hS9gqV)II6D>5(}bch|>-xyK|Z-pt@nUv?JY^Ffi#7mFe?pa}4OgI3qqAR^Pr zpdG#z#lB5V*OO|isJ=TH;rf#-s`xF|6$v^(7C`KEL9u-%JMAjB>)m7nYKdDf^+S`TOn6Tw4u6>bOLBflPTFit zjHwl+y!#W!?+}q!eJ^^L?yKQ-iZbDj5G{rGoDtb~4Vw+AKYU>?>xyV0Hub-H~eS9uvtQHvdZ>|a51Ea9? zcOaj^@<>ve&9EizPipOgHjw#F?5wh8DP|Kx8*{lCE;u~Ch%EJ2(fkk4{vW_U=G$!8 z%5T`9E3hdv{O4suIp;1OgoSbz@$h!*{ag%0j^x~SkZ|5h*Ae3jZF@3R`*)uVwyx1a zpkrWIr^lp4-{2nGpacCF#Oh+!GI2KY#)mc45gc@J_dh_OPqEpiXV-(go1S*8ue~EC z#p9n%1qRzn98F!+64H-4uO{G4c?;y7>>~MV2ZbB~YZ#ncRkdx#Mo8J$8B)Xivs}u2 zc3#!57Toz=`5tE7^1Hs+nXt1*>qT0}F~11k^d!}zdV`495?doenWr@p4y%@2-eVhVtvA|IrhufX#!JP?LP?cK1jB< zFkq_5q2?Ab<1V%ZDj6y+in>e|-Un#*}PQKj$X=+->SyEOA_ zg<&61!{ATvY%M~~J7SV1TFI(gqoWJ>T@Wh&^1=5++7U+DT;2Frzl1v}g2oJHKT)f4 zSQ=W3iWrKu99g`%CEgEUA5e&NH{{sQS72oo>AlN4ysP-d#swJnd?ZR=;^lQd^Bhlg z0rd<$eSv#SXZ-G^vHccw}OurfbmYJM<(s9`t&)k#Ri(+u_@h~c5~CVN~8mfg(N8o z)iyJjI|;MdCG+Zf^4zez>uKe!keu7pN&QB>taVhj>84(RN#=?fy{;z3)0VsJHYV4| z(Yg=JCbIjq7Hv26YygysAH`JkawDVnA1_h;p)OdHN?G$CpvISa zGPzmzJ64fIEBu!I;O(!|cqXrac%wUCyc@(k)Q?Zy@NSaS36@7JdiT^)&dvCon&c_! zm1EVIUWF9=2ly%fraDmXK=`rc@?j%Ia$o)o1C{D2nZYvr#Jlf-$g7*zLK*A!MZ7oT z^=D_ka7)Bfj!AfZRV$KbKckQ5{_}_TL?lSDkAgE^kJ`6^u1tWQ=eip}pF=>J9b8+Y zmMG6&yIZ&`K_~XE*yW|2|0`DNfrxcgdcksU%XRSvNg>Ynl)MsyuMAa_L zXmaDxUC{>Y3Hjn%pVYp;ycsNXS1b!qqx7kO|I15VE&2Wv#tmIX>H$^(ky1uV78!-C z;DY?K)97aEcK~W{K*B*r!mvDG`HqAbr6iAF&S>WH>+`o2nRX&p6R&3Zeuz@>TE60z z*{u9d0*lW-quUbc)Y0Y4(p)o$mo7C=C>xfKf7)GcWuzs# zUjz_)X!u#smF0zSO41Xzm7BRdDMY#GFmErI02mIhgOR*8Wuk$daHl!xwpCCN*Wxgn ze_`S5`lq)7;v5bOl~^~8&U7MkSlEP5*pM6+Gd6ZmB=?d)5S|9~gLiI{x6|!H8yYd3U(nDn!qxhL%i{csoJa5P$0!&AL24tA+z_h^npJ^# z@B-l|fA1R;kpX$NifjvPKxs9Ny3)hYi`d${7U1W`J9ZUDN6$uMW0_N2qP{tAcgI#A zi&07#umGg(X_&{e2Z1yR6c3E3OIbhs0z^@eUni!7t4zx2iBBwIrV=9Um3HNwnSKrq zOSjmbUXylMUy3qW4*Xtp<9*E?_X?u}HtM8hCrZ)AcFVi=6+J)leR6cA9gDAeBThuB0qLl<=do!2`FNpTB3tw6XCwgkP=NSKQV zgWdWieQh<2{6ZNUfnOR{sEBlzy(86ye2i`^l;B!$g~#dTpP!dchJJ*1b2NxXJs zLKd_B*>ugrYBDsEc z`57BiL(oBSk>?f~iHk3*Nca&nlTOG*TPrTlW}z2Fac$b0uEaOr5KDWDv6nv<_T`W6$~C)eIPhE1ygWwe~ya) zX0SCc1UlIa`TRWS0U^gnGFChIAdaT#J*gQ|Vz zLM=165bwV3?4Vn|VR}DHZ`;S|;TNtHQ}xcf#IOoyH_1DqOXlyVd1y6FvmB_avt~LM zXs&ZI==qFC-7x)7-QVza1a$34+u9&A1K;sr;rYKeiXyaqJ~P>R1M1^$KzkVxW5HEl z!}>Ia4KFGqdB57AqyvRFRv+J-(%)5!+*KPPGkTcjNN))fg@ie{tn)msi_Ja!XE2=I zU=0o_Sm=Z|uXU)nn0B-UMh~}aO9~gP6xKSGE)TUsQXb$m=Uv;F;c-EcC4GcFyfg+h zk9T#~s@)`@dj$|nW*dt^;p^%5ah1yiP3+%XRsuFr6!B-Y)llrLxn>dwbj70rku}5i zqQMPlY#OX%>WMhL_EGEQB}tzUjOQHUiR(TsaZJF2XfTK>5OL_`9_kH#T-5yqN0>VV z^ymn5SJ>LPpq*Ztma8iUao!D{?5O(ZPH4;{*`)G-TYABl34{Zr%t8rvH{7Tlz2}&- z-W6*>c8*8lqU(G9!nCR^mjr3&CjDTgvr)! z3qPgl_8na@tGsS-)mP70wd+titbDxYu<`*u@?_dQD)|lMZ-)%u@b6H%;*cmYiX} zL+VQ(m-T%?xiKm1n`Qm#T}#oGDzEu7D3y7rF{@JFdX@(QgNq1?I zs1+zhpC#45r8HkpbmX+eCu*Qyx^Y+K8{OfvGT^vJEzuzIDYxp`+RzyT4z|vc`tB>F zjj299?}pFMR>OMVs*H3^TW1%?iJLpDuZ)a;S>5ZbN7_l+&FVib_zkL*6c^NLWPIka zenUa3htq4>s# z+Sx{}YT`q(^n}L-Eqrx9Z*fbHq7jU)?m-3+aEM$bf07mF+-OC0y-h`WWd2~P%f53t z%27Ee$qfGTGxxoudfqk)vC{LD@0?3Eeychyaj3wDjVy-8u@yIU?=a`Qq+=6GW8#-~ zPZ4q)t(Cn^0uRZ+^=xL7K5pB;oZ;>9$ox<#)&4#=%Se6X;f`M${Yi3`TN2Zfc{Yc_ z3B?qLTHopK4~{5_P+r4g^=wv4k+Pzq_h1IYSH?ebopHPC)Wh<3|7P;Oy*cQ9@AO4v zZISIGH<&=s;mGT>Y8r;^&uZIuF}KS&p0R{1@5GxruOaN44S1zPMJT8f)T4$r+?jJs z4%8K&j-)lTunT{9TvR$IB2548wO;=jQ^l;=E>6NgzyaDAcQ-Gj@ zg_tFmExoq3Fv@=Eh0~rKDYF~bC{(bbirrr8Y#77ysPT17RE69!hQLvrp73sD#Uz8& zi2Nt+Jl~P8u>3HC?1I>k=778#_{TosV5Ke+goGz7HlI!ebfiE+Q34}lyD}>7kdzQ`6w@dx=GssHF6@tQ&9 zfzHF~YdS}%U)hOU85B?gc2rF(YNor2Tg0=4BH{w!>5n5j37c(18(AkfET&YWyVYT3 zmyjn@$Dk~S?5Ty5R^B&bZLD9aUbvn~V;~xi%zw_MA6uZ2zqc?eG0Ycw7r>eGoYKaV zE=%W>iA0(~4aaT)_wIuDyRCi_SgPK09q1KbGFuG{L^L8#3lJgqu9+y3eVBR&$| z?5VVLV$X3*`swrGh+^_3-vd8Zfq>(Go;W{F#uq9(+H8VFjlY&Y6R~<9^BgA>gZjF* z_z#bpR0WzJYjY4wTbkP7v3U(BQp|%-?Xi(K&6h+jRO1<;A5KK1;Z-;<#ARCiN^y>5 z>0z4RCI@r*OKA}SY{BhlQDe#5f8L5VYJVkccAg8l%##XjjDt9DhY6`iEq*<5$wLr` zQrI~L?%VLK_D(|SXj*7=zfs52j}?3O@|cY%UYKbW&sq@$sY(z<#wAlhF)H7>Sjp{5*cImzAj%a})ItciWU9IWCw8g8=g467z%?pP&^A=( z+3~BHT%g_6n{DkGVz$!c`Rks>TjZVWd~xLt5P@32;#9(5aMPa^@D8*;-m&+^Wi9~K zEoc8CS#R7gqd&ZZ9O4>+b{2!6=A_aFAZRK)FBn*5`;$wW%Z&wDNQNZ(ar_gGzV~Lb ztL3AyilA5i9n5bgz@;^{Z|$_fY}Ix4k(+IH`hVQ68#T}?{-YB~j?3lWkIHkjUkJNq zl6{=QcHb+TMXzr%Dpx6#XW*7JHJih05x1KX-ZzV8{cmRF3fn$-{OKOGr1(=R3CsTg zw&@Xtw{N~(8~q|AI_Q7q+_>rf%MR8}_T2yLg>};#R~vrli>(%Vdc^eUAhv4DnYkgv z_Fs%K2#%21-kvhrSqTqu`8<6d_ssb!7hjkYEV1SqfT+cW)$N^u_?1Z=3o`}%LY9yL zQGwgCpR_A-?p4H(sIQ)pF8coiG+}IEFk*}!>ZD`uD@ry+#W&(nUEg`(De+9feJ0H3 zPgJ4Rj)jr(KB>o40T}ED;<#oP*@KKOdlc)_-Aeixb>@;55Y1N9=g?#My^s(G3A+3WKk3LI zrB!TDMYeRmm>H8*#I{M1WA6H1)Fqwg%%@dnRWp|#w>h@XM;wDEW$0%Rio?6#&w3F$ z8J8*;0S%}H>V&-oH21^p-?wGl1X$~0cXs8>5fZa-t6*?@!C14GVK~+7+LDbNL#|R} zoPGlLRTfDf`z;N>XWnGLRS50&F}2Qa{HJX|6zV|eqb{wx&7XcXRkeAqQyRH0*NvSD z-)z08Jn})mL-&I4vW=)j{2HnisFDj)gt|v`{6Ql3ZawIFX5SzKGbx#-EC@Y&h1RzA5vx7|(m>APiV-7YemP4-vY;7|DL6xGV*E+lEg`3WJ zrp)bYb`rnhju2X3)`|4t-jIBpzzPQKf0hRQ1Z}?&kl_BIwG@fOa~q2q+Lp6^I7`Kr z3~VE=q3Y&sU=MJTn+)HWyZ-~E_2wW%F&Z3O>L{5~s|pJr=td0M?eA+2AnM`sfb*za z+@t&(47bek+(NFnFS;)6r!SM;$G;^z66t<52|B*geX+Nl#1LqEN0!=~OgB-fXn0q7 z=2B%H34Z8(^61m)84v7vI4qPDI6)?xv~}gJ5NBl_O*e-3s!4)2-|0X&BE-#Rc1tl{ z=A*T{@VFNIkJitbb0*^A*4-1kBGu)kD08@0%~r|oKj0Sj^Aot@8Th*IMV#eqsh`$1 zflQl%hF|7ko$gG4N1z$zA8_g90Hewh>dl&}Bhd^#0$PjzAuIZHP`j2O)JwR0lC#~d zH36HO6sRo~#7{@xy7+iuIY;t~A~}-4kjY)NYp%s^N&mP`7r31%d;x0&&x6LHAxS92 z&#~E+9s3SqcyU`taDy^xgCcE2`Ma>Q-BUW6*1!`onymLjSd91c5G}CmqQht7INO!z z*Z2&Ny%4^PntxL;Gi-`im2ft+vmKt+>8FBonY_j3XwO;>k`l7bRovv*$(WYxM2j<} z2^Hi2KI_Wy5a-Qy3))) zCHJ zd?9i=kO_P=$@SKv%t%o{+$H)B16&EfHz z+G)YUZG=#5$W9!&af2G3IOaFzqProS?Hn9D%OXcv!@W8z1dJZY zphUNM(}L2}EP0?`rPBJH=urYwyRZ%wvN$_*=n$pMMbIctjZz^HfBuYw1+ajc^lNq5 zrr38v)?@A{JB{#`6kNhcy_0V6H#r0aqeJ{ zf0o&(cHUSDLILf?jU{{zO4*vGF7@O5s;%oUk)CQ-$%Uj8lG)`U7`}=!?Y3VthF&>B zI|@Bu9g7Qb+MAI>j=DAzw-{vneT>td(F(nSOq@>n)sjjowxraPEB*$ikJHWy{ahR+ zZebU{L|uh>N?|(FuLng=bT9C!fc%M^ayS*Z-)j|!^H>%6Hs=ge-$i$<-Ph`VpIje( zHhm1i+&SrpdWS5822Ax&pZB`gF6=1#O&`xS5d13?r!E;p?Ny2mudzroxJ@*Hr|wfc zqk0yoXFqg5uZgH$H)bjrcMI2mxSB>{Qi%#(Hz&48WlQAb8^ihiFeEC2UvE@HNmixyqCmQMt&z%v$*y!+! znhTlfV-0vo3-0{rSWfwiz2%aJPLQkjg-~aq%v=n_-48qzuKfmsKgE1$Kx72S=5+;a zOma=3_8O;*nMDhV4hSkOy_tJc4#je|o?U;CH`_;z4qUr0bD(qNgvA{01e*U$VCaL> z5c5a?1cf$N8p5CA&4HcDM9oJlV`B(hX0x42<8EzJ=x~zA2XCRrA%dT$PT+pQ744HF z_N9FnYz@cwy0XQN2}?)Y(C`3Peukihwm_=;4xPl`>N%s|#UGrY<#c(9Ze8yO31aS@8thSYTlxB(39ou#QoAR)WxU?g_%8oXh?U8MBJ< zM>JU-r>D*+yBbYfI|3W~;Zx`MuVolVlx=8h%)yaX83{z{S-SiSC4;dKW2&w#_QEDp z!~VhAHfDc4JP8X&zjEBG7BY$#yHv<1&|2MKd~=Jw-i>wk9KMLFIj2p2ADW(hhk5Ftz(XNxdgPje zjRoBUvv`c%2_Qs4_UK&Rxp(C-r+Se1qP>6WDI;^a z%9DCMwhbBu9Y4j;saUonJVKlA_He{A(%op=8nvj&2H<>ly%Fg#m z(iV%@(YfwsITC;Edl{vP(S3UpE4n1ZD^<241dUCu0>>EC!>085Sk(HP6vqAO&An*t zMYtu_Oym&%EF%41+w)!|B*WVaiMI@>epu%?_-C=JdDM&7Td)hS1B~+SJa-Ja47J6) zcf483So)d7cE&XulQU<7;(~V5Tug&m2k%FmENUaeRXU>gM3D$gzc%^{y0>-xR-xxG zszbUH3Gyh%SSR_Pt@aB^L8_426}ZNVxftn?hR)WfU*C+9hLG6fW1aA02>I^VWj)>9 z==-Dq!A~gI-9g2lv)Bg!QOZbrrw=@ou>9A-YVOnfd4ae+;2iI!%cKL=*wG@*N8ppX z*3iqR9vrP6LeG9p{0Nlvau_i9NGMs!zNp+IxG!Ge2^m=(g-RfOXn6Q;y7?RQB0P}5 z7Z8W&T5&k~*Gi=4&D(Oj->73ka79EdK0t)2IQBj|G5uGS9H)Pw?4+!V8R0_+6PnAYv`4nwz~+JLfpV z;U5BA?)=y&WP8?P`QY;ba~Gm*J9d5t_xC&^SY?CnXrngyLbhfFma;DkCQf%fi`r^`(effB{O>_YOaQa%om(Rzb9rjA$h7c`Pz zOw9Dvvm|HBo^QBktOM=>yga@qunWJ-T#D9oXY{1>1d<_CBI>&PM=zYMG-M2ht%M7n z7I5FE9cs8|De=6toYIT=iGUgpn@Fsx#o5aT^gLX!+>Vb2s80(sN zCih#em7hR-fFuDWmI1?0v{y6=t;SnyfJ7rq0Qo85e4qU)U0R3# z0Gi6RC)_zqjK$)b*>CqVRuq1OI;Gu;xZbLpMN=aTxJEJVu5=;!em5)N6&0lv#XTK1 z+WXhM#Cc_1?4v`ulbmGe4}WP>^8h9dbu_Qfv_s?BC8tdyvIc(3Gj0|93?@@6tbasZ z>8fX1+EtiJ`D#Z!-kiI>%e_2lmGso$rkL*m;9ZtGOQG4*SLeDD64#qeD9*;&fL$w8 z4u#f_Dnuv}?Ee`F0E!M^w_OTO(`hZb^tR)+w1horSwjIoMWQvOuaab3*azqiZ-Z{! zwx*Z`xUr_n%Nr?B(@zNAzae8knn6urEPsPqIg@wh(+?Ig0L6WIo+G84dA>B=6qwQB z&AMmP&5Bu4KB`pt@lDy#gfEVtXX=Ir8E-rjx=YEqZ94EgGz~fps*{ibSs2!^zuZc8 zurCqwnt|vV52$*$DJth(Wh)(W%Ey(k;LAf(l`2#O7wZdj-vU(S2?bKq925I}-X*sx z=4@b}e{82ky{hd~a(?aHy#(AG*p?4E zeE}bGjz~MNoRlchOauVnPrqTZvL`@x*^2q-FjX!x<;d+eN^GH zX(qMK*$Eu10SPpZ0^|V`^`nkYCI7L=e9M2uAh}w%98a4z{er67G4IIv>64aw)gzvD z67KdBhi^cm_=Mq>3Z{% zcmvye@f98=AuC3X*hg0F17F_cQGdS_6)Bt2q=u={H>#ON>GGP?XnQJ7Qvk9I6?fwG zx$2`*jlWDJd}Zmirca^1Qap8|+npvqiyWQODt_Rx?dvJ_p8EFB_eulS zcm10~g~<*M9>q|aR{6hwz66&IfArtB%e`+E=a04!-lEPLh^1aukgh+XT>d~=&&yQi zZ9Ty)qWF=DLYB9rZ~a>Nbh&ffSNof;=LT8VPt7O}14W?&@KCchf64o`2kOtC2bcCY zQqDYAybnsKfAg_UWMH_!pdgcsdb!?W7f3Dr#z-omz4#&E>rJmR^W0)_o`pbz*zy}A z`21YK1yn_=?C0B!G*Y7W>~v8V@)kAqId;o6so~6$es7n$v<+TbBXJ;^a&M2RPWUC< zLq6H!{gKG00_b>Mt>P|t*gVqAAKFWB~}*w0HZQIR42; z?9W}Bt|A_R+sXyQwU_o2alu?M6Z4Sg!{LwHoi4A0y5SF}io1qnCxE?3qBt{*SB*&_ zybb-CE5{%1@}T||v}YwS`J}Z7r5Lga*C zE$vGYjVflSjO8##ncVT=9}JGB6|a!M26aaf6iU+H%BIV`;koy-l}|SNFXUoQ@Eir5xm5Zq}JWKTgAI6JxH0y4+gq0ZR{nV2Fx&O%SmV z&m64rxU(rJ+Le{$X@ev`LzN3Zg30pN-_Agh!M}|%Uo_XaOFrcdpO76XwWyprn^_p$ zShSO*dQu#IY4IT1Y~q_tfI$C1xZwg$70>l8!b~T>?OWF`AXlLGdyQCQV3!Qs&m^>( zM)>rFj7bni!g+Civ*EVc6x70gJRh$XjxKF+JviA@z+l3MP_+JpJhd(xZ#=n3U)VUb zE(5argsy1h+4aY+!|KnYygmeu#TJ6bEn4>j!eXwfa!hk-;Wl;qA3u@Hx+x@qN)TRq zTALIzP567l2ala3LVUnIkeA(KGbp})oU6Fa;nAmWNBNn-5D@1WS(g}QGDARZVo<*0 zw;F%TH?9)IFKQu1z{nd!D0bv>E^K3RN^L`{5`PVc-Tsy$>Uf}02!90Gn4hV*n?n=N z_SO;M>(-ebb= zHV{a!`Qq12;hMR~pGm>s>YG9)A0*Rk9b3jm3aU%*XY5)cp{_Cxu&B{YE_h5T(U#EP z67zdEeHGEAOE|skRe~bHxGwcs>}L9!BU!@p(^qqVmAfM30_rm!aA<%6-_S;X<=VK+ zzBWcCpDJ6aO_u>G#Mr#HWEwu&c$_38%qVUj*&dvK*f{s~N#7rKCY$(gZ}TnXJK>K4K@jOcefx*dvGtg?Q~sam{{X&-x~`tNjtkDc*XR%U z!V(5ZuzN6Q%Gu8!T4rUHkiGu4V{o|ED$M3U**3Z>Rk=O=h-Vezho?o75{WRud{!q$+Z^oTO)K7<$RIn;IpWE8HITs^@3*f(bz{yt_oeF8`}dxaKl~8z zmA{7I38q&FpXVKn`P|cEfn6a7n?Sn_<~fZ@V=Y_)`ph&{CeBgs3>F#3QQ-98etkH^ z_96jtWAVar4<7yv;vUQy{kv;3j86+7={@HM2?j#J9rm;Ja2KMnERmWh20?YN9htwFq?%-9uG#>y#Tv8e@DrvZQbckz&q^iHW- zOoB3&2e;C^+!cA5CUsULE3Uc%ADrQmo!@2ysX)%d7!sUMeq6*P(FAV>$E4aNW0Q-y3h&(WNOW9cEXLmo%P9-}i27Ev_@Mae8V@O?cJOu;HVR$OT|I1`T{K~rNU!a>{7wz$VoR0q z@&(^QOg zEB&=E@u%*}-r;xsF={k`8@K-hR3{wVHy@q45th=+{Xd4zGoGzJisLbgwzg`O8f}%< ztlHFS)u>vv#VBfv*eiC6+G=mw+IuF5S$nH3k=WEo)JhOMPu}EBUgh4;y*dALe&_o= zWNkqh*Jjh$ZXwi$Lu*pxMAS2Y?^x9v^W?W>w+BB%%qI_BU71{c*?_}AOHKEX2&6b+ zvZUJUS<|I8NuTMG*;3V2@aJNm^|s+v%cVnh-!{pcRY>`WX)DANOXmlEVB_(3mNRl) zs10Ps{@xYn{QafkGj}#-=W$z_(W{Bdxw5F2zb?nvfq34KkT%?CBCZPt)OIH<5NSV{ z5Sm7)m+M361Z}YAca%xIhz)4)*|_pFopDc>QNXbv@Tw)=WF88wtG}jmk_`!6hYQ0X zo{dtVw#9W>1(;v((uRu(xdY-~Zt#kA3~Q=SgGE4kN1orCq{88J_ARnY$UTQt8(TW_1 z#2g^++RYV{l9rKXYEEQ7l)O=x@sGZ!d?WLyd&~?1?<&-Z2KvyP}$EBy1n@yU zT-zi#3(F?hRS&9>h7BAod|5uzVW^lx_Al=hl-NG8Y3~u3x(02KtcQtVbzzc0!wwZE=qR<%XfL%@98_@B4c^%al(DIEg>Gnjo(hf zGIX*JcYid3*muLz^31p{OFl+r9CT$_?BLQK6$R-oFhQ%GSKO~Tg7xXFQe=#}dNGFAH>eZEfwPhzBOwk{ZRm zoIl3U8`nkG>5v%^aybO54F-8U7!BTUxo&OtMWR<*{gS;eb8o|%Izijw2(J1X5$K?{ z-}X;KObtf}$%1cLwfT#nkiD_1ULP4hPr=FKXjCGG1N96M2U_~$h-H*rE>PeYq)T8um6+7RW2 zTF$|w$_$l;T9=)IG%md9nN8s*y%Mybim;7_nGvWB;tP;kr)pU467=u z+0O0M?G-*Q;9sKk8hsWX0cDjJo`piI26o$c^(vA+wfu}LDdA;3mNgapp<&72Q%Z=9 zJE&3clDb~;#uc!4$|kD0NV50zEusR#nWxXXmg}3K+2r&^xkqVf&h}T}yZ#J0M517h!iKJK61EOYk7jr;sD7u0;E_}fXJXQyR+&XVr$%V52RTJc6_ z?*Sp~)G^PBf3s$P(f3>T`-jannWf9lt=h)@U(UWg#Jn)T6jcym(=)#zA^k3}Zv>9J zafp>$8Wub=zxYCh=-59x0|5(luqT zD#ci1e)n98ea|lhlql}xlR24A_=l25e7Yx~X3O=LLYbWRajG7*>+YW=KfwGj7yT4H zV=0%>(<8psA9f_v8;8-Zxt&P z?X|hKx6=-7!4n2Q5kk;Ghb>;G5X+{EU<1?bufnZ}gFGLf3^RU86f(eec)sknO@H>Nhpk(9IER9N+tNP*V{FT&uPg}O5g!o?W8rFT zZzm<2YFaZThT-2^J=m@!=nd*6L4+5zw(xoxXhJ1k(8d;y4F<++wj}i8{;=WMYcZ;H z!=PGFI&O_cE?)yq+hJ7eXa)LOZF7fxZ{LMq03S%u1p8|Ed%r^-G#0E#Hf6|lY;~w^ zb^JV(-@)ONG%l}o2VMN{;t3wO%6vQE6{z2~V1{MVw$wy#tnSJPyeW8N)CKuyJ@dK# z>wkbYdz-RZ<*-{7&ke0VXEWaW5a?c{oV%}e>=&ZOsHCVEqsC6&6l6hG!eFe?4$)QY zV*&Ay@O+>yfAeACMK9|DZ+zF*$#UhgQPXRC*dvu4Z9y!h$e>#^tYPcW%p60oTcv7N zahMKJ8Wh%_{#iMf1Nx1MJMLReIheFZ9LSFzU}qYC2>g5W;9>uN07sRS7V|pLXxWKS z#&U*ecJ@Y4g-5ad(!bGV$I(fwFzk^*mruwrr5y-sV!q;XT?x_XI*dmo5ku=Ma$BI5 zoBOD15fJRYo*O#};3Al1WVE3CeT}g4Mt`&B%=md&ML6J9 zXhQ2k4M~&|puJqMJXKFE(|YvXv+__%MbOJ1>N;L2O0*Qp4^!5)0MAXWxWyO?yUkto z_4L08d=6$Z(-tnsY2j{Nf|@SQHZt>}Un%na{B&QcgDN1itL61s&FlesV@KFb!zOVZ zZG$wjkdf>XVdvaT>u!uD{D4EqzR+?HULkbf5ICMX7eO5rvY?SnSyb1Q-wJ z26n+Vgt7kYC)H!wtG>{}`IH3nuO$nXTQ0c2@%Y(d*4kyPC7jOx;JTe?e&vKiF+BU} zt5TTGL8t_7VVhXW%-?u1cf@VZ}NsOFVYh1 zFAwobUN0fk>jNJ2zSgcBtE$8Haw=-A%Y=o#ydhYNAYW zA?sjJDbDwq9KYk$3jXfl$JtF3GW9>eE-2WPMOApQYYV=l?|j{RP}@}CW8MlSDagV7 zN<$vN!=MD+()o_T#bEwmNy+eGON5!-7m;X4o?U;bCpd@I2!H) zvl2N3NQyanAbX)pk=UAmkEQaDWN9ia@1h6rT^J-P4VaH23@)~xjmAilxky*ORuy$= zm;pm#w=Hd3=Y{Nl8Oj>$gMXC9`+XWf8de4lSIpTqQyeYf63)vyq3l(ik!;8o|>hYsG8@EKAlJx&Iv#(ds`wpe2Ec=rlx) zCNrXDNvC9t-jgIe_ye9Jo>L*b(0sms^I`>i-W_{bV1d7XQ`+Fxb)1bO-u*^dF76AK zvtHtQXthc-5kJv`j>nAm7xTq>OFTK-PmiOT2HjybY>Dp}$CQHMDixicgoN~^4wv1} z8f+hVmbV8Pet=EN3crf7S;QpBX#qUD@4d9SSvCRlc` z{tkMO@v1ViSxfs}M5XL38bkvXJ++e#qzsGQ^xw4)lGWVz3l^Ekh_LGxx7Jn++ z>8h&g%$NEsV=qM`dI1X#meGK3Wz4%`Lu$Pw^{fdMl9BF=+=emE5tp%#KF}@auhk<^ z8OyoY?SC+E{JJD;Fq72W1^(RHAtqFvd-hYbHk72~$XuHyWPq2=w~GM7!mzSQu>Sz9 zhg}|nRz96KtCC&ry>5b@Nm~!VZk11s&uUD}pL{Ljkm@aIKv&nC8eT`iHS|Cr3wC`~ zmplmZx(~Ku=$4Gy*)Xwr1%l{6trese8k*td3VSr@k7iT7Z$e#WA&=UQ*nPSdyH~Z} zfVlx{CoZZ#3z)Ai&${B?S7;P=1QDL$ejQLkK~@s&8Fw)&cSn7hi#2JlN0;aI^0sSQ zCTGv^KaB0SdYbhsDj9CGxh`4U7ld(ZaP^Z0ry0>6^Vq?OINI%Jc5D?Q}6W}WbS6=5t)%aY1P>v>;w1V`n&omIO)xc+W=H_MR z>aIda!S(t5u0b_uB1q03pXiH){0BgVcwGqAK3!p7CNT9LWk_6^rmjoLQ$`xKNnv^8 zn>L>djcKa)7`PxXvP+{H@7APWaF_6~o!_+d{7F9@Ct)OR^}nQe5szo==2nh=`Qnwb z-EB_wr;OT+MF3tsfC2Xxad~SJCT-3~fIv*pkvY+=Nu)+UDFEH{EVk!#u3#p%mwZ({ z4tnMsr6#C3w7m&Ge|)PCSa~#}L1pee`3PQf=&dVG<4E`qV2wN2Co)Kd9&AF22O3=Q zI4n}x(&8Uf>_V^@`YBuHU3Eu9^gnhHB=l$97~_Bx2VY1czl8io*Kikl5|v{K?^q3L zK!W9J53KuEkQk(Qo9iMnzW72SEXA`d_=edz?~(5a}qdNF8r+C2cT zl{Jv^F>qgo+W#AX;JlW=-vl}rj>?I*B_RgS;heBd|4uSr>;rL!LY3B0 zU)a;u?HbGWEJzrAK?sojcj+rB->Z?I{%zVU zH#^nH>rq#jkuXpf3?g$_%!TF(+-4Z#YiTE`$5UKHG-{eIuK!0zAc z0m9qxh?KOh2IA^^)86e!U}22S-BXmrzTtAQsi|9H@7tixU*(7p40_mac&C8)utX&` zXc4Ct**NGVJjBI()*L-4cTn5XJ}_$Ih%S@_AH(o$@9OGLfuAYdCoY*)4(nS3(Du@n zop)fm6UnGz!ADj+SDzMS3mR&V9S^2-ar^kCCG>^Qv+#Bqo(m!5Gpj|&F)<+s8hy7@??S+$cX=x4mxgFY4%j0$)Hnol|H`^k|4V!|=Scvcdq!#kDgAw!bKfnu- z<=wm&vcMcj3PZK!8if(DJ91$}U_ZocbuzUOe{?<$0vC^1_E~@jwT}2SUzcD)X`t{f zxZTYp0sOYAkYyjaFL96|`hMcEmIqxas%Am7xcF${@;`u0m#l0%gsJO%bMw0EFnH?F zLgu1@U_R)8r+hfJWcyj*E)e1By8LD!X-{PS$idQR(~55xXQcO}YfxepD}~i_hIZLb z@nR$mLFUcm>B_{t1E54r9R*@o250UQ}B`a$_+b#ZV8AwaR%lt z&<&VkYCN#b>2S}KRU_LLNrqwTIUc}(#L|*q!=QVyZ(BBU*hOeDqecVO+8c|Gun^+=x*HjOTPh^@4_mX-eza436AlH`kT$sxZMZHZ-d0YB&ix!V ziwCGq#L}^(xzdL8_|%%Thw7Aum-!{Lu#ZTBB zuGeyaM7cj&Ve6>(d(rIaNNk|FEI*+9{tjt$C(p@#C;n#Bc~D6*des((hd?T8=K7xm zmk{k+pCSsw()BjJ06lNsrq-QNp_0@LA}O>L3#V0_YtL6V^T$cV2%nCkuBITdL&Rbe z94HLE?!?o%Ln_gMoObR6et^WGha@2)M%`NYj7dAAb{r=*hzh)nYP1a^l z8xxGDhAw~!$#)ZOdRUfK{TKt;H}3OG*NUg3sZb#<#GzjMnUi4pn)4aZVRQ^ z$%TwDAqzK8V>UMdP7r2fEy?S4 zIjT>DQWRbt72ETwOwS2^;BA10gBmWP($KGW)g0b#No+-^_Ocr|HEqQ~wGI~&ddmoU zF4+dFNpBmH-rC*!UKpaS&7c?0&nl;GsxiAP%f|hKv`UPT^p;q-_Sc>-F|+rn3!Hv@ z()>I!uH+DE`b7Pqm7J2(XP~)$+VOXp=s9vlK5eBdw{xln#k6AyzNzx>r z>iL&#B`##~i$nigm4m{0=qLY-yJ=&q4ylDSfF#eK)oM2CJlxh5+4Fbkw316m>%(YH z=heA~W);WI*G!6O{&JA;zocL`-UpnH#C$kCw{9oD`?e|EoAY@#Am9sNM-==qt8f$z-qIe`wsKgykl3za+cND8GK=E$QkfC^2=}(!XaVS;4 z?!N~ifY9o9qGYd%W_0hUeaYB}nRHXD8Z2bwj^Jb^d4IcSRQjr0owq1PgzL+~lR)Jg zKgZHk&T>xwHsk?x0S|%WB;cUpSY*fizIOmB9*T5^L0wlmTHtQ6J{VJIQ6nq$rInTR zC;#T*kaUHnU`Fo{VbsPj;>BeMex|L*^giVRDB%9t0~-#Don9Q`1{7MSFzl@;5w&x#EQm ziIMo*%}I*Om@1mjFSxx)ogba~Y*vK02Xj8<1Nvim?;adiZQF%tFaHT~<8;g4AgJPP zag`YK%5?z|`K8?fLHmYbHQ+h#BniRR{duqL5CcbOTBdtm4O<(9H(7YWC(Jmdfsmcj&v_1ywelO5?{N|5<_``k!EJ*u_R`p0wUf~5ZuxbwHJQ%hs zjO0bG5EBFtX{5!B4>8?7F3bjjjGhqZxKB=6u^hYGhd20wZPq0LmlAxym@Xf)b4(Jf_)ek%an-;-rbNen*{q(a<;8s1oMVCx*lB6O8P~jcbtP*tDP_< zPgjGbv^}pr4uiDXGBcX&0T9>l*LUs~sib6}YE9?F; zBqz2aR3tZaz;RuQRNE-s1rjINnIfnb!SiLETE}md&26ALOpu)QLo~lG`Oe#~L|S%= z(|#G9yTG#ZlWfgCRWF)?)VeCGpYe|mhzFPgUs=zbEq@MPaF53$IxkQ2#?~d{&V~6M zg4SQmg5R{b3Fx;Yi1#V40FAq{k%wJ%x#f@c@4d;DD z)PigzZ8Rh&2Ua-y6aH{Q&Qdw|t7su^7ee#FC;1^A?XL zTbD|XF5rkmnz_0`b>^atUk6A}&-~V(Iu$J{U5Sq3@K|Yss+~)p!LUj5QEwmOicMDl zdImQc==&h>x(Wisb7Cf4eDY6HRqKOg5sH$ zZosjP&<#9$@u*J*olQDs9DkQ+l=l@hh1(5%BqML5QQo)%Q?R+Z*XMR1iEhR~@h(Vc zb^GRDFf5p`LdZGbZ46#LCc+bWQ8!4RTG1gs#v#J^;6qzqNrRlRAm{nftRtzs{s-Ci zPfI2Fwl52pdw0|Cy?Wg#XY-?Al)-*W@NTiv9S3E`fK58ft>_Y4H>x)}U#8NN*hIz1 zm15Rs1p$t!JxmnVPX)GLQ?I=;M#sM~&fT4n4pse{`#eMDlNm)*!E-SYdZ#|`g5O;N zcSj07u`Iaz47&Q-^|_lbAg?$*jvQMX+bv{sHzWd~L$0{ZOSS^UVYNl$-jZnXPv@Ai zkw-j*Da{+Wz+lA0OyUOawNJ0hPgHy&XCtv-@X@^&Drk&+26q6kQ@lVdc=`(Po6fy? z$VwHMdoSuXnK;+s|KKS;+V$t)(eZh&L@TNCZFX^&A83w8!_4T^&f3Du1 z9q={t6p<05vc__!xrQ=VF-%zlLC1p`C*oOt!?qoRp%yy+^CTR4W~XtR%2|_l=Axn_ zX^kb7HFbv-0jRiD=Zf3*u3i?1e@F|w>WG7xH(a*26}^x*nIg3_bmkr$Wy}@Q zGx?apg?dvlu5(OvZMq_|$M{T*S0I5i^wU@KgoxyE#%_)*Lr3zNUK)oTogS^h$1nN0 z`jWJg2Nk$PPJX*MfO3<)ZznYn--{w) zZu}hDoqSv2nkuf3lbS{)J5;bmSCl*bld;bCSAnf{)|8`^BsAhnmY8~-_u+raj9w~l zzxMc@-}6n9Hj$i+ltfSPiEWl0#gFvcbo7=16+N+ac7O}7a%QgK??qHK)OFu~`Hs{z z3D|1bb0sOIJWez&$gbwSwnN?!4n7jW4k>R`mWeOMO!FTHg)OaW~`in}LlG z?XPNW{f~Xh=UyxUOw#{2%%gc+e~B`(@P9K3C%;vd$sQ;gM}Gj1usdDVypCTeyICo% zKBIX>B`u)HcZ)KC^?d_ceM@6+D$72`IotaOtf(@cSNV+B(4~5IC!RlhH~-JS!RgQU z{mwpq-r7bE5D{NL|O=9 zqDpFX`k$$>W*8cX?i?vRqJxv0%RX?vPfD8fY1%lkEM`|hXOvP5&E@@bYgoWU)Id+2 zN9hHrS|+L5L+kc;?|VV}ga>ye7JJz~$E$v1nj)ch6p38YEHW32p-mQ7%4E6|5U&1j zz-b0?mrvcPxtPm8JFtrP1;^dk=Pkgu&lKge44Gvz>xXRLNzc1$sX|O>k z&Isf8)0Dqg6lYUS*E7vhJHoW#n~KQyeotjK{06UQ#u$uPV_XemY_!UX z27jv+Bs>c|6V4NwmVDgS;S376nQ=j4#^am!aX#th_qUI?;4b@3utb*yIMM{IIEF(KfM>!1wN8~8zL!UG4=}WUFcX6qG;bq8I~wWE-i0KvclO3FVL%Q| zPyt|Ut@~_<&-Ko;?6u1JlsHK|`fRK0-2o^l#$)M3vT}pRERs2s*)*Id6mWY&jLEW> zr9H&PwA^iijZjO7hhY}Lt}W=>Fy2;4!q*KcZlC~^&EGqH^jJ2w+?>rDUNPt2$d|<@DvMb)G z7KL^d5|!V=8!Zvdb?BLQEqK}rJNIKEhQtUy4@Q=wT#*?bNO}BeLQc`?e*iUNS1r4O zZ=TUO*XeB|O^BLpOWK)Gg;)fD@0Yj+lfsJ{9(-fqrSY+BkUV-&dDmIGVeCJ^TPK1! z_7FngpOh3`BvcAE*uiejkoZLy`!H_~&@r72G=kuc4Ry-h)ZJ8Ohjkc0Op%Pm zT4F~E()fa-E~3+Z8i^?K23Zv~Uuzo+Sl~ntAxQhR*1YP<_6ej@{Jz#S1P2c|5NBvNVx2Jzb8C(nK0Kmod!H! zm-TubjGx31x`M*6uysg5yoGl2#odJ*D167>D)AwFL+6X@fMe)z?4VcgKOJ5rm&bVNv&(1d~Dh^Y+FE~~BvU@mQD+fe6^$>h_Bc<)M# zcolamhhdasP)!gTuiX$BxdJ8Rnq%o)gqJ0Rc(yVRAs}_q(SLZLo+ScU4$-pt{iG`k zGP)R~PzCC2{AJc*UHRKIpFq5{*i#xWl!Xs4`ao_JLwklvxLNh-7+z|h7|mUSsbw(v zH+r|F*QCw5xB_G_=;oJ0b2N#00f$<9*RnyUD06n-2Tlrhe=j@oVOHP+vAwbRegLg{ zYXz;XH8<-lsm%FCBqvj~JpV_-s;e0u)20$-wZfWvI}}K;{_A_gSwAuv-Z)Vwlf=<% z$lRyr(_pPOH1;qnYVCplc(eJGU{UJ=xn&qL?IN5^e9bT7x!VNjIxMXX zYyW9!-eh~X{99|;1%OdeD6ptrG?C*X_xaooeA{^>C9S)|XGMAlH_5%6!5#=~uh`yh zn$N(Dd~wUTSL{uXG? z>jteHHQBQ3_2cPm3B5?!{1vR0q_e-TL=5 z4TUYscle!>8QNz0RV5JZ|8qBb=I4OO7K=9ZJDqZOk zMCQn?xD!HxmEg{^sN-DzWdYm-?)8EM^q%8vVV+3tqu?I%5v)}00xM?**z3@>{cPJw z%dZK#1pFf*>>p%lu_zh#M#F)L0+II;QCQCMw>IsqiIk}(tUJi1nGj3N{g0SEvpr~mCa4-S18pkDa`6bxfySpx;5Ut(@$xAoad6*_H zSBV9s$EjapH1avtdzFlaE-KbX-_CG4UY`-^z7W5hyaE)#ynqu$(|8|mW_J#B6)jMK zLb0f|_>D@p2n!R|haaYF2F`Bs8s{-c8=nfKu>Q$qzVr08ec4~%-HsX5Oj(IRN}$vu zdpsqsbXhLCWgF7i0R57Ba6+ij_8u^qy^6Y5rZm^w40>35psUW!{!Zp&%f-Tq!ocZY zqpL$@O^oDr)dyzXa#h@af=Sa#N?-Onfai!d#Ov|g5tn* z7HzGxhr=zvgh(7BC&nvZfi;f}>{vQ}_L|ncJ?cfDM-B%t0j=<0)O~@5z&82-Yuajk z3{c4_EQbj1X*~Y*(T?`@U}*r%VCt|M9X^p0GrZ44Y(;tYUltUdcK(`PDcb)FlL7V9 z&t4Gb%-@U0h zo{l8~6NU?zAYF^NS_PxsQ>VS@{mb947gQRF78yxkEWFXZ!}*=i)5R8c!?VoC=9=HP ztQbWIk@IJgd@vtDpx#l+5fZcFIss4fZo_o@G7vG4iooSx!WeY7TY3$54*y=3d=nX; z2TPl8JL5rK>Ryw?1DN~{z7#6=r|FP(Xfr1Ut6`)47=}uBWr9Pa&kkDUk{gx;-NFTz zjlD=c1}h0sh-==O(}|ojtt(E>zLU%a~ID%fGC^N#`V6l|f+5&c7qcR$Ys(o^z&E&RlZPArYnj zbpNr_V{J|2rE@Kn$E-$zK4VO0ip<=GuNM=HY=s|?MCpEiTml$Gne!+bc>{Czbs5G+wrs|-)jMd32s+}jua15nnup#1rBB9X?A zH8A+wH56;YV*H3}X9|7}mUGHkg_!G}-J8`~Xmw-je*keTclF3x=>X(u-6e={GVL35 z>#_#5FJ9DFot+8e~HZ@ zSi>cq9l^Kc6kFh08KmpkG72_a)|hAr{EjVfJG0n4T0}j)a2W3Utf4L3#aC zcU@rfrzLp%5W}Wc>vPr=4S;8yGt3uS@VwR_;28M#buC^Jk-v$9r*}1P;|8$9D3E*5 zxPw_Mw97H7lLmX_w3%zD73g&XXLXHOY_)|zY}{fqp@aHZUP?H-vi00-}KL4X@;%IP9f$RH`9Uyp?iBYh8T}n zP>=>xC@ubt`R&~D#PRE$1Ffj#d&B|6OtDsn;K$4MU~z@dH?MDu&J>)_#CBz%_#l}H z*2YUC@Mzc;oirkEcqw;#2PWGXv+Qox#oC9Ojo)>J9w=N?f_=oyp;{m4W)d@lEdR8v zyxX(Xo|~ULkpd}S`Eoj6K4=LNU6y+m(51Ot4LwLL9|`8Hw|3Tc&r{RMuRCLo{J~2I z`?^cFZml@UAq?VKbLOo-@i1tZ#aZLW(E?)+~{ULN*8 zK)nSjXv7DKY=wjU2aK_Hh@5s__oH}690B&2_&56f^cS9wWD2pBu6Ay70Jb46c)6Ym zFNb_K%lWA1q_^$y=uWQ($u(NCwks>+Q-#G~Z zdwN$Nl1eWgN^Cx__qFms1Q>y&$zN5z2k?p{R$NmqqaIXyovrMGjOV%!%f~nRA%v4i7Rj;8fEk*3%@)vXsoH}WqOYGtg z>qA`#EWu5y@aZFV(1| z{VAsc0eQZTe2*^PbspMkQ_=TPB|GbKB>drSQ~21}m}`O~Dx&rR>S1UTlnE>Z95BBD z_P@WC1Bb-=%pqM0D}Nycs;X$HUaBb2FYjWSZqVya!+*~d%#dj0N~y$*R!3QCgGre> zPswL0<8Su_S+vt$h)?;wIqzeoD-liRQ{o(DI1`R05hvwIV*uP{($y*{Naugbr+>pW zv&%L8#3OrZ0YExjrN;X^sy4!b)w5R%Kp$5`zi0Qgr;PjqZF7%(JR7~Oa!)eVG*x0r zs)E94pGgzE``tTjzUZ`~9r4NT{LG?dd)=rhrs+rrefp*^>T)juMQ1K2-*rCwdosM& z1JD%2^L!#DVHY=SB#vMJTqNpx+o z1kZ%DSj3CMVC)^s1n~~*e>OJ0wr{{tqfcoa&}EW6q+1}>VB(qZ`@eF)5}4`&5%6PM zBU5v-7}SBa)W=PlYcyFiEr`~>$fB<_w7UeoF^Pfg zrJpV?Bb8{k?@dj}TjB@n+9pBRm8!q{pp_5J%?6i{0+vJhUEsSoa`&!1+u*M2)vF!y{%r<$Aw20qrO z{1{VS{^QNioiUyt!4N>-M-M9-`8sV=?fSgY&$@;Jt*t%&B5Ol?Y(GOoSkC64l?_2t&|E%0Tml+JNTh6Qb@YAKN4M;g`*9C@JBAj4**(s?)lWPi`9zbXcCjmS8BU&A68Sn zq`I)qQMXr$=_3QANQb^y2VA{O_aZ6yaGxgc?JWwb+R)M0`k^v!zUi55NB;VqMJ=c3 zPQvy56;FvXZyDulji5Hb?lgeinz@a7Om(+(EiQFZl7#9$m*(eh;^JAk+ppb=)>ZWM zNgua!lV~*_<=!q?aidiR{4yE~{k&tD{;b@C7a`Vbew$T!m^t^D$Q0+xb^hx^QaQQAU*q#{iXTus7j@E zd8N#l)0?FF(<@$Vjo z9mPUh)njr$LpzWD3YpHe@H=00se6ygi>{80v_^@KC3y(fr@EXB+}cDFdb%cL6Rq@KiSExn=}Rg$}RNFcVxV(L?fjOW(m@hV;e zpUzh~KI;nzGU}>)FOmv>J-{bJLb>rl^!=R5JL?58#-3Qx-Z#4?+390-VW#tLb*UY9 z6G(3v2YeIFbZ+aEVx!=AfL07s8A(x1+3d_i z)ekgUUv$Tp^&Ax`Ym$RA_*J;nUw&fP-pyo*0P-%=)BtF7Zeavgov15Gou;DCp0bS1 zuo_5>4(*FZk+R`}K2sOT{`lhM^ws2+NouCRhx4RYz0XSOq^wbb5w>@X>Ggjz--@Pq zew&l3n^g31s2C}gy+3zbDA)LHQNREo6unU?q7Mv>AO{$SsufKQ{TrhuYc}P7S6QIL zS52+N8k0&n(K?vhbH2)iy{p;$#SPGJWiYQeBNL~iCQh!u=37Vlt@v?bS>c`@QNeSE zoHbgW?16tT*77ePDX`8AX-KNE_sUp*#;|zgwTSda8J#G(d&!pN$h~Dji=r?R?UQc6 z{qi^cscC{P!#YZ$A`E3`qtCm^YKAD2j~Wcw-otMNSr+LGkpb)@3*qG?c{Or#yU8Na z&tm9`=%|OfjrcF9(H-SkZ<61PX{eFitdXjHJNNGS@xI!9m}5SvAN!ndTK604`vKFi ztdGu-$M-!;3SEVu>YfDK_m@`Wc^|#X$(vtJn^kwXeYg;*irdw{N9|CQF7Qi-!<1=r zW@CX-dyjDi@QdEnF?_<2Qs>h8t`XoOTSo=nYH6h2^yVT~M+CS4dMSpqkbpOs$Ni6=upHI1B3#MECsnzfFXpY=}NKLV8` zyH1vMcQ;jAqbPTZ-mPHc0zv&B$K`$5qG(#ft(-^Nw8am7F`nLDPLKac6bV+^+GrOo zDSg?OEQNA$CVIt+PA{RC-yCRHYr~&5Mg*PTzxqR*urg_Uik2e;0A{F6KUXBI)!HRd+8KaujuFAm;( z)R^R4wwEoDe$OExHP>;~v#oS{uHj7`A8lRnu>kc)Yno4)rDoz)9Tc)3zL zFss}nMY7S?2VZCb{gZ1R_mni(ae+#j&d8@*>LYKK0N-hz*p$a<#IB5Z+-O$rM*W;Zd8~xp~8Lc(+(R)tLHr_C#_`plsSCbqH*8Z5bE$Oe` z9@QNcbCM5E6b2sb_MNK2;c%$-HC zc@ie{A7B+C`}F|L-;QHn>UDu6HrIe#%(o{NT#xVs)h}Dftj&odpKyYw+|s0LIL-X_ z(Ovg@iTT6x)z1&|QGR||h~X0zK^DKDm8^81Ly#}bi*PR6+X{ztLY$ikMhTmE2rX}m zY;5c{K|2KXDAygXrQL+fkBRSyiD#m`Ud-G{*uSV620 ztVu*gqGr)K+KoS)nk7kvqPX`Ju+zZwAFs(~D;qVZ?a-kgZuXw}BDNM}ZYnO3s2P6x z@LS2Vc`uOAY6e8ed#owy2Qht?Av)p0`Q=cs3yfa@FGE3=8}OB|4R{P{l>4sTAK7s@ z%V+5w%7?C?>&Y4cI8Cd>5594s#ur_wkG!$I=S0&BXXi=B^^QA)%pQpjIIeTuz!jvS zaB0W~KwY-5Iwag>sh3@Mw{P%+r+gG>$z0RwU(oi-u}oyE&`bqp;Z#~X^FIK6UO)29 z%?`%$Fau6-2)DFZl0U#4dgPif@%7pv2`cNiA1m3|b=co;1MQWXx@ua2ada25_y1?; zEW?^?!!SHT6r@Dylu(cs0RbsNI;3Nyl*C5oNQ00D=~U^?4H%_#Bh7*okk}?5Lm2RV z`?3G~@xIS-zt4SL=ZT04_MW1X_Kq1-+9z_jS8|2otWYc{CwUo5#ObrU3}*d zI%TM_14dZW_4YQ#g6wFj>z}T4%p%;_FgP$KH26<(^4so^U&5~zycBP;4+x)4JY1}m zG06^S;Plkyd4ceY94-RrW+n@wA-*qYw@36oF8)K*hy-L2Y-NJILWH(0J6BW=%05dgH8 z*ZREFH$u+66`$u4LI#Qjq#7Xc1zz z&9mW{e=VrHpOj7e-!J+yWkGpsfen?V9E`2at4Cmw+OI%I7p>2kug6tpFC8@X zz+0WJ!8<+vA5WjlLVMJ5iAF zs}oc4^m-EJrxa0t?pl$3#iYN44*O&g47#ZKI+5h#R>!q=eF3?P2z0)za1fu-ul?nxcVB!K{)-^;I=d zwLb9j9*?e)b=%SlpRxHt_dM0G#?jE|iE)y$VWW>McR)W_7rH7FSa zXl}T_kjxw|Icdb!PxCdw6w3#(#AB<|uhI=!z|OS83A;iMwP8O3O;Gx!4tlxE*>YjE z(s~|t)4_6VS>x*?2c9_C%_I_U_$DaTdlmX6q*&MmhWhfl0ZD+nzN$Cq54wU-%Sg-OB6EbI3sk_qqBr{&G^jrw<5 zPaPUf873)bPliqNjINa!?{hvf;LP{zGyYxBinS_9`I(rbl~&<*>LNiyk}O~{Qu_Q! zrWMzAZ2pJQ^Yem;_Qd6LU>0%(xdM;!4ch(ybDjF^32RhbN_2Nc00nXjn~JQ*XQxiB zel6cDLvotV-Jsy$oZAB@;of8&yP;xIacF<0?1^)Vkz^ES$DWK#dTu3WPY>vt(`P#R z8Neqi>!gwwDmfrLOp{!zR^eF4ylDH#^%ga6{FTIury8~~PtI;7rRm=>dK9glrJTYo z9VcQ8a5B$lbva3Yn(ukn=089!v-y^lu0UK@XhArg_eo*V$WMZPIbqV~Gu385twgm_ zFo4A5dC?%o(u&hU3cD3PaokcVPlo;3jPrjroV&y6np>%m2wH+FUt>n$BoArarOy$6J-4Oyj1 z=b*KbG^FL$^Io>K4TK_cJP7?86)dm-?X5%I%%zh({0Q+ItQ`IK$L@tb)H8yh*aKr9 zix6iZ#f zDHIHA{!i@^L+RZusS#7UY$~tHDGRqZKg8u_bXPbXQW;xDAz7z=^kxemA`c=mSm($G zo^VQ*&C>JdUj&92&QRMpoItLs&N1~lZ5D(_6YsnC3P8>6&^xXEzCC>oJSO%gFV%Ng zmpO_|5hd;~YnNN?7m%*mz*^t!Eal0;9{9?CfIm^lwGqs)4>E^RPLY7qA*%rdn~MRvo?%(u;dEnKfQ!~0t+NvP)DEU7CXH+hP>6G_-=fJ6QC;V+dYhdkmoc9I9n>err5^E)XaVI7G}4!<^CtnXzTBllAFm&FWdm0h0%{{+zQZiglrzkhAXBc)_w;? z;`~&8j+{XH@Lbv&=`#51$Y7 zBn96jiJ{SgST5jhsFQ+4P*yVBDd|^Wpod7u8yX~1IdmPug-Fz$_Oq%bq z`>cg-uaelY2piKiC1QaVW{VyoXdfvvi;fcZup=Hp^`~G}JM;=p1lM_(4>-Hk3^Qg) zuXw+maFDqJ6#C(PCRu9=o-st7&%2Fyh19Ye2q(gR`*tgHkN9!~rjuAW4S5~;!WFb? z|JJM`-_La%)Q1{tK&Hpqij|()(9;hBc81u9<;#QNO`Z%DInyL5Qmuu}l(cA#B7LjZ z+72pdl)t5(1JW{x2xXozkXig<#nXw44fa;=yaVQnik6pf(&0M~th zGxdd$cI-9Jz0>c-B!d@7LiJwX#q)@3Lc}Ul9`29b@+vCWUfe|o)h5f%9$A6vX<|dz zckFwG#>`Y$?(`I$XF2Upaw;I?mouI!tj zTZbq&w(R&^q!RwnJ;D6%FSjI_w?!EEjp6q3lYR5TcAuP)!Qyg3a(9u3@x1Dk33QMA zQ%5)-v85&eNCg5so<0Fk2aa($Y5id#(^Gs&qSulvU&=Vg*sV|NJfoulklV(3qSiL? zmB?p13NmZc#01AVU0~3jTTu3TdQ&h^x3ENU)Vj5!C)gYG6W6fp${L@~l25IVuF1;K zH#{&iMdsLWQbJ+AK?I<}L;|4}=*e{MI`_7X(B4wg>1fPoupyK6Zwq0Pd?!Sp)c?+! zZ{d&wt4;iZ`4frvXZ)p=pR-Rgrm5XC%P2a$_?={DqUYs$=h+mfs5kek>n z!o8!!V)S(<#O;T-XmX#xly8p0NVW=PPgE%Cyd=tX=ai~GXn1*^VOT@$-u!%aYWIB5 z!8lXvzx+O2#qjBxVQA!Z@7%xZ?{IIFp+6>g8RCV>&O~x{cD6ymIBgmxW)KYBLGGR< zmCgKmXReU_I$_1oyTEU%mo2FHmyIqH3W137bZP&KhY0I>eMKTbMnQ00Px{_`%eHh@ z>VW0((!^_!DEZGan#Y6cMLN@Z*?HuyPIQBlUPx~ILao{z(lWrDUs*`Vh5^0ETTXb+ zQ4{>l^&#`U4^QD%zE5icfe%YbtUtYRoaP8&oZPybDme=CKVHXht`GgO-5>1w4Ic{5 zp&UBb7{Z8ZDMZ?XIwv;N-_%cdbRpVX{@7PP)5+eeb;noy@s;he-%dPYUIQ-6(QXsM zwh8RTJq;UJakq;ioCB6(v$tr3U_OTRWfm9aR5L4Wk(}zB3&7i{@24Jz$O|t8J~8q1 z>&Z4wu_vCYpK!iCu&&?|_w}gAy&zA^K-7_f@LGKl@c~CV+2dt`Wo?|WcpRwEU5ud3 zV<2}p9|+O6cM7%7(Xo2g&8}SGqHpf5nb}#B zbDFzrm2Zw61?MUAmRn1HDI=6FaS^F)N(XrRjuH?T#xI!Jtp!sO(ownfFVZPpB6;Na z#kN&5coEuaq+`1R&A!_2&!_8Q&T6dYj{j zl6RV*QyX^4PVf0A2j9hj{3Uwt)D8ek8m>;;DF}q=@zeIu!0iEQeTR6(|DtM(RlCR<8ztfji6x9;N*`MZ39J^>o|T<#hsr% zm}#7M&`D;kLA%3GRhDt$+t+7n67~KnPJhB^3TQaEO?ygoByf8b{p=tHQozJ|i9ZB5 zZKDAR?}I7M^lsHhUZBD(?k9Jj2Wh*`B?xvoHq(7Wx}V4bqrj*37r%MCwRu21gK=unV^6;3DO@S`wUV-8~SyS0PM z!h1aUKR~1<9C4kA=yu(d4aZ4OoQwx4_&TK`rLeTi;N=PCCuGk^q*#E{6QF73*=3I) zSXR`S=ZY6yGtn^!CfvrOF>X*)G8BeV;G%)Qhu70Q#$RuuW#fdVK-jKOoZU+MV)LVb z4@rv2U2~asLabO@dtbcvWZy5AJ~+2u$(tyTBv9l)SI;DZ@E)zxSZ&BYjGOmtMcQc# z?h_O%cA|a!%OBr1dgY1v`5$0WIrG^{;HiR3`~4&X!@!2bM`!CAa|mQ@n7OGD$hzqk zTq{xk?*7-L7JA8gQxTUuML)SO$fv4|qb9s%Rrh!}nqPvK&+CG~?Q*HiKNnmZHq ze)$gfqvChk9Ri}?uy&2jXw6?b4Q{+y5E|X*iFN16mxw8LrY(}V13m4|YIq#C6RNxX z%zDL_P&5Efqr-z*OC)CuRsa3{K^!cK@!@}n;4~!j^(g^QXd=A(RUZcD8s5%qA{d68 zEcHd9I6k7G$MZgqW;;ETwpp4O0?^zXK7aSY-ax-qZ|h@lg;kaZ}XF_34a%M4vH*W431s8iP1GLg2Lc-2Hpa zzR4+E2@+I;k@hX3abYI~vP3@GcAr8jO3dJ9cLIn4chnc{ZvF%2uy!w-6U9zpC;6mc zr;=~_Ue(*hr?nCF%(TkQhkosSCUdv>nHd3(E%bihj+@}Lx+rX=eV*}Rkc$3Ibf`ma z={RuvgIW>SN1)>Y@=+J~8xyaTFRx#;)Id!RotjQP`->lhNc8nkP>J+8%@2q@G7@>7 z>WW`R(S;|Ecm~T#j|Qy=BGyjr+joo4nI}LpgrfTE?5(B!m)0GLWuI7{jraMr?be%o zg=@dv3OMEsh1pA^&83ao7N+8QxQ+>D*h==JU=T6yMPMC;c+VW${=}X85pCkdfgRIp z?cYMb}*_jonJha1A5V<08{cjM_=e zLJ<-tuR9_deZ@2daCBXqJtMeGur4t#=>{7GfpP2e#(;KD?`ovEV{b&zT_N z+Y3t4_iiJl(B}hJdDknDou1W}KipuY)u0^Yx~t;I+0hDiIuIDKrrhTK1fCdVl=b(! zzH{IRqX`sKZ}sbQ$3go)d#Qk;Amb9{`%8YVrA1QIcPaTP=gKJ4ZH|{WzuYp-7Sql( zQe|jntmk)G2IPiHIPp)?#w3uYmt^-ys0>yuTHe)Qb5P~~lK$toA0E?eZkA9JQ^n$5 z{f@GVJWW~f$Hzwc>@zV117O;!1gPTF*KrhZH`w;Uq(*7k!zCedhlx7ibH-YrN86RY z3)Z5QYXq{`(l-JbI;w2%{e?M~Swj=9XI2XzZD%Kb_BPB%f<*lAHblrl|2uM*q+oe) ziSH@c%-_e8?pWh9dJSm=bNw7t>>u3t&w?Pf8;qNVC`>}u@ja-n;h2RJT3|dgbXW2LYpl`Uknk})a+=(4?2DJFO6vAo;|HN7ClFE2( zr~+5(f#2`zz?~Zm;FK0{cH%x?=fH5c;;qnMf1_#38o9fOJJk*~Mzj2J!*sg*RZ zZ~E(U`gu#lFNhZTc^is~MeIO{FLEXVfjYtgJHpqXb7xRhj7k{$_xs5f!-bSVnpHJtATr_Iux&q(YiQ~bpo#E~V8{-E$ z6-rXf_)@oJa$c^fJJe0Nn`()S)VeFIBC~25#4WCQjB7PA4JL_FyaOziO)r?qFMN4< zs;($lj1y3I=)vKgje46fSD})W&K&W~oVqcf?9xG4((gh4LTxdtkoI;|xPLu*Z7(>= zhqcEk5XGJh9ZM~27;p;4v-6+mRl_`uOtQb~`}Uaf6O7tH&fPT-njYe%v?;ReLxdK~ zkGPk8#t-ZTUk}I9NdC0G9&O!t9PF`YQcm#qy44ikx+DMc`k^X`76S+6bZ+2fW|;T~ zXN11Mmlk}@n!QLyXGj`5)0e*MwTh<5 zs-t8u-1Qlp=;@RgcE9yG;a*xv!UTQ3r(!wpRy5D;!RQ|y?fq!8 zEoN9;oWk-u|LeBEr|JfFHZq$cw@DL+v_Agk zlVp4_mC&DIO?M_|f%Akaj^pgxOF|*`h&Ka0oyBu&AQ>62+t>J0hXH%Z=Izxx0qfw9 zg%0Sq11C-&**G(X*+r89pU?~Z_wz+)T=YH)Zd z&Uu~oDKP;(W{C!IiecqMkL*3MYxOPRv#%s7Fp&u4NmtdNkReh1T5-*QLe+l$8ls7X z7`3!|3{QANo83h*^_DGgPnp<6nffs8eStLEk7lrYqVOdZMTZn+wJ}ZjR-+PRGIKsL5G1b{l%%F9S7sN@>ZVw;U_TABJ6>_gL$L;yxM}n z0=9P@7kN7wo3gwEeX&P5afC-=N`!{iVVx`M>;+7X_dL#^AZwaYWe)bNfL24ve@zW( z&b6XurI}A3|Dv9A`setPhE#`CH6whMd{S%ft^fW!H5GYuKpWfZywX20_Eb)CaXbtk z$;U`P-2ul6dL9q7MZbDm3jjP47I~#-@Y28%#9!_Kfabmr6EzSpz)B*r82$4Ke_ad+L&}kRXLUotP<1NWGn4X zU#Y1fDG?Bp9XKRyH4!_$@S%n&M&|OSpO(YEib()e&H1x^+Da(_ji^a z@AW*C9L>13IeB(lbsV)+{!r0C$!u7K?k^kU{VU|qysb!3#3=g^{L#HfxO3oC9%lLv z7CoZa?-i8v9WR4jRSgWjGs>8Z99-1<_vsBRBhcP`GwL-GsRKd;ysB0G^ou2xTe4*K zg=ett=lhl7a;>M~~f zFAQW)(pttf3+8Vd@v|IX(05FoR!$|%K7C?C{U1PAos@;DDT8JIH|1gR z9IUwIF^AB9N^M=C#lUYI`7FtVWEe`FrtkDH?O(|P<+Kl=OWRocQ#6HfFVCl$6ab}Y zLz88ROkj0F3};xl6Lo=14Pv3VMv$Q_q28_D)&0SM9J*jZ?rud3t&{waTR8;@?K6p( zw9}}?<9ka!ADA)#Pe~;1JOxm=sviH_$OC*z)|9xzSVmT8F+#rG?Z{NFPOqU+p=U0r z@`FT;EuCJ4?2+VbM%Y;Yi0E6vyvHx%XT<-`?8ScN_98!iP{*2K_*$J+iLY*xoE%V2 zDfMr}@?wM4YF9g{mo$py$30c|N9ro^(dx7Rs3l?+Z)qtSs8f!A(6n}oeZ5U}_Vm`B zPh^|RfCp&JGl^TRe;iasJ)Q#|QmOK5NlQzzdXRqp9r+xf`0}wp48YB1^mRSpb|G0J0$H$JBCXLD@PcVjBqof-i*$p|I5|1%>nZRHz8e zfDM4mklL)#!u%jdYI|6+Kg;F>VYkePTnU>%6txZnxq*UkZ}HflGKzhOZdrEZmC{d; zXro%n7Bm|Q@!hYQWu059NLtBUX0bMHFJs$5KGN2>bX6snc=jNZ@zaK1Ws-KIfX){X z&nwN`_qAf3b3SugW7qmV^mE0WQ3s?d6Z-@F0Lo8$3@-$!M{nddJ(^f=WmifnkE&ix zKX|xm_I5b`9Z&v0%DS8C%O-d{OR_TqkG{X;TxrtYX5uV~3oAg-`F#TADH zBl$E|tutu+t15@3k}4Smedf{=Ke3Qm8_qvd0;uatGQqAz?&wt#kM6v(1acE)YRhkm zgC-87&OcQ?MK<31b9}Lxq1opplD>N@EP*E}W?#FIqQK|RgunIeheaguRTma79;1Ne z5AokAFnLxqqPbf4`=UbW;3rO zd`Hzp2+2vArJ+oE?mT2!v;l|5--Y)C6ok!1&zL|nTn^DHPOque06cm0o+XYq;`Jfh0cd`BuB4eBWw)rlcZI;MLB1TesY(CzI*CLX#nt@f$-vmoSf#sV$8&$`jF+Xap%%| zS{90K$m?ek;MQN!)J+S5+Di9g%Uww08s6J1vw8c#^En|9nRBY4ySJFwD2=RJIQh3r zsu2V@$ih~~yv9RX1ZDpHVdmuUTu!@5R?{vs<~)^q4P!!F5E zg|vQGKfPY`z)An6L(c9(CyYy6BFkA=f>CFb*Sf_t$9v#zUaiUkjNS$WvYO?2MFVaH zsqo~pv1K#~Zzks4`@%8zr{nw6rP(J1YBpqPWJdlJs-)y@dh+ErFVXXM^2`v0*UUHT zRW(h36IFUakHJDEPalW+NULS#WwEhq=zr0uOwGzv);Z8UiymJ!S!>F^?J-ikr#R9lzLBH@F&@(x;Vc z^K%Qj$83b9+elW-r*J5DilN)ds;x8L@P3Guq}Lpw(8)XIr?0BrQF4Cr#8WO>Uh*F6 zSbtXCqIsz^%7Tqp3NAR%*uo{N@~WdO4DKd73lhr|`o-!`%2fa)d3pR~+Psg1)i&P&{myvr8}%m! zZNPlZ{?^xiv{(!_RjnQWlAHDw_;C3Fajs~mnYeV?4V~{gQrtr=_m%i^rmhwLK0o*L zDPFP0fazKx7RVd#U?lUu!|>vMKf^VJ38bs|WFIzO*RijyH;;zDUtTGv(iC+dpGRc7 zJu`b-YoEj9wg^6ZfJW|j1=U*Ec>>MX-GT#H9^x%J;CrYW6U-^9*xpa^Cq5JQT-m25 ziST(-JaVS%!r*Qoyc5P@5x4@)E(nFV29=8+IDxmcr7K=k3|;I;EZ);HgmRy4U(-g` zgI{@eWURH0L|wKna@}?x2gz`N=X2JI?K6?S1PD7;Ki%XU_)!Ihy`;SJ^=xR7^qqT3 z#P#^vsh&v_65Nubyf{pqOwXJ9geULNdhfG=1a5;y?S0Ah`MG~A9@!3q$tu)$;lwdm zq<$;-Rsr@PV<~988fQ^C_rjOXw<^GRUWNcN_mpCFZ93}Rzz1V9k+GP=tH^oJDbX0% z`tgfI5VB+yY^H8Bs= zinYA>hPoL!RAlxed=Hbr-m}D{N|6(KMxw) zZmtOK=c22?60e@s?T+%jPSKvJO5q=V^&qbkEz6!B-2EU4<0nWI?%VM`nX#t^$QmO5%&KU zbkHT&E?2(X`saBUHdSNsItgpmzfe`Pq){QFNUFt56@Ofz46LvA@HeZ}9OBLc8~^on zp$&Lcf%6SpEIk;j^n16>s4koLBmM5*W`MeSl9<_4(uQ!*RsFMh*}mpJAKTL-Zy&Kk zXmCz&_@nL6#sUn@Sc+6QYhI%rvic(uyy_n~nZUrr#&n<$uftoUs< zVuILiylFskm=ZOiX9NLUsuN@nDMLtYlf~!w6Q|tWf4a+yowUqBuL}ww<5aN9M`qDf z&Q80^_IRA_Z(H5f_4-~!NSkBBZER%b!S&;sBhjfuu@K`*q4R=jZWV!mtU3x&DIQnN z&t$1~%eIE%=7(P-SvXP}N~a=ykB4+N0?ft>wYH*H^_;b&OBSV6Z#pPzTYbhJnnsg9 znKLMnWDWQ?r|(N^9vJcQv$@(udD2LZ$oqS|QGb4<$}mYkc$`9RT+Z=hpWHB?3YwpB zTSfj&)9&+RL7H^Cm6A&HZj+l+^iX}ktSbL5{<&t9VJg_K{95SRSp>pzrIakQEK3qA6Eo=e7ARE%c>@6Sr! z{0Ddx*!#ZEF14{}#t`IjQ+%2sTL9Kf?L|dBZ0l)WyL~s<@A80`uLO%w&q}Dd+mlL;qQ^`w+vqOdC0)eR>q_?k! z-UE2)MOOTw+A`O7Ok==hWxM=!Z{HkD6y{+iOH*xv3h6Wdi%ng;^bD{CqrIEG+Fvv|Va7_2z5)2F5%4 z|2>#DmftKd{3D5~6WVwRuUJJRu+V~9xaiGHfEXs&+*>hm$@|NREdph1YjaOaAY9|A z{){Y>PLlNd*+z%R-}vkPpkg$nl4kt5Z7Mq&lB(`?5g0&KAf`=){Cke85-aTj7rOP$ z&xa*1K2E9#rA=)>?VlU_74uHSyd}gDG!WqBz_qnykO=02cNrF*147Qq6h?b1E^kx) z0G+?`tO&4?BIk%?#-(mYq%_+%{tX;kgvr!cf`a%C?6=l;ZL#nDiqo;|@V{b=-g1r3 zGmg7wNRI4f|IX&_mEM_%7C%{_J{ra>+S6is(C%xR4OKUOS{Q!37+`Ct-v=(Jss*+! zzEC~ed$shp_}lz)&AvGB$X3Ta`v=Ci2>o6F{=t?!R{TlX{)4;Z7j8Q#9!kJRe=~c~ z(xW$O*85L3VPnHw?nrHu#jao{Az|P z41por=k`uf0yuMIWXU0z?KMn+Pup!GYV1G2kHGc4vl)=Mk}WjjVoQ>9*!%o39`pn9 zrEQ&%h`H}2!@1MZ92^Q?#n7~GLDE_dI!5uMFxVPejcwRVejCG0?1}SX12}q=jSo9# z?Re)U;He+3(MM)|o+n0_z%#IkQ5GVVN4C&HsNefSiMc~YwxifB6=jP6Lm`WBFs5Kh zj9k3@C-=?9m(=GJ?IUxX%(nAq1jd6fh%jc==lvgW-zfU5AO8=WEgHHNbRTw^x z#W|jFB|`!gp9Jl@287&u=n$X_AYlV=$o9e2euDIYz#MY^YVTu|QO z3?eBrcc(EX$s~QNQbu(}Azd3@-J@ZYK&7qZE?-SUafeSLEMN#Q4|EVPHGk!{U1Vs# zo%F>Ft_X0a&rm7iS7Yn1n_YfBtXyj7&UMcE=5)22;0!^!auu{Z^mJf*B4_+vwT{Z* z`T4cf*YyM8MJ&h|tsl_$B#RTHU2`Cty}oJ=Lxex(jtPXmTj6PPttufoIeyG#kT~At z60<({z*vg4olZNS-e=aVon23kc48^Q4C_mua(^DRFQtsVc&0gT`j>OQvv z%KRf64gYEK=YE=!1npC;Bg`hw6hj`Mo;IFIZ?dv@B?;#^0NemZik?(`_dF zs#=m7oR7p2gpf){f9jil)d5#ef)?$Qc8^Ngd*x5!&*&SnyYsD~xxXX7aW!JaJuibh zx-?-6L@r6U#eSP>xM3*Xt@qjl5djJg62r_Zgw~2bPAUEc0j?`8_^luHY&JVK5s%kG zS%p?%|CC*j=&(%j)K;L?x@oaO9_s~ua%Pk10WDXW!FuY(V@2 zan1PYg+OLTgRqxpa8!=BcOn#Ntl!+RZJD=%tG5=2C)3Scpd9Ij0M~kgO9P+n5C`8# z4_LC{SX8=lVg&bEgea^l&^Fbq#@9Kgp!3Hz@vg|b7XdLmx55xWFy7(Ac@14)2DIM4 zr*rJV!cBR*Z`dGQ?|ymzero-7!c{{1lmUDmX4>QV0YUDpa*bN#!vU20M?Jsj4p5ujQZU) zT&3sNq)WA5t#y{S)#lxmc>`;M@^moMwK+r&hRggo$VOvv7sR*dKN!D^S)mlOPZ zb}k13vg<1PhTlAonSq!nBsEUwr?7Q)^-~??B=o z;FbAZ5ox_lmBD)ww_XW7mnx;C8h@+$nzD|Cm*?u+>5uIEqcqMsm74yUaR;hfzr%ec zI&V}+Zu1&^CC@#*LmpG3o@D=<%$Fyc`pz+pVTvY2-W$fxEyE?^*?P%pBa@UOT7y%- z6eW^(Q`0^#?0tO|*6!!6U@mCIqnt74KwESh9K2J(zMl(cmi* zGyV_eJlLQQq#Bt|_5|;xmP8P)+=x3(*qObGc|aZ%75pb<`VN8nAMB#QZAng%8)eXT z$nY`f7(A0VEQ22fu@Ay)^`RCWW{d42^+N#SzTh3LGEJN|5~U9ovReM5lmyK7fW!3_ zVR^PigN*3A!41+F=Y}#f7gyJ40M%!STWXP2gL(%i^40}2*XB9n0ZN)G(U{Gm9 z0ilywtMQy>tWqXE?u1VB@R{vnn?u-=K;0%@GvQeLMEUqO5Q9NpmXr&FFFip&j1P+? zg7&KFJ_EkJ+f4hJq&26$ytB+*y*!!Ko|-y)CA75ITHae;rF*SemIinvubNjcY1ka2 zlKn<&Qjj#7tIsrl!_4eQIs-}h?au}pWmj$ktec%%fP-W?CgpK;SkA-56h5YRQt1Y* zkIVilPfJ8szfrCG<*ueSC-2~{7^6-_YAw-YP!1lB99MnQ zrP_t1XUA`!J^M0f{wCxOk5*bZ->_R%QnRSs2>oIbN`y2`BTvrNP-kA`?dO9Q$reZ5 z?@vh%R8uMUzff0DqppSMHpWnP5cx%NJkE zSktc@Tva3_I@$=NEb8j+fcKBuo<2?b5LE$SQe}+3&xl;$$dDxFuIK|bn9 zVe_~8P`4zyGuoF6xit64jw_rh1cZUA&Q_0QF37k%EG)JY9C#+*k>8UmNh2#IcX=;K zry>+TP6CK|6n&?PKQR3{qV@h@X|(bOx{Jx#Ef7s`^xnj;r#JS;HY%x{x-ALZx(6c7 zk1g+0yo=SGmfT9Xdk)Zg;!&EcsabXF4*!B6pGYM&PZ)YC44bxTX1PzTQ`ka&aFXFb zBwg@dW?S$gk`f(0g$AU?I(#ZLZLkU}(BogxnYvXlzFBsQissf^wwEdIK1@r&Z8G9Y z(Lcyz>a}9s9LBq%OU;ZV`on$p|Ndf+`5ss@@g?um&ruT7*Q{2@QZbt{E~dyoBy1;4 z%#2#EVoD9t$;^w4c4JBsel-3vTNU7tQvwOS9IsPhQ=RjBr*jihuzxB=xk^f3w)EMOpcW2z5|$_#SVT2#ANdqzgo;{=a&M#Vp@2`YDx@wd zbk(nK;v2KW-D6Rd)!G8NY|Ni+&F3Dpd{F0q>u&RR@KvN6px!)Pz#1&9mZ3-VXvELy zQWps3Z~iF;AmcZSgbSkk;LD9-s0_nFo`pL)j63|}4jbQrm<_{6F8 zfuUYDS|_^)D49e)0o8k7(#CJ zCr4@*H(L=%q6veq#bV%=M@K)eLbX!#cgeJ*KFDO09Xq)o zZCh-Fvq0oy6rQ&X^!S$n>Ovc`ew(k{0(q)Q8i02B+K;Ra8d~%E?}|~>%l-XMM`qJZ`ux&Our&n>lS52zNpmzKNLFz5azK%SZWO z(B^%|8_oDHK(#f!5ZK@St#;I~4FQw~HL34jG@<_g3Wi22Z>d2*7)e zm0dYt?LGekOr#>?BEpzL4U7oEp&>jF;Icv>Gi@4eQNJlIWjs+)!5%RlwU89KShFq@ zsmuq5Xks-HTm<#b{&U#`i4RkBn`^aO0Uc413ByBZ1#8Ra4 zDw5@q-Z^tNgjSv~d(Q5;vNm@D!-7QxCbEOs3rbPWL`w^X`0?3g&Bndpd`DU9F^e}? zzLGOPb`JCm9<^|Ccw`8b<%nv7^?d&obUFoTL|u)9;>4fZ8?Q432SYiev;BIFyg}}{ zk5rx|{n@vk_h@VIRZeIx@a}Y2?ehzgqrGm&a5r(-_IIcD-t7Ldg~83dvDQb^RA;^Z zUBNkNtO^zg&^y*-tNWHiCzWBKzVgoS0AtYxkG1o~Cohk{D_7=~P;)$z^JDV=6rF`% zQ*R%JM=Ame5)#rSAf3`EBHi6mBiv{ZMx%5iT`CRIumK}PQd&~j1_A;S8zmbs;rH%6 z|H1j3^Eu~vzR!JMS2OddRi{hp78c;B)>5c8_Xs<0A+?VP<3`}Q&GRV)WI zPZntE$ZEc-2PyW1;W0sV3OP;C|pG4J! z&a3-aKbl;sZYlW^c>nJC(?)}Pgh33UnlNUC_s2xeU>>X;L&KXXrUpLsz7AYXt22w} z>K5@tZ`?EbB0Z%kv9Z(n4DxbeI_y2XW9dy<6uWZQ=BM!u@56Bf{tY&GMFKQ)umQC0 z$O!$p9+A0@adgh_yc$jGAXO&p0;U@4m%2S8PdsJ78z4RdpCRm`YFOXIPl)}uQvq)T zGCvfT|MpxFyo^0=k(c)F-FS;*KdA>{8T+Im#Sv-n70acr3Nt1K-h_xXGy-}Yy=bmD zP$ib}m#qJ*>O@qeU!G#x%`6^-ZO%g3>Z8j&5jpLUyzPf454u1H4D6zMnWTVO#E z!SmlJM!kJ%d(Zr9zf;z(={K%9Jj|u#P%47-+%)_L5V#$&_PNzj^->fIhWNNz`-F&f zZp~a0nFH7<1Gxf47B0_WZwT z^^u4Tys&qU0|)B<4DQitKhUVXrxn%L9r+)Cxeb|58N9UI>At}Qp2$*YvLYszu{T(Q z@#QoU*gbc%^OnzRB)`-V3NX!MTL#0}^8tcuTv~tD1)sFaHsp&^gFC1ets*v}d_AEd ztje3KmQ=mqdjnvB|JRca`&v!a`M%>k7jEZ0)6A16a+%jx&P^S^+jjU>6gc+ zxEBCm>Jd`rS$3KtMu674d<$pia6N;7v?HUCh-0(}s;QB;YO;Y$blpng*L~3|L;^Fb zL6hvi=1!NSU09bY7|D+d34L>fW95USVlk)iVtB+1((7p&_y_lFwd2&s%#UvAibo)a zvzj8Fp}yPl!e-^}-WiM3rGHUg_$xGYQ;vNV@*TxW*4nVJdX|raq*WJd^ygc^gU2b^ zU23#wd03Rwrjtc2%0t3GTm_n*Ua@Ys6V4ftmnXB`NJ_#Z#Rs= z`;%-FRy};C!BqO2z2>nr*m838F7mUd|7yV7aMvRraMbhzSNjMU8wU6$09Dn^qmM61 zpT@~HJ(F3A9O(#zQpNnvj$~R!ER~I{oe(xy>@)qIvvhNYpvarZ4dtm$&$nRgro-*w z!VlQZO-e{(9zXsbuhRDxRvxEgaP?8!o>w77KboP<-_|1c{DMdN z`d5JXn<3j)7{a=5U_Sb4Eo>n)Bf)Gnb~^4b>;*;l>ifUHN?L&WAl_#2@Qyn7%}q z7v|&<$u@vq`|-4kt5j&S+^eO(Ybkxt%k|!Hj(m9U()-jLNI>1IrxD8`qPHs@`FP7% zIoa_406h^)U-51uD8BifVz!ZfUAtx;mltOYCZ2oam?6bjV(a8eeX4LGju#HfdnZFvEiQrxaD>jn2kI!@r|?2mHU_Lyk5A{BdF;4S8>;cYg~b?>M5rl4~FZN(Jv*XwAQ&ctrg3mxU zzdU_pk_74F^!x)S7AtjA8&_M$ z{E9)%3}Zj7Wsi=!(0z@0^GmhwY@J79nD366KenKqS>ZO{%G^>KKWJ+K>e8s2FPPAT z-xrz*r+9baNzIy1;pRb9AyMB-L$fDw>D1JuNJ5uJ{o;7Q!~gadUKu0i;Y+2u{*3U4 zeABfQ@)zOP6}{gn8dy*L-Cj~pV@B%0+xy6-!xYRR@Tq#K!G5A|G*{rdByO58Zp1aW z;U75TNf4sf2uRH&c6So7Zkw>981^6F5du}`zP>&)^kEnGZyN8}KG0^XwIXu;+}0?0 zTe}H^2vhX+HXOU)t^=VOZ0rLg2tP^HVN3=XZ!zld@w&zbg^oLlcJo3G8o9Xqm096<@0e4tWvAU@CRp&7dPm~Jv*^*Z*Lg4y%>wX-&9 z`}gF;#Mh)H`-wNCa{j-0x}ECFoTSr$&s$w8&2ptVs7UH}J2;dHlgWrJiCWmaGeTUC>NnJ(#`jz~#a(4!B}D#uj54@#sNl zNMi;FA`lW{P8f~;S^>v(?WlSOPVphWed{&KJsJLsfmxvJ-rVvw{Od&c7~C%$F3GA^CDpN7|ZCB-CTL8|GyH`;SQ4`kwpu5YNcl znO|JlJ1O~J?DguanDvs~J<}K(Eh#otSg7mQdZ9W>0=tf|((MUrD1_ZYBWuRc%QMa7V=?ILSq%CK91@CdhB*c(!(Tg~ zF(EB-c(z%7ydvk-2B>Xd0e&7p>f6b>DZmvGhM(g8MOqfy}rlR zg}0BwiA)m;?NMnB6s+*Yt`D_GjBY;ag4305Lo$+YzP7B$if&;iwi{S2Nj2urJFS2w;Yl;?nDqhd&`Yxe0o1%4VH#WdtGPf0e2u?&C^@=ED4A9UZOrf z#lTnYav7j>x!|cE@J-yKuEWjMbeN#Wd)>NCfQerkHW*~jeO^Bt>|!`v4>QZ2I2N&U zgx(%tsgIEm!{hvr-~;RV<;z<`2pokbo14%3ZW$=VX^7oE8By*Vsn`|@%J`#SYHqhO zKz@#P?0wK*4lbKccS%P#2XsxhW+1(E6(@@d9@^Z%q2P+Psz)04yS`nlPyfkwP)H!` zNQC4N*?ogJVay}U?(Pt*Z({qh+54si)`vKL=78LU5kelY06PTok;oeyF+nc{k z&<6$a5-HvR{(PZPvV7)x6)h3{o3gzYW9h4JzStr_!K}K9B6;&Oxvct~?`>s8Y+czS zgxV#6+Z>=IT@^6=ZWRHkAoo6}gHlmjNg^kqA+k(nyuh zQeiT;c5-*X)kvdU~OaNAl>44Xb@&&*cT0nMSUOjIUHO z_iQ-?q|Q!Mg8OHo%@~260blkjf1+mO9{wY?{7!cl`_=$!I}$ASxD*k>6sE43@`(f-`=FSIG2E2!TxA^3wn z{0^n0soZy}4S6L}3#^z8z)$AK-Tq&im*N zwBGtM3M3!7iOcCmd%7d~&vrhI2G4ASR3+NRUjdDVDiJd^0j{zr-{?*{vw^5E^Hwk$EZBgYB4EvvL*yAO*yTdwx7$|cxA=L(d zj?pD1;-K<9UWcM=EllaIz42_y%9iDRCu3V-_G`W7rA-^&Eo*B~ctrXJXzZxbn!VU& z^(cFN%-iGLS*uxFADJKG-lNy?=<4a_%5Bw77w?VoGa!x`gPttMD0gC)eilD?12+wz z4)9QnD>lUT?R^|3)1R(pT@Ftq*Vs<+nhj`x4_k6Pu~v9iwme}Cs>@j&)>N+wU$eQF z%_PBDNWukJU~5Yc-kD`o8C#5Xv+5vQpw7?N7LesQT)F$4P-5jvW4;&r)oej1i-QVa zY@{?H;81EpO2JJ22T-2=V2(&AXl`ylzRrxNa)%}A@ncezJX1;nFs+&X&|_uyqu94k5&PR32n)llYLO4Tv*@?6>yk zC3m(47*uE3`CT9sBQ)1Kvu!*58!H^8y%+3{FlP&ja(2+>yAdhcEO=!c#|MJ0Q|#x= zEd~L@l^pZ^MCfOT^z=00%M3%l_T4@?#?(@W-R?!XxHA_fiSC)@*m<``!3}^7QXO@M z`wj0mPvf58T#$qhV#Sf@3)DbBs2O@@2HmoP@qy_?g#?85z3PN*T{eD*JcLXhuPQ5A zn6bo8snMmOJ?xf$kg?hKmnX_+B;w2PJvc)s7@u?myxhk*_AA$-crfzp#~3gq9o^(z zx)tqRj}G#G-!couY}w_|TW_5a`@or)%MtNRXTA&}xg>!B46j`Vmz zmwzb`7X%!x1Vjq7Mcza}17z>E_8>!Moqcen11^C&wBA1BZ?N#-ZjYE+Xq=vM(?AUp zq}zCT&i~=xuc9|TXN@B^2#^j)dgn5-O974`KxS^<0ZeWvavoXwDy6Cr^o{zaDW6`W9jP?CaFt(|4Qf{%!8QyoF z0UZyxrcyVQ{GlbW=n}XP-)^BNzw2fE1wXr%0ahOEz$zXiW`1Bw%Q6gh$~J$=-=K!= z$&}UmWmSXoMFkEX2{Re`fHB}4=SG;Y=o>#Ep%#@o(76tY3dlwGE5dKu*4vBMVNM~h z1V_<9UIIF3ALT`LYonr9dNoXr6>EhRogm~)#+4|}qOHM;hcZ^qvZdT5as)4itmu>1 zPw)$AjzZ@?@?K}(@rNl^WN(=l+6_?ngfs)kFb}!Fq!)}WnqofA9}+~TMMYgspTR;1 zR~dsR>Qtc8jv=>WW21}U);blc|9seXl|oe9&MY7}vh+M&x-%eAX@D?+ipXDAj>EtZ z1MB&2e)*xU*eKtdfpy!6wEX^mAxv_!{oBtXrW=GDHXh@>SFpII4$3#iu%E80xP;Pr+5~M9Y8w zlLQ-+D6`}qpK`bHXN`_KboIhJoNCd4Q$x*6T8gAt^^UlbRI~7fHOD{HU*hoS02K!U*C+dL-*Xl zWm1WdG~N0%7ch=Ak5qcz7wY-l0joS?w&Y^KPju_i_w6^7utZvgP#{(ujsqhG@qJ%U zuu#Uow}(OBu;@d}0;yQ$FPLW$yQ`eBmG^cM4?@}3s{Vpl0xx!vh2LJa^)KV2+Oaij zgnIT(<5sNgDn9CGUppfBhlgs=*eO&MS&&oS*x&7!bfCBGnr)>S5{NyI=fEdp5% zlF%cEPst}1s~GfyG-;Pzj3##2g85tc6}GDkfART9mKqNes*@QVuz$ccnT#NK{80KS zJ{KoE(1*cLFK=67U~u+;V$>VB`_Ay|-{xD`kG1qp^HQU%Qr}f~#@ci{bBj-J9%wb@ z0JQ%D>}Lxo^$!2@Yh{>GajCvDuk|O0n0VNgV(HGgL|kvp2SE03HwiW^`fH8x65?`c z$>(*orV=Ln{6f-madh#_d6)FkKr&*0x+vy zZ8|#<-#4dtpH(YCr=a&F=EnS!ydU@5i8*uYZ0l5V8?EH=$y$yw#<(ZqAQr2yyqQY< zL>ARfS*nkvtKPYG9bKvDI@w~2r$?f%bMuy#q4|%vo52x^byi&O9`i0(%@ybhA4q5P zIQpo9`U#05)(4@=vDjiHUq3VWOsNKVs^}2B>gm~uv@6XK#M3iJm7s7GXX!#Zg6{O?{4*o(RCaQb=tf4mNn$(p?W~Z z&N2U`wIzv3^)EJViG+U!I%jBy@0w97rWMEYe>>%{hhcs4GUvvsQucOu-TwgMk>B$B zj-pUCP}M+XSi9p542W-R>;8sg-17z}b;7##vX;?@!GJr4+}UH*k~@dNmSU2fbeqjv zQ|1cZyhq0{w;G0XiH3pSy2oNa$q{~0ZwaB`S>(E+i-)b^hHqa5tZTO`CB?JU;QALd zG@WY@kf|E{@kx5u!Yv4jX&BHIpwzqN-#CTI3F3l9bcdZ^-*R-%MXp5U&9?XiHvQbn zU#Gl9;wWjsdz6@2%6_ykTyf`lUjwpEf0pKjeSym7R3F=vQvb_>*x5xEe9PNaq5 z**`-yd_cFN>41FWfa1>x)SB|eF!-I#Z@6XAHYCNAssR43=t?YtbIYTpTjQ~PKF;uQaTQ*>&7yNRV1mCi0EWY>I zQlOmtE%J9-aV{4wA4J_5`*D!^z=8Db-w{9KI`eda9JZP^uEzGKGShrB)!gVYmBzuk znPy{*^g+pKpRlYx|!F?=rLt$@wTK^?Vk-zyzq5|9?}CO=%fr~ z?h<>FJmr;k_;RmNsex{@y1GyAE%T6bSbl?Eixz2Y948?;7#}z+Xh5q~)Im>9?fRSI zJMZw0a==Jk>TpsHO?G8r1qsoICp?vUu{G6_!AG=`Kjt~(ma9K=u6%LQ{>r`4yVvC) z7dmqEjNR6Spw*h5Jh}ws?FD#^Zht@_Uie}0q+JvE(r+K1nyV{l{2i^6Ew_p@)fd{L+2Xp`KW85VFqB2PO+ZWsa0EyidkFCE)6yg-8A=5|A zU1ggPDKtUT2%l{aU59jDs*D~FD>vQDPMsifT$T~w=9qmy+!&!GEiPOpZSH9ADC44a zTOEW%ddUeh7TEs>h}qkFh7-Bfx_S_PlZTayTD_gaJ_v@C5}a+DVuFa9E}UX<-qD6n zSKpeL#0(C6fZ1&HTP_CYE7O*a2@y3(w)Z_9SbMj4Q1Tz(xu+(liqErZ6fc$g{*itJ|E;|p;>I~`tN&|asd|7dJ~5|jK#JiO3Th)ui3-BcA6w- zdHUhseX1{(`?~tN)*Wuqcz8;>)ooTLz`4Pk$%k~lS*X|Dr@+J&wxof!Coyl3-yhxcz_W)mc|1ylv0Ga=Y>x4R!JPel}Q{UE_rIvX{ z(?sq|2=O#(C$R~MhftXi5mWGJpXP8V0K`RHQlk+(nV*PbZ`7IZ9r9OtDoYrln`&vn zNc7rIUR_g#za=w%GL!da3&)qkwVDR$fM?b}YBpfBQk1(1LUBeh0Ze87XOlPt(UR}YG{Ot#dPXh#e@h1GX#5hQ zW79;+b#w*`^GGUPY??*m)I7U)X$Wc-57I?7nXAo-3geF+iXdl_7WV@o0Pn<@oiJaJ z;GMVnR7mEh6R@Tq&dYb;XIp3CUC1{lO?Lp{N=Q#9FHxDqQC1! zn@}YQk=GM3@BatLdnD<@63y61>CBKQE+xf0Orm!83oyB4{7w~;#PP|wMjU7AE+K99 zD4M)no1;O2nRC?qK>VwfXDQFro#Ib_JQ)TvDW~p2o%MpEKi&#lIn6{f8ENDIc9gYd zTIuEe02Fu3?`F|%pKzwW7ca^qn_2%%BxS@q&hDl4u_~a%c+#itGQ(p@A-2=?p|I*q z0v$I+9Sx~#RPC+6-(QPlB)>Er1+NU}#R0xAsW@_pt}f`_UsHYN*<2AzNU$R!dp?z{ z_3uGa%@}n&F~im4q>|ah!C%x{I^5lVbC}2ey?gCt-ay6e<|J4dT5n*lHIs0{zDhplU1p+T)Rhgr z)l_{depln`43Cf&jrL`b!zR1kF}F<@KYtncetKf{{;Fxnjo@=6On#!) zz$6I6o()e$7Z_duIpB`}4*-LPbgPi0w+0U3vOpk7bWgyHxOBU^ShC-ME)!` zU!A$Uk7@xKl_Q+fp2T3qs$CjoO43=Mqyiof&%H7=q}u!VRs7YvLS;ks%vxF= z0O_3~SDl%BN~3U1zdX9o_gA?((9^FD)vo1ND`zG5zSog|8XA93V&+DpXBNb*&*?NY zL1q9VOWx(By)3DY_bts!^=kDvVkafrFBp&HcsIjAze3_`HTlv@kUo|?Dvxy{jm$`H~BBpE#aUj+9}!!py@~(>z5tywSE033Ha_qSE}*C?2&dM zah=o*st(NCofta4cUi_Z1q8>~zn07I<{cIfOHM@|U1E73(zD#WI-sMn;IAa4e4Pb2 zQGTg;wn&f9^z@5n>Uag32gnlB^zju|wB1uM1nIQN_q0{<< zTBJ<)2EtUv-uvz(?Nh44BC<tEK$JUY6CanXs6Sk)Cl34D zxa*;=KFEt4w-U289#G~yAtmP=H>WW$`__|oZ&!Q5NK!U^LhRIQl68dI0kkmsWbli$Epoj?lL)XBZVwZfHpZrHt$2u9iCqj zI?bACT>mCmxhL+`w@W-dYkhM6gZXn0&pQ;GBXQiSkEeo+tzsVw<&a0W*f8uHbV<}N z=6kRj$Yc~e@h43puOEKz!K>v?OUwz3&wcxy!*ABl0!!uOk;&w3Hfwx`+eJ;UPFrTg zr0$p3Ie21-7x7c_9o?=Zv&A}eA%}TT>0y|*#LGGU?`scxsydA3|OcdT;8bzWx>=qIxcg{zYt0v3q zC<{$kuagejpSC=4>LV?pohvwdGTHPnp&?ed8whkDomAwvpqhNnV>CUcF11VgxV2K4 z_dFxs!g8VFM%%^fQ*UJgAV*ld=be#>83)T|muq)h_)p#Tq26*J_z!)5a%)_J_Fcdw zKuhJ>wv6V+>nhuKt4dZ*6lxwXM4Vbn_H(o*g&rLih zQgFR70;*Cwa-~P>&_A#>0W4}7KcyDDqeU-&=W|S8VWzIB!N;%|Zor@WG8MU#W4s#% zC!adBO{`Lv$zFXRekqvL1Z=x&Ebc4TUmnOlT6ToVfFAqF_3vR-{nxjj`e6Gehp_`s zgO{f(S>Z|9Rt%JsC^9`EN6qc{*?Fm*L!pXEF)@o!L&G7P}4h z*G_ZKEykCv^gqCN1Y}j^8f@v;hF#bw8{LE{+Glk4!CEbER=h%vJ$yh`9i_7^(6!tU z4%65JeNCnGnfZb2rB27k-j}z)``7~ui;9Nc=fIlvsT;z8^h^T79?}QN=!55=90TAL zY1@}&0e$$cRr?7)JJa>Pj;%}kc$5gbt4!Jsg>>=cm6FcZ_hVdNTl)!}HMFwuM=Xu1 z&Lx9f74u-(}4^Z&Xu8n=rCYK6SdWdGBOk^}DgYfx7H@r|$IdpyGdk{;tSx zzi{ER5`ams?_bL3dK^ga?mDmTu6uKHJg z`}qEY&hM0BCPScS$nHOXguM=9>%u0*6JA}%D-?rUzn-FPLFcnmfAOowQHr`7V8&xu z*`K4gsG4BRmtr|AYlBv=qyHM^Bi7dk*&-Or10gRVXTPE4Kt(nm1FYPi#*XE5<|Bu! zLuFvqh4jI-Vvo<#gg4!mza=tiO+W^n1V@!707GZ6?#KSq<0o~V&1cH3Zoh7~ml+7q z8;bKAPo0;3=NY{N844MOr~%vk1#rH_XPbWy+Emk`3Ke`DR%W_-5?~nPPVC0IF2pvx>|p5VvdP<57Cjom_MSbnb>LCQT4%TSQ<{p}3$K@YE`J8x zqqzRw0LAo|>`lKI7cLv7N97D8gl)XqKpsXYWCTjx{aIH9$xNKInbFvn@$Ws>VdLe>T5yrJ4Uj|mK}z4o z(TrteO|^w>Zm99th0=tsK!|7AP)iRy1?mHmW5n?9fqFY$!tu7tOgyUtug^`0tYfw_ z))l}tz9C<1B+ z!4tsN-rFMsw&IkN>s6kAgi{LGz3-vNvb}2<1d(g}OO1DEkIe0rUl_hwK-~V`k8pJF z*wu~FI#w7_O0Ty`R=QE+SE~6%QLQYj2{B2wmMajjeQj>~RPU~`dbHB3Ng|kn*Q+Qq z!z4~(bqV^MzuyNF$Cs+K_P!McHBSJA-oEz3NFvhToC-!eDSdjkFeb>~t>>iK=-@{q z`CaDDp~)!uC!JC2f4*`o-r}Z=KTW<=9WFBDx{~a3CetOsw{G*VDB}xc_8^eZAza>6 z)!&XmR?MtEj^mX+M@x;bWJIRRbE*05b`G0W#m8w#^tp~pK7TP$<0|{HNO11|F2(_8`g^w)E zTAmLt$UB+NZgUPw9jh-`BP_MMCl^7h3OlvldWYopuMFE4(aMcG(=fN(x*w4!JiMy~ z5&5XccG;W}i+%RlJi>yL+v+!{Im?)S-@;Llu3?OWFkq#QIwFgBiB5#2iWuT$g>Oy|LpS)*v`8#&EhFEv8j>?`3c=%5S|bM%#zJJ&2c*OAZH2n4tbUSmi6J;yxk{L*aD2>a@b=iYT zRZBv2L#FyGDryd3vW`6YuL!~34OQqZ0+*7=w!Io2zu}FfZU^nr!B;;-N@YJ1`BuG& zrq=h|w{o{&)>IY4)wC)YIv}8X26-#BqJrLAk>~%s|1~V*9qSN34{X=}#?O1g-lJ|Z z_@2!mb`>oP*MpCJPg(l~@_(xAj-ad2EI(0U8e#;ABvY8;bh}X%0dokB*Hm%57|=Yp zp{s}KE*md3$|U@n?NaVLye-FoPs}+Moge5%f zEXP7E)*8*`=UX$50{;UbHjo4U5aB2w0yzY}TK|T`+;6a)zL`0WyHHwjbjFP2yjgKe zt1xI_i!#MJp4~CtSN!njdS!a9*709B??1UK;me$bh=umcNe&za=xE%SoMsZ>O-YZ7Q zZlV4>U92mxM$}E zp@i%~349&-j5tMpN!U@3rx@u6{??3oWlAL5o#w!xjr}*JYZE0k*X43yE1xe^vih(g z3p*w9!{MoXosnxhFwg*cN&0)oO7%gvgcpi?j-lvsdlqKtneg=Fp36Hm2;@IN$MfR6 zK8Vkol;vYCak%qN1t+EJWB&_#ege#3jq3s2XGh|#iVj;7a z7=*=u{l50M$;!y`pEoWDhrfa5`wG~y1uv1+tuTT-%L-}T83pp6+4Jd!=F8&Y2BL^Q z&{yw}H*H>zMC2uz9`bM`9)k!adj$vYt`h0xgu`OU-*tp-v4PiiONn+a!~O@Vkx0PB z$t~eVUCgNoh0@Rt4e*Hp3qA;~(W7APk@M7XC-OHIu z?HF#&2m-}W#sT1lzSOej+#`0q)J|=!{d(_Xc8%#AKqK}8$Ea_Pp%PQVvf4e(F zSP@g?9Z1encbPn~PaMP_B5s$DG3>Yp$bXs(A67S@%X5xU%2oH+;RB-P@9S-Ax zm&aGYg}%vFgSbUD***fZbYy_8D1?#KxRVOp@kg+Jn>tFJ%#{FZVXht9RRqK9IupL$ zl-dgi)b4~{QDH=+8mkCgo979=Hnia8!kNN{ZQS~X`~!G}P;uksFI zvJr-4Ziy*)!QBzC4~Y=HsK*g5M}`r$&5a?~y2|}+SyS-;0H01Q&t9E2o1;amQ35vo zd+LzTr^_tz0vI0jgM4fu>}HyP^RUCYY+N)m*o(o@4Vs%>-{DAcF^H?W%R%i0;C-?I z0hr)(#<)>8-^Wqgvl79Z3y&H|I?M0ANr}u`K2%m#d~sXymN{A9jsf{L$GS)=40awW;M70H^ zZjMXw(SV70K*=9+7ojN{^`XRZQm0pm3O2FM9{es%j8;V-h##V@h~hJ;T0L@P{&>eu z2$6)yLXQy;%SPKi&mY-4#p5s$)bo2E0z-+k_E+wkX>#RvLXJ>ikeqFeV56b3%C^e9 zZBA>~@dMA`yf;4Bx)8sCBkXG*&jFJ`oXDuB77R|oXEc}XcO}=SnxUK*t<$ zaTnCYc%u6-LhzsCzlFsx@D7295R5Nn%!P-3>D4=VRiv0!x&!Ye*c5LOL2X?K5N0wI zyt@(Ld}ikw-x(;f^m1Oq{fCart^vH_P+6)0_G-ms5oI8iE}_Cvh!xXa3Uv6?YB2Dz z)2FkmN}*%#gtcYX$A98LmlN_bJueR$U8hE0uK%9DTWw6aZI@l*bSn_H6OjtOL^^ms zUxjx-E!Ypc8JV94Aqw_OaG0>4^d3u1Tt@9aR*v9~=`#m4 zJn{U(c8a~gh4lVvdV_z3#Mk(Z5I&vWqan{kWPgel>rTmx&5NR<8+@NHa17viuJ{r4 z{pE+UDZU-sc04TLH;iIWRVIW?~grlW@JSe|Q*dwFcdIV(7&Q zqvma$4md#E!?{J0H>fdEX4KO9l#XYRm#C1t^5R6!EtNWQwojq%)Ea85;%Q+!h#(VR+bT#@~T+c`ERJX8gr}&d7&gSgj<^1Ea zOUGb+NbV;z;bg?J@3ixYzN5vs!MM@YIJ`UcQKTJ%R5X(3;E9%-adnFs`3+Gt)sMo< z85Z+SlO=V}j>HwwYoA@svuJgT0%5>loWu%!(RC*Bgu2N~F!+~OR-H*qqU62ts({O) zEw+5oK&dZ(TI3EJI^mz!qNf0wmeib{cb6Wj{Tr1YcB;|y(w7s-tOwk+HsLDlywO0A zMtk`&YJVwA^9l;)BJRnJ%As7&GOc-lJ(32C4wYrrDNJCOsL~ZRu?p_dO(%)U6p9hXA{Nj+Vb>f?>QtjHd20ncCp^%elk-~(^ zl2)cLhN=m99gl8E{4#Ex$4)`LOH4JJswwSdrpz4vy|yKv89l-3wwS|91K>@K;j5IG zZQ|qY;D2!uTj2ZW>mO03Sf-20xxvfV4s1^I-WB(cdW%JT8(1C&k>!*;-6fBD{LGl& zWEVpEcP1KW_lPRfmGrFrNtlImpYOELIr2Y%g&G7fndY??BkbQk2XN;m9pQX^SRJGJ z9{|twaDr?vIr8HV;>udbJbUqiMp_c*EfmYQk4~;qp_-X3R&`QUdqh%#!BhwH6lB&1 z8nKIow1y&_2E^s_vPZVM(($iZf^_C<^vWNr@YFt8qihKMPHI}k&)*;s9o!K5i~5@= zS1cjo3L_}lO-N0zHfgixeV%nKb1jP;045OJ&Lj~U(JE?AVEQ6~BqliIM`z#~@&24a z;X++e;8o&Ba@SEST?$&)TzCoyje^G_tG=ntEeiXRyNR->ea?EZTp;4$5s_N+xNlS# zX;+#qoVfGsp;>9!LO|pR(VBKq2e9qA-C`BNB4frF>{#a_#+w^qn$i#Tn!y69!CYVvX_ z{d_hR8PUdy0!Z=dtzr;towog=)3&?D$7@2OX9%BMPIyecBdH8LhNgPH7x>_&*^Sj^ zl`Stu6-ggm(NNg@E%U7X5+R$ZG;s}640!FoGeMc;@ur#YFtKKy#Df;i$}J9+#C;KUS3d@m7Ps$B_pDLCGc7}l}I1_4d6W+ zal6r+g|CN`Sa(M}E0e+2Q_3u%)}Cm1Icf<%9Mzy9atdGyw(Be#RFJKR*?M%vi!=1w z7=zx_qAk38%e$1;$Dm!4woaeV->?RGoWZfs#=2mHesA_~qFwo|p8rvFmSIi4Z5$pU z9SR82NGgq_bSNPuAe~A{jPB7=N_U6So!fvhKuJMBX&9p$HlzkP;Q#LZx?>;q;dyr4 z*LDAX=LsszM(9)4-f1ttTP$za``xHf z&8}TZ?S63IiX{vZHgRG-!Y#~>Y3>T2S~<6Px7G(;e>wSQ`Sh;7&r%i_-Ewr!3d-ZJ z)FM(Dnmem#%vlLV#GXmPcY($`er8*7JNFODS5^g9*pyJ^i5SZSl(47w8g8wMmiGF4 zn=%80QU$ZUnDX+tnK<$Ckapc2N|8(3vY7r?7-u-GGX9{s6EeqSxEsMhlw8^8tRZ2n ztCTSek|~ToK3|Rq2&-Pl=Ehvnror73<=|g1%|OfTMxRi<5zl}bk6@w6iL{V;a*tAN z4uOvk-z3OI{8Gs@;QN<%HBGXnJPf0B!}Jt#DBHMJ z+@!c>8U{)aKu#_qigOm*j&v{`F)OGQ3=a9 zj9b# z6c(_d)cdXv+>0q7RK4D+0_&}G7VDrcVItKzN?4=nbsVwfYECe4{n%y}Evy|jwul

dT9B2H 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

=)CS^y+#gSG$W(;f zAl9;E5syjtPqX?DTwPnNw%fKbDd^Y76WpI=ef;b{d^k7c zyH|X6ytf>-Q=jdgK&`GK1-jCI`liRXeyldWW`*)60^whLdK{Taj9<=JQ8Z*zPm`p<%fWnY#1Wt54ClyQ~ zgpxt&<}xxq8RB;qSAa1H3IG5CO!bMHN%0Z+V%4WTfh9pA2-HCYL}@*1;~hR2X|5U! zC^E4To?nR-6f$uf%S_0puu=dFbjgvCu3a+3&XrgX)DnDwPM}3kS`M%dL-=D#sI-hL zU;*ZaC-{6ROz^EO<3SF=0te5=e;tkeSw=kS>S0G!ts=8S4F zV1AJbGQ{(8zc8n_Q5eieN>@0MpM(rLsPLHrh#88XjXKj8jv9=w#0mk4aUg^mg>@_CK^$z0HB|SRFhwf=kdhnK?BeU zohRgH`Qhm2v}Hu8>PV>+%fdS0{WcISI zz&e>V8E0Ps;e!YQ%mL66Cp^t##~He~=HMVqf=7gP2l6;{!jMAGl!{h_b*6LE<%JDe zVZd=JU>NF0=kT01x#6G^Mp>VgL_t5x5R-an0)tlM0~GH5$nCEC;ddMdba8e$E<19p0$ow-ZJmWLZEuh6SiYwsq+^e) z={j#w*tbd5)nBK&h-rLJdFA~R*F8tjI_h=)o4IYh`o0`{ndA4rKW+Wd?I$I^<+f{o zo$MXKJB_C=w%WDJ+#tN+7mejCS@mzVyDmXn#2Be2nEAKgU&j4UqTTwBqt@HK47pmm zhHGQ)LUt-Nn3K4O{cqU?b{6RbyneIYihnwSjAb)(nVt#^22=CY4(?O zhL%jzw7Z*~>@MK3-F>&c+-x~LkOeL+!Zw?$FrKEzbc_kySi5h_q>UiVR0#9FhwI*< z=$&16`Yp#-%%yOSGJ2P}eXZ&K=jd(FdXC>U8gTfh+dapv9>IOe_V2s95wYYEJ9E6Y ztEYLu-n*$TtO5JpKXGs;t!nW90OM;cpB#NT?QeQ?ez~@`H*H#VsbzNf9}|Bfe-!$! zvv+O3vs>+xug;^#z{X$k z(*Pb4BU;c|&Wf-0;Y@-~nVAAcRL?AUWW25R8xAGpZ9-pEOfWPF62wUvP*)c0n@hYw zuHc1~6GuD+Hguw!Zkh_}Htu=~zN4$LeMl7m(jtT(DS8@GK{96< z);V8j$5!Ipw!yTP45jUZ=K^2?)GAv%X64~w0CJ@#)t1-f&=^P*k|BPU&T*|`u%4`& zaPb%jm)Km~7cFjC4Yu=XRXMNK18Qai z$iWvXfPAtWA_Yz^Awtl$l3mhB1gJVSF(p>sfXyvNWs?AbIS#l}=1aMaKIp+97He?o z0oCRqMaz&0652!o;s6mCn%UXIC}LeS?bdXPHjbfN9G^47^MZU&(YE#BLkZoW`SCVxCd_SITx zzmM1*uT-JqL(fk9?T$N%-(J1MT)%47mU1j!zV}x|k|N{7-3t&W!=?oJXwv%GPOy^V z%{OH2NM8;RZ_-P#DY2s<>8K%FgF|rYL^mgsni;aaIz|`xjKL{byKDibhW0xkM$1pUhH$WSn5l*%QP~p zKb$LO+Cb8%Rw~&Xh6fr$`3LA;t@4(yPNKOIYD=0OOr(l{qDhaID=-9=y#a;tBOfd?4m&OlAzRru-b{~o)-)ZW%f4O)}Wz@BUB__ z)D1N>9K}z-;Lf8VUE%GqAhME33jqS#CN(6P05CK;=M}}TsUmY3WxH|P_OAIf+eSt$ zplUjFRZA(2VzgYb4igfJsYR!8+VTQ_*rjp*KJGku@ZD894;x!_MKAeC_)IpZ6 zeR^WoH~DH~c~)+?Y{##5qgyvXM+BJ~K?6BZK?Ss`lP4*|O+5=%QI=zuyJ?X^8z2jL zvM!UUgacEmL{OT}2WzUuHDi6KvF`W_s3E+e4wWthwPCd$q&0pc4^4FvvU+MlJZ|FB zu=5a}KK>qy2oXtrL_y5_V;d-uJqy;;xbIsFZLc&TW*SK-I{BGl%Xq;!i`q2Q zXuWLvndn~Nf?j;p3g)jczMUhdO4kK$opAi(YcljQ3w_0DmF*T{ls4FjP;I;*QyPtW z{BcUjt#VJAv&EN-J;7zzh+B?TV6hM#DsBcKr~nVfD~(-~qOV|cN=h=dC)wpKTvzoR zO58I|ddUEwnFL$5!jUpgAZtb1%aU%I>jI>eOJ&8d+Dou7R5*i4B&etgzAwjVJqYNNbE@Kp;i|kEXJiFIBSYJX zcV%M%bsUakJY2p={{SEF_?2i_TDDX~TQc+JvaEE7a6v8!nOO0Xai19{0hJPjAkcye zh6h=<0d&JxI*;nZ$VFORV6SC#j~soUj0$V7#9wAFJ`en^PJ;nWKzA-Nkct zSNkL>3>1Y{W^y$-a10W9WCjei<-`0)aGo;wgK>M0TOjyD9NT(QG>Y?rCt~?Y4d6VNX&R)^Fm957OqIQt(O5>)~07N zq0W1!Yq&*-{&lg%NFEMqiWwP$UZU%iSs=%s)Q&|@Yr63wj262P!)woz&wCH;r$2eFZhKD7!*Wa9 zZSNC$_Zx5%05+R!EFC6b1OQ=fZEbEYYhuZMFSZ3YX}0*_!}eawcb{fmZRfS#@Ap@0 zT(sb(+k3j*8wICORvTNvZYX1!PPt-(#c`>oyf^7@;L_n4EIP(bOAAw>4} zd218#`I+8QZn?39{n2iATMd`94ax$Yqi5bO)w|udm>*3xdwt&9b8RjuIt{f{C8xt2 z-BX21zoFU+*k5%!I95t!_cVK@Z;{(_KA!7mdd2Og@e^^idkh-g-L>E!Zs_PhaBS%y zjMg#LTT5BShI_tyJ>9o8&U?S9a16PEzfNYq27%%ZG%4kR z5vUJ`h6373$vs-g{OU4c#JZ}?L2@P)K$ZAT0&j$sbb!?eCSaXJLHdY+3|e5YkHRAX zHLJc?0tVxS<9B?A9lqUh`%T9u#I@Gqc?;H2_Z)L>7yHL;xia?N>cB8T!*i%wyqd?E z&I{74xRQLr59w`62nj7nGc!0uJwp=>Bmz#8<^Ti$2qZvK#{dGrsbCJJn9^m3nuO~4 zjPk(~fIRH~03_bz4#xH~f5dIBukU+^orcjh5qN&;HpF^HrZurrDJzV6oyE7d`R6B2 z&70wc_?k2A^RpMRy{+sX1(j@WE%19@Q<4ORW54AG?{Br&6<5=7R0CR96}L!-I4alX zP31>vWcLGw9`SwBeX)BFY&GsDZ``NdPV}^)E?Z73wiow%X50Wgt9SOrVZW?mHxk_5 zty6jmw{@+o<1Q28zB^A@J>2&DoA(=a+ncTYLKH2B@yHZaY zJA%n;d#%NeI!oHNj1XK3OpqgZbC1LOoY%9pTC$fNrnuhwQ{LUz?^k5^zjbiEueIX) zKJMd{J;THET(j@_u1?Pw`yMA{x$T|X4W`b{&hFvv`luX*P_v!|Uq3yQoao!Ecsxk! zjf+;$_Z_EAB6NM7xJOn1r|DvRx@8QB2D(Xr#J9pS!gI&8obl9@jK@;3kP%>M5)V(P z5G45GN|zD9b#Aq@sYn_Jlq!%$ky&r(9S>8M8f|!uS*08dkB{!&;Nx9R&z9d?NdEw| zE<5eq8i})aU8hslhH+~4SmD{ggzH;qj4!`C3)z2nc5k)!bJoD)BH~Tmv>&~?$i5BoxO)!H#sgH@1nBVw|LFlCQZ2v8G)voJwx8Bh0A*3 zr>cL`^)=t7=TExnbgi_~b-i4xF6F{Fo8xuc?zS0%qmXq;)IeZ|La0-l&3q#rGM>7N zDZ{~L-0;`!D7?yjOMY8u-eSW*eKcZ#Df#D!vXr@D_=?SP+rv@qpC53t3zo*B8J{4Uh_920UOv?%oSk)}$uNo5@}is8bZWM13y zI=;sSWy02R#fx0g`dYj=4A{83O*rSjU7C~Ep8P6APuX`1>U1L}A`hFr? zZ*tRKTT(uMnb#iKf0K{3UvS>W)qTw3_%2G}3j9ZSZ8zPuyIZpk7je9_HbjDR*AtZE zp>;cN6@1XM!|@e%)gDvh-neRZ{{U`#m)afCwzs|EIj%dG+Fcs$?)aWVYsqb0Lh6;f zw7GZ6H2|Q&V>sDbt~hv@UW%=9%riZ;yV_hpMf*fG5sRu4?4g3eB2I>!SuHiL5+pCB z23&^Js@lhxFf&Gxu4bJpg}@36I!KKmh+3l|Gne_$GwyhTgG@T<*isUexODvb8);o_6{@hu8&ij`8 zocF_heBRjX`93S!uG+rs0T*oJlIHgtJFZD@QtBdH3+AcmjCLKZcWY*?xP7r7nZF|2 zrz(vc_T_Q#H{adoe;;c8+dbCqq`l~J*ZXGw0Bvw5Zegx+y~yjuSaEcc{<5X_D!G_F zF?~(m-%V?A)3RjGX-(5fw7*W%tp3M6rcY*m)cup}OZI&(QF~I?b94SfZsT)(-2VXY zyRTbQMa%ZBZmrwZ)F{H~>Z`L=#xiNSXJ-xJXm!FOT(_d=4lXECj11^ilR9Y)*X50j znC_KOJuqT`YHcI|a`xil?b-C#1oF~(qN)5(aSm+VX{%51j`N#4U)^rj_LqO| zzi|6M!Sj5dw;k7ew0k?)zQewGO|_o+_g?ni?Y>ue+Z!%a9!G22+cjjl$nJr-^{9<^1Mwe-F+0`o~(~da(wL9C}9xJ{$e#qc99^~`Zd!N322i9)U=Hp1HGQx|KZoZ@XvhJKHP#hMmcK_D^~8TRUXjvJBd^Mrbr_|PsJZSrH zX+`$-mgF^iH~Aji*eJ-X3W5|83DcyKS;GTTB>s5lwoIFIok=SLC-VJTSXWdZ2oxX3 z5|jYrCwA;DmiYa* zW&3Sqxz0~}=8BdOYrSwB>)P=q0;i+N!7tX+o;5iGZLgTS77lpbzJbUR;v(o&%_6OpwLE5ES*0 z8=%$UgoK$X0Cr#%RS7C}86bc~24%@DV#U`& z2>L-Q^B7jLs>^{ljGiukj-8Wt*Sg!H0Bdzj zC^ufpFptnPCmh{6n_GTnUOr#3cJgehtmb}f>fgT~c6UC@_roolh?d0mS}(~{lTNd&FC%qUro0QK zuebjIj@C_RrdQy3+3pYcU;7>I?e*Sc+iTwJ{kwNFF}<_j`+42lu4jhWU)AM%JXbj9 zbz<5)9TxX10bm?+f5F&E^1G(^PCs0iPNQ{Sn|W62v8enFXnw)}0Lf>uns*;`H+4s3Q`y?YD1UHg`8gXvgy=D*&yS53j?I(HTn3eF?!_1iUHZq?l7(P)zX{{WD$ zev#GQ)!eS*afgJwKXNAf?!)|w{k?7dU%Ah)o`1Xe9fiAX$anX${E*~!0aPDXeYDze z{{ZisL$!Scinz1@rY5~!{@v`ls#z(-XqS5m?0wp+Z0=FoVl9XIer8?Szvbub=ey^N z?v8)Fy`t_`P@AqF-5%E8aW=O5iR;4Ls9<#Z~I#p#_?`J z5)H6HFk>A_rlmQl%k@Rbup=D1y)R9?=W}kZ-Pq5_(ze~JSKG74e6I-M+;CrZe~7PVHv5+5J)-ZQa=n)2 zf%SI#j@#}n*CDpEdG5`-Z?oLrw!+c}>2O3>9JloMR^Ly%b!Wlle^u~@x4m~OsHJa9 zJmV|ptjUPk_EY?$dkJv2v|n&M54_w4#kE=O?)k8reou2|#GMO&b#C^xbpbY(*So0VgP`(GII@Dz>m)fxEP^WnS#?Kl5-K4T=3RwJW0y54uk;$ zk_aHd%q>KyGDst?9AK<`k0XD~Pq|yZ)B9p>#o}BZcij$qkL_+RZ*9ojU48!U#@+3u zkuPxE*Q9uArgMy~O2j79ZUtJmxSbB^_7~f2pR@kU`&I2;*44WU*qwpf9ld){VQIM? zza3`(04aIybh~$x++8J4>XD7!GW0^+cW=%0cpOFU=G1%L{!)I{y{T4B&ujg(duQE# z`}bzdBQ={n!`wq$IzW%Z0Cz0| z7by(cm4?V2G_3_er^gbSZvucw62#<5F*<~0K{2G0{Bc5h3K#$*re~n9Si&3ym<==G zssRRRB0oqp!Q3P%kQ7RWV+4`rXaJK>5!VV6)K5`Jk{A#Kd5D2RMSd~ihoJk46B5t> zEEhGj)J=R&5^|@sJT)QSdyDC@AJQ3A(qPOOiqd{Kq09}jV2VPl02fA+^+_yN zM_#zeL#{P!Y-Gy3k|;G5AoQo0bjEI~a#M3218fypnt(77U#Wb9IF8Q@KMp(t7uA2*Gc^{XMbWo z-e2~c?F-m`%)U*YP5VVVubZ}Q==3>G^uFD}xK=DB+TFd)v?RnvH=>F`5g1M9Ivrw{ zH4#llYj8pk#iT;SIcBLiwEqABCUJM&{{V7M%d@*hZ`y0So=11hau!PibJN;`x7!=2 zqcHAtc-E1PcIvHc_8V-hwsP-mZHK97`f#8oKm-R-D-6-*07PY;J7|-6#!B8=9SPf3 z01F5TDAL4Ak{HNf2$hi8^~ScUt5x9iF*lzDw;eA7?I8Ny9hyr{{t z_KKp|kXA;PifLf9pr6%Kg}G+z+Q=g3ZA2szLgY;hnn)FuAoa@$OIgDicC!Kjp&Ev4 zXktb{ERi@?QbBM~PM)Lz2g(VWfI*4t^B9{fcN!vPk>(2kK-8zgSPb$YPssh>#e~H5~r{ z@xjWpS_F=kECA9~i6u#)B6EsJ3yF46G>5b+011*HlR9EsIO|bdNTvr6X^Ni{F(#x$ zWl!OT+hQCsN|GX^bOvfiff%&>sR-xKy57X^{{V9S-M!uH4{NzY!}sTQ_FpH&cJA=q z{lBTYzN*j1e(D?czwR4rZD-UFRIq|G#a3;N9AJy7iTY(vf#;vu2P5{g_eboB`&aJ2 zw~eP2+#bPf_)a_AUKgG1&A8c~^5ZvGcALI)jqbgl{^tJxF}mcoZr4-Q4gsu;MQPL7 zf3~q#5Yz&;DwfCLv_Sd{V&As#NUNXQ`+k0ofzrxu8@4nglR^6UQjy8xs zt6$rViiDFwweiK*7w>uw(F$9MMsN0+-oN~j{@DG7?{8C6bH3R2&CATUlIi`%!(nfa z+@!8|7WUkRn(CRt+^rkK&a5c>s#(yW0u1?o&}Jv0Y+;haGf~zCVrfsy0RI3{WQK*z z)2D_?YvX`8;1&QA1Z5P;Cbf>ZJOTF<5l_P?Aez_XK?4m{uoUH zC?SO(8KeLRrl#=1VFdsQ20Dtw*Qd@fCk{~I4uK60q?yWu8uiZ&Hk|PR?IA>wT|=k@ z6Iy_BG1muw5sRcj0s$?MoYcu41VPMT0o!JpNT?)%&@7Yx0L4$jqZd|};wC6kOcgpo zF%i@gUjPsA#I~M@H1P>3SY0MfB7}dd6NDxdE~x?zREde8nTVV*4pu6qdWr&mF-i#@ zH~=k60bmex2o)73CPZ}pI6;xWFkm`C1kD7@l6n~!VZdqARRHrCB%I`D_{MlcPw)>w zwg~#?;S#w(ukpha%Md{e0;G>FYeOO+(h0&DDObt`Kogx9k)2LcfRTZ9MaEbZ(m{a| zY8Gaq1y4)^j7a*8Lsv-=SdrplS42_p`^#p2x9p}9=QYatjY1505Q1R zSl(I|w>B(pZE8!3myvH<^=*>KsXl6EuJX5=2bT@xTw37yU(2gc{7u9~p+4W-w?0K_WplHH!7>bD_@+1yyXStR$E@ ziJ=3 zim;n!wYOXDcJF@cBfZ;26b1u4;7&ZI-rYHKTtVY2)ZOk{mwz56hUGba@$Rd4cYVR$ zT;~4u%cs<{dw+2)wY!>)lVa7DPf1mP1Vv)F(a|jy4t>qbJ7QqA?f9!U8_jy^l-n(^ zZhvu_=^|3}G=&DEKA5RZM|j=atTO3l(%oO$+_`GgsB4S30D3}19V+Ag;Q#_DAkz!W zqRmTCs?hDkHf^<`>F!xY$5spGlMtrg)1=8dmbesf5X+;IqTRW-aRdfoaM=KZQyJ=y z!vQME-PLvyt^VHGR)$Au&~2e%dA^sCt5vq}J#)n6vGUhe<(-Z8ZO&NO_uq5yYkVT| zynfGkmRm?;c`cNSdF#@k%F{VLF^5rCYB$2G_d7aTDz|m3bGz>nwtm`Nm{CxaG|Jw9<$m&8{LX~t2<{{VSiw*23>8!hU9gN5fdJF{~q zOAm8K;v7L$Wh1N%bac)0y42$9E6=ywk2P!!)w|??w^5mz+NYWH0Mu)OC=^Vdw8xNe z+2Y*uV_7M#-_g1@_V*2|-kaMGrdj9KXCoxiM2P8#-nKO$V4Hh)ZYUKE zXzJ2#1LjMX+vn33v|LK&ipLQBG;2(4C=SERYV6z)%5<0{OsRoU8DJr{^7Sp6UfUVA zp-Hq@3yKtlNIFoB0?>~dVg7?o%CkI2ZHu=(8)eeSF3bZavYu};*!V9+sJTcveojopT!ao1G3)Vn~tsivIw`am?zhrKcxi z&^J&Cf(d3cT93jEb;71o8XAZy$Dxy%%kb$K(p1M8Gq$~m@)zHJ5x8G^d)mR%Z)v~W z?fGq}wwFbP{oRdMyv#_{FUFuNUkrIImaSCT;kW6@zUuUoQEsh+VM?}}uJ)A?ka?K{CWBI!$6#|(vjO$kI6xHZwd#WyH zqBNH=_YLg_1nir>@z`F5V5ecPe6CWB4`ech4nUI?IO$tA`JCT-YGPCxQ=R+R>$*o3 zw!3NUxY%uy!<26_-1S{`mkuGK00SKgn`_NfnaH% za(bQii`-WEuWELjbh@{1avRPqMa;?zt#n*dLM>@1Sd@;%OIpS}0lZB)LHAn;sA1eF_&V*8P7$yGz_D5S;HC_Qwkiwd#MCuYF zB4|JZ4A*kbsX&arVnTvX#sIBk41{7+)jbRwZOhaa&ILM5Mn*{@vxf4p%{H}R1)(6t zWB@2WABnm;03erD8d)?Tt!fsz@M=9ngC35XTKPcC~x z%MHH4vXzOhP)C3hQ!svbsqHYz0f6|H6fIgyf5?6~V80+)as_kxtC8vR!fz>djzKA? z00jx~ua>0eCk!SsH=?>p1d1ATp*5Hp;3?VLP)bM)35Y&ZNE8GE@WC7ep|}L3LkVTl z!JrQ)fm-#Ggz(^Ya`F$SnGptn)Ch`_Gn#&Q2^t^na@UMhS%wP;?7MKD?ti^sg z0zaz;nKZOnC&U7^iITwPAjpD2JtGUi&H^AnU}TYB(=FqcQJx5IJO-R+h%0PKBte7t z{QAxxa8{|z>jD*%qzVxSpcL_$6vFQxD&~$6`wF(=fMq}havwaYhEFLAl1B7)_f`Q- z%Ap{|E~!zfXhCSFTypg)YmE&lh+G(YOArloi8_3zOlO#+C&`GI`Dd8inA!kvDUfD> ze;_j-#}Cc^T9lM1;3_EACPCAx6lxy=d_MS6amC#?l2t24P6dW+A$t{V`lSrChEI2Ou9H07MN_(EcWBaN*jyaG(Gh zRKyZ1HHojoFXM?@c1~mya7_4Yra``^FDCNuHRh>X*w?M(*|p0{{X$J8%qG7 z=?=i^)A2=2jWfsLHmbUtPdDoIKSSEwR$Q3z?E=E3#%U>}ubjA$gD4#tgwW@MqO;rH zTlN0{$eh=;5x-SxMUr)TqiFke?neIrvF^7Sy?w_20Jd7=zJkj8jybLn3++J+O}ngQ z&1RVTzxaFk@2vL5^?fhb9Qs{aO3mdb#Qa;|pT>PZsBGJ;^ty8I#I^Cn*dFV9C)u9* z@T<=8cWmrChRv3{u;wfk4ZC->HZ1a9kM{~Ibf^SDq~rP(?XPtDXSsSh_1>GkUCo;$ z@a83PN6Nmh=$%)m^%mLcXzRUK#cFwT-Tjx`U5m@z?Y{8ZUf6CD>f6}g(3b3SNDz^4 zX?1_LND5eq8dQN(k8RtvZ9K12*DS1?=1}CZrsaKaM%+8SvY-*WdF`5&u$Bl!!}{hifUd!)ZNMB3(~(e|^+k8u6C?w@FR?eA~*hZ}y-EqDF9 zlSO;`9#3knR@L2};n7rvw?_>GAI~2yd#l@Cq3E4Q+25_c(|EGekH>NMSF}Cv=^pOr zY1MQ)m0SF)nv<0O0DPEo0&F_7GumL6EsshaNenHEXX^BnW_nj1q|>dViSHYBrQtNW zq;2l+Hpy>lE_$}^tTu%j(%S-6NrJ8&gfvX`#49CyYk_iAP1?eEHm9_{@OO8#9K&+G zxp}|a@7-4BI9sr6a`u5xJt91|x2Pg6jQkEg+uFYO>wUSts+{!P%4e|rv)@0)-j(j& zp7&Md>Z1*CXQ!`k*`K`s0Br4X{QZry@>cA-ZJOKu-?=+Kn@f5|>uY%#Z-Z*%btc`= zI@cdt`zznH+@(7I08QOZ&3UUoJr9CEkpBRU`magfzeVahHssGOqYty;;PNlt&tm(} z*k0j02X*Xk@*TOnE_-vmwqe_g2H4uM<2@CLFYywK4NDdT>D$zy)Ulx_1fIE zYt*e#^2fM+wbgn}+r3-Z;MZsMG_KqK0B>^h+q-xxD?jcQ!P1QJ=?yWZoxrHfO>yrw zi$i*&)FIXK=6ipz_UCbZ(GBIe1=}|5UDR!=y}MzZQqV$)nsb&G=0pQ8I?-kZG_FH6=wZI=l?!`lwk?ylbNUJsA%PTA$QT+b27 zZIb@qd9u7NTU|ggw((mxt&H4ZV-8hDi+Imi>r|R}r_RZ5x zP7Iw}Na;c;(x#-5o;Z@LQ-*cX{{V>jK2cC;067uX0P&1eD(R`BX|V~^Noq-{8Bg)) z;e?V{;85fMbgT&Sl4eOW5dxUcnY#J2oD(ZnFQT^rU{+)TKTRq~1}l-k_a*3uAgVAb z2p|%4n1BeaC%|J-hW6KRx|nLvWoQfvq%b+7DItNO1~SJk=GARiwYya4)H&>9+r9Sg zuSXWEl>5$g_aoYoy?fl>Ywgm;;DY;}Elj56f);kzA(3wDkbk$=ranUcX8!=!-Je>f z=dSx-Z%G%mTV~MZagY+= zMPE@$v3)s{Fbc7Z*W=@l8Ee|KRpS01>UCPJ{Vq{<;yIoF0B`RtZ}{!Uqjt*;LMGk& zW&yWx164_+lOrDQ>~DX1*Rj1OWNI4mo2wC7p0Dt zJ*~v+dc3B6Q@6WLqhW4r+P2%WO8+1GNdIbEpn-DgSD^}817`noIh_rt4LgVH~@Z@Zg3-JUbC{nHz3e2(o08^`w> z9eYk)$Trh$%G=N^?C)JbMz%U`xggfK`a{^?$va!r+vz<<>YZAIucW>Q$Un+I!jGa` zo~`Zb+jFF}yKTg}@qQ(n?nmsyW6q}I+%IPK`(2ML!v6P??R~flv*j*cI-hyPwzRjl z+`wXOWpSJE$Jt)T{zlyC)p{>dy0=YalD?x>q;WoQdyDeDlPjPm3OMkZB zziakA&u-8H_bbBPSO}3{LEF_6k;lwl?)G0-=v(i1Vy^uwcxh<+&)vPX?#+)=*;`#p zRp0O9@z{1c+|oj@BTib(O39>niN~Wf;~Jjr%&kRgaU~-`HJ>mBKTN~}(reOjjh=8f zsIwxq%#SIWH^(psT4K^e!9f8PCA>(H<3J}V#c8I1DQ!Rz{{RTiDe=Rra}PmCM4a-<1%7$_&RDk$W092nKaN$)=Zu6D z37pS_d?frZgdr5H$;+o$KaMo5n{nJf&`eWF>N2N4kdp^F%xC%haOMDBqxqknd13yb zP=HQw2@_Z{C&qx{ZS;wYAc7(X#MAH}5;2`uAMy{>s1cbl^N>6%)EqhH!vI7{{D1QT zP95@wP*4{<%|&PDIbf})%JdE;E?{&S48H^8iL!(!U%wly`t6oU#Hu z2Cw~IHNnd%HK@vo>mp`89vyyoC-FcL{HQ+@;~1*L^EZ?sGS0F{%PQrSK6tHhz-4^0 zivEAbaHUiQkK+^40KnSilmL=*85s~qL6MV}ju$Fvb^%ABgCxX?!Rs@fFssB0SRnlW z09Ihc3HZs1-0DL3rB;a<2n$SbB0;Cc^$b5e)Ml+V*G67-4xh%{-Y`k$;z-}{yZ=$rKW&Xb*%N6 zi0S-sE^2^7Fe0%&0=eTc0jDGJlRxNl>o|PRKq`|N6Z!uD42i-@bQ+10Ci7>u-tF&f z_nT{5y{6$B-Tk%uYjV~5ZXuP`ra_o9o>;BTy}imkyQJ%FQ_$C^-{0wXmiEn^cT<$n z<_EtYXjgk;_WQj(u-RVT@M-(K?#4#1nYCgP6zQySp3vTb9}CD(Ssld9eQg1L`VnZ0~I@tE6?l&9jFvnEtz^ zt{_EJP$tv3btn3ffh};m3K)u07*lCg^M1XOL+UK+9}sL0YyGkAuXOvni{X28?|9pz zeYV{1`;TFC?XGtB9b)9%-3`UJNBzad8Z9A!u?VCL$URzTuS{;= z7pa%(Jq!f@0Mq$bujPaV4~e0l8h9M$3BUqJjC2AB1OEUlKLGFu&=|`h*FPVO;Rp~s zGOYd{H8=(!tmT;b(B)JZe&pO=OJ6QuOZ<2^nD0Q-UynEb^)V0>o?LRa%K z0D5xt80ib^38 zs;i){af%CfbS&lqYGbR+7=lUGJUlTr`jdPHExXpF26Sc(B9g152mliSW351(QgVPO zR1GAO%qt?;NVd`q zwssXH2&R$Ln8tXCUEi25BA(Ho++0sh9H|WY^#~&ErJ*t)t9X%(YjDZ zK*8MGvvqdXlHg@6aFgaDplUk4kO}FQCz;hnzCYB`Ijbu{!00ZhTRIXhdcm9tU_@M# z1I|Ah;Wn@3LmyYRN`q*DsKOa4?xX<3z%XWj(wK&!!vdL~S(|zlA+;^KcTF zNo9}vicFh<6oEoCmL^CcNg)9}4RG$8P-4^OZ;KJlwqzuaDf-DQ+Qiib0W5rQ>Y}L{ zr3wJH2)J71(j^{A3#GM)MJL8On2b{uoM*g!1E{o`m6RbaROw}sbg42!Ow5R!OOiS4 zNo$tvXaQKY#U-?#sYsY0)nY3hF*W*)Tg0*mwHF!7=oeI*mhIe^rBnw3kr|xuD=v9X z6MqsF`cUz9TaB+NP@n=l!~o3Tn4%6!HMD*{65a88f_6vTtm zyhOgN`b`-}k(x*$L;xBiN~r6A6U=cI;s^AIMDuTnTtW zqBJd_HH8G!xXFxv96HNN&sK(-?2{kAx(Xf&uyd(A^6D!JVWSxUld{>m-tYT8%nHmWZT$rx4n_ zD(X{Hp~4>HUt8C1xH@e)qY}qfoY?2)w!%t}98Z@kz^3QH9P79$Z(M*J8N# z<_~Y_Q8UuH;VZ@(O%$!c=rEgo*4(n~H_p09F?oZhl$aC(T9uO#h0PX~i0r{MRjZyP zt6aY^WdR^xQtU1jVy?_0Sn4wXp0SJDa`NG_`C}YQrJnP;HI2=SmH;ZHZU)j?o@LQ6 z%>YR2j<2~#Zc3#idly#b!|?1feV2J{Zjz$?yKdSTuA!(MR9{kM)qWF$tZZ5$e|psYYYNh_X(uCK?g zEqQoMkrw5Juf&ql{@&?m)2aNz2xeoZpr0?9SMtMsjbwG59-M$nrS|GoLWh|=mcxLCfuktlG%+yM6h5* zStQW(2RX*ACuH9PHq`mJGRL~$?FB5d%B&+zwqOT9Nis+Ecpn(V*|l6rRdb?A7G1|| zAs(vP3`~$~sg>js7Kg1SqB>$zg)=Op9NhMxC)3hILfAzB>kM-(25VlJ%GI^hr}KZO zaV;%)nC9=ZeKsm~@}Ejj2L)vLjDQTW%Cs1Dm{o1yT=kZeO4P@9J*9NB22jS|)It_< zB#;K3AcPgA1##2L(oWx7Um@mcKyk@a`wWg)1)vAMPhu_K6xK697El0`LiLO&%nNIyN#5qg-Bo$r%^#s zq%K969}0k$V_5<{{SLWbDax?zDYE#q6#Y& zEaiwQLr^SgA?QcSn5jaBlS@WRd%y+I!%4VbP-gO$h*>aM!SJRWj>@S@9vi0vLfi8= zPy^gI9oW$MKpKP^d~h;SOfv4|s*(r;`&R~n>H@5hML|uJ9}yLB4K|YBk}D{rX-pyhxEuA?rdO98`5l1UD>*nt5xDuG`gh6MXY zv5+3p+!jzGuDu>`&c@kU4FF_DnDEaVD^({w{{X2@-IFA6K_aTU08m51+;JgXDvAL) zoZ|%?Ci4^d3!k-TfQrtctvD-eBD0qRCn6b0B&d>1nx70S@~-!)?k86zTeMiE#J0Ar zp@UUdaJrd`42Grfshnp#0CDZ7rV`V;yJ}&jRG+KM>JvbKZ>+-3X%O#9M{KOWqDFhOX zj9FDeg5pB7eNIV(6c|A8q%zH4Qs1UZo1SKn+8mTRwz|}D8xNyiJNlgh@ZB%aX|_a=pJh76rVCH5Kg5v8Jskov?{r>NRInk zmYT{HgXes-5X!`>G|0-MtYv|&U00h};wH*nie9RBI6&WT#Y28sMG-KoZxr! zOtBDd@PXY5qk;)y6~illG?lr~H&AhW^?y>Ijs>eY?HjwmS!5`E8#+J+M!FgRvSD-c zS32QEFKJj|&f^%dY`fb2MnDzd7FKBT0Q6%pY6vy?;Jch*Lld-?_wC!F7%P z!@-IL0%ia?Vj8OYR6Zk0u_e!A+xxA#R@Li^>sh&A$nEb?M&acD!n|{@-lO<9)XwPLix$gD;i@3~{Z!-FH`+ zaqTVBV%D|#dvZ*^SDeoSe|ER|Ozj>wb7x`hx3~S_*qgm*x3|f)Zc}CzK@P&j&A#7o zE$SkQN$WV-ZvD09es2E&&{x`4i#0gJYIcXWUwJ=oUgV2Mw!P5p%a^w#AlPzSul8N~ zx9L{eZ^fn#O=J^HYfah2ruzxyOAZsxIGs1M=Qcab3%S~EcKfS7QZMaqrsBm!d2ZM) zgvpXeTwmR)erFS*hV2@SS}v=(u*jgbK_nF*7E((PuqUjD#q%hXO&x1I+Cv{kw$ezM z6w+fz5YaS{B0NqQt!Z4i<^4aQGgYvx(*?$W7?J}L216pyBd!7hS#>Hzja4L2$3nyD zD>WDZpbknxs*?JEB%M(J4uBKZlYkEk{`xu3{!8C;p4IzBwZ50OTP{x5G0P}hjcGQ# zb>G}yJB;A6?b>I`q=F0_aBnZWxT$G%uB*ScG&=UuTTaz}clmdG&adJ&Htz)V5Ur`V zXa+L2ZQBZg*ocHnU>Xdu-n5oQv1oGUOk?ajj2`3t%ze#!@a)%kp4hjr_ItB8CeYBT zg*P0{%Wzecy`7*2ncUAD+g7&at-BcJX?LZ>z27b4ZTVGlyWe^1I0#`&F;K*+nkmu% zlESCW9}IM4$zuI;>%Ut+Ph7+w*J~yU-;j|8<(*C&g`#pw*1xp(B^jBqxR=5yx_T=uqM{` zXTI3pJA3VaWpn$(WN#r`cZksXOdK~xl<@wBa~9=r?6?{FpD--Nn4Xg#^k^9<#F747 zN2T_~Zk9{9Re zS)|Nkn$}OO=i?dujp@x@n)0tNH{sfMHO;-ZYi80drMf~5Pv&J+^7)9;iV5?79=PmK z#eY4yJ|yMN-v0pP_4j4oJ=xknYn%Sd>`!jJyyY9Wy}|p1_Xlftea1g?F(Y%^U5mq7 zvwG(!#x1!kZT7F90cUUP`cmPU?#Z6=A7X#xW3+|M=eGXwTDh8bM$3x;w62-M!tX z+OzxUVjG_J`_uMb(=WeYV}0j;irOLl-+X&7%h>L&KJ}{uP3_p@1?~EqPO`&GAq3@! z-RgeT)i-Hs)^$ozrE6X8Z}{80c2R`SSu?=D-~{$-!gZV%lq z+vR&>duH%~H#gt5xyKM6$`7akipDkD>iT`f<+_}%$KjJJZ11Y`UX5@~IbYb`+kQ)m z?u#qPcF#4#cNWdm-%Z~G%<+869j)dhJ1)m_xVRa{YRVuO#>uARiIr3OluZ7HF}vfH z{cXMdy82G$ZQoII)zD0(+joFT4rq}h!xYkZwow*V=aiz+IPBx`si?c(?Z??)aFIuM zb`Nas?{9V8xxU-+smF3^#Ggnm{{W90d!d$VGIbpBjrx77r(RVLR*kE_xwlnXS>@() z^6)w9dG;;EcFy>6-p%{D?r*f)_t=P3YQIxO)YozU0KG)(+PhYo8AlD=zvRc-0Hc8S3$uOm;m|uT8{HNx>^X~@UA#ga z&FfoB!I)$g@g&pXg~`-ab5$!Z%+lA`R%-4S;%xp4{H%MW?bD5i+!xyyeRj8`w*78r zwT<3eh*MAREuGDa>W1K~3&t@v>TO5nt&?-Ye>vb)w*KWgXzOeCtV-^avAwYW04V$eW!17uD+elKfAVjp55Ff#veo6yoYMn6qqGm3B^-+tMaE-qH)8!fsOWU zRNOpw9lyZ)rP-a;vtC2CdxweVwyuEf--+Zld(^n40|;%c%YxX6GDPF0Zr5H0dvteA ztx?aPcYgeK{{Xap$9Io$ay#2wTemo!#?y`324CK9d0o}NOJ&CFHsUVs_nWQDs6bWuNv8}(mW`m{Bd-gd$L)c0fUKkbu?YmDCF`=hn) zzU*6IHm=+4$F#xjsUq1%vtw|TqK;JQk~e<8kui06!PG{KnM#tzT4EwH z{4r)&9nq*xN}&Bh0b^6xLs3?=J4`zi<0no9`~~xfp1$E0>}X3+IZ!hDE`CSRl56*R@B7y z9h>aOxjX*=a(i!=-t&A`*M;sr*Y56rvOAw^$8MjH;%;*tzqw0Sx7u}hrgfY8-Us&Jcn)j1KZq}a_!%QkY&GzQm6#9_ITzLAc+p3iuiRgDFTI|mTdYf~R+VGr5C(QDDi#vWh zh1zfV&O>u{wk_@Wt)<>Y^#lDD?D)Zvk09^MS7?}1_#8a9zA2Z(wVY4>BRg|{-Cd{m z5BE9T3io+Gef{9&2N%1#r5x}bwYuC~b+j{Gx#Ty&03KPj@W(Gq_ZoKGTIjnG)4z%( z!}o*OWw)e-s3Yle6qcbNkh3HY=Z=GzmPD#+g<^ctBv1*HG@0pyFtY%kERq=cgn&SZ z%xWDo!c$cWAP#c(Ywdfmed_Q2$?vZ7orGB0z~aS@F7U3niif=zRA*FFZM`wRBq`&IU(?I#nu+dZChxVV$< z4{$rF_1l#0_WuBL0^k!jtn41r1~jG~%2nE}R*)^r(#=^+z6{epd{!@e%kS6OH`kg+0y1w3#Q zB`_aI)P?~Jxd=ZCl4AZ4o;!jK(ib7R?BaJSP=GLya z7IQio3nLgmfxy#WQh_F{+DyA_IZjVv#kPCx&fE|@seRX|)LPhWBz$1tmaEId^85vA z*7MAi{{UlI`<3kf0I~k{Z7%G+=Jre4?{e&2R#)8j7ijUV%0rT_ZS#98dtOe}(mzDrOX{_1-r{zgB?cLR6bzQp(YkNd>-2eqzk@Arpj_wOBk&vfwI0Jw{}xVAT~zvMQS z#@%!_^J}?fvodWE4CiOpbWLvVrM7J)7DbF2lDwTZP+;JZA^SZLMuKn?$CyOI83xH=wgHs}m%XjC!3n? z&n>RgKIS`njPCx_?vBjnt+l=bti$!{=Q%Ena#( zy0~pMByLaCwT%xHzRmsoxAqUu_gC6y+=ac@XY4r6;NJ2bk=$IByTgR#xb4mO+VA#z z`!?=ve`U(-R@UK`TJYn z`&&Dn)$cwBn74TYt<8@kv)(BUF&>4+(!kOW<&K4AF2CfX^DtIgEj}RIHaELnz*BE? zZIzTu217E?G-)JM{wEb9S`$@mjE~W&e8zyyVP-)So&k!=unc)dq2c8|S@CL|z8C;) z?1&{)9;Jw^gVY!VK)?X{Y6<$A$^dc{&<2Z6C zm*6Xc29iR<6B;B$ojPe#Ps`(ps)o|-ALw{T_kHPo!he#_wBNVZxci>n><&inxgFzT z+MBAjyL)c@-KN}kwX=8kn}XL$I^W%D z47U8X)Lhcc6n#aDPs2W#=vY_`!j~tR-{Z>N&vm{30Q>R#t=-P&Y2E(q?Y)`oP1#UX zc9*u68;{%#mE%KU_qG6)q{t?5lG|0auVv=6en!4}`5wR2^>8R4>HX3TA&FoP&wc z_<)8q!pJK_0)R09Y3OEpd24qU-)u7OvzYMT*>G_otpwT8l3P4&-31g;!f7gjnwecuv$_5~c z&!75?iOzGMz+i^-&@^wng}8GJqxESCHPtmfUXW=xhSJneu<<|qqjHtxOM4C@W3}S;Htnq1x3c4`TiRJcS}&(%K=@;|Ja-wq`M8%GK|qgBRm5fTJd0&W zsRY$nO%M9vsdxqXo??B%bN2g}-TqqE+gI)TZ)>;Uk{VoHMmM)^$_A3xF5V(XKn^-K z7OkVAmA5RdS#0giqS^F(uQIGis5e>(Lp7oPc-c0s2+g-=FH@lVdurMch!jR}bdU%W z1OiM3$Q+Fz)TMa#aXO0_&{(ot+^#clO6;GFb9DEnHb8g zPJ>efPG7jVF59)W-FFW!$ME}Y?*7LgwZF)2ZSAdJ-fq|?-(-z&k5cyK;ccj?V~5LY zH1fNF;~l0}bz5-3RS5-{Tq4;bCKO!Lsq2+a4>R(^6uP#Y$}~5;KXJSVvfcgcXJm8S z7cIzt@^XBM+Nb1dU22oy^AW}#kS{)>bh+KmJX-WbP2BG9qIH>>#1y56%si#PcS2Qey5V)snx=4-WfR*&p&F?5AY=oA#IO zk7M?SCBS#*b#na21NU*V=XP9QGs1A4+seN0kluGL&g!=*zvs4gUrdc}X@M5W5sCZP zOYQQvX7!vo{)DAfXs7->WBMM*c9&wm2kmbO?Z0qyo4)VAv+S!qq1+wEzZ!R)$A0G& z+-EJx?k7_VyYErnNhU}pvx=tY`<(W93n^T>BSU?o{iJPv(l`#}?QS34e)abkw|Ra= z_g%Z&-PLPlV~y-xf!uC41B~DkYRtmhw&3e#K4u!A6N!sCqid37e?lp=seiftaq;sz z018QgQea7gK0lr^?l(fIBohXd85x2k_&~$UQVK<35s@YcpA!O<&j@ex2|%eUC#1-z z5@clrU;qfHBA?1=PJR;@AO`|@fq?`PCm|FdgPa^V;xMQ{8eoG`D%GfyOaLuIfI!Yo z3{GMurVoYy6r^uGDS`R9|ChxS)o~_K#ri1fCW_)_|S?FYXI~V7zD!}KuIGx zn*RXwJ`sRVIt~>svrw=k{AW5;1D*kB1CXUrNd)~w37|0_5B0z`oUljLs!1S_03su& z!k?Z1;61G543Vl}Pf;vlm|}rC0>?R+1|n-tzv+NH0R_NWFe*hRlOP$)(!UHL;2}fi zs6Ga#VGJ+(~ky>F06-tv7F&TgupAs`38DJRs3t1AN7@nlo2#Kdm z83HqHfo**}GB8a*=vFZ;d6O%d#Be~DA>d3zg(i{?m@xzpFq?8+ik9!8=cP;$lBZ8R&e%r7dCfR&C6`HQ*PuD z6%m76F3>br+Q)Npz02(n6rI7pepk3S9z&Jw{%d`FgL?M+jo)6jUg%mDHo!C2#}~Mq z%QM-0)Q75hIxzf114BI|(knR}L9ggisFG(msU*y0PL;q2asUE)lh-)uOamNN&MPut z3JJ@k$ei%TPyplzAX1={Ad>*+fCEiNut%1XL{cl(w7>yr^AFM{q(o|i20DX)2UTiE zf`c>Gpvv_CU=w9&naV~?K&bdk)EU46tS)AU;Zv-NlUxA%ig3cBuv8c|fDK2EcmY8` z$*y^U&@M|Rvp51VC{a*GnKB22=3+9EKRg1{z;a;cKM0_#gB?izcpyOPMu;St5CHn8 zF`X;?unrmyha(^br{^+%90C**8lnN95D5|2=StxLL4uzs%3-FlN|0m>@N1}W6zMWU z9|7_?*TbbSDFGA_q-H<<=jVsEo)0Wf$eQx&A z7y~qQ(4-0iq*ESGYZObc@cl(OH=UNO(f)UR!`VxW)MO!1OWZ@L&{HK*J`s(4UI?SX zDU}-CvMei+tJb<$Z@w4!$3B|t9=K7dAlBOv=9wa7V?FOOX(=v^S9-Acp3Ng_pXr|| zJw%WXN>d&w;|G=Q;2xP0Oo5#`^gSaiEKC&`o&f@>`L89Xvp8?dk(AWgU0QXm)hCfMca3t)Ot*W z4GM);*nlTao{?G{cjWMIQtRvLw&j~%>eZ#ys2vHa+@k523?`%=xM~5+_r4^3yEHm$ z^ihSd?4TGdHGpdp#Ka6%9yBYJI>OYBE#2N-xwHtVQuJHChIODx4;eFQrk{_)4Z?7V zb%vMv4nES|i%^O$C|wb_FwF!quq?#Ho|GMMMBpl>&@G!x%x+%QY$|}E9ZAwFrI-al zrzwmWS`K2sp-bYueXJiXx`Hbl?28SxrnRLet zdAWF<+_}JHC?;m2L|08PRI%&-c2Msy){GR@X=T=AuJCX@boW#f(Hk8bx5Xm=I6scHBQe_^ZugSS z;3)q9Qr`Jg^ux3Awc2T2%Wd1{dx^(x#`j^e-H0Q1wzGLnC@)(MB!lIE*zop>?mG9L zcDRPg;iw6!fkGhtGe5@zaGVsa3OInx8Il~I39V#>6o4@b)vgwV+Su}z9^u$+xn2vI z1UwHT^4ugw^gXSrT#w6tjOa_wCww4HdUk>OzY<$(8e(8l66*ko^W@al%p#(-}s2Dg00*c6>i6#i}FlIg<98Ar; z0Iy69Ms&)UnI)&M!Uw{bp{qEIfusTspFfJ_^8+A$7$6dMV2~#x^uZ>C#7NRAes~6y zS{X%kM~wYPA_#~hI^Y+TzTuV-SPDR>h(C#}2pCOq;)xVQ8l255kcc#<3_W!&t~CsS z`2PT>{aIy&88uE+@DWln>Pd{u^#k$6aDsW)c;4dCxwG7rt7tBOimTgT!GOr+9ysUS zT*;-J0&?GB5gO&hMpgRM7BT>;h%^U0c-Gg*R#tdg$n~p2*!>}{5*R$1(z6wSFtEWV zUlG!$P?gM?GBW~!MJr51CBkxPBAPI*C`peI27Y)PYsIk332no5ft?}<>C}+rT_(ILo1ekTS|gTFn0d95~DiRKyV# zK3W4kVx%7tg34P+6r`bM3XNuftzUc|PCXHzUO)Av2*+JFD`|oD7qYb?JgxZ*86#F{lWRgfv$(843|Ijn$H(EGGv{004s~4Pm5w zjei_su+w5iEC37|Ok^?uF%l~y#{+WP0A@(0WGNB>oQ#kGj3gbx1v-e%XUqjY9}rGD zRi#MgLm((oA5a8{CQpyf4p~HM1`)fO`w&7vy-9Sd52wSRSQr)*SAkI7|u6hrr`-7mr zrh2B@-062K4L{qk@AUrwQtN#)sjpMfUDI~0Ib3{BMDL$!c@EOMx#czn{{SJvuuF}3 zlw7~Ek`vOoZ9&q3iHC^NDslYs{#*Y5*WXa~p5?t$+jQLD^m%Rn0F|l7#y?}}{{UkD z03>w2v$Ic6^*gG1hvCf4PFYmyI#sB$a|+X_sb8vQ35q8$R_Ba2?_S{S z&G_8$_rG_!l9Ud1XR!96s;~wq1Z16aoNZ zGmL*qy^rtz07Unnrqi$Vz1_Q6)jL%@rw7SC<@Tpv=)3P@tfiDZIKw=?_e0s9^7eO_ z^f}87$Z$J@efa)=Y?p5BTW_cPJ6o)(R?g=_%a+nIBDnn%Z+5$@%i4No?%&#cw^;2p zeVdbYFCkqhpxb37#+C*Z`s*r2as>`L9igO0Gu5VCF8X>c5jL-zev=frqGgL{Z_?vS zeObl^(nLEuOlbyL?e~25C$)XVozvNS{nee#%a(Th*KXc%bC2e>*4;HN%S{Aa3sG@= z*-lu8YFTpGVVdoA8=Gx$uVLwzZTD}q-*vr@$Z;Hw#>LI;pmtoh4Z8Hd-1vS;Es|S~ z+^jP-wj`^pK%wx*u6pO8^d76zKA)?qw%bsj6yIU){@eFQse5~?r>J^u-ENv~P9Jma zJl6M@*goO*Q(&kvu|A2#q(BeGu_*z=Pzqz%3T`5-m__R>ONb|K?a!lm)<_d z>b(PU+xtq_=$plo)3Gz|FXP|kPfhoCPhFkcS7+4gRn1o7Ulx~t1D&t!_V?}!n|s&& zQbCJs08p$2l2&w;0%iz|kA^=m-J{#QJY4;cr{Arq7fX|b@$LLS&}!4%MR&RsudY2i z02Fo9rb%=l1t3a*A`LKEUe%Z24wX@Ayc+|sJGZ&}3%M+JcWm!}VaTPMRubLSTbpgh z-qpdcZN5TCdspqy(^}Ajo;=5*`u_l^dJj=e{+9OpX{lYQYyFQ=_h+?zBi&sUx=yl- z?tj%BemI`1`(f`FwqJ7nslV(#^y2nu%5FA?Z_aj~C4Da)!B&Uf@pqU8HU+_{TzS%y zL65C{hx~`P>Xokl08hEe*3~Rb9|`{eCVv%mp5NWQH+Jp0>9%-jOf1HH4?KS2{?mJ_ z*qz?vxchd-^Sgbg-EOYmP0f_`IiA&pd$&`WvuHc+wwBryUJwezj=1{|*}nYg{ZDSa zAE?<^tHe3iu=x|*p3vX){o8dtDt76gPU{ZGzswdZ`vrnos{{Zf`VbbB+?`>NK z7y=kBn&Z&@+3e1P*ESvNRbHwv*XJj>dw1PkU!&jc*}LpYP|tP!ruU1pJ>~6-9m(0- z^SMG*cidg&^f?|kaiLn~-*L8m7Z*V^F$81gZ(Q^ayU_ZlvDHzkr-vAQ=kA`D>is9H z^y_!0vhQ41iZ-G-Sc-yk$N``7%flW4rED|G)x(xfSap$3pl7SVe1;NDT7Snwp=aI8`g$^ljqW@uN$Wr)6Y)B1_FwA9r; z;Co%P?v!o+03GOYobVd0ZW#jD-@dJ0k09WPE(8m}NHIA1`}t$|SJD0Z(%-G=YW96< zwS28%S@2em)csG`f5_c;w)g)4<8`m@bQZ)v@m<~;oSDjOcibN#dyeF`ueIFmrEXii zj;2+iZdL# zy-!Da*)+5*Nbu_IaRAgye{8V?pFG5XDNhV~a&}g(8;asn{~d`s}6hkojuq-=xuqMAMD-A_HAyBzez7$WqUjIFs@%x=v#(Hq(3o_=;!d? z^XI1fzoy&t{{UFMHhofBW9{ z_P)RmrvC4i?K@yT-+OWV&3le!C9LjlF`Xc3F#uN|Q*3o~-G!>QkApuH-|1bHR~KK2 z#8&NY6ZZ+aO*i)UO`XQqb!*bNm#u|2cDL;?SF&x~qXGb?IxdpQ>#j^}XDy+G`g8 zN3n4f0%A2poI-__sXU6+;&*4Ve{)tB_FbRuZuN9-5N!C4>)a?$QtfqY`K>6cZtH>q zU4RZ*;|<-4+Pur^jIB=opQ^sim2B{$88hw!?Q@Usal7wc#<{lI^P8JVy1%rwrq>E5kx zyXlV{&szTgq2>=W#_zbES98U3n;YC`A-4X;<7K+G$n4g`0PR2$zecNf3kMehQGqL_ z4nAz_y+5n;?xx)@S6fqhye<8E8TO~6`lmzdT@`xngL=EWS4ql;^7$4^n|51!hGB0_ z<@GM4mbi{|qOOI20Et@k#};`eJm0zHQ;1LLTuNK2me*{|P=s_B?OAkVaEbLjWT+$b zfkh`gc5Uv>Yf7ijT*}r=H~K|twQTL%hj+%OXL|$pSb_OX>P^6!2z3bu(Y);{{V4Mk5Ab>ll+g=bQZ5e>h|Z@!mXRipXhw={F(eS(t6(A z{ZrfYdw!y&x-X{OU(D&ReZJcJ5AGj>PWkLT?;W!5R@n=@Uq7*A9A`Ccl(OylA#9bX zauVm(j%OcXdl&f+chjEV`-^we?GmP7_#@uF!M64HdVa5N+a9M}WkYX-_jjH(cZX?r zKeye@$o98-aQ^`9oX*d1+e?<53wwKnThzO)mF9OZV5y_2C`cnZW9lDC^?rlaI!g6@ z9_KS@c&wi~`lqCIzLUK6x~esuco^mHO>O!_dW*Qy6y4U>tv!u8NI@(>AlJtpcB>rI zmD$Em7Tr>Dl;iRw?eFh)$z(3__R+0hvAyFtZG+sg%5hwd-L>tvdrj50^{pFiR;&;r zBAD@>q0n^QcH7zCtk+0u8Pw_Ndadr7>eOv1QQXf|zSzF>zudPRXSZJTZ>(9~+&1=o zweB6qTYPUkbd_DdICL$(Kan>U1=cE$AVi#e_wP^R{oaE1>pd|ywB@>`qCaK!$GjHg zbbWo7Gt%9?$EOJ6LX~x7xoukA)GF%A<65{YI+c}y2P)(83)0lLo9a(0ApI+EcCM>& zHOj}(gKQE(5mJ0+O-3jD+eb%uf+NfHgB6l;@HFX*dgNoEOcO}!{{T8r;}?gG1PSv{ z(2CdiP!UWGU?5dkHHyiK(gX_9zYJ5dYBC%L1#1%(ng0Nc@gP)JF1cr42&Mt>4gi_Y zD%Jq#MAUq;!Xz~jT52#)SW*~LYe9etq^bIiDbRtDGvYATi~$uO&*d4D{IGyW2T`oo z@iKfduGWKE6%>rkBfq8wds|mt+0Ai6Q1ZDYn;oBBSVtlF%7H8uV6~ePi z3<|8)GV$x-F*p-SV<-YpLDiV>>6gc+<$>C-84yxMC}aa7C_#ZeWMUyipeso#3{6a( zQ~1Y8#VaJjU=so-{RGV-PmV45lSl>6E`vWFwI%?JMR3!|1JKYIs0K{@Bj=4U{00L} zGa@3N82Y5n6KjYI1ON?bIfLUMpA$Gr>%a=7H5}k){Lfrxi5G}tIG_W=^XcJ+oB)-Y z2%LmSC*nRI#|>pm(}=uKN6tlA3w&K<&A4)TB!jmJ|@39;-y5fi4&Jd zpU0t*OiQxw0*cW|`H9YCj2y|h04p9jf=G&2G1mpNm!JeAm zh>534ep%tKE}$R>Ovs?Ar$a(Im>6xth5~wOz>ARL50!v3A_|a3mJBlnm@MN>e_^Xy zu4>w65&gh@sBxX?YVUP+1*<$Cb69J;z5f6cWo_Hz`;MBQSh-!M^y&JNj69@u$L1dO z{ypgZ!(Gm|pi6Jm(wt#lIDF6E{{W4@nY~BbcCV%S!~4FMY$o-meDOz_&)WURx9$h+ zx8QfSyRA1HemOW3x4HX|-0qxPvI;hxRxOs)&-8^eFUWdK6eZA*s zvy4@7wDuob^*;0T4Zm%F_4@B^zMbv2Gx>J>k7WIa_G^sxgR|}Its`FUE?rZ9-8`eW zsdstFI0dZRAdzclV%E@UALWFLSQHv&P%bf>Z?Y^{B^0Fh8XbY%<1QI|}Vg+l7cB;dYmv9Mq zx0c}pLZqY(QCL7gFd~?0US5C==TcJVrV)Ood10fT%0!2xrnCpiQC43^&tise}+PLTi#%pfGvaoP^fgR5_AuXu`-s_31??P;En8mbmLA1yZIQ(hU6Y>uWo5u;r^sz6g%iUiJGIP4))G z!=#u3=CP!s2#6WwQ;US=dy7``L~D{t%91Wydxqk&t1uI&6DLBSDE@JTs|r@4kw&$2 zMn(nK>MbBFf*ViuC^XKPTZv5Z3E)1_U}-m1$g1m-37K*Xnnfv;d~uk;46dQowcI&2 zkgPRJ6}E%RE!L+f#=C8$JVR2wUq~oqC0MX3gpzI$B$kapg_#{NSLs<0-;s!BK?S{6 zmK051P&ANaiu^F`%GWJ`FWf3!3+XayAo-ZFg%GAZK|N~%aW8Qtg)Cfkz+-amPM{;s z300H-0K}jkV$ni+VCPtzWSc%3=7vQuRMmxKsK7&6U4x;+FP}(j zWU~czk|vYoG4b%i8cT+QY=K~<%`!#67&fLINYx@g9+bm}FiD$xfhijTt=cAtQ&DHv}pxJA~;R6>y2 zj3kQcT(T#oFj02o63L-E-+1mG+=WxAfMo(rRohssmVhTHoIYBttT5Zoy2-^|_^)*? zl2giDTq_z{;bKw19%UM`B8TOP}yYKHM>dYt>aR!i=$JqQ!(7EY|uk!ry`F{4)I z^J)8oPI5+5n*|Ii6H@Bc3jnhM3{O+n81AUFt|DYpa&GFhz=a}19N?W&H2KgRhg@Zs zWS15NdV!oU)ER+!VM!qQR7g`1k;8LaI`R0>dIn0xU^@>nQgyD5g-&x4FsC!bCe6sj ztAW*p%UVcj2tZ_Y6XpWCWLF33X=P}~^Z@bOMj?fSTbhF=kL{4bL`-KO*QGI5wXWof z+B^XLrt-p++3%e}aD6vXaYG2#CXJ>^J`;kiR>QMXB%3_9JF_H#`+;e-4G$nR#JV|# zCpsD&Z})9?HH%`5lv<@$iK1CfR6mAg8(!qIaf1uiu6;42g4)bY z1eSr)f^nO=S5JdwwHR*&=EpH%^&(tV(ln{KTzQLXaK^9zGx6!u7Vm2)Sf7vXWn`vj z~kbHb&4b?30C8|~F zmcAr~e}db-v|A!#STTpV4G30Pka`R+Gfy~-A!4h`Gr+TMyH?Zd41kv@a4Qf(s;om0 zK|&Z%0iG_ZwoA8&lID4Tfs1duJz1|ZDNw{ULjx@ugl5D|U{}WtO*pPq`WBUIm#i56 z>$5H!WE5p8g*{7l7#%bq04kEENu2O*ZmO>?ZGu(voeWcT+1e6Hl1#}Wv#2OgB1OnK zieRSWv?h%-*H&Y9`()b}9NM{Z<4V42&WskF<sn9WV##CW}iOl>X8Bp-GUm298uR>IXi!b$)ftp-K}@bRE(!k*13p!a79# zS+;X6PYh{m`CJ98-V??_^vjZ`&Olgb(rp`6C=}|pWWe}}<0Rt>je{{Z}Q<1vH) zLaTjRq!aKMtES!wG6Dy{Up9Qq+R)aH(M3 zEr@`s1%Dh;t5TE+k_D0qU14d9PMuP~K>=V+dQN0Tah$Zq5?WLv)l;N_00}Hig&M&# z<}yrB95&^5fb(sw>Q-RNz!K~V=_pKkYDEI+t`(LRxdLUI7Sw{4{WdBUZWHAKNjVCb zAB^K#{{Z67qn4L10{v#%+aA7}wLvRZKmle{q=g3pqj_2o-}u1p@nX`TP!y?f;P|f{#TDz5Vu=fTd}xHYJ3Ao_~UAI zT-Qp?eE$F;TV>hGuQFfsv$wsy`?&jl_cPM}0N}5>9jCp&eE_$yzsRo{$u-B*p;v3j zjlY-{$Pz|6RqE8rGW$8pYsBbnw=K2Y*h}`e7Vg?$#@*{LYVO_K!C|h$+(%R54j0^~ zY9`xIrm+RPp6Anx;rTuL-L#f=yG_mOyPL!%yDMtRy87)Q_Z?(2?rpX^<;$X&5-+pGR^tN{Dm2>4QsL3cKQD6quB#}7`XmgV7 z+hW0dqDG?)+1YM)drRAU z8>hCOXI;Bo3_z)f&kaKHCFUB{Kg0W+5ygFta6OsZJdZbXn(j{f_XCUA?{~euXJxvx zz-;b!5!*lP?^$~{67{*=T`b1s!6J=09MySi&zHKB!op`y-nEjVhMUZm54WGSKYM!% zxwww}Ce&9a*z`-{g=a7&{K5(x&I-Bw(Xw%)1y zYCGR+la|XVIF1kccAlFCEu_~=5MXpGSYiUij}Mk9#N$Jix$u%ejYR+eY0cE5^Rt)59cFM!-RxanzAba#A(>lX}3 zO|7I7ez3%2kEgw_SGwyBw!7o7?6v%myFW9me&f6U0RI4ySFzsZ_q~h0hW`L%+ME76 zgSe&`bDYhl<2d_P)#`3F&CaC)2qJo8r+)mKO{`im#KMoCbtk9bZ(p}Q%ICh@KE(Sc zVcUFLZ#&}OXeYQF#hcdsOE>$czAxM5ISyl$+bb>Y)xH~!+y`|hQze}=oIR>KZKrn) zEdKyf_agS>gs*9SCRf=10CM|YJKMhO?ym6e4UcwSF&Gj1dNmLZu_YnsZ9xobSyr`g8`ZSXzI+#5Zv z*KuQczT-DHHhW9^jhb&B=HG9*xnXYJ+O}5i4XxKHBtr$BxYahenDQ-eTJ!PZTD#M> zy}b8ZX>*VFW7@xM{m0tfwnHA}?OrE&yk%r%celM8bluvz0WiwaGtUvbwbO5=w|40G z%tQQ3+UMD{?B3Mwmmf57CwG5~kFx&c-QVUr6OH#H?en=V0d~hP?N@tp)_Co{;!6e` z7VmJ@2oDEJv`|E2m;MziZf>7)^t0hS$$mYjReGJ*JnEZ`t|}kmjYr9Sf_>w5J*#c( zpWWYQd%4E#t{a5$%1OB#efzCt0nb!Ko^=)XDGu*=3Z~l@ieb`eXV;L?k3&ex&5&1ZRY22F0*g; zy8*-U3JDC?ZEiTDwY-;thz#1K9CPnaQUt$IG^$R z!FK-uD|3?ehuwd3eXPD2?(LU{=Wgz}&AWL`t4O<>sc}&k#gE2umAXYQ?OxQc1@(TX zPyEMZ{`D(n=T9%_Zx3z0)V5m==i@ui-Twe`d&l1n?cgr1@3))0_xCUM{{RQQwsl(M zHXJ3kZJz6Ts|9Y}4WQI4fN^!{d0KY2GVF*;@FRDAyNj2W4*273+q(B}TrF^*^xlYLMjm@32T(jF- zK3!VI-2#Q)_E=vb(z2-5ZUz<@VRrk*;m8 zsC#9B0hAb!F)b&kCf0@p?iaLN2e><~-sP`y-NV}b&)VmDoELTWcOp2he~Q_17Db)@ z!rtNR?l$eQ-C6=|x)m+v%m^;;XlmB2lhtuuk)c(xReNnGw)l7OekIr2-);DBYrB7p z?Jm)6#h%~T9z%7xP3EodEzR>>w&}N5nl86=HR1!!PSDFIBrW>O+RF)$baVUJl+(wWx)7-xO=Hp{eoJGwiA zb$xAZ_^uy&yL-|Iv~1XB)YAZzHL0l>&wBp=Z*AF)D01}t4-@|Y#`gutcZ2=H{lan< z#qHO+e&pQk&J%fl+BA0GZ8qZW>rKK*RNU_`TLn~CL}QbpcDlChv~LGi`+UD;OH2A2 z=Y;XS8neRcd_RoW~fmP1$xc3WZb$Z62P0Qcy>2`zZ4f4kQP3>Kt zRja|xw4dFqVO7uJ#O{By&uVOYA@;-Uhqj)ZS>15Gg~ji=i$yd!=K19R0D9$K=##11 z_V5E(5IixZYN=IK+-tn%(73t$PM6SV2v!ClYSN)a0~P}|KZYL@7>o+n1T0i3(mcLe zl6;^^B|tIq!1Tc7XfpRLTDNlj%js&>y;m+>y6JA!q#kA$F5Gc$*Z|39Fu9W$RBf!1 z-D{TN8l$%T`1X&wd+&Aa&u(|u0nGP4&yW8AaJgq=$ZhWIuQP5=*ZsF;zb-9r`CD$J zy_*G`3W*t1W%jNGS~l#trB%InekSSCQIr)UO*W-W_D*(3Q96vEvKO@u{|EJd~lvT2VPd<#m7gf0J8(644~=E%+8=reNG;r zc*FixIbFxNo$2=9_Qk~RSZ;mH_ZNh2RYj(}yM7mKzhB*6xoXthYevMgjOmyYj!pMl z+PikgoADOim3JF!34W)hTz1QCu-ft5HyNaC`2D`ujo9s$){whxhThi8X}7YYN}yD* zG>nvEvzLJvZP~~4Joo!x+Bdzwt{3~Y+-W6ki!M6V{{Th~%IoP>-m7V~ zg=)3^ezF%CP;`Cp14Eh#&jJ;3MO>T z26+ynz~RJ{u#GkM7tV2<2eBUO@*LT;IF{^wdu_d2>K@(eSGE_emC)l$4Mt4-J{X&| zRNK+4i;-SG>eYCjc7KRY3w_4@q3?H>8~*^E9QV7O@yK@W*#7|Wo-8iYY{tM~N?Y7+ zZ80Dkw4CveNm$#J+xas0Zmqe@l9+~czupJj$8Y_kdl}q5@AG_k=Xn)-J+s)|tZu!R z?jH8!)!UBQUN*yDO@`4ewe8tZNVJ3su*Un>TS{%K)9}#Bkua3c<^2v6_WuCF5a-p_k`11h1>R=(PHv)>qUMI<3&JP#DRkd*kL>Pk-)ZQcFF&Mw&8_X9 z`Ct1l@6Gz`IiC3LA7=TM4`S~N?x$<-xYgTk9sKq#a@#9A&8?uph?mgI)C_ggtJ%J{ zT(QRuty4(B^xNBM+kbA=w+=Jkjt8V3-S^*PdzG-Y$o2<(c87axpK34IyW1Vb#q#Gt zxGmX3XKT8-yEmUnI!Xe)Xfe}lIe1(Qom+8~jj3hY${Smzdj%jByuN)@3WSyNs?Xzv z$2cz4jX0Wr-d|-st@po$Uf%atviL6X;!@k&+g#S^xfa|~(Dv=Qw4JEoTVDSFk>%%k{{V=uYFBpr&#~U+`>E`IEpqE!*|!7SJC0wD zvwazeyMJN4yK3rNFla78Q!EBtRt`EBx{fnF2B2_Fe?rpL&+_Wm<{*W>=h_=sJw>G0zNqj7s{r;Zq+VfVU z=i%^-r(^z6e(XJwy>DgrIrfj=+)m!g1-slmp|-ov@b77SgLE5dYjlW(gpck?TIF0i zZthmA?^e~f97&>8x^B0vvEbA1ldOHG{{S%m0BGLh-rI4z?)M#`%diV`VcuI!#|3$J z4l887>dIIJF3QfVQtGK@l8NFg?QU(fteiy3SUnExuY0|-_XlXZ?$Ylr2b{5V&b~jA z+U~8;R4ZG$a*qsz^~UwQtdUu1xY3(6H(OiQ^;+CpaOo)wCK$;DK_HX((-fN0avEws zLI6@=qj}8~oV1gabsh%{2s`cNy`Ix`xxC?1ZEF4dnx3k*5w04T11SXJY@1M+N{Boy z{{SCpbKcLrkG$Wy4aMQQ;`?E?p3!z~`-)o4?Z+XyJDyzaw>K9>zuR$~U9|yoH%#Jo zxt6*j72$HPrZhc6`;qrIZS0rZpS^zT+`s#KotN#eaq?Vf^#YdWx0@E?_)8Yc0!7#5 zH@38qQbsj-t9oFB(ox`H-{YU!t3(AZ8{>5-}A~RJ)B+e067O5gK)A@`-^as!v(fCYYf-c!YH3S5Psji7IEJ z#XNKHzzZmJsi37nB*BOzPznD4&k90D=`jaCH;qONOpa9JK-9xjnicbWBoQJr zlhXij6^JZU&>8xq$A(#ud~gad3#rU85`K^bNcfOQpT`pF?cg-h00sq#1ck~olT)al zh^P~T&)SD8fc(v528fT+4^jt(aMZ0y;{rPY^pPTiUO>c&6DQ$`jKb0hjHvne5$-D% z9wvlWNS`w>_>q<+C#v9TGQqV40O^ASuq;&NYPdL(~GL0sL#Qy*j;fMCspEvmeD zU*yK()vhC!;&;l^a_-LPm9wUG5Yy$ty4-th(}SMz*OJNo$EwGF&$qDWPh|bH_eZ_{ z^F5I4l>3kOOWd9dvOT@+uYA4Xeq)opV~OJT{HGmbbHjFJi+fAL&gAbdUqx?MQ-ww+ zJWXrANL=$*4dX#Sv2B{QShI+ey}!yw6?bRs$F-jBY+CAW{gwCQu=}aj$taQsPEQALX5Fi|hG?{{6)}-Lnuh6K9h}0?ZUkN`6#rNOl6?M(-0L&6*QX3>IcX3!{HnN9JENxO===ynPr6?pcqhLi68i6!6wLr13;-ce!$~C8gb1MNG|vDh0f0pS zE8qZ-PGjLCrU4EgC?Q2j�|xb2wUnp?t&5n$R4K8ETIKf<`!?3GtEvsQ^+2afAY& zoCvH8gvZCI!2mSYk+oH|3ZDQ>p9+XLBm~fO0S!#@8ob$fOy!0HHkE_K8WLifgrC%8 zj2r=zQG(Q0Hj`1;Aaer=HlKLZPINFH$n37x>=fpHS_npDYBVD<6)!tWq zaNONqw2n&c(TjZv3OZo5?RzzUrV6}2HBq0_Jm?7{!bqQhoG2t%0D?^9K_VkCN5o-< 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�K7%7Yorw9%Sj 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�oEB2{5P>cGqx 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 z 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%0A{?EZKrj173J<7h09kJ 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 literal 0 HcmV?d00001 diff --git a/smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/login-form-open-eyes-close.png b/smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/login-form-open-eyes-close.png new file mode 100644 index 0000000000000000000000000000000000000000..89f85301e181ddf8f463b8cf4a75454271ebf404 GIT binary patch literal 4914 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 literal 0 HcmV?d00001 diff --git a/smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/qq-icon.png b/smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/qq-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..87cefd14e216fdb8870c9837902c2526c412cc3a GIT binary patch literal 5353 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 Hu0mjfP3RiF literal 0 HcmV?d00001 diff --git a/smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/wechat-icon.png b/smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/wechat-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..23a41d6ecc1389c8a10497020a0cd6ab89366798 GIT binary patch literal 6657 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 JPDHLkV1i5|ztjK# literal 0 HcmV?d00001 diff --git a/smart-admin-web/src/assets/images/logo-min.png b/smart-admin-web/javascript-ant-design-vue3/src/assets/images/logo/logo-min.png similarity index 100% rename from smart-admin-web/src/assets/images/logo-min.png rename to smart-admin-web/javascript-ant-design-vue3/src/assets/images/logo/logo-min.png diff --git a/smart-admin-web/javascript-ant-design-vue3/src/assets/images/logo/logo.png b/smart-admin-web/javascript-ant-design-vue3/src/assets/images/logo/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9b11579ea73c684f8817bcee35ea21670ca4a994 GIT binary patch literal 6053 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 literal 0 HcmV?d00001 diff --git a/smart-admin-web/javascript-ant-design-vue3/src/assets/images/logo/smart-admin-logo-white.png b/smart-admin-web/javascript-ant-design-vue3/src/assets/images/logo/smart-admin-logo-white.png new file mode 100644 index 0000000000000000000000000000000000000000..7efd9970a2273af11ccbb5c89465f826687abfc8 GIT binary patch literal 8106 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

Cre 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 bo}>JRS=fodH9tIM7)4f6NuosTv)}&!qNPln literal 0 HcmV?d00001 diff --git a/smart-admin-web/javascript-ant-design-vue3/src/assets/images/notice/edit_icon.png b/smart-admin-web/javascript-ant-design-vue3/src/assets/images/notice/edit_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6cb12f048ceea95a7d9406a99c3f4e1a987338a5 GIT binary patch literal 700 zcmV;t0z>_YP)Px%c1c7*R7gw3m(6w4Koo`V9dTfZQvsm@Oa+7mHakoO2^GXtpiu>w4x9=Sc33QM zDnRKV>A)<>iRb0aSYt-Aq)3W6cY8b?V}d@XpSWkQ%Q01n##D`Kt%>T{}j zQ8m93JdW2h5T`wXg=s?Qs?+a)M|wRcaJ&y_u*Q6$qfgY*D5p}Fw<^g3YcJk`+w?SR@`bK%GQ#9hHnP!BMoUb8Nf`+(a(9bE90qxfz~^37vU z+#2eVPA)l$*IAx%y|20pbaP;2^r_$X#9g6V0eK9#9xC4!`pIOh?=I@Zr1w=fmP{^> zbroUf_D-%pq7JM$lqMOW5LZL ziJXV4Hv)j&NM|EZ*ks9_?ic|d{9mk(hyM$+C%{>%qmx3vuX?|(J-8_c$|i5C)pe7c z`4eOP^)}%;C7IwxsHU9^eK|7$Ov~1&ZWFdn0n9=xTNT^*?G#RM3I}r{aQ1cJd-%o% i%ZgxTpyq8q+U^1W(${8#gUI;+0000P)Px$qDe$SRA@u(nM+OrQ4mG%1?TEQOxS=C1`3iG!TQm>vq&tu3D7lynp%I(~5QazyO&}xw3biwbZR+L=K1u>zP*egg- zWV{g8>_y2(>i~x}Lx0T@sWa}3YWAY{zAu`A1IltK%y8_~wF=Oj6NM3aZ+jLEv_(tN zHh{mUyxOi|0|33+j&Xoj^8nk%4OGnoY#BFDF%Ph5+`x-@fDPjYp4a~Y2J{KtwGF+e zHRA@%13a!8H((y%Va2!s^8okD#toPUC@&c|P+l|+aAzK1!MK52^8oY44cwRqm@{tR z+B`tgxPel_E`Z>JUMb-M13Ki>|9LJ_u4WQ~z?pt_{}V|@S|{~Q2&Nzmff&q*<)8SZ eNCwgz&$^$7H_EsP$$Iqw0000 + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/components/business/oa/enterprise-bank-select/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/components/business/oa/enterprise-bank-select/index.vue new file mode 100644 index 00000000..6992ba13 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/components/business/oa/enterprise-bank-select/index.vue @@ -0,0 +1,109 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/components/business/oa/enterprise-invoice-select/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/components/business/oa/enterprise-invoice-select/index.vue new file mode 100644 index 00000000..bdacfdaa --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/components/business/oa/enterprise-invoice-select/index.vue @@ -0,0 +1,108 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/components/business/oa/enterprise-select/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/components/business/oa/enterprise-select/index.vue new file mode 100644 index 00000000..ff290bc5 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/components/business/oa/enterprise-select/index.vue @@ -0,0 +1,85 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/components/framework/area-cascader/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/components/framework/area-cascader/index.vue new file mode 100644 index 00000000..8547d675 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/components/framework/area-cascader/index.vue @@ -0,0 +1,91 @@ + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/components/framework/area-cascader/province-city-district.js b/smart-admin-web/javascript-ant-design-vue3/src/components/framework/area-cascader/province-city-district.js new file mode 100644 index 00000000..5d8cbef0 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/components/framework/area-cascader/province-city-district.js @@ -0,0 +1,17546 @@ +export const PROVINCE_CITY_DISTRICT = [ + { + children: [ + { + children: [ + { + children: [], + label: '东城区', + value: 110101, + }, + { + children: [], + label: '西城区', + value: 110102, + }, + { + children: [], + label: '朝阳区', + value: 110105, + }, + { + children: [], + label: '丰台区', + value: 110106, + }, + { + children: [], + label: '石景山区', + value: 110107, + }, + { + children: [], + label: '海淀区', + value: 110108, + }, + { + children: [], + label: '门头沟区', + value: 110109, + }, + { + children: [], + label: '房山区', + value: 110111, + }, + { + children: [], + label: '通州区', + value: 110112, + }, + { + children: [], + label: '顺义区', + value: 110113, + }, + { + children: [], + label: '昌平区', + value: 110114, + }, + { + children: [], + label: '大兴区', + value: 110115, + }, + { + children: [], + label: '怀柔区', + value: 110116, + }, + { + children: [], + label: '平谷区', + value: 110117, + }, + { + children: [], + label: '密云区', + value: 110118, + }, + { + children: [], + label: '延庆区', + value: 110119, + }, + ], + label: '北京市', + value: 110100, + }, + ], + label: '北京市', + value: 110000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '和平区', + value: 120101, + }, + { + children: [], + label: '河东区', + value: 120102, + }, + { + children: [], + label: '河西区', + value: 120103, + }, + { + children: [], + label: '南开区', + value: 120104, + }, + { + children: [], + label: '河北区', + value: 120105, + }, + { + children: [], + label: '红桥区', + value: 120106, + }, + { + children: [], + label: '东丽区', + value: 120110, + }, + { + children: [], + label: '西青区', + value: 120111, + }, + { + children: [], + label: '津南区', + value: 120112, + }, + { + children: [], + label: '北辰区', + value: 120113, + }, + { + children: [], + label: '武清区', + value: 120114, + }, + { + children: [], + label: '宝坻区', + value: 120115, + }, + { + children: [], + label: '滨海新区', + value: 120116, + }, + { + children: [], + label: '宁河区', + value: 120117, + }, + { + children: [], + label: '静海区', + value: 120118, + }, + { + children: [], + label: '蓟州区', + value: 120119, + }, + ], + label: '天津市', + value: 120100, + }, + ], + label: '天津市', + value: 120000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '长安区', + value: 130102, + }, + { + children: [], + label: '桥西区', + value: 130104, + }, + { + children: [], + label: '新华区', + value: 130105, + }, + { + children: [], + label: '井陉矿区', + value: 130107, + }, + { + children: [], + label: '裕华区', + value: 130108, + }, + { + children: [], + label: '藁城区', + value: 130109, + }, + { + children: [], + label: '鹿泉区', + value: 130110, + }, + { + children: [], + label: '栾城区', + value: 130111, + }, + { + children: [], + label: '井陉县', + value: 130121, + }, + { + children: [], + label: '正定县', + value: 130123, + }, + { + children: [], + label: '行唐县', + value: 130125, + }, + { + children: [], + label: '灵寿县', + value: 130126, + }, + { + children: [], + label: '高邑县', + value: 130127, + }, + { + children: [], + label: '深泽县', + value: 130128, + }, + { + children: [], + label: '赞皇县', + value: 130129, + }, + { + children: [], + label: '无极县', + value: 130130, + }, + { + children: [], + label: '平山县', + value: 130131, + }, + { + children: [], + label: '元氏县', + value: 130132, + }, + { + children: [], + label: '赵县', + value: 130133, + }, + { + children: [], + label: '辛集市', + value: 130181, + }, + { + children: [], + label: '晋州市', + value: 130183, + }, + { + children: [], + label: '新乐市', + value: 130184, + }, + ], + label: '石家庄市', + value: 130100, + }, + { + children: [ + { + children: [], + label: '路南区', + value: 130202, + }, + { + children: [], + label: '路北区', + value: 130203, + }, + { + children: [], + label: '古冶区', + value: 130204, + }, + { + children: [], + label: '开平区', + value: 130205, + }, + { + children: [], + label: '丰南区', + value: 130207, + }, + { + children: [], + label: '丰润区', + value: 130208, + }, + { + children: [], + label: '曹妃甸区', + value: 130209, + }, + { + children: [], + label: '滦南县', + value: 130224, + }, + { + children: [], + label: '乐亭县', + value: 130225, + }, + { + children: [], + label: '迁西县', + value: 130227, + }, + { + children: [], + label: '玉田县', + value: 130229, + }, + { + children: [], + label: '遵化市', + value: 130281, + }, + { + children: [], + label: '迁安市', + value: 130283, + }, + { + children: [], + label: '滦州市', + value: 130284, + }, + ], + label: '唐山市', + value: 130200, + }, + { + children: [ + { + children: [], + label: '海港区', + value: 130302, + }, + { + children: [], + label: '山海关区', + value: 130303, + }, + { + children: [], + label: '北戴河区', + value: 130304, + }, + { + children: [], + label: '抚宁区', + value: 130306, + }, + { + children: [], + label: '青龙满族自治县', + value: 130321, + }, + { + children: [], + label: '昌黎县', + value: 130322, + }, + { + children: [], + label: '卢龙县', + value: 130324, + }, + ], + label: '秦皇岛市', + value: 130300, + }, + { + children: [ + { + children: [], + label: '邯山区', + value: 130402, + }, + { + children: [], + label: '丛台区', + value: 130403, + }, + { + children: [], + label: '复兴区', + value: 130404, + }, + { + children: [], + label: '峰峰矿区', + value: 130406, + }, + { + children: [], + label: '肥乡区', + value: 130407, + }, + { + children: [], + label: '永年区', + value: 130408, + }, + { + children: [], + label: '临漳县', + value: 130423, + }, + { + children: [], + label: '成安县', + value: 130424, + }, + { + children: [], + label: '大名县', + value: 130425, + }, + { + children: [], + label: '涉县', + value: 130426, + }, + { + children: [], + label: '磁县', + value: 130427, + }, + { + children: [], + label: '邱县', + value: 130430, + }, + { + children: [], + label: '鸡泽县', + value: 130431, + }, + { + children: [], + label: '广平县', + value: 130432, + }, + { + children: [], + label: '馆陶县', + value: 130433, + }, + { + children: [], + label: '魏县', + value: 130434, + }, + { + children: [], + label: '曲周县', + value: 130435, + }, + { + children: [], + label: '武安市', + value: 130481, + }, + ], + label: '邯郸市', + value: 130400, + }, + { + children: [ + { + children: [], + label: '桥东区', + value: 130502, + }, + { + children: [], + label: '桥西区', + value: 130503, + }, + { + children: [], + label: '邢台县', + value: 130521, + }, + { + children: [], + label: '临城县', + value: 130522, + }, + { + children: [], + label: '内丘县', + value: 130523, + }, + { + children: [], + label: '柏乡县', + value: 130524, + }, + { + children: [], + label: '隆尧县', + value: 130525, + }, + { + children: [], + label: '任县', + value: 130526, + }, + { + children: [], + label: '南和县', + value: 130527, + }, + { + children: [], + label: '宁晋县', + value: 130528, + }, + { + children: [], + label: '巨鹿县', + value: 130529, + }, + { + children: [], + label: '新河县', + value: 130530, + }, + { + children: [], + label: '广宗县', + value: 130531, + }, + { + children: [], + label: '平乡县', + value: 130532, + }, + { + children: [], + label: '威县', + value: 130533, + }, + { + children: [], + label: '清河县', + value: 130534, + }, + { + children: [], + label: '临西县', + value: 130535, + }, + { + children: [], + label: '南宫市', + value: 130581, + }, + { + children: [], + label: '沙河市', + value: 130582, + }, + ], + label: '邢台市', + value: 130500, + }, + { + children: [ + { + children: [], + label: '竞秀区', + value: 130602, + }, + { + children: [], + label: '莲池区', + value: 130606, + }, + { + children: [], + label: '满城区', + value: 130607, + }, + { + children: [], + label: '清苑区', + value: 130608, + }, + { + children: [], + label: '徐水区', + value: 130609, + }, + { + children: [], + label: '涞水县', + value: 130623, + }, + { + children: [], + label: '阜平县', + value: 130624, + }, + { + children: [], + label: '定兴县', + value: 130626, + }, + { + children: [], + label: '唐县', + value: 130627, + }, + { + children: [], + label: '高阳县', + value: 130628, + }, + { + children: [], + label: '容城县', + value: 130629, + }, + { + children: [], + label: '涞源县', + value: 130630, + }, + { + children: [], + label: '望都县', + value: 130631, + }, + { + children: [], + label: '安新县', + value: 130632, + }, + { + children: [], + label: '易县', + value: 130633, + }, + { + children: [], + label: '曲阳县', + value: 130634, + }, + { + children: [], + label: '蠡县', + value: 130635, + }, + { + children: [], + label: '顺平县', + value: 130636, + }, + { + children: [], + label: '博野县', + value: 130637, + }, + { + children: [], + label: '雄县', + value: 130638, + }, + { + children: [], + label: '涿州市', + value: 130681, + }, + { + children: [], + label: '定州市', + value: 130682, + }, + { + children: [], + label: '安国市', + value: 130683, + }, + { + children: [], + label: '高碑店市', + value: 130684, + }, + ], + label: '保定市', + value: 130600, + }, + { + children: [ + { + children: [], + label: '桥东区', + value: 130702, + }, + { + children: [], + label: '桥西区', + value: 130703, + }, + { + children: [], + label: '宣化区', + value: 130705, + }, + { + children: [], + label: '下花园区', + value: 130706, + }, + { + children: [], + label: '万全区', + value: 130708, + }, + { + children: [], + label: '崇礼区', + value: 130709, + }, + { + children: [], + label: '张北县', + value: 130722, + }, + { + children: [], + label: '康保县', + value: 130723, + }, + { + children: [], + label: '沽源县', + value: 130724, + }, + { + children: [], + label: '尚义县', + value: 130725, + }, + { + children: [], + label: '蔚县', + value: 130726, + }, + { + children: [], + label: '阳原县', + value: 130727, + }, + { + children: [], + label: '怀安县', + value: 130728, + }, + { + children: [], + label: '怀来县', + value: 130730, + }, + { + children: [], + label: '涿鹿县', + value: 130731, + }, + { + children: [], + label: '赤城县', + value: 130732, + }, + ], + label: '张家口市', + value: 130700, + }, + { + children: [ + { + children: [], + label: '双桥区', + value: 130802, + }, + { + children: [], + label: '双滦区', + value: 130803, + }, + { + children: [], + label: '鹰手营子矿区', + value: 130804, + }, + { + children: [], + label: '承德县', + value: 130821, + }, + { + children: [], + label: '兴隆县', + value: 130822, + }, + { + children: [], + label: '滦平县', + value: 130824, + }, + { + children: [], + label: '隆化县', + value: 130825, + }, + { + children: [], + label: '丰宁满族自治县', + value: 130826, + }, + { + children: [], + label: '宽城满族自治县', + value: 130827, + }, + { + children: [], + label: '围场满族蒙古族自治县', + value: 130828, + }, + { + children: [], + label: '平泉市', + value: 130881, + }, + ], + label: '承德市', + value: 130800, + }, + { + children: [ + { + children: [], + label: '新华区', + value: 130902, + }, + { + children: [], + label: '运河区', + value: 130903, + }, + { + children: [], + label: '沧县', + value: 130921, + }, + { + children: [], + label: '青县', + value: 130922, + }, + { + children: [], + label: '东光县', + value: 130923, + }, + { + children: [], + label: '海兴县', + value: 130924, + }, + { + children: [], + label: '盐山县', + value: 130925, + }, + { + children: [], + label: '肃宁县', + value: 130926, + }, + { + children: [], + label: '南皮县', + value: 130927, + }, + { + children: [], + label: '吴桥县', + value: 130928, + }, + { + children: [], + label: '献县', + value: 130929, + }, + { + children: [], + label: '孟村回族自治县', + value: 130930, + }, + { + children: [], + label: '泊头市', + value: 130981, + }, + { + children: [], + label: '任丘市', + value: 130982, + }, + { + children: [], + label: '黄骅市', + value: 130983, + }, + { + children: [], + label: '河间市', + value: 130984, + }, + ], + label: '沧州市', + value: 130900, + }, + { + children: [ + { + children: [], + label: '安次区', + value: 131002, + }, + { + children: [], + label: '广阳区', + value: 131003, + }, + { + children: [], + label: '固安县', + value: 131022, + }, + { + children: [], + label: '永清县', + value: 131023, + }, + { + children: [], + label: '香河县', + value: 131024, + }, + { + children: [], + label: '大城县', + value: 131025, + }, + { + children: [], + label: '文安县', + value: 131026, + }, + { + children: [], + label: '大厂回族自治县', + value: 131028, + }, + { + children: [], + label: '霸州市', + value: 131081, + }, + { + children: [], + label: '三河市', + value: 131082, + }, + ], + label: '廊坊市', + value: 131000, + }, + { + children: [ + { + children: [], + label: '桃城区', + value: 131102, + }, + { + children: [], + label: '冀州区', + value: 131103, + }, + { + children: [], + label: '枣强县', + value: 131121, + }, + { + children: [], + label: '武邑县', + value: 131122, + }, + { + children: [], + label: '武强县', + value: 131123, + }, + { + children: [], + label: '饶阳县', + value: 131124, + }, + { + children: [], + label: '安平县', + value: 131125, + }, + { + children: [], + label: '故城县', + value: 131126, + }, + { + children: [], + label: '景县', + value: 131127, + }, + { + children: [], + label: '阜城县', + value: 131128, + }, + { + children: [], + label: '深州市', + value: 131182, + }, + ], + label: '衡水市', + value: 131100, + }, + ], + label: '河北省', + value: 130000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '小店区', + value: 140105, + }, + { + children: [], + label: '迎泽区', + value: 140106, + }, + { + children: [], + label: '杏花岭区', + value: 140107, + }, + { + children: [], + label: '尖草坪区', + value: 140108, + }, + { + children: [], + label: '万柏林区', + value: 140109, + }, + { + children: [], + label: '晋源区', + value: 140110, + }, + { + children: [], + label: '清徐县', + value: 140121, + }, + { + children: [], + label: '阳曲县', + value: 140122, + }, + { + children: [], + label: '娄烦县', + value: 140123, + }, + { + children: [], + label: '古交市', + value: 140181, + }, + ], + label: '太原市', + value: 140100, + }, + { + children: [ + { + children: [], + label: '新荣区', + value: 140212, + }, + { + children: [], + label: '平城区', + value: 140213, + }, + { + children: [], + label: '云冈区', + value: 140214, + }, + { + children: [], + label: '云州区', + value: 140215, + }, + { + children: [], + label: '阳高县', + value: 140221, + }, + { + children: [], + label: '天镇县', + value: 140222, + }, + { + children: [], + label: '广灵县', + value: 140223, + }, + { + children: [], + label: '灵丘县', + value: 140224, + }, + { + children: [], + label: '浑源县', + value: 140225, + }, + { + children: [], + label: '左云县', + value: 140226, + }, + ], + label: '大同市', + value: 140200, + }, + { + children: [ + { + children: [], + label: '城区', + value: 140302, + }, + { + children: [], + label: '矿区', + value: 140303, + }, + { + children: [], + label: '郊区', + value: 140311, + }, + { + children: [], + label: '平定县', + value: 140321, + }, + { + children: [], + label: '盂县', + value: 140322, + }, + ], + label: '阳泉市', + value: 140300, + }, + { + children: [ + { + children: [], + label: '潞州区', + value: 140403, + }, + { + children: [], + label: '上党区', + value: 140404, + }, + { + children: [], + label: '屯留区', + value: 140405, + }, + { + children: [], + label: '潞城区', + value: 140406, + }, + { + children: [], + label: '襄垣县', + value: 140423, + }, + { + children: [], + label: '平顺县', + value: 140425, + }, + { + children: [], + label: '黎城县', + value: 140426, + }, + { + children: [], + label: '壶关县', + value: 140427, + }, + { + children: [], + label: '长子县', + value: 140428, + }, + { + children: [], + label: '武乡县', + value: 140429, + }, + { + children: [], + label: '沁县', + value: 140430, + }, + { + children: [], + label: '沁源县', + value: 140431, + }, + ], + label: '长治市', + value: 140400, + }, + { + children: [ + { + children: [], + label: '城区', + value: 140502, + }, + { + children: [], + label: '沁水县', + value: 140521, + }, + { + children: [], + label: '阳城县', + value: 140522, + }, + { + children: [], + label: '陵川县', + value: 140524, + }, + { + children: [], + label: '泽州县', + value: 140525, + }, + { + children: [], + label: '高平市', + value: 140581, + }, + ], + label: '晋城市', + value: 140500, + }, + { + children: [ + { + children: [], + label: '朔城区', + value: 140602, + }, + { + children: [], + label: '平鲁区', + value: 140603, + }, + { + children: [], + label: '山阴县', + value: 140621, + }, + { + children: [], + label: '应县', + value: 140622, + }, + { + children: [], + label: '右玉县', + value: 140623, + }, + { + children: [], + label: '怀仁市', + value: 140681, + }, + ], + label: '朔州市', + value: 140600, + }, + { + children: [ + { + children: [], + label: '榆次区', + value: 140702, + }, + { + children: [], + label: '榆社县', + value: 140721, + }, + { + children: [], + label: '左权县', + value: 140722, + }, + { + children: [], + label: '和顺县', + value: 140723, + }, + { + children: [], + label: '昔阳县', + value: 140724, + }, + { + children: [], + label: '寿阳县', + value: 140725, + }, + { + children: [], + label: '太谷县', + value: 140726, + }, + { + children: [], + label: '祁县', + value: 140727, + }, + { + children: [], + label: '平遥县', + value: 140728, + }, + { + children: [], + label: '灵石县', + value: 140729, + }, + { + children: [], + label: '介休市', + value: 140781, + }, + ], + label: '晋中市', + value: 140700, + }, + { + children: [ + { + children: [], + label: '盐湖区', + value: 140802, + }, + { + children: [], + label: '临猗县', + value: 140821, + }, + { + children: [], + label: '万荣县', + value: 140822, + }, + { + children: [], + label: '闻喜县', + value: 140823, + }, + { + children: [], + label: '稷山县', + value: 140824, + }, + { + children: [], + label: '新绛县', + value: 140825, + }, + { + children: [], + label: '绛县', + value: 140826, + }, + { + children: [], + label: '垣曲县', + value: 140827, + }, + { + children: [], + label: '夏县', + value: 140828, + }, + { + children: [], + label: '平陆县', + value: 140829, + }, + { + children: [], + label: '芮城县', + value: 140830, + }, + { + children: [], + label: '永济市', + value: 140881, + }, + { + children: [], + label: '河津市', + value: 140882, + }, + ], + label: '运城市', + value: 140800, + }, + { + children: [ + { + children: [], + label: '忻府区', + value: 140902, + }, + { + children: [], + label: '定襄县', + value: 140921, + }, + { + children: [], + label: '五台县', + value: 140922, + }, + { + children: [], + label: '代县', + value: 140923, + }, + { + children: [], + label: '繁峙县', + value: 140924, + }, + { + children: [], + label: '宁武县', + value: 140925, + }, + { + children: [], + label: '静乐县', + value: 140926, + }, + { + children: [], + label: '神池县', + value: 140927, + }, + { + children: [], + label: '五寨县', + value: 140928, + }, + { + children: [], + label: '岢岚县', + value: 140929, + }, + { + children: [], + label: '河曲县', + value: 140930, + }, + { + children: [], + label: '保德县', + value: 140931, + }, + { + children: [], + label: '偏关县', + value: 140932, + }, + { + children: [], + label: '原平市', + value: 140981, + }, + ], + label: '忻州市', + value: 140900, + }, + { + children: [ + { + children: [], + label: '尧都区', + value: 141002, + }, + { + children: [], + label: '曲沃县', + value: 141021, + }, + { + children: [], + label: '翼城县', + value: 141022, + }, + { + children: [], + label: '襄汾县', + value: 141023, + }, + { + children: [], + label: '洪洞县', + value: 141024, + }, + { + children: [], + label: '古县', + value: 141025, + }, + { + children: [], + label: '安泽县', + value: 141026, + }, + { + children: [], + label: '浮山县', + value: 141027, + }, + { + children: [], + label: '吉县', + value: 141028, + }, + { + children: [], + label: '乡宁县', + value: 141029, + }, + { + children: [], + label: '大宁县', + value: 141030, + }, + { + children: [], + label: '隰县', + value: 141031, + }, + { + children: [], + label: '永和县', + value: 141032, + }, + { + children: [], + label: '蒲县', + value: 141033, + }, + { + children: [], + label: '汾西县', + value: 141034, + }, + { + children: [], + label: '侯马市', + value: 141081, + }, + { + children: [], + label: '霍州市', + value: 141082, + }, + ], + label: '临汾市', + value: 141000, + }, + { + children: [ + { + children: [], + label: '离石区', + value: 141102, + }, + { + children: [], + label: '文水县', + value: 141121, + }, + { + children: [], + label: '交城县', + value: 141122, + }, + { + children: [], + label: '兴县', + value: 141123, + }, + { + children: [], + label: '临县', + value: 141124, + }, + { + children: [], + label: '柳林县', + value: 141125, + }, + { + children: [], + label: '石楼县', + value: 141126, + }, + { + children: [], + label: '岚县', + value: 141127, + }, + { + children: [], + label: '方山县', + value: 141128, + }, + { + children: [], + label: '中阳县', + value: 141129, + }, + { + children: [], + label: '交口县', + value: 141130, + }, + { + children: [], + label: '孝义市', + value: 141181, + }, + { + children: [], + label: '汾阳市', + value: 141182, + }, + ], + label: '吕梁市', + value: 141100, + }, + ], + label: '山西省', + value: 140000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '新城区', + value: 150102, + }, + { + children: [], + label: '回民区', + value: 150103, + }, + { + children: [], + label: '玉泉区', + value: 150104, + }, + { + children: [], + label: '赛罕区', + value: 150105, + }, + { + children: [], + label: '土默特左旗', + value: 150121, + }, + { + children: [], + label: '托克托县', + value: 150122, + }, + { + children: [], + label: '和林格尔县', + value: 150123, + }, + { + children: [], + label: '清水河县', + value: 150124, + }, + { + children: [], + label: '武川县', + value: 150125, + }, + ], + label: '呼和浩特市', + value: 150100, + }, + { + children: [ + { + children: [], + label: '东河区', + value: 150202, + }, + { + children: [], + label: '昆都仑区', + value: 150203, + }, + { + children: [], + label: '青山区', + value: 150204, + }, + { + children: [], + label: '石拐区', + value: 150205, + }, + { + children: [], + label: '白云鄂博矿区', + value: 150206, + }, + { + children: [], + label: '九原区', + value: 150207, + }, + { + children: [], + label: '土默特右旗', + value: 150221, + }, + { + children: [], + label: '固阳县', + value: 150222, + }, + { + children: [], + label: '达尔罕茂明安联合旗', + value: 150223, + }, + ], + label: '包头市', + value: 150200, + }, + { + children: [ + { + children: [], + label: '海勃湾区', + value: 150302, + }, + { + children: [], + label: '海南区', + value: 150303, + }, + { + children: [], + label: '乌达区', + value: 150304, + }, + ], + label: '乌海市', + value: 150300, + }, + { + children: [ + { + children: [], + label: '红山区', + value: 150402, + }, + { + children: [], + label: '元宝山区', + value: 150403, + }, + { + children: [], + label: '松山区', + value: 150404, + }, + { + children: [], + label: '阿鲁科尔沁旗', + value: 150421, + }, + { + children: [], + label: '巴林左旗', + value: 150422, + }, + { + children: [], + label: '巴林右旗', + value: 150423, + }, + { + children: [], + label: '林西县', + value: 150424, + }, + { + children: [], + label: '克什克腾旗', + value: 150425, + }, + { + children: [], + label: '翁牛特旗', + value: 150426, + }, + { + children: [], + label: '喀喇沁旗', + value: 150428, + }, + { + children: [], + label: '宁城县', + value: 150429, + }, + { + children: [], + label: '敖汉旗', + value: 150430, + }, + ], + label: '赤峰市', + value: 150400, + }, + { + children: [ + { + children: [], + label: '科尔沁区', + value: 150502, + }, + { + children: [], + label: '科尔沁左翼中旗', + value: 150521, + }, + { + children: [], + label: '科尔沁左翼后旗', + value: 150522, + }, + { + children: [], + label: '开鲁县', + value: 150523, + }, + { + children: [], + label: '库伦旗', + value: 150524, + }, + { + children: [], + label: '奈曼旗', + value: 150525, + }, + { + children: [], + label: '扎鲁特旗', + value: 150526, + }, + { + children: [], + label: '霍林郭勒市', + value: 150581, + }, + ], + label: '通辽市', + value: 150500, + }, + { + children: [ + { + children: [], + label: '东胜区', + value: 150602, + }, + { + children: [], + label: '康巴什区', + value: 150603, + }, + { + children: [], + label: '达拉特旗', + value: 150621, + }, + { + children: [], + label: '准格尔旗', + value: 150622, + }, + { + children: [], + label: '鄂托克前旗', + value: 150623, + }, + { + children: [], + label: '鄂托克旗', + value: 150624, + }, + { + children: [], + label: '杭锦旗', + value: 150625, + }, + { + children: [], + label: '乌审旗', + value: 150626, + }, + { + children: [], + label: '伊金霍洛旗', + value: 150627, + }, + ], + label: '鄂尔多斯市', + value: 150600, + }, + { + children: [ + { + children: [], + label: '海拉尔区', + value: 150702, + }, + { + children: [], + label: '扎赉诺尔区', + value: 150703, + }, + { + children: [], + label: '阿荣旗', + value: 150721, + }, + { + children: [], + label: '莫力达瓦达斡尔族自治旗', + value: 150722, + }, + { + children: [], + label: '鄂伦春自治旗', + value: 150723, + }, + { + children: [], + label: '鄂温克族自治旗', + value: 150724, + }, + { + children: [], + label: '陈巴尔虎旗', + value: 150725, + }, + { + children: [], + label: '新巴尔虎左旗', + value: 150726, + }, + { + children: [], + label: '新巴尔虎右旗', + value: 150727, + }, + { + children: [], + label: '满洲里市', + value: 150781, + }, + { + children: [], + label: '牙克石市', + value: 150782, + }, + { + children: [], + label: '扎兰屯市', + value: 150783, + }, + { + children: [], + label: '额尔古纳市', + value: 150784, + }, + { + children: [], + label: '根河市', + value: 150785, + }, + ], + label: '呼伦贝尔市', + value: 150700, + }, + { + children: [ + { + children: [], + label: '临河区', + value: 150802, + }, + { + children: [], + label: '五原县', + value: 150821, + }, + { + children: [], + label: '磴口县', + value: 150822, + }, + { + children: [], + label: '乌拉特前旗', + value: 150823, + }, + { + children: [], + label: '乌拉特中旗', + value: 150824, + }, + { + children: [], + label: '乌拉特后旗', + value: 150825, + }, + { + children: [], + label: '杭锦后旗', + value: 150826, + }, + ], + label: '巴彦淖尔市', + value: 150800, + }, + { + children: [ + { + children: [], + label: '集宁区', + value: 150902, + }, + { + children: [], + label: '卓资县', + value: 150921, + }, + { + children: [], + label: '化德县', + value: 150922, + }, + { + children: [], + label: '商都县', + value: 150923, + }, + { + children: [], + label: '兴和县', + value: 150924, + }, + { + children: [], + label: '凉城县', + value: 150925, + }, + { + children: [], + label: '察哈尔右翼前旗', + value: 150926, + }, + { + children: [], + label: '察哈尔右翼中旗', + value: 150927, + }, + { + children: [], + label: '察哈尔右翼后旗', + value: 150928, + }, + { + children: [], + label: '四子王旗', + value: 150929, + }, + { + children: [], + label: '丰镇市', + value: 150981, + }, + ], + label: '乌兰察布市', + value: 150900, + }, + { + children: [ + { + children: [], + label: '乌兰浩特市', + value: 152201, + }, + { + children: [], + label: '阿尔山市', + value: 152202, + }, + { + children: [], + label: '科尔沁右翼前旗', + value: 152221, + }, + { + children: [], + label: '科尔沁右翼中旗', + value: 152222, + }, + { + children: [], + label: '扎赉特旗', + value: 152223, + }, + { + children: [], + label: '突泉县', + value: 152224, + }, + ], + label: '兴安盟', + value: 152200, + }, + { + children: [ + { + children: [], + label: '二连浩特市', + value: 152501, + }, + { + children: [], + label: '锡林浩特市', + value: 152502, + }, + { + children: [], + label: '阿巴嘎旗', + value: 152522, + }, + { + children: [], + label: '苏尼特左旗', + value: 152523, + }, + { + children: [], + label: '苏尼特右旗', + value: 152524, + }, + { + children: [], + label: '东乌珠穆沁旗', + value: 152525, + }, + { + children: [], + label: '西乌珠穆沁旗', + value: 152526, + }, + { + children: [], + label: '太仆寺旗', + value: 152527, + }, + { + children: [], + label: '镶黄旗', + value: 152528, + }, + { + children: [], + label: '正镶白旗', + value: 152529, + }, + { + children: [], + label: '正蓝旗', + value: 152530, + }, + { + children: [], + label: '多伦县', + value: 152531, + }, + ], + label: '锡林郭勒盟', + value: 152500, + }, + { + children: [ + { + children: [], + label: '阿拉善左旗', + value: 152921, + }, + { + children: [], + label: '阿拉善右旗', + value: 152922, + }, + { + children: [], + label: '额济纳旗', + value: 152923, + }, + ], + label: '阿拉善盟', + value: 152900, + }, + ], + label: '内蒙古自治区', + value: 150000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '和平区', + value: 210102, + }, + { + children: [], + label: '沈河区', + value: 210103, + }, + { + children: [], + label: '大东区', + value: 210104, + }, + { + children: [], + label: '皇姑区', + value: 210105, + }, + { + children: [], + label: '铁西区', + value: 210106, + }, + { + children: [], + label: '苏家屯区', + value: 210111, + }, + { + children: [], + label: '浑南区', + value: 210112, + }, + { + children: [], + label: '沈北新区', + value: 210113, + }, + { + children: [], + label: '于洪区', + value: 210114, + }, + { + children: [], + label: '辽中区', + value: 210115, + }, + { + children: [], + label: '康平县', + value: 210123, + }, + { + children: [], + label: '法库县', + value: 210124, + }, + { + children: [], + label: '新民市', + value: 210181, + }, + ], + label: '沈阳市', + value: 210100, + }, + { + children: [ + { + children: [], + label: '中山区', + value: 210202, + }, + { + children: [], + label: '西岗区', + value: 210203, + }, + { + children: [], + label: '沙河口区', + value: 210204, + }, + { + children: [], + label: '甘井子区', + value: 210211, + }, + { + children: [], + label: '旅顺口区', + value: 210212, + }, + { + children: [], + label: '金州区', + value: 210213, + }, + { + children: [], + label: '普兰店区', + value: 210214, + }, + { + children: [], + label: '长海县', + value: 210224, + }, + { + children: [], + label: '瓦房店市', + value: 210281, + }, + { + children: [], + label: '庄河市', + value: 210283, + }, + ], + label: '大连市', + value: 210200, + }, + { + children: [ + { + children: [], + label: '铁东区', + value: 210302, + }, + { + children: [], + label: '铁西区', + value: 210303, + }, + { + children: [], + label: '立山区', + value: 210304, + }, + { + children: [], + label: '千山区', + value: 210311, + }, + { + children: [], + label: '台安县', + value: 210321, + }, + { + children: [], + label: '岫岩满族自治县', + value: 210323, + }, + { + children: [], + label: '海城市', + value: 210381, + }, + ], + label: '鞍山市', + value: 210300, + }, + { + children: [ + { + children: [], + label: '新抚区', + value: 210402, + }, + { + children: [], + label: '东洲区', + value: 210403, + }, + { + children: [], + label: '望花区', + value: 210404, + }, + { + children: [], + label: '顺城区', + value: 210411, + }, + { + children: [], + label: '抚顺县', + value: 210421, + }, + { + children: [], + label: '新宾满族自治县', + value: 210422, + }, + { + children: [], + label: '清原满族自治县', + value: 210423, + }, + ], + label: '抚顺市', + value: 210400, + }, + { + children: [ + { + children: [], + label: '平山区', + value: 210502, + }, + { + children: [], + label: '溪湖区', + value: 210503, + }, + { + children: [], + label: '明山区', + value: 210504, + }, + { + children: [], + label: '南芬区', + value: 210505, + }, + { + children: [], + label: '本溪满族自治县', + value: 210521, + }, + { + children: [], + label: '桓仁满族自治县', + value: 210522, + }, + ], + label: '本溪市', + value: 210500, + }, + { + children: [ + { + children: [], + label: '元宝区', + value: 210602, + }, + { + children: [], + label: '振兴区', + value: 210603, + }, + { + children: [], + label: '振安区', + value: 210604, + }, + { + children: [], + label: '宽甸满族自治县', + value: 210624, + }, + { + children: [], + label: '东港市', + value: 210681, + }, + { + children: [], + label: '凤城市', + value: 210682, + }, + ], + label: '丹东市', + value: 210600, + }, + { + children: [ + { + children: [], + label: '古塔区', + value: 210702, + }, + { + children: [], + label: '凌河区', + value: 210703, + }, + { + children: [], + label: '太和区', + value: 210711, + }, + { + children: [], + label: '黑山县', + value: 210726, + }, + { + children: [], + label: '义县', + value: 210727, + }, + { + children: [], + label: '凌海市', + value: 210781, + }, + { + children: [], + label: '北镇市', + value: 210782, + }, + ], + label: '锦州市', + value: 210700, + }, + { + children: [ + { + children: [], + label: '站前区', + value: 210802, + }, + { + children: [], + label: '西市区', + value: 210803, + }, + { + children: [], + label: '鲅鱼圈区', + value: 210804, + }, + { + children: [], + label: '老边区', + value: 210811, + }, + { + children: [], + label: '盖州市', + value: 210881, + }, + { + children: [], + label: '大石桥市', + value: 210882, + }, + ], + label: '营口市', + value: 210800, + }, + { + children: [ + { + children: [], + label: '海州区', + value: 210902, + }, + { + children: [], + label: '新邱区', + value: 210903, + }, + { + children: [], + label: '太平区', + value: 210904, + }, + { + children: [], + label: '清河门区', + value: 210905, + }, + { + children: [], + label: '细河区', + value: 210911, + }, + { + children: [], + label: '阜新蒙古族自治县', + value: 210921, + }, + { + children: [], + label: '彰武县', + value: 210922, + }, + ], + label: '阜新市', + value: 210900, + }, + { + children: [ + { + children: [], + label: '白塔区', + value: 211002, + }, + { + children: [], + label: '文圣区', + value: 211003, + }, + { + children: [], + label: '宏伟区', + value: 211004, + }, + { + children: [], + label: '弓长岭区', + value: 211005, + }, + { + children: [], + label: '太子河区', + value: 211011, + }, + { + children: [], + label: '辽阳县', + value: 211021, + }, + { + children: [], + label: '灯塔市', + value: 211081, + }, + ], + label: '辽阳市', + value: 211000, + }, + { + children: [ + { + children: [], + label: '双台子区', + value: 211102, + }, + { + children: [], + label: '兴隆台区', + value: 211103, + }, + { + children: [], + label: '大洼区', + value: 211104, + }, + { + children: [], + label: '盘山县', + value: 211122, + }, + ], + label: '盘锦市', + value: 211100, + }, + { + children: [ + { + children: [], + label: '银州区', + value: 211202, + }, + { + children: [], + label: '清河区', + value: 211204, + }, + { + children: [], + label: '铁岭县', + value: 211221, + }, + { + children: [], + label: '西丰县', + value: 211223, + }, + { + children: [], + label: '昌图县', + value: 211224, + }, + { + children: [], + label: '调兵山市', + value: 211281, + }, + { + children: [], + label: '开原市', + value: 211282, + }, + ], + label: '铁岭市', + value: 211200, + }, + { + children: [ + { + children: [], + label: '双塔区', + value: 211302, + }, + { + children: [], + label: '龙城区', + value: 211303, + }, + { + children: [], + label: '朝阳县', + value: 211321, + }, + { + children: [], + label: '建平县', + value: 211322, + }, + { + children: [], + label: '喀喇沁左翼蒙古族自治县', + value: 211324, + }, + { + children: [], + label: '北票市', + value: 211381, + }, + { + children: [], + label: '凌源市', + value: 211382, + }, + ], + label: '朝阳市', + value: 211300, + }, + { + children: [ + { + children: [], + label: '连山区', + value: 211402, + }, + { + children: [], + label: '龙港区', + value: 211403, + }, + { + children: [], + label: '南票区', + value: 211404, + }, + { + children: [], + label: '绥中县', + value: 211421, + }, + { + children: [], + label: '建昌县', + value: 211422, + }, + { + children: [], + label: '兴城市', + value: 211481, + }, + ], + label: '葫芦岛市', + value: 211400, + }, + ], + label: '辽宁省', + value: 210000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '南关区', + value: 220102, + }, + { + children: [], + label: '宽城区', + value: 220103, + }, + { + children: [], + label: '朝阳区', + value: 220104, + }, + { + children: [], + label: '二道区', + value: 220105, + }, + { + children: [], + label: '绿园区', + value: 220106, + }, + { + children: [], + label: '双阳区', + value: 220112, + }, + { + children: [], + label: '九台区', + value: 220113, + }, + { + children: [], + label: '农安县', + value: 220122, + }, + { + children: [], + label: '榆树市', + value: 220182, + }, + { + children: [], + label: '德惠市', + value: 220183, + }, + ], + label: '长春市', + value: 220100, + }, + { + children: [ + { + children: [], + label: '昌邑区', + value: 220202, + }, + { + children: [], + label: '龙潭区', + value: 220203, + }, + { + children: [], + label: '船营区', + value: 220204, + }, + { + children: [], + label: '丰满区', + value: 220211, + }, + { + children: [], + label: '永吉县', + value: 220221, + }, + { + children: [], + label: '蛟河市', + value: 220281, + }, + { + children: [], + label: '桦甸市', + value: 220282, + }, + { + children: [], + label: '舒兰市', + value: 220283, + }, + { + children: [], + label: '磐石市', + value: 220284, + }, + ], + label: '吉林市', + value: 220200, + }, + { + children: [ + { + children: [], + label: '铁西区', + value: 220302, + }, + { + children: [], + label: '铁东区', + value: 220303, + }, + { + children: [], + label: '梨树县', + value: 220322, + }, + { + children: [], + label: '伊通满族自治县', + value: 220323, + }, + { + children: [], + label: '公主岭市', + value: 220381, + }, + { + children: [], + label: '双辽市', + value: 220382, + }, + ], + label: '四平市', + value: 220300, + }, + { + children: [ + { + children: [], + label: '龙山区', + value: 220402, + }, + { + children: [], + label: '西安区', + value: 220403, + }, + { + children: [], + label: '东丰县', + value: 220421, + }, + { + children: [], + label: '东辽县', + value: 220422, + }, + ], + label: '辽源市', + value: 220400, + }, + { + children: [ + { + children: [], + label: '东昌区', + value: 220502, + }, + { + children: [], + label: '二道江区', + value: 220503, + }, + { + children: [], + label: '通化县', + value: 220521, + }, + { + children: [], + label: '辉南县', + value: 220523, + }, + { + children: [], + label: '柳河县', + value: 220524, + }, + { + children: [], + label: '梅河口市', + value: 220581, + }, + { + children: [], + label: '集安市', + value: 220582, + }, + ], + label: '通化市', + value: 220500, + }, + { + children: [ + { + children: [], + label: '浑江区', + value: 220602, + }, + { + children: [], + label: '江源区', + value: 220605, + }, + { + children: [], + label: '抚松县', + value: 220621, + }, + { + children: [], + label: '靖宇县', + value: 220622, + }, + { + children: [], + label: '长白朝鲜族自治县', + value: 220623, + }, + { + children: [], + label: '临江市', + value: 220681, + }, + ], + label: '白山市', + value: 220600, + }, + { + children: [ + { + children: [], + label: '宁江区', + value: 220702, + }, + { + children: [], + label: '前郭尔罗斯蒙古族自治县', + value: 220721, + }, + { + children: [], + label: '长岭县', + value: 220722, + }, + { + children: [], + label: '乾安县', + value: 220723, + }, + { + children: [], + label: '扶余市', + value: 220781, + }, + ], + label: '松原市', + value: 220700, + }, + { + children: [ + { + children: [], + label: '洮北区', + value: 220802, + }, + { + children: [], + label: '镇赉县', + value: 220821, + }, + { + children: [], + label: '通榆县', + value: 220822, + }, + { + children: [], + label: '洮南市', + value: 220881, + }, + { + children: [], + label: '大安市', + value: 220882, + }, + ], + label: '白城市', + value: 220800, + }, + { + children: [ + { + children: [], + label: '延吉市', + value: 222401, + }, + { + children: [], + label: '图们市', + value: 222402, + }, + { + children: [], + label: '敦化市', + value: 222403, + }, + { + children: [], + label: '珲春市', + value: 222404, + }, + { + children: [], + label: '龙井市', + value: 222405, + }, + { + children: [], + label: '和龙市', + value: 222406, + }, + { + children: [], + label: '汪清县', + value: 222424, + }, + { + children: [], + label: '安图县', + value: 222426, + }, + ], + label: '延边朝鲜族自治州', + value: 222400, + }, + ], + label: '吉林省', + value: 220000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '道里区', + value: 230102, + }, + { + children: [], + label: '南岗区', + value: 230103, + }, + { + children: [], + label: '道外区', + value: 230104, + }, + { + children: [], + label: '平房区', + value: 230108, + }, + { + children: [], + label: '松北区', + value: 230109, + }, + { + children: [], + label: '香坊区', + value: 230110, + }, + { + children: [], + label: '呼兰区', + value: 230111, + }, + { + children: [], + label: '阿城区', + value: 230112, + }, + { + children: [], + label: '双城区', + value: 230113, + }, + { + children: [], + label: '依兰县', + value: 230123, + }, + { + children: [], + label: '方正县', + value: 230124, + }, + { + children: [], + label: '宾县', + value: 230125, + }, + { + children: [], + label: '巴彦县', + value: 230126, + }, + { + children: [], + label: '木兰县', + value: 230127, + }, + { + children: [], + label: '通河县', + value: 230128, + }, + { + children: [], + label: '延寿县', + value: 230129, + }, + { + children: [], + label: '尚志市', + value: 230183, + }, + { + children: [], + label: '五常市', + value: 230184, + }, + ], + label: '哈尔滨市', + value: 230100, + }, + { + children: [ + { + children: [], + label: '龙沙区', + value: 230202, + }, + { + children: [], + label: '建华区', + value: 230203, + }, + { + children: [], + label: '铁锋区', + value: 230204, + }, + { + children: [], + label: '昂昂溪区', + value: 230205, + }, + { + children: [], + label: '富拉尔基区', + value: 230206, + }, + { + children: [], + label: '碾子山区', + value: 230207, + }, + { + children: [], + label: '梅里斯达斡尔族区', + value: 230208, + }, + { + children: [], + label: '龙江县', + value: 230221, + }, + { + children: [], + label: '依安县', + value: 230223, + }, + { + children: [], + label: '泰来县', + value: 230224, + }, + { + children: [], + label: '甘南县', + value: 230225, + }, + { + children: [], + label: '富裕县', + value: 230227, + }, + { + children: [], + label: '克山县', + value: 230229, + }, + { + children: [], + label: '克东县', + value: 230230, + }, + { + children: [], + label: '拜泉县', + value: 230231, + }, + { + children: [], + label: '讷河市', + value: 230281, + }, + ], + label: '齐齐哈尔市', + value: 230200, + }, + { + children: [ + { + children: [], + label: '鸡冠区', + value: 230302, + }, + { + children: [], + label: '恒山区', + value: 230303, + }, + { + children: [], + label: '滴道区', + value: 230304, + }, + { + children: [], + label: '梨树区', + value: 230305, + }, + { + children: [], + label: '城子河区', + value: 230306, + }, + { + children: [], + label: '麻山区', + value: 230307, + }, + { + children: [], + label: '鸡东县', + value: 230321, + }, + { + children: [], + label: '虎林市', + value: 230381, + }, + { + children: [], + label: '密山市', + value: 230382, + }, + ], + label: '鸡西市', + value: 230300, + }, + { + children: [ + { + children: [], + label: '向阳区', + value: 230402, + }, + { + children: [], + label: '工农区', + value: 230403, + }, + { + children: [], + label: '南山区', + value: 230404, + }, + { + children: [], + label: '兴安区', + value: 230405, + }, + { + children: [], + label: '东山区', + value: 230406, + }, + { + children: [], + label: '兴山区', + value: 230407, + }, + { + children: [], + label: '萝北县', + value: 230421, + }, + { + children: [], + label: '绥滨县', + value: 230422, + }, + ], + label: '鹤岗市', + value: 230400, + }, + { + children: [ + { + children: [], + label: '尖山区', + value: 230502, + }, + { + children: [], + label: '岭东区', + value: 230503, + }, + { + children: [], + label: '四方台区', + value: 230505, + }, + { + children: [], + label: '宝山区', + value: 230506, + }, + { + children: [], + label: '集贤县', + value: 230521, + }, + { + children: [], + label: '友谊县', + value: 230522, + }, + { + children: [], + label: '宝清县', + value: 230523, + }, + { + children: [], + label: '饶河县', + value: 230524, + }, + ], + label: '双鸭山市', + value: 230500, + }, + { + children: [ + { + children: [], + label: '萨尔图区', + value: 230602, + }, + { + children: [], + label: '龙凤区', + value: 230603, + }, + { + children: [], + label: '让胡路区', + value: 230604, + }, + { + children: [], + label: '红岗区', + value: 230605, + }, + { + children: [], + label: '大同区', + value: 230606, + }, + { + children: [], + label: '肇州县', + value: 230621, + }, + { + children: [], + label: '肇源县', + value: 230622, + }, + { + children: [], + label: '林甸县', + value: 230623, + }, + { + children: [], + label: '杜尔伯特蒙古族自治县', + value: 230624, + }, + ], + label: '大庆市', + value: 230600, + }, + { + children: [ + { + children: [], + label: '伊春区', + value: 230702, + }, + { + children: [], + label: '南岔区', + value: 230703, + }, + { + children: [], + label: '友好区', + value: 230704, + }, + { + children: [], + label: '西林区', + value: 230705, + }, + { + children: [], + label: '翠峦区', + value: 230706, + }, + { + children: [], + label: '新青区', + value: 230707, + }, + { + children: [], + label: '美溪区', + value: 230708, + }, + { + children: [], + label: '金山屯区', + value: 230709, + }, + { + children: [], + label: '五营区', + value: 230710, + }, + { + children: [], + label: '乌马河区', + value: 230711, + }, + { + children: [], + label: '汤旺河区', + value: 230712, + }, + { + children: [], + label: '带岭区', + value: 230713, + }, + { + children: [], + label: '乌伊岭区', + value: 230714, + }, + { + children: [], + label: '红星区', + value: 230715, + }, + { + children: [], + label: '上甘岭区', + value: 230716, + }, + { + children: [], + label: '嘉荫县', + value: 230722, + }, + { + children: [], + label: '铁力市', + value: 230781, + }, + ], + label: '伊春市', + value: 230700, + }, + { + children: [ + { + children: [], + label: '向阳区', + value: 230803, + }, + { + children: [], + label: '前进区', + value: 230804, + }, + { + children: [], + label: '东风区', + value: 230805, + }, + { + children: [], + label: '郊区', + value: 230811, + }, + { + children: [], + label: '桦南县', + value: 230822, + }, + { + children: [], + label: '桦川县', + value: 230826, + }, + { + children: [], + label: '汤原县', + value: 230828, + }, + { + children: [], + label: '同江市', + value: 230881, + }, + { + children: [], + label: '富锦市', + value: 230882, + }, + { + children: [], + label: '抚远市', + value: 230883, + }, + ], + label: '佳木斯市', + value: 230800, + }, + { + children: [ + { + children: [], + label: '新兴区', + value: 230902, + }, + { + children: [], + label: '桃山区', + value: 230903, + }, + { + children: [], + label: '茄子河区', + value: 230904, + }, + { + children: [], + label: '勃利县', + value: 230921, + }, + ], + label: '七台河市', + value: 230900, + }, + { + children: [ + { + children: [], + label: '东安区', + value: 231002, + }, + { + children: [], + label: '阳明区', + value: 231003, + }, + { + children: [], + label: '爱民区', + value: 231004, + }, + { + children: [], + label: '西安区', + value: 231005, + }, + { + children: [], + label: '林口县', + value: 231025, + }, + { + children: [], + label: '绥芬河市', + value: 231081, + }, + { + children: [], + label: '海林市', + value: 231083, + }, + { + children: [], + label: '宁安市', + value: 231084, + }, + { + children: [], + label: '穆棱市', + value: 231085, + }, + { + children: [], + label: '东宁市', + value: 231086, + }, + ], + label: '牡丹江市', + value: 231000, + }, + { + children: [ + { + children: [], + label: '爱辉区', + value: 231102, + }, + { + children: [], + label: '嫩江县', + value: 231121, + }, + { + children: [], + label: '逊克县', + value: 231123, + }, + { + children: [], + label: '孙吴县', + value: 231124, + }, + { + children: [], + label: '北安市', + value: 231181, + }, + { + children: [], + label: '五大连池市', + value: 231182, + }, + ], + label: '黑河市', + value: 231100, + }, + { + children: [ + { + children: [], + label: '北林区', + value: 231202, + }, + { + children: [], + label: '望奎县', + value: 231221, + }, + { + children: [], + label: '兰西县', + value: 231222, + }, + { + children: [], + label: '青冈县', + value: 231223, + }, + { + children: [], + label: '庆安县', + value: 231224, + }, + { + children: [], + label: '明水县', + value: 231225, + }, + { + children: [], + label: '绥棱县', + value: 231226, + }, + { + children: [], + label: '安达市', + value: 231281, + }, + { + children: [], + label: '肇东市', + value: 231282, + }, + { + children: [], + label: '海伦市', + value: 231283, + }, + ], + label: '绥化市', + value: 231200, + }, + { + children: [ + { + children: [], + label: '漠河市', + value: 232701, + }, + { + children: [], + label: '呼玛县', + value: 232721, + }, + { + children: [], + label: '塔河县', + value: 232722, + }, + { + children: [], + label: '大兴安岭地区直辖', + value: 232723, + }, + ], + label: '大兴安岭地区', + value: 232700, + }, + ], + label: '黑龙江省', + value: 230000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '黄浦区', + value: 310101, + }, + { + children: [], + label: '徐汇区', + value: 310104, + }, + { + children: [], + label: '长宁区', + value: 310105, + }, + { + children: [], + label: '静安区', + value: 310106, + }, + { + children: [], + label: '普陀区', + value: 310107, + }, + { + children: [], + label: '虹口区', + value: 310109, + }, + { + children: [], + label: '杨浦区', + value: 310110, + }, + { + children: [], + label: '闵行区', + value: 310112, + }, + { + children: [], + label: '宝山区', + value: 310113, + }, + { + children: [], + label: '嘉定区', + value: 310114, + }, + { + children: [], + label: '浦东新区', + value: 310115, + }, + { + children: [], + label: '金山区', + value: 310116, + }, + { + children: [], + label: '松江区', + value: 310117, + }, + { + children: [], + label: '青浦区', + value: 310118, + }, + { + children: [], + label: '奉贤区', + value: 310120, + }, + { + children: [], + label: '崇明区', + value: 310151, + }, + ], + label: '上海市', + value: 310100, + }, + ], + label: '上海市', + value: 310000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '玄武区', + value: 320102, + }, + { + children: [], + label: '秦淮区', + value: 320104, + }, + { + children: [], + label: '建邺区', + value: 320105, + }, + { + children: [], + label: '鼓楼区', + value: 320106, + }, + { + children: [], + label: '浦口区', + value: 320111, + }, + { + children: [], + label: '栖霞区', + value: 320113, + }, + { + children: [], + label: '雨花台区', + value: 320114, + }, + { + children: [], + label: '江宁区', + value: 320115, + }, + { + children: [], + label: '六合区', + value: 320116, + }, + { + children: [], + label: '溧水区', + value: 320117, + }, + { + children: [], + label: '高淳区', + value: 320118, + }, + ], + label: '南京市', + value: 320100, + }, + { + children: [ + { + children: [], + label: '锡山区', + value: 320205, + }, + { + children: [], + label: '惠山区', + value: 320206, + }, + { + children: [], + label: '滨湖区', + value: 320211, + }, + { + children: [], + label: '梁溪区', + value: 320213, + }, + { + children: [], + label: '新吴区', + value: 320214, + }, + { + children: [], + label: '江阴市', + value: 320281, + }, + { + children: [], + label: '宜兴市', + value: 320282, + }, + ], + label: '无锡市', + value: 320200, + }, + { + children: [ + { + children: [], + label: '鼓楼区', + value: 320302, + }, + { + children: [], + label: '云龙区', + value: 320303, + }, + { + children: [], + label: '贾汪区', + value: 320305, + }, + { + children: [], + label: '泉山区', + value: 320311, + }, + { + children: [], + label: '铜山区', + value: 320312, + }, + { + children: [], + label: '丰县', + value: 320321, + }, + { + children: [], + label: '沛县', + value: 320322, + }, + { + children: [], + label: '睢宁县', + value: 320324, + }, + { + children: [], + label: '新沂市', + value: 320381, + }, + { + children: [], + label: '邳州市', + value: 320382, + }, + ], + label: '徐州市', + value: 320300, + }, + { + children: [ + { + children: [], + label: '天宁区', + value: 320402, + }, + { + children: [], + label: '钟楼区', + value: 320404, + }, + { + children: [], + label: '新北区', + value: 320411, + }, + { + children: [], + label: '武进区', + value: 320412, + }, + { + children: [], + label: '金坛区', + value: 320413, + }, + { + children: [], + label: '溧阳市', + value: 320481, + }, + ], + label: '常州市', + value: 320400, + }, + { + children: [ + { + children: [], + label: '虎丘区', + value: 320505, + }, + { + children: [], + label: '吴中区', + value: 320506, + }, + { + children: [], + label: '相城区', + value: 320507, + }, + { + children: [], + label: '姑苏区', + value: 320508, + }, + { + children: [], + label: '吴江区', + value: 320509, + }, + { + children: [], + label: '苏州工业园区', + value: 320571, + }, + { + children: [], + label: '常熟市', + value: 320581, + }, + { + children: [], + label: '张家港市', + value: 320582, + }, + { + children: [], + label: '昆山市', + value: 320583, + }, + { + children: [], + label: '太仓市', + value: 320585, + }, + ], + label: '苏州市', + value: 320500, + }, + { + children: [ + { + children: [], + label: '崇川区', + value: 320602, + }, + { + children: [], + label: '港闸区', + value: 320611, + }, + { + children: [], + label: '通州区', + value: 320612, + }, + { + children: [], + label: '如东县', + value: 320623, + }, + { + children: [], + label: '启东市', + value: 320681, + }, + { + children: [], + label: '如皋市', + value: 320682, + }, + { + children: [], + label: '海门市', + value: 320684, + }, + { + children: [], + label: '海安市', + value: 320685, + }, + ], + label: '南通市', + value: 320600, + }, + { + children: [ + { + children: [], + label: '连云区', + value: 320703, + }, + { + children: [], + label: '海州区', + value: 320706, + }, + { + children: [], + label: '赣榆区', + value: 320707, + }, + { + children: [], + label: '东海县', + value: 320722, + }, + { + children: [], + label: '灌云县', + value: 320723, + }, + { + children: [], + label: '灌南县', + value: 320724, + }, + ], + label: '连云港市', + value: 320700, + }, + { + children: [ + { + children: [], + label: '淮安区', + value: 320803, + }, + { + children: [], + label: '淮阴区', + value: 320804, + }, + { + children: [], + label: '清江浦区', + value: 320812, + }, + { + children: [], + label: '洪泽区', + value: 320813, + }, + { + children: [], + label: '涟水县', + value: 320826, + }, + { + children: [], + label: '盱眙县', + value: 320830, + }, + { + children: [], + label: '金湖县', + value: 320831, + }, + ], + label: '淮安市', + value: 320800, + }, + { + children: [ + { + children: [], + label: '亭湖区', + value: 320902, + }, + { + children: [], + label: '盐都区', + value: 320903, + }, + { + children: [], + label: '大丰区', + value: 320904, + }, + { + children: [], + label: '响水县', + value: 320921, + }, + { + children: [], + label: '滨海县', + value: 320922, + }, + { + children: [], + label: '阜宁县', + value: 320923, + }, + { + children: [], + label: '射阳县', + value: 320924, + }, + { + children: [], + label: '建湖县', + value: 320925, + }, + { + children: [], + label: '东台市', + value: 320981, + }, + ], + label: '盐城市', + value: 320900, + }, + { + children: [ + { + children: [], + label: '广陵区', + value: 321002, + }, + { + children: [], + label: '邗江区', + value: 321003, + }, + { + children: [], + label: '江都区', + value: 321012, + }, + { + children: [], + label: '宝应县', + value: 321023, + }, + { + children: [], + label: '仪征市', + value: 321081, + }, + { + children: [], + label: '高邮市', + value: 321084, + }, + ], + label: '扬州市', + value: 321000, + }, + { + children: [ + { + children: [], + label: '京口区', + value: 321102, + }, + { + children: [], + label: '润州区', + value: 321111, + }, + { + children: [], + label: '丹徒区', + value: 321112, + }, + { + children: [], + label: '丹阳市', + value: 321181, + }, + { + children: [], + label: '扬中市', + value: 321182, + }, + { + children: [], + label: '句容市', + value: 321183, + }, + ], + label: '镇江市', + value: 321100, + }, + { + children: [ + { + children: [], + label: '海陵区', + value: 321202, + }, + { + children: [], + label: '高港区', + value: 321203, + }, + { + children: [], + label: '姜堰区', + value: 321204, + }, + { + children: [], + label: '兴化市', + value: 321281, + }, + { + children: [], + label: '靖江市', + value: 321282, + }, + { + children: [], + label: '泰兴市', + value: 321283, + }, + ], + label: '泰州市', + value: 321200, + }, + { + children: [ + { + children: [], + label: '宿城区', + value: 321302, + }, + { + children: [], + label: '宿豫区', + value: 321311, + }, + { + children: [], + label: '沭阳县', + value: 321322, + }, + { + children: [], + label: '泗阳县', + value: 321323, + }, + { + children: [], + label: '泗洪县', + value: 321324, + }, + ], + label: '宿迁市', + value: 321300, + }, + ], + label: '江苏省', + value: 320000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '上城区', + value: 330102, + }, + { + children: [], + label: '下城区', + value: 330103, + }, + { + children: [], + label: '江干区', + value: 330104, + }, + { + children: [], + label: '拱墅区', + value: 330105, + }, + { + children: [], + label: '西湖区', + value: 330106, + }, + { + children: [], + label: '滨江区', + value: 330108, + }, + { + children: [], + label: '萧山区', + value: 330109, + }, + { + children: [], + label: '余杭区', + value: 330110, + }, + { + children: [], + label: '富阳区', + value: 330111, + }, + { + children: [], + label: '临安区', + value: 330112, + }, + { + children: [], + label: '桐庐县', + value: 330122, + }, + { + children: [], + label: '淳安县', + value: 330127, + }, + { + children: [], + label: '建德市', + value: 330182, + }, + ], + label: '杭州市', + value: 330100, + }, + { + children: [ + { + children: [], + label: '海曙区', + value: 330203, + }, + { + children: [], + label: '江北区', + value: 330205, + }, + { + children: [], + label: '北仑区', + value: 330206, + }, + { + children: [], + label: '镇海区', + value: 330211, + }, + { + children: [], + label: '鄞州区', + value: 330212, + }, + { + children: [], + label: '奉化区', + value: 330213, + }, + { + children: [], + label: '象山县', + value: 330225, + }, + { + children: [], + label: '宁海县', + value: 330226, + }, + { + children: [], + label: '余姚市', + value: 330281, + }, + { + children: [], + label: '慈溪市', + value: 330282, + }, + ], + label: '宁波市', + value: 330200, + }, + { + children: [ + { + children: [], + label: '鹿城区', + value: 330302, + }, + { + children: [], + label: '龙湾区', + value: 330303, + }, + { + children: [], + label: '瓯海区', + value: 330304, + }, + { + children: [], + label: '洞头区', + value: 330305, + }, + { + children: [], + label: '永嘉县', + value: 330324, + }, + { + children: [], + label: '平阳县', + value: 330326, + }, + { + children: [], + label: '苍南县', + value: 330327, + }, + { + children: [], + label: '文成县', + value: 330328, + }, + { + children: [], + label: '泰顺县', + value: 330329, + }, + { + children: [], + label: '瑞安市', + value: 330381, + }, + { + children: [], + label: '乐清市', + value: 330382, + }, + ], + label: '温州市', + value: 330300, + }, + { + children: [ + { + children: [], + label: '南湖区', + value: 330402, + }, + { + children: [], + label: '秀洲区', + value: 330411, + }, + { + children: [], + label: '嘉善县', + value: 330421, + }, + { + children: [], + label: '海盐县', + value: 330424, + }, + { + children: [], + label: '海宁市', + value: 330481, + }, + { + children: [], + label: '平湖市', + value: 330482, + }, + { + children: [], + label: '桐乡市', + value: 330483, + }, + ], + label: '嘉兴市', + value: 330400, + }, + { + children: [ + { + children: [], + label: '吴兴区', + value: 330502, + }, + { + children: [], + label: '南浔区', + value: 330503, + }, + { + children: [], + label: '德清县', + value: 330521, + }, + { + children: [], + label: '长兴县', + value: 330522, + }, + { + children: [], + label: '安吉县', + value: 330523, + }, + ], + label: '湖州市', + value: 330500, + }, + { + children: [ + { + children: [], + label: '越城区', + value: 330602, + }, + { + children: [], + label: '柯桥区', + value: 330603, + }, + { + children: [], + label: '上虞区', + value: 330604, + }, + { + children: [], + label: '新昌县', + value: 330624, + }, + { + children: [], + label: '诸暨市', + value: 330681, + }, + { + children: [], + label: '嵊州市', + value: 330683, + }, + ], + label: '绍兴市', + value: 330600, + }, + { + children: [ + { + children: [], + label: '婺城区', + value: 330702, + }, + { + children: [], + label: '金东区', + value: 330703, + }, + { + children: [], + label: '武义县', + value: 330723, + }, + { + children: [], + label: '浦江县', + value: 330726, + }, + { + children: [], + label: '磐安县', + value: 330727, + }, + { + children: [], + label: '兰溪市', + value: 330781, + }, + { + children: [], + label: '义乌市', + value: 330782, + }, + { + children: [], + label: '东阳市', + value: 330783, + }, + { + children: [], + label: '永康市', + value: 330784, + }, + ], + label: '金华市', + value: 330700, + }, + { + children: [ + { + children: [], + label: '柯城区', + value: 330802, + }, + { + children: [], + label: '衢江区', + value: 330803, + }, + { + children: [], + label: '常山县', + value: 330822, + }, + { + children: [], + label: '开化县', + value: 330824, + }, + { + children: [], + label: '龙游县', + value: 330825, + }, + { + children: [], + label: '江山市', + value: 330881, + }, + ], + label: '衢州市', + value: 330800, + }, + { + children: [ + { + children: [], + label: '定海区', + value: 330902, + }, + { + children: [], + label: '普陀区', + value: 330903, + }, + { + children: [], + label: '岱山县', + value: 330921, + }, + { + children: [], + label: '嵊泗县', + value: 330922, + }, + ], + label: '舟山市', + value: 330900, + }, + { + children: [ + { + children: [], + label: '椒江区', + value: 331002, + }, + { + children: [], + label: '黄岩区', + value: 331003, + }, + { + children: [], + label: '路桥区', + value: 331004, + }, + { + children: [], + label: '三门县', + value: 331022, + }, + { + children: [], + label: '天台县', + value: 331023, + }, + { + children: [], + label: '仙居县', + value: 331024, + }, + { + children: [], + label: '温岭市', + value: 331081, + }, + { + children: [], + label: '临海市', + value: 331082, + }, + { + children: [], + label: '玉环市', + value: 331083, + }, + ], + label: '台州市', + value: 331000, + }, + { + children: [ + { + children: [], + label: '莲都区', + value: 331102, + }, + { + children: [], + label: '青田县', + value: 331121, + }, + { + children: [], + label: '缙云县', + value: 331122, + }, + { + children: [], + label: '遂昌县', + value: 331123, + }, + { + children: [], + label: '松阳县', + value: 331124, + }, + { + children: [], + label: '云和县', + value: 331125, + }, + { + children: [], + label: '庆元县', + value: 331126, + }, + { + children: [], + label: '景宁畲族自治县', + value: 331127, + }, + { + children: [], + label: '龙泉市', + value: 331181, + }, + ], + label: '丽水市', + value: 331100, + }, + ], + label: '浙江省', + value: 330000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '瑶海区', + value: 340102, + }, + { + children: [], + label: '庐阳区', + value: 340103, + }, + { + children: [], + label: '蜀山区', + value: 340104, + }, + { + children: [], + label: '包河区', + value: 340111, + }, + { + children: [], + label: '长丰县', + value: 340121, + }, + { + children: [], + label: '肥东县', + value: 340122, + }, + { + children: [], + label: '肥西县', + value: 340123, + }, + { + children: [], + label: '庐江县', + value: 340124, + }, + { + children: [], + label: '巢湖市', + value: 340181, + }, + ], + label: '合肥市', + value: 340100, + }, + { + children: [ + { + children: [], + label: '镜湖区', + value: 340202, + }, + { + children: [], + label: '弋江区', + value: 340203, + }, + { + children: [], + label: '鸠江区', + value: 340207, + }, + { + children: [], + label: '三山区', + value: 340208, + }, + { + children: [], + label: '芜湖县', + value: 340221, + }, + { + children: [], + label: '繁昌县', + value: 340222, + }, + { + children: [], + label: '南陵县', + value: 340223, + }, + { + children: [], + label: '无为县', + value: 340225, + }, + ], + label: '芜湖市', + value: 340200, + }, + { + children: [ + { + children: [], + label: '龙子湖区', + value: 340302, + }, + { + children: [], + label: '蚌山区', + value: 340303, + }, + { + children: [], + label: '禹会区', + value: 340304, + }, + { + children: [], + label: '淮上区', + value: 340311, + }, + { + children: [], + label: '怀远县', + value: 340321, + }, + { + children: [], + label: '五河县', + value: 340322, + }, + { + children: [], + label: '固镇县', + value: 340323, + }, + ], + label: '蚌埠市', + value: 340300, + }, + { + children: [ + { + children: [], + label: '大通区', + value: 340402, + }, + { + children: [], + label: '田家庵区', + value: 340403, + }, + { + children: [], + label: '谢家集区', + value: 340404, + }, + { + children: [], + label: '八公山区', + value: 340405, + }, + { + children: [], + label: '潘集区', + value: 340406, + }, + { + children: [], + label: '凤台县', + value: 340421, + }, + { + children: [], + label: '寿县', + value: 340422, + }, + ], + label: '淮南市', + value: 340400, + }, + { + children: [ + { + children: [], + label: '花山区', + value: 340503, + }, + { + children: [], + label: '雨山区', + value: 340504, + }, + { + children: [], + label: '博望区', + value: 340506, + }, + { + children: [], + label: '当涂县', + value: 340521, + }, + { + children: [], + label: '含山县', + value: 340522, + }, + { + children: [], + label: '和县', + value: 340523, + }, + ], + label: '马鞍山市', + value: 340500, + }, + { + children: [ + { + children: [], + label: '杜集区', + value: 340602, + }, + { + children: [], + label: '相山区', + value: 340603, + }, + { + children: [], + label: '烈山区', + value: 340604, + }, + { + children: [], + label: '濉溪县', + value: 340621, + }, + ], + label: '淮北市', + value: 340600, + }, + { + children: [ + { + children: [], + label: '铜官区', + value: 340705, + }, + { + children: [], + label: '义安区', + value: 340706, + }, + { + children: [], + label: '郊区', + value: 340711, + }, + { + children: [], + label: '枞阳县', + value: 340722, + }, + ], + label: '铜陵市', + value: 340700, + }, + { + children: [ + { + children: [], + label: '迎江区', + value: 340802, + }, + { + children: [], + label: '大观区', + value: 340803, + }, + { + children: [], + label: '宜秀区', + value: 340811, + }, + { + children: [], + label: '怀宁县', + value: 340822, + }, + { + children: [], + label: '太湖县', + value: 340825, + }, + { + children: [], + label: '宿松县', + value: 340826, + }, + { + children: [], + label: '望江县', + value: 340827, + }, + { + children: [], + label: '岳西县', + value: 340828, + }, + { + children: [], + label: '桐城市', + value: 340881, + }, + { + children: [], + label: '潜山市', + value: 340882, + }, + ], + label: '安庆市', + value: 340800, + }, + { + children: [ + { + children: [], + label: '屯溪区', + value: 341002, + }, + { + children: [], + label: '黄山区', + value: 341003, + }, + { + children: [], + label: '徽州区', + value: 341004, + }, + { + children: [], + label: '歙县', + value: 341021, + }, + { + children: [], + label: '休宁县', + value: 341022, + }, + { + children: [], + label: '黟县', + value: 341023, + }, + { + children: [], + label: '祁门县', + value: 341024, + }, + ], + label: '黄山市', + value: 341000, + }, + { + children: [ + { + children: [], + label: '琅琊区', + value: 341102, + }, + { + children: [], + label: '南谯区', + value: 341103, + }, + { + children: [], + label: '来安县', + value: 341122, + }, + { + children: [], + label: '全椒县', + value: 341124, + }, + { + children: [], + label: '定远县', + value: 341125, + }, + { + children: [], + label: '凤阳县', + value: 341126, + }, + { + children: [], + label: '天长市', + value: 341181, + }, + { + children: [], + label: '明光市', + value: 341182, + }, + ], + label: '滁州市', + value: 341100, + }, + { + children: [ + { + children: [], + label: '颍州区', + value: 341202, + }, + { + children: [], + label: '颍东区', + value: 341203, + }, + { + children: [], + label: '颍泉区', + value: 341204, + }, + { + children: [], + label: '临泉县', + value: 341221, + }, + { + children: [], + label: '太和县', + value: 341222, + }, + { + children: [], + label: '阜南县', + value: 341225, + }, + { + children: [], + label: '颍上县', + value: 341226, + }, + { + children: [], + label: '界首市', + value: 341282, + }, + ], + label: '阜阳市', + value: 341200, + }, + { + children: [ + { + children: [], + label: '埇桥区', + value: 341302, + }, + { + children: [], + label: '砀山县', + value: 341321, + }, + { + children: [], + label: '萧县', + value: 341322, + }, + { + children: [], + label: '灵璧县', + value: 341323, + }, + { + children: [], + label: '泗县', + value: 341324, + }, + ], + label: '宿州市', + value: 341300, + }, + { + children: [ + { + children: [], + label: '金安区', + value: 341502, + }, + { + children: [], + label: '裕安区', + value: 341503, + }, + { + children: [], + label: '叶集区', + value: 341504, + }, + { + children: [], + label: '霍邱县', + value: 341522, + }, + { + children: [], + label: '舒城县', + value: 341523, + }, + { + children: [], + label: '金寨县', + value: 341524, + }, + { + children: [], + label: '霍山县', + value: 341525, + }, + ], + label: '六安市', + value: 341500, + }, + { + children: [ + { + children: [], + label: '谯城区', + value: 341602, + }, + { + children: [], + label: '涡阳县', + value: 341621, + }, + { + children: [], + label: '蒙城县', + value: 341622, + }, + { + children: [], + label: '利辛县', + value: 341623, + }, + ], + label: '亳州市', + value: 341600, + }, + { + children: [ + { + children: [], + label: '贵池区', + value: 341702, + }, + { + children: [], + label: '东至县', + value: 341721, + }, + { + children: [], + label: '石台县', + value: 341722, + }, + { + children: [], + label: '青阳县', + value: 341723, + }, + ], + label: '池州市', + value: 341700, + }, + { + children: [ + { + children: [], + label: '宣州区', + value: 341802, + }, + { + children: [], + label: '郎溪县', + value: 341821, + }, + { + children: [], + label: '广德县', + value: 341822, + }, + { + children: [], + label: '泾县', + value: 341823, + }, + { + children: [], + label: '绩溪县', + value: 341824, + }, + { + children: [], + label: '旌德县', + value: 341825, + }, + { + children: [], + label: '宁国市', + value: 341881, + }, + ], + label: '宣城市', + value: 341800, + }, + ], + label: '安徽省', + value: 340000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '鼓楼区', + value: 350102, + }, + { + children: [], + label: '台江区', + value: 350103, + }, + { + children: [], + label: '仓山区', + value: 350104, + }, + { + children: [], + label: '马尾区', + value: 350105, + }, + { + children: [], + label: '晋安区', + value: 350111, + }, + { + children: [], + label: '长乐区', + value: 350112, + }, + { + children: [], + label: '闽侯县', + value: 350121, + }, + { + children: [], + label: '连江县', + value: 350122, + }, + { + children: [], + label: '罗源县', + value: 350123, + }, + { + children: [], + label: '闽清县', + value: 350124, + }, + { + children: [], + label: '永泰县', + value: 350125, + }, + { + children: [], + label: '平潭县', + value: 350128, + }, + { + children: [], + label: '福清市', + value: 350181, + }, + ], + label: '福州市', + value: 350100, + }, + { + children: [ + { + children: [], + label: '思明区', + value: 350203, + }, + { + children: [], + label: '海沧区', + value: 350205, + }, + { + children: [], + label: '湖里区', + value: 350206, + }, + { + children: [], + label: '集美区', + value: 350211, + }, + { + children: [], + label: '同安区', + value: 350212, + }, + { + children: [], + label: '翔安区', + value: 350213, + }, + ], + label: '厦门市', + value: 350200, + }, + { + children: [ + { + children: [], + label: '城厢区', + value: 350302, + }, + { + children: [], + label: '涵江区', + value: 350303, + }, + { + children: [], + label: '荔城区', + value: 350304, + }, + { + children: [], + label: '秀屿区', + value: 350305, + }, + { + children: [], + label: '仙游县', + value: 350322, + }, + ], + label: '莆田市', + value: 350300, + }, + { + children: [ + { + children: [], + label: '梅列区', + value: 350402, + }, + { + children: [], + label: '三元区', + value: 350403, + }, + { + children: [], + label: '明溪县', + value: 350421, + }, + { + children: [], + label: '清流县', + value: 350423, + }, + { + children: [], + label: '宁化县', + value: 350424, + }, + { + children: [], + label: '大田县', + value: 350425, + }, + { + children: [], + label: '尤溪县', + value: 350426, + }, + { + children: [], + label: '沙县', + value: 350427, + }, + { + children: [], + label: '将乐县', + value: 350428, + }, + { + children: [], + label: '泰宁县', + value: 350429, + }, + { + children: [], + label: '建宁县', + value: 350430, + }, + { + children: [], + label: '永安市', + value: 350481, + }, + ], + label: '三明市', + value: 350400, + }, + { + children: [ + { + children: [], + label: '鲤城区', + value: 350502, + }, + { + children: [], + label: '丰泽区', + value: 350503, + }, + { + children: [], + label: '洛江区', + value: 350504, + }, + { + children: [], + label: '泉港区', + value: 350505, + }, + { + children: [], + label: '惠安县', + value: 350521, + }, + { + children: [], + label: '安溪县', + value: 350524, + }, + { + children: [], + label: '永春县', + value: 350525, + }, + { + children: [], + label: '德化县', + value: 350526, + }, + { + children: [], + label: '金门县', + value: 350527, + }, + { + children: [], + label: '石狮市', + value: 350581, + }, + { + children: [], + label: '晋江市', + value: 350582, + }, + { + children: [], + label: '南安市', + value: 350583, + }, + ], + label: '泉州市', + value: 350500, + }, + { + children: [ + { + children: [], + label: '芗城区', + value: 350602, + }, + { + children: [], + label: '龙文区', + value: 350603, + }, + { + children: [], + label: '云霄县', + value: 350622, + }, + { + children: [], + label: '漳浦县', + value: 350623, + }, + { + children: [], + label: '诏安县', + value: 350624, + }, + { + children: [], + label: '长泰县', + value: 350625, + }, + { + children: [], + label: '东山县', + value: 350626, + }, + { + children: [], + label: '南靖县', + value: 350627, + }, + { + children: [], + label: '平和县', + value: 350628, + }, + { + children: [], + label: '华安县', + value: 350629, + }, + { + children: [], + label: '龙海市', + value: 350681, + }, + ], + label: '漳州市', + value: 350600, + }, + { + children: [ + { + children: [], + label: '延平区', + value: 350702, + }, + { + children: [], + label: '建阳区', + value: 350703, + }, + { + children: [], + label: '顺昌县', + value: 350721, + }, + { + children: [], + label: '浦城县', + value: 350722, + }, + { + children: [], + label: '光泽县', + value: 350723, + }, + { + children: [], + label: '松溪县', + value: 350724, + }, + { + children: [], + label: '政和县', + value: 350725, + }, + { + children: [], + label: '邵武市', + value: 350781, + }, + { + children: [], + label: '武夷山市', + value: 350782, + }, + { + children: [], + label: '建瓯市', + value: 350783, + }, + ], + label: '南平市', + value: 350700, + }, + { + children: [ + { + children: [], + label: '新罗区', + value: 350802, + }, + { + children: [], + label: '永定区', + value: 350803, + }, + { + children: [], + label: '长汀县', + value: 350821, + }, + { + children: [], + label: '上杭县', + value: 350823, + }, + { + children: [], + label: '武平县', + value: 350824, + }, + { + children: [], + label: '连城县', + value: 350825, + }, + { + children: [], + label: '漳平市', + value: 350881, + }, + ], + label: '龙岩市', + value: 350800, + }, + { + children: [ + { + children: [], + label: '蕉城区', + value: 350902, + }, + { + children: [], + label: '霞浦县', + value: 350921, + }, + { + children: [], + label: '古田县', + value: 350922, + }, + { + children: [], + label: '屏南县', + value: 350923, + }, + { + children: [], + label: '寿宁县', + value: 350924, + }, + { + children: [], + label: '周宁县', + value: 350925, + }, + { + children: [], + label: '柘荣县', + value: 350926, + }, + { + children: [], + label: '福安市', + value: 350981, + }, + { + children: [], + label: '福鼎市', + value: 350982, + }, + ], + label: '宁德市', + value: 350900, + }, + ], + label: '福建省', + value: 350000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '东湖区', + value: 360102, + }, + { + children: [], + label: '西湖区', + value: 360103, + }, + { + children: [], + label: '青云谱区', + value: 360104, + }, + { + children: [], + label: '湾里区', + value: 360105, + }, + { + children: [], + label: '青山湖区', + value: 360111, + }, + { + children: [], + label: '新建区', + value: 360112, + }, + { + children: [], + label: '南昌县', + value: 360121, + }, + { + children: [], + label: '安义县', + value: 360123, + }, + { + children: [], + label: '进贤县', + value: 360124, + }, + ], + label: '南昌市', + value: 360100, + }, + { + children: [ + { + children: [], + label: '昌江区', + value: 360202, + }, + { + children: [], + label: '珠山区', + value: 360203, + }, + { + children: [], + label: '浮梁县', + value: 360222, + }, + { + children: [], + label: '乐平市', + value: 360281, + }, + ], + label: '景德镇市', + value: 360200, + }, + { + children: [ + { + children: [], + label: '安源区', + value: 360302, + }, + { + children: [], + label: '湘东区', + value: 360313, + }, + { + children: [], + label: '莲花县', + value: 360321, + }, + { + children: [], + label: '上栗县', + value: 360322, + }, + { + children: [], + label: '芦溪县', + value: 360323, + }, + ], + label: '萍乡市', + value: 360300, + }, + { + children: [ + { + children: [], + label: '濂溪区', + value: 360402, + }, + { + children: [], + label: '浔阳区', + value: 360403, + }, + { + children: [], + label: '柴桑区', + value: 360404, + }, + { + children: [], + label: '武宁县', + value: 360423, + }, + { + children: [], + label: '修水县', + value: 360424, + }, + { + children: [], + label: '永修县', + value: 360425, + }, + { + children: [], + label: '德安县', + value: 360426, + }, + { + children: [], + label: '都昌县', + value: 360428, + }, + { + children: [], + label: '湖口县', + value: 360429, + }, + { + children: [], + label: '彭泽县', + value: 360430, + }, + { + children: [], + label: '瑞昌市', + value: 360481, + }, + { + children: [], + label: '共青城市', + value: 360482, + }, + { + children: [], + label: '庐山市', + value: 360483, + }, + ], + label: '九江市', + value: 360400, + }, + { + children: [ + { + children: [], + label: '渝水区', + value: 360502, + }, + { + children: [], + label: '分宜县', + value: 360521, + }, + ], + label: '新余市', + value: 360500, + }, + { + children: [ + { + children: [], + label: '月湖区', + value: 360602, + }, + { + children: [], + label: '余江区', + value: 360603, + }, + { + children: [], + label: '贵溪市', + value: 360681, + }, + ], + label: '鹰潭市', + value: 360600, + }, + { + children: [ + { + children: [], + label: '章贡区', + value: 360702, + }, + { + children: [], + label: '南康区', + value: 360703, + }, + { + children: [], + label: '赣县区', + value: 360704, + }, + { + children: [], + label: '信丰县', + value: 360722, + }, + { + children: [], + label: '大余县', + value: 360723, + }, + { + children: [], + label: '上犹县', + value: 360724, + }, + { + children: [], + label: '崇义县', + value: 360725, + }, + { + children: [], + label: '安远县', + value: 360726, + }, + { + children: [], + label: '龙南县', + value: 360727, + }, + { + children: [], + label: '定南县', + value: 360728, + }, + { + children: [], + label: '全南县', + value: 360729, + }, + { + children: [], + label: '宁都县', + value: 360730, + }, + { + children: [], + label: '于都县', + value: 360731, + }, + { + children: [], + label: '兴国县', + value: 360732, + }, + { + children: [], + label: '会昌县', + value: 360733, + }, + { + children: [], + label: '寻乌县', + value: 360734, + }, + { + children: [], + label: '石城县', + value: 360735, + }, + { + children: [], + label: '瑞金市', + value: 360781, + }, + ], + label: '赣州市', + value: 360700, + }, + { + children: [ + { + children: [], + label: '吉州区', + value: 360802, + }, + { + children: [], + label: '青原区', + value: 360803, + }, + { + children: [], + label: '吉安县', + value: 360821, + }, + { + children: [], + label: '吉水县', + value: 360822, + }, + { + children: [], + label: '峡江县', + value: 360823, + }, + { + children: [], + label: '新干县', + value: 360824, + }, + { + children: [], + label: '永丰县', + value: 360825, + }, + { + children: [], + label: '泰和县', + value: 360826, + }, + { + children: [], + label: '遂川县', + value: 360827, + }, + { + children: [], + label: '万安县', + value: 360828, + }, + { + children: [], + label: '安福县', + value: 360829, + }, + { + children: [], + label: '永新县', + value: 360830, + }, + { + children: [], + label: '井冈山市', + value: 360881, + }, + ], + label: '吉安市', + value: 360800, + }, + { + children: [ + { + children: [], + label: '袁州区', + value: 360902, + }, + { + children: [], + label: '奉新县', + value: 360921, + }, + { + children: [], + label: '万载县', + value: 360922, + }, + { + children: [], + label: '上高县', + value: 360923, + }, + { + children: [], + label: '宜丰县', + value: 360924, + }, + { + children: [], + label: '靖安县', + value: 360925, + }, + { + children: [], + label: '铜鼓县', + value: 360926, + }, + { + children: [], + label: '丰城市', + value: 360981, + }, + { + children: [], + label: '樟树市', + value: 360982, + }, + { + children: [], + label: '高安市', + value: 360983, + }, + ], + label: '宜春市', + value: 360900, + }, + { + children: [ + { + children: [], + label: '临川区', + value: 361002, + }, + { + children: [], + label: '东乡区', + value: 361003, + }, + { + children: [], + label: '南城县', + value: 361021, + }, + { + children: [], + label: '黎川县', + value: 361022, + }, + { + children: [], + label: '南丰县', + value: 361023, + }, + { + children: [], + label: '崇仁县', + value: 361024, + }, + { + children: [], + label: '乐安县', + value: 361025, + }, + { + children: [], + label: '宜黄县', + value: 361026, + }, + { + children: [], + label: '金溪县', + value: 361027, + }, + { + children: [], + label: '资溪县', + value: 361028, + }, + { + children: [], + label: '广昌县', + value: 361030, + }, + ], + label: '抚州市', + value: 361000, + }, + { + children: [ + { + children: [], + label: '信州区', + value: 361102, + }, + { + children: [], + label: '广丰区', + value: 361103, + }, + { + children: [], + label: '上饶县', + value: 361121, + }, + { + children: [], + label: '玉山县', + value: 361123, + }, + { + children: [], + label: '铅山县', + value: 361124, + }, + { + children: [], + label: '横峰县', + value: 361125, + }, + { + children: [], + label: '弋阳县', + value: 361126, + }, + { + children: [], + label: '余干县', + value: 361127, + }, + { + children: [], + label: '鄱阳县', + value: 361128, + }, + { + children: [], + label: '万年县', + value: 361129, + }, + { + children: [], + label: '婺源县', + value: 361130, + }, + { + children: [], + label: '德兴市', + value: 361181, + }, + ], + label: '上饶市', + value: 361100, + }, + ], + label: '江西省', + value: 360000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '历下区', + value: 370102, + }, + { + children: [], + label: '市中区', + value: 370103, + }, + { + children: [], + label: '槐荫区', + value: 370104, + }, + { + children: [], + label: '天桥区', + value: 370105, + }, + { + children: [], + label: '历城区', + value: 370112, + }, + { + children: [], + label: '长清区', + value: 370113, + }, + { + children: [], + label: '章丘区', + value: 370114, + }, + { + children: [], + label: '济阳区', + value: 370115, + }, + { + children: [], + label: '莱芜区', + value: 370116, + }, + { + children: [], + label: '钢城区', + value: 370117, + }, + { + children: [], + label: '平阴县', + value: 370124, + }, + { + children: [], + label: '商河县', + value: 370126, + }, + ], + label: '济南市', + value: 370100, + }, + { + children: [ + { + children: [], + label: '市南区', + value: 370202, + }, + { + children: [], + label: '市北区', + value: 370203, + }, + { + children: [], + label: '黄岛区', + value: 370211, + }, + { + children: [], + label: '崂山区', + value: 370212, + }, + { + children: [], + label: '李沧区', + value: 370213, + }, + { + children: [], + label: '城阳区', + value: 370214, + }, + { + children: [], + label: '即墨区', + value: 370215, + }, + { + children: [], + label: '胶州市', + value: 370281, + }, + { + children: [], + label: '平度市', + value: 370283, + }, + { + children: [], + label: '莱西市', + value: 370285, + }, + ], + label: '青岛市', + value: 370200, + }, + { + children: [ + { + children: [], + label: '淄川区', + value: 370302, + }, + { + children: [], + label: '张店区', + value: 370303, + }, + { + children: [], + label: '博山区', + value: 370304, + }, + { + children: [], + label: '临淄区', + value: 370305, + }, + { + children: [], + label: '周村区', + value: 370306, + }, + { + children: [], + label: '桓台县', + value: 370321, + }, + { + children: [], + label: '高青县', + value: 370322, + }, + { + children: [], + label: '沂源县', + value: 370323, + }, + ], + label: '淄博市', + value: 370300, + }, + { + children: [ + { + children: [], + label: '市中区', + value: 370402, + }, + { + children: [], + label: '薛城区', + value: 370403, + }, + { + children: [], + label: '峄城区', + value: 370404, + }, + { + children: [], + label: '台儿庄区', + value: 370405, + }, + { + children: [], + label: '山亭区', + value: 370406, + }, + { + children: [], + label: '滕州市', + value: 370481, + }, + ], + label: '枣庄市', + value: 370400, + }, + { + children: [ + { + children: [], + label: '东营区', + value: 370502, + }, + { + children: [], + label: '河口区', + value: 370503, + }, + { + children: [], + label: '垦利区', + value: 370505, + }, + { + children: [], + label: '利津县', + value: 370522, + }, + { + children: [], + label: '广饶县', + value: 370523, + }, + ], + label: '东营市', + value: 370500, + }, + { + children: [ + { + children: [], + label: '芝罘区', + value: 370602, + }, + { + children: [], + label: '福山区', + value: 370611, + }, + { + children: [], + label: '牟平区', + value: 370612, + }, + { + children: [], + label: '莱山区', + value: 370613, + }, + { + children: [], + label: '长岛县', + value: 370634, + }, + { + children: [], + label: '龙口市', + value: 370681, + }, + { + children: [], + label: '莱阳市', + value: 370682, + }, + { + children: [], + label: '莱州市', + value: 370683, + }, + { + children: [], + label: '蓬莱市', + value: 370684, + }, + { + children: [], + label: '招远市', + value: 370685, + }, + { + children: [], + label: '栖霞市', + value: 370686, + }, + { + children: [], + label: '海阳市', + value: 370687, + }, + ], + label: '烟台市', + value: 370600, + }, + { + children: [ + { + children: [], + label: '潍城区', + value: 370702, + }, + { + children: [], + label: '寒亭区', + value: 370703, + }, + { + children: [], + label: '坊子区', + value: 370704, + }, + { + children: [], + label: '奎文区', + value: 370705, + }, + { + children: [], + label: '临朐县', + value: 370724, + }, + { + children: [], + label: '昌乐县', + value: 370725, + }, + { + children: [], + label: '青州市', + value: 370781, + }, + { + children: [], + label: '诸城市', + value: 370782, + }, + { + children: [], + label: '寿光市', + value: 370783, + }, + { + children: [], + label: '安丘市', + value: 370784, + }, + { + children: [], + label: '高密市', + value: 370785, + }, + { + children: [], + label: '昌邑市', + value: 370786, + }, + ], + label: '潍坊市', + value: 370700, + }, + { + children: [ + { + children: [], + label: '任城区', + value: 370811, + }, + { + children: [], + label: '兖州区', + value: 370812, + }, + { + children: [], + label: '微山县', + value: 370826, + }, + { + children: [], + label: '鱼台县', + value: 370827, + }, + { + children: [], + label: '金乡县', + value: 370828, + }, + { + children: [], + label: '嘉祥县', + value: 370829, + }, + { + children: [], + label: '汶上县', + value: 370830, + }, + { + children: [], + label: '泗水县', + value: 370831, + }, + { + children: [], + label: '梁山县', + value: 370832, + }, + { + children: [], + label: '曲阜市', + value: 370881, + }, + { + children: [], + label: '邹城市', + value: 370883, + }, + ], + label: '济宁市', + value: 370800, + }, + { + children: [ + { + children: [], + label: '泰山区', + value: 370902, + }, + { + children: [], + label: '岱岳区', + value: 370911, + }, + { + children: [], + label: '宁阳县', + value: 370921, + }, + { + children: [], + label: '东平县', + value: 370923, + }, + { + children: [], + label: '新泰市', + value: 370982, + }, + { + children: [], + label: '肥城市', + value: 370983, + }, + ], + label: '泰安市', + value: 370900, + }, + { + children: [ + { + children: [], + label: '环翠区', + value: 371002, + }, + { + children: [], + label: '文登区', + value: 371003, + }, + { + children: [], + label: '荣成市', + value: 371082, + }, + { + children: [], + label: '乳山市', + value: 371083, + }, + ], + label: '威海市', + value: 371000, + }, + { + children: [ + { + children: [], + label: '东港区', + value: 371102, + }, + { + children: [], + label: '岚山区', + value: 371103, + }, + { + children: [], + label: '五莲县', + value: 371121, + }, + { + children: [], + label: '莒县', + value: 371122, + }, + ], + label: '日照市', + value: 371100, + }, + { + children: [ + { + children: [], + label: '兰山区', + value: 371302, + }, + { + children: [], + label: '罗庄区', + value: 371311, + }, + { + children: [], + label: '河东区', + value: 371312, + }, + { + children: [], + label: '沂南县', + value: 371321, + }, + { + children: [], + label: '郯城县', + value: 371322, + }, + { + children: [], + label: '沂水县', + value: 371323, + }, + { + children: [], + label: '兰陵县', + value: 371324, + }, + { + children: [], + label: '费县', + value: 371325, + }, + { + children: [], + label: '平邑县', + value: 371326, + }, + { + children: [], + label: '莒南县', + value: 371327, + }, + { + children: [], + label: '蒙阴县', + value: 371328, + }, + { + children: [], + label: '临沭县', + value: 371329, + }, + ], + label: '临沂市', + value: 371300, + }, + { + children: [ + { + children: [], + label: '德城区', + value: 371402, + }, + { + children: [], + label: '陵城区', + value: 371403, + }, + { + children: [], + label: '宁津县', + value: 371422, + }, + { + children: [], + label: '庆云县', + value: 371423, + }, + { + children: [], + label: '临邑县', + value: 371424, + }, + { + children: [], + label: '齐河县', + value: 371425, + }, + { + children: [], + label: '平原县', + value: 371426, + }, + { + children: [], + label: '夏津县', + value: 371427, + }, + { + children: [], + label: '武城县', + value: 371428, + }, + { + children: [], + label: '乐陵市', + value: 371481, + }, + { + children: [], + label: '禹城市', + value: 371482, + }, + ], + label: '德州市', + value: 371400, + }, + { + children: [ + { + children: [], + label: '东昌府区', + value: 371502, + }, + { + children: [], + label: '阳谷县', + value: 371521, + }, + { + children: [], + label: '莘县', + value: 371522, + }, + { + children: [], + label: '茌平县', + value: 371523, + }, + { + children: [], + label: '东阿县', + value: 371524, + }, + { + children: [], + label: '冠县', + value: 371525, + }, + { + children: [], + label: '高唐县', + value: 371526, + }, + { + children: [], + label: '临清市', + value: 371581, + }, + ], + label: '聊城市', + value: 371500, + }, + { + children: [ + { + children: [], + label: '滨城区', + value: 371602, + }, + { + children: [], + label: '沾化区', + value: 371603, + }, + { + children: [], + label: '惠民县', + value: 371621, + }, + { + children: [], + label: '阳信县', + value: 371622, + }, + { + children: [], + label: '无棣县', + value: 371623, + }, + { + children: [], + label: '博兴县', + value: 371625, + }, + { + children: [], + label: '邹平市', + value: 371681, + }, + ], + label: '滨州市', + value: 371600, + }, + { + children: [ + { + children: [], + label: '牡丹区', + value: 371702, + }, + { + children: [], + label: '定陶区', + value: 371703, + }, + { + children: [], + label: '曹县', + value: 371721, + }, + { + children: [], + label: '单县', + value: 371722, + }, + { + children: [], + label: '成武县', + value: 371723, + }, + { + children: [], + label: '巨野县', + value: 371724, + }, + { + children: [], + label: '郓城县', + value: 371725, + }, + { + children: [], + label: '鄄城县', + value: 371726, + }, + { + children: [], + label: '东明县', + value: 371728, + }, + ], + label: '菏泽市', + value: 371700, + }, + ], + label: '山东省', + value: 370000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '中原区', + value: 410102, + }, + { + children: [], + label: '二七区', + value: 410103, + }, + { + children: [], + label: '管城回族区', + value: 410104, + }, + { + children: [], + label: '金水区', + value: 410105, + }, + { + children: [], + label: '上街区', + value: 410106, + }, + { + children: [], + label: '惠济区', + value: 410108, + }, + { + children: [], + label: '中牟县', + value: 410122, + }, + { + children: [], + label: '巩义市', + value: 410181, + }, + { + children: [], + label: '荥阳市', + value: 410182, + }, + { + children: [], + label: '新密市', + value: 410183, + }, + { + children: [], + label: '新郑市', + value: 410184, + }, + { + children: [], + label: '登封市', + value: 410185, + }, + ], + label: '郑州市', + value: 410100, + }, + { + children: [ + { + children: [], + label: '龙亭区', + value: 410202, + }, + { + children: [], + label: '顺河回族区', + value: 410203, + }, + { + children: [], + label: '鼓楼区', + value: 410204, + }, + { + children: [], + label: '禹王台区', + value: 410205, + }, + { + children: [], + label: '祥符区', + value: 410212, + }, + { + children: [], + label: '杞县', + value: 410221, + }, + { + children: [], + label: '通许县', + value: 410222, + }, + { + children: [], + label: '尉氏县', + value: 410223, + }, + { + children: [], + label: '兰考县', + value: 410225, + }, + ], + label: '开封市', + value: 410200, + }, + { + children: [ + { + children: [], + label: '老城区', + value: 410302, + }, + { + children: [], + label: '西工区', + value: 410303, + }, + { + children: [], + label: '瀍河回族区', + value: 410304, + }, + { + children: [], + label: '涧西区', + value: 410305, + }, + { + children: [], + label: '吉利区', + value: 410306, + }, + { + children: [], + label: '洛龙区', + value: 410311, + }, + { + children: [], + label: '孟津县', + value: 410322, + }, + { + children: [], + label: '新安县', + value: 410323, + }, + { + children: [], + label: '栾川县', + value: 410324, + }, + { + children: [], + label: '嵩县', + value: 410325, + }, + { + children: [], + label: '汝阳县', + value: 410326, + }, + { + children: [], + label: '宜阳县', + value: 410327, + }, + { + children: [], + label: '洛宁县', + value: 410328, + }, + { + children: [], + label: '伊川县', + value: 410329, + }, + { + children: [], + label: '偃师市', + value: 410381, + }, + ], + label: '洛阳市', + value: 410300, + }, + { + children: [ + { + children: [], + label: '新华区', + value: 410402, + }, + { + children: [], + label: '卫东区', + value: 410403, + }, + { + children: [], + label: '石龙区', + value: 410404, + }, + { + children: [], + label: '湛河区', + value: 410411, + }, + { + children: [], + label: '宝丰县', + value: 410421, + }, + { + children: [], + label: '叶县', + value: 410422, + }, + { + children: [], + label: '鲁山县', + value: 410423, + }, + { + children: [], + label: '郏县', + value: 410425, + }, + { + children: [], + label: '舞钢市', + value: 410481, + }, + { + children: [], + label: '汝州市', + value: 410482, + }, + ], + label: '平顶山市', + value: 410400, + }, + { + children: [ + { + children: [], + label: '文峰区', + value: 410502, + }, + { + children: [], + label: '北关区', + value: 410503, + }, + { + children: [], + label: '殷都区', + value: 410505, + }, + { + children: [], + label: '龙安区', + value: 410506, + }, + { + children: [], + label: '安阳县', + value: 410522, + }, + { + children: [], + label: '汤阴县', + value: 410523, + }, + { + children: [], + label: '滑县', + value: 410526, + }, + { + children: [], + label: '内黄县', + value: 410527, + }, + { + children: [], + label: '林州市', + value: 410581, + }, + ], + label: '安阳市', + value: 410500, + }, + { + children: [ + { + children: [], + label: '鹤山区', + value: 410602, + }, + { + children: [], + label: '山城区', + value: 410603, + }, + { + children: [], + label: '淇滨区', + value: 410611, + }, + { + children: [], + label: '浚县', + value: 410621, + }, + { + children: [], + label: '淇县', + value: 410622, + }, + ], + label: '鹤壁市', + value: 410600, + }, + { + children: [ + { + children: [], + label: '红旗区', + value: 410702, + }, + { + children: [], + label: '卫滨区', + value: 410703, + }, + { + children: [], + label: '凤泉区', + value: 410704, + }, + { + children: [], + label: '牧野区', + value: 410711, + }, + { + children: [], + label: '新乡县', + value: 410721, + }, + { + children: [], + label: '获嘉县', + value: 410724, + }, + { + children: [], + label: '原阳县', + value: 410725, + }, + { + children: [], + label: '延津县', + value: 410726, + }, + { + children: [], + label: '封丘县', + value: 410727, + }, + { + children: [], + label: '长垣县', + value: 410728, + }, + { + children: [], + label: '卫辉市', + value: 410781, + }, + { + children: [], + label: '辉县市', + value: 410782, + }, + ], + label: '新乡市', + value: 410700, + }, + { + children: [ + { + children: [], + label: '解放区', + value: 410802, + }, + { + children: [], + label: '中站区', + value: 410803, + }, + { + children: [], + label: '马村区', + value: 410804, + }, + { + children: [], + label: '山阳区', + value: 410811, + }, + { + children: [], + label: '修武县', + value: 410821, + }, + { + children: [], + label: '博爱县', + value: 410822, + }, + { + children: [], + label: '武陟县', + value: 410823, + }, + { + children: [], + label: '温县', + value: 410825, + }, + { + children: [], + label: '沁阳市', + value: 410882, + }, + { + children: [], + label: '孟州市', + value: 410883, + }, + ], + label: '焦作市', + value: 410800, + }, + { + children: [ + { + children: [], + label: '华龙区', + value: 410902, + }, + { + children: [], + label: '清丰县', + value: 410922, + }, + { + children: [], + label: '南乐县', + value: 410923, + }, + { + children: [], + label: '范县', + value: 410926, + }, + { + children: [], + label: '台前县', + value: 410927, + }, + { + children: [], + label: '濮阳县', + value: 410928, + }, + ], + label: '濮阳市', + value: 410900, + }, + { + children: [ + { + children: [], + label: '魏都区', + value: 411002, + }, + { + children: [], + label: '建安区', + value: 411003, + }, + { + children: [], + label: '鄢陵县', + value: 411024, + }, + { + children: [], + label: '襄城县', + value: 411025, + }, + { + children: [], + label: '禹州市', + value: 411081, + }, + { + children: [], + label: '长葛市', + value: 411082, + }, + ], + label: '许昌市', + value: 411000, + }, + { + children: [ + { + children: [], + label: '源汇区', + value: 411102, + }, + { + children: [], + label: '郾城区', + value: 411103, + }, + { + children: [], + label: '召陵区', + value: 411104, + }, + { + children: [], + label: '舞阳县', + value: 411121, + }, + { + children: [], + label: '临颍县', + value: 411122, + }, + ], + label: '漯河市', + value: 411100, + }, + { + children: [ + { + children: [], + label: '湖滨区', + value: 411202, + }, + { + children: [], + label: '陕州区', + value: 411203, + }, + { + children: [], + label: '渑池县', + value: 411221, + }, + { + children: [], + label: '卢氏县', + value: 411224, + }, + { + children: [], + label: '义马市', + value: 411281, + }, + { + children: [], + label: '灵宝市', + value: 411282, + }, + ], + label: '三门峡市', + value: 411200, + }, + { + children: [ + { + children: [], + label: '宛城区', + value: 411302, + }, + { + children: [], + label: '卧龙区', + value: 411303, + }, + { + children: [], + label: '南召县', + value: 411321, + }, + { + children: [], + label: '方城县', + value: 411322, + }, + { + children: [], + label: '西峡县', + value: 411323, + }, + { + children: [], + label: '镇平县', + value: 411324, + }, + { + children: [], + label: '内乡县', + value: 411325, + }, + { + children: [], + label: '淅川县', + value: 411326, + }, + { + children: [], + label: '社旗县', + value: 411327, + }, + { + children: [], + label: '唐河县', + value: 411328, + }, + { + children: [], + label: '新野县', + value: 411329, + }, + { + children: [], + label: '桐柏县', + value: 411330, + }, + { + children: [], + label: '邓州市', + value: 411381, + }, + ], + label: '南阳市', + value: 411300, + }, + { + children: [ + { + children: [], + label: '梁园区', + value: 411402, + }, + { + children: [], + label: '睢阳区', + value: 411403, + }, + { + children: [], + label: '民权县', + value: 411421, + }, + { + children: [], + label: '睢县', + value: 411422, + }, + { + children: [], + label: '宁陵县', + value: 411423, + }, + { + children: [], + label: '柘城县', + value: 411424, + }, + { + children: [], + label: '虞城县', + value: 411425, + }, + { + children: [], + label: '夏邑县', + value: 411426, + }, + { + children: [], + label: '永城市', + value: 411481, + }, + ], + label: '商丘市', + value: 411400, + }, + { + children: [ + { + children: [], + label: '浉河区', + value: 411502, + }, + { + children: [], + label: '平桥区', + value: 411503, + }, + { + children: [], + label: '罗山县', + value: 411521, + }, + { + children: [], + label: '光山县', + value: 411522, + }, + { + children: [], + label: '新县', + value: 411523, + }, + { + children: [], + label: '商城县', + value: 411524, + }, + { + children: [], + label: '固始县', + value: 411525, + }, + { + children: [], + label: '潢川县', + value: 411526, + }, + { + children: [], + label: '淮滨县', + value: 411527, + }, + { + children: [], + label: '息县', + value: 411528, + }, + ], + label: '信阳市', + value: 411500, + }, + { + children: [ + { + children: [], + label: '川汇区', + value: 411602, + }, + { + children: [], + label: '扶沟县', + value: 411621, + }, + { + children: [], + label: '西华县', + value: 411622, + }, + { + children: [], + label: '商水县', + value: 411623, + }, + { + children: [], + label: '沈丘县', + value: 411624, + }, + { + children: [], + label: '郸城县', + value: 411625, + }, + { + children: [], + label: '淮阳县', + value: 411626, + }, + { + children: [], + label: '太康县', + value: 411627, + }, + { + children: [], + label: '鹿邑县', + value: 411628, + }, + { + children: [], + label: '项城市', + value: 411681, + }, + ], + label: '周口市', + value: 411600, + }, + { + children: [ + { + children: [], + label: '驿城区', + value: 411702, + }, + { + children: [], + label: '西平县', + value: 411721, + }, + { + children: [], + label: '上蔡县', + value: 411722, + }, + { + children: [], + label: '平舆县', + value: 411723, + }, + { + children: [], + label: '正阳县', + value: 411724, + }, + { + children: [], + label: '确山县', + value: 411725, + }, + { + children: [], + label: '泌阳县', + value: 411726, + }, + { + children: [], + label: '汝南县', + value: 411727, + }, + { + children: [], + label: '遂平县', + value: 411728, + }, + { + children: [], + label: '新蔡县', + value: 411729, + }, + ], + label: '驻马店市', + value: 411700, + }, + { + children: [], + label: '济源市', + value: 419001, + }, + ], + label: '河南省', + value: 410000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '江岸区', + value: 420102, + }, + { + children: [], + label: '江汉区', + value: 420103, + }, + { + children: [], + label: '硚口区', + value: 420104, + }, + { + children: [], + label: '汉阳区', + value: 420105, + }, + { + children: [], + label: '武昌区', + value: 420106, + }, + { + children: [], + label: '青山区', + value: 420107, + }, + { + children: [], + label: '洪山区', + value: 420111, + }, + { + children: [], + label: '东西湖区', + value: 420112, + }, + { + children: [], + label: '汉南区', + value: 420113, + }, + { + children: [], + label: '蔡甸区', + value: 420114, + }, + { + children: [], + label: '江夏区', + value: 420115, + }, + { + children: [], + label: '黄陂区', + value: 420116, + }, + { + children: [], + label: '新洲区', + value: 420117, + }, + ], + label: '武汉市', + value: 420100, + }, + { + children: [ + { + children: [], + label: '黄石港区', + value: 420202, + }, + { + children: [], + label: '西塞山区', + value: 420203, + }, + { + children: [], + label: '下陆区', + value: 420204, + }, + { + children: [], + label: '铁山区', + value: 420205, + }, + { + children: [], + label: '阳新县', + value: 420222, + }, + { + children: [], + label: '大冶市', + value: 420281, + }, + ], + label: '黄石市', + value: 420200, + }, + { + children: [ + { + children: [], + label: '茅箭区', + value: 420302, + }, + { + children: [], + label: '张湾区', + value: 420303, + }, + { + children: [], + label: '郧阳区', + value: 420304, + }, + { + children: [], + label: '郧西县', + value: 420322, + }, + { + children: [], + label: '竹山县', + value: 420323, + }, + { + children: [], + label: '竹溪县', + value: 420324, + }, + { + children: [], + label: '房县', + value: 420325, + }, + { + children: [], + label: '丹江口市', + value: 420381, + }, + ], + label: '十堰市', + value: 420300, + }, + { + children: [ + { + children: [], + label: '西陵区', + value: 420502, + }, + { + children: [], + label: '伍家岗区', + value: 420503, + }, + { + children: [], + label: '点军区', + value: 420504, + }, + { + children: [], + label: '猇亭区', + value: 420505, + }, + { + children: [], + label: '夷陵区', + value: 420506, + }, + { + children: [], + label: '远安县', + value: 420525, + }, + { + children: [], + label: '兴山县', + value: 420526, + }, + { + children: [], + label: '秭归县', + value: 420527, + }, + { + children: [], + label: '长阳土家族自治县', + value: 420528, + }, + { + children: [], + label: '五峰土家族自治县', + value: 420529, + }, + { + children: [], + label: '宜都市', + value: 420581, + }, + { + children: [], + label: '当阳市', + value: 420582, + }, + { + children: [], + label: '枝江市', + value: 420583, + }, + ], + label: '宜昌市', + value: 420500, + }, + { + children: [ + { + children: [], + label: '襄城区', + value: 420602, + }, + { + children: [], + label: '樊城区', + value: 420606, + }, + { + children: [], + label: '襄州区', + value: 420607, + }, + { + children: [], + label: '南漳县', + value: 420624, + }, + { + children: [], + label: '谷城县', + value: 420625, + }, + { + children: [], + label: '保康县', + value: 420626, + }, + { + children: [], + label: '老河口市', + value: 420682, + }, + { + children: [], + label: '枣阳市', + value: 420683, + }, + { + children: [], + label: '宜城市', + value: 420684, + }, + ], + label: '襄阳市', + value: 420600, + }, + { + children: [ + { + children: [], + label: '梁子湖区', + value: 420702, + }, + { + children: [], + label: '华容区', + value: 420703, + }, + { + children: [], + label: '鄂城区', + value: 420704, + }, + ], + label: '鄂州市', + value: 420700, + }, + { + children: [ + { + children: [], + label: '东宝区', + value: 420802, + }, + { + children: [], + label: '掇刀区', + value: 420804, + }, + { + children: [], + label: '沙洋县', + value: 420822, + }, + { + children: [], + label: '钟祥市', + value: 420881, + }, + { + children: [], + label: '京山市', + value: 420882, + }, + ], + label: '荆门市', + value: 420800, + }, + { + children: [ + { + children: [], + label: '孝南区', + value: 420902, + }, + { + children: [], + label: '孝昌县', + value: 420921, + }, + { + children: [], + label: '大悟县', + value: 420922, + }, + { + children: [], + label: '云梦县', + value: 420923, + }, + { + children: [], + label: '应城市', + value: 420981, + }, + { + children: [], + label: '安陆市', + value: 420982, + }, + { + children: [], + label: '汉川市', + value: 420984, + }, + ], + label: '孝感市', + value: 420900, + }, + { + children: [ + { + children: [], + label: '沙市区', + value: 421002, + }, + { + children: [], + label: '荆州区', + value: 421003, + }, + { + children: [], + label: '公安县', + value: 421022, + }, + { + children: [], + label: '监利县', + value: 421023, + }, + { + children: [], + label: '江陵县', + value: 421024, + }, + { + children: [], + label: '石首市', + value: 421081, + }, + { + children: [], + label: '洪湖市', + value: 421083, + }, + { + children: [], + label: '松滋市', + value: 421087, + }, + ], + label: '荆州市', + value: 421000, + }, + { + children: [ + { + children: [], + label: '黄州区', + value: 421102, + }, + { + children: [], + label: '团风县', + value: 421121, + }, + { + children: [], + label: '红安县', + value: 421122, + }, + { + children: [], + label: '罗田县', + value: 421123, + }, + { + children: [], + label: '英山县', + value: 421124, + }, + { + children: [], + label: '浠水县', + value: 421125, + }, + { + children: [], + label: '蕲春县', + value: 421126, + }, + { + children: [], + label: '黄梅县', + value: 421127, + }, + { + children: [], + label: '麻城市', + value: 421181, + }, + { + children: [], + label: '武穴市', + value: 421182, + }, + ], + label: '黄冈市', + value: 421100, + }, + { + children: [ + { + children: [], + label: '咸安区', + value: 421202, + }, + { + children: [], + label: '嘉鱼县', + value: 421221, + }, + { + children: [], + label: '通城县', + value: 421222, + }, + { + children: [], + label: '崇阳县', + value: 421223, + }, + { + children: [], + label: '通山县', + value: 421224, + }, + { + children: [], + label: '赤壁市', + value: 421281, + }, + ], + label: '咸宁市', + value: 421200, + }, + { + children: [ + { + children: [], + label: '曾都区', + value: 421303, + }, + { + children: [], + label: '随县', + value: 421321, + }, + { + children: [], + label: '广水市', + value: 421381, + }, + ], + label: '随州市', + value: 421300, + }, + { + children: [ + { + children: [], + label: '恩施市', + value: 422801, + }, + { + children: [], + label: '利川市', + value: 422802, + }, + { + children: [], + label: '建始县', + value: 422822, + }, + { + children: [], + label: '巴东县', + value: 422823, + }, + { + children: [], + label: '宣恩县', + value: 422825, + }, + { + children: [], + label: '咸丰县', + value: 422826, + }, + { + children: [], + label: '来凤县', + value: 422827, + }, + { + children: [], + label: '鹤峰县', + value: 422828, + }, + ], + label: '恩施土家族苗族自治州', + value: 422800, + }, + { + children: [], + label: '仙桃市', + value: 429004, + }, + { + children: [], + label: '潜江市', + value: 429005, + }, + { + children: [], + label: '天门市', + value: 429006, + }, + { + children: [], + label: '神农架林区', + value: 429021, + }, + ], + label: '湖北省', + value: 420000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '芙蓉区', + value: 430102, + }, + { + children: [], + label: '天心区', + value: 430103, + }, + { + children: [], + label: '岳麓区', + value: 430104, + }, + { + children: [], + label: '开福区', + value: 430105, + }, + { + children: [], + label: '雨花区', + value: 430111, + }, + { + children: [], + label: '望城区', + value: 430112, + }, + { + children: [], + label: '长沙县', + value: 430121, + }, + { + children: [], + label: '浏阳市', + value: 430181, + }, + { + children: [], + label: '宁乡市', + value: 430182, + }, + ], + label: '长沙市', + value: 430100, + }, + { + children: [ + { + children: [], + label: '荷塘区', + value: 430202, + }, + { + children: [], + label: '芦淞区', + value: 430203, + }, + { + children: [], + label: '石峰区', + value: 430204, + }, + { + children: [], + label: '天元区', + value: 430211, + }, + { + children: [], + label: '渌口区', + value: 430212, + }, + { + children: [], + label: '攸县', + value: 430223, + }, + { + children: [], + label: '茶陵县', + value: 430224, + }, + { + children: [], + label: '炎陵县', + value: 430225, + }, + { + children: [], + label: '醴陵市', + value: 430281, + }, + ], + label: '株洲市', + value: 430200, + }, + { + children: [ + { + children: [], + label: '雨湖区', + value: 430302, + }, + { + children: [], + label: '岳塘区', + value: 430304, + }, + { + children: [], + label: '湘潭县', + value: 430321, + }, + { + children: [], + label: '湘乡市', + value: 430381, + }, + { + children: [], + label: '韶山市', + value: 430382, + }, + ], + label: '湘潭市', + value: 430300, + }, + { + children: [ + { + children: [], + label: '珠晖区', + value: 430405, + }, + { + children: [], + label: '雁峰区', + value: 430406, + }, + { + children: [], + label: '石鼓区', + value: 430407, + }, + { + children: [], + label: '蒸湘区', + value: 430408, + }, + { + children: [], + label: '南岳区', + value: 430412, + }, + { + children: [], + label: '衡阳县', + value: 430421, + }, + { + children: [], + label: '衡南县', + value: 430422, + }, + { + children: [], + label: '衡山县', + value: 430423, + }, + { + children: [], + label: '衡东县', + value: 430424, + }, + { + children: [], + label: '祁东县', + value: 430426, + }, + { + children: [], + label: '耒阳市', + value: 430481, + }, + { + children: [], + label: '常宁市', + value: 430482, + }, + ], + label: '衡阳市', + value: 430400, + }, + { + children: [ + { + children: [], + label: '双清区', + value: 430502, + }, + { + children: [], + label: '大祥区', + value: 430503, + }, + { + children: [], + label: '北塔区', + value: 430511, + }, + { + children: [], + label: '邵东县', + value: 430521, + }, + { + children: [], + label: '新邵县', + value: 430522, + }, + { + children: [], + label: '邵阳县', + value: 430523, + }, + { + children: [], + label: '隆回县', + value: 430524, + }, + { + children: [], + label: '洞口县', + value: 430525, + }, + { + children: [], + label: '绥宁县', + value: 430527, + }, + { + children: [], + label: '新宁县', + value: 430528, + }, + { + children: [], + label: '城步苗族自治县', + value: 430529, + }, + { + children: [], + label: '武冈市', + value: 430581, + }, + ], + label: '邵阳市', + value: 430500, + }, + { + children: [ + { + children: [], + label: '岳阳楼区', + value: 430602, + }, + { + children: [], + label: '云溪区', + value: 430603, + }, + { + children: [], + label: '君山区', + value: 430611, + }, + { + children: [], + label: '岳阳县', + value: 430621, + }, + { + children: [], + label: '华容县', + value: 430623, + }, + { + children: [], + label: '湘阴县', + value: 430624, + }, + { + children: [], + label: '平江县', + value: 430626, + }, + { + children: [], + label: '汨罗市', + value: 430681, + }, + { + children: [], + label: '临湘市', + value: 430682, + }, + ], + label: '岳阳市', + value: 430600, + }, + { + children: [ + { + children: [], + label: '武陵区', + value: 430702, + }, + { + children: [], + label: '鼎城区', + value: 430703, + }, + { + children: [], + label: '安乡县', + value: 430721, + }, + { + children: [], + label: '汉寿县', + value: 430722, + }, + { + children: [], + label: '澧县', + value: 430723, + }, + { + children: [], + label: '临澧县', + value: 430724, + }, + { + children: [], + label: '桃源县', + value: 430725, + }, + { + children: [], + label: '石门县', + value: 430726, + }, + { + children: [], + label: '津市市', + value: 430781, + }, + ], + label: '常德市', + value: 430700, + }, + { + children: [ + { + children: [], + label: '永定区', + value: 430802, + }, + { + children: [], + label: '武陵源区', + value: 430811, + }, + { + children: [], + label: '慈利县', + value: 430821, + }, + { + children: [], + label: '桑植县', + value: 430822, + }, + ], + label: '张家界市', + value: 430800, + }, + { + children: [ + { + children: [], + label: '资阳区', + value: 430902, + }, + { + children: [], + label: '赫山区', + value: 430903, + }, + { + children: [], + label: '南县', + value: 430921, + }, + { + children: [], + label: '桃江县', + value: 430922, + }, + { + children: [], + label: '安化县', + value: 430923, + }, + { + children: [], + label: '沅江市', + value: 430981, + }, + ], + label: '益阳市', + value: 430900, + }, + { + children: [ + { + children: [], + label: '北湖区', + value: 431002, + }, + { + children: [], + label: '苏仙区', + value: 431003, + }, + { + children: [], + label: '桂阳县', + value: 431021, + }, + { + children: [], + label: '宜章县', + value: 431022, + }, + { + children: [], + label: '永兴县', + value: 431023, + }, + { + children: [], + label: '嘉禾县', + value: 431024, + }, + { + children: [], + label: '临武县', + value: 431025, + }, + { + children: [], + label: '汝城县', + value: 431026, + }, + { + children: [], + label: '桂东县', + value: 431027, + }, + { + children: [], + label: '安仁县', + value: 431028, + }, + { + children: [], + label: '资兴市', + value: 431081, + }, + ], + label: '郴州市', + value: 431000, + }, + { + children: [ + { + children: [], + label: '零陵区', + value: 431102, + }, + { + children: [], + label: '冷水滩区', + value: 431103, + }, + { + children: [], + label: '祁阳县', + value: 431121, + }, + { + children: [], + label: '东安县', + value: 431122, + }, + { + children: [], + label: '双牌县', + value: 431123, + }, + { + children: [], + label: '道县', + value: 431124, + }, + { + children: [], + label: '江永县', + value: 431125, + }, + { + children: [], + label: '宁远县', + value: 431126, + }, + { + children: [], + label: '蓝山县', + value: 431127, + }, + { + children: [], + label: '新田县', + value: 431128, + }, + { + children: [], + label: '江华瑶族自治县', + value: 431129, + }, + ], + label: '永州市', + value: 431100, + }, + { + children: [ + { + children: [], + label: '鹤城区', + value: 431202, + }, + { + children: [], + label: '中方县', + value: 431221, + }, + { + children: [], + label: '沅陵县', + value: 431222, + }, + { + children: [], + label: '辰溪县', + value: 431223, + }, + { + children: [], + label: '溆浦县', + value: 431224, + }, + { + children: [], + label: '会同县', + value: 431225, + }, + { + children: [], + label: '麻阳苗族自治县', + value: 431226, + }, + { + children: [], + label: '新晃侗族自治县', + value: 431227, + }, + { + children: [], + label: '芷江侗族自治县', + value: 431228, + }, + { + children: [], + label: '靖州苗族侗族自治县', + value: 431229, + }, + { + children: [], + label: '通道侗族自治县', + value: 431230, + }, + { + children: [], + label: '洪江市', + value: 431281, + }, + ], + label: '怀化市', + value: 431200, + }, + { + children: [ + { + children: [], + label: '娄星区', + value: 431302, + }, + { + children: [], + label: '双峰县', + value: 431321, + }, + { + children: [], + label: '新化县', + value: 431322, + }, + { + children: [], + label: '冷水江市', + value: 431381, + }, + { + children: [], + label: '涟源市', + value: 431382, + }, + ], + label: '娄底市', + value: 431300, + }, + { + children: [ + { + children: [], + label: '吉首市', + value: 433101, + }, + { + children: [], + label: '泸溪县', + value: 433122, + }, + { + children: [], + label: '凤凰县', + value: 433123, + }, + { + children: [], + label: '花垣县', + value: 433124, + }, + { + children: [], + label: '保靖县', + value: 433125, + }, + { + children: [], + label: '古丈县', + value: 433126, + }, + { + children: [], + label: '永顺县', + value: 433127, + }, + { + children: [], + label: '龙山县', + value: 433130, + }, + ], + label: '湘西土家族苗族自治州', + value: 433100, + }, + ], + label: '湖南省', + value: 430000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '荔湾区', + value: 440103, + }, + { + children: [], + label: '越秀区', + value: 440104, + }, + { + children: [], + label: '海珠区', + value: 440105, + }, + { + children: [], + label: '天河区', + value: 440106, + }, + { + children: [], + label: '白云区', + value: 440111, + }, + { + children: [], + label: '黄埔区', + value: 440112, + }, + { + children: [], + label: '番禺区', + value: 440113, + }, + { + children: [], + label: '花都区', + value: 440114, + }, + { + children: [], + label: '南沙区', + value: 440115, + }, + { + children: [], + label: '从化区', + value: 440117, + }, + { + children: [], + label: '增城区', + value: 440118, + }, + ], + label: '广州市', + value: 440100, + }, + { + children: [ + { + children: [], + label: '武江区', + value: 440203, + }, + { + children: [], + label: '浈江区', + value: 440204, + }, + { + children: [], + label: '曲江区', + value: 440205, + }, + { + children: [], + label: '始兴县', + value: 440222, + }, + { + children: [], + label: '仁化县', + value: 440224, + }, + { + children: [], + label: '翁源县', + value: 440229, + }, + { + children: [], + label: '乳源瑶族自治县', + value: 440232, + }, + { + children: [], + label: '新丰县', + value: 440233, + }, + { + children: [], + label: '乐昌市', + value: 440281, + }, + { + children: [], + label: '南雄市', + value: 440282, + }, + ], + label: '韶关市', + value: 440200, + }, + { + children: [ + { + children: [], + label: '罗湖区', + value: 440303, + }, + { + children: [], + label: '福田区', + value: 440304, + }, + { + children: [], + label: '南山区', + value: 440305, + }, + { + children: [], + label: '宝安区', + value: 440306, + }, + { + children: [], + label: '龙岗区', + value: 440307, + }, + { + children: [], + label: '盐田区', + value: 440308, + }, + { + children: [], + label: '龙华区', + value: 440309, + }, + { + children: [], + label: '坪山区', + value: 440310, + }, + { + children: [], + label: '光明区', + value: 440311, + }, + ], + label: '深圳市', + value: 440300, + }, + { + children: [ + { + children: [], + label: '香洲区', + value: 440402, + }, + { + children: [], + label: '斗门区', + value: 440403, + }, + { + children: [], + label: '金湾区', + value: 440404, + }, + ], + label: '珠海市', + value: 440400, + }, + { + children: [ + { + children: [], + label: '龙湖区', + value: 440507, + }, + { + children: [], + label: '金平区', + value: 440511, + }, + { + children: [], + label: '濠江区', + value: 440512, + }, + { + children: [], + label: '潮阳区', + value: 440513, + }, + { + children: [], + label: '潮南区', + value: 440514, + }, + { + children: [], + label: '澄海区', + value: 440515, + }, + { + children: [], + label: '南澳县', + value: 440523, + }, + ], + label: '汕头市', + value: 440500, + }, + { + children: [ + { + children: [], + label: '禅城区', + value: 440604, + }, + { + children: [], + label: '南海区', + value: 440605, + }, + { + children: [], + label: '顺德区', + value: 440606, + }, + { + children: [], + label: '三水区', + value: 440607, + }, + { + children: [], + label: '高明区', + value: 440608, + }, + ], + label: '佛山市', + value: 440600, + }, + { + children: [ + { + children: [], + label: '蓬江区', + value: 440703, + }, + { + children: [], + label: '江海区', + value: 440704, + }, + { + children: [], + label: '新会区', + value: 440705, + }, + { + children: [], + label: '台山市', + value: 440781, + }, + { + children: [], + label: '开平市', + value: 440783, + }, + { + children: [], + label: '鹤山市', + value: 440784, + }, + { + children: [], + label: '恩平市', + value: 440785, + }, + ], + label: '江门市', + value: 440700, + }, + { + children: [ + { + children: [], + label: '赤坎区', + value: 440802, + }, + { + children: [], + label: '霞山区', + value: 440803, + }, + { + children: [], + label: '坡头区', + value: 440804, + }, + { + children: [], + label: '麻章区', + value: 440811, + }, + { + children: [], + label: '遂溪县', + value: 440823, + }, + { + children: [], + label: '徐闻县', + value: 440825, + }, + { + children: [], + label: '廉江市', + value: 440881, + }, + { + children: [], + label: '雷州市', + value: 440882, + }, + { + children: [], + label: '吴川市', + value: 440883, + }, + ], + label: '湛江市', + value: 440800, + }, + { + children: [ + { + children: [], + label: '茂南区', + value: 440902, + }, + { + children: [], + label: '电白区', + value: 440904, + }, + { + children: [], + label: '高州市', + value: 440981, + }, + { + children: [], + label: '化州市', + value: 440982, + }, + { + children: [], + label: '信宜市', + value: 440983, + }, + ], + label: '茂名市', + value: 440900, + }, + { + children: [ + { + children: [], + label: '端州区', + value: 441202, + }, + { + children: [], + label: '鼎湖区', + value: 441203, + }, + { + children: [], + label: '高要区', + value: 441204, + }, + { + children: [], + label: '广宁县', + value: 441223, + }, + { + children: [], + label: '怀集县', + value: 441224, + }, + { + children: [], + label: '封开县', + value: 441225, + }, + { + children: [], + label: '德庆县', + value: 441226, + }, + { + children: [], + label: '四会市', + value: 441284, + }, + ], + label: '肇庆市', + value: 441200, + }, + { + children: [ + { + children: [], + label: '惠城区', + value: 441302, + }, + { + children: [], + label: '惠阳区', + value: 441303, + }, + { + children: [], + label: '博罗县', + value: 441322, + }, + { + children: [], + label: '惠东县', + value: 441323, + }, + { + children: [], + label: '龙门县', + value: 441324, + }, + ], + label: '惠州市', + value: 441300, + }, + { + children: [ + { + children: [], + label: '梅江区', + value: 441402, + }, + { + children: [], + label: '梅县区', + value: 441403, + }, + { + children: [], + label: '大埔县', + value: 441422, + }, + { + children: [], + label: '丰顺县', + value: 441423, + }, + { + children: [], + label: '五华县', + value: 441424, + }, + { + children: [], + label: '平远县', + value: 441426, + }, + { + children: [], + label: '蕉岭县', + value: 441427, + }, + { + children: [], + label: '兴宁市', + value: 441481, + }, + ], + label: '梅州市', + value: 441400, + }, + { + children: [ + { + children: [], + label: '城区', + value: 441502, + }, + { + children: [], + label: '海丰县', + value: 441521, + }, + { + children: [], + label: '陆河县', + value: 441523, + }, + { + children: [], + label: '陆丰市', + value: 441581, + }, + ], + label: '汕尾市', + value: 441500, + }, + { + children: [ + { + children: [], + label: '源城区', + value: 441602, + }, + { + children: [], + label: '紫金县', + value: 441621, + }, + { + children: [], + label: '龙川县', + value: 441622, + }, + { + children: [], + label: '连平县', + value: 441623, + }, + { + children: [], + label: '和平县', + value: 441624, + }, + { + children: [], + label: '东源县', + value: 441625, + }, + ], + label: '河源市', + value: 441600, + }, + { + children: [ + { + children: [], + label: '江城区', + value: 441702, + }, + { + children: [], + label: '阳东区', + value: 441704, + }, + { + children: [], + label: '阳西县', + value: 441721, + }, + { + children: [], + label: '阳春市', + value: 441781, + }, + ], + label: '阳江市', + value: 441700, + }, + { + children: [ + { + children: [], + label: '清城区', + value: 441802, + }, + { + children: [], + label: '清新区', + value: 441803, + }, + { + children: [], + label: '佛冈县', + value: 441821, + }, + { + children: [], + label: '阳山县', + value: 441823, + }, + { + children: [], + label: '连山壮族瑶族自治县', + value: 441825, + }, + { + children: [], + label: '连南瑶族自治县', + value: 441826, + }, + { + children: [], + label: '英德市', + value: 441881, + }, + { + children: [], + label: '连州市', + value: 441882, + }, + ], + label: '清远市', + value: 441800, + }, + { + children: [], + label: '东莞市', + value: 441900, + }, + { + children: [], + label: '中山市', + value: 442000, + }, + { + children: [ + { + children: [], + label: '湘桥区', + value: 445102, + }, + { + children: [], + label: '潮安区', + value: 445103, + }, + { + children: [], + label: '饶平县', + value: 445122, + }, + ], + label: '潮州市', + value: 445100, + }, + { + children: [ + { + children: [], + label: '榕城区', + value: 445202, + }, + { + children: [], + label: '揭东区', + value: 445203, + }, + { + children: [], + label: '揭西县', + value: 445222, + }, + { + children: [], + label: '惠来县', + value: 445224, + }, + { + children: [], + label: '普宁市', + value: 445281, + }, + ], + label: '揭阳市', + value: 445200, + }, + { + children: [ + { + children: [], + label: '云城区', + value: 445302, + }, + { + children: [], + label: '云安区', + value: 445303, + }, + { + children: [], + label: '新兴县', + value: 445321, + }, + { + children: [], + label: '郁南县', + value: 445322, + }, + { + children: [], + label: '罗定市', + value: 445381, + }, + ], + label: '云浮市', + value: 445300, + }, + ], + label: '广东省', + value: 440000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '兴宁区', + value: 450102, + }, + { + children: [], + label: '青秀区', + value: 450103, + }, + { + children: [], + label: '江南区', + value: 450105, + }, + { + children: [], + label: '西乡塘区', + value: 450107, + }, + { + children: [], + label: '良庆区', + value: 450108, + }, + { + children: [], + label: '邕宁区', + value: 450109, + }, + { + children: [], + label: '武鸣区', + value: 450110, + }, + { + children: [], + label: '隆安县', + value: 450123, + }, + { + children: [], + label: '马山县', + value: 450124, + }, + { + children: [], + label: '上林县', + value: 450125, + }, + { + children: [], + label: '宾阳县', + value: 450126, + }, + { + children: [], + label: '横县', + value: 450127, + }, + ], + label: '南宁市', + value: 450100, + }, + { + children: [ + { + children: [], + label: '城中区', + value: 450202, + }, + { + children: [], + label: '鱼峰区', + value: 450203, + }, + { + children: [], + label: '柳南区', + value: 450204, + }, + { + children: [], + label: '柳北区', + value: 450205, + }, + { + children: [], + label: '柳江区', + value: 450206, + }, + { + children: [], + label: '柳城县', + value: 450222, + }, + { + children: [], + label: '鹿寨县', + value: 450223, + }, + { + children: [], + label: '融安县', + value: 450224, + }, + { + children: [], + label: '融水苗族自治县', + value: 450225, + }, + { + children: [], + label: '三江侗族自治县', + value: 450226, + }, + ], + label: '柳州市', + value: 450200, + }, + { + children: [ + { + children: [], + label: '秀峰区', + value: 450302, + }, + { + children: [], + label: '叠彩区', + value: 450303, + }, + { + children: [], + label: '象山区', + value: 450304, + }, + { + children: [], + label: '七星区', + value: 450305, + }, + { + children: [], + label: '雁山区', + value: 450311, + }, + { + children: [], + label: '临桂区', + value: 450312, + }, + { + children: [], + label: '阳朔县', + value: 450321, + }, + { + children: [], + label: '灵川县', + value: 450323, + }, + { + children: [], + label: '全州县', + value: 450324, + }, + { + children: [], + label: '兴安县', + value: 450325, + }, + { + children: [], + label: '永福县', + value: 450326, + }, + { + children: [], + label: '灌阳县', + value: 450327, + }, + { + children: [], + label: '龙胜各族自治县', + value: 450328, + }, + { + children: [], + label: '资源县', + value: 450329, + }, + { + children: [], + label: '平乐县', + value: 450330, + }, + { + children: [], + label: '恭城瑶族自治县', + value: 450332, + }, + { + children: [], + label: '荔浦市', + value: 450381, + }, + ], + label: '桂林市', + value: 450300, + }, + { + children: [ + { + children: [], + label: '万秀区', + value: 450403, + }, + { + children: [], + label: '长洲区', + value: 450405, + }, + { + children: [], + label: '龙圩区', + value: 450406, + }, + { + children: [], + label: '苍梧县', + value: 450421, + }, + { + children: [], + label: '藤县', + value: 450422, + }, + { + children: [], + label: '蒙山县', + value: 450423, + }, + { + children: [], + label: '岑溪市', + value: 450481, + }, + ], + label: '梧州市', + value: 450400, + }, + { + children: [ + { + children: [], + label: '海城区', + value: 450502, + }, + { + children: [], + label: '银海区', + value: 450503, + }, + { + children: [], + label: '铁山港区', + value: 450512, + }, + { + children: [], + label: '合浦县', + value: 450521, + }, + ], + label: '北海市', + value: 450500, + }, + { + children: [ + { + children: [], + label: '港口区', + value: 450602, + }, + { + children: [], + label: '防城区', + value: 450603, + }, + { + children: [], + label: '上思县', + value: 450621, + }, + { + children: [], + label: '东兴市', + value: 450681, + }, + ], + label: '防城港市', + value: 450600, + }, + { + children: [ + { + children: [], + label: '钦南区', + value: 450702, + }, + { + children: [], + label: '钦北区', + value: 450703, + }, + { + children: [], + label: '灵山县', + value: 450721, + }, + { + children: [], + label: '浦北县', + value: 450722, + }, + ], + label: '钦州市', + value: 450700, + }, + { + children: [ + { + children: [], + label: '港北区', + value: 450802, + }, + { + children: [], + label: '港南区', + value: 450803, + }, + { + children: [], + label: '覃塘区', + value: 450804, + }, + { + children: [], + label: '平南县', + value: 450821, + }, + { + children: [], + label: '桂平市', + value: 450881, + }, + ], + label: '贵港市', + value: 450800, + }, + { + children: [ + { + children: [], + label: '玉州区', + value: 450902, + }, + { + children: [], + label: '福绵区', + value: 450903, + }, + { + children: [], + label: '容县', + value: 450921, + }, + { + children: [], + label: '陆川县', + value: 450922, + }, + { + children: [], + label: '博白县', + value: 450923, + }, + { + children: [], + label: '兴业县', + value: 450924, + }, + { + children: [], + label: '北流市', + value: 450981, + }, + ], + label: '玉林市', + value: 450900, + }, + { + children: [ + { + children: [], + label: '右江区', + value: 451002, + }, + { + children: [], + label: '田阳县', + value: 451021, + }, + { + children: [], + label: '田东县', + value: 451022, + }, + { + children: [], + label: '平果县', + value: 451023, + }, + { + children: [], + label: '德保县', + value: 451024, + }, + { + children: [], + label: '那坡县', + value: 451026, + }, + { + children: [], + label: '凌云县', + value: 451027, + }, + { + children: [], + label: '乐业县', + value: 451028, + }, + { + children: [], + label: '田林县', + value: 451029, + }, + { + children: [], + label: '西林县', + value: 451030, + }, + { + children: [], + label: '隆林各族自治县', + value: 451031, + }, + { + children: [], + label: '靖西市', + value: 451081, + }, + ], + label: '百色市', + value: 451000, + }, + { + children: [ + { + children: [], + label: '八步区', + value: 451102, + }, + { + children: [], + label: '平桂区', + value: 451103, + }, + { + children: [], + label: '昭平县', + value: 451121, + }, + { + children: [], + label: '钟山县', + value: 451122, + }, + { + children: [], + label: '富川瑶族自治县', + value: 451123, + }, + ], + label: '贺州市', + value: 451100, + }, + { + children: [ + { + children: [], + label: '金城江区', + value: 451202, + }, + { + children: [], + label: '宜州区', + value: 451203, + }, + { + children: [], + label: '南丹县', + value: 451221, + }, + { + children: [], + label: '天峨县', + value: 451222, + }, + { + children: [], + label: '凤山县', + value: 451223, + }, + { + children: [], + label: '东兰县', + value: 451224, + }, + { + children: [], + label: '罗城仫佬族自治县', + value: 451225, + }, + { + children: [], + label: '环江毛南族自治县', + value: 451226, + }, + { + children: [], + label: '巴马瑶族自治县', + value: 451227, + }, + { + children: [], + label: '都安瑶族自治县', + value: 451228, + }, + { + children: [], + label: '大化瑶族自治县', + value: 451229, + }, + ], + label: '河池市', + value: 451200, + }, + { + children: [ + { + children: [], + label: '兴宾区', + value: 451302, + }, + { + children: [], + label: '忻城县', + value: 451321, + }, + { + children: [], + label: '象州县', + value: 451322, + }, + { + children: [], + label: '武宣县', + value: 451323, + }, + { + children: [], + label: '金秀瑶族自治县', + value: 451324, + }, + { + children: [], + label: '合山市', + value: 451381, + }, + ], + label: '来宾市', + value: 451300, + }, + { + children: [ + { + children: [], + label: '江州区', + value: 451402, + }, + { + children: [], + label: '扶绥县', + value: 451421, + }, + { + children: [], + label: '宁明县', + value: 451422, + }, + { + children: [], + label: '龙州县', + value: 451423, + }, + { + children: [], + label: '大新县', + value: 451424, + }, + { + children: [], + label: '天等县', + value: 451425, + }, + { + children: [], + label: '凭祥市', + value: 451481, + }, + ], + label: '崇左市', + value: 451400, + }, + ], + label: '广西壮族自治区', + value: 450000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '秀英区', + value: 460105, + }, + { + children: [], + label: '龙华区', + value: 460106, + }, + { + children: [], + label: '琼山区', + value: 460107, + }, + { + children: [], + label: '美兰区', + value: 460108, + }, + ], + label: '海口市', + value: 460100, + }, + { + children: [ + { + children: [], + label: '海棠区', + value: 460202, + }, + { + children: [], + label: '吉阳区', + value: 460203, + }, + { + children: [], + label: '天涯区', + value: 460204, + }, + { + children: [], + label: '崖州区', + value: 460205, + }, + ], + label: '三亚市', + value: 460200, + }, + { + children: [ + { + children: [], + label: '西沙群岛', + value: 460321, + }, + { + children: [], + label: '南沙群岛', + value: 460322, + }, + { + children: [], + label: '中沙群岛', + value: 460323, + }, + ], + label: '三沙市', + value: 460300, + }, + { + children: [], + label: '儋州市', + value: 460400, + }, + { + children: [], + label: '五指山市', + value: 469001, + }, + { + children: [], + label: '琼海市', + value: 469002, + }, + { + children: [], + label: '文昌市', + value: 469005, + }, + { + children: [], + label: '万宁市', + value: 469006, + }, + { + children: [], + label: '东方市', + value: 469007, + }, + { + children: [], + label: '定安县', + value: 469021, + }, + { + children: [], + label: '屯昌县', + value: 469022, + }, + { + children: [], + label: '澄迈县', + value: 469023, + }, + { + children: [], + label: '临高县', + value: 469024, + }, + { + children: [], + label: '白沙黎族自治县', + value: 469025, + }, + { + children: [], + label: '昌江黎族自治县', + value: 469026, + }, + { + children: [], + label: '乐东黎族自治县', + value: 469027, + }, + { + children: [], + label: '陵水黎族自治县', + value: 469028, + }, + { + children: [], + label: '保亭黎族苗族自治县', + value: 469029, + }, + { + children: [], + label: '琼中黎族苗族自治县', + value: 469030, + }, + ], + label: '海南省', + value: 460000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '万州区', + value: 500101, + }, + { + children: [], + label: '涪陵区', + value: 500102, + }, + { + children: [], + label: '渝中区', + value: 500103, + }, + { + children: [], + label: '大渡口区', + value: 500104, + }, + { + children: [], + label: '江北区', + value: 500105, + }, + { + children: [], + label: '沙坪坝区', + value: 500106, + }, + { + children: [], + label: '九龙坡区', + value: 500107, + }, + { + children: [], + label: '南岸区', + value: 500108, + }, + { + children: [], + label: '北碚区', + value: 500109, + }, + { + children: [], + label: '綦江区', + value: 500110, + }, + { + children: [], + label: '大足区', + value: 500111, + }, + { + children: [], + label: '渝北区', + value: 500112, + }, + { + children: [], + label: '巴南区', + value: 500113, + }, + { + children: [], + label: '黔江区', + value: 500114, + }, + { + children: [], + label: '长寿区', + value: 500115, + }, + { + children: [], + label: '江津区', + value: 500116, + }, + { + children: [], + label: '合川区', + value: 500117, + }, + { + children: [], + label: '永川区', + value: 500118, + }, + { + children: [], + label: '南川区', + value: 500119, + }, + { + children: [], + label: '璧山区', + value: 500120, + }, + { + children: [], + label: '铜梁区', + value: 500151, + }, + { + children: [], + label: '潼南区', + value: 500152, + }, + { + children: [], + label: '荣昌区', + value: 500153, + }, + { + children: [], + label: '开州区', + value: 500154, + }, + { + children: [], + label: '梁平区', + value: 500155, + }, + { + children: [], + label: '武隆区', + value: 500156, + }, + ], + label: '重庆市', + value: 500100, + }, + { + children: [ + { + children: [], + label: '城口县', + value: 500229, + }, + { + children: [], + label: '丰都县', + value: 500230, + }, + { + children: [], + label: '垫江县', + value: 500231, + }, + { + children: [], + label: '忠县', + value: 500233, + }, + { + children: [], + label: '云阳县', + value: 500235, + }, + { + children: [], + label: '奉节县', + value: 500236, + }, + { + children: [], + label: '巫山县', + value: 500237, + }, + { + children: [], + label: '巫溪县', + value: 500238, + }, + { + children: [], + label: '石柱土家族自治县', + value: 500240, + }, + { + children: [], + label: '秀山土家族苗族自治县', + value: 500241, + }, + { + children: [], + label: '酉阳土家族苗族自治县', + value: 500242, + }, + { + children: [], + label: '彭水苗族土家族自治县', + value: 500243, + }, + ], + label: '重庆市', + value: 500200, + }, + ], + label: '重庆市', + value: 500000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '锦江区', + value: 510104, + }, + { + children: [], + label: '青羊区', + value: 510105, + }, + { + children: [], + label: '金牛区', + value: 510106, + }, + { + children: [], + label: '武侯区', + value: 510107, + }, + { + children: [], + label: '成华区', + value: 510108, + }, + { + children: [], + label: '龙泉驿区', + value: 510112, + }, + { + children: [], + label: '青白江区', + value: 510113, + }, + { + children: [], + label: '新都区', + value: 510114, + }, + { + children: [], + label: '温江区', + value: 510115, + }, + { + children: [], + label: '双流区', + value: 510116, + }, + { + children: [], + label: '郫都区', + value: 510117, + }, + { + children: [], + label: '金堂县', + value: 510121, + }, + { + children: [], + label: '大邑县', + value: 510129, + }, + { + children: [], + label: '蒲江县', + value: 510131, + }, + { + children: [], + label: '新津县', + value: 510132, + }, + { + children: [], + label: '都江堰市', + value: 510181, + }, + { + children: [], + label: '彭州市', + value: 510182, + }, + { + children: [], + label: '邛崃市', + value: 510183, + }, + { + children: [], + label: '崇州市', + value: 510184, + }, + { + children: [], + label: '简阳市', + value: 510185, + }, + ], + label: '成都市', + value: 510100, + }, + { + children: [ + { + children: [], + label: '自流井区', + value: 510302, + }, + { + children: [], + label: '贡井区', + value: 510303, + }, + { + children: [], + label: '大安区', + value: 510304, + }, + { + children: [], + label: '沿滩区', + value: 510311, + }, + { + children: [], + label: '荣县', + value: 510321, + }, + { + children: [], + label: '富顺县', + value: 510322, + }, + ], + label: '自贡市', + value: 510300, + }, + { + children: [ + { + children: [], + label: '东区', + value: 510402, + }, + { + children: [], + label: '西区', + value: 510403, + }, + { + children: [], + label: '仁和区', + value: 510411, + }, + { + children: [], + label: '米易县', + value: 510421, + }, + { + children: [], + label: '盐边县', + value: 510422, + }, + ], + label: '攀枝花市', + value: 510400, + }, + { + children: [ + { + children: [], + label: '江阳区', + value: 510502, + }, + { + children: [], + label: '纳溪区', + value: 510503, + }, + { + children: [], + label: '龙马潭区', + value: 510504, + }, + { + children: [], + label: '泸县', + value: 510521, + }, + { + children: [], + label: '合江县', + value: 510522, + }, + { + children: [], + label: '叙永县', + value: 510524, + }, + { + children: [], + label: '古蔺县', + value: 510525, + }, + ], + label: '泸州市', + value: 510500, + }, + { + children: [ + { + children: [], + label: '旌阳区', + value: 510603, + }, + { + children: [], + label: '罗江区', + value: 510604, + }, + { + children: [], + label: '中江县', + value: 510623, + }, + { + children: [], + label: '广汉市', + value: 510681, + }, + { + children: [], + label: '什邡市', + value: 510682, + }, + { + children: [], + label: '绵竹市', + value: 510683, + }, + ], + label: '德阳市', + value: 510600, + }, + { + children: [ + { + children: [], + label: '涪城区', + value: 510703, + }, + { + children: [], + label: '游仙区', + value: 510704, + }, + { + children: [], + label: '安州区', + value: 510705, + }, + { + children: [], + label: '三台县', + value: 510722, + }, + { + children: [], + label: '盐亭县', + value: 510723, + }, + { + children: [], + label: '梓潼县', + value: 510725, + }, + { + children: [], + label: '北川羌族自治县', + value: 510726, + }, + { + children: [], + label: '平武县', + value: 510727, + }, + { + children: [], + label: '江油市', + value: 510781, + }, + ], + label: '绵阳市', + value: 510700, + }, + { + children: [ + { + children: [], + label: '利州区', + value: 510802, + }, + { + children: [], + label: '昭化区', + value: 510811, + }, + { + children: [], + label: '朝天区', + value: 510812, + }, + { + children: [], + label: '旺苍县', + value: 510821, + }, + { + children: [], + label: '青川县', + value: 510822, + }, + { + children: [], + label: '剑阁县', + value: 510823, + }, + { + children: [], + label: '苍溪县', + value: 510824, + }, + ], + label: '广元市', + value: 510800, + }, + { + children: [ + { + children: [], + label: '船山区', + value: 510903, + }, + { + children: [], + label: '安居区', + value: 510904, + }, + { + children: [], + label: '蓬溪县', + value: 510921, + }, + { + children: [], + label: '射洪县', + value: 510922, + }, + { + children: [], + label: '大英县', + value: 510923, + }, + ], + label: '遂宁市', + value: 510900, + }, + { + children: [ + { + children: [], + label: '市中区', + value: 511002, + }, + { + children: [], + label: '东兴区', + value: 511011, + }, + { + children: [], + label: '威远县', + value: 511024, + }, + { + children: [], + label: '资中县', + value: 511025, + }, + { + children: [], + label: '隆昌市', + value: 511083, + }, + ], + label: '内江市', + value: 511000, + }, + { + children: [ + { + children: [], + label: '市中区', + value: 511102, + }, + { + children: [], + label: '沙湾区', + value: 511111, + }, + { + children: [], + label: '五通桥区', + value: 511112, + }, + { + children: [], + label: '金口河区', + value: 511113, + }, + { + children: [], + label: '犍为县', + value: 511123, + }, + { + children: [], + label: '井研县', + value: 511124, + }, + { + children: [], + label: '夹江县', + value: 511126, + }, + { + children: [], + label: '沐川县', + value: 511129, + }, + { + children: [], + label: '峨边彝族自治县', + value: 511132, + }, + { + children: [], + label: '马边彝族自治县', + value: 511133, + }, + { + children: [], + label: '峨眉山市', + value: 511181, + }, + ], + label: '乐山市', + value: 511100, + }, + { + children: [ + { + children: [], + label: '顺庆区', + value: 511302, + }, + { + children: [], + label: '高坪区', + value: 511303, + }, + { + children: [], + label: '嘉陵区', + value: 511304, + }, + { + children: [], + label: '南部县', + value: 511321, + }, + { + children: [], + label: '营山县', + value: 511322, + }, + { + children: [], + label: '蓬安县', + value: 511323, + }, + { + children: [], + label: '仪陇县', + value: 511324, + }, + { + children: [], + label: '西充县', + value: 511325, + }, + { + children: [], + label: '阆中市', + value: 511381, + }, + ], + label: '南充市', + value: 511300, + }, + { + children: [ + { + children: [], + label: '东坡区', + value: 511402, + }, + { + children: [], + label: '彭山区', + value: 511403, + }, + { + children: [], + label: '仁寿县', + value: 511421, + }, + { + children: [], + label: '洪雅县', + value: 511423, + }, + { + children: [], + label: '丹棱县', + value: 511424, + }, + { + children: [], + label: '青神县', + value: 511425, + }, + ], + label: '眉山市', + value: 511400, + }, + { + children: [ + { + children: [], + label: '翠屏区', + value: 511502, + }, + { + children: [], + label: '南溪区', + value: 511503, + }, + { + children: [], + label: '叙州区', + value: 511504, + }, + { + children: [], + label: '江安县', + value: 511523, + }, + { + children: [], + label: '长宁县', + value: 511524, + }, + { + children: [], + label: '高县', + value: 511525, + }, + { + children: [], + label: '珙县', + value: 511526, + }, + { + children: [], + label: '筠连县', + value: 511527, + }, + { + children: [], + label: '兴文县', + value: 511528, + }, + { + children: [], + label: '屏山县', + value: 511529, + }, + ], + label: '宜宾市', + value: 511500, + }, + { + children: [ + { + children: [], + label: '广安区', + value: 511602, + }, + { + children: [], + label: '前锋区', + value: 511603, + }, + { + children: [], + label: '岳池县', + value: 511621, + }, + { + children: [], + label: '武胜县', + value: 511622, + }, + { + children: [], + label: '邻水县', + value: 511623, + }, + { + children: [], + label: '华蓥市', + value: 511681, + }, + ], + label: '广安市', + value: 511600, + }, + { + children: [ + { + children: [], + label: '通川区', + value: 511702, + }, + { + children: [], + label: '达川区', + value: 511703, + }, + { + children: [], + label: '宣汉县', + value: 511722, + }, + { + children: [], + label: '开江县', + value: 511723, + }, + { + children: [], + label: '大竹县', + value: 511724, + }, + { + children: [], + label: '渠县', + value: 511725, + }, + { + children: [], + label: '万源市', + value: 511781, + }, + ], + label: '达州市', + value: 511700, + }, + { + children: [ + { + children: [], + label: '雨城区', + value: 511802, + }, + { + children: [], + label: '名山区', + value: 511803, + }, + { + children: [], + label: '荥经县', + value: 511822, + }, + { + children: [], + label: '汉源县', + value: 511823, + }, + { + children: [], + label: '石棉县', + value: 511824, + }, + { + children: [], + label: '天全县', + value: 511825, + }, + { + children: [], + label: '芦山县', + value: 511826, + }, + { + children: [], + label: '宝兴县', + value: 511827, + }, + ], + label: '雅安市', + value: 511800, + }, + { + children: [ + { + children: [], + label: '巴州区', + value: 511902, + }, + { + children: [], + label: '恩阳区', + value: 511903, + }, + { + children: [], + label: '通江县', + value: 511921, + }, + { + children: [], + label: '南江县', + value: 511922, + }, + { + children: [], + label: '平昌县', + value: 511923, + }, + ], + label: '巴中市', + value: 511900, + }, + { + children: [ + { + children: [], + label: '雁江区', + value: 512002, + }, + { + children: [], + label: '安岳县', + value: 512021, + }, + { + children: [], + label: '乐至县', + value: 512022, + }, + ], + label: '资阳市', + value: 512000, + }, + { + children: [ + { + children: [], + label: '马尔康市', + value: 513201, + }, + { + children: [], + label: '汶川县', + value: 513221, + }, + { + children: [], + label: '理县', + value: 513222, + }, + { + children: [], + label: '茂县', + value: 513223, + }, + { + children: [], + label: '松潘县', + value: 513224, + }, + { + children: [], + label: '九寨沟县', + value: 513225, + }, + { + children: [], + label: '金川县', + value: 513226, + }, + { + children: [], + label: '小金县', + value: 513227, + }, + { + children: [], + label: '黑水县', + value: 513228, + }, + { + children: [], + label: '壤塘县', + value: 513230, + }, + { + children: [], + label: '阿坝县', + value: 513231, + }, + { + children: [], + label: '若尔盖县', + value: 513232, + }, + { + children: [], + label: '红原县', + value: 513233, + }, + ], + label: '阿坝藏族羌族自治州', + value: 513200, + }, + { + children: [ + { + children: [], + label: '康定市', + value: 513301, + }, + { + children: [], + label: '泸定县', + value: 513322, + }, + { + children: [], + label: '丹巴县', + value: 513323, + }, + { + children: [], + label: '九龙县', + value: 513324, + }, + { + children: [], + label: '雅江县', + value: 513325, + }, + { + children: [], + label: '道孚县', + value: 513326, + }, + { + children: [], + label: '炉霍县', + value: 513327, + }, + { + children: [], + label: '甘孜县', + value: 513328, + }, + { + children: [], + label: '新龙县', + value: 513329, + }, + { + children: [], + label: '德格县', + value: 513330, + }, + { + children: [], + label: '白玉县', + value: 513331, + }, + { + children: [], + label: '石渠县', + value: 513332, + }, + { + children: [], + label: '色达县', + value: 513333, + }, + { + children: [], + label: '理塘县', + value: 513334, + }, + { + children: [], + label: '巴塘县', + value: 513335, + }, + { + children: [], + label: '乡城县', + value: 513336, + }, + { + children: [], + label: '稻城县', + value: 513337, + }, + { + children: [], + label: '得荣县', + value: 513338, + }, + ], + label: '甘孜藏族自治州', + value: 513300, + }, + { + children: [ + { + children: [], + label: '西昌市', + value: 513401, + }, + { + children: [], + label: '木里藏族自治县', + value: 513422, + }, + { + children: [], + label: '盐源县', + value: 513423, + }, + { + children: [], + label: '德昌县', + value: 513424, + }, + { + children: [], + label: '会理县', + value: 513425, + }, + { + children: [], + label: '会东县', + value: 513426, + }, + { + children: [], + label: '宁南县', + value: 513427, + }, + { + children: [], + label: '普格县', + value: 513428, + }, + { + children: [], + label: '布拖县', + value: 513429, + }, + { + children: [], + label: '金阳县', + value: 513430, + }, + { + children: [], + label: '昭觉县', + value: 513431, + }, + { + children: [], + label: '喜德县', + value: 513432, + }, + { + children: [], + label: '冕宁县', + value: 513433, + }, + { + children: [], + label: '越西县', + value: 513434, + }, + { + children: [], + label: '甘洛县', + value: 513435, + }, + { + children: [], + label: '美姑县', + value: 513436, + }, + { + children: [], + label: '雷波县', + value: 513437, + }, + ], + label: '凉山彝族自治州', + value: 513400, + }, + ], + label: '四川省', + value: 510000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '南明区', + value: 520102, + }, + { + children: [], + label: '云岩区', + value: 520103, + }, + { + children: [], + label: '花溪区', + value: 520111, + }, + { + children: [], + label: '乌当区', + value: 520112, + }, + { + children: [], + label: '白云区', + value: 520113, + }, + { + children: [], + label: '观山湖区', + value: 520115, + }, + { + children: [], + label: '开阳县', + value: 520121, + }, + { + children: [], + label: '息烽县', + value: 520122, + }, + { + children: [], + label: '修文县', + value: 520123, + }, + { + children: [], + label: '清镇市', + value: 520181, + }, + ], + label: '贵阳市', + value: 520100, + }, + { + children: [ + { + children: [], + label: '钟山区', + value: 520201, + }, + { + children: [], + label: '六枝特区', + value: 520203, + }, + { + children: [], + label: '水城县', + value: 520221, + }, + { + children: [], + label: '盘州市', + value: 520281, + }, + ], + label: '六盘水市', + value: 520200, + }, + { + children: [ + { + children: [], + label: '红花岗区', + value: 520302, + }, + { + children: [], + label: '汇川区', + value: 520303, + }, + { + children: [], + label: '播州区', + value: 520304, + }, + { + children: [], + label: '桐梓县', + value: 520322, + }, + { + children: [], + label: '绥阳县', + value: 520323, + }, + { + children: [], + label: '正安县', + value: 520324, + }, + { + children: [], + label: '道真仡佬族苗族自治县', + value: 520325, + }, + { + children: [], + label: '务川仡佬族苗族自治县', + value: 520326, + }, + { + children: [], + label: '凤冈县', + value: 520327, + }, + { + children: [], + label: '湄潭县', + value: 520328, + }, + { + children: [], + label: '余庆县', + value: 520329, + }, + { + children: [], + label: '习水县', + value: 520330, + }, + { + children: [], + label: '赤水市', + value: 520381, + }, + { + children: [], + label: '仁怀市', + value: 520382, + }, + ], + label: '遵义市', + value: 520300, + }, + { + children: [ + { + children: [], + label: '西秀区', + value: 520402, + }, + { + children: [], + label: '平坝区', + value: 520403, + }, + { + children: [], + label: '普定县', + value: 520422, + }, + { + children: [], + label: '镇宁布依族苗族自治县', + value: 520423, + }, + { + children: [], + label: '关岭布依族苗族自治县', + value: 520424, + }, + { + children: [], + label: '紫云苗族布依族自治县', + value: 520425, + }, + ], + label: '安顺市', + value: 520400, + }, + { + children: [ + { + children: [], + label: '七星关区', + value: 520502, + }, + { + children: [], + label: '大方县', + value: 520521, + }, + { + children: [], + label: '黔西县', + value: 520522, + }, + { + children: [], + label: '金沙县', + value: 520523, + }, + { + children: [], + label: '织金县', + value: 520524, + }, + { + children: [], + label: '纳雍县', + value: 520525, + }, + { + children: [], + label: '威宁彝族回族苗族自治县', + value: 520526, + }, + { + children: [], + label: '赫章县', + value: 520527, + }, + ], + label: '毕节市', + value: 520500, + }, + { + children: [ + { + children: [], + label: '碧江区', + value: 520602, + }, + { + children: [], + label: '万山区', + value: 520603, + }, + { + children: [], + label: '江口县', + value: 520621, + }, + { + children: [], + label: '玉屏侗族自治县', + value: 520622, + }, + { + children: [], + label: '石阡县', + value: 520623, + }, + { + children: [], + label: '思南县', + value: 520624, + }, + { + children: [], + label: '印江土家族苗族自治县', + value: 520625, + }, + { + children: [], + label: '德江县', + value: 520626, + }, + { + children: [], + label: '沿河土家族自治县', + value: 520627, + }, + { + children: [], + label: '松桃苗族自治县', + value: 520628, + }, + ], + label: '铜仁市', + value: 520600, + }, + { + children: [ + { + children: [], + label: '兴义市', + value: 522301, + }, + { + children: [], + label: '兴仁市', + value: 522302, + }, + { + children: [], + label: '普安县', + value: 522323, + }, + { + children: [], + label: '晴隆县', + value: 522324, + }, + { + children: [], + label: '贞丰县', + value: 522325, + }, + { + children: [], + label: '望谟县', + value: 522326, + }, + { + children: [], + label: '册亨县', + value: 522327, + }, + { + children: [], + label: '安龙县', + value: 522328, + }, + ], + label: '黔西南布依族苗族自治州', + value: 522300, + }, + { + children: [ + { + children: [], + label: '凯里市', + value: 522601, + }, + { + children: [], + label: '黄平县', + value: 522622, + }, + { + children: [], + label: '施秉县', + value: 522623, + }, + { + children: [], + label: '三穗县', + value: 522624, + }, + { + children: [], + label: '镇远县', + value: 522625, + }, + { + children: [], + label: '岑巩县', + value: 522626, + }, + { + children: [], + label: '天柱县', + value: 522627, + }, + { + children: [], + label: '锦屏县', + value: 522628, + }, + { + children: [], + label: '剑河县', + value: 522629, + }, + { + children: [], + label: '台江县', + value: 522630, + }, + { + children: [], + label: '黎平县', + value: 522631, + }, + { + children: [], + label: '榕江县', + value: 522632, + }, + { + children: [], + label: '从江县', + value: 522633, + }, + { + children: [], + label: '雷山县', + value: 522634, + }, + { + children: [], + label: '麻江县', + value: 522635, + }, + { + children: [], + label: '丹寨县', + value: 522636, + }, + ], + label: '黔东南苗族侗族自治州', + value: 522600, + }, + { + children: [ + { + children: [], + label: '都匀市', + value: 522701, + }, + { + children: [], + label: '福泉市', + value: 522702, + }, + { + children: [], + label: '荔波县', + value: 522722, + }, + { + children: [], + label: '贵定县', + value: 522723, + }, + { + children: [], + label: '瓮安县', + value: 522725, + }, + { + children: [], + label: '独山县', + value: 522726, + }, + { + children: [], + label: '平塘县', + value: 522727, + }, + { + children: [], + label: '罗甸县', + value: 522728, + }, + { + children: [], + label: '长顺县', + value: 522729, + }, + { + children: [], + label: '龙里县', + value: 522730, + }, + { + children: [], + label: '惠水县', + value: 522731, + }, + { + children: [], + label: '三都水族自治县', + value: 522732, + }, + ], + label: '黔南布依族苗族自治州', + value: 522700, + }, + ], + label: '贵州省', + value: 520000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '五华区', + value: 530102, + }, + { + children: [], + label: '盘龙区', + value: 530103, + }, + { + children: [], + label: '官渡区', + value: 530111, + }, + { + children: [], + label: '西山区', + value: 530112, + }, + { + children: [], + label: '东川区', + value: 530113, + }, + { + children: [], + label: '呈贡区', + value: 530114, + }, + { + children: [], + label: '晋宁区', + value: 530115, + }, + { + children: [], + label: '富民县', + value: 530124, + }, + { + children: [], + label: '宜良县', + value: 530125, + }, + { + children: [], + label: '石林彝族自治县', + value: 530126, + }, + { + children: [], + label: '嵩明县', + value: 530127, + }, + { + children: [], + label: '禄劝彝族苗族自治县', + value: 530128, + }, + { + children: [], + label: '寻甸回族彝族自治县', + value: 530129, + }, + { + children: [], + label: '安宁市', + value: 530181, + }, + ], + label: '昆明市', + value: 530100, + }, + { + children: [ + { + children: [], + label: '麒麟区', + value: 530302, + }, + { + children: [], + label: '沾益区', + value: 530303, + }, + { + children: [], + label: '马龙区', + value: 530304, + }, + { + children: [], + label: '陆良县', + value: 530322, + }, + { + children: [], + label: '师宗县', + value: 530323, + }, + { + children: [], + label: '罗平县', + value: 530324, + }, + { + children: [], + label: '富源县', + value: 530325, + }, + { + children: [], + label: '会泽县', + value: 530326, + }, + { + children: [], + label: '宣威市', + value: 530381, + }, + ], + label: '曲靖市', + value: 530300, + }, + { + children: [ + { + children: [], + label: '红塔区', + value: 530402, + }, + { + children: [], + label: '江川区', + value: 530403, + }, + { + children: [], + label: '澄江县', + value: 530422, + }, + { + children: [], + label: '通海县', + value: 530423, + }, + { + children: [], + label: '华宁县', + value: 530424, + }, + { + children: [], + label: '易门县', + value: 530425, + }, + { + children: [], + label: '峨山彝族自治县', + value: 530426, + }, + { + children: [], + label: '新平彝族傣族自治县', + value: 530427, + }, + { + children: [], + label: '元江哈尼族彝族傣族自治县', + value: 530428, + }, + ], + label: '玉溪市', + value: 530400, + }, + { + children: [ + { + children: [], + label: '隆阳区', + value: 530502, + }, + { + children: [], + label: '施甸县', + value: 530521, + }, + { + children: [], + label: '龙陵县', + value: 530523, + }, + { + children: [], + label: '昌宁县', + value: 530524, + }, + { + children: [], + label: '腾冲市', + value: 530581, + }, + ], + label: '保山市', + value: 530500, + }, + { + children: [ + { + children: [], + label: '昭阳区', + value: 530602, + }, + { + children: [], + label: '鲁甸县', + value: 530621, + }, + { + children: [], + label: '巧家县', + value: 530622, + }, + { + children: [], + label: '盐津县', + value: 530623, + }, + { + children: [], + label: '大关县', + value: 530624, + }, + { + children: [], + label: '永善县', + value: 530625, + }, + { + children: [], + label: '绥江县', + value: 530626, + }, + { + children: [], + label: '镇雄县', + value: 530627, + }, + { + children: [], + label: '彝良县', + value: 530628, + }, + { + children: [], + label: '威信县', + value: 530629, + }, + { + children: [], + label: '水富市', + value: 530681, + }, + ], + label: '昭通市', + value: 530600, + }, + { + children: [ + { + children: [], + label: '古城区', + value: 530702, + }, + { + children: [], + label: '玉龙纳西族自治县', + value: 530721, + }, + { + children: [], + label: '永胜县', + value: 530722, + }, + { + children: [], + label: '华坪县', + value: 530723, + }, + { + children: [], + label: '宁蒗彝族自治县', + value: 530724, + }, + ], + label: '丽江市', + value: 530700, + }, + { + children: [ + { + children: [], + label: '思茅区', + value: 530802, + }, + { + children: [], + label: '宁洱哈尼族彝族自治县', + value: 530821, + }, + { + children: [], + label: '墨江哈尼族自治县', + value: 530822, + }, + { + children: [], + label: '景东彝族自治县', + value: 530823, + }, + { + children: [], + label: '景谷傣族彝族自治县', + value: 530824, + }, + { + children: [], + label: '镇沅彝族哈尼族拉祜族自治县', + value: 530825, + }, + { + children: [], + label: '江城哈尼族彝族自治县', + value: 530826, + }, + { + children: [], + label: '孟连傣族拉祜族佤族自治县', + value: 530827, + }, + { + children: [], + label: '澜沧拉祜族自治县', + value: 530828, + }, + { + children: [], + label: '西盟佤族自治县', + value: 530829, + }, + ], + label: '普洱市', + value: 530800, + }, + { + children: [ + { + children: [], + label: '临翔区', + value: 530902, + }, + { + children: [], + label: '凤庆县', + value: 530921, + }, + { + children: [], + label: '云县', + value: 530922, + }, + { + children: [], + label: '永德县', + value: 530923, + }, + { + children: [], + label: '镇康县', + value: 530924, + }, + { + children: [], + label: '双江拉祜族佤族布朗族傣族自治县', + value: 530925, + }, + { + children: [], + label: '耿马傣族佤族自治县', + value: 530926, + }, + { + children: [], + label: '沧源佤族自治县', + value: 530927, + }, + ], + label: '临沧市', + value: 530900, + }, + { + children: [ + { + children: [], + label: '楚雄市', + value: 532301, + }, + { + children: [], + label: '双柏县', + value: 532322, + }, + { + children: [], + label: '牟定县', + value: 532323, + }, + { + children: [], + label: '南华县', + value: 532324, + }, + { + children: [], + label: '姚安县', + value: 532325, + }, + { + children: [], + label: '大姚县', + value: 532326, + }, + { + children: [], + label: '永仁县', + value: 532327, + }, + { + children: [], + label: '元谋县', + value: 532328, + }, + { + children: [], + label: '武定县', + value: 532329, + }, + { + children: [], + label: '禄丰县', + value: 532331, + }, + ], + label: '楚雄彝族自治州', + value: 532300, + }, + { + children: [ + { + children: [], + label: '个旧市', + value: 532501, + }, + { + children: [], + label: '开远市', + value: 532502, + }, + { + children: [], + label: '蒙自市', + value: 532503, + }, + { + children: [], + label: '弥勒市', + value: 532504, + }, + { + children: [], + label: '屏边苗族自治县', + value: 532523, + }, + { + children: [], + label: '建水县', + value: 532524, + }, + { + children: [], + label: '石屏县', + value: 532525, + }, + { + children: [], + label: '泸西县', + value: 532527, + }, + { + children: [], + label: '元阳县', + value: 532528, + }, + { + children: [], + label: '红河县', + value: 532529, + }, + { + children: [], + label: '金平苗族瑶族傣族自治县', + value: 532530, + }, + { + children: [], + label: '绿春县', + value: 532531, + }, + { + children: [], + label: '河口瑶族自治县', + value: 532532, + }, + ], + label: '红河哈尼族彝族自治州', + value: 532500, + }, + { + children: [ + { + children: [], + label: '文山市', + value: 532601, + }, + { + children: [], + label: '砚山县', + value: 532622, + }, + { + children: [], + label: '西畴县', + value: 532623, + }, + { + children: [], + label: '麻栗坡县', + value: 532624, + }, + { + children: [], + label: '马关县', + value: 532625, + }, + { + children: [], + label: '丘北县', + value: 532626, + }, + { + children: [], + label: '广南县', + value: 532627, + }, + { + children: [], + label: '富宁县', + value: 532628, + }, + ], + label: '文山壮族苗族自治州', + value: 532600, + }, + { + children: [ + { + children: [], + label: '景洪市', + value: 532801, + }, + { + children: [], + label: '勐海县', + value: 532822, + }, + { + children: [], + label: '勐腊县', + value: 532823, + }, + ], + label: '西双版纳傣族自治州', + value: 532800, + }, + { + children: [ + { + children: [], + label: '大理市', + value: 532901, + }, + { + children: [], + label: '漾濞彝族自治县', + value: 532922, + }, + { + children: [], + label: '祥云县', + value: 532923, + }, + { + children: [], + label: '宾川县', + value: 532924, + }, + { + children: [], + label: '弥渡县', + value: 532925, + }, + { + children: [], + label: '南涧彝族自治县', + value: 532926, + }, + { + children: [], + label: '巍山彝族回族自治县', + value: 532927, + }, + { + children: [], + label: '永平县', + value: 532928, + }, + { + children: [], + label: '云龙县', + value: 532929, + }, + { + children: [], + label: '洱源县', + value: 532930, + }, + { + children: [], + label: '剑川县', + value: 532931, + }, + { + children: [], + label: '鹤庆县', + value: 532932, + }, + ], + label: '大理白族自治州', + value: 532900, + }, + { + children: [ + { + children: [], + label: '瑞丽市', + value: 533102, + }, + { + children: [], + label: '芒市', + value: 533103, + }, + { + children: [], + label: '梁河县', + value: 533122, + }, + { + children: [], + label: '盈江县', + value: 533123, + }, + { + children: [], + label: '陇川县', + value: 533124, + }, + ], + label: '德宏傣族景颇族自治州', + value: 533100, + }, + { + children: [ + { + children: [], + label: '泸水市', + value: 533301, + }, + { + children: [], + label: '福贡县', + value: 533323, + }, + { + children: [], + label: '贡山独龙族怒族自治县', + value: 533324, + }, + { + children: [], + label: '兰坪白族普米族自治县', + value: 533325, + }, + ], + label: '怒江傈僳族自治州', + value: 533300, + }, + { + children: [ + { + children: [], + label: '香格里拉市', + value: 533401, + }, + { + children: [], + label: '德钦县', + value: 533422, + }, + { + children: [], + label: '维西傈僳族自治县', + value: 533423, + }, + ], + label: '迪庆藏族自治州', + value: 533400, + }, + ], + label: '云南省', + value: 530000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '城关区', + value: 540102, + }, + { + children: [], + label: '堆龙德庆区', + value: 540103, + }, + { + children: [], + label: '达孜区', + value: 540104, + }, + { + children: [], + label: '林周县', + value: 540121, + }, + { + children: [], + label: '当雄县', + value: 540122, + }, + { + children: [], + label: '尼木县', + value: 540123, + }, + { + children: [], + label: '曲水县', + value: 540124, + }, + { + children: [], + label: '墨竹工卡县', + value: 540127, + }, + ], + label: '拉萨市', + value: 540100, + }, + { + children: [ + { + children: [], + label: '桑珠孜区', + value: 540202, + }, + { + children: [], + label: '南木林县', + value: 540221, + }, + { + children: [], + label: '江孜县', + value: 540222, + }, + { + children: [], + label: '定日县', + value: 540223, + }, + { + children: [], + label: '萨迦县', + value: 540224, + }, + { + children: [], + label: '拉孜县', + value: 540225, + }, + { + children: [], + label: '昂仁县', + value: 540226, + }, + { + children: [], + label: '谢通门县', + value: 540227, + }, + { + children: [], + label: '白朗县', + value: 540228, + }, + { + children: [], + label: '仁布县', + value: 540229, + }, + { + children: [], + label: '康马县', + value: 540230, + }, + { + children: [], + label: '定结县', + value: 540231, + }, + { + children: [], + label: '仲巴县', + value: 540232, + }, + { + children: [], + label: '亚东县', + value: 540233, + }, + { + children: [], + label: '吉隆县', + value: 540234, + }, + { + children: [], + label: '聂拉木县', + value: 540235, + }, + { + children: [], + label: '萨嘎县', + value: 540236, + }, + { + children: [], + label: '岗巴县', + value: 540237, + }, + ], + label: '日喀则市', + value: 540200, + }, + { + children: [ + { + children: [], + label: '卡若区', + value: 540302, + }, + { + children: [], + label: '江达县', + value: 540321, + }, + { + children: [], + label: '贡觉县', + value: 540322, + }, + { + children: [], + label: '类乌齐县', + value: 540323, + }, + { + children: [], + label: '丁青县', + value: 540324, + }, + { + children: [], + label: '察雅县', + value: 540325, + }, + { + children: [], + label: '八宿县', + value: 540326, + }, + { + children: [], + label: '左贡县', + value: 540327, + }, + { + children: [], + label: '芒康县', + value: 540328, + }, + { + children: [], + label: '洛隆县', + value: 540329, + }, + { + children: [], + label: '边坝县', + value: 540330, + }, + ], + label: '昌都市', + value: 540300, + }, + { + children: [ + { + children: [], + label: '巴宜区', + value: 540402, + }, + { + children: [], + label: '工布江达县', + value: 540421, + }, + { + children: [], + label: '米林县', + value: 540422, + }, + { + children: [], + label: '墨脱县', + value: 540423, + }, + { + children: [], + label: '波密县', + value: 540424, + }, + { + children: [], + label: '察隅县', + value: 540425, + }, + { + children: [], + label: '朗县', + value: 540426, + }, + ], + label: '林芝市', + value: 540400, + }, + { + children: [ + { + children: [], + label: '乃东区', + value: 540502, + }, + { + children: [], + label: '扎囊县', + value: 540521, + }, + { + children: [], + label: '贡嘎县', + value: 540522, + }, + { + children: [], + label: '桑日县', + value: 540523, + }, + { + children: [], + label: '琼结县', + value: 540524, + }, + { + children: [], + label: '曲松县', + value: 540525, + }, + { + children: [], + label: '措美县', + value: 540526, + }, + { + children: [], + label: '洛扎县', + value: 540527, + }, + { + children: [], + label: '加查县', + value: 540528, + }, + { + children: [], + label: '隆子县', + value: 540529, + }, + { + children: [], + label: '错那县', + value: 540530, + }, + { + children: [], + label: '浪卡子县', + value: 540531, + }, + ], + label: '山南市', + value: 540500, + }, + { + children: [ + { + children: [], + label: '色尼区', + value: 540602, + }, + { + children: [], + label: '嘉黎县', + value: 540621, + }, + { + children: [], + label: '比如县', + value: 540622, + }, + { + children: [], + label: '聂荣县', + value: 540623, + }, + { + children: [], + label: '安多县', + value: 540624, + }, + { + children: [], + label: '申扎县', + value: 540625, + }, + { + children: [], + label: '索县', + value: 540626, + }, + { + children: [], + label: '班戈县', + value: 540627, + }, + { + children: [], + label: '巴青县', + value: 540628, + }, + { + children: [], + label: '尼玛县', + value: 540629, + }, + { + children: [], + label: '双湖县', + value: 540630, + }, + ], + label: '那曲市', + value: 540600, + }, + { + children: [ + { + children: [], + label: '普兰县', + value: 542521, + }, + { + children: [], + label: '札达县', + value: 542522, + }, + { + children: [], + label: '噶尔县', + value: 542523, + }, + { + children: [], + label: '日土县', + value: 542524, + }, + { + children: [], + label: '革吉县', + value: 542525, + }, + { + children: [], + label: '改则县', + value: 542526, + }, + { + children: [], + label: '措勤县', + value: 542527, + }, + ], + label: '阿里地区', + value: 542500, + }, + ], + label: '西藏自治区', + value: 540000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '新城区', + value: 610102, + }, + { + children: [], + label: '碑林区', + value: 610103, + }, + { + children: [], + label: '莲湖区', + value: 610104, + }, + { + children: [], + label: '灞桥区', + value: 610111, + }, + { + children: [], + label: '未央区', + value: 610112, + }, + { + children: [], + label: '雁塔区', + value: 610113, + }, + { + children: [], + label: '阎良区', + value: 610114, + }, + { + children: [], + label: '临潼区', + value: 610115, + }, + { + children: [], + label: '长安区', + value: 610116, + }, + { + children: [], + label: '高陵区', + value: 610117, + }, + { + children: [], + label: '鄠邑区', + value: 610118, + }, + { + children: [], + label: '蓝田县', + value: 610122, + }, + { + children: [], + label: '周至县', + value: 610124, + }, + ], + label: '西安市', + value: 610100, + }, + { + children: [ + { + children: [], + label: '王益区', + value: 610202, + }, + { + children: [], + label: '印台区', + value: 610203, + }, + { + children: [], + label: '耀州区', + value: 610204, + }, + { + children: [], + label: '宜君县', + value: 610222, + }, + ], + label: '铜川市', + value: 610200, + }, + { + children: [ + { + children: [], + label: '渭滨区', + value: 610302, + }, + { + children: [], + label: '金台区', + value: 610303, + }, + { + children: [], + label: '陈仓区', + value: 610304, + }, + { + children: [], + label: '凤翔县', + value: 610322, + }, + { + children: [], + label: '岐山县', + value: 610323, + }, + { + children: [], + label: '扶风县', + value: 610324, + }, + { + children: [], + label: '眉县', + value: 610326, + }, + { + children: [], + label: '陇县', + value: 610327, + }, + { + children: [], + label: '千阳县', + value: 610328, + }, + { + children: [], + label: '麟游县', + value: 610329, + }, + { + children: [], + label: '凤县', + value: 610330, + }, + { + children: [], + label: '太白县', + value: 610331, + }, + ], + label: '宝鸡市', + value: 610300, + }, + { + children: [ + { + children: [], + label: '秦都区', + value: 610402, + }, + { + children: [], + label: '杨陵区', + value: 610403, + }, + { + children: [], + label: '渭城区', + value: 610404, + }, + { + children: [], + label: '三原县', + value: 610422, + }, + { + children: [], + label: '泾阳县', + value: 610423, + }, + { + children: [], + label: '乾县', + value: 610424, + }, + { + children: [], + label: '礼泉县', + value: 610425, + }, + { + children: [], + label: '永寿县', + value: 610426, + }, + { + children: [], + label: '长武县', + value: 610428, + }, + { + children: [], + label: '旬邑县', + value: 610429, + }, + { + children: [], + label: '淳化县', + value: 610430, + }, + { + children: [], + label: '武功县', + value: 610431, + }, + { + children: [], + label: '兴平市', + value: 610481, + }, + { + children: [], + label: '彬州市', + value: 610482, + }, + ], + label: '咸阳市', + value: 610400, + }, + { + children: [ + { + children: [], + label: '临渭区', + value: 610502, + }, + { + children: [], + label: '华州区', + value: 610503, + }, + { + children: [], + label: '潼关县', + value: 610522, + }, + { + children: [], + label: '大荔县', + value: 610523, + }, + { + children: [], + label: '合阳县', + value: 610524, + }, + { + children: [], + label: '澄城县', + value: 610525, + }, + { + children: [], + label: '蒲城县', + value: 610526, + }, + { + children: [], + label: '白水县', + value: 610527, + }, + { + children: [], + label: '富平县', + value: 610528, + }, + { + children: [], + label: '韩城市', + value: 610581, + }, + { + children: [], + label: '华阴市', + value: 610582, + }, + ], + label: '渭南市', + value: 610500, + }, + { + children: [ + { + children: [], + label: '宝塔区', + value: 610602, + }, + { + children: [], + label: '安塞区', + value: 610603, + }, + { + children: [], + label: '延长县', + value: 610621, + }, + { + children: [], + label: '延川县', + value: 610622, + }, + { + children: [], + label: '子长县', + value: 610623, + }, + { + children: [], + label: '志丹县', + value: 610625, + }, + { + children: [], + label: '吴起县', + value: 610626, + }, + { + children: [], + label: '甘泉县', + value: 610627, + }, + { + children: [], + label: '富县', + value: 610628, + }, + { + children: [], + label: '洛川县', + value: 610629, + }, + { + children: [], + label: '宜川县', + value: 610630, + }, + { + children: [], + label: '黄龙县', + value: 610631, + }, + { + children: [], + label: '黄陵县', + value: 610632, + }, + ], + label: '延安市', + value: 610600, + }, + { + children: [ + { + children: [], + label: '汉台区', + value: 610702, + }, + { + children: [], + label: '南郑区', + value: 610703, + }, + { + children: [], + label: '城固县', + value: 610722, + }, + { + children: [], + label: '洋县', + value: 610723, + }, + { + children: [], + label: '西乡县', + value: 610724, + }, + { + children: [], + label: '勉县', + value: 610725, + }, + { + children: [], + label: '宁强县', + value: 610726, + }, + { + children: [], + label: '略阳县', + value: 610727, + }, + { + children: [], + label: '镇巴县', + value: 610728, + }, + { + children: [], + label: '留坝县', + value: 610729, + }, + { + children: [], + label: '佛坪县', + value: 610730, + }, + ], + label: '汉中市', + value: 610700, + }, + { + children: [ + { + children: [], + label: '榆阳区', + value: 610802, + }, + { + children: [], + label: '横山区', + value: 610803, + }, + { + children: [], + label: '府谷县', + value: 610822, + }, + { + children: [], + label: '靖边县', + value: 610824, + }, + { + children: [], + label: '定边县', + value: 610825, + }, + { + children: [], + label: '绥德县', + value: 610826, + }, + { + children: [], + label: '米脂县', + value: 610827, + }, + { + children: [], + label: '佳县', + value: 610828, + }, + { + children: [], + label: '吴堡县', + value: 610829, + }, + { + children: [], + label: '清涧县', + value: 610830, + }, + { + children: [], + label: '子洲县', + value: 610831, + }, + { + children: [], + label: '神木市', + value: 610881, + }, + ], + label: '榆林市', + value: 610800, + }, + { + children: [ + { + children: [], + label: '汉滨区', + value: 610902, + }, + { + children: [], + label: '汉阴县', + value: 610921, + }, + { + children: [], + label: '石泉县', + value: 610922, + }, + { + children: [], + label: '宁陕县', + value: 610923, + }, + { + children: [], + label: '紫阳县', + value: 610924, + }, + { + children: [], + label: '岚皋县', + value: 610925, + }, + { + children: [], + label: '平利县', + value: 610926, + }, + { + children: [], + label: '镇坪县', + value: 610927, + }, + { + children: [], + label: '旬阳县', + value: 610928, + }, + { + children: [], + label: '白河县', + value: 610929, + }, + ], + label: '安康市', + value: 610900, + }, + { + children: [ + { + children: [], + label: '商州区', + value: 611002, + }, + { + children: [], + label: '洛南县', + value: 611021, + }, + { + children: [], + label: '丹凤县', + value: 611022, + }, + { + children: [], + label: '商南县', + value: 611023, + }, + { + children: [], + label: '山阳县', + value: 611024, + }, + { + children: [], + label: '镇安县', + value: 611025, + }, + { + children: [], + label: '柞水县', + value: 611026, + }, + ], + label: '商洛市', + value: 611000, + }, + ], + label: '陕西省', + value: 610000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '城关区', + value: 620102, + }, + { + children: [], + label: '七里河区', + value: 620103, + }, + { + children: [], + label: '西固区', + value: 620104, + }, + { + children: [], + label: '安宁区', + value: 620105, + }, + { + children: [], + label: '红古区', + value: 620111, + }, + { + children: [], + label: '永登县', + value: 620121, + }, + { + children: [], + label: '皋兰县', + value: 620122, + }, + { + children: [], + label: '榆中县', + value: 620123, + }, + ], + label: '兰州市', + value: 620100, + }, + { + children: [], + label: '嘉峪关市', + value: 620200, + }, + { + children: [ + { + children: [], + label: '金川区', + value: 620302, + }, + { + children: [], + label: '永昌县', + value: 620321, + }, + ], + label: '金昌市', + value: 620300, + }, + { + children: [ + { + children: [], + label: '白银区', + value: 620402, + }, + { + children: [], + label: '平川区', + value: 620403, + }, + { + children: [], + label: '靖远县', + value: 620421, + }, + { + children: [], + label: '会宁县', + value: 620422, + }, + { + children: [], + label: '景泰县', + value: 620423, + }, + ], + label: '白银市', + value: 620400, + }, + { + children: [ + { + children: [], + label: '秦州区', + value: 620502, + }, + { + children: [], + label: '麦积区', + value: 620503, + }, + { + children: [], + label: '清水县', + value: 620521, + }, + { + children: [], + label: '秦安县', + value: 620522, + }, + { + children: [], + label: '甘谷县', + value: 620523, + }, + { + children: [], + label: '武山县', + value: 620524, + }, + { + children: [], + label: '张家川回族自治县', + value: 620525, + }, + ], + label: '天水市', + value: 620500, + }, + { + children: [ + { + children: [], + label: '凉州区', + value: 620602, + }, + { + children: [], + label: '民勤县', + value: 620621, + }, + { + children: [], + label: '古浪县', + value: 620622, + }, + { + children: [], + label: '天祝藏族自治县', + value: 620623, + }, + ], + label: '武威市', + value: 620600, + }, + { + children: [ + { + children: [], + label: '甘州区', + value: 620702, + }, + { + children: [], + label: '肃南裕固族自治县', + value: 620721, + }, + { + children: [], + label: '民乐县', + value: 620722, + }, + { + children: [], + label: '临泽县', + value: 620723, + }, + { + children: [], + label: '高台县', + value: 620724, + }, + { + children: [], + label: '山丹县', + value: 620725, + }, + ], + label: '张掖市', + value: 620700, + }, + { + children: [ + { + children: [], + label: '崆峒区', + value: 620802, + }, + { + children: [], + label: '泾川县', + value: 620821, + }, + { + children: [], + label: '灵台县', + value: 620822, + }, + { + children: [], + label: '崇信县', + value: 620823, + }, + { + children: [], + label: '庄浪县', + value: 620825, + }, + { + children: [], + label: '静宁县', + value: 620826, + }, + { + children: [], + label: '华亭市', + value: 620881, + }, + ], + label: '平凉市', + value: 620800, + }, + { + children: [ + { + children: [], + label: '肃州区', + value: 620902, + }, + { + children: [], + label: '金塔县', + value: 620921, + }, + { + children: [], + label: '瓜州县', + value: 620922, + }, + { + children: [], + label: '肃北蒙古族自治县', + value: 620923, + }, + { + children: [], + label: '阿克塞哈萨克族自治县', + value: 620924, + }, + { + children: [], + label: '玉门市', + value: 620981, + }, + { + children: [], + label: '敦煌市', + value: 620982, + }, + ], + label: '酒泉市', + value: 620900, + }, + { + children: [ + { + children: [], + label: '西峰区', + value: 621002, + }, + { + children: [], + label: '庆城县', + value: 621021, + }, + { + children: [], + label: '环县', + value: 621022, + }, + { + children: [], + label: '华池县', + value: 621023, + }, + { + children: [], + label: '合水县', + value: 621024, + }, + { + children: [], + label: '正宁县', + value: 621025, + }, + { + children: [], + label: '宁县', + value: 621026, + }, + { + children: [], + label: '镇原县', + value: 621027, + }, + ], + label: '庆阳市', + value: 621000, + }, + { + children: [ + { + children: [], + label: '安定区', + value: 621102, + }, + { + children: [], + label: '通渭县', + value: 621121, + }, + { + children: [], + label: '陇西县', + value: 621122, + }, + { + children: [], + label: '渭源县', + value: 621123, + }, + { + children: [], + label: '临洮县', + value: 621124, + }, + { + children: [], + label: '漳县', + value: 621125, + }, + { + children: [], + label: '岷县', + value: 621126, + }, + ], + label: '定西市', + value: 621100, + }, + { + children: [ + { + children: [], + label: '武都区', + value: 621202, + }, + { + children: [], + label: '成县', + value: 621221, + }, + { + children: [], + label: '文县', + value: 621222, + }, + { + children: [], + label: '宕昌县', + value: 621223, + }, + { + children: [], + label: '康县', + value: 621224, + }, + { + children: [], + label: '西和县', + value: 621225, + }, + { + children: [], + label: '礼县', + value: 621226, + }, + { + children: [], + label: '徽县', + value: 621227, + }, + { + children: [], + label: '两当县', + value: 621228, + }, + ], + label: '陇南市', + value: 621200, + }, + { + children: [ + { + children: [], + label: '临夏市', + value: 622901, + }, + { + children: [], + label: '临夏县', + value: 622921, + }, + { + children: [], + label: '康乐县', + value: 622922, + }, + { + children: [], + label: '永靖县', + value: 622923, + }, + { + children: [], + label: '广河县', + value: 622924, + }, + { + children: [], + label: '和政县', + value: 622925, + }, + { + children: [], + label: '东乡族自治县', + value: 622926, + }, + { + children: [], + label: '积石山保安族东乡族撒拉族自治县', + value: 622927, + }, + ], + label: '临夏回族自治州', + value: 622900, + }, + { + children: [ + { + children: [], + label: '合作市', + value: 623001, + }, + { + children: [], + label: '临潭县', + value: 623021, + }, + { + children: [], + label: '卓尼县', + value: 623022, + }, + { + children: [], + label: '舟曲县', + value: 623023, + }, + { + children: [], + label: '迭部县', + value: 623024, + }, + { + children: [], + label: '玛曲县', + value: 623025, + }, + { + children: [], + label: '碌曲县', + value: 623026, + }, + { + children: [], + label: '夏河县', + value: 623027, + }, + ], + label: '甘南藏族自治州', + value: 623000, + }, + ], + label: '甘肃省', + value: 620000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '城东区', + value: 630102, + }, + { + children: [], + label: '城中区', + value: 630103, + }, + { + children: [], + label: '城西区', + value: 630104, + }, + { + children: [], + label: '城北区', + value: 630105, + }, + { + children: [], + label: '大通回族土族自治县', + value: 630121, + }, + { + children: [], + label: '湟中县', + value: 630122, + }, + { + children: [], + label: '湟源县', + value: 630123, + }, + ], + label: '西宁市', + value: 630100, + }, + { + children: [ + { + children: [], + label: '乐都区', + value: 630202, + }, + { + children: [], + label: '平安区', + value: 630203, + }, + { + children: [], + label: '民和回族土族自治县', + value: 630222, + }, + { + children: [], + label: '互助土族自治县', + value: 630223, + }, + { + children: [], + label: '化隆回族自治县', + value: 630224, + }, + { + children: [], + label: '循化撒拉族自治县', + value: 630225, + }, + ], + label: '海东市', + value: 630200, + }, + { + children: [ + { + children: [], + label: '门源回族自治县', + value: 632221, + }, + { + children: [], + label: '祁连县', + value: 632222, + }, + { + children: [], + label: '海晏县', + value: 632223, + }, + { + children: [], + label: '刚察县', + value: 632224, + }, + ], + label: '海北藏族自治州', + value: 632200, + }, + { + children: [ + { + children: [], + label: '同仁县', + value: 632321, + }, + { + children: [], + label: '尖扎县', + value: 632322, + }, + { + children: [], + label: '泽库县', + value: 632323, + }, + { + children: [], + label: '河南蒙古族自治县', + value: 632324, + }, + ], + label: '黄南藏族自治州', + value: 632300, + }, + { + children: [ + { + children: [], + label: '共和县', + value: 632521, + }, + { + children: [], + label: '同德县', + value: 632522, + }, + { + children: [], + label: '贵德县', + value: 632523, + }, + { + children: [], + label: '兴海县', + value: 632524, + }, + { + children: [], + label: '贵南县', + value: 632525, + }, + ], + label: '海南藏族自治州', + value: 632500, + }, + { + children: [ + { + children: [], + label: '玛沁县', + value: 632621, + }, + { + children: [], + label: '班玛县', + value: 632622, + }, + { + children: [], + label: '甘德县', + value: 632623, + }, + { + children: [], + label: '达日县', + value: 632624, + }, + { + children: [], + label: '久治县', + value: 632625, + }, + { + children: [], + label: '玛多县', + value: 632626, + }, + ], + label: '果洛藏族自治州', + value: 632600, + }, + { + children: [ + { + children: [], + label: '玉树市', + value: 632701, + }, + { + children: [], + label: '杂多县', + value: 632722, + }, + { + children: [], + label: '称多县', + value: 632723, + }, + { + children: [], + label: '治多县', + value: 632724, + }, + { + children: [], + label: '囊谦县', + value: 632725, + }, + { + children: [], + label: '曲麻莱县', + value: 632726, + }, + ], + label: '玉树藏族自治州', + value: 632700, + }, + { + children: [ + { + children: [], + label: '格尔木市', + value: 632801, + }, + { + children: [], + label: '德令哈市', + value: 632802, + }, + { + children: [], + label: '茫崖市', + value: 632803, + }, + { + children: [], + label: '乌兰县', + value: 632821, + }, + { + children: [], + label: '都兰县', + value: 632822, + }, + { + children: [], + label: '天峻县', + value: 632823, + }, + { + children: [], + label: '海西蒙古族藏族自治州直辖', + value: 632824, + }, + ], + label: '海西蒙古族藏族自治州', + value: 632800, + }, + ], + label: '青海省', + value: 630000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '兴庆区', + value: 640104, + }, + { + children: [], + label: '西夏区', + value: 640105, + }, + { + children: [], + label: '金凤区', + value: 640106, + }, + { + children: [], + label: '永宁县', + value: 640121, + }, + { + children: [], + label: '贺兰县', + value: 640122, + }, + { + children: [], + label: '灵武市', + value: 640181, + }, + ], + label: '银川市', + value: 640100, + }, + { + children: [ + { + children: [], + label: '大武口区', + value: 640202, + }, + { + children: [], + label: '惠农区', + value: 640205, + }, + { + children: [], + label: '平罗县', + value: 640221, + }, + ], + label: '石嘴山市', + value: 640200, + }, + { + children: [ + { + children: [], + label: '利通区', + value: 640302, + }, + { + children: [], + label: '红寺堡区', + value: 640303, + }, + { + children: [], + label: '盐池县', + value: 640323, + }, + { + children: [], + label: '同心县', + value: 640324, + }, + { + children: [], + label: '青铜峡市', + value: 640381, + }, + ], + label: '吴忠市', + value: 640300, + }, + { + children: [ + { + children: [], + label: '原州区', + value: 640402, + }, + { + children: [], + label: '西吉县', + value: 640422, + }, + { + children: [], + label: '隆德县', + value: 640423, + }, + { + children: [], + label: '泾源县', + value: 640424, + }, + { + children: [], + label: '彭阳县', + value: 640425, + }, + ], + label: '固原市', + value: 640400, + }, + { + children: [ + { + children: [], + label: '沙坡头区', + value: 640502, + }, + { + children: [], + label: '中宁县', + value: 640521, + }, + { + children: [], + label: '海原县', + value: 640522, + }, + ], + label: '中卫市', + value: 640500, + }, + ], + label: '宁夏回族自治区', + value: 640000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '天山区', + value: 650102, + }, + { + children: [], + label: '沙依巴克区', + value: 650103, + }, + { + children: [], + label: '新市区', + value: 650104, + }, + { + children: [], + label: '水磨沟区', + value: 650105, + }, + { + children: [], + label: '头屯河区', + value: 650106, + }, + { + children: [], + label: '达坂城区', + value: 650107, + }, + { + children: [], + label: '米东区', + value: 650109, + }, + { + children: [], + label: '乌鲁木齐县', + value: 650121, + }, + ], + label: '乌鲁木齐市', + value: 650100, + }, + { + children: [ + { + children: [], + label: '独山子区', + value: 650202, + }, + { + children: [], + label: '克拉玛依区', + value: 650203, + }, + { + children: [], + label: '白碱滩区', + value: 650204, + }, + { + children: [], + label: '乌尔禾区', + value: 650205, + }, + ], + label: '克拉玛依市', + value: 650200, + }, + { + children: [ + { + children: [], + label: '高昌区', + value: 650402, + }, + { + children: [], + label: '鄯善县', + value: 650421, + }, + { + children: [], + label: '托克逊县', + value: 650422, + }, + ], + label: '吐鲁番市', + value: 650400, + }, + { + children: [ + { + children: [], + label: '伊州区', + value: 650502, + }, + { + children: [], + label: '巴里坤哈萨克自治县', + value: 650521, + }, + { + children: [], + label: '伊吾县', + value: 650522, + }, + ], + label: '哈密市', + value: 650500, + }, + { + children: [ + { + children: [], + label: '昌吉市', + value: 652301, + }, + { + children: [], + label: '阜康市', + value: 652302, + }, + { + children: [], + label: '呼图壁县', + value: 652323, + }, + { + children: [], + label: '玛纳斯县', + value: 652324, + }, + { + children: [], + label: '奇台县', + value: 652325, + }, + { + children: [], + label: '吉木萨尔县', + value: 652327, + }, + { + children: [], + label: '木垒哈萨克自治县', + value: 652328, + }, + ], + label: '昌吉回族自治州', + value: 652300, + }, + { + children: [ + { + children: [], + label: '博乐市', + value: 652701, + }, + { + children: [], + label: '阿拉山口市', + value: 652702, + }, + { + children: [], + label: '精河县', + value: 652722, + }, + { + children: [], + label: '温泉县', + value: 652723, + }, + ], + label: '博尔塔拉蒙古自治州', + value: 652700, + }, + { + children: [ + { + children: [], + label: '库尔勒市', + value: 652801, + }, + { + children: [], + label: '轮台县', + value: 652822, + }, + { + children: [], + label: '尉犁县', + value: 652823, + }, + { + children: [], + label: '若羌县', + value: 652824, + }, + { + children: [], + label: '且末县', + value: 652825, + }, + { + children: [], + label: '焉耆回族自治县', + value: 652826, + }, + { + children: [], + label: '和静县', + value: 652827, + }, + { + children: [], + label: '和硕县', + value: 652828, + }, + { + children: [], + label: '博湖县', + value: 652829, + }, + ], + label: '巴音郭楞蒙古自治州', + value: 652800, + }, + { + children: [ + { + children: [], + label: '阿克苏市', + value: 652901, + }, + { + children: [], + label: '温宿县', + value: 652922, + }, + { + children: [], + label: '库车县', + value: 652923, + }, + { + children: [], + label: '沙雅县', + value: 652924, + }, + { + children: [], + label: '新和县', + value: 652925, + }, + { + children: [], + label: '拜城县', + value: 652926, + }, + { + children: [], + label: '乌什县', + value: 652927, + }, + { + children: [], + label: '阿瓦提县', + value: 652928, + }, + { + children: [], + label: '柯坪县', + value: 652929, + }, + ], + label: '阿克苏地区', + value: 652900, + }, + { + children: [ + { + children: [], + label: '阿图什市', + value: 653001, + }, + { + children: [], + label: '阿克陶县', + value: 653022, + }, + { + children: [], + label: '阿合奇县', + value: 653023, + }, + { + children: [], + label: '乌恰县', + value: 653024, + }, + ], + label: '克孜勒苏柯尔克孜自治州', + value: 653000, + }, + { + children: [ + { + children: [], + label: '喀什市', + value: 653101, + }, + { + children: [], + label: '疏附县', + value: 653121, + }, + { + children: [], + label: '疏勒县', + value: 653122, + }, + { + children: [], + label: '英吉沙县', + value: 653123, + }, + { + children: [], + label: '泽普县', + value: 653124, + }, + { + children: [], + label: '莎车县', + value: 653125, + }, + { + children: [], + label: '叶城县', + value: 653126, + }, + { + children: [], + label: '麦盖提县', + value: 653127, + }, + { + children: [], + label: '岳普湖县', + value: 653128, + }, + { + children: [], + label: '伽师县', + value: 653129, + }, + { + children: [], + label: '巴楚县', + value: 653130, + }, + { + children: [], + label: '塔什库尔干塔吉克自治县', + value: 653131, + }, + ], + label: '喀什地区', + value: 653100, + }, + { + children: [ + { + children: [], + label: '和田市', + value: 653201, + }, + { + children: [], + label: '和田县', + value: 653221, + }, + { + children: [], + label: '墨玉县', + value: 653222, + }, + { + children: [], + label: '皮山县', + value: 653223, + }, + { + children: [], + label: '洛浦县', + value: 653224, + }, + { + children: [], + label: '策勒县', + value: 653225, + }, + { + children: [], + label: '于田县', + value: 653226, + }, + { + children: [], + label: '民丰县', + value: 653227, + }, + ], + label: '和田地区', + value: 653200, + }, + { + children: [ + { + children: [], + label: '伊宁市', + value: 654002, + }, + { + children: [], + label: '奎屯市', + value: 654003, + }, + { + children: [], + label: '霍尔果斯市', + value: 654004, + }, + { + children: [], + label: '伊宁县', + value: 654021, + }, + { + children: [], + label: '察布查尔锡伯自治县', + value: 654022, + }, + { + children: [], + label: '霍城县', + value: 654023, + }, + { + children: [], + label: '巩留县', + value: 654024, + }, + { + children: [], + label: '新源县', + value: 654025, + }, + { + children: [], + label: '昭苏县', + value: 654026, + }, + { + children: [], + label: '特克斯县', + value: 654027, + }, + { + children: [], + label: '尼勒克县', + value: 654028, + }, + ], + label: '伊犁哈萨克自治州', + value: 654000, + }, + { + children: [ + { + children: [], + label: '塔城市', + value: 654201, + }, + { + children: [], + label: '乌苏市', + value: 654202, + }, + { + children: [], + label: '额敏县', + value: 654221, + }, + { + children: [], + label: '沙湾县', + value: 654223, + }, + { + children: [], + label: '托里县', + value: 654224, + }, + { + children: [], + label: '裕民县', + value: 654225, + }, + { + children: [], + label: '和布克赛尔蒙古自治县', + value: 654226, + }, + ], + label: '塔城地区', + value: 654200, + }, + { + children: [ + { + children: [], + label: '阿勒泰市', + value: 654301, + }, + { + children: [], + label: '布尔津县', + value: 654321, + }, + { + children: [], + label: '富蕴县', + value: 654322, + }, + { + children: [], + label: '福海县', + value: 654323, + }, + { + children: [], + label: '哈巴河县', + value: 654324, + }, + { + children: [], + label: '青河县', + value: 654325, + }, + { + children: [], + label: '吉木乃县', + value: 654326, + }, + ], + label: '阿勒泰地区', + value: 654300, + }, + { + children: [], + label: '石河子市', + value: 659001, + }, + { + children: [], + label: '阿拉尔市', + value: 659002, + }, + { + children: [], + label: '图木舒克市', + value: 659003, + }, + { + children: [], + label: '五家渠市', + value: 659004, + }, + { + children: [], + label: '北屯市', + value: 659005, + }, + { + children: [], + label: '铁门关市', + value: 659006, + }, + { + children: [], + label: '双河市', + value: 659007, + }, + { + children: [], + label: '可克达拉市', + value: 659008, + }, + { + children: [], + label: '昆玉市', + value: 659009, + }, + ], + label: '新疆维吾尔自治区', + value: 650000, + }, + { + children: [ + { + children: [ + { + children: [], + label: '北投区', + value: 710101, + }, + { + children: [], + label: '松山区', + value: 710102, + }, + { + children: [], + label: '大同区', + value: 710103, + }, + { + children: [], + label: '文山区', + value: 710104, + }, + { + children: [], + label: '信义区', + value: 710105, + }, + { + children: [], + label: '内湖区', + value: 710106, + }, + { + children: [], + label: '中正区', + value: 710107, + }, + { + children: [], + label: '万华区', + value: 710108, + }, + { + children: [], + label: '中山区', + value: 710109, + }, + { + children: [], + label: '士林区', + value: 710110, + }, + { + children: [], + label: '南港区', + value: 710111, + }, + { + children: [], + label: '大安区', + value: 710112, + }, + ], + label: '台北市', + value: 710100, + }, + { + children: [ + { + children: [], + label: '小港区', + value: 710201, + }, + { + children: [], + label: '左营区', + value: 710202, + }, + { + children: [], + label: '大寮区', + value: 710203, + }, + { + children: [], + label: '那玛夏区', + value: 710204, + }, + { + children: [], + label: '旗津区', + value: 710205, + }, + { + children: [], + label: '弥陀区', + value: 710206, + }, + { + children: [], + label: '燕巢区', + value: 710207, + }, + { + children: [], + label: '大树区', + value: 710208, + }, + { + children: [], + label: '阿莲区', + value: 710209, + }, + { + children: [], + label: '楠梓区', + value: 710210, + }, + { + children: [], + label: '鸟松区', + value: 710211, + }, + { + children: [], + label: '苓雅区', + value: 710212, + }, + { + children: [], + label: '桥头区', + value: 710213, + }, + { + children: [], + label: '梓官区', + value: 710214, + }, + { + children: [], + label: '美浓区', + value: 710215, + }, + { + children: [], + label: '仁武区', + value: 710216, + }, + { + children: [], + label: '凤山区', + value: 710217, + }, + { + children: [], + label: '甲仙区', + value: 710218, + }, + { + children: [], + label: '茄萣区', + value: 710219, + }, + { + children: [], + label: '大社区', + value: 710220, + }, + { + children: [], + label: '前镇区', + value: 710221, + }, + { + children: [], + label: '茂林区', + value: 710222, + }, + { + children: [], + label: '湖内区', + value: 710223, + }, + { + children: [], + label: '六龟区', + value: 710224, + }, + { + children: [], + label: '林园区', + value: 710225, + }, + { + children: [], + label: '内门区', + value: 710226, + }, + { + children: [], + label: '鼓山区', + value: 710227, + }, + { + children: [], + label: '杉林区', + value: 710228, + }, + { + children: [], + label: '三民区', + value: 710229, + }, + { + children: [], + label: '前金区', + value: 710230, + }, + { + children: [], + label: '冈山区', + value: 710231, + }, + { + children: [], + label: '田寮区', + value: 710232, + }, + { + children: [], + label: '桃源区', + value: 710233, + }, + { + children: [], + label: '盐埕区', + value: 710234, + }, + { + children: [], + label: '旗山区', + value: 710235, + }, + { + children: [], + label: '永安区', + value: 710236, + }, + { + children: [], + label: '路竹区', + value: 710237, + }, + { + children: [], + label: '新兴区', + value: 710238, + }, + ], + label: '高雄市', + value: 710200, + }, + { + children: [ + { + children: [], + label: '八里区', + value: 710301, + }, + { + children: [], + label: '三峡区', + value: 710302, + }, + { + children: [], + label: '新庄区', + value: 710303, + }, + { + children: [], + label: '坪林区', + value: 710304, + }, + { + children: [], + label: '莺歌区', + value: 710305, + }, + { + children: [], + label: '汐止区', + value: 710306, + }, + { + children: [], + label: '深坑区', + value: 710307, + }, + { + children: [], + label: '芦洲区', + value: 710308, + }, + { + children: [], + label: '三芝区', + value: 710309, + }, + { + children: [], + label: '三重区', + value: 710310, + }, + { + children: [], + label: '平溪区', + value: 710311, + }, + { + children: [], + label: '中和区', + value: 710312, + }, + { + children: [], + label: '永和区', + value: 710313, + }, + { + children: [], + label: '泰山区', + value: 710314, + }, + { + children: [], + label: '土城区', + value: 710315, + }, + { + children: [], + label: '石碇区', + value: 710316, + }, + { + children: [], + label: '五股区', + value: 710317, + }, + { + children: [], + label: '林口区', + value: 710318, + }, + { + children: [], + label: '双溪区', + value: 710319, + }, + { + children: [], + label: '树林区', + value: 710320, + }, + { + children: [], + label: '板桥区', + value: 710321, + }, + { + children: [], + label: '新店区', + value: 710322, + }, + { + children: [], + label: '乌来区', + value: 710323, + }, + { + children: [], + label: '贡寮区', + value: 710324, + }, + { + children: [], + label: '金山区', + value: 710325, + }, + { + children: [], + label: '万里区', + value: 710326, + }, + { + children: [], + label: '淡水区', + value: 710327, + }, + { + children: [], + label: '瑞芳区', + value: 710328, + }, + { + children: [], + label: '石门区', + value: 710329, + }, + ], + label: '新北市', + value: 710300, + }, + { + children: [ + { + children: [], + label: '东区', + value: 710401, + }, + { + children: [], + label: '新社区', + value: 710402, + }, + { + children: [], + label: '中区', + value: 710403, + }, + { + children: [], + label: '南屯区', + value: 710404, + }, + { + children: [], + label: '神冈区', + value: 710405, + }, + { + children: [], + label: '沙鹿区', + value: 710406, + }, + { + children: [], + label: '丰原区', + value: 710407, + }, + { + children: [], + label: '大里区', + value: 710408, + }, + { + children: [], + label: '龙井区', + value: 710409, + }, + { + children: [], + label: '西区', + value: 710410, + }, + { + children: [], + label: '南区', + value: 710411, + }, + { + children: [], + label: '西屯区', + value: 710412, + }, + { + children: [], + label: '太平区', + value: 710413, + }, + { + children: [], + label: '北屯区', + value: 710414, + }, + { + children: [], + label: '大雅区', + value: 710415, + }, + { + children: [], + label: '石冈区', + value: 710416, + }, + { + children: [], + label: '北区', + value: 710417, + }, + { + children: [], + label: '大甲区', + value: 710418, + }, + { + children: [], + label: '梧栖区', + value: 710419, + }, + { + children: [], + label: '东势区', + value: 710420, + }, + { + children: [], + label: '和平区', + value: 710421, + }, + { + children: [], + label: '雾峰区', + value: 710422, + }, + { + children: [], + label: '乌日区', + value: 710423, + }, + { + children: [], + label: '后里区', + value: 710424, + }, + { + children: [], + label: '潭子区', + value: 710425, + }, + { + children: [], + label: '大肚区', + value: 710426, + }, + { + children: [], + label: '外埔区', + value: 710427, + }, + { + children: [], + label: '清水区', + value: 710428, + }, + { + children: [], + label: '大安区', + value: 710429, + }, + ], + label: '台中市', + value: 710400, + }, + { + children: [ + { + children: [], + label: '安定区', + value: 710501, + }, + { + children: [], + label: '大内区', + value: 710502, + }, + { + children: [], + label: '东山区', + value: 710503, + }, + { + children: [], + label: '下营区', + value: 710504, + }, + { + children: [], + label: '山上区', + value: 710505, + }, + { + children: [], + label: '永康区', + value: 710506, + }, + { + children: [], + label: '新营区', + value: 710507, + }, + { + children: [], + label: '白河区', + value: 710508, + }, + { + children: [], + label: '盐水区', + value: 710509, + }, + { + children: [], + label: '归仁区', + value: 710510, + }, + { + children: [], + label: '龙崎区', + value: 710511, + }, + { + children: [], + label: '关庙区', + value: 710512, + }, + { + children: [], + label: '仁德区', + value: 710513, + }, + { + children: [], + label: '学甲区', + value: 710514, + }, + { + children: [], + label: '善化区', + value: 710515, + }, + { + children: [], + label: '新市区', + value: 710516, + }, + { + children: [], + label: '佳里区', + value: 710517, + }, + { + children: [], + label: '新化区', + value: 710518, + }, + { + children: [], + label: '西港区', + value: 710519, + }, + { + children: [], + label: '麻豆区', + value: 710520, + }, + { + children: [], + label: '安南区', + value: 710521, + }, + { + children: [], + label: '后壁区', + value: 710522, + }, + { + children: [], + label: '柳营区', + value: 710523, + }, + { + children: [], + label: '玉井区', + value: 710524, + }, + { + children: [], + label: '官田区', + value: 710525, + }, + { + children: [], + label: '东区', + value: 710526, + }, + { + children: [], + label: '六甲区', + value: 710527, + }, + { + children: [], + label: '中西区', + value: 710528, + }, + { + children: [], + label: '北区', + value: 710529, + }, + { + children: [], + label: '楠西区', + value: 710530, + }, + { + children: [], + label: '南化区', + value: 710531, + }, + { + children: [], + label: '左镇区', + value: 710532, + }, + { + children: [], + label: '南区', + value: 710533, + }, + { + children: [], + label: '安平区', + value: 710534, + }, + { + children: [], + label: '北门区', + value: 710535, + }, + { + children: [], + label: '七股区', + value: 710536, + }, + { + children: [], + label: '将军区', + value: 710537, + }, + ], + label: '台南市', + value: 710500, + }, + { + children: [ + { + children: [], + label: '平镇市', + value: 710601, + }, + { + children: [], + label: '杨梅市', + value: 710602, + }, + { + children: [], + label: '八德市', + value: 710603, + }, + { + children: [], + label: '桃园区', + value: 710604, + }, + { + children: [], + label: '龟山乡', + value: 710605, + }, + { + children: [], + label: '复兴乡', + value: 710606, + }, + { + children: [], + label: '芦竹乡', + value: 710607, + }, + { + children: [], + label: '观音乡', + value: 710608, + }, + { + children: [], + label: '龙潭乡', + value: 710609, + }, + { + children: [], + label: '大溪镇', + value: 710610, + }, + { + children: [], + label: '大园乡', + value: 710611, + }, + { + children: [], + label: '新屋乡', + value: 710612, + }, + { + children: [], + label: '中坜市', + value: 710613, + }, + ], + label: '桃园市', + value: 710600, + }, + { + children: [], + label: '基隆市', + value: 719001, + }, + { + children: [], + label: '新竹市', + value: 719002, + }, + { + children: [], + label: '嘉义市', + value: 719003, + }, + { + children: [], + label: '新竹县', + value: 719004, + }, + { + children: [], + label: '宜兰县', + value: 719005, + }, + { + children: [], + label: '苗栗县', + value: 719006, + }, + { + children: [], + label: '彰化县', + value: 719007, + }, + { + children: [], + label: '云林县', + value: 719008, + }, + { + children: [], + label: '南投县', + value: 719009, + }, + { + children: [], + label: '嘉义县', + value: 719010, + }, + { + children: [], + label: '屏东县', + value: 719011, + }, + { + children: [], + label: '台东县', + value: 719012, + }, + { + children: [], + label: '花莲县', + value: 719013, + }, + { + children: [], + label: '澎湖县', + value: 719014, + }, + ], + label: '台湾省', + value: 710000, + }, + { + children: [ + { + children: [], + label: '中西区', + value: 810101, + }, + { + children: [], + label: '东区', + value: 810102, + }, + { + children: [], + label: '九龙城区', + value: 810103, + }, + { + children: [], + label: '观塘区', + value: 810104, + }, + { + children: [], + label: '南区', + value: 810105, + }, + { + children: [], + label: '深水埗区', + value: 810106, + }, + { + children: [], + label: '湾仔区', + value: 810107, + }, + { + children: [], + label: '黄大仙区', + value: 810108, + }, + { + children: [], + label: '油尖旺区', + value: 810109, + }, + { + children: [], + label: '离岛区', + value: 810110, + }, + { + children: [], + label: '葵青区', + value: 810111, + }, + { + children: [], + label: '北区', + value: 810112, + }, + { + children: [], + label: '西贡区', + value: 810113, + }, + { + children: [], + label: '沙田区', + value: 810114, + }, + { + children: [], + label: '屯门区', + value: 810115, + }, + { + children: [], + label: '大埔区', + value: 810116, + }, + { + children: [], + label: '荃湾区', + value: 810117, + }, + { + children: [], + label: '元朗区', + value: 810118, + }, + ], + label: '香港', + value: 810000, + }, + { + children: [ + { + children: [], + label: '花王堂区', + value: 820001, + }, + { + children: [], + label: '望德堂区', + value: 820002, + }, + { + children: [], + label: '风顺堂区', + value: 820003, + }, + { + children: [], + label: '圣方济各堂区', + value: 820004, + }, + { + children: [], + label: '嘉模堂区', + value: 820005, + }, + { + children: [], + label: '大堂区', + value: 820006, + }, + { + children: [], + label: '路氹填海区', + value: 820007, + }, + { + children: [], + label: '花地玛堂区', + value: 820008, + }, + { + children: [], + label: '澳门特别行政区直辖', + value: 820010, + }, + ], + label: '澳门', + value: 820000, + }, +]; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/components/framework/area-cascader/province-city.js b/smart-admin-web/javascript-ant-design-vue3/src/components/framework/area-cascader/province-city.js new file mode 100644 index 00000000..50ba58d1 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/components/framework/area-cascader/province-city.js @@ -0,0 +1,1727 @@ +export const PROVINCE_CITY = [ + { + children: [ + { + value: 110100, + label: '北京', + }, + ], + value: 110000, + label: '北京市', + }, + { + children: [ + { + value: 120100, + label: '天津', + }, + ], + value: 120000, + label: '天津市', + }, + { + children: [ + { + value: 130100, + label: '石家庄', + }, + { + value: 130200, + label: '唐山', + }, + { + value: 130300, + label: '秦皇岛', + }, + { + value: 130400, + label: '邯郸', + }, + { + value: 130500, + label: '邢台', + }, + { + value: 130600, + label: '保定', + }, + { + value: 130700, + label: '张家口', + }, + { + value: 130800, + label: '承德', + }, + { + value: 130900, + label: '沧州', + }, + { + value: 131000, + label: '廊坊', + }, + { + value: 131100, + label: '衡水', + }, + ], + value: 130000, + label: '河北省', + }, + { + children: [ + { + value: 140100, + label: '太原', + }, + { + value: 140200, + label: '大同', + }, + { + value: 140300, + label: '阳泉', + }, + { + value: 140400, + label: '长治', + }, + { + value: 140500, + label: '晋城', + }, + { + value: 140600, + label: '朔州', + }, + { + value: 140700, + label: '晋中', + }, + { + value: 140800, + label: '运城', + }, + { + value: 140900, + label: '忻州', + }, + { + value: 141000, + label: '临汾', + }, + { + value: 141100, + label: '吕梁', + }, + ], + value: 140000, + label: '山西省', + }, + { + children: [ + { + value: 150100, + label: '呼和浩特', + }, + { + value: 150200, + label: '包头', + }, + { + value: 150300, + label: '乌海', + }, + { + value: 150400, + label: '赤峰', + }, + { + value: 150500, + label: '通辽', + }, + { + value: 150600, + label: '鄂尔多斯', + }, + { + value: 150700, + label: '呼伦贝尔', + }, + { + value: 150800, + label: '巴彦淖尔', + }, + { + value: 150900, + label: '乌兰察布', + }, + { + value: 152200, + label: '兴安盟', + }, + { + value: 152500, + label: '锡林郭勒盟', + }, + { + value: 152900, + label: '阿拉善盟', + }, + ], + value: 150000, + label: '内蒙古自治区', + }, + { + children: [ + { + value: 210100, + label: '沈阳', + }, + { + value: 210200, + label: '大连', + }, + { + value: 210300, + label: '鞍山', + }, + { + value: 210400, + label: '抚顺', + }, + { + value: 210500, + label: '本溪', + }, + { + value: 210600, + label: '丹东', + }, + { + value: 210700, + label: '锦州', + }, + { + value: 210800, + label: '营口', + }, + { + value: 210900, + label: '阜新', + }, + { + value: 211000, + label: '辽阳', + }, + { + value: 211100, + label: '盘锦', + }, + { + value: 211200, + label: '铁岭', + }, + { + value: 211300, + label: '朝阳', + }, + { + value: 211400, + label: '葫芦岛', + }, + ], + value: 210000, + label: '辽宁省', + }, + { + children: [ + { + value: 220100, + label: '长春', + }, + { + value: 220200, + label: '吉林', + }, + { + value: 220300, + label: '四平', + }, + { + value: 220400, + label: '辽源', + }, + { + value: 220500, + label: '通化', + }, + { + value: 220600, + label: '白山', + }, + { + value: 220700, + label: '松原', + }, + { + value: 220800, + label: '白城', + }, + { + value: 222400, + label: '延边', + }, + ], + value: 220000, + label: '吉林省', + }, + { + children: [ + { + value: 230100, + label: '哈尔滨', + }, + { + value: 230200, + label: '齐齐哈尔', + }, + { + value: 230300, + label: '鸡西', + }, + { + value: 230400, + label: '鹤岗', + }, + { + value: 230500, + label: '双鸭山', + }, + { + value: 230600, + label: '大庆', + }, + { + value: 230700, + label: '伊春', + }, + { + value: 230800, + label: '佳木斯', + }, + { + value: 230900, + label: '七台河', + }, + { + value: 231000, + label: '牡丹江', + }, + { + value: 231100, + label: '黑河', + }, + { + value: 231200, + label: '绥化', + }, + { + value: 232700, + label: '大兴安岭地区', + }, + ], + value: 230000, + label: '黑龙江省', + }, + { + children: [ + { + value: 310100, + label: '上海', + }, + ], + value: 310000, + label: '上海市', + }, + { + children: [ + { + value: 320100, + label: '南京', + }, + { + value: 320200, + label: '无锡', + }, + { + value: 320300, + label: '徐州', + }, + { + value: 320400, + label: '常州', + }, + { + value: 320500, + label: '苏州', + }, + { + value: 320600, + label: '南通', + }, + { + value: 320700, + label: '连云港', + }, + { + value: 320800, + label: '淮安', + }, + { + value: 320900, + label: '盐城', + }, + { + value: 321000, + label: '扬州', + }, + { + value: 321100, + label: '镇江', + }, + { + value: 321200, + label: '泰州', + }, + { + value: 321300, + label: '宿迁', + }, + ], + value: 320000, + label: '江苏省', + }, + { + children: [ + { + value: 330100, + label: '杭州', + }, + { + value: 330200, + label: '宁波', + }, + { + value: 330300, + label: '温州', + }, + { + value: 330400, + label: '嘉兴', + }, + { + value: 330500, + label: '湖州', + }, + { + value: 330600, + label: '绍兴', + }, + { + value: 330700, + label: '金华', + }, + { + value: 330800, + label: '衢州', + }, + { + value: 330900, + label: '舟山', + }, + { + value: 331000, + label: '台州', + }, + { + value: 331100, + label: '丽水', + }, + ], + value: 330000, + label: '浙江省', + }, + { + children: [ + { + value: 340100, + label: '合肥', + }, + { + value: 340200, + label: '芜湖', + }, + { + value: 340300, + label: '蚌埠', + }, + { + value: 340400, + label: '淮南', + }, + { + value: 340500, + label: '马鞍山', + }, + { + value: 340600, + label: '淮北', + }, + { + value: 340700, + label: '铜陵', + }, + { + value: 340800, + label: '安庆', + }, + { + value: 341000, + label: '黄山', + }, + { + value: 341100, + label: '滁州', + }, + { + value: 341200, + label: '阜阳', + }, + { + value: 341300, + label: '宿州', + }, + { + value: 341500, + label: '六安', + }, + { + value: 341600, + label: '亳州', + }, + { + value: 341700, + label: '池州', + }, + { + value: 341800, + label: '宣城', + }, + ], + value: 340000, + label: '安徽省', + }, + { + children: [ + { + value: 350100, + label: '福州', + }, + { + value: 350200, + label: '厦门', + }, + { + value: 350300, + label: '莆田', + }, + { + value: 350400, + label: '三明', + }, + { + value: 350500, + label: '泉州', + }, + { + value: 350600, + label: '漳州', + }, + { + value: 350700, + label: '南平', + }, + { + value: 350800, + label: '龙岩', + }, + { + value: 350900, + label: '宁德', + }, + ], + value: 350000, + label: '福建省', + }, + { + children: [ + { + value: 360100, + label: '南昌', + }, + { + value: 360200, + label: '景德镇', + }, + { + value: 360300, + label: '萍乡', + }, + { + value: 360400, + label: '九江', + }, + { + value: 360500, + label: '新余', + }, + { + value: 360600, + label: '鹰潭', + }, + { + value: 360700, + label: '赣州', + }, + { + value: 360800, + label: '吉安', + }, + { + value: 360900, + label: '宜春', + }, + { + value: 361000, + label: '抚州', + }, + { + value: 361100, + label: '上饶', + }, + ], + value: 360000, + label: '江西省', + }, + { + children: [ + { + value: 370100, + label: '济南', + }, + { + value: 370200, + label: '青岛', + }, + { + value: 370300, + label: '淄博', + }, + { + value: 370400, + label: '枣庄', + }, + { + value: 370500, + label: '东营', + }, + { + value: 370600, + label: '烟台', + }, + { + value: 370700, + label: '潍坊', + }, + { + value: 370800, + label: '济宁', + }, + { + value: 370900, + label: '泰安', + }, + { + value: 371000, + label: '威海', + }, + { + value: 371100, + label: '日照', + }, + { + value: 371300, + label: '临沂', + }, + { + value: 371400, + label: '德州', + }, + { + value: 371500, + label: '聊城', + }, + { + value: 371600, + label: '滨州', + }, + { + value: 371700, + label: '菏泽', + }, + { + value: 1072447, + label: '莱芜', + }, + ], + value: 370000, + label: '山东省', + }, + { + children: [ + { + value: 410100, + label: '郑州', + }, + { + value: 410200, + label: '开封', + }, + { + value: 410300, + label: '洛阳', + }, + { + value: 410400, + label: '平顶山', + }, + { + value: 410500, + label: '安阳', + }, + { + value: 410600, + label: '鹤壁', + }, + { + value: 410700, + label: '新乡', + }, + { + value: 410800, + label: '焦作', + }, + { + value: 410900, + label: '濮阳', + }, + { + value: 411000, + label: '许昌', + }, + { + value: 411100, + label: '漯河', + }, + { + value: 411200, + label: '三门峡', + }, + { + value: 411300, + label: '南阳', + }, + { + value: 411400, + label: '商丘', + }, + { + value: 411500, + label: '信阳', + }, + { + value: 411600, + label: '周口', + }, + { + value: 411700, + label: '驻马店', + }, + { + value: 419001, + label: '济源', + }, + ], + value: 410000, + label: '河南省', + }, + { + children: [ + { + value: 420100, + label: '武汉', + }, + { + value: 420200, + label: '黄石', + }, + { + value: 420300, + label: '十堰', + }, + { + value: 420500, + label: '宜昌', + }, + { + value: 420600, + label: '襄阳', + }, + { + value: 420700, + label: '鄂州', + }, + { + value: 420800, + label: '荆门', + }, + { + value: 420900, + label: '孝感', + }, + { + value: 421000, + label: '荆州', + }, + { + value: 421100, + label: '黄冈', + }, + { + value: 421200, + label: '咸宁', + }, + { + value: 421300, + label: '随州', + }, + { + value: 422800, + label: '恩施', + }, + { + value: 1072452, + label: '潜江', + }, + { + value: 1072453, + label: '仙桃', + }, + { + value: 1072457, + label: '大冶', + }, + { + value: 1072458, + label: '天门', + }, + { + value: 1072460, + label: '神农架', + }, + ], + value: 420000, + label: '湖北省', + }, + { + children: [ + { + value: 430100, + label: '长沙', + }, + { + value: 430200, + label: '株洲', + }, + { + value: 430300, + label: '湘潭', + }, + { + value: 430400, + label: '衡阳', + }, + { + value: 430500, + label: '邵阳', + }, + { + value: 430600, + label: '岳阳', + }, + { + value: 430700, + label: '常德', + }, + { + value: 430800, + label: '张家界', + }, + { + value: 430900, + label: '益阳', + }, + { + value: 431000, + label: '郴州', + }, + { + value: 431100, + label: '永州', + }, + { + value: 431200, + label: '怀化', + }, + { + value: 431300, + label: '娄底', + }, + { + value: 433100, + label: '湘西', + }, + ], + value: 430000, + label: '湖南省', + }, + { + children: [ + { + value: 440100, + label: '广州', + }, + { + value: 440200, + label: '韶关', + }, + { + value: 440300, + label: '深圳', + }, + { + value: 440400, + label: '珠海', + }, + { + value: 440500, + label: '汕头', + }, + { + value: 440600, + label: '佛山', + }, + { + value: 440700, + label: '江门', + }, + { + value: 440800, + label: '湛江', + }, + { + value: 440900, + label: '茂名', + }, + { + value: 441200, + label: '肇庆', + }, + { + value: 441300, + label: '惠州', + }, + { + value: 441400, + label: '梅州', + }, + { + value: 441500, + label: '汕尾', + }, + { + value: 441600, + label: '河源', + }, + { + value: 441700, + label: '阳江', + }, + { + value: 441800, + label: '清远', + }, + { + value: 441900, + label: '东莞', + }, + { + value: 442000, + label: '中山', + }, + { + value: 445100, + label: '潮州', + }, + { + value: 445200, + label: '揭阳', + }, + { + value: 445300, + label: '云浮', + }, + ], + value: 440000, + label: '广东省', + }, + { + children: [ + { + value: 450100, + label: '南宁', + }, + { + value: 450200, + label: '柳州', + }, + { + value: 450300, + label: '桂林', + }, + { + value: 450400, + label: '梧州', + }, + { + value: 450500, + label: '北海', + }, + { + value: 450600, + label: '防城港', + }, + { + value: 450700, + label: '钦州', + }, + { + value: 450800, + label: '贵港', + }, + { + value: 450900, + label: '玉林', + }, + { + value: 451000, + label: '百色', + }, + { + value: 451100, + label: '贺州', + }, + { + value: 451200, + label: '河池', + }, + { + value: 451300, + label: '来宾', + }, + { + value: 451400, + label: '崇左', + }, + ], + value: 450000, + label: '广西壮族自治区', + }, + { + children: [ + { + value: 460100, + label: '海口', + }, + { + value: 460200, + label: '三亚', + }, + { + value: 460300, + label: '三沙', + }, + { + value: 460400, + label: '儋州', + }, + { + value: 1072449, + label: '文昌', + }, + ], + value: 460000, + label: '海南省', + }, + { + children: [ + { + value: 500100, + label: '重庆', + }, + ], + value: 500000, + label: '重庆市', + }, + { + children: [ + { + value: 510100, + label: '成都', + }, + { + value: 510300, + label: '自贡', + }, + { + value: 510400, + label: '攀枝花', + }, + { + value: 510500, + label: '泸州', + }, + { + value: 510600, + label: '德阳', + }, + { + value: 510700, + label: '绵阳', + }, + { + value: 510800, + label: '广元', + }, + { + value: 510900, + label: '遂宁', + }, + { + value: 511000, + label: '内江', + }, + { + value: 511100, + label: '乐山', + }, + { + value: 511300, + label: '南充', + }, + { + value: 511400, + label: '眉山', + }, + { + value: 511500, + label: '宜宾', + }, + { + value: 511600, + label: '广安', + }, + { + value: 511700, + label: '达州', + }, + { + value: 511800, + label: '雅安', + }, + { + value: 511900, + label: '巴中', + }, + { + value: 512000, + label: '资阳', + }, + { + value: 513200, + label: '阿坝', + }, + { + value: 513300, + label: '甘孜', + }, + { + value: 513400, + label: '凉山', + }, + { + value: 1072456, + label: '西昌', + }, + ], + value: 510000, + label: '四川省', + }, + { + children: [ + { + value: 520100, + label: '贵阳', + }, + { + value: 520200, + label: '六盘水', + }, + { + value: 520300, + label: '遵义', + }, + { + value: 520400, + label: '安顺', + }, + { + value: 520500, + label: '毕节', + }, + { + value: 520600, + label: '铜仁', + }, + { + value: 522300, + label: '黔西南', + }, + { + value: 522600, + label: '黔东南', + }, + { + value: 522700, + label: '黔南', + }, + ], + value: 520000, + label: '贵州省', + }, + { + children: [ + { + value: 530100, + label: '昆明', + }, + { + value: 530300, + label: '曲靖', + }, + { + value: 530400, + label: '玉溪', + }, + { + value: 530500, + label: '保山', + }, + { + value: 530600, + label: '昭通', + }, + { + value: 530700, + label: '丽江', + }, + { + value: 530800, + label: '普洱', + }, + { + value: 530900, + label: '临沧', + }, + { + value: 532300, + label: '楚雄彝族自治州', + }, + { + value: 532500, + label: '红河哈尼族彝族自治州', + }, + { + value: 532600, + label: '文山壮族苗族自治州', + }, + { + value: 532800, + label: '西双版纳傣族自治州', + }, + { + value: 532900, + label: '大理', + }, + { + value: 533100, + label: '德宏傣族景颇族自治州', + }, + { + value: 533300, + label: '怒江傈僳族自治州', + }, + { + value: 533400, + label: '迪庆藏族自治州', + }, + ], + value: 530000, + label: '云南省', + }, + { + children: [ + { + value: 540100, + label: '拉萨', + }, + { + value: 540200, + label: '日喀则', + }, + { + value: 540300, + label: '昌都', + }, + { + value: 540400, + label: '林芝', + }, + { + value: 540500, + label: '山南', + }, + { + value: 540600, + label: '那曲', + }, + { + value: 542500, + label: '阿里', + }, + ], + value: 540000, + label: '西藏自治区', + }, + { + children: [ + { + value: 610100, + label: '西安', + }, + { + value: 610200, + label: '铜川', + }, + { + value: 610300, + label: '宝鸡', + }, + { + value: 610400, + label: '咸阳', + }, + { + value: 610500, + label: '渭南', + }, + { + value: 610600, + label: '延安', + }, + { + value: 610700, + label: '汉中', + }, + { + value: 610800, + label: '榆林', + }, + { + value: 610900, + label: '安康', + }, + { + value: 611000, + label: '商洛', + }, + { + value: 1072448, + label: '杨凌', + }, + ], + value: 610000, + label: '陕西省', + }, + { + children: [ + { + value: 620100, + label: '兰州', + }, + { + value: 620200, + label: '嘉峪关', + }, + { + value: 620300, + label: '金昌', + }, + { + value: 620400, + label: '白银', + }, + { + value: 620500, + label: '天水', + }, + { + value: 620600, + label: '武威', + }, + { + value: 620700, + label: '张掖', + }, + { + value: 620800, + label: '平凉', + }, + { + value: 620900, + label: '酒泉', + }, + { + value: 621000, + label: '庆阳', + }, + { + value: 621100, + label: '定西', + }, + { + value: 621200, + label: '陇南', + }, + { + value: 622900, + label: '临夏回族自治州', + }, + { + value: 623000, + label: '甘南藏族自治州', + }, + ], + value: 620000, + label: '甘肃省', + }, + { + children: [ + { + value: 630100, + label: '西宁', + }, + { + value: 630200, + label: '海东', + }, + { + value: 632200, + label: '海北', + }, + { + value: 632300, + label: '黄南', + }, + { + value: 632500, + label: '海南', + }, + { + value: 632600, + label: '果洛', + }, + { + value: 632700, + label: '玉树', + }, + { + value: 632800, + label: '海西', + }, + ], + value: 630000, + label: '青海省', + }, + { + children: [ + { + value: 640100, + label: '银川', + }, + { + value: 640200, + label: '石嘴山', + }, + { + value: 640300, + label: '吴忠', + }, + { + value: 640400, + label: '固原', + }, + { + value: 640500, + label: '中卫', + }, + ], + value: 640000, + label: '宁夏回族自治区', + }, + { + children: [ + { + value: 650100, + label: '乌鲁木齐', + }, + { + value: 650200, + label: '克拉玛依', + }, + { + value: 650400, + label: '吐鲁番', + }, + { + value: 650500, + label: '哈密', + }, + { + value: 652300, + label: '昌吉', + }, + { + value: 652700, + label: '博尔塔拉', + }, + { + value: 652800, + label: '巴音郭楞', + }, + { + value: 652900, + label: '阿克苏', + }, + { + value: 653000, + label: '克孜勒苏柯尔克孜', + }, + { + value: 653100, + label: '喀什地区', + }, + { + value: 653200, + label: '和田', + }, + { + value: 654000, + label: '伊犁', + }, + { + value: 654200, + label: '塔城', + }, + { + value: 654300, + label: '阿勒泰', + }, + { + value: 1072450, + label: '阿拉尔', + }, + { + value: 1072454, + label: '铁门关', + }, + { + value: 1072455, + label: '五家渠', + }, + { + value: 1072459, + label: '石河子', + }, + ], + value: 650000, + label: '新疆维吾尔自治区', + }, + { + children: [ + { + value: 8345963, + label: '台北', + }, + { + value: 8345964, + label: '高雄', + }, + ], + value: 710000, + label: '台湾省', + }, + { + children: [ + { + value: 810001, + label: '中西区', + }, + { + value: 810002, + label: '湾仔区', + }, + { + value: 810003, + label: '东区', + }, + { + value: 810004, + label: '南区', + }, + { + value: 810005, + label: '油尖旺区', + }, + { + value: 810006, + label: '深水埗区', + }, + { + value: 810007, + label: '九龙城区', + }, + { + value: 810008, + label: '黄大仙区', + }, + { + value: 810009, + label: '观塘区', + }, + { + value: 810010, + label: '荃湾区', + }, + { + value: 810011, + label: '屯门区', + }, + { + value: 810012, + label: '元朗区', + }, + { + value: 810013, + label: '北区', + }, + { + value: 810014, + label: '大埔区', + }, + { + value: 810015, + label: '西贡区', + }, + { + value: 810016, + label: '沙田区', + }, + { + value: 810017, + label: '葵青区', + }, + { + value: 810018, + label: '离岛区', + }, + ], + value: 810000, + label: '香港特别行政区', + }, + { + children: [ + { + value: 820001, + label: '花地玛堂区', + }, + { + value: 820002, + label: '花王堂区', + }, + { + value: 820003, + label: '望德堂区', + }, + { + value: 820004, + label: '大堂区', + }, + { + value: 820005, + label: '风顺堂区', + }, + { + value: 820006, + label: '嘉模堂区', + }, + { + value: 820007, + label: '路凼填海区', + }, + { + value: 820008, + label: '圣方济各堂区', + }, + ], + value: 820000, + label: '澳门特别行政区', + }, + { + children: [], + value: 900000, + label: '外国', + }, +]; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/components/framework/boolean-select/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/components/framework/boolean-select/index.vue new file mode 100644 index 00000000..1be4243d --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/components/framework/boolean-select/index.vue @@ -0,0 +1,81 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/components/framework/icon-select/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/components/framework/icon-select/index.vue new file mode 100644 index 00000000..87cd32f2 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/components/framework/icon-select/index.vue @@ -0,0 +1,133 @@ + + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/components/framework/iframe/iframe-index.vue b/smart-admin-web/javascript-ant-design-vue3/src/components/framework/iframe/iframe-index.vue new file mode 100644 index 00000000..574fc99d --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/components/framework/iframe/iframe-index.vue @@ -0,0 +1,18 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/components/framework/iframe/route-default-component.vue b/smart-admin-web/javascript-ant-design-vue3/src/components/framework/iframe/route-default-component.vue new file mode 100644 index 00000000..7b8b46cb --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/components/framework/iframe/route-default-component.vue @@ -0,0 +1,3 @@ + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/components/framework/smart-enum-checkbox/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/components/framework/smart-enum-checkbox/index.vue new file mode 100644 index 00000000..aa7debba --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/components/framework/smart-enum-checkbox/index.vue @@ -0,0 +1,55 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/components/framework/smart-enum-radio/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/components/framework/smart-enum-radio/index.vue new file mode 100644 index 00000000..53595671 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/components/framework/smart-enum-radio/index.vue @@ -0,0 +1,63 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/components/framework/smart-enum-select/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/components/framework/smart-enum-select/index.vue new file mode 100644 index 00000000..0070a95a --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/components/framework/smart-enum-select/index.vue @@ -0,0 +1,68 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/components/framework/smart-loading/index.js b/smart-admin-web/javascript-ant-design-vue3/src/components/framework/smart-loading/index.js new file mode 100644 index 00000000..e3e7c311 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/components/framework/smart-loading/index.js @@ -0,0 +1,20 @@ +/* + * loading 组件 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-07-22 20:33:41 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { useSpinStore } from "/@/store/modules/system/spin"; + +export const SmartLoading = { + show: () => { + useSpinStore().show(); + }, + + hide: () => { + useSpinStore().hide(); + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/components/framework/wangeditor/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/components/framework/wangeditor/index.vue new file mode 100644 index 00000000..2f2f2e69 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/components/framework/wangeditor/index.vue @@ -0,0 +1,109 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/components/support/data-tracer/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/components/support/data-tracer/index.vue new file mode 100644 index 00000000..27fcb8d7 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/components/support/data-tracer/index.vue @@ -0,0 +1,239 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/components/support/dict-key-select/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/components/support/dict-key-select/index.vue new file mode 100644 index 00000000..453ca09e --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/components/support/dict-key-select/index.vue @@ -0,0 +1,78 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/components/support/dict-select/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/components/support/dict-select/index.vue new file mode 100644 index 00000000..2e5591f4 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/components/support/dict-select/index.vue @@ -0,0 +1,116 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/components/support/file-preview-modal/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/components/support/file-preview-modal/index.vue new file mode 100644 index 00000000..ecf3b337 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/components/support/file-preview-modal/index.vue @@ -0,0 +1,87 @@ + + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/components/support/file-preview/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/components/support/file-preview/index.vue new file mode 100644 index 00000000..e8215a91 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/components/support/file-preview/index.vue @@ -0,0 +1,78 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/components/support/file-upload/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/components/support/file-upload/index.vue new file mode 100644 index 00000000..9cb70c74 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/components/support/file-upload/index.vue @@ -0,0 +1,199 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/components/support/table-operator/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/components/support/table-operator/index.vue new file mode 100644 index 00000000..688d127c --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/components/support/table-operator/index.vue @@ -0,0 +1,163 @@ + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/components/support/table-operator/smart-table-column-merge.js b/smart-admin-web/javascript-ant-design-vue3/src/components/support/table-operator/smart-table-column-merge.js new file mode 100644 index 00000000..23628e3b --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/components/support/table-operator/smart-table-column-merge.js @@ -0,0 +1,54 @@ +/* + * 表格列设置 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-08-26 23:45:51 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +import _ from 'lodash'; + +/** + * 将原视表格列和用户表格列进行合并、排序 + * @param {*} originalTableColumnArray + * @param {*} userTableColumnArray + */ +export function mergeColumn(originalTableColumnArray, userTableColumnArray) { + if (!userTableColumnArray) { + return originalTableColumnArray; + } + + //第一步:将用户的列数据转为Map,以后备使用 + let userTableColumnMap = new Map(); + for (const item of userTableColumnArray) { + userTableColumnMap.set(item.columnKey, item); + } + + //第二步:以前端的table columns列为基础,将用户后端的数据填充到前端表格列里 + let fontColumnSort = 1; + let newColumns = []; + for (const fontColumn of originalTableColumnArray) { + //原始表格列默认显示 + fontColumn.columnKey = fontColumn.dataIndex; + fontColumn.showFlag = true; + fontColumn.sort = fontColumnSort; + + // 如果用户存在此列,则覆盖 sort和width、showFlag字段 + let userColumn = userTableColumnMap.get(fontColumn.columnKey); + if (userColumn) { + fontColumn.sort = userColumn.sort; + fontColumn.showFlag = userColumn.showFlag; + if (userColumn.width) { + fontColumn.width = userColumn.width; + } + } + newColumns.push(fontColumn); + fontColumnSort++; + } + + //第三步:前端列进行排序 + newColumns = _.sortBy(newColumns, (e) => e.sort); + return newColumns; +} diff --git a/smart-admin-web/javascript-ant-design-vue3/src/components/support/table-operator/smart-table-column-modal.vue b/smart-admin-web/javascript-ant-design-vue3/src/components/support/table-operator/smart-table-column-modal.vue new file mode 100644 index 00000000..d7445968 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/components/support/table-operator/smart-table-column-modal.vue @@ -0,0 +1,280 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/components/system/department-tree-select/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/components/system/department-tree-select/index.vue new file mode 100644 index 00000000..b31c99c0 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/components/system/department-tree-select/index.vue @@ -0,0 +1,58 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/components/system/employee-select/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/components/system/employee-select/index.vue new file mode 100644 index 00000000..d8e08ee1 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/components/system/employee-select/index.vue @@ -0,0 +1,97 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/components/system/employee-table-select-modal/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/components/system/employee-table-select-modal/index.vue new file mode 100644 index 00000000..a19ae22c --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/components/system/employee-table-select-modal/index.vue @@ -0,0 +1,182 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/components/system/menu-tree-select/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/components/system/menu-tree-select/index.vue new file mode 100644 index 00000000..c2ada2ad --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/components/system/menu-tree-select/index.vue @@ -0,0 +1,76 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/config/app-config.js b/smart-admin-web/javascript-ant-design-vue3/src/config/app-config.js new file mode 100644 index 00000000..bcc08461 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/config/app-config.js @@ -0,0 +1,29 @@ +/* + * 应用默认配置 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-03 22:07:01 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +export const appDefaultConfig = { + // i18n 语言选择 + language: 'zh_CN', + // 布局: side 或者 side-expand + layout: 'side', + // 侧边菜单宽度 , 默认为200px + sideMenuWidth: 200, + // 菜单主题 + sideMenuTheme: 'dark', + // 标签页 + pageTagFlag: true, + // 面包屑 + breadCrumbFlag: true, + // 页脚 + footerFlag: true, + // 帮助文档 + helpDocFlag: false, + // 网站名称 + websiteName: 'SmartAdmin 2.X', +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/constants/business/erp/category-const.js b/smart-admin-web/javascript-ant-design-vue3/src/constants/business/erp/category-const.js new file mode 100644 index 00000000..03869918 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/constants/business/erp/category-const.js @@ -0,0 +1,23 @@ +/* + * 类别 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-03 22:07:51 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +export const CATEGORY_TYPE_ENUM = { + GOODS: { + value: 1, + desc: '商品', + }, + DEMO: { + value: 2, + desc: '演示分类', + }, +}; + +export default { + CATEGORY_TYPE_ENUM, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/constants/business/erp/goods-const.js b/smart-admin-web/javascript-ant-design-vue3/src/constants/business/erp/goods-const.js new file mode 100644 index 00000000..c2814464 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/constants/business/erp/goods-const.js @@ -0,0 +1,26 @@ +/* + * 商品 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-03 22:08:10 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +export const GOODS_STATUS_ENUM = { + APPOINTMENT: { + value: 1, + desc: '预约中', + }, + SELL: { + value: 2, + desc: '售卖中', + }, + SELL_OUT: { + value: 3, + desc: '售罄', + }, +}; +export default { + GOODS_STATUS_ENUM, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/constants/business/oa/enterprise-const.js b/smart-admin-web/javascript-ant-design-vue3/src/constants/business/oa/enterprise-const.js new file mode 100644 index 00000000..bd8d5971 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/constants/business/oa/enterprise-const.js @@ -0,0 +1,24 @@ +/* + * 企业 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-03 22:07:27 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +export const ENTERPRISE_TYPE_ENUM = { + NORMAL: { + value: 1, + desc: '有限企业', + }, + FOREIGN: { + value: 2, + desc: '外资企业', + }, +}; + +export default { + ENTERPRISE_TYPE_ENUM, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/constants/business/oa/notice-const.js b/smart-admin-web/javascript-ant-design-vue3/src/constants/business/oa/notice-const.js new file mode 100644 index 00000000..86a5b26d --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/constants/business/oa/notice-const.js @@ -0,0 +1,36 @@ +/* + * 通知 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-03 22:07:27 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +export const NOTICE_VISIBLE_RANGE_DATA_TYPE_ENUM = { + EMPLOYEE: { + value: 1, + desc: '员工', + }, + DEPARTMENT: { + value: 2, + desc: '部门', + }, +}; + +export const NOTICE_TYPE_ENUM = { + ANNOUNCEMENT: { + value: 1, + desc: '公告', + }, + NOTICE: { + value: 2, + desc: '通知', + }, +}; + +export default { + NOTICE_VISIBLE_RANGE_DATA_TYPE_ENUM, + NOTICE_TYPE_ENUM, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/constants/common-const.js b/smart-admin-web/javascript-ant-design-vue3/src/constants/common-const.js new file mode 100644 index 00000000..188c131e --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/constants/common-const.js @@ -0,0 +1,58 @@ +/* + * 通用常量 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 19:57:29 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +export const PAGE_SIZE = 10; + +export const PAGE_SIZE_OPTIONS = ['10', '15', '20', '30', '40', '50', '75', '100', '150', '200', '300', '500']; + +//登录页面名字 +export const PAGE_PATH_LOGIN = '/login'; + +//404页面名字 +export const PAGE_PATH_404 = '/404'; + +export const showTableTotal = function (total) { + return `共${total}条`; +}; + +export const FLAG_NUMBER_ENUM = { + TRUE: { + value: 1, + desc: '是', + }, + FALSE: { + value: 0, + desc: '否', + }, +}; + +export const GENDER_ENUM = { + UNKNOWN: { + value: 0, + desc: '未知', + }, + MAN: { + value: 1, + desc: '男', + }, + WOMAN: { + value: 2, + desc: '女', + }, +}; + +export const USER_TYPE_ENUM = { + ADMIN_EMPLOYEE: { + value: 1, + desc: '员工', + }, + +}; + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/constants/index.js b/smart-admin-web/javascript-ant-design-vue3/src/constants/index.js new file mode 100644 index 00000000..eb600372 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/constants/index.js @@ -0,0 +1,38 @@ +/* + * 所有常量入口 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 19:58:28 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import menu from './system/menu-const'; +import goods from './business/erp/goods-const'; +import category from './business/erp/category-const'; +import { LOGIN_DEVICE_ENUM } from './system/login-device-const'; +import { FLAG_NUMBER_ENUM, GENDER_ENUM, USER_TYPE_ENUM } from './common-const'; +import { LAYOUT_ENUM } from './layout-const'; +import file from './support/file-const'; +import notice from './business/oa/notice-const'; +import loginLog from './support/login-log-const'; +import enterprise from './business/oa/enterprise-const'; +import codeGeneratorConst from './support/code-generator-const'; +import changeLogConst from './support/change-log-const'; + +export default { + FLAG_NUMBER_ENUM, + LOGIN_DEVICE_ENUM, + GENDER_ENUM, + USER_TYPE_ENUM, + LAYOUT_ENUM, + ...loginLog, + ...menu, + ...goods, + ...category, + ...file, + ...notice, + ...enterprise, + ...codeGeneratorConst, + ...changeLogConst, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/constants/layout-const.js b/smart-admin-web/javascript-ant-design-vue3/src/constants/layout-const.js new file mode 100644 index 00000000..ac2a61f4 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/constants/layout-const.js @@ -0,0 +1,19 @@ +/* + * 布局格式 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 19:58:41 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +export const LAYOUT_ENUM = { + SIDE_EXPAND: { + value: 'side-expand', + desc: '展开菜单', + }, + SIDE: { + value: 'side', + desc: '传统菜单', + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/constants/local-storage-key-const.js b/smart-admin-web/javascript-ant-design-vue3/src/constants/local-storage-key-const.js new file mode 100644 index 00000000..04fedee1 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/constants/local-storage-key-const.js @@ -0,0 +1,31 @@ +/* + * key 常量 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 19:58:50 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +/** + * key前缀 + */ +const KEY_PREFIX = 'smart_admin_'; +/** + * localStorageKey集合 + */ +export default { + // 用户信息 + USER_INFO: `${KEY_PREFIX}user_info`, + // 用户权限点 + USER_POINTS: `${KEY_PREFIX}user_points`, + // 用户的tag列表 + USER_TAG_NAV: `${KEY_PREFIX}user_tag_nav`, + // app config 配置信息 + APP_CONFIG: `${KEY_PREFIX}app_config`, + // 首页快捷入口 + HOME_QUICK_ENTRY: `${KEY_PREFIX}home_quick_entry`, + // 通知信息已读 + NOTICE_READ: `${KEY_PREFIX}notice_read`, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/constants/regular-const.js b/smart-admin-web/javascript-ant-design-vue3/src/constants/regular-const.js new file mode 100644 index 00000000..603fd833 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/constants/regular-const.js @@ -0,0 +1,28 @@ +/* + * 正则常量 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 19:59:05 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +export const regular = { + phone: /^(13|14|15|16|17|18|19)\d{9}$/, + qq: /^[1-9]\d{3,}$/, + linkUrl: + /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/, + // eslint-disable-next-line no-useless-escape + isNumber: /(^[\-1-9][1-9]*(.[1-9]+)?)$/, // 判断是否为数字,除了0 外 + isLandlineOrPhone: /^((0\d{2,3}-\d{7,8})|(1[3584]\d{9}))$/, // 验证 座机 或者手机 + account: /^[a-z0-9]{3,16}$/, // 请输入3-16位(小写字母|数字)的账号 + mobileAccount: /^[a-z0-9]{6,16}$/, // 请输入6-16位(小写字母|数字)的账号(和移动端保持一致) + accountDesc: '请输入3-16位(小写字母|数字)的账号', + pwd: /^[A-Za-z0-9._]{6,16}$/, // 请输入6-16位(大小写字母|数字|小数点|下划线)的密码 + pwdDesc: '请输入6-16位(大小写字母|数字|小数点|下划线)的密码', + delBlankSpace: /\s+/g, // 删除空格 + isPdfReg: new RegExp(/\.(pdf|PDF)/), + isElseFileReg: new RegExp(/\.(doc|docx|xls|xlsx|txt|ppt|pptx|pps|ppxs)/), + isIdentityCard: /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X|x)$/, // 验证身份证号 + isChinese: /^[\u4e00-\u9fa5]+$/gi, // 验证是否汉字 +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/constants/support/change-log-const.js b/smart-admin-web/javascript-ant-design-vue3/src/constants/support/change-log-const.js new file mode 100644 index 00000000..d7c29f50 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/constants/support/change-log-const.js @@ -0,0 +1,29 @@ +/** + * 系统更新日志 枚举 + * + * @Author: 卓大 + * @Date: 2022-09-26 14:53:50 + * @Copyright 1024创新实验室 + */ + +/** + * 更新类型:[1:特大版本功能更新;2:功能更新;3:bug修复] + */ +export const CHANGE_LOG_TYPE_ENUM = { + MAJOR_UPDATE: { + value: 1, + desc: '重大更新', + }, + FUNCTION_UPDATE: { + value: 2, + desc: '功能更新', + }, + BUG_FIX: { + value: 3, + desc: 'Bug修复', + }, +}; + +export default { + CHANGE_LOG_TYPE_ENUM, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/constants/support/code-generator-const.js b/smart-admin-web/javascript-ant-design-vue3/src/constants/support/code-generator-const.js new file mode 100644 index 00000000..d1a0d985 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/constants/support/code-generator-const.js @@ -0,0 +1,118 @@ +/* + * 代码生成 枚举 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-03 22:09:10 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +// 前端组件类型 +export const CODE_FRONT_COMPONENT_ENUM = { + INPUT: { + value: 'Input', + desc: '输入框', + }, + INPUT_NUMBER: { + value: 'InputNumber', + desc: '数字输入框', + }, + TEXTAREA: { + value: 'Textarea', + desc: '文本', + }, + BOOLEAN_SELECT: { + value: 'BooleanSelect', + desc: '布尔下拉框', + }, + ENUM_SELECT: { + value: 'SmartEnumSelect', + desc: '枚举下拉框', + }, + DICT_SELECT: { + value: 'DictSelect', + desc: '字典下拉', + }, + DATE: { + value: 'Date', + desc: '日期选择', + }, + DATE_TIME: { + value: 'DateTime', + desc: '时间选择', + }, + FILE_UPLOAD: { + value: 'FileUpload', + desc: '文件上传', + }, +}; + +// 新增、修改 页面类型 +export const CODE_INSERT_AND_UPDATE_PAGE_ENUM = { + MODAL: { + value: 'modal', + desc: '弹窗', + }, + DRAWER: { + value: 'drawer', + desc: '抽屉', + }, + PAGE: { + value: 'Page', + desc: '新页面', + }, +}; + +// 删除类型 +export const CODE_DELETE_ENUM = { + SINGLE: { + value: 'Single', + desc: '单个删除', + }, + BATCH: { + value: 'Batch', + desc: '批量删除', + }, + SINGLE_AND_BATCH: { + value: 'SingleAndBatch', + desc: '单个删除和批量删除', + }, +}; + +/** + * 查询类型 + */ +export const CODE_QUERY_FIELD_QUERY_TYPE_ENUM = { + LIKE: { + value: 'Like', + desc: '模糊查询', + }, + EQUAL: { + value: 'Equal', + desc: '等于查询', + }, + DATE_RANGE: { + value: 'DateRange', + desc: '日期范围', + }, + DATE: { + value: 'Date', + desc: '指定日期', + }, + ENUM: { + value: 'Enum', + desc: '枚举', + }, + DICT: { + value: 'Dict', + desc: '字典', + }, +}; + +export default { + CODE_FRONT_COMPONENT_ENUM, + CODE_INSERT_AND_UPDATE_PAGE_ENUM, + CODE_DELETE_ENUM, + CODE_QUERY_FIELD_QUERY_TYPE_ENUM +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/constants/support/data-tracer-const.js b/smart-admin-web/javascript-ant-design-vue3/src/constants/support/data-tracer-const.js new file mode 100644 index 00000000..f29be547 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/constants/support/data-tracer-const.js @@ -0,0 +1,29 @@ +/* + * 数据变动记录 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-03 22:09:10 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +// 业务类型 +export const DATA_TRACER_TYPE_ENUM = { + GOODS: { + value: 1, + desc: '商品', + }, + OA_NOTICE: { + value: 2, + desc: 'OA-通知公告', + }, + OA_ENTERPRISE: { + value: 3, + desc: 'OA-企业信息', + }, +}; + +export default { + DATA_TRACER_TYPE_ENUM, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/constants/support/file-const.js b/smart-admin-web/javascript-ant-design-vue3/src/constants/support/file-const.js new file mode 100644 index 00000000..70214f1a --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/constants/support/file-const.js @@ -0,0 +1,31 @@ +/* + * 文件类型 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-03 22:09:10 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +// 文件上传类型 +export const FILE_FOLDER_TYPE_ENUM = { + COMMON: { + value: 1, + desc: '通用', + }, + NOTICE: { + value: 2, + desc: '公告', + }, + HELP_DOC: { + value: 3, + desc: '帮助中心', + }, + FEEDBACK: { + value: 4, + desc: '意见反馈', + }, +}; +export default { + FILE_FOLDER_TYPE_ENUM, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/constants/support/login-log-const.js b/smart-admin-web/javascript-ant-design-vue3/src/constants/support/login-log-const.js new file mode 100644 index 00000000..e535eb70 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/constants/support/login-log-const.js @@ -0,0 +1,27 @@ +/* + * 登录日志 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-03 22:08:45 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +export const LOGIN_RESULT_ENUM = { + LOGIN_SUCCESS: { + value: 0, + desc: '登录成功', + }, + LOGIN_FAIL: { + value: 1, + desc: '登录失败', + }, + LOGIN_OUT: { + value: 2, + desc: '退出登录', + }, +}; + +export default { + LOGIN_RESULT_ENUM, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/constants/support/table-id-const.js b/smart-admin-web/javascript-ant-design-vue3/src/constants/support/table-id-const.js new file mode 100644 index 00000000..00076b34 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/constants/support/table-id-const.js @@ -0,0 +1,57 @@ +/* + * @Description: 表格id + * @Author: zhuoda + * @Date: 2022-08-21 + * @LastEditTime: 2022-08-21 + * @LastEditors: zhuoda + */ + +//system系统功能表格初始化id +let systemInitTableId = 10000; + +//support支撑功能表格初始化id +let supportInitTableId = 20000; + +//业务表格初始化id +let businessOAInitTableId = 30000; + +let businessERPInitTableId = 40000; + +export const TABLE_ID_CONST = { + /** + * 业务 + */ + BUSINESS: { + OA: { + NOTICE: businessOAInitTableId + 1, //通知公告 + ENTERPRISE: businessOAInitTableId + 2, //企业信息 + ENTERPRISE_EMPLOYEE: businessOAInitTableId + 3, //企业员工 + ENTERPRISE_BANK: businessOAInitTableId + 4, //企业银行 + ENTERPRISE_INVOICE: businessOAInitTableId + 5, //企业发票 + }, + ERP: { + GOODS: businessERPInitTableId + 1, //商品管理 + }, + }, + + /** + * 系统 + */ + SYSTEM: { + EMPLOYEE: systemInitTableId + 1, //员工 + MENU: systemInitTableId + 2, //菜单 + }, + /** + * 支撑 + */ + SUPPORT: { + CONFIG: supportInitTableId + 1, //参数配置 + DICT: supportInitTableId + 2, //字典 + SERIAL_NUMBER: supportInitTableId + 3, //单号 + OPERATE_LOG: supportInitTableId + 4, //请求监控 + HEART_BEAT: supportInitTableId + 5, //心跳 + LOGIN_LOG: supportInitTableId + 6, //登录日志 + RELOAD: supportInitTableId + 7, //reload + HELP_DOC: supportInitTableId + 8, //帮助文档 + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/constants/system/employee-const.js b/smart-admin-web/javascript-ant-design-vue3/src/constants/system/employee-const.js new file mode 100644 index 00000000..8d80d523 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/constants/system/employee-const.js @@ -0,0 +1,27 @@ +/* + * 员工 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-03 22:08:45 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +export const GENDER_ENUM = { + UNKNOWN: { + value: 0, + desc: '未知', + }, + MAN: { + value: 1, + desc: '男', + }, + WOMAN: { + value: 2, + desc: '女', + }, +} + +export default { + GENDER_ENUM, +} diff --git a/smart-admin-web/javascript-ant-design-vue3/src/constants/system/home-const.js b/smart-admin-web/javascript-ant-design-vue3/src/constants/system/home-const.js new file mode 100644 index 00000000..dfa14383 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/constants/system/home-const.js @@ -0,0 +1,15 @@ +/* + * 首页页面名词 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 19:56:43 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +//首页页面名字 +export const HOME_PAGE_NAME = 'Home'; + +//首页页面路径 +export const HOME_PAGE_PATH = '/home'; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/constants/system/login-device-const.js b/smart-admin-web/javascript-ant-design-vue3/src/constants/system/login-device-const.js new file mode 100644 index 00000000..4d312d2e --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/constants/system/login-device-const.js @@ -0,0 +1,31 @@ +/* + * 登录设备 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 19:56:56 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +export const LOGIN_DEVICE_ENUM = { + PC: { + value: 1, + desc: '电脑端', + }, + ANDROID: { + value: 2, + desc: '安卓', + }, + APPLE: { + value: 3, + desc: '苹果', + }, + H5: { + value: 3, + desc: 'H5', + }, +}; + +export default { + LOGIN_DEVICE_ENUM, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/constants/system/menu-const.js b/smart-admin-web/javascript-ant-design-vue3/src/constants/system/menu-const.js new file mode 100644 index 00000000..bead3167 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/constants/system/menu-const.js @@ -0,0 +1,47 @@ +/* + * 菜单类型 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 19:57:04 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +export const MENU_TYPE_ENUM = { + CATALOG: { + value: 1, + desc: '目录', + }, + MENU: { + value: 2, + desc: '菜单', + }, + POINTS: { + value: 3, + desc: '按钮', + }, +}; + +/** + * 权限类型 + */ +export const MENU_PERMS_TYPE_ENUM = { + SPRING_SECURITY: { + value: 1, + desc: 'Security模式', + }, + URL: { + value: 2, + desc: 'URL模式', + }, +}; + +/** + * 默认的顶级菜单id为0 + */ +export const MENU_DEFAULT_PARENT_ID = 0; + +export default { + MENU_TYPE_ENUM, + MENU_PERMS_TYPE_ENUM +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/directives/privilege.js b/smart-admin-web/javascript-ant-design-vue3/src/directives/privilege.js new file mode 100644 index 00000000..cecd4eb0 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/directives/privilege.js @@ -0,0 +1,31 @@ +/* + * 权限 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 20:00:40 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + + +// 页面内按钮过滤 +import { useUserStore } from '/@/store/modules/system/user'; +import lodash from 'lodash'; + +export function privilegeDirective(el, binding) { + // 超级管理员 + if (useUserStore().administratorFlag) { + return true; + } + // 获取功能点权限 + let userPointsList = useUserStore().getPointList; + if (!userPointsList) { + return false; + } + // 如果有权限,删除节点 + if (!lodash.some(userPointsList,['webPerms',binding.value])) { + el.parentNode.removeChild(el); + } + return true; +} diff --git a/smart-admin-web/javascript-ant-design-vue3/src/i18n/index.js b/smart-admin-web/javascript-ant-design-vue3/src/i18n/index.js new file mode 100644 index 00000000..d69c9d7f --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/i18n/index.js @@ -0,0 +1,41 @@ +/* + * 国际化入口文件 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 20:01:19 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +import en_US from './lang/en-US/index'; +import zh_CN from './lang/zh-CN/index'; +import { createI18n } from 'vue-i18n'; +import { getInitializedLanguage } from '/@/store/modules/system/app-config'; + +// 语言选择数组 +export const i18nList = [ + { + text: '简体中文', + value: 'zh_CN', + }, + { + text: 'English', + value: 'en_US', + }, +]; + +export const messages = { + zh_CN: zh_CN, + en_US: en_US, +}; + +const i18n = createI18n({ + fallbackLocale: 'zh_CN', //预设语言环境 + globalInjection: true, + legacy: false, // + locale: getInitializedLanguage(), //默认初始化的语言 + messages, // +}); + +export default i18n; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/i18n/lang/en-US/index.js b/smart-admin-web/javascript-ant-design-vue3/src/i18n/lang/en-US/index.js new file mode 100644 index 00000000..9b513a3c --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/i18n/lang/en-US/index.js @@ -0,0 +1,17 @@ +/* + * 英文国际化 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 20:00:57 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import antd from 'ant-design-vue/es/locale-provider/en_US'; +import dayjs from 'dayjs/locale/eu'; + +export default { + antdLocale: antd, + dayjsLocale: dayjs, + 'setting.title': 'Setting', +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/i18n/lang/zh-CN/index.js b/smart-admin-web/javascript-ant-design-vue3/src/i18n/lang/zh-CN/index.js new file mode 100644 index 00000000..dc624b84 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/i18n/lang/zh-CN/index.js @@ -0,0 +1,17 @@ +/* + * 中文国际化 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 20:01:06 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import antd from 'ant-design-vue/es/locale-provider/zh_CN'; +import dayjs from 'dayjs/locale/zh-cn'; + +export default { + antdLocale: antd, + dayjsLocale: dayjs, + 'setting.title': '网站设置', +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/layout/components/header-user-space/header-avatar.vue b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/header-user-space/header-avatar.vue new file mode 100644 index 00000000..b51b39a0 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/header-user-space/header-avatar.vue @@ -0,0 +1,126 @@ + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/layout/components/header-user-space/header-message.vue b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/header-user-space/header-message.vue new file mode 100644 index 00000000..7774a1fb --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/header-user-space/header-message.vue @@ -0,0 +1,116 @@ + + + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/layout/components/header-user-space/header-reset-password-modal/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/header-user-space/header-reset-password-modal/index.vue new file mode 100644 index 00000000..8f60c4c1 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/header-user-space/header-reset-password-modal/index.vue @@ -0,0 +1,85 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/layout/components/header-user-space/header-setting.vue b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/header-user-space/header-setting.vue new file mode 100644 index 00000000..4fd0eb67 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/header-user-space/header-setting.vue @@ -0,0 +1,201 @@ + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/layout/components/header-user-space/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/header-user-space/index.vue new file mode 100644 index 00000000..fc7cec5f --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/header-user-space/index.vue @@ -0,0 +1,108 @@ + + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/layout/components/menu-location-breadcrumb/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/menu-location-breadcrumb/index.vue new file mode 100644 index 00000000..d362ed70 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/menu-location-breadcrumb/index.vue @@ -0,0 +1,35 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/layout/components/page-tag/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/page-tag/index.vue new file mode 100644 index 00000000..55389d45 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/page-tag/index.vue @@ -0,0 +1,214 @@ + + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-expand-menu/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-expand-menu/index.vue new file mode 100644 index 00000000..87c3f97f --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-expand-menu/index.vue @@ -0,0 +1,51 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-expand-menu/recursion-menu.vue b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-expand-menu/recursion-menu.vue new file mode 100644 index 00000000..fb11b31f --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-expand-menu/recursion-menu.vue @@ -0,0 +1,101 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-expand-menu/sub-menu.vue b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-expand-menu/sub-menu.vue new file mode 100644 index 00000000..cafe633c --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-expand-menu/sub-menu.vue @@ -0,0 +1,46 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-expand-menu/top-menu.vue b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-expand-menu/top-menu.vue new file mode 100644 index 00000000..05b3832a --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-expand-menu/top-menu.vue @@ -0,0 +1,125 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-help-doc/components/contact-modal.vue b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-help-doc/components/contact-modal.vue new file mode 100644 index 00000000..3ac29b1b --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-help-doc/components/contact-modal.vue @@ -0,0 +1,102 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-help-doc/components/feedback-modal.vue b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-help-doc/components/feedback-modal.vue new file mode 100644 index 00000000..1ba63dc1 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-help-doc/components/feedback-modal.vue @@ -0,0 +1,85 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-help-doc/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-help-doc/index.vue new file mode 100644 index 00000000..2a961d4d --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-help-doc/index.vue @@ -0,0 +1,227 @@ + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-menu/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-menu/index.vue new file mode 100644 index 00000000..a17dd33f --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-menu/index.vue @@ -0,0 +1,118 @@ + + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-menu/recursion-menu.vue b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-menu/recursion-menu.vue new file mode 100644 index 00000000..294e4545 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-menu/recursion-menu.vue @@ -0,0 +1,104 @@ + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-menu/sub-menu.vue b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-menu/sub-menu.vue new file mode 100644 index 00000000..3cfc7b71 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-menu/sub-menu.vue @@ -0,0 +1,45 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/layout/components/smart-footer/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/smart-footer/index.vue new file mode 100644 index 00000000..1410419c --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/layout/components/smart-footer/index.vue @@ -0,0 +1,34 @@ + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/layout/smart-help-doc-layout.vue b/smart-admin-web/javascript-ant-design-vue3/src/layout/smart-help-doc-layout.vue new file mode 100644 index 00000000..cef53ab1 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/layout/smart-help-doc-layout.vue @@ -0,0 +1,302 @@ + + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/layout/smart-keep-alive.js b/smart-admin-web/javascript-ant-design-vue3/src/layout/smart-keep-alive.js new file mode 100644 index 00000000..b41754d8 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/layout/smart-keep-alive.js @@ -0,0 +1,39 @@ +/* + * keep-alive + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 20:39:54 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { computed } from 'vue'; +import { useRoute, useRouter } from 'vue-router'; +import { useUserStore } from '/@/store/modules/system/user'; + +export function smartKeepAlive() { + const route = useRoute(); + const router = useRouter(); + // 需要keep-alive的页面 + const keepAliveIncludes = computed(() => { + return useUserStore().keepAliveIncludes || []; + }); + + // ----------------------- iframe相关 ----------------------- + + // 当前路由是否为不需要缓存的iframe页面 + const iframeNotKeepAlivePageFlag = computed(() => route.meta.frameFlag && !route.meta.keepAlive); + // 打开中的tagNav + const tagNav = computed(() => useUserStore().getTagNav || []); + // 已打开的iframe列表 + const keepAliveIframePages = computed(() => { + let routes = router.getRoutes(); + return routes.filter((e) => e.meta.frameFlag && e.meta.keepAlive && tagNav.value.some((t) => t.menuName == e.name)); + }); + return { + route, + keepAliveIncludes, + iframeNotKeepAlivePageFlag, + keepAliveIframePages, + }; +} diff --git a/smart-admin-web/javascript-ant-design-vue3/src/layout/smart-layout.vue b/smart-admin-web/javascript-ant-design-vue3/src/layout/smart-layout.vue new file mode 100644 index 00000000..454d1e30 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/layout/smart-layout.vue @@ -0,0 +1,24 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/layout/smart-side-expand-layout.vue b/smart-admin-web/javascript-ant-design-vue3/src/layout/smart-side-expand-layout.vue new file mode 100644 index 00000000..1911d4aa --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/layout/smart-side-expand-layout.vue @@ -0,0 +1,237 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/layout/smart-side-layout.vue b/smart-admin-web/javascript-ant-design-vue3/src/layout/smart-side-layout.vue new file mode 100644 index 00000000..1c1d1932 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/layout/smart-side-layout.vue @@ -0,0 +1,240 @@ + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/lib/axios.js b/smart-admin-web/javascript-ant-design-vue3/src/lib/axios.js new file mode 100644 index 00000000..9e0a7e48 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/lib/axios.js @@ -0,0 +1,129 @@ +/* + * ajax请求 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 20:46:03 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { message } from 'ant-design-vue'; +import axios from 'axios'; +import { clearAllCoolies, getTokenFromCookie } from '/@/utils/cookie-util'; +import { localClear } from '/@/utils/local-util'; + +// token的消息头 +const TOKEN_HEADER = 'x-access-token'; + +// 创建axios对象 +const smartAxios = axios.create({ + baseURL: import.meta.env.VITE_APP_API_URL, +}); + +// ================================= 请求拦截器 ================================= + +smartAxios.interceptors.request.use( + (config) => { + // 在发送请求之前消息头加入token token + const token = getTokenFromCookie(); + if (token) { + config.headers[TOKEN_HEADER] = token; + } else { + delete config.headers[TOKEN_HEADER]; + } + return config; + }, + (error) => { + // 对请求错误做些什么 + return Promise.reject(error); + } +); + +// ================================= 响应拦截器 ================================= + +// 添加响应拦截器 +smartAxios.interceptors.response.use( + (response) => { + // 对响应数据做点什么 + const res = response.data; + if (res.code && res.code !== 1) { + // `token` 过期或者账号已在别处登录 + if (res.code === 30007 || res.code === 30008) { + message.error('您没有登录,请重新登录'); + clearAllCoolies(); + localClear(); + //跳转到登录页面,直接使用页面刷新的策略 + setTimeout(() => { + location.href = '/'; + }, 300); + return Promise.reject(response); + } + message.error(res.msg); + return Promise.reject(response); + } else { + return Promise.resolve(res); + } + }, + (error) => { + // 对响应错误做点什么 + if (error.message.indexOf('timeout') != -1) { + message.error('网络超时'); + } else if (error.message == 'Network Error') { + message.error('网络连接错误'); + }else if (error.message.indexOf('Request') != -1) { + message.error('网络发生错误'); + } + return Promise.reject(error); + } +); + +// ================================= 对外提供请求方法:通用请求,get, post, 下载download等 ================================= + +/** + * 通用请求封装 + * @param config + */ +export const request = (config) => { + return smartAxios.request(config); +}; + +/** + * post请求 + */ +export const postRequest = (url, data) => { + return request({ data, url, method: 'post' }); +}; + +/** + * get请求 + */ +export const getRequest = (url, params) => { + return request({ url, method: 'get', params }); +}; + +/** + * 文件下载 + */ +export const download = function (fileName, url, params) { + request({ + method: 'get', + url: url, + params: params, + responseType: 'blob', + }) + .then((data) => { + if (!data) { + return; + } + let url = window.URL.createObjectURL(new Blob([data])); + let link = document.createElement('a'); + link.style.display = 'none'; + link.href = url; + link.setAttribute('download', fileName); + document.body.appendChild(link); + link.click(); + }) + .catch((error) => { + throw error; + }); +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/lib/default-time-ranges.js b/smart-admin-web/javascript-ant-design-vue3/src/lib/default-time-ranges.js new file mode 100644 index 00000000..0b67a988 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/lib/default-time-ranges.js @@ -0,0 +1,29 @@ +/* + * 时间选择框快捷选择 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 20:49:28 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +import dayjs from 'dayjs'; + +export const defaultTimeRanges = { + 今日: [dayjs(), dayjs()], + 昨日: [dayjs().subtract(1, 'days'), dayjs().subtract(1, 'days')], + 本月: [dayjs().startOf('month'), dayjs().endOf('month')], + 上月: [dayjs().subtract(1, 'months').startOf('month'), dayjs().subtract(1, 'months').endOf('month')], + 本年度: [dayjs().startOf('year'), dayjs().endOf('year')], + 上年度: [dayjs().subtract(1, 'years').startOf('year'), dayjs().subtract(1, 'years').endOf('year')], +}; + +// 不可跨月 +export const defaultLimitMonth = { + 今日: [dayjs(), dayjs()], + 昨日: [dayjs().subtract(1, 'days'), dayjs().subtract(1, 'days')], + 本月: [dayjs().startOf('month'), dayjs().endOf('month')], + 上月: [dayjs().subtract(1, 'months').startOf('month'), dayjs().subtract(1, 'months').endOf('month')], + 下个月: [dayjs().subtract(-1, 'months').startOf('month'), dayjs().subtract(-1, 'months').endOf('month')], +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/lib/highlight-line-number.js b/smart-admin-web/javascript-ant-design-vue3/src/lib/highlight-line-number.js new file mode 100644 index 00000000..7bd21d5f --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/lib/highlight-line-number.js @@ -0,0 +1,226 @@ +// jshint multistr:true + +let TABLE_NAME = 'hljs-ln', + LINE_NAME = 'hljs-ln-line', + CODE_BLOCK_NAME = 'hljs-ln-code', + NUMBERS_BLOCK_NAME = 'hljs-ln-numbers', + NUMBER_LINE_NAME = 'hljs-ln-n', + DATA_ATTR_NAME = 'data-line-number', + BREAK_LINE_REGEXP = /\r\n|\r|\n/g; + +addStyles(); + +function addStyles() { + let css = document.createElement('style'); + css.type = 'text/css'; + css.innerHTML = format('.{0}{border-collapse:collapse}' + '.{0} td{padding:0}' + '.{1}:before{content:attr({2})}', [ + TABLE_NAME, + NUMBER_LINE_NAME, + DATA_ATTR_NAME, + ]); + document.getElementsByTagName('head')[0].appendChild(css); +} + +function initLineNumbersOnLoad(options) { + if (document.readyState === 'interactive' || document.readyState === 'complete') { + documentReady(options); + } else { + window.addEventListener('DOMContentLoaded', function () { + documentReady(options); + }); + } +} + +function documentReady(options) { + try { + let blocks = document.querySelectorAll('code.hljs,code.nohighlight'); + + for (let i in blocks) { + // eslint-disable-next-line no-prototype-builtins + if (blocks.hasOwnProperty(i)) { + if (!isPluginDisabledForBlock(blocks[i])) { + lineNumbersBlock(blocks[i], options); + } + } + } + } catch (e) { + window.console.error('LineNumbers error: ', e); + } +} + +function isPluginDisabledForBlock(element) { + return element.classList.contains('nohljsln'); +} + +function lineNumbersBlock(element, options) { + if (typeof element !== 'object') return; + element.innerHTML = lineNumbersInternal(element, options); +} + +function lineNumbersInternal(element, options) { + let internalOptions = mapOptions(element, options); + + duplicateMultilineNodes(element); + + return addLineNumbersBlockFor(element.innerHTML, internalOptions); +} + +function addLineNumbersBlockFor(inputHtml, options) { + let lines = getLines(inputHtml); + + // if last line contains only carriage return remove it + if (lines[lines.length - 1].trim() === '') { + lines.pop(); + } + + if (lines.length > 1 || options.singleLine) { + let html = ''; + + for (let i = 0, l = lines.length; i < l; i++) { + html += format( + '' + + '' + + '

' + + '' + + '' + + '{6}' + + '' + + '', + [ + LINE_NAME, + NUMBERS_BLOCK_NAME, + NUMBER_LINE_NAME, + DATA_ATTR_NAME, + CODE_BLOCK_NAME, + i + options.startFrom, + lines[i].length > 0 ? lines[i] : ' ', + ] + ); + } + + return format('{1}
', [TABLE_NAME, html]); + } + + return inputHtml; +} + +/** + * @param {HTMLElement} element Code block. + * @param {Object} options External API options. + * @returns {Object} Internal API options. + */ +function mapOptions(element, options) { + options = options || {}; + return { + singleLine: getSingleLineOption(options), + startFrom: getStartFromOption(element, options), + }; +} + +function getSingleLineOption(options) { + let defaultValue = false; + if (options.singleLine) { + return options.singleLine; + } + return defaultValue; +} + +function getStartFromOption(element, options) { + let defaultValue = 1; + let startFrom = defaultValue; + + if (isFinite(options.startFrom)) { + startFrom = options.startFrom; + } + + // can be overridden because local option is priority + let value = getAttribute(element, 'data-ln-start-from'); + if (value !== null) { + startFrom = toNumber(value, defaultValue); + } + + return startFrom; +} + +/** + * Recursive method for fix multi-line elements implementation in highlight.js + * Doing deep passage on child nodes. + * @param {HTMLElement} element + */ +function duplicateMultilineNodes(element) { + let nodes = element.childNodes; + for (let node in nodes) { + // eslint-disable-next-line no-prototype-builtins + if (nodes.hasOwnProperty(node)) { + let child = nodes[node]; + if (getLinesCount(child.textContent) > 0) { + if (child.childNodes.length > 0) { + duplicateMultilineNodes(child); + } else { + duplicateMultilineNode(child.parentNode); + } + } + } + } +} + +/** + * Method for fix multi-line elements implementation in highlight.js + * @param {HTMLElement} element + */ +function duplicateMultilineNode(element) { + let className = element.className; + + if (!/hljs-/.test(className)) return; + + let lines = getLines(element.innerHTML); + + for (var i = 0, result = ''; i < lines.length; i++) { + let lineText = lines[i].length > 0 ? lines[i] : ' '; + result += format('{1}\n', [className, lineText]); + } + + element.innerHTML = result.trim(); +} + +function getLines(text) { + if (text.length === 0) return []; + return text.split(BREAK_LINE_REGEXP); +} + +function getLinesCount(text) { + return (text.trim().match(BREAK_LINE_REGEXP) || []).length; +} + +/** + * {@link https://wcoder.github.io/notes/string-format-for-string-formating-in-javascript} + * @param {string} format + * @param {array} args + */ +function format(format, args) { + return format.replace(/\{(\d+)\}/g, function (m, n) { + return args[n] !== undefined ? args[n] : m; + }); +} + +/** + * @param {HTMLElement} element Code block. + * @param {String} attrName Attribute name. + * @returns {String} Attribute value or empty. + */ +function getAttribute(element, attrName) { + return element.hasAttribute(attrName) ? element.getAttribute(attrName) : null; +} + +/** + * @param {String} str Source string. + * @param {Number} fallback Fallback value. + * @returns Parsed number or fallback value. + */ +function toNumber(str, fallback) { + if (!str) return fallback; + let number = Number(str); + return isFinite(number) ? number : fallback; +} + +export { lineNumbersBlock, initLineNumbersOnLoad }; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/lib/smart-sentry.js b/smart-admin-web/javascript-ant-design-vue3/src/lib/smart-sentry.js new file mode 100644 index 00000000..e16979b7 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/lib/smart-sentry.js @@ -0,0 +1,12 @@ +export const smartSentry = { + /** + * sentry 主动上报 + */ + captureError: (error) => { + if (error.config && error.data && error && error.headers && error.request && error.status) { + return; + } + // Sentry.captureException(error); + console.error(error); + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/lib/smart-wartermark.js b/smart-admin-web/javascript-ant-design-vue3/src/lib/smart-wartermark.js new file mode 100644 index 00000000..f50125f1 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/lib/smart-wartermark.js @@ -0,0 +1,103 @@ +/* + * 水印 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 20:50:10 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +import dayjs from 'dayjs'; + +/** + * 水印DOM id + */ +const WATER_MARK_DOM_ID = 'smart_admin_water_mark'; +let smartAdminWaterMarkIntervalId = null; + +/** + * + * 因为modal的z-index为1000,所以为了modal的黑色背景隐藏掉,z-index为 999 + * + * @param id + * @param str + * @param watermarkId + * @returns + */ + +function setWatermark(id, str) { + //删掉之前的水印 + if (document.getElementById(WATER_MARK_DOM_ID) !== null) { + document.getElementById(WATER_MARK_DOM_ID).remove(); + } + + str = str + ' ' + dayjs().format('YYYY-MM-DD HH:mm'); + + //创建一个画布 + const can = document.createElement('canvas'); + //设置画布的长宽 + can.width = 400; + can.height = 200; + + const cans = can.getContext('2d'); + //旋转角度 + cans.rotate((-15 * Math.PI) / 150); + cans.font = '16px Microsoft JhengHei'; + //设置填充绘画的颜色、渐变或者模式 + cans.fillStyle = 'rgba(190, 190, 190, 0.30)'; + //设置文本内容的当前对齐方式 + cans.textAlign = 'left'; + //设置在绘制文本时使用的当前文本基线 + cans.textBaseline = 'Middle'; + //在画布上绘制填色的文本(输出的文本,开始绘制文本的X坐标位置,开始绘制文本的Y坐标位置) + cans.fillText(str, can.width / 8, can.height / 2); + const div = document.createElement('div'); + div.id = WATER_MARK_DOM_ID; + div.style.pointerEvents = 'none'; + div.style.top = '0px'; + div.style.left = '0px'; + div.style.position = 'absolute'; + div.style.zIndex = '999'; + div.style.width = '100%'; + div.style.height = '100%'; + div.style.background = 'url(' + can.toDataURL('image/png') + ') left top repeat'; + document.getElementById(id).appendChild(div); +} + +const watermark = { + show: function () { + document.getElementById(id).style.display = 'block'; + }, + hide: function () { + document.getElementById(id).style.display = 'hide'; + }, + // 该方法只允许调用一次 + set: function (id, str) { + // 如果存在水印,则不允许再调用了 + if (document.getElementById(WATER_MARK_DOM_ID) !== null) { + alert('已经添加过全局水印了,请不要再重复添加!'); + return; + } + + setWatermark(id, str); + + //每隔1分钟检查一次水印 + smartAdminWaterMarkIntervalId = setInterval(() => { + setWatermark(id, str); + }, 60000); + + window.onresize = () => { + setWatermark(id, str); + }; + }, + // 清空水印 + clear: function () { + document.getElementById(WATER_MARK_DOM_ID)?.remove(); + window.removeEventListener('resize', setWatermark); + if (smartAdminWaterMarkIntervalId) { + clearInterval(smartAdminWaterMarkIntervalId); + } + }, +}; +export default watermark; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/main.js b/smart-admin-web/javascript-ant-design-vue3/src/main.js new file mode 100644 index 00000000..07353d03 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/main.js @@ -0,0 +1,88 @@ +/* + * 项目启动入口方法 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 20:59:23 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import * as antIcons from '@ant-design/icons-vue'; +import Antd, { message } from 'ant-design-vue'; +import lodash from 'lodash'; +import { createApp } from 'vue'; +import JsonViewer from 'vue3-json-viewer'; +import 'vue3-json-viewer/dist/index.css'; +import App from './App.vue'; +import { smartSentry } from '/@/lib/smart-sentry'; +import { loginApi } from '/@/api/system/login/login-api'; +import constantsInfo from '/@/constants/index'; +import { privilegeDirective } from '/@/directives/privilege'; +import i18n from '/@/i18n/index'; +import privilegePlugin from '/@/plugins/privilege-plugin'; +import smartEnumPlugin from '/@/plugins/smart-enums-plugin'; +import { buildRoutes, router } from '/@/router/index'; +import { store } from '/@/store/index'; +import { useUserStore } from '/@/store/modules/system/user'; +import '/@/theme/index.less'; +import { getTokenFromCookie } from '/@/utils/cookie-util'; + + +/* + * -------------------- ※ 着重 解释说明下这里的初始化逻辑 begin ※ -------------------- + * + * 1、很多框架都是 直接调用vue方法,创建vue实例,然后挂载路由router、状态管理store等等,但是关于router这块是有问题的; + * 2、现在大部分路由都是从后台返回的,直接挂载,这个时候前端是没有从后端请求到所有路由的,所以只能写到路由拦截器里,这也很绕很不清晰; + * 比如做法流程应该是: + * 2.1)如果存在登录信息,则先ajax请求用户的所有路由,然后加载,再去创建vue实例和挂载路由 + * 2.2)如果不存在路由信息,则创建vue实例和挂载路由(此时的路由应该只有login页面,因为用户拥有哪些路由是登录之后才知道的) + * + * -------------------- ※ 着重 解释说明下这里的初始化逻辑 end ※ -------------------- + */ + +/** + * 获取用户信息和用户权限对应的路由,构建动态路由 + */ +async function getLoginInfo() { + try { + //获取登录用户信息 + const res = await loginApi.getLoginInfo(); + //构建系统的路由 + let menuRouterList = res.data.menuList.filter((e) => e.path || e.frameUrl); + buildRoutes(menuRouterList); + initVue(); + //更新用户信息到pinia + useUserStore().setUserLoginInfo(res.data); + } catch (e) { + message.error(e); + smartSentry.captureError(e); + } +} + +function initVue() { + let vueApp = createApp(App); + let app = vueApp.use(router).use(store).use(i18n).use(Antd).use(smartEnumPlugin, constantsInfo).use(privilegePlugin).use(JsonViewer); + //注入权限 + app.directive('privilege', { + mounted(el, binding) { + privilegeDirective(el, binding); + }, + }); + // 注册图标组件 + Object.keys(antIcons).forEach((key) => { + app.component(key, antIcons[key]); + }); + //全局 + app.config.globalProperties.$antIcons = antIcons; + app.config.globalProperties.$lodash = lodash; + //挂载 + app.mount('#app'); +} + +//不需要获取用户信息、用户菜单、用户菜单动态路由,直接初始化vue即可 +let token = getTokenFromCookie(); +if (!token) { + initVue(); +} else { + getLoginInfo(); +} diff --git a/smart-admin-web/javascript-ant-design-vue3/src/plugins/privilege-plugin.js b/smart-admin-web/javascript-ant-design-vue3/src/plugins/privilege-plugin.js new file mode 100644 index 00000000..da2c7870 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/plugins/privilege-plugin.js @@ -0,0 +1,29 @@ +/* + * 权限插件 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 20:50:46 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { useUserStore } from '/@/store/modules/system/user'; + +const privilege = (value) => { + // 超级管理员 + if (useUserStore().administratorFlag) { + return true; + } + // 获取功能点权限 + let userPointsList = useUserStore().getPointList; + if (!userPointsList) { + return false; + } + return userPointsList && userPointsList.includes(value); +}; + +export default { + install: (app) => { + app.config.globalProperties.$privilege = privilege; + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/plugins/smart-enums-plugin.js b/smart-admin-web/javascript-ant-design-vue3/src/plugins/smart-enums-plugin.js new file mode 100644 index 00000000..18015ef0 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/plugins/smart-enums-plugin.js @@ -0,0 +1,78 @@ +/* + * 枚举插件 + * 此插件为 1024创新实验室 自创的插件 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 20:51:03 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import _ from 'lodash'; +import { FLAG_NUMBER_ENUM } from '/@/constants/common-const'; + +export default { + install: (app, smartEnumWrapper) => { + const smartEnumPlugin = {}; + /** + * 根据枚举值获取描述 + * @param {*} constantName 枚举名 + * @param {*} value 枚举值 + * @returns + */ + smartEnumPlugin.getDescByValue = function (constantName, value) { + if (!smartEnumWrapper || !Object.prototype.hasOwnProperty.call(smartEnumWrapper, constantName)) { + return ''; + } + // boolean类型需要做特殊处理 + if (constantName === 'FLAG_NUMBER_ENUM' && !_.isUndefined(value) && typeof value === 'boolean') { + value = value ? FLAG_NUMBER_ENUM.TRUE.value : FLAG_NUMBER_ENUM.FALSE.value; + } + + let smartEnum = smartEnumWrapper[constantName]; + for (let item in smartEnum) { + if (smartEnum[item].value === value) { + return smartEnum[item].desc; + } + } + return ''; + }; + /** + * 根据枚举名获取对应的描述键值对[{value:desc}] + * @param {*} constantName 枚举名 + * @returns + */ + smartEnumPlugin.getValueDescList = function (constantName) { + if (!Object.prototype.hasOwnProperty.call(smartEnumWrapper, constantName)) { + return []; + } + const result = []; + let targetSmartEnum = smartEnumWrapper[constantName]; + for (let item in targetSmartEnum) { + result.push(targetSmartEnum[item]); + } + return result; + }; + + /** + * 根据枚举名获取对应的value描述键值对{value:desc} + * @param {*} constantName 枚举名 + * @returns + */ + smartEnumPlugin.getValueDesc = function (constantName) { + if (!Object.prototype.hasOwnProperty.call(smartEnumWrapper, constantName)) { + return {}; + } + let smartEnum = smartEnumWrapper[constantName]; + let result = {}; + for (let item in smartEnum) { + let key = smartEnum[item].value + ''; + result[key] = smartEnum[item].desc; + } + return result; + }; + + app.config.globalProperties.$smartEnumPlugin = smartEnumPlugin; + app.provide('smartEnumPlugin', smartEnumPlugin); + }, +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/router/index.js b/smart-admin-web/javascript-ant-design-vue3/src/router/index.js new file mode 100644 index 00000000..6e6bb71f --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/router/index.js @@ -0,0 +1,151 @@ +/* + * 路由 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 20:52:04 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import nProgress from 'nprogress'; +import 'nprogress/nprogress.css'; +import { nextTick } from 'vue'; +import { createRouter, createWebHashHistory } from 'vue-router'; +import { routerArray } from './routers'; +import { PAGE_PATH_404, PAGE_PATH_LOGIN } from '/@/constants/common-const'; +import { HOME_PAGE_NAME } from '/@/constants/system/home-const'; +import SmartLayout from '/@/layout/smart-layout.vue'; +import { useUserStore } from '/@/store/modules/system/user'; +import { clearAllCoolies, getTokenFromCookie } from '/@/utils/cookie-util'; +import { localClear } from '/@/utils/local-util'; + +export const router = createRouter({ + history: createWebHashHistory(), + routes: routerArray, + strict: true, + scrollBehavior: () => ({ left: 0, top: 0 }), +}); + +// ----------------------- 路由加载前 ----------------------- +router.beforeEach(async (to, from, next) => { + // 进度条开启 + nProgress.start(); + + // 公共页面,任何时候都可以跳转 + if (to.path === PAGE_PATH_404 || to.path === PAGE_PATH_LOGIN) { + next(); + return; + } + + // 验证登录 + const token = getTokenFromCookie(); + if (!token) { + clearAllCoolies(); + localClear(); + next({ path: PAGE_PATH_LOGIN }); + return; + } + + // 首页( 需要登录 ,但不需要验证权限) + if (to.path == HOME_PAGE_NAME) { + next(); + return; + } + + // 是否刷新缓存 + // 当前路由是否在tag中 存在tag中且没有传递keepAlive则刷新缓存 + let findTag = (useUserStore().tagNav || []).find((e) => e.menuName == to.name); + let reloadKeepAlive = findTag && !to.params.keepAlive; + + // 设置tagNav + useUserStore().setTagNav(to, from); + // 设置keepAlive 或 删除KeepAlive + if (to.meta.keepAlive) { + if (reloadKeepAlive) { + useUserStore().deleteKeepAliveIncludes(to.name?.toString()); + } + nextTick(() => { + useUserStore().pushKeepAliveIncludes(to.name?.toString()); + }); + } + next(); +}); + +// ----------------------- 路由加载后 ----------------------- +router.afterEach(() => { + nProgress.done(); +}); + +// ----------------------- 构建router对象 ----------------------- +export function buildRoutes(menuRouterList) { + let menuList = menuRouterList ? menuRouterList : useUserStore().getMenuRouterList || []; + /** + * 1、构建整个路由信息 + * 2、添加到路由里 + */ + const resList = []; + // 获取所有vue组件引用地址 用于构建路由 + const modules = import.meta.glob('../views/**/**.vue'); + // 获取所有vue组件 用于注入name属性 name属性用于keep-alive + const modulesEager = import.meta.globEager('../views/**/**.vue'); + + //1、构建整个路由信息 + for (const e of menuList) { + if (!e.menuId) { + continue; + } + if (!e.path) { + continue; + } + if (e.deletedFlag && e.deletedFlag === 1) { + continue; + } + let menuIdStr = e.menuId.toString(); + let route = { + path: e.path.startsWith('/') ? e.path : `/${e.path}`, + // 使用menuId作为name唯一标识 + name: menuIdStr, + meta: { + // 菜单展示 + title: e.menuName, + // 菜单图标展示 + icon: e.icon, + // 是否在菜单隐藏 + hideInMenu: !e.visibleFlag, + // 页面是否keep-alive缓存 + keepAlive: e.cacheFlag, + // 是否为外链 + frameFlag: e.frameFlag, + // 外链地址 + frameUrl: e.frameUrl, + }, + }; + + if (e.frameFlag) { + route.component = () => import('../components/framework/iframe/route-default-component.vue'); + resList.push(route); + continue; + } + + let componentPath = e.component && e.component.startsWith('/') ? e.component : '/' + e.component; + let relativePath = `../views${componentPath}`; + // eslint-disable-next-line no-prototype-builtins + if (modules.hasOwnProperty(relativePath)) { + route.component = modules[relativePath]; + // 组件注入name + let eager = modulesEager[relativePath]; + if (eager) { + eager.default.name = menuIdStr; + } + } + resList.push(route); + } + + //2、添加到路由里 + router.addRoute({ + path: '/', + meta: {}, + component: SmartLayout, + children: resList, + }); +} diff --git a/smart-admin-web/javascript-ant-design-vue3/src/router/routers.js b/smart-admin-web/javascript-ant-design-vue3/src/router/routers.js new file mode 100644 index 00000000..ecae936a --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/router/routers.js @@ -0,0 +1,14 @@ +/* + * 所有路由入口 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 20:52:26 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { homeRouters } from './system/home'; +import { loginRouters } from './system/login'; +import { helpDocRouters } from './support/help-doc'; + +export const routerArray = [...loginRouters, ...homeRouters, ...helpDocRouters]; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/router/support/help-doc.js b/smart-admin-web/javascript-ant-design-vue3/src/router/support/help-doc.js new file mode 100644 index 00000000..a36f19d8 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/router/support/help-doc.js @@ -0,0 +1,28 @@ +/* + * 帮助文档 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 20:53:19 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import SmartHelpDocLayout from '/@/layout/smart-help-doc-layout.vue'; + +export const helpDocRouters = [ + { + path: '/help-doc', + name: 'HelpDoc', + component: SmartHelpDocLayout, + meta: { + title: '帮助文档', + hideInMenu: true, + }, + children: [ + { + path: '/help-doc/detail', + component: () => import('/@/views/support/help-doc/user-view/help-doc-user-view.vue'), + }, + ], + }, +]; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/router/system/home.js b/smart-admin-web/javascript-ant-design-vue3/src/router/system/home.js new file mode 100644 index 00000000..35ce245d --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/router/system/home.js @@ -0,0 +1,39 @@ +/* + * 首页路由 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 20:51:41 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { HOME_PAGE_NAME } from '/@/constants/system/home-const'; +import { MENU_TYPE_ENUM } from '/@/constants/system/menu-const'; +import SmartLayout from '/@/layout/smart-layout.vue'; + +export const homeRouters = [ + { + path: '/', + name: '_home', + redirect: { name: HOME_PAGE_NAME }, + component: SmartLayout, + meta: { + title: '首页', + menuType: MENU_TYPE_ENUM.CATALOG.value, + icon: 'HomeOutlined', + }, + children: [ + { + path: '/home', + name: HOME_PAGE_NAME, + meta: { + title: '首页', + menuType: MENU_TYPE_ENUM.MENU.value, + icon: 'HomeOutlined', + parentMenuList: [{ name: '_home', title: '首页' }], + }, + component: () => import('/@/views/system/home/index.vue'), + }, + ], + }, +]; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/router/system/login.js b/smart-admin-web/javascript-ant-design-vue3/src/router/system/login.js new file mode 100644 index 00000000..5d2293c3 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/router/system/login.js @@ -0,0 +1,21 @@ +/* + * 登录页面 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 20:51:50 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +export const loginRouters = [ + { + path: '/login', + name: 'Login', + component: () => import('/@/views/system/login/login.vue'), + meta: { + title: '登录', + hideInMenu: true, + }, + }, +]; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/store/index.js b/smart-admin-web/javascript-ant-design-vue3/src/store/index.js new file mode 100644 index 00000000..26d1cea4 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/store/index.js @@ -0,0 +1,12 @@ +/* + * pinia 状态管理 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 20:58:09 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { createPinia } from 'pinia'; + +export const store = createPinia(); diff --git a/smart-admin-web/javascript-ant-design-vue3/src/store/modules/system/app-config.js b/smart-admin-web/javascript-ant-design-vue3/src/store/modules/system/app-config.js new file mode 100644 index 00000000..96250b04 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/store/modules/system/app-config.js @@ -0,0 +1,55 @@ +/* + * 项目的配置信息 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 20:53:47 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { defineStore } from 'pinia'; +import { appDefaultConfig } from '/@/config/app-config'; +import localStorageKeyConst from '/@/constants/local-storage-key-const'; +import { smartSentry } from '/@/lib/smart-sentry'; +import { localRead } from '/@/utils/local-util'; + +let state = { ...appDefaultConfig }; + +let appConfigStr = localRead(localStorageKeyConst.APP_CONFIG); +let language = appDefaultConfig.language; +if (appConfigStr) { + try { + state = JSON.parse(appConfigStr); + language = state.language; + } catch (e) { + smartSentry.captureError(e); + } +} + +/** + * 获取初始化的语言 + */ +export const getInitializedLanguage = function () { + return language; +}; + +export const useAppConfigStore = defineStore({ + id: 'appConfig', + state: () => ({ + // 读取config下的默认配置 + ...state, + }), + actions: { + reset() { + for (const k in appDefaultConfig) { + this[k] = appDefaultConfig[k]; + } + }, + showHelpDoc() { + this.helpDocFlag = true; + }, + hideHelpDoc() { + this.helpDocFlag = false; + }, + }, +}); diff --git a/smart-admin-web/javascript-ant-design-vue3/src/store/modules/system/role.js b/smart-admin-web/javascript-ant-design-vue3/src/store/modules/system/role.js new file mode 100644 index 00000000..31daebac --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/store/modules/system/role.js @@ -0,0 +1,95 @@ +/* + * 角色 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 20:54:39 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import _ from 'lodash'; +import { defineStore } from 'pinia'; + +export const useRoleStore = defineStore({ + id: 'role', + state: () => ({ + checkedData: [], + treeMap: new Map(), + }), + + actions: { + // 初始化权限树选中数据 + initCheckedData(data) { + this.checkedData = [...new Set(data)]; + }, + // 选中 + addCheckedData(data) { + if (this.checkedData.some((e) => e == data)) { + return; + } + this.checkedData.push(data); + }, + // 选中本级以及子级 + addCheckedDataAndChildren(data) { + let findIndex = this.checkedData.findIndex((val) => val == data.menuId); + if (data.menuId && findIndex == -1) { + this.addCheckedData(data.menuId); + } + if (data.children) { + data.children.forEach((item) => { + this.addCheckedDataAndChildren(item); + }); + } + }, + // 取消选中 + deleteCheckedData(index) { + this.checkedData.splice(index, 1); + }, + // 取消选中本级以及子级 + deleteCheckedDataAndChildren(data) { + let findIndex = this.checkedData.findIndex((val) => val == data.menuId); + if (findIndex != -1) { + this.deleteCheckedData(findIndex); + } + if (data.children) { + data.children.forEach((item) => { + this.deleteCheckedDataAndChildren(item); + }); + } + }, + // 初始化权限树对象 + initTreeMap(tree) { + for (let treeElement of tree) { + if (!treeElement.menuId) { + continue; + } + this.treeMap.set(treeElement.menuId, treeElement); + if (treeElement.children && !_.isEmpty(treeElement.children)) { + this.initTreeMap(treeElement.children); + } + } + }, + // 选中上一级 + selectUpperLevel(module) { + // 拿到上级key + let parentId = module.parentId; + if (!parentId) { + return; + } + // 从权限树对象 获取该父级对象 + let parentModule = this.treeMap.get(parentId); + if (!parentModule) { + return; + } + // 选中父级 + let parentIndex = this.checkedData.findIndex((e) => parentModule?.menuId === e); + if (parentModule.menuId && parentIndex == -1) { + this.addCheckedData(parentModule.menuId); + } + // 如果上级还有上级 则进行递归 + if (parentModule.parentId) { + this.selectUpperLevel(parentModule); + } + }, + }, +}); diff --git a/smart-admin-web/javascript-ant-design-vue3/src/store/modules/system/spin.js b/smart-admin-web/javascript-ant-design-vue3/src/store/modules/system/spin.js new file mode 100644 index 00000000..fb17ca8b --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/store/modules/system/spin.js @@ -0,0 +1,30 @@ +/* + * loading + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 20:54:50 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { defineStore } from 'pinia'; + +export const useSpinStore = defineStore({ + id: 'spin', + state: () => ({ + loading: false, + }), + + actions: { + hide() { + this.loading = false; + let spins = document.querySelector('.ant-spin-nested-loading'); + spins.style.zIndex = 999; + }, + show() { + this.loading = true; + let spins = document.querySelector('.ant-spin-nested-loading'); + spins.style.zIndex = 1001; + }, + }, +}); diff --git a/smart-admin-web/javascript-ant-design-vue3/src/store/modules/system/user.js b/smart-admin-web/javascript-ant-design-vue3/src/store/modules/system/user.js new file mode 100644 index 00000000..d473b1a7 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/store/modules/system/user.js @@ -0,0 +1,306 @@ +/* + * 登录用户 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 20:55:09 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import _ from 'lodash'; +import { defineStore } from 'pinia'; +import localKey from '/@/constants/local-storage-key-const'; +import { HOME_PAGE_NAME } from '/@/constants/system/home-const'; +import { MENU_TYPE_ENUM } from '/@/constants/system/menu-const'; +import { getTokenFromCookie } from '/@/utils/cookie-util'; +import { localClear, localRead, localSave } from '/@/utils/local-util'; + +export const useUserStore = defineStore({ + id: 'userStore', + state: () => ({ + token: '', + //员工id + employeeId: '', + //登录名 + loginName: '', + //姓名 + actualName: '', + //手机号 + phone: '', + //部门id + departmentId: '', + //部门名词 + departmentName: '', + //是否为超级管理员 + administratorFlag: true, + //上次登录ip + lastLoginIp: '', + //上次登录 设备 + lastLoginUserAgent: '', + //上次登录时间 + lastLoginTime: '', + //左侧菜单树形结构 + menuTree: [], + //存在页面路由的菜单集合 + menuRouterList: [], + //是否完成menuRouter初始化 + menuRouterInitFlag: false, + //父类菜单集合 + menuParentIdListMap: new Map(), + // 功能点集合 + pointsList: [], + // 标签页 + tagNav: [], + // 缓存 + keepAliveIncludes: [], + }), + getters: { + getToken(state) { + if (state.token) { + return state.token; + } + return getTokenFromCookie(); + }, + //是否初始化了 路由 + getMenuRouterInitFlag(state) { + return state.menuRouterInitFlag; + }, + //菜单树 + getMenuTree(state) { + return state.menuTree; + }, + //菜单的路由 + getMenuRouterList(state) { + return state.menuRouterList; + }, + //菜单的父级id + getMenuParentIdListMap(state) { + return state.menuParentIdListMap; + }, + //功能点 + getPointList(state) { + if (_.isEmpty(state.pointsList)) { + let localUserPoints = localRead(localKey.USER_POINTS) || ''; + state.pointsList = localUserPoints ? JSON.parse(localUserPoints) : []; + } + return state.pointsList; + }, + //标签页 + getTagNav(state) { + if (_.isEmpty(state.tagNav)) { + let localTagNav = localRead(localKey.USER_TAG_NAV) || ''; + state.tagNav = localTagNav ? JSON.parse(localTagNav) : []; + } + let tagNavList = _.cloneDeep(state.tagNav) || []; + tagNavList.unshift({ + menuName: HOME_PAGE_NAME, + menuTitle: '首页', + }); + return tagNavList; + }, + }, + + actions: { + logout() { + this.token = ''; + this.menuList = []; + this.tagNav = []; + this.userInfo = {}; + localClear(); + }, + //设置登录信息 + setUserLoginInfo(data) { + // 用户基本信息 + this.token = data.token; + this.employeeId = data.employeeId; + this.loginName = data.loginName; + this.actualName = data.actualName; + this.phone = data.phone; + this.departmentId = data.departmentId; + this.departmentName = data.departmentName; + this.administratorFlag = data.administratorFlag; + this.lastLoginIp = data.lastLoginIp; + this.lastLoginUserAgent = data.lastLoginUserAgent; + this.lastLoginTime = data.lastLoginTime; + + //菜单权限 + this.menuTree = buildMenuTree(data.menuList); + + //拥有路由的菜单 + this.menuRouterList = data.menuList.filter((e) => e.path || e.frameUrl); + + //父级菜单集合 + this.menuParentIdListMap = buildMenuParentIdListMap(this.menuTree); + + //功能点 + this.pointsList = data.menuList.filter((menu) => menu.menuType === MENU_TYPE_ENUM.POINTS.value && menu.visibleFlag && !menu.disabledFlag); + }, + setToken(token) { + this.token = token; + }, + //设置标签页 + setTagNav(route, from) { + if (_.isEmpty(this.getTagNav)) this.tagNav = []; + // name唯一标识 + let name = route.name; + if (!name || name == HOME_PAGE_NAME) { + return; + } + let findTag = (this.tagNav || []).find((e) => e.menuName == name); + if (findTag) { + // @ts-ignore + findTag.fromMenuName = from.name; + findTag.fromMenuQuery = from.query; + } else { + // @ts-ignore + this.tagNav.push({ + // @ts-ignore + menuName: name, + // @ts-ignore + menuTitle: route.meta.title, + menuQuery: route.query, + // @ts-ignore + fromMenuName: from.name, + fromMenuQuery: from.query, + }); + } + localSave(localKey.USER_TAG_NAV, JSON.stringify(this.tagNav)); + }, + //关闭标签页 + closeTagNav(menuName, closeAll) { + if (_.isEmpty(this.getTagNav)) return; + if (closeAll && !menuName) { + this.tagNav = []; + this.clearKeepAliveIncludes(); + } else { + let findIndex = (this.tagNav || []).findIndex((e) => e.menuName == menuName); + if (closeAll) { + if (findIndex == -1) { + this.tagNav = []; + this.clearKeepAliveIncludes(); + } else { + let tagNavElement = (this.tagNav || [])[findIndex]; + this.tagNav = [tagNavElement]; + this.clearKeepAliveIncludes(tagNavElement.menuName); + } + } else { + (this.tagNav || []).splice(findIndex, 1); + this.deleteKeepAliveIncludes(menuName); + } + } + localSave(localKey.USER_TAG_NAV, JSON.stringify(this.tagNav)); + }, + //关闭页面 + closePage(route, router, path) { + if (!this.getTagNav || _.isEmpty(this.getTagNav)) return; + if (path) { + router.push({ path }); + } else { + // 寻找tagNav + let index = this.getTagNav.findIndex((e) => e.menuName == route.name); + if (index == -1) { + router.push({ name: HOME_PAGE_NAME }); + } else { + let tagNav = this.getTagNav[index]; + if (tagNav.fromMenuName && this.getTagNav.some((e) => e.menuName == tagNav.fromMenuName)) { + router.push({ name: tagNav.fromMenuName, query: tagNav.fromMenuQuery }); + } else { + // 查询左侧tag + let leftTagNav = this.getTagNav[index - 1]; + router.push({ name: leftTagNav.menuName, query: leftTagNav.menuQuery }); + } + } + } + this.closeTagNav(route.name, false); + }, + // 加入缓存 + pushKeepAliveIncludes(val) { + if (!val) { + return; + } + if (!this.keepAliveIncludes) { + this.keepAliveIncludes = []; + } + if (this.keepAliveIncludes.length < 30) { + let number = this.keepAliveIncludes.findIndex((e) => e === val); + if (number === -1) { + this.keepAliveIncludes.push(val); + } + } + }, + // 删除缓存 + deleteKeepAliveIncludes(val) { + if (!this.keepAliveIncludes || !val) { + return; + } + let number = this.keepAliveIncludes.findIndex((e) => e === val); + if (number !== -1) { + this.keepAliveIncludes.splice(number, 1); + } + }, + // 清空缓存 + clearKeepAliveIncludes(val) { + if (!val || !this.keepAliveIncludes?.includes(val)) { + this.keepAliveIncludes = []; + return; + } + this.keepAliveIncludes = [val]; + }, + }, +}); + +/** + * 构建菜单父级集合 + */ +function buildMenuParentIdListMap(menuTree) { + let menuParentIdListMap = new Map(); + recursiveBuildMenuParentIdListMap(menuTree, [], menuParentIdListMap); + return menuParentIdListMap; +} + +function recursiveBuildMenuParentIdListMap(menuList, parentMenuList, menuParentIdListMap) { + for (const e of menuList) { + // 顶级parentMenuList清空 + if (e.parentId == 0) { + parentMenuList = []; + } + let menuIdStr = e.menuId.toString(); + let cloneParentMenuList = _.cloneDeep(parentMenuList); + if (!_.isEmpty(e.children) && e.menuName) { + // 递归 + cloneParentMenuList.push({ name: menuIdStr, title: e.menuName }); + recursiveBuildMenuParentIdListMap(e.children, cloneParentMenuList, menuParentIdListMap); + } else { + menuParentIdListMap.set(menuIdStr, cloneParentMenuList); + } + } +} + +/** + * 构建菜单树 + * + * @param menuList + * @returns + */ +function buildMenuTree(menuList) { + //1 获取所有 有效的 目录和菜单 + let catalogAndMenuList = menuList.filter((menu) => menu.menuType !== MENU_TYPE_ENUM.POINTS.value && menu.visibleFlag && !menu.disabledFlag); + + //2 获取顶级目录 + let topCatalogList = catalogAndMenuList.filter((menu) => menu.parentId === 0); + for (const topCatalog of topCatalogList) { + buildMenuChildren(topCatalog, catalogAndMenuList); + } + return topCatalogList; +} + +function buildMenuChildren(menu, allMenuList) { + let children = allMenuList.filter((e) => e.parentId === menu.menuId); + if (children.length === 0) { + return; + } + menu.children = children; + for (const item of children) { + buildMenuChildren(item, allMenuList); + } +} diff --git a/smart-admin-web/javascript-ant-design-vue3/src/theme/index.less b/smart-admin-web/javascript-ant-design-vue3/src/theme/index.less new file mode 100644 index 00000000..f771961e --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/theme/index.less @@ -0,0 +1,152 @@ +/* + * 默认样式的修改 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-12 14:41:59 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +@import '~ant-design-vue/dist/antd.less'; +@import './smart-admin.less'; + +@gray-1: #ffffff; +@gray-2: #fafafa; +@gray-3: #f5f5f5; +@gray-4: #f0f0f0; +@gray-5: #d9d9d9; +@gray-6: #bfbfbf; +@gray-7: #8c8c8c; +@gray-8: #595959; +@gray-9: #434343; +@gray-10: #262626; +@gray-11: #1f1f1f; +@gray-12: #141414; +@gray-13: #000000; + +@title-color: @heading-color; + +@layout-bg-color: @layout-body-background; +@base-bg-color: @body-background; +@hover-bg-color: rgba(0, 0, 0, 0.025); +@border-color: @border-color-split; + +@hover-bg-color-light: @hover-bg-color; +@hover-bg-color-dark: @primary-7; +@hover-bg-color-night: rgba(255, 255, 255, 0.025); +@header-bg-color-dark: @layout-header-background; + +@header-light-bg-hover-color: #f6f6f6; +@header-height: 80px; +@header-user-height: 40px; +@page-tag-height: 40px; + +@shadow-down: @shadow-1-down; +@shadow-up: @shadow-1-up; +@shadow-left: @shadow-1-left; +@shadow-right: @shadow-1-right; + +@theme-list: light, dark, night; + +/********************************** 基础样式 **********************************/ +* { + margin: 0; + padding: 0; + box-sizing: border-box; + outline: none !important; +} + +html, +body { + margin: 0; + padding: 0; + width: 100%; + height: 100%; + -webkit-font-smoothing: antialiased; + -webkit-tap-highlight-color: transparent; + background-color: #f8f8f8; + font-size: 14px; + position: relative; +} + +#app { + width: 100%; + height: 100%; +} + +/********************************** ant design spin **********************************/ +.ant-spin-blur{ + opacity: 0.2; +} + +/********************************** ant design table **********************************/ +.ant-table-tbody :deep(.smart-table-striped) { + background-color: #fafafa; +} + +/********************************** ant design form **********************************/ +.ant-form-inline .ant-form-item-with-help { + margin-bottom: 0px !important; +} + +/********************************** ant design spin **********************************/ +.ant-spin-nested-loading { + width: 100%; + height: 100%; +} + +.ant-spin-container { + width: 100%; + height: 100%; +} + +/********************************** 富文本HTML样式 **********************************/ +.html-content { + /* table 样式 */ + table { + border-top: 1px solid #ccc; + border-left: 1px solid #ccc; + } + table td, + table th { + border-bottom: 1px solid #ccc; + border-right: 1px solid #ccc; + padding: 3px 5px; + } + table th { + border-bottom: 2px solid #ccc; + text-align: center; + } + + /* blockquote 样式 */ + blockquote { + display: block; + border-left: 8px solid #d0e5f2; + padding: 5px 10px; + margin: 10px 0; + line-height: 1.4; + font-size: 100%; + background-color: #f1f1f1; + } + + /* code 样式 */ + code { + display: inline-block; + *display: inline; + *zoom: 1; + background-color: #f1f1f1; + border-radius: 3px; + padding: 3px 5px; + margin: 0 3px; + } + pre code { + display: block; + } + + /* ul ol 样式 */ + ul, + ol { + margin: 10px 0 10px 20px; + } +} diff --git a/smart-admin-web/javascript-ant-design-vue3/src/theme/smart-admin.less b/smart-admin-web/javascript-ant-design-vue3/src/theme/smart-admin.less new file mode 100644 index 00000000..18f9fc74 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/theme/smart-admin.less @@ -0,0 +1,112 @@ +/* + * SmartAdmin 独有的样式 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-12 14:43:01 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +/********************************** 滚动条 **********************************/ +::-webkit-scrollbar { + width: 2px; + background-color: #f5f5f5; +} +::-webkit-scrollbar-thumb { + background-color: #cdcdcd; +} + +::-webkit-scrollbar-track { + -webkit-box-shadow: inset 0 0 6px rgb(0 0 0 / 30%); + background-color: #f5f5f5; + border-radius: 1px; +} + +/********************************** 宽度 **********************************/ +.smart-width-100 { + width: 100%; +} + +/********************************** 左间距 **********************************/ +.smart-margin-left5 { + margin-left: 5px; +} + +.smart-margin-left10 { + margin-left: 10px; +} + +.smart-margin-left15 { + margin-left: 15px; +} + +.smart-margin-left20 { + margin-left: 20px; +} + + +/******************************** 上间距 ********************************/ +.smart-margin-top5 { + margin-top: 5px; +} + +.smart-margin-top10 { + margin-top: 10px; +} + +/******************************** 下间距 ********************************/ +.smart-margin-bottom5 { + margin-bottom: 5px; +} + +.smart-margin-bottom10 { + margin-bottom: 10px; +} +/******************************** 查询表格样式 ********************************/ +.smart-query-form { + background-color: #ffffff; + padding: 5px 10px; + margin-bottom: 10px; +} + +.smart-table-operate { + .ant-btn { + padding: 0px 3px !important; + } +} + +.smart-table-column-operate { + float: right; +} + +.smart-query-form-row:not(:first-child) { + margin-top: 8px; +} + +.smart-query-form-row .smart-query-form-item { + margin-right: 8px; + margin-top: 5px; + margin-bottom: 5px; +} + +.smart-query-table-page { + margin-top: 10px; + display: flex; + justify-content: flex-end; +} + +.smart-table-btn-block { + margin-bottom: 15px; + display: flex; + flex-direction: row; + justify-content: space-between; + .smart-table-operate-block { + .ant-btn { + margin-right: 12px; + } + } + .smart-table-setting-block { + float: right; + } +} diff --git a/smart-admin-web/javascript-ant-design-vue3/src/utils/cookie-util.js b/smart-admin-web/javascript-ant-design-vue3/src/utils/cookie-util.js new file mode 100644 index 00000000..dc432bf3 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/utils/cookie-util.js @@ -0,0 +1,29 @@ +/* + * cookie相关操作 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 20:58:49 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import Cookies from 'js-cookie'; + +export const COOKIE_TOKEN_KEY = 'user_token'; + +export const clearAllCoolies = () => { + Cookies.remove(COOKIE_TOKEN_KEY); +}; + +export const getTokenFromCookie = () => { + return Cookies.get(COOKIE_TOKEN_KEY); +}; + +/** + * 一年后cookie过期 + * + * @param token + */ +export const saveTokenToCookie = (token) => { + Cookies.set(COOKIE_TOKEN_KEY, token, { expires: 365 }); +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/utils/local-util.js b/smart-admin-web/javascript-ant-design-vue3/src/utils/local-util.js new file mode 100644 index 00000000..8a0c865a --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/utils/local-util.js @@ -0,0 +1,20 @@ +/* + * localStorage 相关操作 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 20:58:49 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +export const localSave = (key, value) => { + localStorage.setItem(key, value); +}; + +export const localRead = (key) => { + return localStorage.getItem(key) || ''; +}; + +export const localClear = () => { + localStorage.clear(); +}; diff --git a/smart-admin-web/javascript-ant-design-vue3/src/utils/str-util.js b/smart-admin-web/javascript-ant-design-vue3/src/utils/str-util.js new file mode 100644 index 00000000..faf01566 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/utils/str-util.js @@ -0,0 +1,46 @@ +/* + * 字符串 相关操作 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-06 20:58:49 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +/** + * 转为 小写中划线 + */ +export function convertLowerHyphen(str) { + if (!str) { + return ''; + } + + return str + .replace(/([A-Z])/g, '-$1') + .toLowerCase() + .substring(1); +} +/** + * 转为驼峰 + */ +export function convertUpperCamel(str) { + if (!str) { + return ''; + } + + str = str.replace(/_(\w)/g, (_, letter) => letter.toUpperCase()); + // 首字母大写 + return str[0].toUpperCase() + str.substring(1); +} + +/** + * 转为驼峰 + */ +export function convertLowerCamel(str) { + if (!str) { + return ''; + } + + return str.replace(/_(\w)/g, (_, letter) => letter.toUpperCase()); +} diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/business/erp/catalog/components/category-form-modal.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/business/erp/catalog/components/category-form-modal.vue new file mode 100644 index 00000000..b2696b1d --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/business/erp/catalog/components/category-form-modal.vue @@ -0,0 +1,96 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/business/erp/catalog/components/category-tree-table.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/business/erp/catalog/components/category-tree-table.vue new file mode 100644 index 00000000..bf37b2c0 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/business/erp/catalog/components/category-tree-table.vue @@ -0,0 +1,163 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/business/erp/catalog/custom-catalog.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/business/erp/catalog/custom-catalog.vue new file mode 100644 index 00000000..69cf8805 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/business/erp/catalog/custom-catalog.vue @@ -0,0 +1,18 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/business/erp/catalog/goods-catalog.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/business/erp/catalog/goods-catalog.vue new file mode 100644 index 00000000..2d521619 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/business/erp/catalog/goods-catalog.vue @@ -0,0 +1,18 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/business/erp/goods/components/goods-form-modal.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/business/erp/goods/components/goods-form-modal.vue new file mode 100644 index 00000000..69d00602 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/business/erp/goods/components/goods-form-modal.vue @@ -0,0 +1,150 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/business/erp/goods/goods-list.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/business/erp/goods/goods-list.vue new file mode 100644 index 00000000..366aade5 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/business/erp/goods/goods-list.vue @@ -0,0 +1,309 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-bank-list.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-bank-list.vue new file mode 100644 index 00000000..2c9394da --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-bank-list.vue @@ -0,0 +1,239 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-bank-operate-modal.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-bank-operate-modal.vue new file mode 100644 index 00000000..b1597ca6 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-bank-operate-modal.vue @@ -0,0 +1,133 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-employee-list.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-employee-list.vue new file mode 100644 index 00000000..9f898be1 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-employee-list.vue @@ -0,0 +1,275 @@ + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-invoice-list.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-invoice-list.vue new file mode 100644 index 00000000..12e83fb0 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-invoice-list.vue @@ -0,0 +1,243 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-invoice-operate-modal.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-invoice-operate-modal.vue new file mode 100644 index 00000000..45b89447 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-invoice-operate-modal.vue @@ -0,0 +1,127 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-operate-modal.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-operate-modal.vue new file mode 100644 index 00000000..64f0e2d6 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-operate-modal.vue @@ -0,0 +1,243 @@ + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/enterprise-detail.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/enterprise-detail.vue new file mode 100644 index 00000000..cdfdd04f --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/enterprise-detail.vue @@ -0,0 +1,130 @@ + + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/enterprise-list.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/enterprise-list.vue new file mode 100644 index 00000000..acae9a29 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/enterprise-list.vue @@ -0,0 +1,264 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/components/notice-form-drawer.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/components/notice-form-drawer.vue new file mode 100644 index 00000000..dda6d2ea --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/components/notice-form-drawer.vue @@ -0,0 +1,307 @@ + + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/components/notice-form-visible-modal.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/components/notice-form-visible-modal.vue new file mode 100644 index 00000000..e29c9807 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/components/notice-form-visible-modal.vue @@ -0,0 +1,71 @@ + + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/components/notice-form-visible-transfer-department.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/components/notice-form-visible-transfer-department.vue new file mode 100644 index 00000000..aad98e95 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/components/notice-form-visible-transfer-department.vue @@ -0,0 +1,204 @@ + + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/components/notice-form-visible-transfer-employee.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/components/notice-form-visible-transfer-employee.vue new file mode 100644 index 00000000..b5220958 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/components/notice-form-visible-transfer-employee.vue @@ -0,0 +1,252 @@ + + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/components/notice-view-record-list.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/components/notice-view-record-list.vue new file mode 100644 index 00000000..17324914 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/components/notice-view-record-list.vue @@ -0,0 +1,161 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/notice-detail.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/notice-detail.vue new file mode 100644 index 00000000..5ab9e6ca --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/notice-detail.vue @@ -0,0 +1,144 @@ + + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/notice-employee-detail.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/notice-employee-detail.vue new file mode 100644 index 00000000..6bbda108 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/notice-employee-detail.vue @@ -0,0 +1,153 @@ + + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/notice-employee-list.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/notice-employee-list.vue new file mode 100644 index 00000000..4bd6542e --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/notice-employee-list.vue @@ -0,0 +1,239 @@ + + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/notice-list.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/notice-list.vue new file mode 100644 index 00000000..dbe27ba9 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/notice-list.vue @@ -0,0 +1,352 @@ + + + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/cache/cache-list.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/cache/cache-list.vue new file mode 100644 index 00000000..5302e205 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/cache/cache-list.vue @@ -0,0 +1,112 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/change-log/change-log-form.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/change-log/change-log-form.vue new file mode 100644 index 00000000..b5e6f496 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/change-log/change-log-form.vue @@ -0,0 +1,138 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/change-log/change-log-list.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/change-log/change-log-list.vue new file mode 100644 index 00000000..e3bb2a6e --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/change-log/change-log-list.vue @@ -0,0 +1,317 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/change-log/change-log-modal.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/change-log/change-log-modal.vue new file mode 100644 index 00000000..a5053a8a --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/change-log/change-log-modal.vue @@ -0,0 +1,44 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/code-generator-list.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/code-generator-list.vue new file mode 100644 index 00000000..be4f0d49 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/code-generator-list.vue @@ -0,0 +1,178 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/code-generator-util.js b/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/code-generator-util.js new file mode 100644 index 00000000..9c58b7c6 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/code-generator-util.js @@ -0,0 +1,171 @@ +import { convertUpperCamel } from '/@/utils/str-util'; + +// -------------------------------- java 类型 -------------------------------- +export const JavaTypeMap = new Map(); +JavaTypeMap.set('int', 'Integer'); +JavaTypeMap.set('tinyint', 'Integer'); +JavaTypeMap.set('smallint', 'Integer'); +JavaTypeMap.set('integer', 'Integer'); +JavaTypeMap.set('year', 'Integer'); +JavaTypeMap.set('bigint', 'Long'); +JavaTypeMap.set('float', 'BigDecimal'); +JavaTypeMap.set('double', 'BigDecimal'); +JavaTypeMap.set('decimal', 'BigDecimal'); +JavaTypeMap.set('char', 'String'); +JavaTypeMap.set('varchar', 'String'); +JavaTypeMap.set('tinytext', 'String'); +JavaTypeMap.set('text', 'String'); +JavaTypeMap.set('longtext', 'String'); +JavaTypeMap.set('blob', 'String'); +JavaTypeMap.set('date', 'LocalDate'); +JavaTypeMap.set('datetime', 'LocalDateTime'); + +export const JavaTypeList = [ + 'Boolean', // + 'Integer', // + 'Long', // + 'Double', // + 'String', // + 'BigDecimal', // + 'LocalDate', // + 'LocalDateTime', // +]; + +export function getJavaType(dataType) { + return JavaTypeMap.get(dataType); +} + +// -------------------------------- js 类型 -------------------------------- +export const JsTypeMap = new Map(); +JsTypeMap.set('int', 'Number'); +JsTypeMap.set('tinyint', 'Number'); +JsTypeMap.set('smallint', 'Number'); +JsTypeMap.set('integer', 'Number'); +JsTypeMap.set('year', 'Number'); +JsTypeMap.set('bigint', 'Number'); +JsTypeMap.set('float', 'Number'); +JsTypeMap.set('double', 'Number'); +JsTypeMap.set('decimal', 'Number'); +JsTypeMap.set('char', 'String'); +JsTypeMap.set('varchar', 'String'); +JsTypeMap.set('tinytext', 'String'); +JsTypeMap.set('text', 'String'); +JsTypeMap.set('longtext', 'String'); +JsTypeMap.set('blob', 'String'); +JsTypeMap.set('date', 'Date'); +JsTypeMap.set('datetime', 'Date'); + +export const JsTypeList = [ + 'Number', // + 'String', // + 'Date', // + 'Boolean', // + 'String', // +]; + +export function getJsType(dataType) { + return JsTypeMap.get(dataType); +} + +// -------------------------------- 前端组件 -------------------------------- + +export const FrontComponentMap = new Map(); +FrontComponentMap.set('int', 'InputNumber'); +FrontComponentMap.set('tinyint', 'BooleanSelect'); +FrontComponentMap.set('smallint', 'InputNumber'); +FrontComponentMap.set('integer', 'InputNumber'); +FrontComponentMap.set('year', 'Date'); +FrontComponentMap.set('bigint', 'InputNumber'); +FrontComponentMap.set('float', 'InputNumber'); +FrontComponentMap.set('double', 'InputNumber'); +FrontComponentMap.set('decimal', 'InputNumber'); +FrontComponentMap.set('char', 'Input'); +FrontComponentMap.set('varchar', 'Input'); +FrontComponentMap.set('tinytext', 'Input'); +FrontComponentMap.set('text', 'Textarea'); +FrontComponentMap.set('longtext', 'Textarea'); +FrontComponentMap.set('blob', 'Upload'); +FrontComponentMap.set('date', 'Date'); +FrontComponentMap.set('datetime', 'DateTime'); + +export function getFrontComponent(dataType) { + return FrontComponentMap.get(dataType); +} + +// -------------------------------- 前端文件 -------------------------------- + +export const LANGUAGE_LIST = [ + 'js', // + 'ts', // + 'java', // +]; + +export const JS_FILE_LIST = [ + 'js/list.vue', // + 'js/form.vue', // + 'js/api.js', // + 'js/const.js', // +]; + +export const TS_FILE_LIST = [ + 'ts/list.vue', // + 'ts/form.vue', // + 'ts/api.js', // + 'ts/const.js', // +]; + + +// -------------------------------- 后端文件 -------------------------------- + +export const JAVA_DOMAIN_FILE_LIST = [ + 'Entity.java', // + 'AddForm.java', // + 'UpdateForm.java', // + 'QueryForm.java', // + 'VO.java', // +]; + +export const JAVA_FILE_LIST = [ + 'Controller.java', // + 'Service.java', // + 'Manager.java', // + 'Dao.java', // + 'Mapper.xml', // + ...JAVA_DOMAIN_FILE_LIST, +]; + +// -------------------------------- 枚举enum -------------------------------- + +export function convertJavaEnumName(moduleName, columnName) { + return moduleName + convertUpperCamel(columnName) + 'Enum'; +} + +/** + * 检测是否有枚举 + */ +export function checkExistEnum(comment) { + if (!comment) { + return false; + } + + // 检测是否存在 [ ] 或者 【 】 + let leftBracketIndex = comment.indexOf('['); + if (leftBracketIndex === -1) { + leftBracketIndex = comment.indexOf('【'); + } + + let rightBracketIndex = comment.indexOf(']'); + if (rightBracketIndex === -1) { + leftBracketIndex = comment.indexOf('】'); + } + + if (leftBracketIndex === -1 || rightBracketIndex === -1) { + return false; + } + + if (comment.indexOf(':') === -1) { + return false; + } + + return true; +} diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-basic.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-basic.vue new file mode 100644 index 00000000..2310079f --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-basic.vue @@ -0,0 +1,275 @@ + + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-delete.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-delete.vue new file mode 100644 index 00000000..7eeb3d24 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-delete.vue @@ -0,0 +1,128 @@ + + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-field.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-field.vue new file mode 100644 index 00000000..424d637f --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-field.vue @@ -0,0 +1,222 @@ + + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-insert-and-update.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-insert-and-update.vue new file mode 100644 index 00000000..3eda86ea --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-insert-and-update.vue @@ -0,0 +1,293 @@ + + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-query-field.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-query-field.vue new file mode 100644 index 00000000..02ed0ab2 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-query-field.vue @@ -0,0 +1,257 @@ + + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-table-field.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-table-field.vue new file mode 100644 index 00000000..4209cd9a --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-table-field.vue @@ -0,0 +1,150 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form.vue new file mode 100644 index 00000000..d8924085 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form.vue @@ -0,0 +1,225 @@ + + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/preview/code-generator-preview-modal.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/preview/code-generator-preview-modal.vue new file mode 100644 index 00000000..d025e728 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/preview/code-generator-preview-modal.vue @@ -0,0 +1,202 @@ + + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/config/config-form-modal.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/config/config-form-modal.vue new file mode 100644 index 00000000..8bbe1f3b --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/config/config-form-modal.vue @@ -0,0 +1,99 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/config/config-list.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/config/config-list.vue new file mode 100644 index 00000000..2b03fdb3 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/config/config-list.vue @@ -0,0 +1,170 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/dict/components/dict-key-operate-modal.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/dict/components/dict-key-operate-modal.vue new file mode 100644 index 00000000..334ab145 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/dict/components/dict-key-operate-modal.vue @@ -0,0 +1,95 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/dict/components/dict-value-modal.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/dict/components/dict-value-modal.vue new file mode 100644 index 00000000..a00e2b77 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/dict/components/dict-value-modal.vue @@ -0,0 +1,221 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/dict/components/dict-value-operate-modal.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/dict/components/dict-value-operate-modal.vue new file mode 100644 index 00000000..cc175580 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/dict/components/dict-value-operate-modal.vue @@ -0,0 +1,101 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/dict/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/dict/index.vue new file mode 100644 index 00000000..3f09b4ce --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/dict/index.vue @@ -0,0 +1,237 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/feedback/feedback-list.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/feedback/feedback-list.vue new file mode 100644 index 00000000..8b18dbab --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/feedback/feedback-list.vue @@ -0,0 +1,166 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/file/file-list.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/file/file-list.vue new file mode 100644 index 00000000..2939f6d2 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/file/file-list.vue @@ -0,0 +1,280 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/heart-beat/heart-beat-list.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/heart-beat/heart-beat-list.vue new file mode 100644 index 00000000..8d302b5f --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/heart-beat/heart-beat-list.vue @@ -0,0 +1,166 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/components/help-doc-catalog-form-modal.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/components/help-doc-catalog-form-modal.vue new file mode 100644 index 00000000..54dcd4da --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/components/help-doc-catalog-form-modal.vue @@ -0,0 +1,132 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/components/help-doc-catalog-tree-select.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/components/help-doc-catalog-tree-select.vue new file mode 100644 index 00000000..8761e228 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/components/help-doc-catalog-tree-select.vue @@ -0,0 +1,89 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/components/help-doc-catalog-tree.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/components/help-doc-catalog-tree.vue new file mode 100644 index 00000000..38d43975 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/components/help-doc-catalog-tree.vue @@ -0,0 +1,354 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/components/help-doc-form-drawer.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/components/help-doc-form-drawer.vue new file mode 100644 index 00000000..5307f87a --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/components/help-doc-form-drawer.vue @@ -0,0 +1,204 @@ + + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/components/help-doc-list.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/components/help-doc-list.vue new file mode 100644 index 00000000..f2d25644 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/components/help-doc-list.vue @@ -0,0 +1,267 @@ + + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/help-doc-manage-list.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/help-doc-manage-list.vue new file mode 100644 index 00000000..f28274d0 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/help-doc-manage-list.vue @@ -0,0 +1,55 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/help-doc-mitt.ts b/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/help-doc-mitt.ts new file mode 100644 index 00000000..acc4316a --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/help-doc-mitt.ts @@ -0,0 +1,11 @@ +/* + * 帮助文档 event bus + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-09-12 18:06:41 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import mitt from 'mitt'; +export default mitt(); diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/user-view/components/help-doc-view-record-list.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/user-view/components/help-doc-view-record-list.vue new file mode 100644 index 00000000..d07a492b --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/user-view/components/help-doc-view-record-list.vue @@ -0,0 +1,168 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/user-view/help-doc-user-view.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/user-view/help-doc-user-view.vue new file mode 100644 index 00000000..e3ec9302 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/user-view/help-doc-user-view.vue @@ -0,0 +1,150 @@ + + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/login-log/login-log-list.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/login-log/login-log-list.vue new file mode 100644 index 00000000..3a7f2a0f --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/login-log/login-log-list.vue @@ -0,0 +1,194 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/operate-log/operate-log-detail-modal.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/operate-log/operate-log-detail-modal.vue new file mode 100644 index 00000000..4c91e9dd --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/operate-log/operate-log-detail-modal.vue @@ -0,0 +1,139 @@ + + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/operate-log/operate-log-list.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/operate-log/operate-log-list.vue new file mode 100644 index 00000000..f6c57f65 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/operate-log/operate-log-list.vue @@ -0,0 +1,220 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/reload/do-reload-form-modal.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/reload/do-reload-form-modal.vue new file mode 100644 index 00000000..8709525b --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/reload/do-reload-form-modal.vue @@ -0,0 +1,90 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/reload/reload-list.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/reload/reload-list.vue new file mode 100644 index 00000000..222414b0 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/reload/reload-list.vue @@ -0,0 +1,133 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/reload/reload-result-list.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/reload/reload-result-list.vue new file mode 100644 index 00000000..1a78b93e --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/reload/reload-result-list.vue @@ -0,0 +1,100 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/serial-number/serial-number-generate-form-modal.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/serial-number/serial-number-generate-form-modal.vue new file mode 100644 index 00000000..da56aa1e --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/serial-number/serial-number-generate-form-modal.vue @@ -0,0 +1,107 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/serial-number/serial-number-list.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/serial-number/serial-number-list.vue new file mode 100644 index 00000000..731e55be --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/serial-number/serial-number-list.vue @@ -0,0 +1,143 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/support/serial-number/serial-number-record-list.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/support/serial-number/serial-number-record-list.vue new file mode 100644 index 00000000..6bb61216 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/support/serial-number/serial-number-record-list.vue @@ -0,0 +1,115 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/40X/403.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/40X/403.vue new file mode 100644 index 00000000..de5bf4d9 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/40X/403.vue @@ -0,0 +1,24 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/40X/404.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/40X/404.vue new file mode 100644 index 00000000..b6fbe5b9 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/40X/404.vue @@ -0,0 +1,24 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/department-children/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/department-children/index.vue new file mode 100644 index 00000000..dfc353cc --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/department-children/index.vue @@ -0,0 +1,58 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/department-form-modal/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/department-form-modal/index.vue new file mode 100644 index 00000000..713fd8d1 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/department-form-modal/index.vue @@ -0,0 +1,138 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/department-tree/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/department-tree/index.vue new file mode 100644 index 00000000..f6521cef --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/department-tree/index.vue @@ -0,0 +1,339 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/employee-department-form-modal/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/employee-department-form-modal/index.vue new file mode 100644 index 00000000..99a3b89a --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/employee-department-form-modal/index.vue @@ -0,0 +1,94 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/employee-form-modal/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/employee-form-modal/index.vue new file mode 100644 index 00000000..dbb7c285 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/employee-form-modal/index.vue @@ -0,0 +1,224 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/employee-list/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/employee-list/index.vue new file mode 100644 index 00000000..6156c909 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/employee-list/index.vue @@ -0,0 +1,390 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/employee-password-dialog/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/employee-password-dialog/index.vue new file mode 100644 index 00000000..a3a32c30 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/employee-password-dialog/index.vue @@ -0,0 +1,79 @@ + + + + +> diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/department-mitt.ts b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/department-mitt.ts new file mode 100644 index 00000000..dc830fd3 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/department-mitt.ts @@ -0,0 +1,11 @@ +/* + * 部门event bus + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-07-12 23:32:48 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import mitt from 'mitt'; +export default mitt(); diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/index.vue new file mode 100644 index 00000000..c2266c4d --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/index.vue @@ -0,0 +1,72 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-data-scope/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-data-scope/index.vue new file mode 100644 index 00000000..eab1675b --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-data-scope/index.vue @@ -0,0 +1,157 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-employee-list/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-employee-list/index.vue new file mode 100644 index 00000000..bd5e8d04 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-employee-list/index.vue @@ -0,0 +1,263 @@ + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-form-modal/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-form-modal/index.vue new file mode 100644 index 00000000..43eeedf2 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-form-modal/index.vue @@ -0,0 +1,111 @@ + + + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-list/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-list/index.vue new file mode 100644 index 00000000..88018909 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-list/index.vue @@ -0,0 +1,116 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-setting/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-setting/index.vue new file mode 100644 index 00000000..1c88a6e6 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-setting/index.vue @@ -0,0 +1,44 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-tree/index.less b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-tree/index.less new file mode 100644 index 00000000..680af9f9 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-tree/index.less @@ -0,0 +1,78 @@ +:deep(.ant-checkbox-group) { + width: 100%; +} +.tree-header { + display: flex; + align-items: center; + justify-content: space-between; + margin: 20px 0; +} +.col-desc { + margin: 20px 0; + font-size: 15px; + color: #95a5a6; + padding: 0 20px; +} +.button-style { + margin: 20px 0 20px 0; + padding-left: 20px; + text-align: right; +} +.check-right { + margin-right: 20px; +} +.row-border { + border: 1px solid #f0f0f0; +} +.col-border { + line-height: 50px; + padding-left: 20px; + border-right: 1px solid #f0f0f0; +} +.col-left { + line-height: 50px; + padding-left: 40px; + border-right: 1px solid #f0f0f0; +} +.col-right { + padding-left: 20px; + border-right: 1px solid #f0f0f0; +} +.checked-box { + padding: 0 15px; + :deep(ul li::marker) { + content: ''; + } + :deep(ul) { + padding: 0; + margin: 0; + + li { + list-style: none; + padding: 0; + margin: 10px 0; + + .menu { + border-bottom: 1px solid rgb(240, 240, 240); + display: flex; + align-items: center; + line-height: 25px; + } + + .point { + display: flex; + align-items: center; + + .point-label { + flex: 1; + padding-left: 40px; + border-left: 1px rgb(240, 240, 240) solid; + } + } + + .checked-box-label { + min-width: 150px; + } + } + } +} diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-tree/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-tree/index.vue new file mode 100644 index 00000000..38ef6868 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-tree/index.vue @@ -0,0 +1,74 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-tree/role-tree-checkbox.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-tree/role-tree-checkbox.vue new file mode 100644 index 00000000..9cae4f5a --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-tree/role-tree-checkbox.vue @@ -0,0 +1,49 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-tree/role-tree-menu.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-tree/role-tree-menu.vue new file mode 100644 index 00000000..4900c902 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-tree/role-tree-menu.vue @@ -0,0 +1,64 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-tree/role-tree-point.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-tree/role-tree-point.vue new file mode 100644 index 00000000..83caf6d6 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-tree/role-tree-point.vue @@ -0,0 +1,33 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/index.vue new file mode 100644 index 00000000..01b8904f --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/index.vue @@ -0,0 +1,45 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/changelog-card.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/changelog-card.vue new file mode 100644 index 00000000..a0e4e59b --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/changelog-card.vue @@ -0,0 +1,107 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/default-home-card.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/default-home-card.vue new file mode 100644 index 00000000..6efdd4c6 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/default-home-card.vue @@ -0,0 +1,60 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/echarts/category.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/echarts/category.vue new file mode 100644 index 00000000..99bee564 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/echarts/category.vue @@ -0,0 +1,92 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/echarts/gauge.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/echarts/gauge.vue new file mode 100644 index 00000000..265f51a4 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/echarts/gauge.vue @@ -0,0 +1,119 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/echarts/gradient.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/echarts/gradient.vue new file mode 100644 index 00000000..0b1151ac --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/echarts/gradient.vue @@ -0,0 +1,210 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/echarts/pie.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/echarts/pie.vue new file mode 100644 index 00000000..0b916878 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/echarts/pie.vue @@ -0,0 +1,78 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/official-account-card.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/official-account-card.vue new file mode 100644 index 00000000..284394a8 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/official-account-card.vue @@ -0,0 +1,86 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/quick-entry/home-quick-entry-modal.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/quick-entry/home-quick-entry-modal.vue new file mode 100644 index 00000000..c256d2b6 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/quick-entry/home-quick-entry-modal.vue @@ -0,0 +1,81 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/quick-entry/home-quick-entry.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/quick-entry/home-quick-entry.vue new file mode 100644 index 00000000..50cb0ec6 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/quick-entry/home-quick-entry.vue @@ -0,0 +1,149 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/quick-entry/init-quick-entry-list.js b/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/quick-entry/init-quick-entry-list.js new file mode 100644 index 00000000..32c347f1 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/quick-entry/init-quick-entry-list.js @@ -0,0 +1,27 @@ +export default [ + { + icon: 'CopyrightTwoTone', + title: '菜单', + path: '/menu/list' + }, + { + icon: 'ExperimentTwoTone', + title: '请求', + path: '/log/operate-log/list' + }, + { + icon: 'FireTwoTone', + title: '缓存', + path: '/support/cache/cache-list' + }, + { + icon: 'HourglassTwoTone', + title: '字典', + path: '/setting/dict' + }, + { + icon: 'MessageTwoTone', + title: '单号', + path: '/support/serial-number/serial-number-list' + } +] diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/to-be-done-card.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/to-be-done-card.vue new file mode 100644 index 00000000..04df0c82 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/to-be-done-card.vue @@ -0,0 +1,158 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/home-header.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/home-header.vue new file mode 100644 index 00000000..4aab6357 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/home-header.vue @@ -0,0 +1,159 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/home-notice.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/home-notice.vue new file mode 100644 index 00000000..cfce492d --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/home-notice.vue @@ -0,0 +1,129 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/index.less b/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/index.less new file mode 100644 index 00000000..5996f4f9 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/index.less @@ -0,0 +1,65 @@ +.no-footer { + :deep(.ant-card-body) { + padding-bottom: 0; + } +} +.content { + height: 150px; + + &.large { + height: 360px; + } + + &.statistice { + display: flex; + flex-direction: column; + justify-content: space-between; + } + &.app { + display: flex; + align-items: center; + padding-bottom: 24px; + .app-qr { + display: flex; + align-items: center; + flex-direction: column; + margin-right: 40px; + > img { + height: 120px; + } + > span { + font-size: 14px; + } + } + } + + &.gauge { + display: flex; + align-items: center; + } + + &.wait-handle { + padding-bottom: 24px; + overflow-y: auto; + > p { + font-size: 18px; + } + :deep(.ant-tag) { + padding: 1px 8px; + font-size: 15px; + } + } + + .count { + font-size: 30px; + font-weight: 700; + margin-bottom: 10px; + } +} +.footer { + width: 100%; + border-top: 1px solid #e9e9e9; + padding: 10px 0; + background: #fff; + z-index: 1; +} diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/index.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/index.vue new file mode 100644 index 00000000..9a7d5e5e --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/index.vue @@ -0,0 +1,87 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/login/login.less b/smart-admin-web/javascript-ant-design-vue3/src/views/system/login/login.less new file mode 100644 index 00000000..e7a57799 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/login/login.less @@ -0,0 +1,174 @@ +.login-container { + width: 100%; + height: 100%; + background: url(/@/assets/images/login/login-bg.jpg) no-repeat center; + background-size: cover; + display: flex; + align-items: center; + justify-content: center; + .box-item { + width: 434px; + height: 570px; + &.desc { + background: #003b94; + border-radius: 12px 0px 0px 12px; + box-shadow: 0px 16px 73px 8px rgba(203, 203, 203, 0.2); + padding: 23px 25px; + } + &.login { + background: #ffffff; + border-radius: 0px 12px 12px 0px; + padding: 34px 42px; + position: relative; + } + .login-qr { + position: absolute; + top: 0; + right: 0; + width: 66px; + height: 66px; + } + .logo { + width: 180px; + height: 42px; + align-self: start; + } + .welcome { + margin-top: 12px; + font-size: 26px; + font-weight: bold; + color: #ffffff; + p { + margin-bottom: 0; + } + .desc { + font-size: 15px; + font-weight: 500; + margin: 40px 0 60px 0; + + .setence { + font-size: 13px; + // text-decoration: underline; + font-style: italic; + } + .author { + float: right; + font-size: 13px; + margin-top: 10px; + text-decoration: underline; + font-style: italic; + } + } + } + .app-qr-box { + display: flex; + align-items: center; + justify-content: space-around; + margin-top: 20px; + .app-qr { + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + > img { + width: 112px; + height: 112px; + } + .qr-desc { + display: flex; + align-items: center; + margin-top: 11px; + font-size: 12px; + font-weight: 500; + text-align: center; + color: #ffffff; + > img { + width: 15px; + height: 18px; + margin-right: 9px; + } + } + } + } + .login-title { + font-size: 30px; + font-weight: 700; + text-align: center; + color: #1e1e1e; + } + .login-form { + margin-top: 37px; + + .captcha-input { + width: 60%; + } + + .captcha-img { + cursor: pointer; + } + } + .ant-input, + .ant-input-affix-wrapper { + height: 44px; + border: 1px solid #ededed; + border-radius: 4px; + } + + .eye-box { + position: absolute; + right: 15px; + top: 10px; + .eye-icon { + width: 20px; + height: 20px; + cursor: pointer; + } + } + .btn { + width: 350px; + height: 50px; + background: #1890ff; + border-radius: 4px; + font-size: 16px; + font-weight: 700; + text-align: center; + color: #ffffff; + line-height: 50px; + cursor: pointer; + } + } + + .more { + margin-top: 30px; + .title-box { + display: flex; + align-items: center; + justify-content: center; + > p { + margin-bottom: 0; + } + } + .line { + width: 114px; + height: 1px; + background: #e6e6e6; + } + .title { + font-size: 14px; + font-weight: 500; + color: #a1aebe; + margin: 0 19px; + } + .login-type { + padding: 0 50px; + margin-top: 25px; + display: flex; + align-items: center; + justify-content: space-between; + > img { + width: 22px; + height: 22px; + } + } + } +} diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/login/login.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/login/login.vue new file mode 100644 index 00000000..82706fd6 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/login/login.vue @@ -0,0 +1,205 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/menu/components/menu-operate-modal.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/menu/components/menu-operate-modal.vue new file mode 100644 index 00000000..48256f90 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/menu/components/menu-operate-modal.vue @@ -0,0 +1,309 @@ + + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/menu/components/menu-tree-select.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/menu/components/menu-tree-select.vue new file mode 100644 index 00000000..b26dc8e8 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/menu/components/menu-tree-select.vue @@ -0,0 +1,49 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/menu/menu-data-handler.js b/smart-admin-web/javascript-ant-design-vue3/src/views/system/menu/menu-data-handler.js new file mode 100644 index 00000000..e005b446 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/menu/menu-data-handler.js @@ -0,0 +1,151 @@ +/* + * 此文件是处理 菜单数据的类,主要用于: + * 1、菜单树形表格的构造 + * 2、菜单的前端过滤 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-06-15 16:47:20 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ + +import _ from 'lodash'; +/** + * 过滤菜单 + * @param {*} menuList + * @param {*} queryForm + * @returns + */ +export const filterMenuByQueryForm = (menuList, queryForm) => { + if (!menuList || menuList.length === 0) { + return []; + } + + let filterResult = []; + for (const menu of menuList) { + if (isMenuExistKeywords(menu, queryForm.keywords) && isMenuExistMenuType(menu, queryForm.menuType) && isMenuExistMenuFlag(menu, queryForm)) { + filterResult.push(menu); + } + } + return filterResult; +}; + +/** + * 构建菜单表格树形数据 + */ +export const buildMenuTableTree = (menuList) => { + let topMenuList = []; + const menuIdSet = new Set(); + for (const menu of menuList) { + menuIdSet.add(menu.menuId); + } + + for (const menu of menuList) { + const parentId = menu.parentId; + // 不存在父节点,则为顶级菜单 + if (!menuIdSet.has(parentId)) { + topMenuList.push(menu); + } + } + + recursiveMenuTree(menuList, topMenuList); + return topMenuList; +}; + +/** + * 递归遍历菜单树形数据 + * @param {*} menuList + * @param {*} parentArray + */ +function recursiveMenuTree(menuList, parentArray) { + for (const parent of parentArray) { + const children = menuList.filter((e) => e.parentId === parent.menuId); + if (children.length > 0) { + parent.children = children; + recursiveMenuTree(menuList, parent.children); + } + } +} + +/** + * 过滤菜单状态 + * @param {*} menu + * @param {*} queryForm + * @returns + */ +function isMenuExistMenuFlag(menu, queryForm) { + let frameFlagCondition = false; + if (!_.isNil(queryForm.frameFlag)) { + frameFlagCondition = !_.isNil(menu.frameFlag) && menu.frameFlag === (queryForm.frameFlag === 1); + } else { + frameFlagCondition = true; + } + + let cacheFlagCondition = false; + if (!_.isNil(queryForm.cacheFlag)) { + cacheFlagCondition = !_.isNil(menu.cacheFlag) && menu.cacheFlag === (queryForm.cacheFlag === 1); + } else { + cacheFlagCondition = true; + } + + let visibleFlagCondition = false; + if (!_.isNil(queryForm.visibleFlag)) { + visibleFlagCondition = !_.isNil(menu.visibleFlag) && menu.visibleFlag === (queryForm.visibleFlag === 1); + } else { + visibleFlagCondition = true; + } + + let disabledFlagCondition = false; + if (!_.isNil(queryForm.disabledFlag)) { + disabledFlagCondition = !_.isNil(menu.disabledFlag) && menu.disabledFlag === (queryForm.disabledFlag === 1); + } else { + disabledFlagCondition = true; + } + + return frameFlagCondition && cacheFlagCondition && visibleFlagCondition && disabledFlagCondition; +} + +/** + * 过滤菜单类型 + * @param {*} menu + * @param {*} menuType + * @returns + */ +function isMenuExistMenuType(menu, menuType) { + if (!menuType) { + return true; + } + + if (menu.menuType && menu.menuType === menuType) { + return true; + } + return false; +} + +/** + * 过滤关键字 + */ +function isMenuExistKeywords(menu, keywords) { + if (!keywords) { + return true; + } + + if (menu.component && menu.component.indexOf(keywords) > -1) { + return true; + } + + if (menu.menuName && menu.menuName.indexOf(keywords) > -1) { + return true; + } + if (menu.path && menu.path.indexOf(keywords) > -1) { + return true; + } + if (menu.apiPerms && menu.apiPerms.indexOf(keywords) > -1) { + return true; + } + if (menu.webPerms && menu.webPerms.indexOf(keywords) > -1) { + return true; + } + return false; +} diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/menu/menu-list-table-columns.js b/smart-admin-web/javascript-ant-design-vue3/src/views/system/menu/menu-list-table-columns.js new file mode 100644 index 00000000..210a390a --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/menu/menu-list-table-columns.js @@ -0,0 +1,83 @@ +/* + * 菜单表格列 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-05-12 19:46:11 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { ref } from 'vue'; +export const columns = ref([ + { + title: '名称', + dataIndex: 'menuName', + key: 'ID', + width: 200, + }, + { + title: '类型', + dataIndex: 'menuType', + width: 80, + }, + { + title: '图标', + dataIndex: 'icon', + width: 50, + }, + { + title: '路径', + dataIndex: 'path', + ellipsis: true, + }, + { + title: '组件', + dataIndex: 'component', + ellipsis: true, + }, + { + title: '权限模式', + dataIndex: 'permsType', + width: 100, + }, + { + title: '后端权限', + dataIndex: 'apiPerms', + ellipsis: true, + }, + { + title: '前端权限', + dataIndex: 'webPerms', + ellipsis: true, + }, + { + title: '外链', + dataIndex: 'frameFlag', + width: 45, + }, + { + title: '缓存', + dataIndex: 'cacheFlag', + width: 45, + }, + { + title: '显示', + dataIndex: 'visibleFlag', + width: 45, + }, + { + title: '禁用', + dataIndex: 'disabledFlag', + width: 45, + }, + { + title: '顺序', + dataIndex: 'sort', + width: 80, + }, + { + title: '操作', + dataIndex: 'operate', + width: 100, + }, +]); diff --git a/smart-admin-web/javascript-ant-design-vue3/src/views/system/menu/menu-list.vue b/smart-admin-web/javascript-ant-design-vue3/src/views/system/menu/menu-list.vue new file mode 100644 index 00000000..986e6d0f --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/src/views/system/menu/menu-list.vue @@ -0,0 +1,256 @@ + + + diff --git a/smart-admin-web/javascript-ant-design-vue3/vite.config.js b/smart-admin-web/javascript-ant-design-vue3/vite.config.js new file mode 100644 index 00000000..783402f4 --- /dev/null +++ b/smart-admin-web/javascript-ant-design-vue3/vite.config.js @@ -0,0 +1,68 @@ +/* + * vite配置 + * + * @Author: 1024创新实验室-主任:卓大 + * @Date: 2022-05-02 23:44:56 + * @Wechat: zhuda1024 + * @Email: lab1024@163.com + * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 + */ +import { resolve } from 'path'; +import vue from '@vitejs/plugin-vue'; +//提速第一次vite启动速度 +import OptimizationPersist from 'vite-plugin-optimize-persist'; +import PkgConfig from 'vite-plugin-package-config'; + +const pathResolve = (dir) => { + return resolve(__dirname, '.', dir); +}; +export default { + base: process.env.NODE_ENV === 'production' ? '/manages/' : '/', + root: process.cwd(), + resolve: { + alias: [ + // 国际化替换 + { + find: 'vue-i18n', + replacement: 'vue-i18n/dist/vue-i18n.cjs.js', + }, + // 绝对路径重命名:/@/xxxx => src/xxxx + { + find: /\/@\//, + replacement: pathResolve('src') + '/', + }, + { + find: /^~/, + replacement: '', + }, + ], + }, + // 服务端渲染 + server: { + host: '0.0.0.0', + port: 8081, + }, + plugins: [vue(), PkgConfig(), OptimizationPersist()], + optimizeDeps: { + include: ['ant-design-vue/es/locale/zh_CN', 'dayjs/locale/zh-cn', 'ant-design-vue/es/locale/en_US'], + exclude: ['vue-demi'], + }, + build: { + brotliSize: false, + chunkSizeWarningLimit: 2000, + }, + css: { + preprocessorOptions: { + less: { + modifyVars: { + hack: `true; @import (reference) "${resolve('src/theme/index.less')}";`, + }, + javascriptEnabled: true, + }, + }, + }, + define: { + __INTLIFY_PROD_DEVTOOLS__: false, + 'process.env': process.env, + }, +}; diff --git a/smart-admin-web/package-lock.json b/smart-admin-web/package-lock.json deleted file mode 100644 index 86b799c5..00000000 --- a/smart-admin-web/package-lock.json +++ /dev/null @@ -1,15500 +0,0 @@ -{ - "name": "smart-admin", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@antv/adjust": { - "version": "0.1.1", - "resolved": "https://registry.npm.taobao.org/@antv/adjust/download/@antv/adjust-0.1.1.tgz", - "integrity": "sha1-4mOrDhoZQaZIhC/Ahs9lp+O3Xpg=", - "requires": { - "@antv/util": "~1.3.1" - } - }, - "@antv/attr": { - "version": "0.1.2", - "resolved": "https://registry.npm.taobao.org/@antv/attr/download/@antv/attr-0.1.2.tgz", - "integrity": "sha1-LusSL8qvhRoth0mrx8YFGdP3fjc=", - "requires": { - "@antv/util": "~1.3.1" - } - }, - "@antv/component": { - "version": "0.3.9", - "resolved": "https://registry.npm.taobao.org/@antv/component/download/@antv/component-0.3.9.tgz", - "integrity": "sha1-7VYcY5t3OM4D/2OoZvWeJR3oKhc=", - "requires": { - "@antv/attr": "~0.1.2", - "@antv/g": "~3.3.5", - "@antv/util": "~1.3.1", - "wolfy87-eventemitter": "~5.1.0" - }, - "dependencies": { - "@antv/g": { - "version": "3.3.6", - "resolved": "https://registry.npm.taobao.org/@antv/g/download/@antv/g-3.3.6.tgz", - "integrity": "sha1-Ef7Z3cntTloqokS3yKu5gqAD8gE=", - "requires": { - "@antv/gl-matrix": "~2.7.1", - "@antv/util": "~1.3.1", - "d3-ease": "~1.0.3", - "d3-interpolate": "~1.1.5", - "d3-timer": "~1.0.6", - "wolfy87-eventemitter": "~5.1.0" - } - } - } - }, - "@antv/coord": { - "version": "0.1.0", - "resolved": "https://registry.npm.taobao.org/@antv/coord/download/@antv/coord-0.1.0.tgz", - "integrity": "sha1-SKgK420HVS+WZX5/gJUifGPwwKk=", - "requires": { - "@antv/util": "~1.3.1" - } - }, - "@antv/g": { - "version": "3.4.10", - "resolved": "https://registry.npm.taobao.org/@antv/g/download/@antv/g-3.4.10.tgz", - "integrity": "sha1-57YWqiGxesUYUNAzMypa+N6P4BU=", - "requires": { - "@antv/gl-matrix": "~2.7.1", - "@antv/util": "~1.3.1", - "d3-ease": "~1.0.3", - "d3-interpolate": "~1.1.5", - "d3-timer": "~1.0.6", - "detect-browser": "^5.1.0" - } - }, - "@antv/g2": { - "version": "3.5.17", - "resolved": "https://registry.npm.taobao.org/@antv/g2/download/@antv/g2-3.5.17.tgz", - "integrity": "sha1-Asi6xhDSHSi04jYAvHbEjn9ZyRk=", - "requires": { - "@antv/adjust": "~0.1.0", - "@antv/attr": "~0.1.2", - "@antv/component": "~0.3.3", - "@antv/coord": "~0.1.0", - "@antv/g": "~3.4.10", - "@antv/scale": "~0.1.1", - "@antv/util": "~1.3.1", - "venn.js": "~0.2.20", - "wolfy87-eventemitter": "~5.1.0" - } - }, - "@antv/gl-matrix": { - "version": "2.7.1", - "resolved": "https://registry.npm.taobao.org/@antv/gl-matrix/download/@antv/gl-matrix-2.7.1.tgz", - "integrity": "sha1-rLjjf3qz3wE0WrpDcteUK+QuuhQ=" - }, - "@antv/scale": { - "version": "0.1.5", - "resolved": "https://registry.npm.taobao.org/@antv/scale/download/@antv/scale-0.1.5.tgz", - "integrity": "sha1-JDJm6LkEfPZLL9/ED5g0zwhGSW4=", - "requires": { - "@antv/util": "~1.3.1", - "fecha": "~2.3.3" - } - }, - "@antv/util": { - "version": "1.3.1", - "resolved": "https://registry.npm.taobao.org/@antv/util/download/@antv/util-1.3.1.tgz", - "integrity": "sha1-MKNLIB/5Em7A1YxyyBZqnD5kTM0=", - "requires": { - "@antv/gl-matrix": "^2.7.1" - } - }, - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.10.4.tgz?cache=0&sync_timestamp=1593521174697&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.10.4.tgz", - "integrity": "sha1-Fo2ho26Q2miujUnA8bSMfGJJITo=", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/core": { - "version": "7.10.5", - "resolved": "https://registry.npm.taobao.org/@babel/core/download/@babel/core-7.10.5.tgz?cache=0&sync_timestamp=1594750809694&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcore%2Fdownload%2F%40babel%2Fcore-7.10.5.tgz", - "integrity": "sha1-HxXizKitmh14o43bphL158270zA=", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.5", - "@babel/helper-module-transforms": "^7.10.5", - "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.10.5", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.5", - "@babel/types": "^7.10.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.1.1.tgz", - "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.10.5", - "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.10.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.10.5.tgz", - "integrity": "sha1-G5A1VLyMWD7o0l8eiWlzLmuCmmk=", - "dev": true, - "requires": { - "@babel/types": "^7.10.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha1-W/DUlaP3V6w72ki1vzs7ownHK6M=", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha1-uwt18xv5jL+f8UPBrleLhydK4aM=", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.10.5", - "resolved": "https://registry.npm.taobao.org/@babel/helper-create-class-features-plugin/download/@babel/helper-create-class-features-plugin-7.10.5.tgz?cache=0&sync_timestamp=1594751493358&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-create-class-features-plugin%2Fdownload%2F%40babel%2Fhelper-create-class-features-plugin-7.10.5.tgz", - "integrity": "sha1-n2FEa6gOgkCwpchcb9rIRZ1vJZ0=", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.10.5", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/helper-create-regexp-features-plugin/download/@babel/helper-create-regexp-features-plugin-7.10.4.tgz", - "integrity": "sha1-/dYNiFJGWaC2lZwFeZJeQlcU87g=", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-regex": "^7.10.4", - "regexpu-core": "^4.7.0" - } - }, - "@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npm.taobao.org/@babel/helper-define-map/download/@babel/helper-define-map-7.10.5.tgz?cache=0&sync_timestamp=1594751492980&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-define-map%2Fdownload%2F%40babel%2Fhelper-define-map-7.10.5.tgz", - "integrity": "sha1-tTwQ23imQIABUmkrEzkxR6y5uzA=", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.10.4.tgz?cache=0&sync_timestamp=1593522841702&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-explode-assignable-expression%2Fdownload%2F%40babel%2Fhelper-explode-assignable-expression-7.10.4.tgz", - "integrity": "sha1-QKHNkXv/Eoj2malKdbN6Gi29jHw=", - "dev": true, - "requires": { - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.10.4.tgz?cache=0&sync_timestamp=1593521218775&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-function-name%2Fdownload%2F%40babel%2Fhelper-function-name-7.10.4.tgz", - "integrity": "sha1-0tOyDFmtjEcRL6fSqUvAnV74Lxo=", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.10.4.tgz?cache=0&sync_timestamp=1593522827189&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-get-function-arity%2Fdownload%2F%40babel%2Fhelper-get-function-arity-7.10.4.tgz", - "integrity": "sha1-mMHL6g4jMvM/mkZhuM4VBbLBm6I=", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.10.4.tgz?cache=0&sync_timestamp=1593521259807&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-hoist-variables%2Fdownload%2F%40babel%2Fhelper-hoist-variables-7.10.4.tgz", - "integrity": "sha1-1JsAHR1aaMpeZgTdoBpil/fJOB4=", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.10.5", - "resolved": "https://registry.npm.taobao.org/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.10.5.tgz?cache=0&sync_timestamp=1594751492273&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-member-expression-to-functions%2Fdownload%2F%40babel%2Fhelper-member-expression-to-functions-7.10.5.tgz", - "integrity": "sha1-Fy9W56Y+eBEvOgQFXyQ2WvcC5+4=", - "dev": true, - "requires": { - "@babel/types": "^7.10.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.10.4.tgz", - "integrity": "sha1-TFxUvgS9MWcKc4J5fXW5+i5bViA=", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-module-transforms": { - "version": "7.10.5", - "resolved": "https://registry.npm.taobao.org/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.10.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-module-transforms%2Fdownload%2F%40babel%2Fhelper-module-transforms-7.10.5.tgz", - "integrity": "sha1-EgwnHAszU2c/zf2MBT2zxUSiYNY=", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.10.4.tgz?cache=0&sync_timestamp=1593522827576&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-optimise-call-expression%2Fdownload%2F%40babel%2Fhelper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha1-UNyWQT1ZT5lad5BZBbBYk813lnM=", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha1-L3WoMSadT2d95JmG3/WZJ1M883U=", - "dev": true - }, - "@babel/helper-regex": { - "version": "7.10.5", - "resolved": "https://registry.npm.taobao.org/@babel/helper-regex/download/@babel/helper-regex-7.10.5.tgz?cache=0&sync_timestamp=1594751487108&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-regex%2Fdownload%2F%40babel%2Fhelper-regex-7.10.5.tgz", - "integrity": "sha1-Mt+7eYmQc8QVVXBToZvQVarlCuA=", - "dev": true, - "requires": { - "lodash": "^4.17.19" - } - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.10.4.tgz?cache=0&sync_timestamp=1593521228698&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-remap-async-to-generator%2Fdownload%2F%40babel%2Fhelper-remap-async-to-generator-7.10.4.tgz", - "integrity": "sha1-/Oi+pOlpC76SMFbe0h5UtOi2jtU=", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-replace-supers": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.10.4.tgz", - "integrity": "sha1-1YXNk4jqBuYDHkzUS2cTy+rZ5s8=", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-simple-access": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/helper-simple-access/download/@babel/helper-simple-access-7.10.4.tgz?cache=0&sync_timestamp=1593521217867&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-simple-access%2Fdownload%2F%40babel%2Fhelper-simple-access-7.10.4.tgz", - "integrity": "sha1-D1zNopRSd6KnotOoIeFTle3PNGE=", - "dev": true, - "requires": { - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.10.4.tgz?cache=0&sync_timestamp=1593522826673&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-split-export-declaration%2Fdownload%2F%40babel%2Fhelper-split-export-declaration-7.10.4.tgz", - "integrity": "sha1-LHBXbqo7VgmyTLmdsoiMw/xCUdE=", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.10.4.tgz?cache=0&sync_timestamp=1593522843594&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-validator-identifier%2Fdownload%2F%40babel%2Fhelper-validator-identifier-7.10.4.tgz", - "integrity": "sha1-p4x6clHgH2FlEtMbEK3PUq2l4NI=", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.10.4.tgz?cache=0&sync_timestamp=1593522949000&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-wrap-function%2Fdownload%2F%40babel%2Fhelper-wrap-function-7.10.4.tgz", - "integrity": "sha1-im9wHqsP8592W1oc/vQJmQ5iS4c=", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helpers": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/helpers/download/@babel/helpers-7.10.4.tgz", - "integrity": "sha1-Kr6w1yGv98Cpc3a54fb2XXpHUEQ=", - "dev": true, - "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.10.4.tgz?cache=0&sync_timestamp=1593522962210&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.10.4.tgz", - "integrity": "sha1-fRvf1ldTU4+r5sOFls23bZrGAUM=", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.10.5", - "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.10.5.tgz?cache=0&sync_timestamp=1594750823758&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fparser%2Fdownload%2F%40babel%2Fparser-7.10.5.tgz", - "integrity": "sha1-58a/Wn3v+VfOyfBLVR4nYpCdgms=", - "dev": true - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.10.5", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.10.5.tgz?cache=0&sync_timestamp=1594751487997&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-async-generator-functions%2Fdownload%2F%40babel%2Fplugin-proposal-async-generator-functions-7.10.5.tgz", - "integrity": "sha1-NJHKvy98F5q4IGBs7Cf+0V4OhVg=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.10.4", - "@babel/plugin-syntax-async-generators": "^7.8.0" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.10.4.tgz", - "integrity": "sha1-ozv2Mto5ClnHqMVwBF0RFc13iAc=", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-proposal-decorators": { - "version": "7.10.5", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-decorators/download/@babel/plugin-proposal-decorators-7.10.5.tgz?cache=0&sync_timestamp=1594751494194&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-decorators%2Fdownload%2F%40babel%2Fplugin-proposal-decorators-7.10.5.tgz", - "integrity": "sha1-QomLukeLxLGuJCpwOpU6etNQ/7Q=", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.5", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-decorators": "^7.10.4" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.10.4.tgz", - "integrity": "sha1-WT5ZxjUoFgIzvTIbGuvgggwjQds=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.10.4.tgz", - "integrity": "sha1-UBKawha5pqVbOFP92SPnS/VTpMA=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.10.4" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.10.4.tgz", - "integrity": "sha1-Mck4MJ0kp4pJ1o/av/qoY3WFVN0=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.10.4.tgz", - "integrity": "sha1-RIPNpTBBzjQTt/4vAAImZd36p10=", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-async-generators/download/@babel/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha1-qYP7Gusuw/btBCohD2QOkOeG/g0=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-decorators": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-decorators/download/@babel/plugin-syntax-decorators-7.10.4.tgz", - "integrity": "sha1-aFMIWyxCn50yLQL1pjUBjN6yNgw=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-dynamic-import/download/@babel/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha1-Yr+Ysto80h1iYVT8lu5bPLaOrLM=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-json-strings/download/@babel/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha1-AcohtmjNghjJ5kDLbdiMVBKyyWo=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-jsx/download/@babel/plugin-syntax-jsx-7.10.4.tgz?cache=0&sync_timestamp=1593522939386&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-jsx%2Fdownload%2F%40babel%2Fplugin-syntax-jsx-7.10.4.tgz", - "integrity": "sha1-Oauq48v3EMQ3PYQpSE5rohNAFmw=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.8.3.tgz?cache=0&sync_timestamp=1578950070697&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-object-rest-spread%2Fdownload%2F%40babel%2Fplugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha1-YOIl7cvZimQDMqLnLdPmbxr1WHE=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-optional-catch-binding/download/@babel/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha1-YRGiZbz7Ag6579D9/X0mQCue1sE=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.10.4.tgz?cache=0&sync_timestamp=1593522807583&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-arrow-functions%2Fdownload%2F%40babel%2Fplugin-transform-arrow-functions-7.10.4.tgz", - "integrity": "sha1-4ilg135pfHT0HFAdRNc9v4pqZM0=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.10.4.tgz?cache=0&sync_timestamp=1593522851748&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-async-to-generator%2Fdownload%2F%40babel%2Fplugin-transform-async-to-generator-7.10.4.tgz", - "integrity": "sha1-QaUBfknrbzzak5KlHu8pQFskWjc=", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.10.4" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.10.4.tgz?cache=0&sync_timestamp=1593521910347&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-block-scoped-functions%2Fdownload%2F%40babel%2Fplugin-transform-block-scoped-functions-7.10.4.tgz", - "integrity": "sha1-GvpZV0T3XkOpGvc7DZmOz+Trwug=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.10.5", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.10.5.tgz?cache=0&sync_timestamp=1594751488558&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-block-scoping%2Fdownload%2F%40babel%2Fplugin-transform-block-scoping-7.10.5.tgz", - "integrity": "sha1-uBuKr++/5o8PZffvOXuezmimA30=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.10.4.tgz?cache=0&sync_timestamp=1593521236444&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-classes%2Fdownload%2F%40babel%2Fplugin-transform-classes-7.10.4.tgz", - "integrity": "sha1-QFE2rys+IYvEoZJiKLyRerGgrcc=", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-define-map": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.10.4.tgz?cache=0&sync_timestamp=1593522921161&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-computed-properties%2Fdownload%2F%40babel%2Fplugin-transform-computed-properties-7.10.4.tgz", - "integrity": "sha1-ne2DqBboLe0o1S1LTsvdgQzfwOs=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.10.4.tgz", - "integrity": "sha1-cN3Ss9G+qD0BUJ6bsl3bOnT8heU=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.10.4.tgz", - "integrity": "sha1-RpwgYhBcHragQOr0+sS0iAeDle4=", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.10.4.tgz", - "integrity": "sha1-aX5Qyf7hQ4D+hD0fMGspVhdDHkc=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.10.4.tgz?cache=0&sync_timestamp=1593521230232&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-exponentiation-operator%2Fdownload%2F%40babel%2Fplugin-transform-exponentiation-operator-7.10.4.tgz", - "integrity": "sha1-WuM4xX+M9AAb2zVgeuZrktZlry4=", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.10.4.tgz", - "integrity": "sha1-wIiS6IGdOl2ykDGxFa9RHbv+uuk=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.10.4.tgz", - "integrity": "sha1-akZ4gOD8ljhRS6NpERgR3b4mRLc=", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.10.4.tgz", - "integrity": "sha1-n0K6CEEQChNfInEtDjkcRi9XHzw=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.10.5", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.10.5.tgz?cache=0&sync_timestamp=1594751493579&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-amd%2Fdownload%2F%40babel%2Fplugin-transform-modules-amd-7.10.5.tgz", - "integrity": "sha1-G5zdrwXZ6Is6rTOcs+RFxPAgqbE=", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.10.5", - "@babel/helper-plugin-utils": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.10.4.tgz", - "integrity": "sha1-ZmZ8Pu2h6/eJbUHx8WsXEFovvKA=", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.10.5", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.10.5.tgz?cache=0&sync_timestamp=1594751492758&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-systemjs%2Fdownload%2F%40babel%2Fplugin-transform-modules-systemjs-7.10.5.tgz", - "integrity": "sha1-YnAJnIVAZmgbrp4F+H4bnK2+jIU=", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.10.5", - "@babel/helper-plugin-utils": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.10.4.tgz?cache=0&sync_timestamp=1593522937615&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-umd%2Fdownload%2F%40babel%2Fplugin-transform-modules-umd-7.10.4.tgz", - "integrity": "sha1-moSB/oG4JGVLOgtl2j34nz0hg54=", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-named-capturing-groups-regex/download/@babel/plugin-transform-named-capturing-groups-regex-7.10.4.tgz", - "integrity": "sha1-eLTZeIELbzvPA/njGPL8DtQa7LY=", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.10.4.tgz?cache=0&sync_timestamp=1593522495673&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-new-target%2Fdownload%2F%40babel%2Fplugin-transform-new-target-7.10.4.tgz", - "integrity": "sha1-kJfXU8t7Aky3OBo7LlLpUTqcaIg=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.10.4.tgz", - "integrity": "sha1-1xRsTROUM+emUm+IjGZ+MUoJOJQ=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.10.5", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.10.5.tgz?cache=0&sync_timestamp=1594751489267&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-parameters%2Fdownload%2F%40babel%2Fplugin-transform-parameters-7.10.5.tgz", - "integrity": "sha1-WdM51Y0LGVBDX0BD504lEABeLEo=", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.10.4.tgz?cache=0&sync_timestamp=1593521089707&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-regenerator%2Fdownload%2F%40babel%2Fplugin-transform-regenerator-7.10.4.tgz", - "integrity": "sha1-IBXlnYOQdOdoON4hWdtCGWb9i2M=", - "dev": true, - "requires": { - "regenerator-transform": "^0.14.2" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.10.5", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.10.5.tgz?cache=0&sync_timestamp=1594751489022&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-runtime%2Fdownload%2F%40babel%2Fplugin-transform-runtime-7.10.5.tgz", - "integrity": "sha1-Ozm3skgw4MLY/3pEif5c+Z+6zoY=", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "resolve": "^1.8.1", - "semver": "^5.5.1" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.10.4.tgz", - "integrity": "sha1-n9Jexc3VVbt/Rz5ebuHJce7eTdY=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.10.4.tgz?cache=0&sync_timestamp=1593522927458&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-spread%2Fdownload%2F%40babel%2Fplugin-transform-spread-7.10.4.tgz", - "integrity": "sha1-TiyF6g1quu4bJNz7uuQm/o1nTP8=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.10.4.tgz", - "integrity": "sha1-jziJ7oZXWBEwop2cyR18c7fEoo0=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-regex": "^7.10.4" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.10.5", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.10.5.tgz?cache=0&sync_timestamp=1594751489580&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-template-literals%2Fdownload%2F%40babel%2Fplugin-transform-template-literals-7.10.5.tgz", - "integrity": "sha1-eLxdYmpmQtszEtnQ8AH152Of3ow=", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.10.4.tgz", - "integrity": "sha1-lQnxp+7DHE7b/+E3wWzDP/C8W/w=", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.10.4.tgz?cache=0&sync_timestamp=1593522855498&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-unicode-regex%2Fdownload%2F%40babel%2Fplugin-transform-unicode-regex-7.10.4.tgz", - "integrity": "sha1-5W1x+SgvrG2wnIJ0IFVXbV5tgKg=", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/preset-env": { - "version": "7.3.4", - "resolved": "https://registry.npm.taobao.org/@babel/preset-env/download/@babel/preset-env-7.3.4.tgz", - "integrity": "sha1-iHzzi20jyC8ZtRNSmL2xYAYuM+E=", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-async-generator-functions": "^7.2.0", - "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.3.4", - "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.2.0", - "@babel/plugin-syntax-async-generators": "^7.2.0", - "@babel/plugin-syntax-json-strings": "^7.2.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", - "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-async-to-generator": "^7.3.4", - "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.3.4", - "@babel/plugin-transform-classes": "^7.3.4", - "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.2.0", - "@babel/plugin-transform-dotall-regex": "^7.2.0", - "@babel/plugin-transform-duplicate-keys": "^7.2.0", - "@babel/plugin-transform-exponentiation-operator": "^7.2.0", - "@babel/plugin-transform-for-of": "^7.2.0", - "@babel/plugin-transform-function-name": "^7.2.0", - "@babel/plugin-transform-literals": "^7.2.0", - "@babel/plugin-transform-modules-amd": "^7.2.0", - "@babel/plugin-transform-modules-commonjs": "^7.2.0", - "@babel/plugin-transform-modules-systemjs": "^7.3.4", - "@babel/plugin-transform-modules-umd": "^7.2.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.3.0", - "@babel/plugin-transform-new-target": "^7.0.0", - "@babel/plugin-transform-object-super": "^7.2.0", - "@babel/plugin-transform-parameters": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.3.4", - "@babel/plugin-transform-shorthand-properties": "^7.2.0", - "@babel/plugin-transform-spread": "^7.2.0", - "@babel/plugin-transform-sticky-regex": "^7.2.0", - "@babel/plugin-transform-template-literals": "^7.2.0", - "@babel/plugin-transform-typeof-symbol": "^7.2.0", - "@babel/plugin-transform-unicode-regex": "^7.2.0", - "browserslist": "^4.3.4", - "invariant": "^2.2.2", - "js-levenshtein": "^1.1.3", - "semver": "^5.3.0" - } - }, - "@babel/runtime": { - "version": "7.10.5", - "resolved": "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.10.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.10.5.tgz", - "integrity": "sha1-MD2L1EDs1aSR6uYRf9M2dphnTFw=", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/runtime-corejs2": { - "version": "7.10.5", - "resolved": "https://registry.npm.taobao.org/@babel/runtime-corejs2/download/@babel/runtime-corejs2-7.10.5.tgz?cache=0&sync_timestamp=1594751489791&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime-corejs2%2Fdownload%2F%40babel%2Fruntime-corejs2-7.10.5.tgz", - "integrity": "sha1-jaoc7MwEaOXC4V8STj9RwrMDO0k=", - "dev": true, - "requires": { - "core-js": "^2.6.5", - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.10.4.tgz", - "integrity": "sha1-MlGZbEIA68cdGo/EBfupQPNrong=", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.10.5", - "resolved": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.10.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.10.5.tgz", - "integrity": "sha1-d85GT1sli+Jlr2GNj93wU28gtWQ=", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.5", - "@babel/types": "^7.10.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.1.1.tgz", - "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.10.5.tgz?cache=0&sync_timestamp=1594750825865&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.10.5.tgz", - "integrity": "sha1-2Irn4v3oa/v+hR1Nga+nCpl7XRU=", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "@hapi/address": { - "version": "2.1.4", - "resolved": "https://registry.npm.taobao.org/@hapi/address/download/@hapi/address-2.1.4.tgz?cache=0&sync_timestamp=1593993745797&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40hapi%2Faddress%2Fdownload%2F%40hapi%2Faddress-2.1.4.tgz", - "integrity": "sha1-XWftQ/P9QaadS5/3tW58DR0KgeU=", - "dev": true - }, - "@hapi/bourne": { - "version": "1.3.2", - "resolved": "https://registry.npm.taobao.org/@hapi/bourne/download/@hapi/bourne-1.3.2.tgz", - "integrity": "sha1-CnCVreoGckPOMoPhtWuKj0U7JCo=", - "dev": true - }, - "@hapi/hoek": { - "version": "8.5.1", - "resolved": "https://registry.npm.taobao.org/@hapi/hoek/download/@hapi/hoek-8.5.1.tgz", - "integrity": "sha1-/elgZMpEbeyMVajC8TCVewcMbgY=", - "dev": true - }, - "@hapi/joi": { - "version": "15.1.1", - "resolved": "https://registry.npm.taobao.org/@hapi/joi/download/@hapi/joi-15.1.1.tgz", - "integrity": "sha1-xnW4pxKW8Cgz+NbSQ7NMV7jOGdc=", - "dev": true, - "requires": { - "@hapi/address": "2.x.x", - "@hapi/bourne": "1.x.x", - "@hapi/hoek": "8.x.x", - "@hapi/topo": "3.x.x" - } - }, - "@hapi/topo": { - "version": "3.1.6", - "resolved": "https://registry.npm.taobao.org/@hapi/topo/download/@hapi/topo-3.1.6.tgz?cache=0&sync_timestamp=1593916080558&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40hapi%2Ftopo%2Fdownload%2F%40hapi%2Ftopo-3.1.6.tgz", - "integrity": "sha1-aNk1+j6uf91asNf5U/MgXYsr/Ck=", - "dev": true, - "requires": { - "@hapi/hoek": "^8.3.0" - } - }, - "@intervolga/optimize-cssnano-plugin": { - "version": "1.0.6", - "resolved": "https://registry.npm.taobao.org/@intervolga/optimize-cssnano-plugin/download/@intervolga/optimize-cssnano-plugin-1.0.6.tgz", - "integrity": "sha1-vnx4RhKLiPapsdEmGgrQbrXA/fg=", - "dev": true, - "requires": { - "cssnano": "^4.0.0", - "cssnano-preset-default": "^4.0.0", - "postcss": "^7.0.0" - } - }, - "@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://registry.npm.taobao.org/@mrmlnc/readdir-enhanced/download/@mrmlnc/readdir-enhanced-2.2.1.tgz", - "integrity": "sha1-UkryQNGjYFJ7cwR17PoTRKpUDd4=", - "dev": true, - "requires": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" - } - }, - "@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-1.1.3.tgz", - "integrity": "sha1-K1o6s/kYzKSKjHVMCBaOPwPrphs=", - "dev": true - }, - "@soda/friendly-errors-webpack-plugin": { - "version": "1.7.1", - "resolved": "https://registry.npm.taobao.org/@soda/friendly-errors-webpack-plugin/download/@soda/friendly-errors-webpack-plugin-1.7.1.tgz", - "integrity": "sha1-cG9kvLSouWQrSK46zkRMcDNNYV0=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "error-stack-parser": "^2.0.0", - "string-width": "^2.0.0" - } - }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/@types/color-name/download/@types/color-name-1.1.1.tgz", - "integrity": "sha1-HBJhu+qhCoBVu8XYq4S3sq/IRqA=", - "dev": true - }, - "@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npm.taobao.org/@types/glob/download/@types/glob-7.1.3.tgz", - "integrity": "sha1-5rqA82t9qtLGhazZJmOC5omFwYM=", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/json-schema": { - "version": "7.0.5", - "resolved": "https://registry.npm.taobao.org/@types/json-schema/download/@types/json-schema-7.0.5.tgz?cache=0&sync_timestamp=1591720749429&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fjson-schema%2Fdownload%2F%40types%2Fjson-schema-7.0.5.tgz", - "integrity": "sha1-3M5EMOZLRDuolF8CkPtWStW6xt0=", - "dev": true - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npm.taobao.org/@types/json5/download/@types/json5-0.0.29.tgz?cache=0&sync_timestamp=1588201498029&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fjson5%2Fdownload%2F%40types%2Fjson5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true - }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npm.taobao.org/@types/minimatch/download/@types/minimatch-3.0.3.tgz", - "integrity": "sha1-PcoOPzOyAPx9ETnAzZbBJoyt/Z0=", - "dev": true - }, - "@types/node": { - "version": "14.0.24", - "resolved": "https://registry.npm.taobao.org/@types/node/download/@types/node-14.0.24.tgz?cache=0&sync_timestamp=1595281751560&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-14.0.24.tgz", - "integrity": "sha1-sPhvWFZPoCooto+LVdTN7ELjudY=", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npm.taobao.org/@types/normalize-package-data/download/@types/normalize-package-data-2.4.0.tgz", - "integrity": "sha1-5IbQ2XOW15vu3QpuM/RTT/a0lz4=", - "dev": true - }, - "@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npm.taobao.org/@types/q/download/@types/q-1.5.4.tgz", - "integrity": "sha1-FZJUFOCtLNdlv+9YhC9+JqesyyQ=", - "dev": true - }, - "@vue/babel-helper-vue-jsx-merge-props": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/@vue/babel-helper-vue-jsx-merge-props/download/@vue/babel-helper-vue-jsx-merge-props-1.0.0.tgz", - "integrity": "sha1-BI/leZWNpAj7eosqPsBQtQpmEEA=", - "dev": true - }, - "@vue/babel-plugin-transform-vue-jsx": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/@vue/babel-plugin-transform-vue-jsx/download/@vue/babel-plugin-transform-vue-jsx-1.1.2.tgz", - "integrity": "sha1-wKPm78Ai515CR7RIqPxrhvA+kcA=", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.2.0", - "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0", - "html-tags": "^2.0.0", - "lodash.kebabcase": "^4.1.1", - "svg-tags": "^1.0.0" - } - }, - "@vue/babel-preset-app": { - "version": "3.12.1", - "resolved": "https://registry.npm.taobao.org/@vue/babel-preset-app/download/@vue/babel-preset-app-3.12.1.tgz", - "integrity": "sha1-JMR3BS8HjzD9t3NRA7FN0fosv+E=", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-decorators": "^7.1.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.4.0", - "@babel/preset-env": "^7.0.0 < 7.4.0", - "@babel/runtime": "^7.0.0", - "@babel/runtime-corejs2": "^7.2.0", - "@vue/babel-preset-jsx": "^1.0.0", - "babel-plugin-dynamic-import-node": "^2.2.0", - "babel-plugin-module-resolver": "3.2.0", - "core-js": "^2.6.5" - } - }, - "@vue/babel-preset-jsx": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/@vue/babel-preset-jsx/download/@vue/babel-preset-jsx-1.1.2.tgz", - "integrity": "sha1-LhaetMIE6jfKZsLqhaiAv8mdTyA=", - "dev": true, - "requires": { - "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0", - "@vue/babel-plugin-transform-vue-jsx": "^1.1.2", - "@vue/babel-sugar-functional-vue": "^1.1.2", - "@vue/babel-sugar-inject-h": "^1.1.2", - "@vue/babel-sugar-v-model": "^1.1.2", - "@vue/babel-sugar-v-on": "^1.1.2" - } - }, - "@vue/babel-sugar-functional-vue": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-functional-vue/download/@vue/babel-sugar-functional-vue-1.1.2.tgz", - "integrity": "sha1-9+JPugnm8e5wEEVgqICAV1VfGpo=", - "dev": true, - "requires": { - "@babel/plugin-syntax-jsx": "^7.2.0" - } - }, - "@vue/babel-sugar-inject-h": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-inject-h/download/@vue/babel-sugar-inject-h-1.1.2.tgz", - "integrity": "sha1-ilJ2ttji7Rb/yAeKrZQjYnTm7fA=", - "dev": true, - "requires": { - "@babel/plugin-syntax-jsx": "^7.2.0" - } - }, - "@vue/babel-sugar-v-model": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-v-model/download/@vue/babel-sugar-v-model-1.1.2.tgz", - "integrity": "sha1-H/b9G4ACI/ycsehNzrXlLXN6gZI=", - "dev": true, - "requires": { - "@babel/plugin-syntax-jsx": "^7.2.0", - "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0", - "@vue/babel-plugin-transform-vue-jsx": "^1.1.2", - "camelcase": "^5.0.0", - "html-tags": "^2.0.0", - "svg-tags": "^1.0.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz", - "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", - "dev": true - } - } - }, - "@vue/babel-sugar-v-on": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-v-on/download/@vue/babel-sugar-v-on-1.1.2.tgz", - "integrity": "sha1-su+ZuPL6sJ++rSWq1w70Lhz1sTs=", - "dev": true, - "requires": { - "@babel/plugin-syntax-jsx": "^7.2.0", - "@vue/babel-plugin-transform-vue-jsx": "^1.1.2", - "camelcase": "^5.0.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz", - "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", - "dev": true - } - } - }, - "@vue/cli-overlay": { - "version": "3.12.1", - "resolved": "https://registry.npm.taobao.org/@vue/cli-overlay/download/@vue/cli-overlay-3.12.1.tgz?cache=0&sync_timestamp=1592976328085&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fcli-overlay%2Fdownload%2F%40vue%2Fcli-overlay-3.12.1.tgz", - "integrity": "sha1-vf3o9xI1YasG5OTGC4VMxQkvWrE=", - "dev": true - }, - "@vue/cli-plugin-babel": { - "version": "3.12.1", - "resolved": "https://registry.npm.taobao.org/@vue/cli-plugin-babel/download/@vue/cli-plugin-babel-3.12.1.tgz", - "integrity": "sha1-mnkVnejNCGsBP6bXijmDCy4uxwY=", - "dev": true, - "requires": { - "@babel/core": "^7.0.0", - "@vue/babel-preset-app": "^3.12.1", - "@vue/cli-shared-utils": "^3.12.1", - "babel-loader": "^8.0.5", - "webpack": "^4.0.0" - } - }, - "@vue/cli-plugin-eslint": { - "version": "3.12.1", - "resolved": "https://registry.npm.taobao.org/@vue/cli-plugin-eslint/download/@vue/cli-plugin-eslint-3.12.1.tgz", - "integrity": "sha1-MCxGOGfzjnkLuZbq/fcVnHgtyM8=", - "dev": true, - "requires": { - "@vue/cli-shared-utils": "^3.12.1", - "babel-eslint": "^10.0.1", - "eslint": "^4.19.1", - "eslint-loader": "^2.1.2", - "eslint-plugin-vue": "^4.7.1", - "globby": "^9.2.0", - "webpack": "^4.0.0", - "yorkie": "^2.0.0" - } - }, - "@vue/cli-plugin-unit-mocha": { - "version": "3.12.1", - "resolved": "https://registry.npm.taobao.org/@vue/cli-plugin-unit-mocha/download/@vue/cli-plugin-unit-mocha-3.12.1.tgz?cache=0&sync_timestamp=1592978125871&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fcli-plugin-unit-mocha%2Fdownload%2F%40vue%2Fcli-plugin-unit-mocha-3.12.1.tgz", - "integrity": "sha1-lwxTZHW/RwqoVLDUzEFO2bJCZjY=", - "dev": true, - "requires": { - "@vue/cli-shared-utils": "^3.12.1", - "jsdom": "^13.2.0", - "jsdom-global": "^3.0.2", - "mocha": "^5.2.0", - "mocha-webpack": "^2.0.0-beta.0" - } - }, - "@vue/cli-service": { - "version": "3.12.1", - "resolved": "https://registry.npm.taobao.org/@vue/cli-service/download/@vue/cli-service-3.12.1.tgz", - "integrity": "sha1-EyILHBiSVOfAAzkN8ykIb5tud+Y=", - "dev": true, - "requires": { - "@intervolga/optimize-cssnano-plugin": "^1.0.5", - "@soda/friendly-errors-webpack-plugin": "^1.7.1", - "@vue/cli-overlay": "^3.12.1", - "@vue/cli-shared-utils": "^3.12.1", - "@vue/component-compiler-utils": "^3.0.0", - "@vue/preload-webpack-plugin": "^1.1.0", - "@vue/web-component-wrapper": "^1.2.0", - "acorn": "^6.1.1", - "acorn-walk": "^6.1.1", - "address": "^1.0.3", - "autoprefixer": "^9.5.1", - "browserslist": "^4.5.4", - "cache-loader": "^2.0.1", - "case-sensitive-paths-webpack-plugin": "^2.2.0", - "chalk": "^2.4.2", - "cli-highlight": "^2.1.0", - "clipboardy": "^2.0.0", - "cliui": "^5.0.0", - "copy-webpack-plugin": "^4.6.0", - "css-loader": "^1.0.1", - "cssnano": "^4.1.10", - "current-script-polyfill": "^1.0.0", - "debug": "^4.1.1", - "default-gateway": "^5.0.2", - "dotenv": "^7.0.0", - "dotenv-expand": "^5.1.0", - "escape-string-regexp": "^1.0.5", - "file-loader": "^3.0.1", - "fs-extra": "^7.0.1", - "globby": "^9.2.0", - "hash-sum": "^1.0.2", - "html-webpack-plugin": "^3.2.0", - "launch-editor-middleware": "^2.2.1", - "lodash.defaultsdeep": "^4.6.1", - "lodash.mapvalues": "^4.6.0", - "lodash.transform": "^4.6.0", - "mini-css-extract-plugin": "^0.8.0", - "minimist": "^1.2.0", - "ora": "^3.4.0", - "portfinder": "^1.0.20", - "postcss-loader": "^3.0.0", - "read-pkg": "^5.0.0", - "semver": "^6.0.0", - "slash": "^2.0.0", - "source-map-url": "^0.4.0", - "ssri": "^6.0.1", - "string.prototype.padend": "^3.0.0", - "terser-webpack-plugin": "^1.2.3", - "thread-loader": "^2.1.2", - "url-loader": "^1.1.2", - "vue-loader": "^15.7.0", - "webpack": "^4.0.0", - "webpack-bundle-analyzer": "^3.3.0", - "webpack-chain": "^4.11.0", - "webpack-dev-server": "^3.4.1", - "webpack-merge": "^4.2.1" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz", - "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-5.0.0.tgz", - "integrity": "sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U=", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.1.1.tgz", - "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz", - "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz", - "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz", - "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz", - "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-5.1.0.tgz", - "integrity": "sha1-H9H2cjXVttD+54EFYAG/tpTAOwk=", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - } - } - }, - "@vue/cli-shared-utils": { - "version": "3.12.1", - "resolved": "https://registry.npm.taobao.org/@vue/cli-shared-utils/download/@vue/cli-shared-utils-3.12.1.tgz", - "integrity": "sha1-vPB2KH3a3uu7l8anSN/p/1DsjfA=", - "dev": true, - "requires": { - "@hapi/joi": "^15.0.1", - "chalk": "^2.4.1", - "execa": "^1.0.0", - "launch-editor": "^2.2.1", - "lru-cache": "^5.1.1", - "node-ipc": "^9.1.1", - "open": "^6.3.0", - "ora": "^3.4.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.7", - "semver": "^6.0.0", - "string.prototype.padstart": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz", - "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@vue/component-compiler-utils": { - "version": "3.1.2", - "resolved": "https://registry.npm.taobao.org/@vue/component-compiler-utils/download/@vue/component-compiler-utils-3.1.2.tgz", - "integrity": "sha1-ghOl/zIC+fITf+VTcPnouWVggcM=", - "dev": true, - "requires": { - "consolidate": "^0.15.1", - "hash-sum": "^1.0.2", - "lru-cache": "^4.1.2", - "merge-source-map": "^1.1.0", - "postcss": "^7.0.14", - "postcss-selector-parser": "^6.0.2", - "prettier": "^1.18.2", - "source-map": "~0.6.1", - "vue-template-es2015-compiler": "^1.9.0" - }, - "dependencies": { - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz?cache=0&sync_timestamp=1594427569171&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-4.1.5.tgz", - "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } - }, - "@vue/eslint-config-standard": { - "version": "3.0.5", - "resolved": "https://registry.npm.taobao.org/@vue/eslint-config-standard/download/@vue/eslint-config-standard-3.0.5.tgz", - "integrity": "sha1-fWroCerskJk8YDPZVD9I9oe56/E=", - "dev": true, - "requires": { - "eslint-config-standard": "^12.0.0-alpha.0", - "eslint-plugin-import": "^2.11.0", - "eslint-plugin-node": "^6.0.1", - "eslint-plugin-promise": "^3.7.0", - "eslint-plugin-standard": "^3.1.0" - } - }, - "@vue/preload-webpack-plugin": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/@vue/preload-webpack-plugin/download/@vue/preload-webpack-plugin-1.1.1.tgz", - "integrity": "sha1-GHI1MNME9EMCHaIpLW7JUCgmEEo=", - "dev": true - }, - "@vue/test-utils": { - "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/@vue/test-utils/download/@vue/test-utils-1.0.3.tgz", - "integrity": "sha1-WHxN2bQktmAi8YjBm8YF2izpHG8=", - "dev": true, - "requires": { - "dom-event-types": "^1.0.0", - "lodash": "^4.17.15", - "pretty": "^2.0.0" - } - }, - "@vue/web-component-wrapper": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/@vue/web-component-wrapper/download/@vue/web-component-wrapper-1.2.0.tgz", - "integrity": "sha1-uw5G8VhafiibTuYGfcxaauYvHdE=", - "dev": true - }, - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npm.taobao.org/@webassemblyjs/ast/download/@webassemblyjs/ast-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fast%2Fdownload%2F%40webassemblyjs%2Fast-1.9.0.tgz", - "integrity": "sha1-vYUGBLQEJFmlpBzX0zjL7Wle2WQ=", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npm.taobao.org/@webassemblyjs/floating-point-hex-parser/download/@webassemblyjs/floating-point-hex-parser-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Ffloating-point-hex-parser%2Fdownload%2F%40webassemblyjs%2Ffloating-point-hex-parser-1.9.0.tgz", - "integrity": "sha1-PD07Jxvd/ITesA9xNEQ4MR1S/7Q=", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-api-error/download/@webassemblyjs/helper-api-error-1.9.0.tgz", - "integrity": "sha1-ID9nbjM7lsnaLuqzzO8zxFkotqI=", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-buffer/download/@webassemblyjs/helper-buffer-1.9.0.tgz?cache=0&sync_timestamp=1580600188490&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-buffer%2Fdownload%2F%40webassemblyjs%2Fhelper-buffer-1.9.0.tgz", - "integrity": "sha1-oUQtJpxf6yP8vJ73WdrDVH8p3gA=", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-code-frame/download/@webassemblyjs/helper-code-frame-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-code-frame%2Fdownload%2F%40webassemblyjs%2Fhelper-code-frame-1.9.0.tgz", - "integrity": "sha1-ZH+Iks0gQ6gqwMjF51w28dkVnyc=", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-fsm/download/@webassemblyjs/helper-fsm-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-fsm%2Fdownload%2F%40webassemblyjs%2Fhelper-fsm-1.9.0.tgz", - "integrity": "sha1-wFJWtxJEIUZx9LCOwQitY7cO3bg=", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-module-context/download/@webassemblyjs/helper-module-context-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-module-context%2Fdownload%2F%40webassemblyjs%2Fhelper-module-context-1.9.0.tgz", - "integrity": "sha1-JdiIS3aDmHGgimxvgGw5ee9xLwc=", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-wasm-bytecode/download/@webassemblyjs/helper-wasm-bytecode-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-wasm-bytecode%2Fdownload%2F%40webassemblyjs%2Fhelper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha1-T+2L6sm4wU+MWLcNEk1UndH+V5A=", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-wasm-section/download/@webassemblyjs/helper-wasm-section-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-wasm-section%2Fdownload%2F%40webassemblyjs%2Fhelper-wasm-section-1.9.0.tgz", - "integrity": "sha1-WkE41aYpK6GLBMWuSXF+QWeWU0Y=", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npm.taobao.org/@webassemblyjs/ieee754/download/@webassemblyjs/ieee754-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fieee754%2Fdownload%2F%40webassemblyjs%2Fieee754-1.9.0.tgz", - "integrity": "sha1-Fceg+6roP7JhQ7us9tbfFwKtOeQ=", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npm.taobao.org/@webassemblyjs/leb128/download/@webassemblyjs/leb128-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fleb128%2Fdownload%2F%40webassemblyjs%2Fleb128-1.9.0.tgz", - "integrity": "sha1-8Zygt2ptxVYjoJz/p2noOPoeHJU=", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npm.taobao.org/@webassemblyjs/utf8/download/@webassemblyjs/utf8-1.9.0.tgz", - "integrity": "sha1-BNM7Y2945qaBMifoJAL3Y3tiKas=", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-edit/download/@webassemblyjs/wasm-edit-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwasm-edit%2Fdownload%2F%40webassemblyjs%2Fwasm-edit-1.9.0.tgz", - "integrity": "sha1-P+bXnT8PkiGDqoYALELdJWz+6c8=", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-gen/download/@webassemblyjs/wasm-gen-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwasm-gen%2Fdownload%2F%40webassemblyjs%2Fwasm-gen-1.9.0.tgz", - "integrity": "sha1-ULxw7Gje2OJ2OwGhQYv0NJGnpJw=", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-opt/download/@webassemblyjs/wasm-opt-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwasm-opt%2Fdownload%2F%40webassemblyjs%2Fwasm-opt-1.9.0.tgz", - "integrity": "sha1-IhEYHlsxMmRDzIES658LkChyGmE=", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-parser/download/@webassemblyjs/wasm-parser-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwasm-parser%2Fdownload%2F%40webassemblyjs%2Fwasm-parser-1.9.0.tgz", - "integrity": "sha1-nUjkSCbfSmWYKUqmyHRp1kL/9l4=", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wast-parser/download/@webassemblyjs/wast-parser-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwast-parser%2Fdownload%2F%40webassemblyjs%2Fwast-parser-1.9.0.tgz", - "integrity": "sha1-MDERXXmsW9JhVWzsw/qQo+9FGRQ=", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wast-printer/download/@webassemblyjs/wast-printer-1.9.0.tgz?cache=0&sync_timestamp=1580599638157&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwast-printer%2Fdownload%2F%40webassemblyjs%2Fwast-printer-1.9.0.tgz", - "integrity": "sha1-STXVTIX+9jewDOn1I3dFHQDUeJk=", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/@xtuc/ieee754/download/@xtuc/ieee754-1.2.0.tgz", - "integrity": "sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A=", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npm.taobao.org/@xtuc/long/download/@xtuc/long-4.2.2.tgz", - "integrity": "sha1-0pHGpOl5ibXGHZrPOWrk/hM6cY0=", - "dev": true - }, - "abab": { - "version": "2.0.3", - "resolved": "https://registry.npm.taobao.org/abab/download/abab-2.0.3.tgz", - "integrity": "sha1-Yj4gdeAustPyR15J+ZyRhGRnkHo=", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz", - "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz", - "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=", - "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-6.4.1.tgz?cache=0&sync_timestamp=1591869432510&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-6.4.1.tgz", - "integrity": "sha1-Ux5Yuj9RudrLmmZGyk3r9bFMpHQ=", - "dev": true - }, - "acorn-globals": { - "version": "4.3.4", - "resolved": "https://registry.npm.taobao.org/acorn-globals/download/acorn-globals-4.3.4.tgz", - "integrity": "sha1-n6GSat3BHJcwjE5m163Q1Awycuc=", - "dev": true, - "requires": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" - } - }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, - "optional": true, - "requires": { - "acorn": "^3.0.4" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-3.3.0.tgz?cache=0&sync_timestamp=1591869432510&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true, - "optional": true - } - } - }, - "acorn-walk": { - "version": "6.2.0", - "resolved": "https://registry.npm.taobao.org/acorn-walk/download/acorn-walk-6.2.0.tgz", - "integrity": "sha1-Ejy487hMIXHx9/slJhWxx4prGow=", - "dev": true - }, - "address": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/address/download/address-1.1.2.tgz?cache=0&sync_timestamp=1588851806210&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faddress%2Fdownload%2Faddress-1.1.2.tgz", - "integrity": "sha1-vxEWycdYxRt6kz0pa3LCIe2UKLY=", - "dev": true - }, - "adler-32": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/adler-32/download/adler-32-1.2.0.tgz", - "integrity": "sha1-aj5r8KY5ALoVZSgIyxXGgT0aXyU=", - "requires": { - "exit-on-epipe": "~1.0.1", - "printj": "~1.1.0" - } - }, - "aggregate-error": { - "version": "3.0.1", - "resolved": "https://registry.npm.taobao.org/aggregate-error/download/aggregate-error-3.0.1.tgz?cache=0&sync_timestamp=1570167911603&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faggregate-error%2Fdownload%2Faggregate-error-3.0.1.tgz", - "integrity": "sha1-2y/nJG5Tb0DZtUQqOeEX191qJOA=", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.3", - "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.3.tgz", - "integrity": "sha1-GMWvOKER3etPJpe9eNaKvByr1wY=", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/ajv-errors/download/ajv-errors-1.0.1.tgz", - "integrity": "sha1-81mGrOuRr63sQQL72FAUlQzvpk0=", - "dev": true - }, - "ajv-keywords": { - "version": "3.5.1", - "resolved": "https://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.5.1.tgz", - "integrity": "sha1-uDyonF1C1pAx9CTK1JqtoCNsaVc=", - "dev": true - }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npm.taobao.org/align-text/download/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - } - }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/alphanum-sort/download/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", - "dev": true - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" - }, - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-3.2.4.tgz", - "integrity": "sha1-46PaS/uubIapwoViXeEkojQCb78=", - "dev": true - }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-3.2.0.tgz", - "integrity": "sha1-h4C5j/nb9WOBUtHx/lwde0RCl2s=", - "dev": true, - "optional": true - }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npm.taobao.org/ansi-html/download/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "any-observable": { - "version": "0.2.0", - "resolved": "https://registry.npm.taobao.org/any-observable/download/any-observable-0.2.0.tgz", - "integrity": "sha1-xnhwBYADV5AJCD9UrAq6+1wz0kI=", - "dev": true - }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npm.taobao.org/any-promise/download/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", - "dev": true - }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.1.tgz", - "integrity": "sha1-xV7PAhheJGklk5kxDBc84xIzsUI=", - "dev": true, - "optional": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "app-root-path": { - "version": "2.2.1", - "resolved": "https://registry.npm.taobao.org/app-root-path/download/app-root-path-2.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fapp-root-path%2Fdownload%2Fapp-root-path-2.2.1.tgz", - "integrity": "sha1-0N9KaC7kCCc1g9Q/b3npiSYkvJo=", - "dev": true - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/aproba/download/aproba-1.2.0.tgz", - "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=", - "dev": true - }, - "arch": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/arch/download/arch-2.1.2.tgz", - "integrity": "sha1-DFK75zRLtPomDEQ9LLrZwA/y8L8=", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz", - "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz", - "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/array-equal/download/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-flatten%2Fdownload%2Farray-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "array-includes": { - "version": "3.1.1", - "resolved": "https://registry.npm.taobao.org/array-includes/download/array-includes-3.1.1.tgz", - "integrity": "sha1-zdZ+aFK9+cEhVGB4ZzIlXtJFk0g=", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0", - "is-string": "^1.0.5" - } - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/array-union/download/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/array-uniq/download/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "array.prototype.flat": { - "version": "1.2.3", - "resolved": "https://registry.npm.taobao.org/array.prototype.flat/download/array.prototype.flat-1.2.3.tgz", - "integrity": "sha1-DegrQmsDGNv9uUAInjiwQ9N/bHs=", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true, - "optional": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz", - "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npm.taobao.org/asn1.js/download/asn1.js-4.10.1.tgz", - "integrity": "sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA=", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz", - "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=", - "dev": true - } - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npm.taobao.org/assert/download/assert-1.5.0.tgz", - "integrity": "sha1-VcEJqvbgrv2z3EtxJAxwv1dLGOs=", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npm.taobao.org/util/download/util-0.10.3.tgz?cache=0&sync_timestamp=1588238457176&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil%2Fdownload%2Futil-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/assertion-error/download/assertion-error-1.1.0.tgz", - "integrity": "sha1-5gtrDo8wG9l+U3UhW9pAbIURjAs=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npm.taobao.org/async/download/async-2.6.3.tgz", - "integrity": "sha1-1yYl4jRKNlbjo61Pp0n6gymdgv8=", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/async-each/download/async-each-1.0.3.tgz", - "integrity": "sha1-tyfb+H12UWAvBvTUrDh/R9kbDL8=", - "dev": true - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.1.tgz?cache=0&sync_timestamp=1574272018408&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fasync-limiter%2Fdownload%2Fasync-limiter-1.0.1.tgz", - "integrity": "sha1-3TeelPDbgxCwgpH51kwyCXZmF/0=", - "dev": true - }, - "async-validator": { - "version": "1.12.2", - "resolved": "https://registry.npm.taobao.org/async-validator/download/async-validator-1.12.2.tgz", - "integrity": "sha1-vq5nHnF00pOLe0tp0vt+cit/1yw=" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz", - "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=", - "dev": true - }, - "autoprefixer": { - "version": "9.8.5", - "resolved": "https://registry.npm.taobao.org/autoprefixer/download/autoprefixer-9.8.5.tgz?cache=0&sync_timestamp=1594444612318&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fautoprefixer%2Fdownload%2Fautoprefixer-9.8.5.tgz", - "integrity": "sha1-LCJd4indr+HRQkwCeR0MPhDMzKo=", - "dev": true, - "requires": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001097", - "colorette": "^1.2.0", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - } - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.10.0", - "resolved": "https://registry.npm.taobao.org/aws4/download/aws4-1.10.0.tgz", - "integrity": "sha1-oXs6jqgRBg501H0wYSJACtRJeuI=", - "dev": true - }, - "axios": { - "version": "0.18.1", - "resolved": "https://registry.npm.taobao.org/axios/download/axios-0.18.1.tgz", - "integrity": "sha1-/z8N4ue10YDnV62YAA8Qgbh7zqM=", - "requires": { - "follow-redirects": "1.5.10", - "is-buffer": "^2.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-2.0.4.tgz", - "integrity": "sha1-PlcvI8hBGlz9lVfISeNmXgspBiM=" - } - } - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npm.taobao.org/babel-code-frame/download/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, - "dependencies": { - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npm.taobao.org/js-tokens/download/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - } - } - }, - "babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npm.taobao.org/babel-eslint/download/babel-eslint-10.1.0.tgz", - "integrity": "sha1-aWjlaKkQt4+zd5zdi2rC9HmUMjI=", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - } - }, - "babel-loader": { - "version": "8.1.0", - "resolved": "https://registry.npm.taobao.org/babel-loader/download/babel-loader-8.1.0.tgz", - "integrity": "sha1-xhHVESvVIJq+i5+oTD5NolJ18cM=", - "dev": true, - "requires": { - "find-cache-dir": "^2.1.0", - "loader-utils": "^1.4.0", - "mkdirp": "^0.5.3", - "pify": "^4.0.1", - "schema-utils": "^2.6.5" - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npm.taobao.org/babel-plugin-dynamic-import-node/download/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha1-hP2hnJduxcbe/vV/lCez3vZuF6M=", - "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-module-resolver": { - "version": "3.2.0", - "resolved": "https://registry.npm.taobao.org/babel-plugin-module-resolver/download/babel-plugin-module-resolver-3.2.0.tgz", - "integrity": "sha1-3fpeMB47mqEthSqZefGLN4gf9ac=", - "dev": true, - "requires": { - "find-babel-config": "^1.1.0", - "glob": "^7.1.2", - "pkg-up": "^2.0.0", - "reselect": "^3.0.1", - "resolve": "^1.4.0" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz?cache=0&sync_timestamp=1584052597708&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.11.1.tgz", - "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=", - "dev": true - } - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npm.taobao.org/base/download/base-0.11.2.tgz", - "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", - "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", - "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz", - "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", - "dev": true - } - } - }, - "base64-arraybuffer": { - "version": "0.2.0", - "resolved": "https://registry.npm.taobao.org/base64-arraybuffer/download/base64-arraybuffer-0.2.0.tgz", - "integrity": "sha1-S5RPrAGRqlkHr+LYyZnMxXzoD0U=" - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npm.taobao.org/base64-js/download/base64-js-1.3.1.tgz", - "integrity": "sha1-WOzoy3XdB+ce0IxzarxfrE2/jfE=", - "dev": true - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/batch/download/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "batch-processor": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/batch-processor/download/batch-processor-1.0.0.tgz", - "integrity": "sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg=" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bfj": { - "version": "6.1.2", - "resolved": "https://registry.npm.taobao.org/bfj/download/bfj-6.1.2.tgz", - "integrity": "sha1-MlyGGoIryzWKQceKM7jm4ght3n8=", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "check-types": "^8.0.3", - "hoopy": "^0.1.4", - "tryer": "^1.0.1" - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npm.taobao.org/big.js/download/big.js-5.2.2.tgz", - "integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg=", - "dev": true - }, - "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.1.0.tgz?cache=0&sync_timestamp=1593261363626&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-2.1.0.tgz", - "integrity": "sha1-MPpAyef+B9vIlWeM0ocCTeokHdk=", - "dev": true, - "optional": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npm.taobao.org/bindings/download/bindings-1.5.0.tgz", - "integrity": "sha1-EDU8npRTNLwFEabZCzj7x8nFBN8=", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npm.taobao.org/bluebird/download/bluebird-3.7.2.tgz", - "integrity": "sha1-nyKcFb4nJFT/qXOs4NvueaGww28=", - "dev": true - }, - "bn.js": { - "version": "5.1.2", - "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-5.1.2.tgz", - "integrity": "sha1-yWhpAtPJoncp9DqxD515wgBNp7A=", - "dev": true - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npm.taobao.org/body-parser/download/body-parser-1.19.0.tgz", - "integrity": "sha1-lrJwnlfJxOCab9Zqj9l5hE9p8Io=", - "dev": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.7.0.tgz", - "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=", - "dev": true - } - } - }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npm.taobao.org/bonjour/download/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dev": true, - "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - }, - "dependencies": { - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-2.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-flatten%2Fdownload%2Farray-flatten-2.1.2.tgz", - "integrity": "sha1-JO+AoowaiTYX4hSbDG0NeIKTsJk=", - "dev": true - } - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/boolbase/download/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npm.taobao.org/boom/download/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, - "optional": true, - "requires": { - "hoek": "2.x.x" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz", - "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz", - "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/brorand/download/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/browser-process-hrtime/download/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha1-PJtLfXgsgSHlbxAQbYTA0P/JRiY=", - "dev": true - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npm.taobao.org/browser-stdout/download/browser-stdout-1.3.1.tgz", - "integrity": "sha1-uqVZ7hTO1zRSIputcyZGfGH6vWA=", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/browserify-aes/download/browserify-aes-1.2.0.tgz", - "integrity": "sha1-Mmc0ZC9APavDADIJhTu3CtQo70g=", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/browserify-cipher/download/browserify-cipher-1.0.1.tgz", - "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/browserify-des/download/browserify-des-1.0.2.tgz", - "integrity": "sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw=", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npm.taobao.org/browserify-rsa/download/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz", - "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=", - "dev": true - } - } - }, - "browserify-sign": { - "version": "4.2.0", - "resolved": "https://registry.npm.taobao.org/browserify-sign/download/browserify-sign-4.2.0.tgz", - "integrity": "sha1-VF0LGwfmssmSEQgr8bEsznoLDhE=", - "dev": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.2", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz", - "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz", - "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=", - "dev": true - } - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npm.taobao.org/browserify-zlib/download/browserify-zlib-0.2.0.tgz", - "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=", - "dev": true, - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.13.0", - "resolved": "https://registry.npm.taobao.org/browserslist/download/browserslist-4.13.0.tgz?cache=0&sync_timestamp=1593912387376&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrowserslist%2Fdownload%2Fbrowserslist-4.13.0.tgz", - "integrity": "sha1-QlVsugEeGwondbYRy6ao7KGOlA0=", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001093", - "electron-to-chromium": "^1.3.488", - "escalade": "^3.0.1", - "node-releases": "^1.1.58" - } - }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npm.taobao.org/buffer/download/buffer-4.9.2.tgz?cache=0&sync_timestamp=1588706716358&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbuffer%2Fdownload%2Fbuffer-4.9.2.tgz", - "integrity": "sha1-Iw6tNEACmIZEhBqwJEr4xEu+Pvg=", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz", - "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=", - "dev": true - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/buffer-indexof/download/buffer-indexof-1.1.1.tgz", - "integrity": "sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow=", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/buffer-xor/download/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbytes%2Fdownload%2Fbytes-3.1.0.tgz", - "integrity": "sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY=", - "dev": true - }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npm.taobao.org/cacache/download/cacache-12.0.4.tgz?cache=0&sync_timestamp=1594429684526&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-12.0.4.tgz", - "integrity": "sha1-ZovL0QWutfHZL+JVcOyVJcj6pAw=", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/cache-base/download/cache-base-1.0.1.tgz", - "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "cache-loader": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/cache-loader/download/cache-loader-2.0.1.tgz", - "integrity": "sha1-V1j0GmLXwjlB48PHAW5vrrA6ywc=", - "dev": true, - "requires": { - "loader-utils": "^1.1.0", - "mkdirp": "^0.5.1", - "neo-async": "^2.6.0", - "normalize-path": "^3.0.0", - "schema-utils": "^1.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz", - "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/call-me-maybe/download/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/caller-callsite/download/caller-callsite-2.0.0.tgz?cache=0&sync_timestamp=1562668933683&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcaller-callsite%2Fdownload%2Fcaller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dev": true, - "requires": { - "callsites": "^2.0.0" - }, - "dependencies": { - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/callsites/download/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - } - } - }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npm.taobao.org/caller-path/download/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "optional": true, - "requires": { - "callsites": "^0.2.0" - } - }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npm.taobao.org/callsites/download/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true, - "optional": true - }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/camel-case/download/camel-case-3.0.0.tgz?cache=0&sync_timestamp=1576748709736&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamel-case%2Fdownload%2Fcamel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "dev": true, - "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" - } - }, - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/caniuse-api/download/caniuse-api-3.0.0.tgz", - "integrity": "sha1-Xk2Q4idJYdRikZl99Znj7QCO5MA=", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001104", - "resolved": "https://registry.npm.taobao.org/caniuse-lite/download/caniuse-lite-1.0.30001104.tgz?cache=0&sync_timestamp=1595226955587&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcaniuse-lite%2Fdownload%2Fcaniuse-lite-1.0.30001104.tgz", - "integrity": "sha1-Tj1bOx3Tw1KfEMt/UZxiuj5Xn10=", - "dev": true - }, - "case-sensitive-paths-webpack-plugin": { - "version": "2.3.0", - "resolved": "https://registry.npm.taobao.org/case-sensitive-paths-webpack-plugin/download/case-sensitive-paths-webpack-plugin-2.3.0.tgz", - "integrity": "sha1-I6xhPMmoVuT4j/i7c7u16YmCXPc=", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npm.taobao.org/center-align/download/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - } - }, - "cfb": { - "version": "1.0.8", - "resolved": "https://registry.npm.taobao.org/cfb/download/cfb-1.0.8.tgz?cache=0&sync_timestamp=1594276069691&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcfb%2Fdownload%2Fcfb-1.0.8.tgz", - "integrity": "sha1-d/ITST1pfXVP2cD1UR6rWtctAs8=", - "requires": { - "commander": "^2.14.1", - "printj": "~1.1.2" - } - }, - "chai": { - "version": "4.2.0", - "resolved": "https://registry.npm.taobao.org/chai/download/chai-4.2.0.tgz", - "integrity": "sha1-dgqnLPION5XoSxKHfODoNzeqKeU=", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.0", - "type-detect": "^4.0.5" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npm.taobao.org/chardet/download/chardet-0.4.2.tgz?cache=0&sync_timestamp=1594010705529&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchardet%2Fdownload%2Fchardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", - "dev": true, - "optional": true - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/check-error/download/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true - }, - "check-types": { - "version": "8.0.3", - "resolved": "https://registry.npm.taobao.org/check-types/download/check-types-8.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcheck-types%2Fdownload%2Fcheck-types-8.0.3.tgz", - "integrity": "sha1-M1bMoZyIlUTy16le1JzlCKDs9VI=", - "dev": true - }, - "chokidar": { - "version": "3.4.1", - "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-3.4.1.tgz?cache=0&sync_timestamp=1594864731636&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-3.4.1.tgz", - "integrity": "sha1-6QW97PEOqgoLHbDGZEgcxMvCK6E=", - "dev": true, - "optional": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.4.0" - }, - "dependencies": { - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz", - "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=", - "dev": true, - "optional": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz", - "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=", - "dev": true, - "optional": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz", - "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=", - "dev": true, - "optional": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz", - "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=", - "dev": true, - "optional": true, - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npm.taobao.org/chownr/download/chownr-1.1.4.tgz", - "integrity": "sha1-b8nXtC0ypYNZYzdmbn0ICE2izGs=", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/chrome-trace-event/download/chrome-trace-event-1.0.2.tgz", - "integrity": "sha1-I0CQ7pfH1K0aLEvq4nUF3v/GCKQ=", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npm.taobao.org/ci-info/download/ci-info-1.6.0.tgz", - "integrity": "sha1-LKINu5zrMtRSSmgzAzE/AwSx5Jc=", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npm.taobao.org/cipher-base/download/cipher-base-1.0.4.tgz", - "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npm.taobao.org/circular-json/download/circular-json-0.3.3.tgz", - "integrity": "sha1-gVyZ6oT2gJUp0vRXkb34JxE1LWY=", - "dev": true, - "optional": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz", - "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npm.taobao.org/clean-css/download/clean-css-4.2.3.tgz", - "integrity": "sha1-UHtd59l7SO5T2ErbAWD/YhY4D3g=", - "dev": true, - "requires": { - "source-map": "~0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - } - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npm.taobao.org/clean-stack/download/clean-stack-2.2.0.tgz?cache=0&sync_timestamp=1592035230294&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclean-stack%2Fdownload%2Fclean-stack-2.2.0.tgz", - "integrity": "sha1-7oRy27Ep5yezHooQpCfe6d/kAIs=", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-highlight": { - "version": "2.1.4", - "resolved": "https://registry.npm.taobao.org/cli-highlight/download/cli-highlight-2.1.4.tgz?cache=0&sync_timestamp=1573948719956&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcli-highlight%2Fdownload%2Fcli-highlight-2.1.4.tgz", - "integrity": "sha1-CYy2Qs8X9CrcHBFF4H+WDsTXUis=", - "dev": true, - "requires": { - "chalk": "^3.0.0", - "highlight.js": "^9.6.0", - "mz": "^2.4.0", - "parse5": "^5.1.1", - "parse5-htmlparser2-tree-adapter": "^5.1.1", - "yargs": "^15.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz", - "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=", - "dev": true - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.2.1.tgz", - "integrity": "sha1-kK51xCTQCNJiTFvynq0xd+v881k=", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz", - "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", - "dev": true - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-3.0.0.tgz", - "integrity": "sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ=", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-6.0.0.tgz", - "integrity": "sha1-UR1wLAxOQcoVbX0OlgIfI+EyJbE=", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-4.1.0.tgz", - "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz", - "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-5.0.0.tgz", - "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-2.3.0.tgz?cache=0&sync_timestamp=1594559696906&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-2.3.0.tgz", - "integrity": "sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-4.1.0.tgz", - "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz", - "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=", - "dev": true - }, - "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npm.taobao.org/parse5/download/parse5-5.1.1.tgz", - "integrity": "sha1-9o5OW6GFKsLK3AD0VV//bCq7YXg=", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-4.0.0.tgz", - "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz", - "integrity": "sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs=", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz", - "integrity": "sha1-lSGCxGzHssMT0VluYjmSvRY7crU=", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz", - "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.1.0.tgz", - "integrity": "sha1-aOMlkd9z4lrRxLSRCKLsUHliv9E=", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-6.2.0.tgz", - "integrity": "sha1-6Tk7oHEC5skaOyIUePAlfNKFblM=", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-15.4.1.tgz?cache=0&sync_timestamp=1594421046064&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-15.4.1.tgz", - "integrity": "sha1-DYehbeAa7p2L7Cv7909nhRcw9Pg=", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-18.1.3.tgz?cache=0&sync_timestamp=1595125190020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-18.1.3.tgz", - "integrity": "sha1-vmjEl1xrKr9GkjawyHA2L6sJp7A=", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "cli-spinners": { - "version": "2.4.0", - "resolved": "https://registry.npm.taobao.org/cli-spinners/download/cli-spinners-2.4.0.tgz?cache=0&sync_timestamp=1595080565423&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcli-spinners%2Fdownload%2Fcli-spinners-2.4.0.tgz", - "integrity": "sha1-xiVtsha4eM+6RyDnGc7Hz3JoXX8=", - "dev": true - }, - "cli-truncate": { - "version": "0.2.1", - "resolved": "https://registry.npm.taobao.org/cli-truncate/download/cli-truncate-0.2.1.tgz", - "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", - "dev": true, - "requires": { - "slice-ansi": "0.0.4", - "string-width": "^1.0.1" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "dev": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npm.taobao.org/cli-width/download/cli-width-2.2.1.tgz", - "integrity": "sha1-sEM9C06chH7xiGik7xb9X8gnHEg=", - "dev": true, - "optional": true - }, - "clipboard": { - "version": "2.0.6", - "resolved": "https://registry.npm.taobao.org/clipboard/download/clipboard-2.0.6.tgz", - "integrity": "sha1-UpISlu7A/fd+rRdJQhshyWhkc3Y=", - "requires": { - "good-listener": "^1.2.2", - "select": "^1.1.2", - "tiny-emitter": "^2.0.0" - } - }, - "clipboardy": { - "version": "2.3.0", - "resolved": "https://registry.npm.taobao.org/clipboardy/download/clipboardy-2.3.0.tgz", - "integrity": "sha1-PCkDZQxo5GqRs4iYW8J3QofbopA=", - "dev": true, - "requires": { - "arch": "^2.1.1", - "execa": "^1.0.0", - "is-wsl": "^2.1.1" - }, - "dependencies": { - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-2.2.0.tgz?cache=0&sync_timestamp=1588494180082&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-wsl%2Fdownload%2Fis-wsl-2.2.0.tgz", - "integrity": "sha1-dKTHbnfKn9P5MvKQwX6jJs0VcnE=", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - } - } - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npm.taobao.org/clone/download/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - }, - "clonedeep": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/clonedeep/download/clonedeep-2.0.0.tgz", - "integrity": "sha1-jOygd39He78x/oyHGq9jo5C7wnI=" - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npm.taobao.org/co/download/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true, - "optional": true - }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npm.taobao.org/coa/download/coa-2.0.2.tgz", - "integrity": "sha1-Q/bCEVG07yv1cYfbDXPeIp4+fsM=", - "dev": true, - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "codemirror": { - "version": "5.56.0", - "resolved": "https://registry.npm.taobao.org/codemirror/download/codemirror-5.56.0.tgz", - "integrity": "sha1-Z1ZA/MeAEFzSLT+qc4tdfqZCb2E=" - }, - "codemirror-spell-checker": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/codemirror-spell-checker/download/codemirror-spell-checker-1.1.2.tgz", - "integrity": "sha1-HGYPkIlIPMtRE7m6nKGcP0mTNx4=", - "requires": { - "typo-js": "*" - } - }, - "codepage": { - "version": "1.14.0", - "resolved": "https://registry.npm.taobao.org/codepage/download/codepage-1.14.0.tgz", - "integrity": "sha1-jL4lSBMjVZ19MHVxsP/5HnodL5k=", - "requires": { - "commander": "~2.14.1", - "exit-on-epipe": "~1.0.1" - }, - "dependencies": { - "commander": { - "version": "2.14.1", - "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.14.1.tgz?cache=0&sync_timestamp=1595168173997&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.14.1.tgz", - "integrity": "sha1-IjUSPjevjKPGXfRbAm29NXsBuao=" - } - } - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color": { - "version": "3.1.2", - "resolved": "https://registry.npm.taobao.org/color/download/color-3.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolor%2Fdownload%2Fcolor-3.1.2.tgz", - "integrity": "sha1-aBSOf4XUGtdknF+oyBBvCY0inhA=", - "dev": true, - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz", - "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npm.taobao.org/color-string/download/color-string-1.5.3.tgz", - "integrity": "sha1-ybvF8BtYtUkvPWhXRZy2WQziBMw=", - "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "colorette": { - "version": "1.2.1", - "resolved": "https://registry.npm.taobao.org/colorette/download/colorette-1.2.1.tgz?cache=0&sync_timestamp=1593955829055&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolorette%2Fdownload%2Fcolorette-1.2.1.tgz", - "integrity": "sha1-TQuSEyXBT6+SYzCGpTbbbolWSxs=", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz", - "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.20.3.tgz?cache=0&sync_timestamp=1595168173997&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.20.3.tgz", - "integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=" - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/commondir/download/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.3.0.tgz", - "integrity": "sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A=", - "dev": true - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npm.taobao.org/compressible/download/compressible-2.0.18.tgz?cache=0&sync_timestamp=1578286264482&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcompressible%2Fdownload%2Fcompressible-2.0.18.tgz", - "integrity": "sha1-r1PMprBw1MPAdQ+9dyhqbXzEb7o=", - "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npm.taobao.org/compression/download/compression-1.7.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcompression%2Fdownload%2Fcompression-1.7.4.tgz", - "integrity": "sha1-lVI+/xcMpXwpoMpB5v4TH0Hlu48=", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbytes%2Fdownload%2Fbytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "compression-webpack-plugin": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/compression-webpack-plugin/download/compression-webpack-plugin-3.1.0.tgz?cache=0&sync_timestamp=1589291140068&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcompression-webpack-plugin%2Fdownload%2Fcompression-webpack-plugin-3.1.0.tgz", - "integrity": "sha1-n1EBcqe1+uWq07ZwZS6L15l67so=", - "dev": true, - "requires": { - "cacache": "^13.0.1", - "find-cache-dir": "^3.0.0", - "neo-async": "^2.5.0", - "schema-utils": "^2.6.1", - "serialize-javascript": "^2.1.2", - "webpack-sources": "^1.0.1" - }, - "dependencies": { - "cacache": { - "version": "13.0.1", - "resolved": "https://registry.npm.taobao.org/cacache/download/cacache-13.0.1.tgz?cache=0&sync_timestamp=1594429684526&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-13.0.1.tgz", - "integrity": "sha1-qAAMIWlwiQgvhSh6GuxuOCAkpxw=", - "dev": true, - "requires": { - "chownr": "^1.1.2", - "figgy-pudding": "^3.5.1", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.2", - "infer-owner": "^1.0.4", - "lru-cache": "^5.1.1", - "minipass": "^3.0.0", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "p-map": "^3.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^2.7.1", - "ssri": "^7.0.0", - "unique-filename": "^1.1.1" - } - }, - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-3.3.1.tgz", - "integrity": "sha1-ibM/rUpGcNqpT4Vff74x1thP6IA=", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-4.1.0.tgz", - "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-5.0.0.tgz", - "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-3.1.0.tgz?cache=0&sync_timestamp=1587567875186&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-dir%2Fdownload%2Fmake-dir-3.1.0.tgz", - "integrity": "sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8=", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-2.3.0.tgz?cache=0&sync_timestamp=1594559696906&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-2.3.0.tgz", - "integrity": "sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-4.1.0.tgz", - "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-map": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/p-map/download/p-map-3.0.0.tgz", - "integrity": "sha1-1wTZr4orpoTiYA2aIVmD1BQal50=", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz", - "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-4.0.0.tgz", - "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-4.2.0.tgz", - "integrity": "sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM=", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz", - "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", - "dev": true - }, - "serialize-javascript": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/serialize-javascript/download/serialize-javascript-2.1.2.tgz", - "integrity": "sha1-7OxTsOAxe9yV73arcHS3OEeF+mE=", - "dev": true - }, - "ssri": { - "version": "7.1.0", - "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-7.1.0.tgz", - "integrity": "sha1-ksJBv23oI2W1x/tL126XVSLhKU0=", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1", - "minipass": "^3.1.1" - } - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz", - "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "condense-newlines": { - "version": "0.2.1", - "resolved": "https://registry.npm.taobao.org/condense-newlines/download/condense-newlines-0.2.1.tgz", - "integrity": "sha1-PemFVTE5R10yUCyDsC9gaE0kxV8=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-whitespace": "^0.3.0", - "kind-of": "^3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "config-chain": { - "version": "1.1.12", - "resolved": "https://registry.npm.taobao.org/config-chain/download/config-chain-1.1.12.tgz", - "integrity": "sha1-D96NCRIA616AjK8l/mGMAvSOTvo=", - "dev": true, - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npm.taobao.org/connect-history-api-fallback/download/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha1-izIIk1kwjRERFdgcrT/Oq4iPl7w=", - "dev": true - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/console-browserify/download/console-browserify-1.2.0.tgz", - "integrity": "sha1-ZwY871fOts9Jk6KrOlWECujEkzY=", - "dev": true - }, - "consolidate": { - "version": "0.15.1", - "resolved": "https://registry.npm.taobao.org/consolidate/download/consolidate-0.15.1.tgz", - "integrity": "sha1-IasEMjXHGgfUXZqtmFk7DbpWurc=", - "dev": true, - "requires": { - "bluebird": "^3.1.1" - } - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/constants-browserify/download/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npm.taobao.org/contains-path/download/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcontent-disposition%2Fdownload%2Fcontent-disposition-0.5.3.tgz", - "integrity": "sha1-4TDK9+cnkIfFYWwgB9BIVpiYT70=", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz", - "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=", - "dev": true - }, - "contour_plot": { - "version": "0.0.1", - "resolved": "https://registry.npm.taobao.org/contour_plot/download/contour_plot-0.0.1.tgz", - "integrity": "sha1-R1hw8DK44zhBKqX8UHiA8L9JXHc=" - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz", - "integrity": "sha1-F6LLiC1/d9NJBYXizmxSRCSjpEI=", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npm.taobao.org/cookie/download/cookie-0.4.0.tgz", - "integrity": "sha1-vrQ35wIrO21JAZ0IhmUwPr6cFLo=", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npm.taobao.org/copy-concurrently/download/copy-concurrently-1.0.5.tgz", - "integrity": "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA=", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "copy-webpack-plugin": { - "version": "4.6.0", - "resolved": "https://registry.npm.taobao.org/copy-webpack-plugin/download/copy-webpack-plugin-4.6.0.tgz", - "integrity": "sha1-5/QN2KaEd9QF3Rt6hUquMksVi64=", - "dev": true, - "requires": { - "cacache": "^10.0.4", - "find-cache-dir": "^1.0.0", - "globby": "^7.1.1", - "is-glob": "^4.0.0", - "loader-utils": "^1.1.0", - "minimatch": "^3.0.4", - "p-limit": "^1.0.0", - "serialize-javascript": "^1.4.0" - }, - "dependencies": { - "cacache": { - "version": "10.0.4", - "resolved": "https://registry.npm.taobao.org/cacache/download/cacache-10.0.4.tgz?cache=0&sync_timestamp=1594429684526&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-10.0.4.tgz", - "integrity": "sha1-ZFI2eZnv+dQYiu/ZoU6dfGomNGA=", - "dev": true, - "requires": { - "bluebird": "^3.5.1", - "chownr": "^1.0.1", - "glob": "^7.1.2", - "graceful-fs": "^4.1.11", - "lru-cache": "^4.1.1", - "mississippi": "^2.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", - "ssri": "^5.2.4", - "unique-filename": "^1.1.0", - "y18n": "^4.0.0" - } - }, - "find-cache-dir": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-1.0.0.tgz", - "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^2.0.0" - } - }, - "globby": { - "version": "7.1.1", - "resolved": "https://registry.npm.taobao.org/globby/download/globby-7.1.1.tgz", - "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "dir-glob": "^2.0.0", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" - } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz?cache=0&sync_timestamp=1594427569171&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-4.1.5.tgz", - "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-1.3.0.tgz?cache=0&sync_timestamp=1587567875186&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-dir%2Fdownload%2Fmake-dir-1.3.0.tgz", - "integrity": "sha1-ecEDO4BRW9bSTsmTPoYMp17ifww=", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "mississippi": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/mississippi/download/mississippi-2.0.0.tgz", - "integrity": "sha1-NEKlCPr8KFAEhv7qmUCWduTuWm8=", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^2.0.1", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - }, - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/pump/download/pump-2.0.1.tgz", - "integrity": "sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk=", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "serialize-javascript": { - "version": "1.9.1", - "resolved": "https://registry.npm.taobao.org/serialize-javascript/download/serialize-javascript-1.9.1.tgz", - "integrity": "sha1-z8IArvd7YAxH2pu4FJyUPnmML9s=", - "dev": true - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "ssri": { - "version": "5.3.0", - "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-5.3.0.tgz", - "integrity": "sha1-ujhyycbTOgcEp9cf8EXl7EiZnQY=", - "dev": true, - "requires": { - "safe-buffer": "^5.1.1" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } - }, - "core-js": { - "version": "2.6.11", - "resolved": "https://registry.npm.taobao.org/core-js/download/core-js-2.6.11.tgz?cache=0&sync_timestamp=1586450269267&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-2.6.11.tgz", - "integrity": "sha1-OIMUafmSK97Y7iHJ3EaYXgOZMIw=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-5.2.1.tgz", - "integrity": "sha1-BA9yaAnFked6F8CjYmykW08Wixo=", - "dev": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - } - }, - "countup": { - "version": "1.8.2", - "resolved": "https://registry.npm.taobao.org/countup/download/countup-1.8.2.tgz", - "integrity": "sha1-AhzMam+WRUDGsn7WRoGvJ/tV8BA=" - }, - "crc-32": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/crc-32/download/crc-32-1.2.0.tgz", - "integrity": "sha1-yy224puIUI4y2d0OwWk+e0Ghggg=", - "requires": { - "exit-on-epipe": "~1.0.1", - "printj": "~1.1.0" - } - }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npm.taobao.org/create-ecdh/download/create-ecdh-4.0.3.tgz", - "integrity": "sha1-yREbbzMEXEaX8UR4f5JUzcd8Rf8=", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz", - "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=", - "dev": true - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/create-hash/download/create-hash-1.2.0.tgz", - "integrity": "sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY=", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npm.taobao.org/create-hmac/download/create-hmac-1.1.7.tgz", - "integrity": "sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8=", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cropperjs": { - "version": "1.5.7", - "resolved": "https://registry.npm.taobao.org/cropperjs/download/cropperjs-1.5.7.tgz", - "integrity": "sha1-tlAZcluuHGKF6IH7ZhshQfpXAls=" - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz", - "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npm.taobao.org/cryptiles/download/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, - "optional": true, - "requires": { - "boom": "2.x.x" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npm.taobao.org/crypto-browserify/download/crypto-browserify-3.12.0.tgz", - "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npm.taobao.org/css-color-names/download/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "dev": true - }, - "css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npm.taobao.org/css-declaration-sorter/download/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha1-wZiUD2OnbX42wecQGLABchBUyyI=", - "dev": true, - "requires": { - "postcss": "^7.0.1", - "timsort": "^0.3.0" - } - }, - "css-line-break": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/css-line-break/download/css-line-break-1.1.1.tgz", - "integrity": "sha1-1em90peEAJnrBQPHMQ/TSSegJu8=", - "requires": { - "base64-arraybuffer": "^0.2.0" - } - }, - "css-loader": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/css-loader/download/css-loader-1.0.1.tgz?cache=0&sync_timestamp=1592056914630&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-loader%2Fdownload%2Fcss-loader-1.0.1.tgz", - "integrity": "sha1-aIW7UjOzXsR7AGBX2gHMZAtref4=", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "css-selector-tokenizer": "^0.7.0", - "icss-utils": "^2.1.0", - "loader-utils": "^1.0.2", - "lodash": "^4.17.11", - "postcss": "^6.0.23", - "postcss-modules-extract-imports": "^1.2.0", - "postcss-modules-local-by-default": "^1.2.0", - "postcss-modules-scope": "^1.1.0", - "postcss-modules-values": "^1.3.0", - "postcss-value-parser": "^3.3.0", - "source-list-map": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-6.0.23.tgz?cache=0&sync_timestamp=1591102414113&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss%2Fdownload%2Fpostcss-6.0.23.tgz", - "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", - "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/css-select/download/css-select-2.1.0.tgz", - "integrity": "sha1-ajRlM1ZjWTSoG6ymjQJVQyEF2+8=", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npm.taobao.org/css-select-base-adapter/download/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha1-Oy/0lyzDYquIVhUHqVQIoUMhNdc=", - "dev": true - }, - "css-selector-tokenizer": { - "version": "0.7.2", - "resolved": "https://registry.npm.taobao.org/css-selector-tokenizer/download/css-selector-tokenizer-0.7.2.tgz", - "integrity": "sha1-EeXifJpI2QKE8i1FBhwwPXolrYc=", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "fastparse": "^1.1.2", - "regexpu-core": "^4.6.0" - } - }, - "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npm.taobao.org/css-tree/download/css-tree-1.0.0-alpha.37.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-tree%2Fdownload%2Fcss-tree-1.0.0-alpha.37.tgz", - "integrity": "sha1-mL69YsTB2flg7DQM+fdSLjBwmiI=", - "dev": true, - "requires": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - } - } - }, - "css-what": { - "version": "3.3.0", - "resolved": "https://registry.npm.taobao.org/css-what/download/css-what-3.3.0.tgz", - "integrity": "sha1-EP7Glqns4uWRrHctdZqsq6w4zTk=", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/cssesc/download/cssesc-3.0.0.tgz", - "integrity": "sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4=", - "dev": true - }, - "cssfilter": { - "version": "0.0.10", - "resolved": "https://registry.npm.taobao.org/cssfilter/download/cssfilter-0.0.10.tgz", - "integrity": "sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4=" - }, - "cssnano": { - "version": "4.1.10", - "resolved": "https://registry.npm.taobao.org/cssnano/download/cssnano-4.1.10.tgz", - "integrity": "sha1-CsQfCxPRPUZUh+ERt3jULaYxuLI=", - "dev": true, - "requires": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.7", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" - } - }, - "cssnano-preset-default": { - "version": "4.0.7", - "resolved": "https://registry.npm.taobao.org/cssnano-preset-default/download/cssnano-preset-default-4.0.7.tgz", - "integrity": "sha1-UexmLM/KD4izltzZZ5zbkxvhf3Y=", - "dev": true, - "requires": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.2", - "postcss-unique-selectors": "^4.0.1" - } - }, - "cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/cssnano-util-get-arguments/download/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", - "dev": true - }, - "cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/cssnano-util-get-match/download/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", - "dev": true - }, - "cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npm.taobao.org/cssnano-util-raw-cache/download/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha1-sm1f1fcqEd/np4RvtMZyYPlr8oI=", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "https://registry.npm.taobao.org/cssnano-util-same-parent/download/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha1-V0CC+yhZ0ttDOFWDXZqEVuoYu/M=", - "dev": true - }, - "csso": { - "version": "4.0.3", - "resolved": "https://registry.npm.taobao.org/csso/download/csso-4.0.3.tgz?cache=0&sync_timestamp=1585052130344&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcsso%2Fdownload%2Fcsso-4.0.3.tgz", - "integrity": "sha1-DZmF3IUsfMKyys+74QeQFNGo6QM=", - "dev": true, - "requires": { - "css-tree": "1.0.0-alpha.39" - }, - "dependencies": { - "css-tree": { - "version": "1.0.0-alpha.39", - "resolved": "https://registry.npm.taobao.org/css-tree/download/css-tree-1.0.0-alpha.39.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-tree%2Fdownload%2Fcss-tree-1.0.0-alpha.39.tgz", - "integrity": "sha1-K/8//huz93bPfu/ZHuXLp3oUnus=", - "dev": true, - "requires": { - "mdn-data": "2.0.6", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.6", - "resolved": "https://registry.npm.taobao.org/mdn-data/download/mdn-data-2.0.6.tgz?cache=0&sync_timestamp=1593510420945&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmdn-data%2Fdownload%2Fmdn-data-2.0.6.tgz", - "integrity": "sha1-hS3GD8ql2qLoz2yRicRA7T4EKXg=", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - } - } - }, - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npm.taobao.org/cssom/download/cssom-0.3.8.tgz?cache=0&sync_timestamp=1573719337707&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcssom%2Fdownload%2Fcssom-0.3.8.tgz", - "integrity": "sha1-nxJ29bK0Y/IRTT8sdSUK+MGjb0o=", - "dev": true - }, - "cssstyle": { - "version": "1.4.0", - "resolved": "https://registry.npm.taobao.org/cssstyle/download/cssstyle-1.4.0.tgz?cache=0&sync_timestamp=1588171504463&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcssstyle%2Fdownload%2Fcssstyle-1.4.0.tgz", - "integrity": "sha1-nTEyginTxWXGHlhrAgQaKPzNzPE=", - "dev": true, - "requires": { - "cssom": "0.3.x" - } - }, - "current-script-polyfill": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/current-script-polyfill/download/current-script-polyfill-1.0.0.tgz", - "integrity": "sha1-8xz35PPiGLBybnOMqSoC00iO9hU=", - "dev": true - }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/cyclist/download/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", - "dev": true - }, - "d3-color": { - "version": "1.4.1", - "resolved": "https://registry.npm.taobao.org/d3-color/download/d3-color-1.4.1.tgz", - "integrity": "sha1-xSACv4hGraRCTVXZeYL+8m6zvIo=" - }, - "d3-dispatch": { - "version": "1.0.6", - "resolved": "https://registry.npm.taobao.org/d3-dispatch/download/d3-dispatch-1.0.6.tgz", - "integrity": "sha1-ANN7zuTdjNl3Kd2JOgrCnKq6XVg=" - }, - "d3-ease": { - "version": "1.0.6", - "resolved": "https://registry.npm.taobao.org/d3-ease/download/d3-ease-1.0.6.tgz?cache=0&sync_timestamp=1592460740468&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fd3-ease%2Fdownload%2Fd3-ease-1.0.6.tgz", - "integrity": "sha1-69ttoi36wKIiIvLU2gb2bEFqDsA=" - }, - "d3-interpolate": { - "version": "1.1.6", - "resolved": "https://registry.npm.taobao.org/d3-interpolate/download/d3-interpolate-1.1.6.tgz", - "integrity": "sha1-LPOVriOBgE3wiqG/dmt/l7X2j7Y=", - "requires": { - "d3-color": "1" - } - }, - "d3-selection": { - "version": "1.4.1", - "resolved": "https://registry.npm.taobao.org/d3-selection/download/d3-selection-1.4.1.tgz", - "integrity": "sha1-mO7bvghfvaW6+i+ePzovTX1iKpg=" - }, - "d3-timer": { - "version": "1.0.10", - "resolved": "https://registry.npm.taobao.org/d3-timer/download/d3-timer-1.0.10.tgz", - "integrity": "sha1-3+dripF0iDGxO22ceT/71QjdneU=" - }, - "d3-transition": { - "version": "1.3.2", - "resolved": "https://registry.npm.taobao.org/d3-transition/download/d3-transition-1.3.2.tgz", - "integrity": "sha1-qY7yFRvo2GAFQ0NMHKgBQK4js5g=", - "requires": { - "d3-color": "1", - "d3-dispatch": "1", - "d3-ease": "1", - "d3-interpolate": "1", - "d3-selection": "^1.1.0", - "d3-timer": "1" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/data-urls/download/data-urls-1.1.0.tgz", - "integrity": "sha1-Fe4Fgrql4iu1nHcUDaj5x2lju/4=", - "dev": true, - "requires": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" - } - }, - "date-fns": { - "version": "1.30.1", - "resolved": "https://registry.npm.taobao.org/date-fns/download/date-fns-1.30.1.tgz?cache=0&sync_timestamp=1594999213209&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdate-fns%2Fdownload%2Fdate-fns-1.30.1.tgz", - "integrity": "sha1-LnG/CxGRU9u0zE6I2epaz7UNwFw=", - "dev": true - }, - "dayjs": { - "version": "1.8.29", - "resolved": "https://registry.npm.taobao.org/dayjs/download/dayjs-1.8.29.tgz?cache=0&sync_timestamp=1593707172703&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdayjs%2Fdownload%2Fdayjs-1.8.29.tgz", - "integrity": "sha1-XSPjQd5r+9IGwBE20vsPAYd4IPU=" - }, - "de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz", - "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.1.0.tgz", - "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz?cache=0&sync_timestamp=1580010393599&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdecamelize%2Fdownload%2Fdecamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, - "decimal.js": { - "version": "10.2.0", - "resolved": "https://registry.npm.taobao.org/decimal.js/download/decimal.js-10.2.0.tgz", - "integrity": "sha1-OUZhE6ngNhEdAvgkibX9awte0jE=" - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npm.taobao.org/dedent/download/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npm.taobao.org/deep-eql/download/deep-eql-3.0.1.tgz", - "integrity": "sha1-38lARACtHI/gI+faHfHBR8S0RN8=", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/deep-equal/download/deep-equal-1.1.1.tgz", - "integrity": "sha1-tcmMlCzv+vfLBR4k4UNKJaLmB2o=", - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "deepmerge": { - "version": "2.2.1", - "resolved": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-2.2.1.tgz", - "integrity": "sha1-XT/yKgHAD2RUBaL7wX0HeKGAEXA=" - }, - "default-gateway": { - "version": "5.0.5", - "resolved": "https://registry.npm.taobao.org/default-gateway/download/default-gateway-5.0.5.tgz?cache=0&sync_timestamp=1590419212936&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefault-gateway%2Fdownload%2Fdefault-gateway-5.0.5.tgz", - "integrity": "sha1-T9a9XShV05s0zFpZUFSG6ar8mxA=", - "dev": true, - "requires": { - "execa": "^3.3.0" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-7.0.3.tgz", - "integrity": "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "execa": { - "version": "3.4.0", - "resolved": "https://registry.npm.taobao.org/execa/download/execa-3.4.0.tgz?cache=0&sync_timestamp=1594145237072&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-3.4.0.tgz", - "integrity": "sha1-wI7UVQ72XYWPrCaf/IVyRG8364k=", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "p-finally": "^2.0.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-5.1.0.tgz", - "integrity": "sha1-ASA83JJZf5uQkGfD5lbMH008Tck=", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/is-stream/download/is-stream-2.0.0.tgz", - "integrity": "sha1-venDJoDW+uBBKdasnZIc54FfeOM=", - "dev": true - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz", - "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-4.0.1.tgz", - "integrity": "sha1-t+zR5e1T2o43pV4cImnguX7XSOo=", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "onetime": { - "version": "5.1.0", - "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-5.1.0.tgz", - "integrity": "sha1-//DzyRYX/mK7UBiWNumayKbfe+U=", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "p-finally": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/p-finally/download/p-finally-2.0.1.tgz", - "integrity": "sha1-vW/KqcVZoJa2gIBvTWV7Pw8kBWE=", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-3.1.1.tgz?cache=0&sync_timestamp=1574441431664&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-3.1.1.tgz", - "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-2.0.0.tgz", - "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-3.0.0.tgz", - "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz?cache=0&sync_timestamp=1574116262707&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-2.0.2.tgz", - "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/defaults/download/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz", - "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=", - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz", - "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", - "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", - "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz", - "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", - "dev": true - } - } - }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/defined/download/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" - }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npm.taobao.org/del/download/del-4.1.1.tgz", - "integrity": "sha1-no8RciLqRKMf86FWwEm5kFKp8LQ=", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "dependencies": { - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npm.taobao.org/globby/download/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegate": { - "version": "3.2.0", - "resolved": "https://registry.npm.taobao.org/delegate/download/delegate-3.2.0.tgz", - "integrity": "sha1-tmtxwxWFIuirV0T3INjKDCr1kWY=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/des.js/download/des.js-1.0.1.tgz", - "integrity": "sha1-U4IULhvcU/hdhtU+X0qn3rkeCEM=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-browser": { - "version": "5.1.1", - "resolved": "https://registry.npm.taobao.org/detect-browser/download/detect-browser-5.1.1.tgz?cache=0&sync_timestamp=1592803473542&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdetect-browser%2Fdownload%2Fdetect-browser-5.1.1.tgz", - "integrity": "sha1-qADbkdP9YNCGFmn1mE8b6f++AJw=" - }, - "detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npm.taobao.org/detect-node/download/detect-node-2.0.4.tgz", - "integrity": "sha1-AU7o+PZpxcWAI9pkuBecCDooxGw=", - "dev": true - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npm.taobao.org/diff/download/diff-3.5.0.tgz", - "integrity": "sha1-gAwN0eCov7yVg1wgKtIg/jF+WhI=", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npm.taobao.org/diffie-hellman/download/diffie-hellman-5.0.3.tgz", - "integrity": "sha1-QOjumPVaIUlgcUaSHGPhrl89KHU=", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz", - "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=", - "dev": true - } - } - }, - "dir-glob": { - "version": "2.2.2", - "resolved": "https://registry.npm.taobao.org/dir-glob/download/dir-glob-2.2.2.tgz", - "integrity": "sha1-+gnwaUFTyJGLGLoN6vrpR2n8UMQ=", - "dev": true, - "requires": { - "path-type": "^3.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/dns-equal/download/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, - "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npm.taobao.org/dns-packet/download/dns-packet-1.3.1.tgz", - "integrity": "sha1-EqpCaYEHW+UAuRDu3NC0fdfe2lo=", - "dev": true, - "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npm.taobao.org/dns-txt/download/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dev": true, - "requires": { - "buffer-indexof": "^1.0.0" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/doctrine/download/doctrine-2.1.0.tgz", - "integrity": "sha1-XNAfwQFiG0LEzX9dGmYkNxbT850=", - "dev": true, - "optional": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npm.taobao.org/dom-converter/download/dom-converter-0.2.0.tgz", - "integrity": "sha1-ZyGp2u4uKTaClVtq/kFncWJ7t2g=", - "dev": true, - "requires": { - "utila": "~0.4" - } - }, - "dom-event-types": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/dom-event-types/download/dom-event-types-1.0.0.tgz", - "integrity": "sha1-WDCgop4b+Df+UKcM2ApZcjKBPK4=", - "dev": true - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npm.taobao.org/dom-serializer/download/dom-serializer-0.2.2.tgz?cache=0&sync_timestamp=1589067578490&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdom-serializer%2Fdownload%2Fdom-serializer-0.2.2.tgz", - "integrity": "sha1-GvuB9TNxcXXUeGVd68XjMtn5u1E=", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-2.0.1.tgz", - "integrity": "sha1-H4vf6R9aeAYydOgDtL3O326U+U0=", - "dev": true - } - } - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/domain-browser/download/domain-browser-1.2.0.tgz", - "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=", - "dev": true - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-1.3.1.tgz", - "integrity": "sha1-0EjESzew0Qp/Kj1f7j9DM9eQSB8=", - "dev": true - }, - "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/domexception/download/domexception-1.0.1.tgz?cache=0&sync_timestamp=1576355459111&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomexception%2Fdownload%2Fdomexception-1.0.1.tgz", - "integrity": "sha1-k3RCZEymoxJh7zbj7Gd/6AVYLJA=", - "dev": true, - "requires": { - "webidl-conversions": "^4.0.2" - } - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npm.taobao.org/domhandler/download/domhandler-2.4.2.tgz", - "integrity": "sha1-iAUJfpM9ZehVRvcm1g9euItE+AM=", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npm.taobao.org/domutils/download/domutils-1.7.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomutils%2Fdownload%2Fdomutils-1.7.0.tgz", - "integrity": "sha1-Vuo0HoNOBuZ0ivehyyXaZ+qfjCo=", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "dot-prop": { - "version": "5.2.0", - "resolved": "https://registry.npm.taobao.org/dot-prop/download/dot-prop-5.2.0.tgz?cache=0&sync_timestamp=1572621117377&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdot-prop%2Fdownload%2Fdot-prop-5.2.0.tgz", - "integrity": "sha1-w07MKVVtxF8fTCJpe29JBODMT8s=", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "dotenv": { - "version": "7.0.0", - "resolved": "https://registry.npm.taobao.org/dotenv/download/dotenv-7.0.0.tgz", - "integrity": "sha1-or481Sc2ZzIG6KhftSEO6ilijnw=", - "dev": true - }, - "dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npm.taobao.org/dotenv-expand/download/dotenv-expand-5.1.0.tgz", - "integrity": "sha1-P7rwIL/XlIhAcuomsel5HUWmKfA=", - "dev": true - }, - "dotignore": { - "version": "0.1.2", - "resolved": "https://registry.npm.taobao.org/dotignore/download/dotignore-0.1.2.tgz", - "integrity": "sha1-+ULyIA0ow6dvvdbw7p8yV8ii6QU=", - "requires": { - "minimatch": "^3.0.4" - } - }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npm.taobao.org/duplexer/download/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", - "dev": true - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npm.taobao.org/duplexify/download/duplexify-3.7.1.tgz", - "integrity": "sha1-Kk31MX9sz9kfhtb9JdjYoQO4gwk=", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "e-guide-layer": { - "version": "0.1.1", - "resolved": "https://registry.npm.taobao.org/e-guide-layer/download/e-guide-layer-0.1.1.tgz", - "integrity": "sha1-AcGvAJqak9CQaSnWAFGrHH6I/V8=", - "requires": { - "core-js": "^3.6.5", - "normalize.css": "^8.0.1", - "vue": "^2.6.11" - }, - "dependencies": { - "core-js": { - "version": "3.8.1", - "resolved": "https://registry.npm.taobao.org/core-js/download/core-js-3.8.1.tgz?cache=0&sync_timestamp=1607215997560&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-3.8.1.tgz", - "integrity": "sha1-9RUjZorIopTRKFw7nbRAJf2mbUc=" - } - } - }, - "easy-stack": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/easy-stack/download/easy-stack-1.0.0.tgz", - "integrity": "sha1-EskbMIWjfwuqM26UhurEv5Tj54g=", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "echarts": { - "version": "4.8.0", - "resolved": "https://registry.npm.taobao.org/echarts/download/echarts-4.8.0.tgz", - "integrity": "sha1-ssHPuSKbE9No7hBPyO6mALV01MQ=", - "requires": { - "zrender": "4.3.1" - } - }, - "editorconfig": { - "version": "0.15.3", - "resolved": "https://registry.npm.taobao.org/editorconfig/download/editorconfig-0.15.3.tgz", - "integrity": "sha1-vvhMTnX7jcsM5c7o79UcFZmb78U=", - "dev": true, - "requires": { - "commander": "^2.19.0", - "lru-cache": "^4.1.5", - "semver": "^5.6.0", - "sigmund": "^1.0.1" - }, - "dependencies": { - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz?cache=0&sync_timestamp=1594427569171&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-4.1.5.tgz", - "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "ejs": { - "version": "2.7.4", - "resolved": "https://registry.npm.taobao.org/ejs/download/ejs-2.7.4.tgz", - "integrity": "sha1-SGYSh1c9zFPjZsehrlLDoSDuybo=", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.502", - "resolved": "https://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.502.tgz?cache=0&sync_timestamp=1595302504119&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felectron-to-chromium%2Fdownload%2Felectron-to-chromium-1.3.502.tgz", - "integrity": "sha1-alXpk+9goB+9whUu9eR+4AyIXJg=", - "dev": true - }, - "elegant-spinner": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/elegant-spinner/download/elegant-spinner-1.0.1.tgz", - "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", - "dev": true - }, - "element-resize-detector": { - "version": "1.2.1", - "resolved": "https://registry.npm.taobao.org/element-resize-detector/download/element-resize-detector-1.2.1.tgz", - "integrity": "sha1-sDBRlER6SGMVXljxMyOgrvMIUdE=", - "requires": { - "batch-processor": "1.0.0" - } - }, - "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npm.taobao.org/elliptic/download/elliptic-6.5.3.tgz?cache=0&sync_timestamp=1592492805287&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felliptic%2Fdownload%2Felliptic-6.5.3.tgz", - "integrity": "sha1-y1nrLv2vc6C9eMzXAVpirW4Pk9Y=", - "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz", - "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=", - "dev": true - } - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz", - "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/emojis-list/download/emojis-list-3.0.0.tgz", - "integrity": "sha1-VXBmIEatKeLpFucariYKvf9Pang=", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz", - "integrity": "sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "4.3.0", - "resolved": "https://registry.npm.taobao.org/enhanced-resolve/download/enhanced-resolve-4.3.0.tgz?cache=0&sync_timestamp=1594972300336&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fenhanced-resolve%2Fdownload%2Fenhanced-resolve-4.3.0.tgz", - "integrity": "sha1-O4BvO/r8HsfeaVUe+TzKRsFwQSY=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npm.taobao.org/memory-fs/download/memory-fs-0.5.0.tgz?cache=0&sync_timestamp=1570537491040&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmemory-fs%2Fdownload%2Fmemory-fs-0.5.0.tgz", - "integrity": "sha1-MkwBKIuIZSlm0WHbd4OHIIRajjw=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - } - } - }, - "entities": { - "version": "2.0.3", - "resolved": "https://registry.npm.taobao.org/entities/download/entities-2.0.3.tgz?cache=0&sync_timestamp=1591227679482&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fentities%2Fdownload%2Fentities-2.0.3.tgz", - "integrity": "sha1-XEh+V0Krk8Fau12iJ1m4WQ7AO38=", - "dev": true - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npm.taobao.org/errno/download/errno-0.1.7.tgz", - "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz", - "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "error-stack-parser": { - "version": "2.0.6", - "resolved": "https://registry.npm.taobao.org/error-stack-parser/download/error-stack-parser-2.0.6.tgz?cache=0&sync_timestamp=1578288503034&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ferror-stack-parser%2Fdownload%2Ferror-stack-parser-2.0.6.tgz", - "integrity": "sha1-WpmnB716TFinl5AtSNgoA+3mqtg=", - "dev": true, - "requires": { - "stackframe": "^1.1.1" - } - }, - "es-abstract": { - "version": "1.17.6", - "resolved": "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.17.6.tgz?cache=0&sync_timestamp=1592109199190&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fes-abstract%2Fdownload%2Fes-abstract-1.17.6.tgz", - "integrity": "sha1-kUIHFweFeyysx7iey2cDFsPi1So=", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-regex": "^1.1.0", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - }, - "dependencies": { - "is-regex": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/is-regex/download/is-regex-1.1.0.tgz", - "integrity": "sha1-7OOOOJ5JDfDcIcrqK9WW+Yf3Z/8=", - "requires": { - "has-symbols": "^1.0.1" - } - } - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.2.1.tgz", - "integrity": "sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo=", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escalade": { - "version": "3.0.2", - "resolved": "https://registry.npm.taobao.org/escalade/download/escalade-3.0.2.tgz?cache=0&sync_timestamp=1594743037384&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescalade%2Fdownload%2Fescalade-3.0.2.tgz", - "integrity": "sha1-algNcO24eIDyK0yR0NVgeN9pYsQ=", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz?cache=0&sync_timestamp=1587627107924&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-string-regexp%2Fdownload%2Fescape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npm.taobao.org/escodegen/download/escodegen-1.14.3.tgz?cache=0&sync_timestamp=1592866195968&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescodegen%2Fdownload%2Fescodegen-1.14.3.tgz", - "integrity": "sha1-TnuB+6YVgdyXWC7XjKt/Do1j9QM=", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true, - "optional": true - } - } - }, - "eslint": { - "version": "4.19.1", - "resolved": "https://registry.npm.taobao.org/eslint/download/eslint-4.19.1.tgz?cache=0&sync_timestamp=1595098868314&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint%2Fdownload%2Feslint-4.19.1.tgz", - "integrity": "sha1-MtHWU+HZBAiFS/spbwdux+GGowA=", - "dev": true, - "optional": true, - "requires": { - "ajv": "^5.3.0", - "babel-code-frame": "^6.22.0", - "chalk": "^2.1.0", - "concat-stream": "^1.6.0", - "cross-spawn": "^5.1.0", - "debug": "^3.1.0", - "doctrine": "^2.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.4", - "esquery": "^1.0.0", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.0.1", - "ignore": "^3.3.3", - "imurmurhash": "^0.1.4", - "inquirer": "^3.0.6", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.9.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.2", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", - "progress": "^2.0.0", - "regexpp": "^1.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.3.0", - "strip-ansi": "^4.0.0", - "strip-json-comments": "~2.0.1", - "table": "4.0.2", - "text-table": "~0.2.0" - }, - "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "optional": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true, - "optional": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "dev": true, - "optional": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", - "dev": true, - "optional": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "optional": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-3.7.3.tgz", - "integrity": "sha1-u1ByANPRf2AkdjYWC0gmKEsQhTU=", - "dev": true, - "optional": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-1.1.0.tgz?cache=0&sync_timestamp=1591599666712&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-deep-equal%2Fdownload%2Ffast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true, - "optional": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true, - "optional": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz?cache=0&sync_timestamp=1594427569171&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-4.1.5.tgz", - "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=", - "dev": true, - "optional": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", - "dev": true, - "optional": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true, - "optional": true - } - } - }, - "eslint-config-standard": { - "version": "12.0.0", - "resolved": "https://registry.npm.taobao.org/eslint-config-standard/download/eslint-config-standard-12.0.0.tgz?cache=0&sync_timestamp=1584727519567&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-config-standard%2Fdownload%2Feslint-config-standard-12.0.0.tgz", - "integrity": "sha1-Y4tMZdsL1aQTGflruh8V3a0hB9k=", - "dev": true - }, - "eslint-import-resolver-node": { - "version": "0.3.4", - "resolved": "https://registry.npm.taobao.org/eslint-import-resolver-node/download/eslint-import-resolver-node-0.3.4.tgz", - "integrity": "sha1-hf+oGULCUBLYIxCW3fZ5wDBCxxc=", - "dev": true, - "requires": { - "debug": "^2.6.9", - "resolve": "^1.13.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "eslint-loader": { - "version": "2.2.1", - "resolved": "https://registry.npm.taobao.org/eslint-loader/download/eslint-loader-2.2.1.tgz", - "integrity": "sha1-KLnBLaVAV68IReKmEScBova/gzc=", - "dev": true, - "requires": { - "loader-fs-cache": "^1.0.0", - "loader-utils": "^1.0.2", - "object-assign": "^4.0.1", - "object-hash": "^1.1.4", - "rimraf": "^2.6.1" - } - }, - "eslint-module-utils": { - "version": "2.6.0", - "resolved": "https://registry.npm.taobao.org/eslint-module-utils/download/eslint-module-utils-2.6.0.tgz", - "integrity": "sha1-V569CU9Wr3eX0ZyYZsnJSGYpv6Y=", - "dev": true, - "requires": { - "debug": "^2.6.9", - "pkg-dir": "^2.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - } - } - }, - "eslint-plugin-cypress": { - "version": "2.11.1", - "resolved": "https://registry.npm.taobao.org/eslint-plugin-cypress/download/eslint-plugin-cypress-2.11.1.tgz", - "integrity": "sha1-qUXid0uIIR4scGoFnUMeJitcKGI=", - "dev": true, - "requires": { - "globals": "^11.12.0" - } - }, - "eslint-plugin-import": { - "version": "2.22.0", - "resolved": "https://registry.npm.taobao.org/eslint-plugin-import/download/eslint-plugin-import-2.22.0.tgz?cache=0&sync_timestamp=1593237313662&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-import%2Fdownload%2Feslint-plugin-import-2.22.0.tgz", - "integrity": "sha1-kvdzb+H94+Led2I8g43Zkv9f+34=", - "dev": true, - "requires": { - "array-includes": "^3.1.1", - "array.prototype.flat": "^1.2.3", - "contains-path": "^0.1.0", - "debug": "^2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.3", - "eslint-module-utils": "^2.6.0", - "has": "^1.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.1", - "read-pkg-up": "^2.0.0", - "resolve": "^1.17.0", - "tsconfig-paths": "^3.9.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npm.taobao.org/doctrine/download/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } - } - } - }, - "eslint-plugin-node": { - "version": "6.0.1", - "resolved": "https://registry.npm.taobao.org/eslint-plugin-node/download/eslint-plugin-node-6.0.1.tgz?cache=0&sync_timestamp=1585396050025&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-node%2Fdownload%2Feslint-plugin-node-6.0.1.tgz", - "integrity": "sha1-vxlkIpgGQ3kxXXpLKnWTc3b6BeQ=", - "dev": true, - "requires": { - "ignore": "^3.3.6", - "minimatch": "^3.0.4", - "resolve": "^1.3.3", - "semver": "^5.4.1" - } - }, - "eslint-plugin-promise": { - "version": "3.8.0", - "resolved": "https://registry.npm.taobao.org/eslint-plugin-promise/download/eslint-plugin-promise-3.8.0.tgz", - "integrity": "sha1-ZevyeoRePB6db2pWIt3TgBaUtiE=", - "dev": true - }, - "eslint-plugin-standard": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/eslint-plugin-standard/download/eslint-plugin-standard-3.1.0.tgz", - "integrity": "sha1-Kp4hJZukxHwC1TstDJE11LECLUc=", - "dev": true - }, - "eslint-plugin-vue": { - "version": "4.7.1", - "resolved": "https://registry.npm.taobao.org/eslint-plugin-vue/download/eslint-plugin-vue-4.7.1.tgz?cache=0&sync_timestamp=1595148924086&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-vue%2Fdownload%2Feslint-plugin-vue-4.7.1.tgz", - "integrity": "sha1-yCm5/GJYLBiXtaC5Sv1E7MpRHmM=", - "dev": true, - "optional": true, - "requires": { - "vue-eslint-parser": "^2.0.3" - } - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-4.0.3.tgz", - "integrity": "sha1-ygODMxD2iJoyZHgaqC5j65z+eEg=", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=", - "dev": true - }, - "espree": { - "version": "3.5.4", - "resolved": "https://registry.npm.taobao.org/espree/download/espree-3.5.4.tgz?cache=0&sync_timestamp=1595033675028&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fespree%2Fdownload%2Fespree-3.5.4.tgz", - "integrity": "sha1-sPRHGHyKi+2US4FaZgvd9d610ac=", - "dev": true, - "optional": true, - "requires": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" - }, - "dependencies": { - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-5.7.4.tgz?cache=0&sync_timestamp=1591869432510&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-5.7.4.tgz", - "integrity": "sha1-Po2KmUfQWZoXltECJddDL0pKz14=", - "dev": true, - "optional": true - } - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesprima%2Fdownload%2Fesprima-4.0.1.tgz", - "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=", - "dev": true - }, - "esquery": { - "version": "1.3.1", - "resolved": "https://registry.npm.taobao.org/esquery/download/esquery-1.3.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesquery%2Fdownload%2Fesquery-1.3.1.tgz", - "integrity": "sha1-t4tYKKqOIU4p+3TE1bdS4cAz2lc=", - "dev": true, - "optional": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.1.0", - "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-5.1.0.tgz?cache=0&sync_timestamp=1586996117385&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-5.1.0.tgz", - "integrity": "sha1-N0MJ05/ZNa5QDnuS6Ka0xyDllkI=", - "dev": true, - "optional": true - } - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.2.1.tgz", - "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=", - "dev": true, - "requires": { - "estraverse": "^4.1.0" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz?cache=0&sync_timestamp=1586996117385&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-4.3.0.tgz", - "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npm.taobao.org/esutils/download/esutils-2.0.3.tgz?cache=0&sync_timestamp=1564535492241&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesutils%2Fdownload%2Fesutils-2.0.3.tgz", - "integrity": "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "event-pubsub": { - "version": "4.3.0", - "resolved": "https://registry.npm.taobao.org/event-pubsub/download/event-pubsub-4.3.0.tgz", - "integrity": "sha1-9o2Ba8KfHsAsU53FjI3UDOcss24=", - "dev": true - }, - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-4.0.4.tgz?cache=0&sync_timestamp=1589283150629&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feventemitter3%2Fdownload%2Feventemitter3-4.0.4.tgz", - "integrity": "sha1-tUY6zmNaCD0Bi9x8kXtMXxCoU4Q=", - "dev": true - }, - "events": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/events/download/events-3.1.0.tgz?cache=0&sync_timestamp=1578498298945&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fevents%2Fdownload%2Fevents-3.1.0.tgz", - "integrity": "sha1-hCea8bNMt1qoi/X/KR9tC9mzGlk=", - "dev": true - }, - "eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npm.taobao.org/eventsource/download/eventsource-1.0.7.tgz", - "integrity": "sha1-j7xyyT/NNAiAkLwKTmT0tc7m2NA=", - "dev": true, - "requires": { - "original": "^1.0.0" - } - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz", - "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/execa/download/execa-1.0.0.tgz?cache=0&sync_timestamp=1594145237072&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz", - "integrity": "sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/exit-hook/download/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", - "dev": true - }, - "exit-on-epipe": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/exit-on-epipe/download/exit-on-epipe-1.0.1.tgz", - "integrity": "sha1-C92S6H1ShdJn2qgXHQ6wYVlolpI=" - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npm.taobao.org/express/download/express-4.17.1.tgz?cache=0&sync_timestamp=1585185316222&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexpress%2Fdownload%2Fexpress-4.17.1.tgz", - "integrity": "sha1-RJH8OGBc9R+GKdOcK10Cb5ikwTQ=", - "dev": true, - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.7.0.tgz", - "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz", - "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz", - "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npm.taobao.org/external-editor/download/external-editor-2.2.0.tgz?cache=0&sync_timestamp=1562602052556&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexternal-editor%2Fdownload%2Fexternal-editor-2.2.0.tgz", - "integrity": "sha1-BFURz9jRM/OEZnPRBHwVTiFK09U=", - "dev": true, - "optional": true, - "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz", - "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", - "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", - "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz", - "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", - "dev": true - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz?cache=0&sync_timestamp=1591599666712&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-deep-equal%2Fdownload%2Ffast-deep-equal-3.1.3.tgz", - "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=", - "dev": true - }, - "fast-glob": { - "version": "2.2.7", - "resolved": "https://registry.npm.taobao.org/fast-glob/download/fast-glob-2.2.7.tgz", - "integrity": "sha1-aVOFfDr6R1//ku5gFdUtpwpM050=", - "dev": true, - "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" - }, - "dependencies": { - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/fastparse/download/fastparse-1.1.2.tgz", - "integrity": "sha1-kXKMWllC7O2FMSg8eUQe5BIsNak=", - "dev": true - }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "fecha": { - "version": "2.3.3", - "resolved": "https://registry.npm.taobao.org/fecha/download/fecha-2.3.3.tgz", - "integrity": "sha1-lI50FX3xoy/RsSw6PDzctuydls0=" - }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npm.taobao.org/figgy-pudding/download/figgy-pudding-3.5.2.tgz", - "integrity": "sha1-tO7oFIq7Adzx0aw0Nn1Z4S+mHW4=", - "dev": true - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/figures/download/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "optional": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, - "optional": true, - "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" - } - }, - "file-loader": { - "version": "3.0.1", - "resolved": "https://registry.npm.taobao.org/file-loader/download/file-loader-3.0.1.tgz", - "integrity": "sha1-+OC6C1mZGLUa3+RdZtHnca1WD6o=", - "dev": true, - "requires": { - "loader-utils": "^1.0.2", - "schema-utils": "^1.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz", - "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz", - "integrity": "sha1-VTp7hEb/b2hDWcRF8eN6BdrMM90=", - "dev": true, - "optional": true - }, - "filesize": { - "version": "3.6.1", - "resolved": "https://registry.npm.taobao.org/filesize/download/filesize-3.6.1.tgz", - "integrity": "sha1-CQuz7gG2+AGoqL6Z0xcQs0Irsxc=", - "dev": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.2.tgz", - "integrity": "sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0=", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "find-babel-config": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/find-babel-config/download/find-babel-config-1.2.0.tgz", - "integrity": "sha1-qbezF+tbmGDNqdVHQKjIM3oig6I=", - "dev": true, - "requires": { - "json5": "^0.5.1", - "path-exists": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz?cache=0&sync_timestamp=1586046271069&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson5%2Fdownload%2Fjson5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - } - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-2.1.0.tgz", - "integrity": "sha1-jQ+UzRP+Q8bHwmGg2GEVypGMBfc=", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-parent-dir": { - "version": "0.3.0", - "resolved": "https://registry.npm.taobao.org/find-parent-dir/download/find-parent-dir-0.3.0.tgz", - "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=", - "dev": true - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "flat-cache": { - "version": "1.3.4", - "resolved": "https://registry.npm.taobao.org/flat-cache/download/flat-cache-1.3.4.tgz", - "integrity": "sha1-LC73dSXMKSkAff/6HdMUqpyd7m8=", - "dev": true, - "optional": true, - "requires": { - "circular-json": "^0.3.1", - "graceful-fs": "^4.1.2", - "rimraf": "~2.6.2", - "write": "^0.2.1" - }, - "dependencies": { - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.6.3.tgz?cache=0&sync_timestamp=1581229865753&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-2.6.3.tgz", - "integrity": "sha1-stEE/g2Psnz54KHNqCYt04M8bKs=", - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/flush-write-stream/download/flush-write-stream-1.1.1.tgz", - "integrity": "sha1-jdfYc6G6vCB9lOrQwuDkQnbr8ug=", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "fmin": { - "version": "0.0.2", - "resolved": "https://registry.npm.taobao.org/fmin/download/fmin-0.0.2.tgz", - "integrity": "sha1-Wbu0DUP/3ByUzQClaMQflfGXMBc=", - "requires": { - "contour_plot": "^0.0.1", - "json2module": "^0.0.3", - "rollup": "^0.25.8", - "tape": "^4.5.1", - "uglify-js": "^2.6.2" - } - }, - "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.5.10.tgz?cache=0&sync_timestamp=1592518281721&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.5.10.tgz", - "integrity": "sha1-e3qfmuov3/NnhqlP9kPtB/T/Xio=", - "requires": { - "debug": "=3.1.0" - } - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npm.taobao.org/for-each/download/for-each-0.3.3.tgz", - "integrity": "sha1-abRH6IoKXTLD5whPPxcQA0shN24=", - "requires": { - "is-callable": "^1.1.3" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz?cache=0&sync_timestamp=1573184298867&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffor-in%2Fdownload%2Ffor-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz", - "integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npm.taobao.org/forwarded/download/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, - "frac": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/frac/download/frac-1.1.2.tgz", - "integrity": "sha1-PXT39keMiKG1AgMG10fcYxPHTQs=" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npm.taobao.org/from2/download/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npm.taobao.org/fs-extra/download/fs-extra-7.0.1.tgz", - "integrity": "sha1-TxicRKoSO4lfcigE9V6iPq3DSOk=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/fs-minipass/download/fs-minipass-2.1.0.tgz?cache=0&sync_timestamp=1579628584498&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-minipass%2Fdownload%2Ffs-minipass-2.1.0.tgz", - "integrity": "sha1-f1A2/b8SxjwWkZDL5BmchSJx+fs=", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npm.taobao.org/fs-write-stream-atomic/download/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-2.1.3.tgz?cache=0&sync_timestamp=1588787369955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-2.1.3.tgz", - "integrity": "sha1-+3OHA66NL5/pAMM4Nt3r7ouX8j4=", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz", - "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=" - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true, - "optional": true - }, - "gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npm.taobao.org/gensync/download/gensync-1.0.0-beta.1.tgz", - "integrity": "sha1-WPQ2H/mH5f9uHnohCCeqNx6qwmk=", - "dev": true - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.3.tgz", - "integrity": "sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o=", - "dev": true - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/get-func-name/download/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npm.taobao.org/get-own-enumerable-property-symbols/download/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha1-tf3nfyLL4185C04ImSLFC85u9mQ=", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz", - "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz?cache=0&sync_timestamp=1573078079496&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob%2Fdownload%2Fglob-7.1.6.tgz", - "integrity": "sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY=", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.1.tgz", - "integrity": "sha1-tsHvQXxOVmPqSY8cRa+saRa7wik=", - "dev": true, - "optional": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npm.taobao.org/glob-to-regexp/download/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", - "dev": true - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npm.taobao.org/globals/download/globals-11.12.0.tgz", - "integrity": "sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4=", - "dev": true - }, - "globby": { - "version": "9.2.0", - "resolved": "https://registry.npm.taobao.org/globby/download/globby-9.2.0.tgz", - "integrity": "sha1-/QKacGxwPSm90XD0tts6P3p8tj0=", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^1.0.2", - "dir-glob": "^2.2.2", - "fast-glob": "^2.2.6", - "glob": "^7.1.3", - "ignore": "^4.0.3", - "pify": "^4.0.1", - "slash": "^2.0.0" - }, - "dependencies": { - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-4.0.6.tgz", - "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=", - "dev": true - } - } - }, - "good-listener": { - "version": "1.2.2", - "resolved": "https://registry.npm.taobao.org/good-listener/download/good-listener-1.2.2.tgz", - "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", - "requires": { - "delegate": "^3.1.2" - } - }, - "gq-plus": { - "version": "2.1.5", - "resolved": "https://registry.npm.taobao.org/gq-plus/download/gq-plus-2.1.5.tgz", - "integrity": "sha1-xGkLE10oAAukXd7nuopA10RvVJM=", - "requires": { - "async-validator": "^1.10.0", - "axios": "^0.15.3", - "deepmerge": "^2.2.1", - "element-resize-detector": "^1.2.0", - "js-calendar": "^1.2.3", - "lodash.throttle": "^4.1.1", - "popper.js": "^1.14.6", - "tinycolor2": "^1.4.1", - "v-click-outside-x": "^3.5.6" - }, - "dependencies": { - "axios": { - "version": "0.15.3", - "resolved": "https://registry.npm.taobao.org/axios/download/axios-0.15.3.tgz", - "integrity": "sha1-LJ1jiy4ZGgjqHWzJiOrda6W9wFM=", - "requires": { - "follow-redirects": "1.0.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "requires": { - "ms": "2.0.0" - } - }, - "follow-redirects": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.0.0.tgz?cache=0&sync_timestamp=1592518281721&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.0.0.tgz", - "integrity": "sha1-jjQpjL0uF28lTv/sdaHHjMhJ/Tc=", - "requires": { - "debug": "^2.2.0" - } - } - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.4.tgz?cache=0&sync_timestamp=1588086924019&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgraceful-fs%2Fdownload%2Fgraceful-fs-4.2.4.tgz", - "integrity": "sha1-Ila94U02MpWMRl68ltxGfKB6Kfs=", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npm.taobao.org/growl/download/growl-1.10.5.tgz", - "integrity": "sha1-8nNdwig2dPpnR4sQGBBZNVw2nl4=", - "dev": true - }, - "gzip-size": { - "version": "5.1.1", - "resolved": "https://registry.npm.taobao.org/gzip-size/download/gzip-size-5.1.1.tgz", - "integrity": "sha1-y5vuaS+HwGErIyhAqHOQTkwTUnQ=", - "dev": true, - "requires": { - "duplexer": "^0.1.1", - "pify": "^4.0.1" - } - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/handle-thing/download/handle-thing-2.0.1.tgz", - "integrity": "sha1-hX95zjWVgMNA1DCBzGSJcNC7I04=", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npm.taobao.org/har-validator/download/har-validator-5.1.3.tgz", - "integrity": "sha1-HvievT5JllV2de7ZiTEQ3DUPoIA=", - "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz", - "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.1.tgz", - "integrity": "sha1-n1IUdYpEGWxAbZvXbOv4HsLdMeg=" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/hash-base/download/hash-base-3.1.0.tgz", - "integrity": "sha1-VcOB2eBuHSmXqIO0o/3f5/DTrzM=", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz", - "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz", - "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=", - "dev": true - } - } - }, - "hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhash-sum%2Fdownload%2Fhash-sum-1.0.2.tgz", - "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", - "dev": true - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npm.taobao.org/hash.js/download/hash.js-1.1.7.tgz", - "integrity": "sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I=", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npm.taobao.org/hawk/download/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true, - "optional": true, - "requires": { - "boom": "2.x.x", - "cryptiles": "2.x.x", - "hoek": "2.x.x", - "sntp": "1.x.x" - } - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/he/download/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/hex-color-regex/download/hex-color-regex-1.1.0.tgz", - "integrity": "sha1-TAb8y0YC/iYCs8k9+C1+fb8aio4=", - "dev": true - }, - "highlight.js": { - "version": "9.18.1", - "resolved": "https://registry.npm.taobao.org/highlight.js/download/highlight.js-9.18.1.tgz", - "integrity": "sha1-7SGqAB/mJSuxCj121HVzxlOf4Tw=" - }, - "highlight.js-async-webpack": { - "version": "1.0.4", - "resolved": "https://registry.npm.taobao.org/highlight.js-async-webpack/download/highlight.js-async-webpack-1.0.4.tgz", - "integrity": "sha1-wGtnv5nwSQRdYrdW5YVbCRLsYWw=" - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/hmac-drbg/download/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npm.taobao.org/hoek/download/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true, - "optional": true - }, - "hoopy": { - "version": "0.1.4", - "resolved": "https://registry.npm.taobao.org/hoopy/download/hoopy-0.1.4.tgz", - "integrity": "sha1-YJIH1mEQADOpqUAq096mdzgcGx0=", - "dev": true - }, - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.8.8.tgz?cache=0&sync_timestamp=1594428020608&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhosted-git-info%2Fdownload%2Fhosted-git-info-2.8.8.tgz", - "integrity": "sha1-dTm9S8Hg4KiVgVouAmJCCxKFhIg=", - "dev": true - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npm.taobao.org/hpack.js/download/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/hsl-regex/download/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", - "dev": true - }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/hsla-regex/download/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", - "dev": true - }, - "html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/html-comment-regex/download/html-comment-regex-1.1.2.tgz", - "integrity": "sha1-l9RoiutcgYhqNk+qDK0d2hTUM6c=", - "dev": true - }, - "html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/html-encoding-sniffer/download/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha1-5w2EuU2lOqN14R/jo1G+ZkLKRvg=", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.1" - } - }, - "html-entities": { - "version": "1.3.1", - "resolved": "https://registry.npm.taobao.org/html-entities/download/html-entities-1.3.1.tgz", - "integrity": "sha1-+5oaS1sUxdq6gtPjTGrk/nAaDkQ=", - "dev": true - }, - "html-minifier": { - "version": "3.5.21", - "resolved": "https://registry.npm.taobao.org/html-minifier/download/html-minifier-3.5.21.tgz", - "integrity": "sha1-0AQOBUcw41TbAIRjWTGUAVIS0gw=", - "dev": true, - "requires": { - "camel-case": "3.0.x", - "clean-css": "4.2.x", - "commander": "2.17.x", - "he": "1.2.x", - "param-case": "2.1.x", - "relateurl": "0.2.x", - "uglify-js": "3.4.x" - }, - "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.17.1.tgz?cache=0&sync_timestamp=1595168173997&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.17.1.tgz", - "integrity": "sha1-vXerfebelCBc6sxy8XFtKfIKd78=", - "dev": true - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/he/download/he-1.2.0.tgz", - "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - }, - "uglify-js": { - "version": "3.4.10", - "resolved": "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.4.10.tgz?cache=0&sync_timestamp=1592744803278&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-3.4.10.tgz", - "integrity": "sha1-mtlWPY6zrN+404WX0q8dgV9qdV8=", - "dev": true, - "requires": { - "commander": "~2.19.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.19.0.tgz?cache=0&sync_timestamp=1595168173997&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.19.0.tgz", - "integrity": "sha1-9hmKqE5bg8RgVLlN3tv+1e6f8So=", - "dev": true - } - } - } - } - }, - "html-tags": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/html-tags/download/html-tags-2.0.0.tgz", - "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", - "dev": true - }, - "html-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npm.taobao.org/html-webpack-plugin/download/html-webpack-plugin-3.2.0.tgz?cache=0&sync_timestamp=1588268411154&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-webpack-plugin%2Fdownload%2Fhtml-webpack-plugin-3.2.0.tgz", - "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", - "dev": true, - "requires": { - "html-minifier": "^3.2.3", - "loader-utils": "^0.2.16", - "lodash": "^4.17.3", - "pretty-error": "^2.0.2", - "tapable": "^1.0.0", - "toposort": "^1.0.0", - "util.promisify": "1.0.0" - }, - "dependencies": { - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npm.taobao.org/big.js/download/big.js-3.2.0.tgz", - "integrity": "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4=", - "dev": true - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/emojis-list/download/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz?cache=0&sync_timestamp=1586046271069&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson5%2Fdownload%2Fjson5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true, - "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0", - "object-assign": "^4.0.1" - } - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil.promisify%2Fdownload%2Futil.promisify-1.0.0.tgz", - "integrity": "sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - } - } - }, - "html2canvas": { - "version": "1.0.0-rc.5", - "resolved": "https://registry.npm.taobao.org/html2canvas/download/html2canvas-1.0.0-rc.5.tgz", - "integrity": "sha1-TuPKyfbiCg+gwvNab5nJYK5+xME=", - "requires": { - "css-line-break": "1.1.1" - } - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npm.taobao.org/htmlparser2/download/htmlparser2-3.10.1.tgz", - "integrity": "sha1-vWedw/WYl7ajS7EHSchVu1OpOS8=", - "dev": true, - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/entities/download/entities-1.1.2.tgz?cache=0&sync_timestamp=1591227679482&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fentities%2Fdownload%2Fentities-1.1.2.tgz", - "integrity": "sha1-vfpzUplmTfr9NFKe1PhSKidf6lY=", - "dev": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz", - "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npm.taobao.org/http-deceiver/download/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.7.2.tgz?cache=0&sync_timestamp=1593407710477&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.7.2.tgz", - "integrity": "sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } - } - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npm.taobao.org/http-proxy/download/http-proxy-1.18.1.tgz", - "integrity": "sha1-QBVB8FNIhLv5UmAzTnL4juOXZUk=", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npm.taobao.org/http-proxy-middleware/download/http-proxy-middleware-0.19.1.tgz?cache=0&sync_timestamp=1594312982456&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-proxy-middleware%2Fdownload%2Fhttp-proxy-middleware-0.19.1.tgz", - "integrity": "sha1-GDx9xKoUeRUDBkmMIQza+WCApDo=", - "dev": true, - "requires": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/https-browserify/download/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/human-signals/download/human-signals-1.1.1.tgz?cache=0&sync_timestamp=1584198662293&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhuman-signals%2Fdownload%2Fhuman-signals-1.1.1.tgz", - "integrity": "sha1-xbHNFPUK6uCatsWf5jujOV/k36M=", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz", - "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/icss-replace-symbols/download/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", - "dev": true - }, - "icss-utils": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/icss-utils/download/icss-utils-2.1.0.tgz", - "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", - "dev": true, - "requires": { - "postcss": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-6.0.23.tgz?cache=0&sync_timestamp=1591102414113&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss%2Fdownload%2Fpostcss-6.0.23.tgz", - "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npm.taobao.org/ieee754/download/ieee754-1.1.13.tgz", - "integrity": "sha1-7BaFWOlaoYH9h9N/VcMrvLZwi4Q=", - "dev": true - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npm.taobao.org/iferr/download/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-3.3.10.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-3.3.10.tgz", - "integrity": "sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM=", - "dev": true - }, - "image-size": { - "version": "0.5.5", - "resolved": "https://registry.npm.taobao.org/image-size/download/image-size-0.5.5.tgz", - "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", - "dev": true, - "optional": true - }, - "import-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/import-cwd/download/import-cwd-2.1.0.tgz", - "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", - "dev": true, - "requires": { - "import-from": "^2.1.0" - } - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "dependencies": { - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/caller-path/download/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } - } - }, - "import-from": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/import-from/download/import-from-2.1.0.tgz", - "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } - } - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/import-local/download/import-local-2.0.0.tgz", - "integrity": "sha1-VQcL44pZk88Y72236WH1vuXFoJ0=", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/indent-string/download/indent-string-4.0.0.tgz", - "integrity": "sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE=", - "dev": true - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/indexes-of/download/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npm.taobao.org/infer-owner/download/infer-owner-1.0.4.tgz", - "integrity": "sha1-xM78qo5RBRwqQLos6KPScpWvlGc=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz", - "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npm.taobao.org/ini/download/ini-1.3.5.tgz", - "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=", - "dev": true - }, - "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npm.taobao.org/inquirer/download/inquirer-3.3.0.tgz?cache=0&sync_timestamp=1594661205347&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finquirer%2Fdownload%2Finquirer-3.3.0.tgz", - "integrity": "sha1-ndLyrXZdyrH/BEO0kUQqILoifck=", - "dev": true, - "optional": true, - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.0.4", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rx-lite": "^4.0.8", - "rx-lite-aggregates": "^4.0.8", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true, - "optional": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "dev": true, - "optional": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", - "dev": true, - "optional": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", - "dev": true, - "optional": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npm.taobao.org/internal-ip/download/internal-ip-4.3.0.tgz", - "integrity": "sha1-hFRSuq2dLKO2nGNaE3rLmg2tCQc=", - "dev": true, - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - }, - "dependencies": { - "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npm.taobao.org/default-gateway/download/default-gateway-4.2.0.tgz?cache=0&sync_timestamp=1590419212936&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefault-gateway%2Fdownload%2Fdefault-gateway-4.2.0.tgz", - "integrity": "sha1-FnEEx1AMIRX23WmwpTa7jtcgVSs=", - "dev": true, - "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - } - } - } - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npm.taobao.org/interpret/download/interpret-1.4.0.tgz", - "integrity": "sha1-Zlq4vE2iendKQFhOgS4+D6RbGh4=", - "dev": true - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npm.taobao.org/invariant/download/invariant-2.2.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finvariant%2Fdownload%2Finvariant-2.2.4.tgz", - "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/invert-kv/download/invert-kv-2.0.0.tgz?cache=0&sync_timestamp=1589565904735&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finvert-kv%2Fdownload%2Finvert-kv-2.0.0.tgz", - "integrity": "sha1-c5P1r6Weyf9fZ6J2INEcIm4+7AI=", - "dev": true - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npm.taobao.org/ip/download/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/ip-regex/download/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.9.1.tgz", - "integrity": "sha1-v/OFQ+64mEglB5/zoqjmy9RngbM=", - "dev": true - }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/is-absolute-url/download/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npm.taobao.org/is-arguments/download/is-arguments-1.0.4.tgz", - "integrity": "sha1-P6+WbHy6D/Q3+zH2JQCC/PBEjPM=" - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-2.1.0.tgz", - "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz", - "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" - }, - "is-callable": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/is-callable/download/is-callable-1.2.0.tgz?cache=0&sync_timestamp=1591427607174&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-callable%2Fdownload%2Fis-callable-1.2.0.tgz", - "integrity": "sha1-gzNlYLVKOONeOi33r9BFTWkUaLs=" - }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npm.taobao.org/is-ci/download/is-ci-1.2.1.tgz", - "integrity": "sha1-43ecjuF/zPQoSI9uKBGH8uYyhBw=", - "dev": true, - "requires": { - "ci-info": "^1.5.0" - } - }, - "is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/is-color-stop/download/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", - "dev": true, - "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.2.tgz?cache=0&sync_timestamp=1576729182289&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-date-object%2Fdownload%2Fis-date-object-1.0.2.tgz", - "integrity": "sha1-vac28s2P0G0yhE53Q7+nSUw7/X4=" - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz", - "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz", - "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", - "dev": true - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npm.taobao.org/is-directory/download/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-docker": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/is-docker/download/is-docker-2.0.0.tgz", - "integrity": "sha1-LLDfDnXi0GT+GGTDfN6st7Lc8ls=", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-finite": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/is-finite/download/is-finite-1.1.0.tgz", - "integrity": "sha1-kEE1x3+0LAZB1qobzbxNqo2ggvM=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz", - "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/is-obj/download/is-obj-2.0.0.tgz", - "integrity": "sha1-Rz+wXZc3BeP9liBUUBjKjiLvSYI=", - "dev": true - }, - "is-observable": { - "version": "0.2.0", - "resolved": "https://registry.npm.taobao.org/is-observable/download/is-observable-0.2.0.tgz", - "integrity": "sha1-s2ExHYPG5dcmyr9eJQsCNxBvWuI=", - "dev": true, - "requires": { - "symbol-observable": "^0.2.2" - } - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-2.2.0.tgz", - "integrity": "sha1-Z9Q7gmZKe1GR/ZEZEn6zAASKn9s=", - "dev": true - }, - "is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/is-path-in-cwd/download/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha1-v+Lcomxp85cmWkAJljYCk1oFOss=", - "dev": true, - "requires": { - "is-path-inside": "^2.1.0" - } - }, - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-2.1.0.tgz", - "integrity": "sha1-fJgQWH1lmkDSe8201WFuqwWUlLI=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.2" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz?cache=0&sync_timestamp=1595290593289&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-object%2Fdownload%2Fis-plain-object-2.0.4.tgz", - "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npm.taobao.org/is-promise/download/is-promise-2.2.2.tgz?cache=0&sync_timestamp=1588001830257&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-promise%2Fdownload%2Fis-promise-2.2.2.tgz", - "integrity": "sha1-OauVnMv5p3TPB597QMeib3YxNfE=", - "dev": true - }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npm.taobao.org/is-regex/download/is-regex-1.0.5.tgz", - "integrity": "sha1-OdWJo1i/GJZ/cmlnEguPwa7XTq4=", - "requires": { - "has": "^1.0.3" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/is-regexp/download/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", - "dev": true - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/is-resolvable/download/is-resolvable-1.1.0.tgz", - "integrity": "sha1-+xj4fOH+uSUWnJpAfBkxijIG7Yg=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npm.taobao.org/is-string/download/is-string-1.0.5.tgz", - "integrity": "sha1-QEk+0ZjvP/R3uMf5L2ROyCpc06Y=", - "dev": true - }, - "is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/is-svg/download/is-svg-3.0.0.tgz", - "integrity": "sha1-kyHb0pwhLlypnE+peUxxS8r6L3U=", - "dev": true, - "requires": { - "html-comment-regex": "^1.1.0" - } - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/is-symbol/download/is-symbol-1.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-symbol%2Fdownload%2Fis-symbol-1.0.3.tgz", - "integrity": "sha1-OOEBS55jKb4N6dJKQU/XRB7GGTc=", - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-whitespace": { - "version": "0.3.0", - "resolved": "https://registry.npm.taobao.org/is-whitespace/download/is-whitespace-0.3.0.tgz", - "integrity": "sha1-Fjnssb4DauxppUy7QBz77XEUq38=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz", - "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz?cache=0&sync_timestamp=1588494180082&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-wsl%2Fdownload%2Fis-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "iview": { - "version": "3.5.4", - "resolved": "https://registry.npm.taobao.org/iview/download/iview-3.5.4.tgz", - "integrity": "sha1-1Ra5LnO2F/Lcf0WDH5kFnWmTL4I=", - "requires": { - "async-validator": "^1.12.2", - "deepmerge": "^2.2.1", - "element-resize-detector": "^1.2.0", - "js-calendar": "^1.2.3", - "lodash.throttle": "^4.1.1", - "popper.js": "^1.14.6", - "tinycolor2": "^1.4.1", - "v-click-outside-x": "^4.0.19" - }, - "dependencies": { - "v-click-outside-x": { - "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/v-click-outside-x/download/v-click-outside-x-4.1.0.tgz?cache=0&sync_timestamp=1579043108278&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fv-click-outside-x%2Fdownload%2Fv-click-outside-x-4.1.0.tgz", - "integrity": "sha1-voJmgOLSVmaooYUzKSnUYkSqJEc=" - } - } - }, - "javascript-stringify": { - "version": "1.6.0", - "resolved": "https://registry.npm.taobao.org/javascript-stringify/download/javascript-stringify-1.6.0.tgz", - "integrity": "sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM=", - "dev": true - }, - "jest-get-type": { - "version": "21.2.0", - "resolved": "https://registry.npm.taobao.org/jest-get-type/download/jest-get-type-21.2.0.tgz", - "integrity": "sha1-9jdqudtLYNgeOfMHScbEZvQNSiM=", - "dev": true - }, - "jest-validate": { - "version": "21.2.1", - "resolved": "https://registry.npm.taobao.org/jest-validate/download/jest-validate-21.2.1.tgz?cache=0&sync_timestamp=1592925336825&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-validate%2Fdownload%2Fjest-validate-21.2.1.tgz", - "integrity": "sha1-zAy8plPNVJN7pPKhEXlndFMN08c=", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "jest-get-type": "^21.2.0", - "leven": "^2.1.0", - "pretty-format": "^21.2.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jquery": { - "version": "2.2.4", - "resolved": "https://registry.npm.taobao.org/jquery/download/jquery-2.2.4.tgz", - "integrity": "sha1-LInWiJterFIqfuoywUUhVZxsvwI=" - }, - "js-beautify": { - "version": "1.11.0", - "resolved": "https://registry.npm.taobao.org/js-beautify/download/js-beautify-1.11.0.tgz", - "integrity": "sha1-r7hz3EfViYY2AJPctplR6LzV3tI=", - "dev": true, - "requires": { - "config-chain": "^1.1.12", - "editorconfig": "^0.15.3", - "glob": "^7.1.3", - "mkdirp": "~1.0.3", - "nopt": "^4.0.3" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-1.0.4.tgz?cache=0&sync_timestamp=1587535418745&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-1.0.4.tgz", - "integrity": "sha1-PrXtYmInVteaXw4qIh3+utdcL34=", - "dev": true - } - } - }, - "js-calendar": { - "version": "1.2.3", - "resolved": "https://registry.npm.taobao.org/js-calendar/download/js-calendar-1.2.3.tgz", - "integrity": "sha1-pYOwZEtOaVujlPNE0QPbzHp6fT4=" - }, - "js-cookie": { - "version": "2.2.1", - "resolved": "https://registry.npm.taobao.org/js-cookie/download/js-cookie-2.2.1.tgz", - "integrity": "sha1-aeEG3F1YBolFYpAqpbrsN0Tpsrg=" - }, - "js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npm.taobao.org/js-levenshtein/download/js-levenshtein-1.1.6.tgz", - "integrity": "sha1-xs7ljrNVA3LfjeuF+tXOZs4B1Z0=", - "dev": true - }, - "js-message": { - "version": "1.0.5", - "resolved": "https://registry.npm.taobao.org/js-message/download/js-message-1.0.5.tgz", - "integrity": "sha1-IwDSSxrwjondCVvBpMnJz8uJLRU=", - "dev": true - }, - "js-queue": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/js-queue/download/js-queue-2.0.0.tgz", - "integrity": "sha1-NiITz4YPRo8BJfxslqvBdCUx+Ug=", - "dev": true, - "requires": { - "easy-stack": "^1.0.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz", - "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=", - "dev": true - }, - "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.14.0.tgz?cache=0&sync_timestamp=1590172122543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-yaml%2Fdownload%2Fjs-yaml-3.14.0.tgz", - "integrity": "sha1-p6NBcPJqIbsWJCTYray0ETpp5II=", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsdom": { - "version": "13.2.0", - "resolved": "https://registry.npm.taobao.org/jsdom/download/jsdom-13.2.0.tgz?cache=0&sync_timestamp=1594341172783&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsdom%2Fdownload%2Fjsdom-13.2.0.tgz", - "integrity": "sha1-saDb2twlVDUmK+jqNyPS26DX6zo=", - "dev": true, - "requires": { - "abab": "^2.0.0", - "acorn": "^6.0.4", - "acorn-globals": "^4.3.0", - "array-equal": "^1.0.0", - "cssom": "^0.3.4", - "cssstyle": "^1.1.1", - "data-urls": "^1.1.0", - "domexception": "^1.0.1", - "escodegen": "^1.11.0", - "html-encoding-sniffer": "^1.0.2", - "nwsapi": "^2.0.9", - "parse5": "5.1.0", - "pn": "^1.1.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.5", - "saxes": "^3.1.5", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.5.0", - "w3c-hr-time": "^1.0.1", - "w3c-xmlserializer": "^1.0.1", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^7.0.0", - "ws": "^6.1.2", - "xml-name-validator": "^3.0.0" - } - }, - "jsdom-global": { - "version": "3.0.2", - "resolved": "https://registry.npm.taobao.org/jsdom-global/download/jsdom-global-3.0.2.tgz", - "integrity": "sha1-a9KZwTsMRiay2iwDk81DhdYGrLk=", - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-2.5.2.tgz", - "integrity": "sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q=", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz", - "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", - "dev": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/json-stable-stringify/download/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "optional": true, - "requires": { - "jsonify": "~0.0.0" - } - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true, - "optional": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json2module": { - "version": "0.0.3", - "resolved": "https://registry.npm.taobao.org/json2module/download/json2module-0.0.3.tgz", - "integrity": "sha1-APtfSpt638PwZHwpyxe80Zeb6bI=", - "requires": { - "rw": "^1.3.2" - } - }, - "json3": { - "version": "3.3.3", - "resolved": "https://registry.npm.taobao.org/json3/download/json3-3.3.3.tgz", - "integrity": "sha1-f8EON1/FrkLEcFpcwKpvYr4wW4E=", - "dev": true - }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npm.taobao.org/json5/download/json5-2.1.3.tgz?cache=0&sync_timestamp=1586046271069&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson5%2Fdownload%2Fjson5-2.1.3.tgz", - "integrity": "sha1-ybD3+pIzv+WAf+ZvzzpWF+1ZfUM=", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npm.taobao.org/jsonify/download/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true, - "optional": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "killable": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/killable/download/killable-1.0.1.tgz", - "integrity": "sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI=", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - }, - "launch-editor": { - "version": "2.2.1", - "resolved": "https://registry.npm.taobao.org/launch-editor/download/launch-editor-2.2.1.tgz", - "integrity": "sha1-hxtaPuOdZoD8wm03kwtu7aidsMo=", - "dev": true, - "requires": { - "chalk": "^2.3.0", - "shell-quote": "^1.6.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "launch-editor-middleware": { - "version": "2.2.1", - "resolved": "https://registry.npm.taobao.org/launch-editor-middleware/download/launch-editor-middleware-2.2.1.tgz", - "integrity": "sha1-4UsH5scVSwpLhqD9NFeE5FgEwVc=", - "dev": true, - "requires": { - "launch-editor": "^2.2.1" - } - }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npm.taobao.org/lazy-cache/download/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/lcid/download/lcid-2.0.0.tgz", - "integrity": "sha1-bvXS32DlL4LrIopMNz6NHzlyU88=", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "less": { - "version": "2.7.3", - "resolved": "https://registry.npm.taobao.org/less/download/less-2.7.3.tgz?cache=0&sync_timestamp=1594913896834&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fless%2Fdownload%2Fless-2.7.3.tgz", - "integrity": "sha1-zBJg9RyQCp7A2R+2mYE54CUHtjs=", - "dev": true, - "requires": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "mime": "^1.2.11", - "mkdirp": "^0.5.0", - "promise": "^7.1.1", - "request": "2.81.0", - "source-map": "^0.5.3" - }, - "dependencies": { - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "optional": true, - "requires": { - "co": "^4.6.0", - "json-stable-stringify": "^1.0.1" - } - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npm.taobao.org/assert-plus/download/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npm.taobao.org/form-data/download/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true, - "optional": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.12" - } - }, - "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npm.taobao.org/har-schema/download/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", - "dev": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npm.taobao.org/har-validator/download/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "dev": true, - "optional": true, - "requires": { - "ajv": "^4.9.1", - "har-schema": "^1.0.5" - } - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/http-signature/download/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "^0.2.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz?cache=0&sync_timestamp=1590596706367&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-1.6.0.tgz", - "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=", - "dev": true, - "optional": true - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true, - "optional": true - }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npm.taobao.org/performance-now/download/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", - "dev": true, - "optional": true - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", - "dev": true, - "optional": true - }, - "request": { - "version": "2.81.0", - "resolved": "https://registry.npm.taobao.org/request/download/request-2.81.0.tgz?cache=0&sync_timestamp=1581439006948&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frequest%2Fdownload%2Frequest-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "~0.6.0", - "aws4": "^1.2.1", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.0", - "forever-agent": "~0.6.1", - "form-data": "~2.1.1", - "har-validator": "~4.2.1", - "hawk": "~3.1.3", - "http-signature": "~1.1.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.7", - "oauth-sign": "~0.8.1", - "performance-now": "^0.2.0", - "qs": "~6.4.0", - "safe-buffer": "^5.0.1", - "stringstream": "~0.0.4", - "tough-cookie": "~2.3.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.0.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "optional": true - }, - "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.3.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftough-cookie%2Fdownload%2Ftough-cookie-2.3.4.tgz", - "integrity": "sha1-7GDO44rGdQY//JelwYlwV47oNlU=", - "dev": true, - "optional": true, - "requires": { - "punycode": "^1.4.1" - } - } - } - }, - "less-loader": { - "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/less-loader/download/less-loader-4.1.0.tgz?cache=0&sync_timestamp=1593787586071&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fless-loader%2Fdownload%2Fless-loader-4.1.0.tgz", - "integrity": "sha1-LBNSxbCaT4QQFJAnT9UWdN5BNj4=", - "dev": true, - "requires": { - "clone": "^2.1.1", - "loader-utils": "^1.1.0", - "pify": "^3.0.0" - }, - "dependencies": { - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/clone/download/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "leven": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/leven/download/leven-2.1.0.tgz", - "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npm.taobao.org/lines-and-columns/download/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "lint-staged": { - "version": "6.1.1", - "resolved": "https://registry.npm.taobao.org/lint-staged/download/lint-staged-6.1.1.tgz?cache=0&sync_timestamp=1592387031001&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flint-staged%2Fdownload%2Flint-staged-6.1.1.tgz", - "integrity": "sha1-zQjE2bjMwtNxmNHEfOd9Ir5s8yQ=", - "dev": true, - "requires": { - "app-root-path": "^2.0.0", - "chalk": "^2.1.0", - "commander": "^2.11.0", - "cosmiconfig": "^4.0.0", - "debug": "^3.1.0", - "dedent": "^0.7.0", - "execa": "^0.8.0", - "find-parent-dir": "^0.3.0", - "is-glob": "^4.0.0", - "jest-validate": "^21.1.0", - "listr": "^0.13.0", - "lodash": "^4.17.4", - "log-symbols": "^2.0.0", - "minimatch": "^3.0.0", - "npm-which": "^3.0.1", - "p-map": "^1.1.1", - "path-is-inside": "^1.0.2", - "pify": "^3.0.0", - "staged-git-files": "1.0.0", - "stringify-object": "^3.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "cosmiconfig": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-4.0.0.tgz", - "integrity": "sha1-dgORVJWAu9LfHlYrwXexPCkJctw=", - "dev": true, - "requires": { - "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", - "parse-json": "^4.0.0", - "require-from-string": "^2.0.1" - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "0.8.0", - "resolved": "https://registry.npm.taobao.org/execa/download/execa-0.8.0.tgz?cache=0&sync_timestamp=1594145237072&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-0.8.0.tgz", - "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz?cache=0&sync_timestamp=1594427569171&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-4.1.5.tgz", - "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/p-map/download/p-map-1.2.0.tgz", - "integrity": "sha1-5OlPMR6rvIYzoeeZCBZfyiYkG2s=", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } - }, - "listr": { - "version": "0.13.0", - "resolved": "https://registry.npm.taobao.org/listr/download/listr-0.13.0.tgz", - "integrity": "sha1-ILsLowuuZg7oTMBQPfS+PVYjiH0=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "cli-truncate": "^0.2.1", - "figures": "^1.7.0", - "indent-string": "^2.1.0", - "is-observable": "^0.2.0", - "is-promise": "^2.1.0", - "is-stream": "^1.1.0", - "listr-silent-renderer": "^1.1.1", - "listr-update-renderer": "^0.4.0", - "listr-verbose-renderer": "^0.4.0", - "log-symbols": "^1.0.2", - "log-update": "^1.0.2", - "ora": "^0.2.3", - "p-map": "^1.1.1", - "rxjs": "^5.4.2", - "stream-to-observable": "^0.2.0", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, - "requires": { - "restore-cursor": "^1.0.1" - } - }, - "cli-spinners": { - "version": "0.1.2", - "resolved": "https://registry.npm.taobao.org/cli-spinners/download/cli-spinners-0.1.2.tgz?cache=0&sync_timestamp=1595080565423&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcli-spinners%2Fdownload%2Fcli-spinners-0.1.2.tgz", - "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=", - "dev": true - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npm.taobao.org/figures/download/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/indent-string/download/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/log-symbols/download/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "dev": true, - "requires": { - "chalk": "^1.0.0" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "ora": { - "version": "0.2.3", - "resolved": "https://registry.npm.taobao.org/ora/download/ora-0.2.3.tgz?cache=0&sync_timestamp=1594997498208&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fora%2Fdownload%2Fora-0.2.3.tgz", - "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", - "dev": true, - "requires": { - "chalk": "^1.1.1", - "cli-cursor": "^1.0.2", - "cli-spinners": "^0.1.2", - "object-assign": "^4.0.1" - } - }, - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/p-map/download/p-map-1.2.0.tgz", - "integrity": "sha1-5OlPMR6rvIYzoeeZCBZfyiYkG2s=", - "dev": true - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true, - "requires": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" - } - } - } - }, - "listr-silent-renderer": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/listr-silent-renderer/download/listr-silent-renderer-1.1.1.tgz", - "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", - "dev": true - }, - "listr-update-renderer": { - "version": "0.4.0", - "resolved": "https://registry.npm.taobao.org/listr-update-renderer/download/listr-update-renderer-0.4.0.tgz", - "integrity": "sha1-NE2YDaLKLosUW6MFkI8yrj9MyKc=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "cli-truncate": "^0.2.1", - "elegant-spinner": "^1.0.1", - "figures": "^1.7.0", - "indent-string": "^3.0.0", - "log-symbols": "^1.0.2", - "log-update": "^1.0.2", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npm.taobao.org/figures/download/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npm.taobao.org/indent-string/download/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true - }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/log-symbols/download/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "dev": true, - "requires": { - "chalk": "^1.0.0" - } - } - } - }, - "listr-verbose-renderer": { - "version": "0.4.1", - "resolved": "https://registry.npm.taobao.org/listr-verbose-renderer/download/listr-verbose-renderer-0.4.1.tgz", - "integrity": "sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "cli-cursor": "^1.0.2", - "date-fns": "^1.27.2", - "figures": "^1.7.0" - }, - "dependencies": { - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, - "requires": { - "restore-cursor": "^1.0.1" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npm.taobao.org/figures/download/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true, - "requires": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" - } - } - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/load-json-file/download/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "loader-fs-cache": { - "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/loader-fs-cache/download/loader-fs-cache-1.0.3.tgz", - "integrity": "sha1-8IZXZG1gcHi+LwoDL4vWndbyd9k=", - "dev": true, - "requires": { - "find-cache-dir": "^0.1.1", - "mkdirp": "^0.5.1" - }, - "dependencies": { - "find-cache-dir": { - "version": "0.1.1", - "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-0.1.1.tgz", - "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "mkdirp": "^0.5.1", - "pkg-dir": "^1.0.0" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, - "requires": { - "find-up": "^1.0.0" - } - } - } - }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npm.taobao.org/loader-runner/download/loader-runner-2.4.0.tgz?cache=0&sync_timestamp=1593786163963&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-runner%2Fdownload%2Floader-runner-2.4.0.tgz", - "integrity": "sha1-7UcGa/5TTX6ExMe5mYwqdWB9k1c=", - "dev": true - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-1.4.0.tgz", - "integrity": "sha1-xXm140yzSxp07cbB+za/o3HVphM=", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/json5/download/json5-1.0.1.tgz?cache=0&sync_timestamp=1586046271069&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson5%2Fdownload%2Fjson5-1.0.1.tgz", - "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - } - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.19.tgz?cache=0&sync_timestamp=1594226805918&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.19.tgz", - "integrity": "sha1-5I3e2+MLMyF4PFtDAfvTU7weSks=" - }, - "lodash.defaultsdeep": { - "version": "4.6.1", - "resolved": "https://registry.npm.taobao.org/lodash.defaultsdeep/download/lodash.defaultsdeep-4.6.1.tgz", - "integrity": "sha1-US6b1yHSctlOPTpjZT+hdRZ0HKY=", - "dev": true - }, - "lodash.kebabcase": { - "version": "4.1.1", - "resolved": "https://registry.npm.taobao.org/lodash.kebabcase/download/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=", - "dev": true - }, - "lodash.mapvalues": { - "version": "4.6.0", - "resolved": "https://registry.npm.taobao.org/lodash.mapvalues/download/lodash.mapvalues-4.6.0.tgz", - "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npm.taobao.org/lodash.memoize/download/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npm.taobao.org/lodash.sortby/download/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, - "lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npm.taobao.org/lodash.throttle/download/lodash.throttle-4.1.1.tgz", - "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" - }, - "lodash.transform": { - "version": "4.6.0", - "resolved": "https://registry.npm.taobao.org/lodash.transform/download/lodash.transform-4.6.0.tgz", - "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=", - "dev": true - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npm.taobao.org/lodash.uniq/download/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npm.taobao.org/log-symbols/download/log-symbols-2.2.0.tgz", - "integrity": "sha1-V0Dhxdbw39pK2TI7UzIQfva0xAo=", - "dev": true, - "requires": { - "chalk": "^2.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "log-update": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/log-update/download/log-update-1.0.2.tgz?cache=0&sync_timestamp=1582186637481&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flog-update%2Fdownload%2Flog-update-1.0.2.tgz", - "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", - "dev": true, - "requires": { - "ansi-escapes": "^1.0.0", - "cli-cursor": "^1.0.2" - }, - "dependencies": { - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", - "dev": true - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, - "requires": { - "restore-cursor": "^1.0.1" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true, - "requires": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" - } - } - } - }, - "loglevel": { - "version": "1.6.8", - "resolved": "https://registry.npm.taobao.org/loglevel/download/loglevel-1.6.8.tgz", - "integrity": "sha1-iiX7ddCSIw7NRFcnDYC1TigBEXE=", - "dev": true - }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/longest/download/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npm.taobao.org/loose-envify/download/loose-envify-1.4.0.tgz", - "integrity": "sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npm.taobao.org/lower-case/download/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", - "dev": true - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-5.1.1.tgz?cache=0&sync_timestamp=1594427569171&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-5.1.1.tgz", - "integrity": "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-2.1.0.tgz?cache=0&sync_timestamp=1587567875186&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-dir%2Fdownload%2Fmake-dir-2.1.0.tgz", - "integrity": "sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npm.taobao.org/map-age-cleaner/download/map-age-cleaner-0.1.3.tgz", - "integrity": "sha1-fVg6cwZDTAVf5HSw9FB45uG0uSo=", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/map-visit/download/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "marked": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/marked/download/marked-1.1.1.tgz?cache=0&sync_timestamp=1594690149591&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmarked%2Fdownload%2Fmarked-1.1.1.tgz", - "integrity": "sha1-5dYbaYQiENXfV7BYVuDJFXJwPmo=" - }, - "mavon-editor": { - "version": "2.9.0", - "resolved": "https://registry.npm.taobao.org/mavon-editor/download/mavon-editor-2.9.0.tgz", - "integrity": "sha1-5Ru83N4YuSNjM6nOsS/tLYRUKQA=", - "requires": { - "highlight.js": "^9.11.0", - "highlight.js-async-webpack": "^1.0.4", - "xss": "^1.0.6" - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npm.taobao.org/md5.js/download/md5.js-1.3.5.tgz", - "integrity": "sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8=", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npm.taobao.org/mdn-data/download/mdn-data-2.0.4.tgz?cache=0&sync_timestamp=1593510420945&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmdn-data%2Fdownload%2Fmdn-data-2.0.4.tgz", - "integrity": "sha1-aZs8OKxvHXKAkaZGULZdOIUC/Vs=", - "dev": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npm.taobao.org/mem/download/mem-4.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmem%2Fdownload%2Fmem-4.3.0.tgz", - "integrity": "sha1-Rhr0l7xK4JYIzbLmDu+2m/90QXg=", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - }, - "dependencies": { - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz", - "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=", - "dev": true - } - } - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npm.taobao.org/memory-fs/download/memory-fs-0.4.1.tgz?cache=0&sync_timestamp=1570537491040&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmemory-fs%2Fdownload%2Fmemory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "merge-source-map": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/merge-source-map/download/merge-source-map-1.1.0.tgz", - "integrity": "sha1-L93n5gIJOfcJBqaPLXrmheTIxkY=", - "dev": true, - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - } - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/merge-stream/download/merge-stream-2.0.0.tgz", - "integrity": "sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A=", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npm.taobao.org/merge2/download/merge2-1.4.1.tgz", - "integrity": "sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz", - "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz", - "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", - "dev": true - } - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npm.taobao.org/miller-rabin/download/miller-rabin-4.0.1.tgz", - "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz", - "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=", - "dev": true - } - } - }, - "mime": { - "version": "2.4.6", - "resolved": "https://registry.npm.taobao.org/mime/download/mime-2.4.6.tgz?cache=0&sync_timestamp=1590596706367&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-2.4.6.tgz", - "integrity": "sha1-5bQHyQ20QvK+tbFiNz0Htpr/pNE=", - "dev": true - }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npm.taobao.org/mime-db/download/mime-db-1.44.0.tgz", - "integrity": "sha1-+hHF6wrKEzS0Izy01S8QxaYnL5I=", - "dev": true - }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.27.tgz?cache=0&sync_timestamp=1587700357245&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-types%2Fdownload%2Fmime-types-2.1.27.tgz", - "integrity": "sha1-R5SfmOJ56lMRn1ci4PNOUpvsAJ8=", - "dev": true, - "requires": { - "mime-db": "1.44.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz", - "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=", - "dev": true - }, - "mini-css-extract-plugin": { - "version": "0.8.2", - "resolved": "https://registry.npm.taobao.org/mini-css-extract-plugin/download/mini-css-extract-plugin-0.8.2.tgz?cache=0&sync_timestamp=1576856580721&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmini-css-extract-plugin%2Fdownload%2Fmini-css-extract-plugin-0.8.2.tgz", - "integrity": "sha1-qHXhab6yfIivd92WJ3HJ7tw9oWE=", - "dev": true, - "requires": { - "loader-utils": "^1.1.0", - "normalize-url": "1.9.1", - "schema-utils": "^1.0.0", - "webpack-sources": "^1.1.0" - }, - "dependencies": { - "normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npm.taobao.org/normalize-url/download/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", - "dev": true, - "requires": { - "object-assign": "^4.0.1", - "prepend-http": "^1.0.0", - "query-string": "^4.1.0", - "sort-keys": "^1.0.0" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz", - "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz", - "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", - "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz", - "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=" - }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npm.taobao.org/minipass/download/minipass-3.1.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminipass%2Fdownload%2Fminipass-3.1.3.tgz", - "integrity": "sha1-fUL/HzljVILhX5zbUxhN7r1YFf0=", - "dev": true, - "requires": { - "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-4.0.0.tgz", - "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=", - "dev": true - } - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/minipass-collect/download/minipass-collect-1.0.2.tgz", - "integrity": "sha1-IrgTv3Rdxu26JXa5QAIq1u3Ixhc=", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npm.taobao.org/minipass-flush/download/minipass-flush-1.0.5.tgz", - "integrity": "sha1-gucTXX6JpQ/+ZGEKeHlTxMTLs3M=", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.3", - "resolved": "https://registry.npm.taobao.org/minipass-pipeline/download/minipass-pipeline-1.2.3.tgz", - "integrity": "sha1-VfeDkwfXSFnW6K2pw+vnLOwhajQ=", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/mississippi/download/mississippi-3.0.0.tgz", - "integrity": "sha1-6goykfl+C16HdrNj1fChLZTGcCI=", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.2.tgz", - "integrity": "sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY=", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz", - "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz?cache=0&sync_timestamp=1587535418745&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.5.tgz", - "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npm.taobao.org/mocha/download/mocha-5.2.0.tgz", - "integrity": "sha1-bYrlCPWRZ/lA8rWzxKYSrlDJCuY=", - "dev": true, - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - }, - "dependencies": { - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.15.1.tgz?cache=0&sync_timestamp=1595168173997&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.15.1.tgz", - "integrity": "sha1-30boZ9D8Kuxmo0ZitAapzK//Ww8=", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npm.taobao.org/glob/download/glob-7.1.2.tgz?cache=0&sync_timestamp=1573078079496&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob%2Fdownload%2Fglob-7.1.2.tgz", - "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz?cache=0&sync_timestamp=1587535418745&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.4.0.tgz", - "integrity": "sha1-HGszdALCE3YF7+GfEP7DkPb6q1Q=", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "mocha-webpack": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npm.taobao.org/mocha-webpack/download/mocha-webpack-2.0.0-beta.0.tgz", - "integrity": "sha1-2F/Jpw+CpK1ZW3cCoRgWBd+llUk=", - "dev": true, - "requires": { - "babel-runtime": "^6.18.0", - "chalk": "^2.3.0", - "chokidar": "^2.0.2", - "glob-parent": "^3.1.0", - "globby": "^7.1.1", - "interpret": "^1.0.1", - "is-glob": "^4.0.0", - "loader-utils": "^1.1.0", - "lodash": "^4.3.0", - "memory-fs": "^0.4.1", - "nodent-runtime": "^3.0.3", - "normalize-path": "^2.0.1", - "progress": "^2.0.0", - "source-map-support": "^0.5.0", - "strip-ansi": "^4.0.0", - "toposort": "^1.0.0", - "yargs": "^11.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz", - "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz?cache=0&sync_timestamp=1593261363626&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-1.13.1.tgz", - "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz?cache=0&sync_timestamp=1594864731636&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-2.1.8.tgz", - "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz", - "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=", - "dev": true - } - } - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-4.1.0.tgz", - "integrity": "sha1-NIQi2+gtgAswIu709qwQvy5NG0k=", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz?cache=0&sync_timestamp=1588787369955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-1.2.13.tgz", - "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "globby": { - "version": "7.1.1", - "resolved": "https://registry.npm.taobao.org/globby/download/globby-7.1.1.tgz", - "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "dir-glob": "^2.0.0", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz?cache=0&sync_timestamp=1584985910691&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freaddirp%2Fdownload%2Freaddirp-2.2.1.tgz", - "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.19.tgz?cache=0&sync_timestamp=1587719517036&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-support%2Fdownload%2Fsource-map-support-0.5.19.tgz", - "integrity": "sha1-qYti+G3K9PZzmWSMCFKRq56P7WE=", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yargs": { - "version": "11.1.1", - "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-11.1.1.tgz?cache=0&sync_timestamp=1594421046064&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-11.1.1.tgz", - "integrity": "sha1-UFLv40RqTfXtZpyZWIbMDxNwJ2Y=", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.1.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^9.0.2" - } - } - } - }, - "moment": { - "version": "2.27.0", - "resolved": "https://registry.npm.taobao.org/moment/download/moment-2.27.0.tgz?cache=0&sync_timestamp=1592516115109&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmoment%2Fdownload%2Fmoment-2.27.0.tgz", - "integrity": "sha1-i/9OPiaiNiIN/j423nVrbrqgEF0=" - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npm.taobao.org/multicast-dns/download/multicast-dns-6.2.3.tgz", - "integrity": "sha1-oOx72QVcQoL3kMPIL04o2zsxsik=", - "dev": true, - "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - } - }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/multicast-dns-service-types/download/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true, - "optional": true - }, - "mz": { - "version": "2.7.0", - "resolved": "https://registry.npm.taobao.org/mz/download/mz-2.7.0.tgz", - "integrity": "sha1-lQCAV6Vsr63CvGPd5/n/aVWUjjI=", - "dev": true, - "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "nan": { - "version": "2.14.1", - "resolved": "https://registry.npm.taobao.org/nan/download/nan-2.14.1.tgz?cache=0&sync_timestamp=1587497111086&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnan%2Fdownload%2Fnan-2.14.1.tgz", - "integrity": "sha1-174036MQW5FJTDFHCJMV7/iHSwE=", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.13.tgz", - "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz", - "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", - "dev": true - } - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true, - "optional": true - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz", - "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs=", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npm.taobao.org/neo-async/download/neo-async-2.6.2.tgz", - "integrity": "sha1-tKr7k+OustgXTKU88WOrfXMIMF8=", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npm.taobao.org/nice-try/download/nice-try-1.0.5.tgz", - "integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=", - "dev": true - }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npm.taobao.org/no-case/download/no-case-2.3.2.tgz?cache=0&sync_timestamp=1576748705107&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fno-case%2Fdownload%2Fno-case-2.3.2.tgz", - "integrity": "sha1-YLgTOWvjmz8SiKTB7V0efSi0ZKw=", - "dev": true, - "requires": { - "lower-case": "^1.1.1" - } - }, - "node-forge": { - "version": "0.9.0", - "resolved": "https://registry.npm.taobao.org/node-forge/download/node-forge-0.9.0.tgz", - "integrity": "sha1-1iQFDtu0SHStyhK7mlLsY8t4JXk=", - "dev": true - }, - "node-ipc": { - "version": "9.1.1", - "resolved": "https://registry.npm.taobao.org/node-ipc/download/node-ipc-9.1.1.tgz", - "integrity": "sha1-TiRe1pOOZRAOWV68XcNLFujdXWk=", - "dev": true, - "requires": { - "event-pubsub": "4.3.0", - "js-message": "1.0.5", - "js-queue": "2.0.0" - } - }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npm.taobao.org/node-libs-browser/download/node-libs-browser-2.2.1.tgz", - "integrity": "sha1-tk9RPRgzhiX5A0bSew0jXmMfZCU=", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, - "node-releases": { - "version": "1.1.59", - "resolved": "https://registry.npm.taobao.org/node-releases/download/node-releases-1.1.59.tgz?cache=0&sync_timestamp=1594212234484&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-releases%2Fdownload%2Fnode-releases-1.1.59.tgz", - "integrity": "sha1-TWSDMGQc7HBL/xD45P4o5FOrjo4=", - "dev": true - }, - "nodent-runtime": { - "version": "3.2.1", - "resolved": "https://registry.npm.taobao.org/nodent-runtime/download/nodent-runtime-3.2.1.tgz", - "integrity": "sha1-nidV2F4592Qojw1HUuvP4+VB4A4=", - "dev": true - }, - "nopt": { - "version": "4.0.3", - "resolved": "https://registry.npm.taobao.org/nopt/download/nopt-4.0.3.tgz", - "integrity": "sha1-o3XK2dAv2SEnjZVMIlTVqlfhXkg=", - "dev": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.5.0.tgz", - "integrity": "sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz", - "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=", - "dev": true - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npm.taobao.org/normalize-range/download/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true - }, - "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npm.taobao.org/normalize-url/download/normalize-url-3.3.0.tgz", - "integrity": "sha1-suHE3E98bVd0PfczpPWXjRhlBVk=", - "dev": true - }, - "normalize.css": { - "version": "8.0.1", - "resolved": "https://registry.npm.taobao.org/normalize.css/download/normalize.css-8.0.1.tgz?cache=0&sync_timestamp=1588361527323&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize.css%2Fdownload%2Fnormalize.css-8.0.1.tgz", - "integrity": "sha1-m5iiCHOLnMJjTKrLxC0THJdIe/M=" - }, - "npm-path": { - "version": "2.0.4", - "resolved": "https://registry.npm.taobao.org/npm-path/download/npm-path-2.0.4.tgz", - "integrity": "sha1-xkE0el/51qCeTZvOVYDE9QUnjmQ=", - "dev": true, - "requires": { - "which": "^1.2.10" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "npm-which": { - "version": "3.0.1", - "resolved": "https://registry.npm.taobao.org/npm-which/download/npm-which-3.0.1.tgz", - "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", - "dev": true, - "requires": { - "commander": "^2.9.0", - "npm-path": "^2.0.2", - "which": "^1.2.10" - } - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/nth-check/download/nth-check-1.0.2.tgz", - "integrity": "sha1-sr0pXDfj3VijvwcAN2Zjuk2c8Fw=", - "dev": true, - "requires": { - "boolbase": "~1.0.0" - } - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npm.taobao.org/num2fraction/download/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npm.taobao.org/nwsapi/download/nwsapi-2.2.0.tgz", - "integrity": "sha1-IEh5qePQaP8qVROcLHcngGgaOLc=", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz", - "integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-assign%2Fdownload%2Fobject-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "object-hash": { - "version": "1.3.1", - "resolved": "https://registry.npm.taobao.org/object-hash/download/object-hash-1.3.1.tgz", - "integrity": "sha1-/eRSCYqVHLFF8Dm7fUVUSd3BJt8=", - "dev": true - }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npm.taobao.org/object-inspect/download/object-inspect-1.7.0.tgz?cache=0&sync_timestamp=1592545149361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-inspect%2Fdownload%2Fobject-inspect-1.7.0.tgz", - "integrity": "sha1-9Pa9GBrXfwBrXs5gvQtvOY/3Smc=" - }, - "object-is": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/object-is/download/object-is-1.1.2.tgz?cache=0&sync_timestamp=1586894009620&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-is%2Fdownload%2Fobject-is-1.1.2.tgz", - "integrity": "sha1-xdLof/nhGfeLegiEQVGeLuwVc7Y=", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/object-keys/download/object-keys-1.1.1.tgz", - "integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4=" - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/object-visit/download/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/object.assign/download/object.assign-4.1.0.tgz", - "integrity": "sha1-lovxEA15Vrs8oIbwBvhGs7xACNo=", - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject.getownpropertydescriptors%2Fdownload%2Fobject.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha1-Npvx+VktiridcS3O1cuBx8U1Jkk=", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "object.values": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/object.values/download/object.values-1.1.1.tgz", - "integrity": "sha1-aKmezeNWt+kpWjxeDOMdyMlT3l4=", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/obuf/download/obuf-1.1.2.tgz", - "integrity": "sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4=", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/on-headers/download/on-headers-1.0.2.tgz", - "integrity": "sha1-dysK5qqlJcOZ5Imt+tkMQD6zwo8=", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "open": { - "version": "6.4.0", - "resolved": "https://registry.npm.taobao.org/open/download/open-6.4.0.tgz?cache=0&sync_timestamp=1595208391438&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fopen%2Fdownload%2Fopen-6.4.0.tgz", - "integrity": "sha1-XBPpbQ3IlGhhZPGJZez+iJ7PyKk=", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - } - }, - "opener": { - "version": "1.5.1", - "resolved": "https://registry.npm.taobao.org/opener/download/opener-1.5.1.tgz", - "integrity": "sha1-bS8Od/GgrwAyrKcWwsH7uOfoq+0=", - "dev": true - }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npm.taobao.org/opn/download/opn-5.5.0.tgz", - "integrity": "sha1-/HFk+rVtI1kExRw7J9pnWMo7m/w=", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npm.taobao.org/optionator/download/optionator-0.8.3.tgz?cache=0&sync_timestamp=1585966141328&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Foptionator%2Fdownload%2Foptionator-0.8.3.tgz", - "integrity": "sha1-hPodA2/p08fiHZmIS2ARZ+yPtJU=", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "ora": { - "version": "3.4.0", - "resolved": "https://registry.npm.taobao.org/ora/download/ora-3.4.0.tgz?cache=0&sync_timestamp=1594997498208&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fora%2Fdownload%2Fora-3.4.0.tgz", - "integrity": "sha1-vwdSSRBZo+8+1MhQl1Md6f280xg=", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-spinners": "^2.0.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^5.2.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz", - "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz", - "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "original": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/original/download/original-1.0.2.tgz", - "integrity": "sha1-5EKmHP/hxf0gpl8yYcJmY7MD8l8=", - "dev": true, - "requires": { - "url-parse": "^1.4.3" - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npm.taobao.org/os-browserify/download/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/os-homedir/download/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/os-locale/download/os-locale-3.1.0.tgz?cache=0&sync_timestamp=1584865484693&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fos-locale%2Fdownload%2Fos-locale-3.1.0.tgz", - "integrity": "sha1-qAKm7hfyTBBIOrmTVxnO9O0Wvxo=", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npm.taobao.org/osenv/download/osenv-0.1.5.tgz", - "integrity": "sha1-hc36+uso6Gd/QW4odZK18/SepBA=", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/p-defer/download/p-defer-1.0.0.tgz?cache=0&sync_timestamp=1559922734651&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-defer%2Fdownload%2Fp-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/p-is-promise/download/p-is-promise-2.1.0.tgz", - "integrity": "sha1-kYzrrqJIpiz3/6uOO8qMX4gvxC4=", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-1.3.0.tgz?cache=0&sync_timestamp=1594559696906&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-1.3.0.tgz", - "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/p-map/download/p-map-2.1.0.tgz", - "integrity": "sha1-MQko/u+cnsxltosXaTAYpmXOoXU=", - "dev": true - }, - "p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npm.taobao.org/p-retry/download/p-retry-3.0.1.tgz", - "integrity": "sha1-MWtMiJPiyNwc+okfQGxLQivr8yg=", - "dev": true, - "requires": { - "retry": "^0.12.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/p-try/download/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npm.taobao.org/pako/download/pako-1.0.11.tgz", - "integrity": "sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8=", - "dev": true - }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/parallel-transform/download/parallel-transform-1.2.0.tgz", - "integrity": "sha1-kEnKN9bLIYLDsdLHIL6U0UpYFPw=", - "dev": true, - "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/param-case/download/param-case-2.1.1.tgz?cache=0&sync_timestamp=1576721608924&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparam-case%2Fdownload%2Fparam-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "dev": true, - "requires": { - "no-case": "^2.2.0" - } - }, - "parse-asn1": { - "version": "5.1.5", - "resolved": "https://registry.npm.taobao.org/parse-asn1/download/parse-asn1-5.1.5.tgz", - "integrity": "sha1-ADJxND2ljclMrOSU+u89IUfs6g4=", - "dev": true, - "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "parse5": { - "version": "5.1.0", - "resolved": "https://registry.npm.taobao.org/parse5/download/parse5-5.1.0.tgz", - "integrity": "sha1-xZNByXI/QUxFKXVWTHwApo1YrNI=", - "dev": true - }, - "parse5-htmlparser2-tree-adapter": { - "version": "5.1.1", - "resolved": "https://registry.npm.taobao.org/parse5-htmlparser2-tree-adapter/download/parse5-htmlparser2-tree-adapter-5.1.1.tgz", - "integrity": "sha1-6MdD1OkhlNUpPs3isIvjHmdGHLw=", - "dev": true, - "requires": { - "parse5": "^5.1.1" - }, - "dependencies": { - "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npm.taobao.org/parse5/download/parse5-5.1.1.tgz", - "integrity": "sha1-9o5OW6GFKsLK3AD0VV//bCq7YXg=", - "dev": true - } - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz", - "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npm.taobao.org/path-browserify/download/path-browserify-0.0.1.tgz", - "integrity": "sha1-5sTd1+06onxoogzE5Q4aTug7vEo=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/path-dirname/download/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz?cache=0&sync_timestamp=1574441431664&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz", - "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-3.0.0.tgz", - "integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/pathval/download/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", - "dev": true - }, - "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npm.taobao.org/pbkdf2/download/pbkdf2-3.1.1.tgz?cache=0&sync_timestamp=1591275684229&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpbkdf2%2Fdownload%2Fpbkdf2-3.1.1.tgz", - "integrity": "sha1-y4cksPramEWWhW0abrr9NYRlS5Q=", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.2.tgz", - "integrity": "sha1-IfMz6ba46v8CRo9RRupAbTRfTa0=", - "dev": true, - "optional": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npm.taobao.org/pify/download/pify-4.0.1.tgz", - "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-3.0.0.tgz", - "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=", - "dev": true, - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz", - "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz", - "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-2.3.0.tgz?cache=0&sync_timestamp=1594559696906&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-2.3.0.tgz", - "integrity": "sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz", - "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz", - "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=", - "dev": true - } - } - }, - "pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/pkg-up/download/pkg-up-2.0.0.tgz", - "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npm.taobao.org/pluralize/download/pluralize-7.0.0.tgz", - "integrity": "sha1-KYuJ34uTsCIdv0Ia0rGx6iP8Z3c=", - "dev": true, - "optional": true - }, - "pn": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/pn/download/pn-1.1.0.tgz", - "integrity": "sha1-4vTO8OIZ9GPBeas3Rj5OHs3Muvs=", - "dev": true - }, - "popper.js": { - "version": "1.16.1", - "resolved": "https://registry.npm.taobao.org/popper.js/download/popper.js-1.16.1.tgz", - "integrity": "sha1-KiI8s9x7YhPXQOQDcr5A3kPmWxs=" - }, - "portfinder": { - "version": "1.0.27", - "resolved": "https://registry.npm.taobao.org/portfinder/download/portfinder-1.0.27.tgz?cache=0&sync_timestamp=1595216077180&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fportfinder%2Fdownload%2Fportfinder-1.0.27.tgz", - "integrity": "sha1-pBMzwRa15fPTgPl0WsLzUITEx1g=", - "dev": true, - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.1" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.2.6.tgz", - "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-7.0.32.tgz?cache=0&sync_timestamp=1591102414113&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss%2Fdownload%2Fpostcss-7.0.32.tgz", - "integrity": "sha1-QxDW7jRwU9o0M9sr5JKIPWLOxZ0=", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz", - "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-calc": { - "version": "7.0.2", - "resolved": "https://registry.npm.taobao.org/postcss-calc/download/postcss-calc-7.0.2.tgz?cache=0&sync_timestamp=1582014221563&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-calc%2Fdownload%2Fpostcss-calc-7.0.2.tgz", - "integrity": "sha1-UE780AjKAnMSBWiweSsWzc3oqsE=", - "dev": true, - "requires": { - "postcss": "^7.0.27", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" - } - }, - "postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npm.taobao.org/postcss-colormin/download/postcss-colormin-4.0.3.tgz", - "integrity": "sha1-rgYLzpPteUrHEmTwgTLVUJVr04E=", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", - "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", - "dev": true - } - } - }, - "postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npm.taobao.org/postcss-convert-values/download/postcss-convert-values-4.0.1.tgz", - "integrity": "sha1-yjgT7U2g+BL51DcDWE5Enr4Ymn8=", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", - "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", - "dev": true - } - } - }, - "postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npm.taobao.org/postcss-discard-comments/download/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha1-H7q9LCRr/2qq15l7KwkY9NevQDM=", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npm.taobao.org/postcss-discard-duplicates/download/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha1-P+EzzTyCKC5VD8myORdqkge3hOs=", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npm.taobao.org/postcss-discard-empty/download/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha1-yMlR6fc+2UKAGUWERKAq2Qu592U=", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npm.taobao.org/postcss-discard-overridden/download/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha1-ZSrvipZybwKfXj4AFG7npOdV/1c=", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-load-config": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/postcss-load-config/download/postcss-load-config-2.1.0.tgz", - "integrity": "sha1-yE1pK3u3tB3c7ZTuYuirMbQXsAM=", - "dev": true, - "requires": { - "cosmiconfig": "^5.0.0", - "import-cwd": "^2.0.0" - } - }, - "postcss-loader": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/postcss-loader/download/postcss-loader-3.0.0.tgz", - "integrity": "sha1-a5eUPkfHLYRfqeA/Jzdz1OjdbC0=", - "dev": true, - "requires": { - "loader-utils": "^1.1.0", - "postcss": "^7.0.0", - "postcss-load-config": "^2.0.0", - "schema-utils": "^1.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz", - "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npm.taobao.org/postcss-merge-longhand/download/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha1-YvSaE+Sg7gTnuY9CuxYGLKJUniQ=", - "dev": true, - "requires": { - "css-color-names": "0.0.4", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "stylehacks": "^4.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", - "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", - "dev": true - } - } - }, - "postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npm.taobao.org/postcss-merge-rules/download/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha1-NivqT/Wh+Y5AdacTxsslrv75plA=", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "cssnano-util-same-parent": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0", - "vendors": "^1.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-3.1.2.tgz", - "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npm.taobao.org/postcss-minify-font-values/download/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha1-zUw0TM5HQ0P6xdgiBqssvLiv1aY=", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", - "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", - "dev": true - } - } - }, - "postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npm.taobao.org/postcss-minify-gradients/download/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha1-k7KcL/UJnFNe7NpWxKpuZlpmNHE=", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "is-color-stop": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", - "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", - "dev": true - } - } - }, - "postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npm.taobao.org/postcss-minify-params/download/postcss-minify-params-4.0.2.tgz", - "integrity": "sha1-a5zvAwwR41Jh+V9hjJADbWgNuHQ=", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "browserslist": "^4.0.0", - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "uniqs": "^2.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", - "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", - "dev": true - } - } - }, - "postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npm.taobao.org/postcss-minify-selectors/download/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha1-4uXrQL/uUA0M2SQ1APX46kJi+9g=", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-3.1.2.tgz", - "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-modules-extract-imports": { - "version": "1.2.1", - "resolved": "https://registry.npm.taobao.org/postcss-modules-extract-imports/download/postcss-modules-extract-imports-1.2.1.tgz", - "integrity": "sha1-3IfjQUjsfqtfeR981YSYMzdbdBo=", - "dev": true, - "requires": { - "postcss": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-6.0.23.tgz?cache=0&sync_timestamp=1591102414113&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss%2Fdownload%2Fpostcss-6.0.23.tgz", - "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-modules-local-by-default": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/postcss-modules-local-by-default/download/postcss-modules-local-by-default-1.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-local-by-default%2Fdownload%2Fpostcss-modules-local-by-default-1.2.0.tgz", - "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", - "dev": true, - "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-6.0.23.tgz?cache=0&sync_timestamp=1591102414113&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss%2Fdownload%2Fpostcss-6.0.23.tgz", - "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-modules-scope": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/postcss-modules-scope/download/postcss-modules-scope-1.1.0.tgz", - "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", - "dev": true, - "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-6.0.23.tgz?cache=0&sync_timestamp=1591102414113&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss%2Fdownload%2Fpostcss-6.0.23.tgz", - "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-modules-values": { - "version": "1.3.0", - "resolved": "https://registry.npm.taobao.org/postcss-modules-values/download/postcss-modules-values-1.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-values%2Fdownload%2Fpostcss-modules-values-1.3.0.tgz", - "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", - "dev": true, - "requires": { - "icss-replace-symbols": "^1.1.0", - "postcss": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-6.0.23.tgz?cache=0&sync_timestamp=1591102414113&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss%2Fdownload%2Fpostcss-6.0.23.tgz", - "integrity": "sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ=", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npm.taobao.org/postcss-normalize-charset/download/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha1-izWt067oOhNrBHHg1ZvlilAoXdQ=", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-normalize-display-values": { - "version": "4.0.2", - "resolved": "https://registry.npm.taobao.org/postcss-normalize-display-values/download/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha1-Db4EpM6QY9RmftK+R2u4MMglk1o=", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", - "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", - "dev": true - } - } - }, - "postcss-normalize-positions": { - "version": "4.0.2", - "resolved": "https://registry.npm.taobao.org/postcss-normalize-positions/download/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha1-BfdX+E8mBDc3g2ipH4ky1LECkX8=", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", - "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", - "dev": true - } - } - }, - "postcss-normalize-repeat-style": { - "version": "4.0.2", - "resolved": "https://registry.npm.taobao.org/postcss-normalize-repeat-style/download/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha1-xOu8KJ85kaAo1EdRy90RkYsXkQw=", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", - "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", - "dev": true - } - } - }, - "postcss-normalize-string": { - "version": "4.0.2", - "resolved": "https://registry.npm.taobao.org/postcss-normalize-string/download/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha1-zUTECrB6DHo23F6Zqs4eyk7CaQw=", - "dev": true, - "requires": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", - "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", - "dev": true - } - } - }, - "postcss-normalize-timing-functions": { - "version": "4.0.2", - "resolved": "https://registry.npm.taobao.org/postcss-normalize-timing-functions/download/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha1-jgCcoqOUnNr4rSPmtquZy159KNk=", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", - "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", - "dev": true - } - } - }, - "postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "https://registry.npm.taobao.org/postcss-normalize-unicode/download/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha1-hBvUj9zzAZrUuqdJOj02O1KuHPs=", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", - "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", - "dev": true - } - } - }, - "postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npm.taobao.org/postcss-normalize-url/download/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha1-EOQ3+GvHx+WPe5ZS7YeNqqlfquE=", - "dev": true, - "requires": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", - "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", - "dev": true - } - } - }, - "postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npm.taobao.org/postcss-normalize-whitespace/download/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha1-vx1AcP5Pzqh9E0joJdjMDF+qfYI=", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", - "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", - "dev": true - } - } - }, - "postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npm.taobao.org/postcss-ordered-values/download/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha1-DPdcgg7H1cTSgBiVWeC1ceusDu4=", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", - "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", - "dev": true - } - } - }, - "postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npm.taobao.org/postcss-reduce-initial/download/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha1-f9QuvqXpyBRgljniwuhK4nC6SN8=", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npm.taobao.org/postcss-reduce-transforms/download/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha1-F++kBerMbge+NBSlyi0QdGgdTik=", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", - "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", - "dev": true - } - } - }, - "postcss-selector-parser": { - "version": "6.0.2", - "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-6.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-6.0.2.tgz", - "integrity": "sha1-k0z3mdAWyDQRhZ4J3Oyt4BKG7Fw=", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "postcss-svgo": { - "version": "4.0.2", - "resolved": "https://registry.npm.taobao.org/postcss-svgo/download/postcss-svgo-4.0.2.tgz", - "integrity": "sha1-F7mXvHEbMzurFDqu07jT1uPTglg=", - "dev": true, - "requires": { - "is-svg": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", - "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", - "dev": true - } - } - }, - "postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npm.taobao.org/postcss-unique-selectors/download/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha1-lEaRHzKJv9ZMbWgPBzwDsfnuS6w=", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", - "uniqs": "^2.0.0" - } - }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-4.1.0.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-4.1.0.tgz", - "integrity": "sha1-RD9qIM7WSBor2k+oUypuVdeJoss=", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npm.taobao.org/prepend-http/download/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "prettier": { - "version": "1.19.1", - "resolved": "https://registry.npm.taobao.org/prettier/download/prettier-1.19.1.tgz?cache=0&sync_timestamp=1587491448785&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-1.19.1.tgz", - "integrity": "sha1-99f1/4qc2HKnvkyhQglZVqYHl8s=", - "dev": true, - "optional": true - }, - "pretty": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/pretty/download/pretty-2.0.0.tgz", - "integrity": "sha1-rbx5YLe7/iiaVX3F9zdhmiINBqU=", - "dev": true, - "requires": { - "condense-newlines": "^0.2.1", - "extend-shallow": "^2.0.1", - "js-beautify": "^1.6.12" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "pretty-error": { - "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/pretty-error/download/pretty-error-2.1.1.tgz", - "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", - "dev": true, - "requires": { - "renderkid": "^2.0.1", - "utila": "~0.4" - } - }, - "pretty-format": { - "version": "21.2.1", - "resolved": "https://registry.npm.taobao.org/pretty-format/download/pretty-format-21.2.1.tgz?cache=0&sync_timestamp=1592925335887&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpretty-format%2Fdownload%2Fpretty-format-21.2.1.tgz", - "integrity": "sha1-rlQH888hBmzQEaobpfzntqLt2zY=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0", - "ansi-styles": "^3.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - } - } - }, - "printj": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/printj/download/printj-1.1.2.tgz", - "integrity": "sha1-2Q3rKXWoufYA+zoclOP0xTx4oiI=" - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npm.taobao.org/process/download/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz", - "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I=", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npm.taobao.org/progress/download/progress-2.0.3.tgz", - "integrity": "sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=", - "dev": true - }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npm.taobao.org/promise/download/promise-7.3.1.tgz", - "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=", - "dev": true, - "optional": true, - "requires": { - "asap": "~2.0.3" - } - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npm.taobao.org/proto-list/download/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", - "dev": true - }, - "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.6.tgz", - "integrity": "sha1-/cIzZQVEfT8vLGOO0nLK9hS7sr8=", - "dev": true, - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/prr/download/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npm.taobao.org/psl/download/psl-1.8.0.tgz?cache=0&sync_timestamp=1585142991033&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpsl%2Fdownload%2Fpsl-1.8.0.tgz", - "integrity": "sha1-kyb4vPsBOtzABf3/BWrM4CDlHCQ=", - "dev": true - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npm.taobao.org/public-encrypt/download/public-encrypt-4.0.3.tgz", - "integrity": "sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA=", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz", - "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=", - "dev": true - } - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz", - "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npm.taobao.org/pumpify/download/pumpify-1.5.1.tgz?cache=0&sync_timestamp=1569938200736&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpumpify%2Fdownload%2Fpumpify-1.5.1.tgz", - "integrity": "sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4=", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/pump/download/pump-2.0.1.tgz", - "integrity": "sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk=", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz", - "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=", - "dev": true - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npm.taobao.org/q/download/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz", - "integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=", - "dev": true - }, - "query-string": { - "version": "4.3.4", - "resolved": "https://registry.npm.taobao.org/query-string/download/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", - "dev": true, - "requires": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npm.taobao.org/querystring/download/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npm.taobao.org/querystring-es3/download/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "querystringify": { - "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/querystringify/download/querystringify-2.1.1.tgz", - "integrity": "sha1-YOWl/WSn+L+k0qsu1v30yFutFU4=", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/randombytes/download/randombytes-2.1.0.tgz", - "integrity": "sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo=", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npm.taobao.org/randomfill/download/randomfill-1.0.4.tgz", - "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npm.taobao.org/range-parser/download/range-parser-1.2.1.tgz", - "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=", - "dev": true - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npm.taobao.org/raw-body/download/raw-body-2.4.0.tgz", - "integrity": "sha1-oc5vucm8NWylLoklarWQWeE9AzI=", - "dev": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npm.taobao.org/read-pkg/download/read-pkg-5.2.0.tgz", - "integrity": "sha1-e/KVQ4yloz5WzTDgU7NO5yUMk8w=", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "parse-json": { - "version": "5.0.0", - "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-5.0.0.tgz", - "integrity": "sha1-c+URTJhtFD76NxLU6iTbmkJm9g8=", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1", - "lines-and-columns": "^1.1.6" - } - } - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg-up%2Fdownload%2Fread-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - }, - "dependencies": { - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/read-pkg/download/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - } - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.7.tgz", - "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "3.4.0", - "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-3.4.0.tgz?cache=0&sync_timestamp=1584985910691&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freaddirp%2Fdownload%2Freaddirp-3.4.0.tgz", - "integrity": "sha1-n9zN+ekVWAVEkiGsZF6DA6tbmto=", - "dev": true, - "optional": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "regenerate": { - "version": "1.4.1", - "resolved": "https://registry.npm.taobao.org/regenerate/download/regenerate-1.4.1.tgz", - "integrity": "sha1-ytkq2Oa1kXc0hfvgWkhcr09Ffm8=", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npm.taobao.org/regenerate-unicode-properties/download/regenerate-unicode-properties-8.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerate-unicode-properties%2Fdownload%2Fregenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha1-5d5xEdZV57pgwFfb6f83yH5lzew=", - "dev": true, - "requires": { - "regenerate": "^1.4.0" - } - }, - "regenerator-runtime": { - "version": "0.13.5", - "resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.5.tgz?cache=0&sync_timestamp=1584052597708&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.5.tgz", - "integrity": "sha1-2Hih0JS0MG0QuQlkhLM+vVXiZpc=", - "dev": true - }, - "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npm.taobao.org/regenerator-transform/download/regenerator-transform-0.14.5.tgz?cache=0&sync_timestamp=1593557393872&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-transform%2Fdownload%2Fregenerator-transform-0.14.5.tgz", - "integrity": "sha1-yY2hVGg2ccnE3LFuznNlF+G3/rQ=", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz", - "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npm.taobao.org/regexp.prototype.flags/download/regexp.prototype.flags-1.3.0.tgz?cache=0&sync_timestamp=1576388379660&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexp.prototype.flags%2Fdownload%2Fregexp.prototype.flags-1.3.0.tgz", - "integrity": "sha1-erqJs8E6ZFCdq888qNn7ub31y3U=", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "regexpp": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/regexpp/download/regexpp-1.1.0.tgz", - "integrity": "sha1-DjUW3Qt5BPQT0tQZPc5GGMOmias=", - "dev": true, - "optional": true - }, - "regexpu-core": { - "version": "4.7.0", - "resolved": "https://registry.npm.taobao.org/regexpu-core/download/regexpu-core-4.7.0.tgz?cache=0&sync_timestamp=1583949899397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexpu-core%2Fdownload%2Fregexpu-core-4.7.0.tgz", - "integrity": "sha1-/L9FjFBDGwu3tF1pZ7gZLZHz2Tg=", - "dev": true, - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" - } - }, - "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npm.taobao.org/regjsgen/download/regjsgen-0.5.2.tgz", - "integrity": "sha1-kv8pX7He7L9uzaslQ9IH6RqjNzM=", - "dev": true - }, - "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npm.taobao.org/regjsparser/download/regjsparser-0.6.4.tgz", - "integrity": "sha1-p2n4aEMIQBpm6bUp0kNv9NBmYnI=", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npm.taobao.org/relateurl/download/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "renderkid": { - "version": "2.0.3", - "resolved": "https://registry.npm.taobao.org/renderkid/download/renderkid-2.0.3.tgz", - "integrity": "sha1-OAF5wv9a4TZcUivy/Pz/AcW3QUk=", - "dev": true, - "requires": { - "css-select": "^1.1.0", - "dom-converter": "^0.2", - "htmlparser2": "^3.3.0", - "strip-ansi": "^3.0.0", - "utila": "^0.4.0" - }, - "dependencies": { - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/css-select/download/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npm.taobao.org/css-what/download/css-what-2.1.3.tgz", - "integrity": "sha1-ptdgRXM2X+dGhsPzEcVlE9iChfI=", - "dev": true - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npm.taobao.org/domutils/download/domutils-1.5.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomutils%2Fdownload%2Fdomutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - } - } - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.3.tgz", - "integrity": "sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4=", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/repeating/download/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npm.taobao.org/request/download/request-2.88.2.tgz?cache=0&sync_timestamp=1581439006948&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frequest%2Fdownload%2Frequest-2.88.2.tgz", - "integrity": "sha1-1zyRhzHLWofaBH4gcjQUb2ZNErM=", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "request-promise-core": { - "version": "1.1.3", - "resolved": "https://registry.npm.taobao.org/request-promise-core/download/request-promise-core-1.1.3.tgz", - "integrity": "sha1-6aPAgbUTgN/qZ3M2Bh/qh5qCnuk=", - "dev": true, - "requires": { - "lodash": "^4.17.15" - } - }, - "request-promise-native": { - "version": "1.0.8", - "resolved": "https://registry.npm.taobao.org/request-promise-native/download/request-promise-native-1.0.8.tgz", - "integrity": "sha1-pFW5YLgm5E4r+Jma9k3/K/5YyzY=", - "dev": true, - "requires": { - "request-promise-core": "1.1.3", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npm.taobao.org/require-from-string/download/require-from-string-2.0.2.tgz", - "integrity": "sha1-iaf92TgmEmcxjq/hT5wy5ZjDaQk=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/require-uncached/download/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "optional": true, - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - } - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/requires-port/download/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "reselect": { - "version": "3.0.1", - "resolved": "https://registry.npm.taobao.org/reselect/download/reselect-3.0.1.tgz", - "integrity": "sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc=", - "dev": true - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.17.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.17.0.tgz", - "integrity": "sha1-sllBtUloIxzC0bt2p5y38sC/hEQ=", - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/resolve-cwd/download/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } - } - }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true, - "optional": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz?cache=0&sync_timestamp=1585438700247&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve-url%2Fdownload%2Fresolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "resumer": { - "version": "0.0.0", - "resolved": "https://registry.npm.taobao.org/resumer/download/resumer-0.0.0.tgz", - "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", - "requires": { - "through": "~2.3.4" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz", - "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=", - "dev": true - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npm.taobao.org/retry/download/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "dev": true - }, - "rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/rgb-regex/download/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", - "dev": true - }, - "rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/rgba-regex/download/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", - "dev": true - }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npm.taobao.org/right-align/download/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "requires": { - "align-text": "^0.1.1" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz?cache=0&sync_timestamp=1581229865753&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-2.7.1.tgz", - "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npm.taobao.org/ripemd160/download/ripemd160-2.0.2.tgz", - "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rollup": { - "version": "0.25.8", - "resolved": "https://registry.npm.taobao.org/rollup/download/rollup-0.25.8.tgz?cache=0&sync_timestamp=1595099799360&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frollup%2Fdownload%2Frollup-0.25.8.tgz", - "integrity": "sha1-v2zoO4dRDRY0Ru6qV37WpvxYNeA=", - "requires": { - "chalk": "^1.1.1", - "minimist": "^1.2.0", - "source-map-support": "^0.3.2" - } - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npm.taobao.org/run-async/download/run-async-2.4.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frun-async%2Fdownload%2Frun-async-2.4.1.tgz", - "integrity": "sha1-hEDsz5nqPnC9QJ1JqriOEMGJpFU=", - "dev": true, - "optional": true - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/run-queue/download/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "dev": true, - "requires": { - "aproba": "^1.1.1" - } - }, - "rw": { - "version": "1.3.3", - "resolved": "https://registry.npm.taobao.org/rw/download/rw-1.3.3.tgz", - "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=" - }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npm.taobao.org/rx-lite/download/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true, - "optional": true - }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npm.taobao.org/rx-lite-aggregates/download/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "dev": true, - "optional": true, - "requires": { - "rx-lite": "*" - } - }, - "rxjs": { - "version": "5.5.12", - "resolved": "https://registry.npm.taobao.org/rxjs/download/rxjs-5.5.12.tgz?cache=0&sync_timestamp=1593794887039&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frxjs%2Fdownload%2Frxjs-5.5.12.tgz", - "integrity": "sha1-b6YbinfD15PbrycL7i9D9lLXQcw=", - "dev": true, - "requires": { - "symbol-observable": "1.0.1" - }, - "dependencies": { - "symbol-observable": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/symbol-observable/download/symbol-observable-1.0.1.tgz", - "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", - "dev": true - } - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", - "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafer-buffer%2Fdownload%2Fsafer-buffer-2.1.2.tgz", - "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=", - "dev": true - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz", - "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=", - "dev": true - }, - "saxes": { - "version": "3.1.11", - "resolved": "https://registry.npm.taobao.org/saxes/download/saxes-3.1.11.tgz", - "integrity": "sha1-1Z0f0zLskq2YouCy7mRHAjhLHFs=", - "dev": true, - "requires": { - "xmlchars": "^2.1.1" - } - }, - "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-2.7.0.tgz", - "integrity": "sha1-FxUfdtjq5n+793lgwzxnatn078c=", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - } - }, - "select": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/select/download/select-1.1.2.tgz", - "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=" - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/select-hose/download/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true - }, - "selfsigned": { - "version": "1.10.7", - "resolved": "https://registry.npm.taobao.org/selfsigned/download/selfsigned-1.10.7.tgz", - "integrity": "sha1-2lgZ/QSdVXTyjoipvMbbxubzkGs=", - "dev": true, - "requires": { - "node-forge": "0.9.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz", - "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", - "dev": true - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npm.taobao.org/send/download/send-0.17.1.tgz", - "integrity": "sha1-wdiwWfeQD3Rm3Uk4vcROEd2zdsg=", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "dev": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz?cache=0&sync_timestamp=1590596706367&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-1.6.0.tgz", - "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz", - "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/serialize-javascript/download/serialize-javascript-3.1.0.tgz", - "integrity": "sha1-i/OpFwcSZk7yVhtEtpHq/jmSFOo=", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npm.taobao.org/serve-index/download/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz?cache=0&sync_timestamp=1593407710477&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz?cache=0&sync_timestamp=1563425414995&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsetprototypeof%2Fdownload%2Fsetprototypeof-1.1.0.tgz", - "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=", - "dev": true - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npm.taobao.org/serve-static/download/serve-static-1.14.1.tgz", - "integrity": "sha1-Zm5jbcTwEPfvKZcKiKZ0MgiYsvk=", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/set-value/download/set-value-2.0.1.tgz?cache=0&sync_timestamp=1585775409029&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fset-value%2Fdownload%2Fset-value-2.0.1.tgz", - "integrity": "sha1-oY1AUw5vB95CKMfe/kInr4ytAFs=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npm.taobao.org/setimmediate/download/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.1.tgz?cache=0&sync_timestamp=1563425414995&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsetprototypeof%2Fdownload%2Fsetprototypeof-1.1.1.tgz", - "integrity": "sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM=", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npm.taobao.org/sha.js/download/sha.js-2.4.11.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsha.js%2Fdownload%2Fsha.js-2.4.11.tgz", - "integrity": "sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npm.taobao.org/shell-quote/download/shell-quote-1.7.2.tgz", - "integrity": "sha1-Z6fQLHbJ2iT5nSCAj8re0ODgS+I=", - "dev": true - }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/sigmund/download/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", - "dev": true - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.3.tgz", - "integrity": "sha1-oUEMLt2PB3sItOJTyOrPyvBXRhw=", - "dev": true - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npm.taobao.org/simple-swizzle/download/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dev": true, - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.3.2.tgz", - "integrity": "sha1-RXSirlb3qyBolvtDHq7tBm/fjwM=", - "dev": true - } - } - }, - "simplemde": { - "version": "1.11.2", - "resolved": "https://registry.npm.taobao.org/simplemde/download/simplemde-1.11.2.tgz", - "integrity": "sha1-ojo12XjSxA7wfewAjJLwcNjggOM=", - "requires": { - "codemirror": "*", - "codemirror-spell-checker": "*", - "marked": "*" - } - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/slash/download/slash-2.0.0.tgz", - "integrity": "sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q=", - "dev": true - }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-1.0.0.tgz", - "integrity": "sha1-BE8aSdiEL/MHqta1Be0Xi9lQE00=", - "dev": true, - "optional": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0" - } - }, - "slick-carousel": { - "version": "1.8.1", - "resolved": "https://registry.npm.taobao.org/slick-carousel/download/slick-carousel-1.8.1.tgz", - "integrity": "sha1-pL+ykBSIe7Zs5Si5C9DNomLMj40=" - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz", - "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz", - "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", - "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", - "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz", - "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", - "dev": true - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npm.taobao.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz", - "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - } - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npm.taobao.org/sntp/download/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "optional": true, - "requires": { - "hoek": "2.x.x" - } - }, - "sockjs": { - "version": "0.3.20", - "resolved": "https://registry.npm.taobao.org/sockjs/download/sockjs-0.3.20.tgz", - "integrity": "sha1-smooPsVi74smh7RAM6Tuzqx12FU=", - "dev": true, - "requires": { - "faye-websocket": "^0.10.0", - "uuid": "^3.4.0", - "websocket-driver": "0.6.5" - } - }, - "sockjs-client": { - "version": "1.4.0", - "resolved": "https://registry.npm.taobao.org/sockjs-client/download/sockjs-client-1.4.0.tgz", - "integrity": "sha1-yfJWjhnI/YFztJl+o0IOC7MGx9U=", - "dev": true, - "requires": { - "debug": "^3.2.5", - "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.2.6.tgz", - "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.11.3.tgz", - "integrity": "sha1-XA6aiWjokSwoZjn96XeosgnyUI4=", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true - } - } - }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/sort-keys/download/sort-keys-1.1.2.tgz?cache=0&sync_timestamp=1565864727994&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsort-keys%2Fdownload%2Fsort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "sortablejs": { - "version": "1.10.2", - "resolved": "https://registry.npm.taobao.org/sortablejs/download/sortablejs-1.10.2.tgz", - "integrity": "sha1-bkA2TZE/mLhaFPZnj5K1wSIfUpA=" - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/source-list-map/download/source-list-map-2.0.1.tgz", - "integrity": "sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ=", - "dev": true - }, - "source-map": { - "version": "0.1.32", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.1.32.tgz", - "integrity": "sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY=", - "requires": { - "amdefine": ">=0.0.4" - } - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.3.tgz?cache=0&sync_timestamp=1584831908370&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-resolve%2Fdownload%2Fsource-map-resolve-0.5.3.tgz", - "integrity": "sha1-GQhmvs51U+H48mei7oLGBrVQmho=", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.3.3", - "resolved": "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.3.3.tgz?cache=0&sync_timestamp=1587719517036&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-support%2Fdownload%2Fsource-map-support-0.3.3.tgz", - "integrity": "sha1-NJAJd9W6PwfHdX7nLnO7GptTdU8=", - "requires": { - "source-map": "0.1.32" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.1.1.tgz?cache=0&sync_timestamp=1590161967473&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdx-correct%2Fdownload%2Fspdx-correct-3.1.1.tgz", - "integrity": "sha1-3s6BrJweZxPl99G28X1Gj6U9iak=", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.3.0.tgz?cache=0&sync_timestamp=1587422410312&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdx-exceptions%2Fdownload%2Fspdx-exceptions-2.3.0.tgz", - "integrity": "sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0=", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha1-z3D1BILu/cmOPOCmgz5KU87rpnk=", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-3.0.5.tgz", - "integrity": "sha1-NpS1gEVnpFjTyARYQqY1hjL2JlQ=", - "dev": true - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npm.taobao.org/spdy/download/spdy-4.0.2.tgz", - "integrity": "sha1-t09GYgOj7aRSwCSSuR+56EonZ3s=", - "dev": true, - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.1.1.tgz", - "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true - } - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/spdy-transport/download/spdy-transport-3.0.0.tgz", - "integrity": "sha1-ANSGOmQArXXfkzYaFghgXl3NzzE=", - "dev": true, - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.1.1.tgz", - "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz", - "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz", - "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsprintf-js%2Fdownload%2Fsprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "ssf": { - "version": "0.10.3", - "resolved": "https://registry.npm.taobao.org/ssf/download/ssf-0.10.3.tgz", - "integrity": "sha1-jq4fwpyQpVLnkhII+BiS1vd6yys=", - "requires": { - "frac": "~1.1.2" - } - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npm.taobao.org/sshpk/download/sshpk-1.16.1.tgz", - "integrity": "sha1-+2YcC+8ps520B2nuOfpwCT1vaHc=", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-6.0.1.tgz", - "integrity": "sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg=", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npm.taobao.org/stable/download/stable-0.1.8.tgz", - "integrity": "sha1-g26zyDgv4pNv6vVEYxAXzn1Ho88=", - "dev": true - }, - "stackframe": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/stackframe/download/stackframe-1.2.0.tgz?cache=0&sync_timestamp=1590854148142&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstackframe%2Fdownload%2Fstackframe-1.2.0.tgz", - "integrity": "sha1-UkKUktY8YuuYmATBFVLj0i53kwM=", - "dev": true - }, - "staged-git-files": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/staged-git-files/download/staged-git-files-1.0.0.tgz", - "integrity": "sha1-zbhHg3wfzFLAioctSIPMCHdmioA=", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz?cache=0&sync_timestamp=1587328859420&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatuses%2Fdownload%2Fstatuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/stealthy-require/download/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.2.tgz?cache=0&sync_timestamp=1587041519870&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstream-browserify%2Fdownload%2Fstream-browserify-2.0.2.tgz", - "integrity": "sha1-h1IdOKRKp+6RzhzSpH3wy0ndZgs=", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npm.taobao.org/stream-each/download/stream-each-1.2.3.tgz", - "integrity": "sha1-6+J6DDibBPvMIzZClS4Qcxr6m64=", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npm.taobao.org/stream-http/download/stream-http-2.8.3.tgz?cache=0&sync_timestamp=1588701035785&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstream-http%2Fdownload%2Fstream-http-2.8.3.tgz", - "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/stream-shift/download/stream-shift-1.0.1.tgz?cache=0&sync_timestamp=1576147145118&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstream-shift%2Fdownload%2Fstream-shift-1.0.1.tgz", - "integrity": "sha1-1wiCgVWasneEJCebCHfaPDktWj0=", - "dev": true - }, - "stream-to-observable": { - "version": "0.2.0", - "resolved": "https://registry.npm.taobao.org/stream-to-observable/download/stream-to-observable-0.2.0.tgz", - "integrity": "sha1-WdbqOT2HwsDdrBCqDVYbxrpvDhA=", - "dev": true, - "requires": { - "any-observable": "^0.2.0" - } - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/strict-uri-encode/download/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz", - "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string.prototype.padend": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/string.prototype.padend/download/string.prototype.padend-3.1.0.tgz?cache=0&sync_timestamp=1576312069927&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.padend%2Fdownload%2Fstring.prototype.padend-3.1.0.tgz", - "integrity": "sha1-3Aj1eoAQ3FwVNVAxj2fhOtu3KsM=", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "string.prototype.padstart": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/string.prototype.padstart/download/string.prototype.padstart-3.1.0.tgz", - "integrity": "sha1-tHwIdUDQcQvlpJN1dRoKYnvU/5A=", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "string.prototype.trim": { - "version": "1.2.1", - "resolved": "https://registry.npm.taobao.org/string.prototype.trim/download/string.prototype.trim-1.2.1.tgz", - "integrity": "sha1-FBIz3/Msgr+tgGhNfl8Iae4Pt4I=", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/string.prototype.trimend/download/string.prototype.trimend-1.0.1.tgz?cache=0&sync_timestamp=1586465409341&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimend%2Fdownload%2Fstring.prototype.trimend-1.0.1.tgz", - "integrity": "sha1-hYEqa4R6wAInD1gIFGBkyZX7aRM=", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/string.prototype.trimstart/download/string.prototype.trimstart-1.0.1.tgz?cache=0&sync_timestamp=1586465413621&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimstart%2Fdownload%2Fstring.prototype.trimstart-1.0.1.tgz", - "integrity": "sha1-FK9tnzSwU/fPyJty+PLuFLkDmlQ=", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz", - "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npm.taobao.org/stringify-object/download/stringify-object-3.3.0.tgz", - "integrity": "sha1-cDBlrvyhkwDTzoivT1s5VtdVZik=", - "dev": true, - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "dependencies": { - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/is-obj/download/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - } - } - }, - "stringstream": { - "version": "0.0.6", - "resolved": "https://registry.npm.taobao.org/stringstream/download/stringstream-0.0.6.tgz", - "integrity": "sha1-eIAiWw1K0Q4wkn0Weh1vL9OzOnI=", - "dev": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/strip-bom/download/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/strip-final-newline/download/strip-final-newline-2.0.0.tgz", - "integrity": "sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0=", - "dev": true - }, - "strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/strip-indent/download/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz?cache=0&sync_timestamp=1594567586410&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-json-comments%2Fdownload%2Fstrip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "optional": true - }, - "stylehacks": { - "version": "4.0.3", - "resolved": "https://registry.npm.taobao.org/stylehacks/download/stylehacks-4.0.3.tgz", - "integrity": "sha1-Zxj8r00eB9ihMYaQiB6NlnJqcdU=", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-3.1.2.tgz", - "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - }, - "svg-tags": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/svg-tags/download/svg-tags-1.0.0.tgz", - "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", - "dev": true - }, - "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npm.taobao.org/svgo/download/svgo-1.3.2.tgz?cache=0&sync_timestamp=1572433264480&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsvgo%2Fdownload%2Fsvgo-1.3.2.tgz", - "integrity": "sha1-ttxRHAYzRsnkFbgeQ0ARRbltQWc=", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "symbol-observable": { - "version": "0.2.4", - "resolved": "https://registry.npm.taobao.org/symbol-observable/download/symbol-observable-0.2.4.tgz", - "integrity": "sha1-lag9smGG1q9+ehjb2XYKL4bQj0A=", - "dev": true - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npm.taobao.org/symbol-tree/download/symbol-tree-3.2.4.tgz", - "integrity": "sha1-QwY30ki6d+B4iDlR+5qg7tfGP6I=", - "dev": true - }, - "table": { - "version": "4.0.2", - "resolved": "https://registry.npm.taobao.org/table/download/table-4.0.2.tgz", - "integrity": "sha1-ozRHN1OR52atNNNIbm4q7chNLjY=", - "dev": true, - "optional": true, - "requires": { - "ajv": "^5.2.3", - "ajv-keywords": "^2.1.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" - }, - "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "optional": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-2.1.1.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", - "dev": true, - "optional": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "dev": true, - "optional": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", - "dev": true, - "optional": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-1.1.0.tgz?cache=0&sync_timestamp=1591599666712&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-deep-equal%2Fdownload%2Ffast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true, - "optional": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true, - "optional": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", - "dev": true, - "optional": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npm.taobao.org/tapable/download/tapable-1.1.3.tgz", - "integrity": "sha1-ofzMBrWNth/XpF2i2kT186Pme6I=", - "dev": true - }, - "tape": { - "version": "4.13.3", - "resolved": "https://registry.npm.taobao.org/tape/download/tape-4.13.3.tgz?cache=0&sync_timestamp=1590380169759&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftape%2Fdownload%2Ftape-4.13.3.tgz", - "integrity": "sha1-UbPZHINmjHpFsaWUtgfe4KC0Yng=", - "requires": { - "deep-equal": "~1.1.1", - "defined": "~1.0.0", - "dotignore": "~0.1.2", - "for-each": "~0.3.3", - "function-bind": "~1.1.1", - "glob": "~7.1.6", - "has": "~1.0.3", - "inherits": "~2.0.4", - "is-regex": "~1.0.5", - "minimist": "~1.2.5", - "object-inspect": "~1.7.0", - "resolve": "~1.17.0", - "resumer": "~0.0.0", - "string.prototype.trim": "~1.2.1", - "through": "~2.3.8" - } - }, - "terser": { - "version": "4.8.0", - "resolved": "https://registry.npm.taobao.org/terser/download/terser-4.8.0.tgz?cache=0&sync_timestamp=1593953635939&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser%2Fdownload%2Fterser-4.8.0.tgz", - "integrity": "sha1-YwVjQ9fHC7KfOvZlhlpG/gOg3xc=", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.19.tgz?cache=0&sync_timestamp=1587719517036&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-support%2Fdownload%2Fsource-map-support-0.5.19.tgz", - "integrity": "sha1-qYti+G3K9PZzmWSMCFKRq56P7WE=", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - } - } - }, - "terser-webpack-plugin": { - "version": "1.4.4", - "resolved": "https://registry.npm.taobao.org/terser-webpack-plugin/download/terser-webpack-plugin-1.4.4.tgz?cache=0&sync_timestamp=1594910785474&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-1.4.4.tgz", - "integrity": "sha1-LGNUQ0cyS6r6mla6rd8WNMir/C8=", - "dev": true, - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^3.1.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz", - "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true, - "optional": true - }, - "thenify": { - "version": "3.3.1", - "resolved": "https://registry.npm.taobao.org/thenify/download/thenify-3.3.1.tgz", - "integrity": "sha1-iTLmhqQGYDigFt2eLKRq3Zg4qV8=", - "dev": true, - "requires": { - "any-promise": "^1.0.0" - } - }, - "thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npm.taobao.org/thenify-all/download/thenify-all-1.6.0.tgz", - "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", - "dev": true, - "requires": { - "thenify": ">= 3.1.0 < 4" - } - }, - "thread-loader": { - "version": "2.1.3", - "resolved": "https://registry.npm.taobao.org/thread-loader/download/thread-loader-2.1.3.tgz", - "integrity": "sha1-y9LBOfwrLebp0o9iKGq3cMGsvdo=", - "dev": true, - "requires": { - "loader-runner": "^2.3.1", - "loader-utils": "^1.1.0", - "neo-async": "^2.6.0" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npm.taobao.org/through/download/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz", - "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/thunky/download/thunky-1.1.0.tgz?cache=0&sync_timestamp=1571043401546&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fthunky%2Fdownload%2Fthunky-1.1.0.tgz", - "integrity": "sha1-Wrr3FKlAXbBQRzK7zNLO3Z75U30=", - "dev": true - }, - "timers-browserify": { - "version": "2.0.11", - "resolved": "https://registry.npm.taobao.org/timers-browserify/download/timers-browserify-2.0.11.tgz", - "integrity": "sha1-gAsfPu4nLlvFPuRloE0OgEwxIR8=", - "dev": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, - "timsort": { - "version": "0.3.0", - "resolved": "https://registry.npm.taobao.org/timsort/download/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", - "dev": true - }, - "tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/tiny-emitter/download/tiny-emitter-2.1.0.tgz", - "integrity": "sha1-HRpW7fxRxD6GPLtTgqcjMONVVCM=" - }, - "tinycolor2": { - "version": "1.4.1", - "resolved": "https://registry.npm.taobao.org/tinycolor2/download/tinycolor2-1.4.1.tgz", - "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=" - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz?cache=0&sync_timestamp=1588178571895&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftmp%2Fdownload%2Ftmp-0.0.33.tgz", - "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=", - "dev": true, - "optional": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npm.taobao.org/to-regex/download/to-regex-3.0.2.tgz", - "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/toidentifier/download/toidentifier-1.0.0.tgz", - "integrity": "sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM=", - "dev": true - }, - "toposort": { - "version": "1.0.7", - "resolved": "https://registry.npm.taobao.org/toposort/download/toposort-1.0.7.tgz", - "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", - "dev": true - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftough-cookie%2Fdownload%2Ftough-cookie-2.5.0.tgz", - "integrity": "sha1-zZ+yoKodWhK0c72fuW+j3P9lreI=", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/tr46/download/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "tree-table-vue": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/tree-table-vue/download/tree-table-vue-1.1.0.tgz", - "integrity": "sha1-ETpL2dhPqmQ5csS4AoCanbZjDYk=", - "requires": { - "clonedeep": "^2.0.0", - "iview": "^3.1.5", - "vue": "^2.5.17" - } - }, - "tryer": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/tryer/download/tryer-1.0.1.tgz", - "integrity": "sha1-8shUBoALmw90yfdGW4HqrSQSUvg=", - "dev": true - }, - "tsconfig-paths": { - "version": "3.9.0", - "resolved": "https://registry.npm.taobao.org/tsconfig-paths/download/tsconfig-paths-3.9.0.tgz", - "integrity": "sha1-CYVHpsREiAfo/Ljq4IEGTumjyQs=", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/json5/download/json5-1.0.1.tgz?cache=0&sync_timestamp=1586046271069&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson5%2Fdownload%2Fjson5-1.0.1.tgz", - "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - } - } - }, - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-1.13.0.tgz", - "integrity": "sha1-yIHhPMcBWJTtkUhi0nZDb6mkcEM=", - "dev": true - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npm.taobao.org/tty-browserify/download/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz?cache=0&sync_timestamp=1581365146868&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftweetnacl%2Fdownload%2Ftweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npm.taobao.org/type-detect/download/type-detect-4.0.8.tgz", - "integrity": "sha1-dkb7XxiHHPu3dJ5pvTmmOI63RQw=", - "dev": true - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.6.0.tgz", - "integrity": "sha1-jSojcNPfiG61yQraHFv2GIrPg4s=", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npm.taobao.org/type-is/download/type-is-1.6.18.tgz", - "integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "typo-js": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/typo-js/download/typo-js-1.1.0.tgz", - "integrity": "sha1-pan1kry0U2Zr9wyWlNpYcF0CXtg=" - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npm.taobao.org/uglify-js/download/uglify-js-2.8.29.tgz?cache=0&sync_timestamp=1592744803278&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/uglify-to-browserify/download/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "optional": true - }, - "uglifyjs-webpack-plugin": { - "version": "1.3.0", - "resolved": "https://registry.npm.taobao.org/uglifyjs-webpack-plugin/download/uglifyjs-webpack-plugin-1.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglifyjs-webpack-plugin%2Fdownload%2Fuglifyjs-webpack-plugin-1.3.0.tgz", - "integrity": "sha1-dfVIFghYFjoIZD4IbV/v4YpdZ94=", - "dev": true, - "requires": { - "cacache": "^10.0.4", - "find-cache-dir": "^1.0.0", - "schema-utils": "^0.4.5", - "serialize-javascript": "^1.4.0", - "source-map": "^0.6.1", - "uglify-es": "^3.3.4", - "webpack-sources": "^1.1.0", - "worker-farm": "^1.5.2" - }, - "dependencies": { - "cacache": { - "version": "10.0.4", - "resolved": "https://registry.npm.taobao.org/cacache/download/cacache-10.0.4.tgz?cache=0&sync_timestamp=1594429684526&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-10.0.4.tgz", - "integrity": "sha1-ZFI2eZnv+dQYiu/ZoU6dfGomNGA=", - "dev": true, - "requires": { - "bluebird": "^3.5.1", - "chownr": "^1.0.1", - "glob": "^7.1.2", - "graceful-fs": "^4.1.11", - "lru-cache": "^4.1.1", - "mississippi": "^2.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", - "ssri": "^5.2.4", - "unique-filename": "^1.1.0", - "y18n": "^4.0.0" - } - }, - "commander": { - "version": "2.13.0", - "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.13.0.tgz?cache=0&sync_timestamp=1595168173997&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.13.0.tgz", - "integrity": "sha1-aWS8pnaF33wfFDDFhPB9dZeIW5w=", - "dev": true - }, - "find-cache-dir": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-1.0.0.tgz", - "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^2.0.0" - } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz?cache=0&sync_timestamp=1594427569171&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-4.1.5.tgz", - "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-1.3.0.tgz?cache=0&sync_timestamp=1587567875186&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-dir%2Fdownload%2Fmake-dir-1.3.0.tgz", - "integrity": "sha1-ecEDO4BRW9bSTsmTPoYMp17ifww=", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "mississippi": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/mississippi/download/mississippi-2.0.0.tgz", - "integrity": "sha1-NEKlCPr8KFAEhv7qmUCWduTuWm8=", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^2.0.1", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - }, - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/pump/download/pump-2.0.1.tgz", - "integrity": "sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk=", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "schema-utils": { - "version": "0.4.7", - "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-0.4.7.tgz", - "integrity": "sha1-unT1l9K+LqiAExdG7hfQoJPGgYc=", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" - } - }, - "serialize-javascript": { - "version": "1.9.1", - "resolved": "https://registry.npm.taobao.org/serialize-javascript/download/serialize-javascript-1.9.1.tgz", - "integrity": "sha1-z8IArvd7YAxH2pu4FJyUPnmML9s=", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - }, - "ssri": { - "version": "5.3.0", - "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-5.3.0.tgz", - "integrity": "sha1-ujhyycbTOgcEp9cf8EXl7EiZnQY=", - "dev": true, - "requires": { - "safe-buffer": "^5.1.1" - } - }, - "uglify-es": { - "version": "3.3.9", - "resolved": "https://registry.npm.taobao.org/uglify-es/download/uglify-es-3.3.9.tgz", - "integrity": "sha1-DBxPBwC+2NvBJM2zBNJZLKID5nc=", - "dev": true, - "requires": { - "commander": "~2.13.0", - "source-map": "~0.6.1" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npm.taobao.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha1-JhmADEyCWADv3YNDr33Zkzy+KBg=", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npm.taobao.org/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha1-jtKjJWmWG86SJ9Cc0/+7j+1fAgw=", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-1.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funicode-match-property-value-ecmascript%2Fdownload%2Funicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha1-DZH2AO7rMJaqlisdb8iIduZOpTE=", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-1.1.0.tgz?cache=0&sync_timestamp=1583945805856&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funicode-property-aliases-ecmascript%2Fdownload%2Funicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha1-3Vepn2IHvt/0Yoq++5TFDblByPQ=", - "dev": true - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/union-value/download/union-value-1.0.1.tgz", - "integrity": "sha1-C2/nuDWuzaYcbqTU8CwUIh4QmEc=", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/uniq/download/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, - "uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/uniqs/download/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", - "dev": true - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/unique-filename/download/unique-filename-1.1.1.tgz", - "integrity": "sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA=", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npm.taobao.org/unique-slug/download/unique-slug-2.0.2.tgz", - "integrity": "sha1-uqvOkQg/xk6UWw861hPiZPfNTmw=", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz?cache=0&sync_timestamp=1583531006552&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funiversalify%2Fdownload%2Funiversalify-0.1.2.tgz", - "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/unquote/download/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npm.taobao.org/has-value/download/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/upath/download/upath-1.2.0.tgz", - "integrity": "sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ=", - "dev": true - }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npm.taobao.org/upper-case/download/upper-case-1.1.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fupper-case%2Fdownload%2Fupper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", - "dev": true - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npm.taobao.org/uri-js/download/uri-js-4.2.2.tgz", - "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npm.taobao.org/url/download/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "url-loader": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/url-loader/download/url-loader-1.1.2.tgz", - "integrity": "sha1-uXHRkbg69pPF4/6kBkvp4fLX+Ng=", - "dev": true, - "requires": { - "loader-utils": "^1.1.0", - "mime": "^2.0.3", - "schema-utils": "^1.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz", - "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npm.taobao.org/url-parse/download/url-parse-1.4.7.tgz", - "integrity": "sha1-qKg1NejACjFuQDpdtKwbm4U64ng=", - "dev": true, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npm.taobao.org/use/download/use-3.1.1.tgz", - "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=", - "dev": true - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npm.taobao.org/util/download/util-0.11.1.tgz?cache=0&sync_timestamp=1588238457176&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil%2Fdownload%2Futil-0.11.1.tgz", - "integrity": "sha1-MjZzNyDsZLsn9uJvQhqqLhtYjWE=", - "dev": true, - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil.promisify%2Fdownload%2Futil.promisify-1.0.1.tgz", - "integrity": "sha1-a693dLgO6w91INi4HQeYKlmruu4=", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - } - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npm.taobao.org/utila/download/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npm.taobao.org/uuid/download/uuid-3.4.0.tgz", - "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=", - "dev": true - }, - "v-click-outside-x": { - "version": "3.7.1", - "resolved": "https://registry.npm.taobao.org/v-click-outside-x/download/v-click-outside-x-3.7.1.tgz?cache=0&sync_timestamp=1579043108278&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fv-click-outside-x%2Fdownload%2Fv-click-outside-x-3.7.1.tgz", - "integrity": "sha1-qgPqoOQeRMtSB9z4bC2fDdZAhME=" - }, - "v-org-tree": { - "version": "1.0.12", - "resolved": "https://registry.npm.taobao.org/v-org-tree/download/v-org-tree-1.0.12.tgz", - "integrity": "sha1-Vmsu8dO4jI+tTO4zZaa0v+rjtI0=", - "requires": { - "clonedeep": "^2.0.0" - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "vendors": { - "version": "1.0.4", - "resolved": "https://registry.npm.taobao.org/vendors/download/vendors-1.0.4.tgz?cache=0&sync_timestamp=1579857147055&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvendors%2Fdownload%2Fvendors-1.0.4.tgz", - "integrity": "sha1-4rgApT56Kbk1BsPPQRANFsTErY4=", - "dev": true - }, - "venn.js": { - "version": "0.2.20", - "resolved": "https://registry.npm.taobao.org/venn.js/download/venn.js-0.2.20.tgz", - "integrity": "sha1-Pw5QzHXLofWGkqijL2e9eq8apvo=", - "requires": { - "d3-selection": "^1.0.2", - "d3-transition": "^1.0.1", - "fmin": "0.0.2" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "view-design": { - "version": "4.3.2", - "resolved": "https://registry.npm.taobao.org/view-design/download/view-design-4.3.2.tgz", - "integrity": "sha1-bwgcZzt3QgObs4o6UZOO+rtg0KI=", - "requires": { - "async-validator": "^3.3.0", - "deepmerge": "^2.2.1", - "element-resize-detector": "^1.2.0", - "js-calendar": "^1.2.3", - "lodash.throttle": "^4.1.1", - "popper.js": "^1.14.6", - "tinycolor2": "^1.4.1", - "v-click-outside-x": "^3.7.1" - }, - "dependencies": { - "async-validator": { - "version": "3.3.0", - "resolved": "https://registry.npm.taobao.org/async-validator/download/async-validator-3.3.0.tgz", - "integrity": "sha1-HZIZO75g1tbIskZpLHAF6e0UqO4=" - } - } - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/vm-browserify/download/vm-browserify-1.1.2.tgz?cache=0&sync_timestamp=1572870776965&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvm-browserify%2Fdownload%2Fvm-browserify-1.1.2.tgz", - "integrity": "sha1-eGQcSIuObKkadfUR56OzKobl3aA=", - "dev": true - }, - "vue": { - "version": "2.6.11", - "resolved": "https://registry.npm.taobao.org/vue/download/vue-2.6.11.tgz", - "integrity": "sha1-dllNh31LEiNEBuhONSdcbVFBJcU=" - }, - "vue-data-loading": { - "version": "0.2.4", - "resolved": "https://registry.npm.taobao.org/vue-data-loading/download/vue-data-loading-0.2.4.tgz", - "integrity": "sha1-kftt9j7aXGXTrzM2foYqnh/Bhu8=", - "requires": { - "vue": "^2.0.0" - } - }, - "vue-enum": { - "version": "1.0.5", - "resolved": "https://registry.npm.taobao.org/vue-enum/download/vue-enum-1.0.5.tgz", - "integrity": "sha1-cQfD4tfXnp1HKLsWzvS83TTBziM=" - }, - "vue-eslint-parser": { - "version": "2.0.3", - "resolved": "https://registry.npm.taobao.org/vue-eslint-parser/download/vue-eslint-parser-2.0.3.tgz?cache=0&sync_timestamp=1589539313907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-eslint-parser%2Fdownload%2Fvue-eslint-parser-2.0.3.tgz", - "integrity": "sha1-wmjJbG2Uz+PZOKX3WTlZsMozYNE=", - "dev": true, - "optional": true, - "requires": { - "debug": "^3.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.2", - "esquery": "^1.0.0", - "lodash": "^4.17.4" - }, - "dependencies": { - "eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-3.7.3.tgz", - "integrity": "sha1-u1ByANPRf2AkdjYWC0gmKEsQhTU=", - "dev": true, - "optional": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - } - } - }, - "vue-hot-reload-api": { - "version": "2.3.4", - "resolved": "https://registry.npm.taobao.org/vue-hot-reload-api/download/vue-hot-reload-api-2.3.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-hot-reload-api%2Fdownload%2Fvue-hot-reload-api-2.3.4.tgz", - "integrity": "sha1-UylVzB6yCKPZkLOp+acFdGV+CPI=", - "dev": true - }, - "vue-i18n": { - "version": "7.8.1", - "resolved": "https://registry.npm.taobao.org/vue-i18n/download/vue-i18n-7.8.1.tgz", - "integrity": "sha1-LOS2795nmh4F3bXZB7/BvCGIA7I=" - }, - "vue-infinite-loading": { - "version": "2.4.5", - "resolved": "https://registry.npm.taobao.org/vue-infinite-loading/download/vue-infinite-loading-2.4.5.tgz", - "integrity": "sha1-zCD9QK9/IBiABkQ8mbYEcM8d4bM=" - }, - "vue-json-viewer": { - "version": "2.2.12", - "resolved": "https://registry.npm.taobao.org/vue-json-viewer/download/vue-json-viewer-2.2.12.tgz", - "integrity": "sha1-9y94pAIOa+QqQwAOCdIEf2iWJlY=", - "requires": { - "clipboard": "^2.0.4", - "vue": "^2.6.9" - } - }, - "vue-json-views": { - "version": "0.1.1", - "resolved": "https://registry.npm.taobao.org/vue-json-views/download/vue-json-views-0.1.1.tgz", - "integrity": "sha1-8YAXKr4EvK9Cag9DoBkk4EJuvPw=", - "requires": { - "vue": "^2.5.11" - }, - "dependencies": { - "vue-json-views": { - "version": "0.0.2", - "resolved": "https://registry.npm.taobao.org/vue-json-views/download/vue-json-views-0.0.2.tgz", - "integrity": "sha1-xadQA6glOnXDN81xftikVMMCXx0=", - "requires": { - "vue": "^2.5.11" - } - } - } - }, - "vue-loader": { - "version": "15.9.3", - "resolved": "https://registry.npm.taobao.org/vue-loader/download/vue-loader-15.9.3.tgz?cache=0&sync_timestamp=1593355754768&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-loader%2Fdownload%2Fvue-loader-15.9.3.tgz", - "integrity": "sha1-DeNdnlVdPtU5aVFsrFziVTEpndo=", - "dev": true, - "requires": { - "@vue/component-compiler-utils": "^3.1.0", - "hash-sum": "^1.0.2", - "loader-utils": "^1.1.0", - "vue-hot-reload-api": "^2.3.0", - "vue-style-loader": "^4.1.0" - } - }, - "vue-router": { - "version": "3.3.4", - "resolved": "https://registry.npm.taobao.org/vue-router/download/vue-router-3.3.4.tgz?cache=0&sync_timestamp=1594111718735&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-router%2Fdownload%2Fvue-router-3.3.4.tgz", - "integrity": "sha1-Tjirw0oRxBtsPYJERJouNjumJQs=" - }, - "vue-slick": { - "version": "1.1.15", - "resolved": "https://registry.npm.taobao.org/vue-slick/download/vue-slick-1.1.15.tgz", - "integrity": "sha1-KRYTRTH9H5Y4VI8roVJuTxEDJYg=", - "requires": { - "slick-carousel": "^1.6.0" - } - }, - "vue-style-loader": { - "version": "4.1.2", - "resolved": "https://registry.npm.taobao.org/vue-style-loader/download/vue-style-loader-4.1.2.tgz", - "integrity": "sha1-3t80mAbyXOtOZPOtfApE+6c1/Pg=", - "dev": true, - "requires": { - "hash-sum": "^1.0.2", - "loader-utils": "^1.0.2" - } - }, - "vue-template-compiler": { - "version": "2.6.11", - "resolved": "https://registry.npm.taobao.org/vue-template-compiler/download/vue-template-compiler-2.6.11.tgz", - "integrity": "sha1-wEcE749JixUxMAGJk+VjCdRpgIA=", - "dev": true, - "requires": { - "de-indent": "^1.0.2", - "he": "^1.1.0" - } - }, - "vue-template-es2015-compiler": { - "version": "1.9.1", - "resolved": "https://registry.npm.taobao.org/vue-template-es2015-compiler/download/vue-template-es2015-compiler-1.9.1.tgz", - "integrity": "sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=", - "dev": true - }, - "vuedraggable": { - "version": "2.24.0", - "resolved": "https://registry.npm.taobao.org/vuedraggable/download/vuedraggable-2.24.0.tgz?cache=0&sync_timestamp=1594052423588&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvuedraggable%2Fdownload%2Fvuedraggable-2.24.0.tgz", - "integrity": "sha1-HuBp7rkfYfy1QPryDxxrLU2ZCiY=", - "requires": { - "sortablejs": "^1.10.1" - } - }, - "vuex": { - "version": "3.5.1", - "resolved": "https://registry.npm.taobao.org/vuex/download/vuex-3.5.1.tgz?cache=0&sync_timestamp=1593445037188&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvuex%2Fdownload%2Fvuex-3.5.1.tgz", - "integrity": "sha1-8bjc6mSbwlJUz09DWAgdv12hiz0=" - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/w3c-hr-time/download/w3c-hr-time-1.0.2.tgz?cache=0&sync_timestamp=1583455604765&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fw3c-hr-time%2Fdownload%2Fw3c-hr-time-1.0.2.tgz", - "integrity": "sha1-ConN9cwVgi35w2BUNnaWPgzDCM0=", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/w3c-xmlserializer/download/w3c-xmlserializer-1.1.2.tgz", - "integrity": "sha1-MEhcp9cKb9BSQgo9Ev2Q5jOc55Q=", - "dev": true, - "requires": { - "domexception": "^1.0.1", - "webidl-conversions": "^4.0.2", - "xml-name-validator": "^3.0.0" - } - }, - "wangeditor": { - "version": "3.1.1", - "resolved": "https://registry.npm.taobao.org/wangeditor/download/wangeditor-3.1.1.tgz", - "integrity": "sha1-+9PB1JdpI8nt67hbKdMLNVEq0Dk=" - }, - "watchpack": { - "version": "1.7.2", - "resolved": "https://registry.npm.taobao.org/watchpack/download/watchpack-1.7.2.tgz", - "integrity": "sha1-wC5NTUmRPD5+EiwzJTZa+dMx6ao=", - "dev": true, - "requires": { - "chokidar": "^3.4.0", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.0" - } - }, - "watchpack-chokidar2": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/watchpack-chokidar2/download/watchpack-chokidar2-2.0.0.tgz", - "integrity": "sha1-mUihhmy71suCTeoTp+1pH2yN3/A=", - "dev": true, - "optional": true, - "requires": { - "chokidar": "^2.1.8" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz", - "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", - "dev": true, - "optional": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "optional": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz?cache=0&sync_timestamp=1593261363626&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-1.13.1.tgz", - "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=", - "dev": true, - "optional": true - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz?cache=0&sync_timestamp=1594864731636&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-2.1.8.tgz", - "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=", - "dev": true, - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz?cache=0&sync_timestamp=1588787369955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-1.2.13.tgz", - "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "optional": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz?cache=0&sync_timestamp=1584985910691&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freaddirp%2Fdownload%2Freaddirp-2.2.1.tgz", - "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - } - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npm.taobao.org/wbuf/download/wbuf-1.7.3.tgz", - "integrity": "sha1-wdjRSTFtPqhShIiVy2oL/oh7h98=", - "dev": true, - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/wcwidth/download/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npm.taobao.org/webidl-conversions/download/webidl-conversions-4.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebidl-conversions%2Fdownload%2Fwebidl-conversions-4.0.2.tgz", - "integrity": "sha1-qFWYCx8LazWbodXZ+zmulB+qY60=", - "dev": true - }, - "webpack": { - "version": "4.43.0", - "resolved": "https://registry.npm.taobao.org/webpack/download/webpack-4.43.0.tgz?cache=0&sync_timestamp=1594294511041&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack%2Fdownload%2Fwebpack-4.43.0.tgz", - "integrity": "sha1-xIVHsR1WMiTFYdrRFyyKoLimeOY=", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.6.1", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz", - "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "webpack-bundle-analyzer": { - "version": "3.8.0", - "resolved": "https://registry.npm.taobao.org/webpack-bundle-analyzer/download/webpack-bundle-analyzer-3.8.0.tgz", - "integrity": "sha1-zms/kI2vBp/R9yZvaSy7O97ZuhY=", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1", - "bfj": "^6.1.1", - "chalk": "^2.4.1", - "commander": "^2.18.0", - "ejs": "^2.6.1", - "express": "^4.16.3", - "filesize": "^3.6.1", - "gzip-size": "^5.0.0", - "lodash": "^4.17.15", - "mkdirp": "^0.5.1", - "opener": "^1.5.1", - "ws": "^6.0.0" - }, - "dependencies": { - "acorn": { - "version": "7.3.1", - "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-7.3.1.tgz?cache=0&sync_timestamp=1591869432510&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-7.3.1.tgz", - "integrity": "sha1-hQEHVNtTw/uvO56j4IOqXF0Uf/0=", - "dev": true - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npm.taobao.org/acorn-walk/download/acorn-walk-7.2.0.tgz", - "integrity": "sha1-DeiJpgEgOQmw++B7iTjcIdLpZ7w=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "webpack-chain": { - "version": "4.12.1", - "resolved": "https://registry.npm.taobao.org/webpack-chain/download/webpack-chain-4.12.1.tgz?cache=0&sync_timestamp=1593639477219&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-chain%2Fdownload%2Fwebpack-chain-4.12.1.tgz", - "integrity": "sha1-bIQ5u7KrVQlS1g4eqTGRQZBsAqY=", - "dev": true, - "requires": { - "deepmerge": "^1.5.2", - "javascript-stringify": "^1.6.0" - }, - "dependencies": { - "deepmerge": { - "version": "1.5.2", - "resolved": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-1.5.2.tgz", - "integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M=", - "dev": true - } - } - }, - "webpack-dev-middleware": { - "version": "3.7.2", - "resolved": "https://registry.npm.taobao.org/webpack-dev-middleware/download/webpack-dev-middleware-3.7.2.tgz?cache=0&sync_timestamp=1594744804453&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-middleware%2Fdownload%2Fwebpack-dev-middleware-3.7.2.tgz", - "integrity": "sha1-ABnD23FuP6XOy/ZPKriKdLqzMfM=", - "dev": true, - "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - } - }, - "webpack-dev-server": { - "version": "3.11.0", - "resolved": "https://registry.npm.taobao.org/webpack-dev-server/download/webpack-dev-server-3.11.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-server%2Fdownload%2Fwebpack-dev-server-3.11.0.tgz", - "integrity": "sha1-jxVKO84bz9HMYY705wMniFXn/4w=", - "dev": true, - "requires": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.7", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "0.3.20", - "sockjs-client": "1.4.0", - "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz", - "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz", - "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz?cache=0&sync_timestamp=1593261363626&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-1.13.1.tgz", - "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz", - "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", - "dev": true - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz?cache=0&sync_timestamp=1594864731636&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-2.1.8.tgz", - "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-5.0.0.tgz", - "integrity": "sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U=", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz", - "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.1.1.tgz", - "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz", - "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz", - "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz?cache=0&sync_timestamp=1588787369955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-1.2.13.tgz", - "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz", - "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=", - "dev": true - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npm.taobao.org/is-absolute-url/download/is-absolute-url-3.0.3.tgz", - "integrity": "sha1-lsaiK2ojkpsR6gr7GDbDatSl1pg=", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz", - "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-2.3.0.tgz?cache=0&sync_timestamp=1594559696906&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-2.3.0.tgz", - "integrity": "sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz", - "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz", - "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=", - "dev": true - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz?cache=0&sync_timestamp=1584985910691&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freaddirp%2Fdownload%2Freaddirp-2.2.1.tgz", - "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz", - "integrity": "sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs=", - "dev": true - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz", - "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz", - "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz", - "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "dependencies": { - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz", - "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz", - "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-5.1.0.tgz", - "integrity": "sha1-H9H2cjXVttD+54EFYAG/tpTAOwk=", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz", - "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-13.3.2.tgz?cache=0&sync_timestamp=1594421046064&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-13.3.2.tgz", - "integrity": "sha1-rX/+/sGqWVZayRX4Lcyzipwxot0=", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-13.1.2.tgz?cache=0&sync_timestamp=1595125190020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-13.1.2.tgz", - "integrity": "sha1-Ew8JcC667vJlDVTObj5XBvek+zg=", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/webpack-log/download/webpack-log-2.0.0.tgz", - "integrity": "sha1-W3ko4GN1k/EZ0y9iJ8HgrDHhtH8=", - "dev": true, - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - } - }, - "webpack-merge": { - "version": "4.2.2", - "resolved": "https://registry.npm.taobao.org/webpack-merge/download/webpack-merge-4.2.2.tgz?cache=0&sync_timestamp=1594294904067&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-merge%2Fdownload%2Fwebpack-merge-4.2.2.tgz", - "integrity": "sha1-onxS6ng9E5iv0gh/VH17nS9DY00=", - "dev": true, - "requires": { - "lodash": "^4.17.15" - } - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npm.taobao.org/webpack-sources/download/webpack-sources-1.4.3.tgz", - "integrity": "sha1-7t2OwLko+/HL/plOItLYkPMwqTM=", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - } - } - }, - "websocket-driver": { - "version": "0.6.5", - "resolved": "https://registry.npm.taobao.org/websocket-driver/download/websocket-driver-0.6.5.tgz?cache=0&sync_timestamp=1591289007652&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebsocket-driver%2Fdownload%2Fwebsocket-driver-0.6.5.tgz", - "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", - "dev": true, - "requires": { - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npm.taobao.org/websocket-extensions/download/websocket-extensions-0.1.4.tgz", - "integrity": "sha1-f4RzvIOd/YdgituV1+sHUhFXikI=", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npm.taobao.org/whatwg-encoding/download/whatwg-encoding-1.0.5.tgz", - "integrity": "sha1-WrrPd3wyFmpR0IXWtPPn0nET3bA=", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npm.taobao.org/whatwg-mimetype/download/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha1-PUseAxLSB5h5+Cav8Y2+7KWWD78=", - "dev": true - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npm.taobao.org/whatwg-url/download/whatwg-url-7.1.0.tgz?cache=0&sync_timestamp=1588965133257&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhatwg-url%2Fdownload%2Fwhatwg-url-7.1.0.tgz", - "integrity": "sha1-wsSS8eymEpiO/T0iZr4bn8YXDQY=", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz?cache=0&sync_timestamp=1574116262707&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-1.3.1.tgz", - "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npm.taobao.org/window-size/download/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" - }, - "wolfy87-eventemitter": { - "version": "5.1.0", - "resolved": "https://registry.npm.taobao.org/wolfy87-eventemitter/download/wolfy87-eventemitter-5.1.0.tgz", - "integrity": "sha1-NcGsDdGsDBXjXZgVCPwiCEoToBE=" - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npm.taobao.org/word-wrap/download/word-wrap-1.2.3.tgz", - "integrity": "sha1-YQY29rH3A4kb00dxzLF/uTtHB5w=", - "dev": true - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" - }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npm.taobao.org/worker-farm/download/worker-farm-1.7.0.tgz", - "integrity": "sha1-JqlMU5G7ypJhUgAvabhKS/dy5ag=", - "dev": true, - "requires": { - "errno": "~0.1.7" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npm.taobao.org/write/download/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, - "optional": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npm.taobao.org/ws/download/ws-6.2.1.tgz?cache=0&sync_timestamp=1593925420205&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fws%2Fdownload%2Fws-6.2.1.tgz", - "integrity": "sha1-RC/fCkftZPWbal2P8TD0dI7VJPs=", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xlsx": { - "version": "0.13.5", - "resolved": "https://registry.npm.taobao.org/xlsx/download/xlsx-0.13.5.tgz", - "integrity": "sha1-ZYJroZRMb01sAjt+tsiea24Ncbc=", - "requires": { - "adler-32": "~1.2.0", - "cfb": "~1.0.8", - "codepage": "~1.14.0", - "commander": "~2.15.1", - "crc-32": "~1.2.0", - "exit-on-epipe": "~1.0.1", - "ssf": "~0.10.2" - }, - "dependencies": { - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.15.1.tgz?cache=0&sync_timestamp=1595168173997&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.15.1.tgz", - "integrity": "sha1-30boZ9D8Kuxmo0ZitAapzK//Ww8=" - } - } - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/xml-name-validator/download/xml-name-validator-3.0.0.tgz", - "integrity": "sha1-auc+Bt5NjG5H+fsYH3jWSK1FfGo=", - "dev": true - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npm.taobao.org/xmlchars/download/xmlchars-2.2.0.tgz", - "integrity": "sha1-Bg/hvLf5x2/ioX24apvDq4lCEMs=", - "dev": true - }, - "xss": { - "version": "1.0.7", - "resolved": "https://registry.npm.taobao.org/xss/download/xss-1.0.7.tgz?cache=0&sync_timestamp=1591583567013&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fxss%2Fdownload%2Fxss-1.0.7.tgz", - "integrity": "sha1-pVTL1ekJMkvWiT+0f/9EGtVOKpU=", - "requires": { - "commander": "^2.20.3", - "cssfilter": "0.0.10" - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz", - "integrity": "sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q=", - "dev": true - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-4.0.0.tgz", - "integrity": "sha1-le+U+F7MgdAHwmThkKEg8KPIVms=", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-3.1.1.tgz", - "integrity": "sha1-27fa+b/YusmrRev2ArjLrQ1dCP0=", - "dev": true - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-3.10.0.tgz?cache=0&sync_timestamp=1594421046064&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } - }, - "yargs-parser": { - "version": "9.0.2", - "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-9.0.2.tgz?cache=0&sync_timestamp=1595125190020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-9.0.2.tgz", - "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - } - } - }, - "yorkie": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/yorkie/download/yorkie-2.0.0.tgz", - "integrity": "sha1-kkEZEtQ1IU4SxRwq4Qk+VLa7g9k=", - "dev": true, - "requires": { - "execa": "^0.8.0", - "is-ci": "^1.0.10", - "normalize-path": "^1.0.0", - "strip-indent": "^2.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "0.8.0", - "resolved": "https://registry.npm.taobao.org/execa/download/execa-0.8.0.tgz?cache=0&sync_timestamp=1594145237072&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-0.8.0.tgz", - "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz?cache=0&sync_timestamp=1594427569171&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-4.1.5.tgz", - "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "normalize-path": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-1.0.0.tgz", - "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } - }, - "zrender": { - "version": "4.3.1", - "resolved": "https://registry.npm.taobao.org/zrender/download/zrender-4.3.1.tgz", - "integrity": "sha1-uviqbcgYei+BlpLX1fm+36K5D6M=" - } - } -} diff --git a/smart-admin-web/package.json b/smart-admin-web/package.json deleted file mode 100644 index ee82b487..00000000 --- a/smart-admin-web/package.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "name": "smart-admin", - "version": "1.0.0", - "author": "1024创新实验室<1024lab@sina.com>", - "private": false, - "scripts": { - "dev": "vue-cli-service serve --open", - "local": "vue-cli-service serve --open --mode local", - "build": "vue-cli-service build", - "lint": "vue-cli-service lint", - "test:unit": "vue-cli-service test:unit", - "test:e2e": "vue-cli-service test:e2e", - "development": "vue-cli-service build --mode development", - "sit": "vue-cli-service build --mode sit", - "prod": "vue-cli-service build --mode prod" - }, - "dependencies": { - "@antv/g2": "^3.5.8-beta.1", - "axios": "^0.18.0", - "clipboard": "^2.0.0", - "codemirror": "^5.38.0", - "countup": "^1.8.2", - "cropperjs": "^1.2.2", - "dayjs": "^1.7.7", - "decimal.js": "^10.1.1", - "core-js":"^2.0.0", - "e-guide-layer": "^0.1.1", - "echarts": "^4.0.4", - "gq-plus": "^2.1.5", - "html2canvas": "^1.0.0-alpha.12", - "jquery": "^2.2.3", - "js-cookie": "^2.2.0", - "lodash": "^4.17.15", - "mavon-editor": "^2.7.5", - "moment": "^2.24.0", - "simplemde": "^1.11.2", - "sortablejs": "^1.7.0", - "tree-table-vue": "^1.1.0", - "v-org-tree": "^1.0.6", - "view-design": "^4.0.2", - "vue": "^2.5.10", - "vue-data-loading": "^0.2.4", - "vue-enum": "1.0.5", - "vue-i18n": "^7.8.0", - "vue-infinite-loading": "^2.4.4", - "vue-json-viewer": "^2.2.0", - "vue-json-views": "^0.1.1", - "vue-router": "^3.1.3", - "vue-slick": "^1.1.15", - "vuedraggable": "^2.16.0", - "vuex": "^3.0.1", - "wangeditor": "^3.1.1", - "xlsx": "^0.13.3" - }, - "devDependencies": { - "@vue/cli-plugin-babel": "^3.0.1", - "@vue/cli-plugin-eslint": "^3.0.1", - "@vue/cli-plugin-unit-mocha": "^3.0.1", - "@vue/cli-service": "^3.0.1", - "@vue/eslint-config-standard": "^3.0.0-beta.10", - "@vue/test-utils": "^1.0.0-beta.10", - "chai": "^4.1.2", - "compression-webpack-plugin": "^3.0.0", - "eslint-plugin-cypress": "^2.0.1", - "less": "^2.7.3", - "less-loader": "^4.0.5", - "lint-staged": "^6.0.0", - "uglifyjs-webpack-plugin": "^1.2.4", - "vue-template-compiler": "^2.5.13" - }, - "browserslist": [ - "> 1%", - "last 2 versions", - "not ie <= 8" - ], - "gitHooks": { - "pre-commit": "lint-staged" - }, - "lint-staged": { - "*.js": [ - "vue-cli-service lint", - "git add" - ], - "*.vue": [ - "vue-cli-service lint", - "git add" - ] - } -} diff --git a/smart-admin-web/public/favicon.ico b/smart-admin-web/public/favicon.ico deleted file mode 100644 index 5e59671b6e407a6a4ca45ce51e31ffa086ff3cad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16958 zcmeI4Yitx%6oBtia8Wen{Zvb}C|HTnA3kD8D=})+D4M81}3b@15D*_6JF)pR>aCO-45(BLM4$R8SE_rLi(FJFKARX#%W-pP?R_;2a!= zH82%Q!FR2ZO9V#3GWZGV;5;0M1F#C-f;%A+=GL3)N7o5%gAp)#$HqS6PR=cDZNJ;<*ZQ^O)kAV4=3>ybJ3rHQ(}@pmT0)$zmROz8kA&S|viIubp7}bY z)&tU*Ke={?DIjY;BX5`PZkrF$Gfwl1%cjL&&4L@e`L*oV&$-!=`N2-^&x@e1Pb{fN z?i+`o#fQ)KDvosrWBpoB%p2hlwB+pB{z8v6Nyh5>i`bsk%pBy#og4c6gN-rQQ?rNa z+TC$aVK)Ifm|`{Su0YO#3t;r^(jQ^F41(t1dSWKQor~U#6X{J0l5 z+p2omVrl(pd_QgRtLu>UBF{k?F$}uz(OKt|SRLU{(DB`JKDIh$nq<6R{l6RXaE>e< z^oJ#mJEq?Ln6aI0@zKj#nGSNEgXTf*G1fUH&OA$ATd+&3TkkX8ul|26IX#2jlTd4k zr)$@8FXIO3m=<{-`V*FT-g#NhxNcrQ#CYD4Pr^G^?=#-7es5g8pSq`D+YOdjV(Qwp zl z8Z7l!Vr%R*V*8!{F+MS0u=x}{e&rofzRg?!Q|)fue#YG4=Z|A0V0<1yUz_-(WY6}^ zz1==j+gqzsv0t_MCaz!o^3E^U7}I>q+Puc*SL^XF*Q6TA$jzf`WWNHg)V3BW@0JHa za*}6;y4v|ezW!lTp9`jQ&zv;XyZN z;)wo1u+=a6Q}6~9g4GW()|d<&TfZ-cBsxh4#QY}SLGqk6{6w@vx} z@gTeii^2B3m$KVd)zje}P2L%5;5~jp)GlLQ25p}v z$wi*wvw3cG&(n5nMnT5fw#9Mlv1?8JI)7OgQxE}dXO!er z3e#W>9ENis&&qNy*as^?zB3LC@)dL(A8k>;v5uhFm%{O|{_y0 zg)E3+Fc2BXKp~SDAR`SJh!i(SoJW%+fO8HZ(N06gB#o3LEfS8aj - - - - - - - - - - -
- - - - diff --git a/smart-admin-web/src/App.vue b/smart-admin-web/src/App.vue deleted file mode 100644 index 0d189502..00000000 --- a/smart-admin-web/src/App.vue +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - diff --git a/smart-admin-web/src/api/data-scope.js b/smart-admin-web/src/api/data-scope.js deleted file mode 100644 index 14799315..00000000 --- a/smart-admin-web/src/api/data-scope.js +++ /dev/null @@ -1,15 +0,0 @@ -import { postAxios, getAxios } from '@/lib/http'; -export const dataScopeApi = { - // 批量设置某角色数据范围 - updateDataScope: data => { - return postAxios('/dataScope/batchSet', data); - }, - // 数据权限列表 - getDataScopeList: () => { - return getAxios('/dataScope/list'); - }, - // 获取某角色所设置的数据范围 - getDataScopeByRoleId: roleId => { - return getAxios('/dataScope/listByRole/' + roleId); - } -}; diff --git a/smart-admin-web/src/api/department.js b/smart-admin-web/src/api/department.js deleted file mode 100644 index 2e4ebfa0..00000000 --- a/smart-admin-web/src/api/department.js +++ /dev/null @@ -1,47 +0,0 @@ -import { postAxios, getAxios } from '@/lib/http'; -export const departmentApi = { - // 加载所有的部门子部门 - getLoadDepartment: () => { - return getAxios('/department/list'); - }, - // 查询部门及员工列表 - getDepartmentEmployeeList: () => { - return getAxios('/department/listEmployee'); - }, - // 添加部门 - addDepartment: (data) => { - return postAxios('/department/add', data); - }, - // 编辑部门 - updateDepartment: (data) => { - return postAxios('/department/update', data); - }, - // 删除部门 - deleteDepartment: (data) => { - return postAxios('/department/delete/' + data); - }, - // 根据id获取部门信息 - getDepartmentById: (data) => { - return getAxios('/department/query/' + data); - }, - // 查询部门列表 - getDepartmentAll: () => { - return getAxios('/department/listAll'); - }, - // 根据部门名称获取员工列表 - getListEmployeeByDepartmentName: (departmentName) => { - return getAxios('/department/listEmployeeByDepartmentName?departmentName=' + departmentName); - }, - // 上下移动 - upOrDown: (departmentId, swapId) => { - return getAxios('/department/upOrDown/' + departmentId + '/' + swapId); - }, - // 升级 - upGrade: (departmentId) => { - return getAxios('/department/upgrade/' + departmentId); - }, - // 降级 - downGrade: (departmentId, preId) => { - return getAxios('/department/downgrade/' + departmentId + '/' + preId); - } -}; diff --git a/smart-admin-web/src/api/email.js b/smart-admin-web/src/api/email.js deleted file mode 100644 index cb541021..00000000 --- a/smart-admin-web/src/api/email.js +++ /dev/null @@ -1,27 +0,0 @@ -import { postAxios, getAxios } from '@/lib/http'; -export const emailApi = { - // 新增邮件 - addEmail: (data) => { - return postAxios('/email/add', data); - }, - // 分页查询邮件 - getEmail: (data) => { - return postAxios('/email/page/query', data); - }, - // 删除邮件 - deleteEmail: (id) => { - return getAxios('/email/delete/' + id); - }, - // 查看邮件详情 - getEmailDetails: (id) => { - return getAxios('/email/detail/' + id); - }, - // 发送邮件 - sendEmail: (id) => { - return getAxios('/email/send/' + id); - }, - // 更新编辑邮件 - updateEmail: (data) => { - return postAxios('/email/update', data); - } -}; diff --git a/smart-admin-web/src/api/employee.js b/smart-admin-web/src/api/employee.js deleted file mode 100644 index 7f1d8001..00000000 --- a/smart-admin-web/src/api/employee.js +++ /dev/null @@ -1,43 +0,0 @@ -import { postAxios, getAxios } from '@/lib/http'; -export const employeeApi = { - // 员工管理查询 - getEmployeeList: (data) => { - return postAxios('/employee/query', data); - }, - // 添加员工 - addEmployee: (data) => { - return postAxios('/employee/add', data); - }, - // 更新员工信息 - updateEmployee: (data) => { - return postAxios('/employee/update', data); - }, - // 禁用启用单个员工 - updateStatus: (employeeId, status) => { - return getAxios('/employee/updateStatus/' + employeeId + '/' + status); - }, - // 批量禁用 - updateStatusBatch: (data) => { - return postAxios('/employee/batchUpdateStatus', data); - }, - // 单个员工角色授权 - updateRoles: (data) => { - return postAxios('/employee/updateRoles', data); - }, - // 修改密码 - updatePwd: (data) => { - return postAxios('/employee/updatePwd', data); - }, - // 重置密码 - resetPassword: (employeeId) => { - return getAxios('/employee/resetPasswd/' + employeeId); - }, - // 通过部门id获取当前部门的人员&没有部门的人 - getListEmployeeByDeptId: (departmentId) => { - return getAxios('/employee/listEmployeeByDeptId/' + departmentId); - }, - // 删除员工 - deleteEmployee: (employeeId) => { - return postAxios('/employee/delete/' + employeeId); - } -}; diff --git a/smart-admin-web/src/api/file.js b/smart-admin-web/src/api/file.js deleted file mode 100644 index e8f80248..00000000 --- a/smart-admin-web/src/api/file.js +++ /dev/null @@ -1,28 +0,0 @@ -import { postAxios, getAxios, getDownloadAxios} from '@/lib/http'; -import config from '@/config'; -const baseUrl = config.baseUrl.apiUrl; -export const fileApi = { - // 系统文件查询 - queryFileList: data => { - return postAxios('/api/file/query', data); - }, - // 系统文件下载通过接口 - downLoadFile: id => { - return getDownloadAxios('/api/file/downLoad?id=' + id); - }, - // 文件上传 - fileUpload: (type, data) => { - // return postAxios('/api/file/localUpload/' + type, data); - return this.fileUploadUrl; - }, - // 文件保存 - addFile: data => { - return postAxios('/api/file/save', data); - }, - // 上传路径:本地 - fileUploadLocalUrl: baseUrl + '/api/file/localUpload/', - // 上传路径:阿里OSS - fileUploadAliUrl: baseUrl + '/api/file/aliYunUpload/', - // 上传路径:七牛 - fileUploadQiNiuUrl: baseUrl + '/api/file/qiNiuUpload/' -}; diff --git a/smart-admin-web/src/api/heart-beat.js b/smart-admin-web/src/api/heart-beat.js deleted file mode 100644 index c5ec2486..00000000 --- a/smart-admin-web/src/api/heart-beat.js +++ /dev/null @@ -1,7 +0,0 @@ -import { postAxios, getAxios } from '@/lib/http'; -export const heartBeatApi = { - // 分页查询所有岗位 - queryHeartBeatRecord: data => { - return postAxios('/heartBeat/query', data); - } -}; diff --git a/smart-admin-web/src/api/login.js b/smart-admin-web/src/api/login.js deleted file mode 100644 index 83338d56..00000000 --- a/smart-admin-web/src/api/login.js +++ /dev/null @@ -1,19 +0,0 @@ -import { postAxios, getAxios } from '@/lib/http'; -export const loginApi = { - // 登录 - login: data => { - return postAxios('/session/login', data); - }, - // 根据token获取session - getSession: () => { - return getAxios('/session/get'); - }, - // 登出 - logout: (token) => { - return getAxios(`/session/logOut?x-access-token=${token}`); - }, - // 获取验证码 - getVerificationCode: () => { - return getAxios('/session/verificationCode'); - } -}; diff --git a/smart-admin-web/src/api/notice.js b/smart-admin-web/src/api/notice.js deleted file mode 100644 index fad6ad83..00000000 --- a/smart-admin-web/src/api/notice.js +++ /dev/null @@ -1,43 +0,0 @@ -// 任务调度API -import { - postAxios, - getAxios -} from '@/lib/http'; -export const noticeApi = { - // 查询消息列表 - getNoticeList: (data) => { - return postAxios('/notice/page/query', data); - }, - // 未读消息列表 - getNoticeUnreadList: (data) => { - return postAxios('/notice/unread/page/query', data); - }, - // 查询个人消息列表 - getPersonNoticeList: (data) => { - return postAxios('/notice/receive/page/query', data); - }, - // 添加消息 - addNotice: (data) => { - return postAxios('/notice/add', data); - }, - // 标记已读 - addNoticeRecord: (id) => { - return getAxios(`/notice/read/${id}`); - }, - // 修改消息 - updateNotice: (data) => { - return postAxios('/notice/update', data); - }, - // 删除消息 - deleteNotice: (id) => { - return getAxios(`/notice/delete/${id}`); - }, - // 获取通知详情 - getNoticeDetail: (id) => { - return getAxios(`/notice/detail/${id}`); - }, - // 发送消息 - sendNotice: (id) => { - return getAxios(`/notice/send/${id}`); - } -}; diff --git a/smart-admin-web/src/api/online-user.js b/smart-admin-web/src/api/online-user.js deleted file mode 100644 index b7847b9b..00000000 --- a/smart-admin-web/src/api/online-user.js +++ /dev/null @@ -1,12 +0,0 @@ -// 任务调度API -import { - postAxios, - getAxios -} from '@/lib/http'; -export const onlineUserApi = { - // 查询在线员工列表 - getOnlineUserList: (data) => { - return postAxios('/userOnLine/query', data); - } - -}; diff --git a/smart-admin-web/src/api/peony.js b/smart-admin-web/src/api/peony.js deleted file mode 100644 index 0c41d54f..00000000 --- a/smart-admin-web/src/api/peony.js +++ /dev/null @@ -1,28 +0,0 @@ -import { postAxios, getAxios, postDownloadAxios } from '@/lib/http'; - -export const peonyApi = { - // 添加牡丹花 @author 卓大 - addPeony: (data) => { - return postAxios('/peony/add', data); - }, - // 分页查询牡丹花 @author 卓大 - queryPeony: (data) => { - return postAxios('/peony/page/query', data); - }, - // 批量删除牡丹花 @author 卓大 - batchDeletePeony: (idList) => { - return postAxios('/peony/deleteByIds', idList); - }, - // 修改牡丹花 @author 卓大 - updatePeony: (data) => { - return postAxios('/peony/update',data); - }, - // 导出全部 @author 卓大 - exportAll:(data)=>{ - return postDownloadAxios('/peony/export/all',data); - }, - // 批量导出 @author 卓大 - batchExport: (idList) => { - return postDownloadAxios('/peony/export/batch', idList); - }, -}; diff --git a/smart-admin-web/src/api/position.js b/smart-admin-web/src/api/position.js deleted file mode 100644 index 3756c457..00000000 --- a/smart-admin-web/src/api/position.js +++ /dev/null @@ -1,19 +0,0 @@ -import { postAxios, getAxios } from '@/lib/http'; -export const positionApi = { - // 分页查询所有岗位 - getPositionListPage: data => { - return postAxios('/position/getListPage', data); - }, - // 更新岗位 - updatePosition: data => { - return postAxios('/position/update', data); - }, - // 添加岗位 - addPosition: data => { - return postAxios('/position/add', data); - }, - // 根据ID删除岗位 - deletePosition: id => { - return getAxios('/position/remove/' + id); - } -}; diff --git a/smart-admin-web/src/api/privilege.js b/smart-admin-web/src/api/privilege.js deleted file mode 100644 index 3530544c..00000000 --- a/smart-admin-web/src/api/privilege.js +++ /dev/null @@ -1,36 +0,0 @@ -import { postAxios, getAxios } from '@/lib/http'; - -export const privilegeApi = { - // 获取所有请求路径 - getAllUrl: data => { - return getAxios('/privilege/getAllUrl'); - }, - // 获取全部菜单列表 - getMenuList: data => { - return postAxios('/privilege/menu/queryAll'); - }, - // 菜单批量保存 - addBatchSaveMenu: data => { - return postAxios('/privilege/menu/batchSaveMenu', data); - }, - // 功能点批量保存 - addBatchSavePoints: data => { - return postAxios('/privilege/function/batchSave', data); - }, - // 查询菜单功能点 - queryPrivilegeFunctionList: menuKey => { - return postAxios('/privilege/function/query/' + menuKey); - }, - // 保存更新功能点 - addOrUpdate: data => { - return postAxios('/privilege/function/saveOrUpdate', data); - }, - // 更新角色权限 - getRolePower: data => { - return postAxios('/privilege/updateRolePrivilege', data); - }, - // 获取角色可选的功能权限 - getListPrivilegeByRoleId: id => { - return getAxios('/privilege/listPrivilegeByRoleId/' + id); - } -}; diff --git a/smart-admin-web/src/api/role.js b/smart-admin-web/src/api/role.js deleted file mode 100644 index be5f338a..00000000 --- a/smart-admin-web/src/api/role.js +++ /dev/null @@ -1,58 +0,0 @@ -import { postAxios, getAxios } from '@/lib/http'; -export const roleApi = { - // 添加角色 - addRole: (remark, roleName) => { - const data = { - remark: remark, - roleName: roleName - }; - return postAxios('/role/add', data); - }, - // 删除角色 - deleteRole: id => { - return getAxios('/role/delete/' + id); - }, - // 修改角色 - updateRole: (id, remark, roleName) => { - const data = { - id: id, - remark: remark, - roleName: roleName - }; - return postAxios('/role/update', data); - }, - // 获取角色数据 - getRoleDetail: id => { - return getAxios('/role/get/' + id); - }, - // 加载角色列表 - getAllRole: () => { - return getAxios('role/getAll'); - }, - // 根据角色名字获取对应成员列表 - getListEmployee: data => { - return postAxios('/role/listEmployee', data); - }, - // 根据角色id获取角色成员-员工列表 - getAllListEmployee: id => { - return getAxios('/role/listAllEmployee/' + id); - }, - // 从角色成员列表中移除员工 - deleteEmployeeRole: param => { - return getAxios('/role/removeEmployee?employeeId=' + param.employeeId + '&roleId=' + param.roleId); - }, - // 从角色成员列表中批量移除员工 - deleteEmployeeList: data => { - return postAxios('/role/removeEmployeeList', data); - }, - - // 添加角色成员方法 - addEmployeeListRole: data => { - return postAxios('/role/addEmployeeList', data); - }, - // 通过员工id获取所有角色以及员工具有的角色 - getRoles: id => { - return getAxios('/role/getRoles/' + id); - }, - -}; diff --git a/smart-admin-web/src/api/smart-reload.js b/smart-admin-web/src/api/smart-reload.js deleted file mode 100644 index 8ee701ed..00000000 --- a/smart-admin-web/src/api/smart-reload.js +++ /dev/null @@ -1,20 +0,0 @@ -// smartReloadAPI -import { - postAxios, - getAxios -} from '@/lib/http'; -export const smartReloadApi = { - // 查询所有 - getSmartReloadList: () => { - return getAxios('/smartReload/all'); - }, - // 更新单条数据 - updateSmartReloadData: (data) => { - return postAxios('/smartReload/update', data); - }, - // 获取执行结果 - getSmartReloadResult: (tag) => { - return getAxios(`/smartReload/result/${tag}`); - } - -}; diff --git a/smart-admin-web/src/api/system-config.js b/smart-admin-web/src/api/system-config.js deleted file mode 100644 index 392dd942..00000000 --- a/smart-admin-web/src/api/system-config.js +++ /dev/null @@ -1,31 +0,0 @@ -// 系统参数API -import { - postAxios, - getAxios -} from '@/lib/http'; -export const systemConfigApi = { - // 查询系统参数列表 - getSystemConfigList: (data) => { - return postAxios('/systemConfig/getListPage', data); - }, - // 添加系统参数 - addSystemConfig: (data) => { - return postAxios('/systemConfig/add', data); - }, - // 更新单条系统参数 - updateSystemConfig: (data) => { - return postAxios('/systemConfig/update', data); - }, - // 通过key获取对应的信息 - getConfigListByKey: (key) => { - return getAxios(`/systemConfig/selectByKey?configKey=${key}`); - }, - // 根据分组查询所有系统配置 - getListByGroup: (group) => { - return getAxios(`/systemConfig/getListByGroup?group=${group}`); - }, - // 获取系统版本信息 - getCodeVersion: () => { - return getAxios('/codeVersion'); - } -}; diff --git a/smart-admin-web/src/api/task-manage.js b/smart-admin-web/src/api/task-manage.js deleted file mode 100644 index 7e787862..00000000 --- a/smart-admin-web/src/api/task-manage.js +++ /dev/null @@ -1,35 +0,0 @@ -// 任务调度API -import { - postAxios, - getAxios -} from '@/lib/http'; -export const taskApi = { - // 查询任务列表 - getTaskList: (data) => { - return postAxios('/quartz/task/query', data); - }, - // 添加或更新任务 - addOrUpdateTask: (data) => { - return postAxios('/quartz/task/saveOrUpdate', data); - }, - // 查询任务日志 - getTaskLog: (data) => { - return postAxios('/quartz/task/queryLog', data); - }, - // 暂停任务 - updateTaskPause: (taskId) => { - return getAxios(`/quartz/task/pause/${taskId}`); - }, - // 运行任务 - updateTaskRun: (taskId) => { - return getAxios(`/quartz/task/run/${taskId}`); - }, - // 恢复任务 - updateTaskResume: (taskId) => { - return getAxios(`/quartz/task/resume/${taskId}`); - }, - // 删除任务 - deleteTask: (taskId) => { - return getAxios(`/quartz/task/delete/${taskId}`); - } -}; diff --git a/smart-admin-web/src/api/user-log.js b/smart-admin-web/src/api/user-log.js deleted file mode 100644 index eb3a3ad9..00000000 --- a/smart-admin-web/src/api/user-log.js +++ /dev/null @@ -1,28 +0,0 @@ -// 用户日志API -import { - postAxios, - getAxios -} from '@/lib/http.js'; -export const userLogApi = { - // 查询用户操作日志 - getUserOperateLogPage: (data) => { - return postAxios('/userOperateLog/page/query', data); - }, - // 用户操作日志详情 - detailUserOperateLog: (data) => { - return getAxios('/userOperateLog/detail/' + data); - }, - // 删除用户操作日志 - deleteUserOperateLog: (data) => { - return getAxios('/userOperateLog/delete/' + data); - }, - // 查询用户登录日志 - getUserLoginLogPage: (data) => { - return postAxios('/userLoginLog/page/query', data); - }, - // 删除用户登录日志 - deleteUserLoginLog: (data) => { - return getAxios('/userLoginLog/delete/' + data); - } - -}; diff --git a/smart-admin-web/src/api/user.js b/smart-admin-web/src/api/user.js deleted file mode 100644 index 8ac0a2a1..00000000 --- a/smart-admin-web/src/api/user.js +++ /dev/null @@ -1,20 +0,0 @@ -import { postAxios, getAxios } from '@/lib/http'; - -export const login = ({ userName, password }) => { - const data = { - userName, - password - }; - return postAxios('login', data); -}; - -export const getUserInfo = (token) => { - let params = { - token - }; - return getAxios('get_info', params); -}; - -export const logout = (token) => { - return postAxios('logout', {}); -}; diff --git a/smart-admin-web/src/assets/icons/demo.css b/smart-admin-web/src/assets/icons/demo.css deleted file mode 100644 index a67054a0..00000000 --- a/smart-admin-web/src/assets/icons/demo.css +++ /dev/null @@ -1,539 +0,0 @@ -/* Logo 字体 */ -@font-face { - font-family: "iconfont logo"; - src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834'); - src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'), - url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'), - url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'), - url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg'); -} - -.logo { - font-family: "iconfont logo"; - font-size: 160px; - font-style: normal; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -/* tabs */ -.nav-tabs { - position: relative; -} - -.nav-tabs .nav-more { - position: absolute; - right: 0; - bottom: 0; - height: 42px; - line-height: 42px; - color: #666; -} - -#tabs { - border-bottom: 1px solid #eee; -} - -#tabs li { - cursor: pointer; - width: 100px; - height: 40px; - line-height: 40px; - text-align: center; - font-size: 16px; - border-bottom: 2px solid transparent; - position: relative; - z-index: 1; - margin-bottom: -1px; - color: #666; -} - - -#tabs .active { - border-bottom-color: #f00; - color: #222; -} - -.tab-container .content { - display: none; -} - -/* 页面布局 */ -.main { - padding: 30px 100px; - width: 960px; - margin: 0 auto; -} - -.main .logo { - color: #333; - text-align: left; - margin-bottom: 30px; - line-height: 1; - height: 110px; - margin-top: -50px; - overflow: hidden; - *zoom: 1; -} - -.main .logo a { - font-size: 160px; - color: #333; -} - -.helps { - margin-top: 40px; -} - -.helps pre { - padding: 20px; - margin: 10px 0; - border: solid 1px #e7e1cd; - background-color: #fffdef; - overflow: auto; -} - -.icon_lists { - width: 100% !important; - overflow: hidden; - *zoom: 1; -} - -.icon_lists li { - width: 100px; - margin-bottom: 10px; - margin-right: 20px; - text-align: center; - list-style: none !important; - cursor: default; -} - -.icon_lists li .code-name { - line-height: 1.2; -} - -.icon_lists .icon { - display: block; - height: 100px; - line-height: 100px; - font-size: 42px; - margin: 10px auto; - color: #333; - -webkit-transition: font-size 0.25s linear, width 0.25s linear; - -moz-transition: font-size 0.25s linear, width 0.25s linear; - transition: font-size 0.25s linear, width 0.25s linear; -} - -.icon_lists .icon:hover { - font-size: 100px; -} - -.icon_lists .svg-icon { - /* 通过设置 font-size 来改变图标大小 */ - width: 1em; - /* 图标和文字相邻时,垂直对齐 */ - vertical-align: -0.15em; - /* 通过设置 color 来改变 SVG 的颜色/fill */ - fill: currentColor; - /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示 - normalize.css 中也包含这行 */ - overflow: hidden; -} - -.icon_lists li .name, -.icon_lists li .code-name { - color: #666; -} - -/* markdown 样式 */ -.markdown { - color: #666; - font-size: 14px; - line-height: 1.8; -} - -.highlight { - line-height: 1.5; -} - -.markdown img { - vertical-align: middle; - max-width: 100%; -} - -.markdown h1 { - color: #404040; - font-weight: 500; - line-height: 40px; - margin-bottom: 24px; -} - -.markdown h2, -.markdown h3, -.markdown h4, -.markdown h5, -.markdown h6 { - color: #404040; - margin: 1.6em 0 0.6em 0; - font-weight: 500; - clear: both; -} - -.markdown h1 { - font-size: 28px; -} - -.markdown h2 { - font-size: 22px; -} - -.markdown h3 { - font-size: 16px; -} - -.markdown h4 { - font-size: 14px; -} - -.markdown h5 { - font-size: 12px; -} - -.markdown h6 { - font-size: 12px; -} - -.markdown hr { - height: 1px; - border: 0; - background: #e9e9e9; - margin: 16px 0; - clear: both; -} - -.markdown p { - margin: 1em 0; -} - -.markdown>p, -.markdown>blockquote, -.markdown>.highlight, -.markdown>ol, -.markdown>ul { - width: 80%; -} - -.markdown ul>li { - list-style: circle; -} - -.markdown>ul li, -.markdown blockquote ul>li { - margin-left: 20px; - padding-left: 4px; -} - -.markdown>ul li p, -.markdown>ol li p { - margin: 0.6em 0; -} - -.markdown ol>li { - list-style: decimal; -} - -.markdown>ol li, -.markdown blockquote ol>li { - margin-left: 20px; - padding-left: 4px; -} - -.markdown code { - margin: 0 3px; - padding: 0 5px; - background: #eee; - border-radius: 3px; -} - -.markdown strong, -.markdown b { - font-weight: 600; -} - -.markdown>table { - border-collapse: collapse; - border-spacing: 0px; - empty-cells: show; - border: 1px solid #e9e9e9; - width: 95%; - margin-bottom: 24px; -} - -.markdown>table th { - white-space: nowrap; - color: #333; - font-weight: 600; -} - -.markdown>table th, -.markdown>table td { - border: 1px solid #e9e9e9; - padding: 8px 16px; - text-align: left; -} - -.markdown>table th { - background: #F7F7F7; -} - -.markdown blockquote { - font-size: 90%; - color: #999; - border-left: 4px solid #e9e9e9; - padding-left: 0.8em; - margin: 1em 0; -} - -.markdown blockquote p { - margin: 0; -} - -.markdown .anchor { - opacity: 0; - transition: opacity 0.3s ease; - margin-left: 8px; -} - -.markdown .waiting { - color: #ccc; -} - -.markdown h1:hover .anchor, -.markdown h2:hover .anchor, -.markdown h3:hover .anchor, -.markdown h4:hover .anchor, -.markdown h5:hover .anchor, -.markdown h6:hover .anchor { - opacity: 1; - display: inline-block; -} - -.markdown>br, -.markdown>p>br { - clear: both; -} - - -.hljs { - display: block; - background: white; - padding: 0.5em; - color: #333333; - overflow-x: auto; -} - -.hljs-comment, -.hljs-meta { - color: #969896; -} - -.hljs-string, -.hljs-variable, -.hljs-template-variable, -.hljs-strong, -.hljs-emphasis, -.hljs-quote { - color: #df5000; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-type { - color: #a71d5d; -} - -.hljs-literal, -.hljs-symbol, -.hljs-bullet, -.hljs-attribute { - color: #0086b3; -} - -.hljs-section, -.hljs-name { - color: #63a35c; -} - -.hljs-tag { - color: #333333; -} - -.hljs-title, -.hljs-attr, -.hljs-selector-id, -.hljs-selector-class, -.hljs-selector-attr, -.hljs-selector-pseudo { - color: #795da3; -} - -.hljs-addition { - color: #55a532; - background-color: #eaffea; -} - -.hljs-deletion { - color: #bd2c00; - background-color: #ffecec; -} - -.hljs-link { - text-decoration: underline; -} - -/* 代码高亮 */ -/* PrismJS 1.15.0 -https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */ -/** - * prism.js default theme for JavaScript, CSS and HTML - * Based on dabblet (http://dabblet.com) - * @author Lea Verou - */ -code[class*="language-"], -pre[class*="language-"] { - color: black; - background: none; - text-shadow: 0 1px white; - font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; - text-align: left; - white-space: pre; - word-spacing: normal; - word-break: normal; - word-wrap: normal; - line-height: 1.5; - - -moz-tab-size: 4; - -o-tab-size: 4; - tab-size: 4; - - -webkit-hyphens: none; - -moz-hyphens: none; - -ms-hyphens: none; - hyphens: none; -} - -pre[class*="language-"]::-moz-selection, -pre[class*="language-"] ::-moz-selection, -code[class*="language-"]::-moz-selection, -code[class*="language-"] ::-moz-selection { - text-shadow: none; - background: #b3d4fc; -} - -pre[class*="language-"]::selection, -pre[class*="language-"] ::selection, -code[class*="language-"]::selection, -code[class*="language-"] ::selection { - text-shadow: none; - background: #b3d4fc; -} - -@media print { - - code[class*="language-"], - pre[class*="language-"] { - text-shadow: none; - } -} - -/* Code blocks */ -pre[class*="language-"] { - padding: 1em; - margin: .5em 0; - overflow: auto; -} - -:not(pre)>code[class*="language-"], -pre[class*="language-"] { - background: #f5f2f0; -} - -/* Inline code */ -:not(pre)>code[class*="language-"] { - padding: .1em; - border-radius: .3em; - white-space: normal; -} - -.token.comment, -.token.prolog, -.token.doctype, -.token.cdata { - color: slategray; -} - -.token.punctuation { - color: #999; -} - -.namespace { - opacity: .7; -} - -.token.property, -.token.tag, -.token.boolean, -.token.number, -.token.constant, -.token.symbol, -.token.deleted { - color: #905; -} - -.token.selector, -.token.attr-name, -.token.string, -.token.char, -.token.builtin, -.token.inserted { - color: #690; -} - -.token.operator, -.token.entity, -.token.url, -.language-css .token.string, -.style .token.string { - color: #9a6e3a; - background: hsla(0, 0%, 100%, .5); -} - -.token.atrule, -.token.attr-value, -.token.keyword { - color: #07a; -} - -.token.function, -.token.class-name { - color: #DD4A68; -} - -.token.regex, -.token.important, -.token.variable { - color: #e90; -} - -.token.important, -.token.bold { - font-weight: bold; -} - -.token.italic { - font-style: italic; -} - -.token.entity { - cursor: help; -} diff --git a/smart-admin-web/src/assets/icons/demo_index.html b/smart-admin-web/src/assets/icons/demo_index.html deleted file mode 100644 index 2c777b68..00000000 --- a/smart-admin-web/src/assets/icons/demo_index.html +++ /dev/null @@ -1,722 +0,0 @@ - - - - - IconFont Demo - - - - - - - - - - - -
- - - diff --git a/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/demo.css b/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/demo.css deleted file mode 100644 index a67054a0..00000000 --- a/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/demo.css +++ /dev/null @@ -1,539 +0,0 @@ -/* Logo 字体 */ -@font-face { - font-family: "iconfont logo"; - src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834'); - src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'), - url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'), - url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'), - url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg'); -} - -.logo { - font-family: "iconfont logo"; - font-size: 160px; - font-style: normal; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -/* tabs */ -.nav-tabs { - position: relative; -} - -.nav-tabs .nav-more { - position: absolute; - right: 0; - bottom: 0; - height: 42px; - line-height: 42px; - color: #666; -} - -#tabs { - border-bottom: 1px solid #eee; -} - -#tabs li { - cursor: pointer; - width: 100px; - height: 40px; - line-height: 40px; - text-align: center; - font-size: 16px; - border-bottom: 2px solid transparent; - position: relative; - z-index: 1; - margin-bottom: -1px; - color: #666; -} - - -#tabs .active { - border-bottom-color: #f00; - color: #222; -} - -.tab-container .content { - display: none; -} - -/* 页面布局 */ -.main { - padding: 30px 100px; - width: 960px; - margin: 0 auto; -} - -.main .logo { - color: #333; - text-align: left; - margin-bottom: 30px; - line-height: 1; - height: 110px; - margin-top: -50px; - overflow: hidden; - *zoom: 1; -} - -.main .logo a { - font-size: 160px; - color: #333; -} - -.helps { - margin-top: 40px; -} - -.helps pre { - padding: 20px; - margin: 10px 0; - border: solid 1px #e7e1cd; - background-color: #fffdef; - overflow: auto; -} - -.icon_lists { - width: 100% !important; - overflow: hidden; - *zoom: 1; -} - -.icon_lists li { - width: 100px; - margin-bottom: 10px; - margin-right: 20px; - text-align: center; - list-style: none !important; - cursor: default; -} - -.icon_lists li .code-name { - line-height: 1.2; -} - -.icon_lists .icon { - display: block; - height: 100px; - line-height: 100px; - font-size: 42px; - margin: 10px auto; - color: #333; - -webkit-transition: font-size 0.25s linear, width 0.25s linear; - -moz-transition: font-size 0.25s linear, width 0.25s linear; - transition: font-size 0.25s linear, width 0.25s linear; -} - -.icon_lists .icon:hover { - font-size: 100px; -} - -.icon_lists .svg-icon { - /* 通过设置 font-size 来改变图标大小 */ - width: 1em; - /* 图标和文字相邻时,垂直对齐 */ - vertical-align: -0.15em; - /* 通过设置 color 来改变 SVG 的颜色/fill */ - fill: currentColor; - /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示 - normalize.css 中也包含这行 */ - overflow: hidden; -} - -.icon_lists li .name, -.icon_lists li .code-name { - color: #666; -} - -/* markdown 样式 */ -.markdown { - color: #666; - font-size: 14px; - line-height: 1.8; -} - -.highlight { - line-height: 1.5; -} - -.markdown img { - vertical-align: middle; - max-width: 100%; -} - -.markdown h1 { - color: #404040; - font-weight: 500; - line-height: 40px; - margin-bottom: 24px; -} - -.markdown h2, -.markdown h3, -.markdown h4, -.markdown h5, -.markdown h6 { - color: #404040; - margin: 1.6em 0 0.6em 0; - font-weight: 500; - clear: both; -} - -.markdown h1 { - font-size: 28px; -} - -.markdown h2 { - font-size: 22px; -} - -.markdown h3 { - font-size: 16px; -} - -.markdown h4 { - font-size: 14px; -} - -.markdown h5 { - font-size: 12px; -} - -.markdown h6 { - font-size: 12px; -} - -.markdown hr { - height: 1px; - border: 0; - background: #e9e9e9; - margin: 16px 0; - clear: both; -} - -.markdown p { - margin: 1em 0; -} - -.markdown>p, -.markdown>blockquote, -.markdown>.highlight, -.markdown>ol, -.markdown>ul { - width: 80%; -} - -.markdown ul>li { - list-style: circle; -} - -.markdown>ul li, -.markdown blockquote ul>li { - margin-left: 20px; - padding-left: 4px; -} - -.markdown>ul li p, -.markdown>ol li p { - margin: 0.6em 0; -} - -.markdown ol>li { - list-style: decimal; -} - -.markdown>ol li, -.markdown blockquote ol>li { - margin-left: 20px; - padding-left: 4px; -} - -.markdown code { - margin: 0 3px; - padding: 0 5px; - background: #eee; - border-radius: 3px; -} - -.markdown strong, -.markdown b { - font-weight: 600; -} - -.markdown>table { - border-collapse: collapse; - border-spacing: 0px; - empty-cells: show; - border: 1px solid #e9e9e9; - width: 95%; - margin-bottom: 24px; -} - -.markdown>table th { - white-space: nowrap; - color: #333; - font-weight: 600; -} - -.markdown>table th, -.markdown>table td { - border: 1px solid #e9e9e9; - padding: 8px 16px; - text-align: left; -} - -.markdown>table th { - background: #F7F7F7; -} - -.markdown blockquote { - font-size: 90%; - color: #999; - border-left: 4px solid #e9e9e9; - padding-left: 0.8em; - margin: 1em 0; -} - -.markdown blockquote p { - margin: 0; -} - -.markdown .anchor { - opacity: 0; - transition: opacity 0.3s ease; - margin-left: 8px; -} - -.markdown .waiting { - color: #ccc; -} - -.markdown h1:hover .anchor, -.markdown h2:hover .anchor, -.markdown h3:hover .anchor, -.markdown h4:hover .anchor, -.markdown h5:hover .anchor, -.markdown h6:hover .anchor { - opacity: 1; - display: inline-block; -} - -.markdown>br, -.markdown>p>br { - clear: both; -} - - -.hljs { - display: block; - background: white; - padding: 0.5em; - color: #333333; - overflow-x: auto; -} - -.hljs-comment, -.hljs-meta { - color: #969896; -} - -.hljs-string, -.hljs-variable, -.hljs-template-variable, -.hljs-strong, -.hljs-emphasis, -.hljs-quote { - color: #df5000; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-type { - color: #a71d5d; -} - -.hljs-literal, -.hljs-symbol, -.hljs-bullet, -.hljs-attribute { - color: #0086b3; -} - -.hljs-section, -.hljs-name { - color: #63a35c; -} - -.hljs-tag { - color: #333333; -} - -.hljs-title, -.hljs-attr, -.hljs-selector-id, -.hljs-selector-class, -.hljs-selector-attr, -.hljs-selector-pseudo { - color: #795da3; -} - -.hljs-addition { - color: #55a532; - background-color: #eaffea; -} - -.hljs-deletion { - color: #bd2c00; - background-color: #ffecec; -} - -.hljs-link { - text-decoration: underline; -} - -/* 代码高亮 */ -/* PrismJS 1.15.0 -https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */ -/** - * prism.js default theme for JavaScript, CSS and HTML - * Based on dabblet (http://dabblet.com) - * @author Lea Verou - */ -code[class*="language-"], -pre[class*="language-"] { - color: black; - background: none; - text-shadow: 0 1px white; - font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; - text-align: left; - white-space: pre; - word-spacing: normal; - word-break: normal; - word-wrap: normal; - line-height: 1.5; - - -moz-tab-size: 4; - -o-tab-size: 4; - tab-size: 4; - - -webkit-hyphens: none; - -moz-hyphens: none; - -ms-hyphens: none; - hyphens: none; -} - -pre[class*="language-"]::-moz-selection, -pre[class*="language-"] ::-moz-selection, -code[class*="language-"]::-moz-selection, -code[class*="language-"] ::-moz-selection { - text-shadow: none; - background: #b3d4fc; -} - -pre[class*="language-"]::selection, -pre[class*="language-"] ::selection, -code[class*="language-"]::selection, -code[class*="language-"] ::selection { - text-shadow: none; - background: #b3d4fc; -} - -@media print { - - code[class*="language-"], - pre[class*="language-"] { - text-shadow: none; - } -} - -/* Code blocks */ -pre[class*="language-"] { - padding: 1em; - margin: .5em 0; - overflow: auto; -} - -:not(pre)>code[class*="language-"], -pre[class*="language-"] { - background: #f5f2f0; -} - -/* Inline code */ -:not(pre)>code[class*="language-"] { - padding: .1em; - border-radius: .3em; - white-space: normal; -} - -.token.comment, -.token.prolog, -.token.doctype, -.token.cdata { - color: slategray; -} - -.token.punctuation { - color: #999; -} - -.namespace { - opacity: .7; -} - -.token.property, -.token.tag, -.token.boolean, -.token.number, -.token.constant, -.token.symbol, -.token.deleted { - color: #905; -} - -.token.selector, -.token.attr-name, -.token.string, -.token.char, -.token.builtin, -.token.inserted { - color: #690; -} - -.token.operator, -.token.entity, -.token.url, -.language-css .token.string, -.style .token.string { - color: #9a6e3a; - background: hsla(0, 0%, 100%, .5); -} - -.token.atrule, -.token.attr-value, -.token.keyword { - color: #07a; -} - -.token.function, -.token.class-name { - color: #DD4A68; -} - -.token.regex, -.token.important, -.token.variable { - color: #e90; -} - -.token.important, -.token.bold { - font-weight: bold; -} - -.token.italic { - font-style: italic; -} - -.token.entity { - cursor: help; -} diff --git a/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/demo_index.html b/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/demo_index.html deleted file mode 100644 index 2c777b68..00000000 --- a/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/demo_index.html +++ /dev/null @@ -1,722 +0,0 @@ - - - - - IconFont Demo - - - - - - - - - - - -
-

- -
-
-
    - -
  • - -
    多级菜单
    -
    &#xe608;
    -
  • - -
  • - -
    导航展开
    -
    &#xe609;
    -
  • - -
  • - -
    导航折叠
    -
    &#xe60a;
    -
  • - -
  • - -
    向上箭头
    -
    &#xe60b;
    -
  • - -
  • - -
    向左箭头
    -
    &#xe60c;
    -
  • - -
  • - -
    向右箭头
    -
    &#xe60d;
    -
  • - -
  • - -
    关闭按钮
    -
    &#xe60e;
    -
  • - -
  • - -
    数据上传
    -
    &#xe60f;
    -
  • - -
  • - -
    系统监控
    -
    &#xe610;
    -
  • - -
  • - -
    邮件管理
    -
    &#xe611;
    -
  • - -
  • - -
    小屏
    -
    &#xe612;
    -
  • - -
  • - -
    人员管理
    -
    &#xe613;
    -
  • - -
  • - -
    向下拉
    -
    &#xe614;
    -
  • - -
  • - -
    excel导入导出
    -
    &#xe615;
    -
  • - -
  • - -
    向下箭头
    -
    &#xe616;
    -
  • - -
  • - -
    首页
    -
    &#xe617;
    -
  • - -
  • - -
    系统设置
    -
    &#xe618;
    -
  • - -
  • - -
    消息
    -
    &#xe619;
    -
  • - -
  • - -
    全屏
    -
    &#xe61a;
    -
  • - -
  • - -
    组件
    -
    &#xe61b;
    -
  • - -
  • - -
    news
    -
    &#xe61e;
    -
  • - -
  • - -
    定时任务
    -
    &#xe622;
    -
  • - -
  • - -
    动态加载
    -
    &#xe623;
    -
  • - -
  • - -
    接口文档
    -
    &#xe624;
    -
  • - -
-
-

Unicode 引用

-
- -

Unicode 是字体在网页端最原始的应用方式,特点是:

-
    -
  • 兼容性最好,支持 IE6+,及所有现代浏览器。
  • -
  • 支持按字体的方式去动态调整图标大小,颜色等等。
  • -
  • 但是因为是字体,所以不支持多色。只能使用平台里单色的图标,就算项目里有多色图标也会自动去色。
  • -
-
-

注意:新版 iconfont 支持多色图标,这些多色图标在 Unicode 模式下将不能使用,如果有需求建议使用symbol 的引用方式

-
-

Unicode 使用步骤如下:

-

第一步:拷贝项目下面生成的 @font-face

-
@font-face {
-  font-family: 'iconfont';
-  src: url('iconfont.eot');
-  src: url('iconfont.eot?#iefix') format('embedded-opentype'),
-      url('iconfont.woff2') format('woff2'),
-      url('iconfont.woff') format('woff'),
-      url('iconfont.ttf') format('truetype'),
-      url('iconfont.svg#iconfont') format('svg');
-}
-
-

第二步:定义使用 iconfont 的样式

-
.iconfont {
-  font-family: "iconfont" !important;
-  font-size: 16px;
-  font-style: normal;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-
-

第三步:挑选相应图标并获取字体编码,应用于页面

-
-<span class="iconfont">&#x33;</span>
-
-
-

"iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

-
-
-
-
-
    - -
  • - -
    - 多级菜单 -
    -
    .iconduojicaidan -
    -
  • - -
  • - -
    - 导航展开 -
    -
    .icondaohangzhankai -
    -
  • - -
  • - -
    - 导航折叠 -
    -
    .icondaohangzhedie -
    -
  • - -
  • - -
    - 向上箭头 -
    -
    .iconxiangshangjiantou -
    -
  • - -
  • - -
    - 向左箭头 -
    -
    .iconxiangzuojiantou -
    -
  • - -
  • - -
    - 向右箭头 -
    -
    .iconxiangyoujiantou -
    -
  • - -
  • - -
    - 关闭按钮 -
    -
    .iconguanbianniu -
    -
  • - -
  • - -
    - 数据上传 -
    -
    .iconshujushangchuan -
    -
  • - -
  • - -
    - 系统监控 -
    -
    .iconxitongjiankong -
    -
  • - -
  • - -
    - 邮件管理 -
    -
    .iconyoujianguanli -
    -
  • - -
  • - -
    - 小屏 -
    -
    .iconxiaoping -
    -
  • - -
  • - -
    - 人员管理 -
    -
    .iconrenyuanguanli -
    -
  • - -
  • - -
    - 向下拉 -
    -
    .iconxiangxiala -
    -
  • - -
  • - -
    - excel导入导出 -
    -
    .iconexceldaorudaochu -
    -
  • - -
  • - -
    - 向下箭头 -
    -
    .iconxiangxiajiantou -
    -
  • - -
  • - -
    - 首页 -
    -
    .iconshouye -
    -
  • - -
  • - -
    - 系统设置 -
    -
    .iconxitongshezhi -
    -
  • - -
  • - -
    - 消息 -
    -
    .iconxiaoxi -
    -
  • - -
  • - -
    - 全屏 -
    -
    .iconquanping -
    -
  • - -
  • - -
    - 组件 -
    -
    .iconzujian -
    -
  • - -
  • - -
    - news -
    -
    .iconnews -
    -
  • - -
  • - -
    - 定时任务 -
    -
    .icondingshirenwu -
    -
  • - -
  • - -
    - 动态加载 -
    -
    .icondongtaijiazai -
    -
  • - -
  • - -
    - 接口文档 -
    -
    .iconjiekouwendang -
    -
  • - -
-
-

font-class 引用

-
- -

font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。

-

与 Unicode 使用方式相比,具有如下特点:

-
    -
  • 兼容性良好,支持 IE8+,及所有现代浏览器。
  • -
  • 相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。
  • -
  • 因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。
  • -
  • 不过因为本质上还是使用的字体,所以多色图标还是不支持的。
  • -
-

使用步骤如下:

-

第一步:引入项目下面生成的 fontclass 代码:

-
<link rel="stylesheet" href="./iconfont.css">
-
-

第二步:挑选相应图标并获取类名,应用于页面:

-
<span class="iconfont iconxxx"></span>
-
-
-

" - iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

-
-
-
-
-
    - -
  • - -
    多级菜单
    -
    #iconduojicaidan
    -
  • - -
  • - -
    导航展开
    -
    #icondaohangzhankai
    -
  • - -
  • - -
    导航折叠
    -
    #icondaohangzhedie
    -
  • - -
  • - -
    向上箭头
    -
    #iconxiangshangjiantou
    -
  • - -
  • - -
    向左箭头
    -
    #iconxiangzuojiantou
    -
  • - -
  • - -
    向右箭头
    -
    #iconxiangyoujiantou
    -
  • - -
  • - -
    关闭按钮
    -
    #iconguanbianniu
    -
  • - -
  • - -
    数据上传
    -
    #iconshujushangchuan
    -
  • - -
  • - -
    系统监控
    -
    #iconxitongjiankong
    -
  • - -
  • - -
    邮件管理
    -
    #iconyoujianguanli
    -
  • - -
  • - -
    小屏
    -
    #iconxiaoping
    -
  • - -
  • - -
    人员管理
    -
    #iconrenyuanguanli
    -
  • - -
  • - -
    向下拉
    -
    #iconxiangxiala
    -
  • - -
  • - -
    excel导入导出
    -
    #iconexceldaorudaochu
    -
  • - -
  • - -
    向下箭头
    -
    #iconxiangxiajiantou
    -
  • - -
  • - -
    首页
    -
    #iconshouye
    -
  • - -
  • - -
    系统设置
    -
    #iconxitongshezhi
    -
  • - -
  • - -
    消息
    -
    #iconxiaoxi
    -
  • - -
  • - -
    全屏
    -
    #iconquanping
    -
  • - -
  • - -
    组件
    -
    #iconzujian
    -
  • - -
  • - -
    news
    -
    #iconnews
    -
  • - -
  • - -
    定时任务
    -
    #icondingshirenwu
    -
  • - -
  • - -
    动态加载
    -
    #icondongtaijiazai
    -
  • - -
  • - -
    接口文档
    -
    #iconjiekouwendang
    -
  • - -
-
-

Symbol 引用

-
- -

这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇文章 - 这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:

-
    -
  • 支持多色图标了,不再受单色限制。
  • -
  • 通过一些技巧,支持像字体那样,通过 font-size, color 来调整样式。
  • -
  • 兼容性较差,支持 IE9+,及现代浏览器。
  • -
  • 浏览器渲染 SVG 的性能一般,还不如 png。
  • -
-

使用步骤如下:

-

第一步:引入项目下面生成的 symbol 代码:

-
<script src="./iconfont.js"></script>
-
-

第二步:加入通用 CSS 代码(引入一次就行):

-
<style>
-.icon {
-  width: 1em;
-  height: 1em;
-  vertical-align: -0.15em;
-  fill: currentColor;
-  overflow: hidden;
-}
-</style>
-
-

第三步:挑选相应图标并获取类名,应用于页面:

-
<svg class="icon" aria-hidden="true">
-  <use xlink:href="#icon-xxx"></use>
-</svg>
-
-
-
- -
-
- - - diff --git a/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.css b/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.css deleted file mode 100644 index 8c269496..00000000 --- a/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.css +++ /dev/null @@ -1,113 +0,0 @@ -@font-face {font-family: "iconfont"; - src: url('iconfont.eot?t=1567826173562'); /* IE9 */ - src: url('iconfont.eot?t=1567826173562#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'), - url('iconfont.woff?t=1567826173562') format('woff'), - url('iconfont.ttf?t=1567826173562') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ - url('iconfont.svg?t=1567826173562#iconfont') format('svg'); /* iOS 4.1- */ -} - -.iconfont { - font-family: "iconfont" !important; - font-size: 16px; - font-style: normal; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.iconduojicaidan:before { - content: "\e608"; -} - -.icondaohangzhankai:before { - content: "\e609"; -} - -.icondaohangzhedie:before { - content: "\e60a"; -} - -.iconxiangshangjiantou:before { - content: "\e60b"; -} - -.iconxiangzuojiantou:before { - content: "\e60c"; -} - -.iconxiangyoujiantou:before { - content: "\e60d"; -} - -.iconguanbianniu:before { - content: "\e60e"; -} - -.iconshujushangchuan:before { - content: "\e60f"; -} - -.iconxitongjiankong:before { - content: "\e610"; -} - -.iconyoujianguanli:before { - content: "\e611"; -} - -.iconxiaoping:before { - content: "\e612"; -} - -.iconrenyuanguanli:before { - content: "\e613"; -} - -.iconxiangxiala:before { - content: "\e614"; -} - -.iconexceldaorudaochu:before { - content: "\e615"; -} - -.iconxiangxiajiantou:before { - content: "\e616"; -} - -.iconshouye:before { - content: "\e617"; -} - -.iconxitongshezhi:before { - content: "\e618"; -} - -.iconxiaoxi:before { - content: "\e619"; -} - -.iconquanping:before { - content: "\e61a"; -} - -.iconzujian:before { - content: "\e61b"; -} - -.iconnews:before { - content: "\e61e"; -} - -.icondingshirenwu:before { - content: "\e622"; -} - -.icondongtaijiazai:before { - content: "\e623"; -} - -.iconjiekouwendang:before { - content: "\e624"; -} - diff --git a/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.eot b/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.eot deleted file mode 100644 index cf0b3fbdf621e7a70585e35f454f7db627ef94f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8812 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 diff --git a/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.js b/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.js deleted file mode 100644 index 6a3315a1..00000000 --- a/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.js +++ /dev/null @@ -1 +0,0 @@ -!function(e){var c,t='',h=(c=document.getElementsByTagName("script"))[c.length-1].getAttribute("data-injectcss");if(h&&!e.__iconfont__svg__cssinject__){e.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(c){console&&console.log(c)}}!function(c){if(document.addEventListener)if(~["complete","loaded","interactive"].indexOf(document.readyState))setTimeout(c,0);else{var h=function(){document.removeEventListener("DOMContentLoaded",h,!1),c()};document.addEventListener("DOMContentLoaded",h,!1)}else document.attachEvent&&(a=c,o=e.document,l=!1,(i=function(){try{o.documentElement.doScroll("left")}catch(c){return void setTimeout(i,50)}t()})(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,t())});function t(){l||(l=!0,a())}var a,o,l,i}(function(){var c,h;(c=document.createElement("div")).innerHTML=t,t=null,(h=c.getElementsByTagName("svg")[0])&&(h.setAttribute("aria-hidden","true"),h.style.position="absolute",h.style.width=0,h.style.height=0,h.style.overflow="hidden",function(c,h){h.firstChild?function(c,h){h.parentNode.insertBefore(c,h)}(c,h.firstChild):h.appendChild(c)}(h,document.body))})}(window); \ No newline at end of file diff --git a/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.svg b/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.svg deleted file mode 100644 index a349f5e2..00000000 --- a/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.svg +++ /dev/null @@ -1,98 +0,0 @@ - - - - - -Created by iconfont - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.ttf b/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.ttf deleted file mode 100644 index 69587d9ec84c49f0f13af71459b52433868ec15d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8644 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
w^-dZn^ z3s*qrn|3l~Sz1U|&2;ZDEER)=9US)di$HsD+%`Nk0ar`bu88Z_uQW%O5*)4;6)FYz zcoJ{tih*;|#w7KS9EnsW{5$tQNJpjBu-!GR#wNx81dutfx&$F6gH5I3AtNF18fFN! z&~OPpf$$K7GaLo%RvhYqj0K27BTz;TekR?&hiF~zsv11ZJ;!K5QLM=2*uHc7B99nh zQ*F*=2Qzj@+DWg^jm7>svc7p`J*N5I{Rch>A9CQOt5YA!+I{F;>(eAD`=P0;r}Y>d zxZ% z@#F{ZNjwh{9vp_pIUX9s3xhx#^h5VDX*V`A*j9WC5B4-2wmh#r3~8k-X|JM z`2nJVJb%bf8~19asqu$IysFV<*HC+Od!GeLJ>``1K*% zj@tIxF{Gg}JVo%c6t+(ZyEx?!b|c@|O9KUdwjhQrG%ghea6L8j#wFb#r2H(>#~d?c zxULa0o#tSE?9O|G0q?zYEKf_gWwgfK|JSy$->`!SgGa@~n2`TV(xZ}h@ zi#>%)?d?+TRE3nqM)qA*A!Xm&gp`F=q}$2@FNGF_qa?Hdixq$i`3fK?mT(si^eZ}R zT`TX?(yqqA0&YU93;a<(ZEW$y{HTca#@%AA{IepyC4Y5yeihNGe2^@|BQc^a=$9b1^d^wQ#ZA9&1cW+QAazkMcs?%H8+Z!6aDprT0nCyKBzhYtpnoZkLLUE zTndXjsGFuv|K3dISMfFs@`Z?F{nYM!b_o{vs9@pqnFd>*x3l{-XfQau>bw|u^~j57 zZvVv>v5r!Z=a68gm6t&8Zsld<@n5E3g8zR^yfFlM74%K5yutc`kpbPrnSTP_2+6Q= z{0s7)R-W+B&F5Nqj(>Nqw(=6_&$aS0@;_+h75qc<%T``xVUk*TgYBVcD{rzQ%^TZJ z%uFrK9LgVjAU{97xG=l8uw<-c?w*-jK00+`rMQyrnK^NCesLkcw!CJAG&!>{b7FShj*kuwih%^ZJiT}fe{XHWvS;Ar zEFnI`@^E$@Ks?W;*&XE2ka$miK{zwQY5Orv!fk4vK0 zaW;y-f(CD_Xr+DGU+FPnC-8OrkN7X~wLa~5DUnDf1?RIyI=p^^OtJ{C1h@r-2@jSO zr5MF2foH}xYNrln9$H>JGCw^ve`spKIW)C+cxqwpETa3T=ItBBnM3n4-kEt+ofP#) zkXu?@c74iO(f^k61B=V8vN^XrwQvx13-inF$-~P>mi^w-he3AE%r7klobE?zw|a>l zN9T1gUOYYz@`;&+2S5tQhCd#nqf_CTGt)CiF~1Ybh`=$J3+h^9t0xaHE-)}N`oFmw8(bqIu$hvzZi>1F#6rnEFQ4_;>>h9mPc_b)D= Mo>_p1<{6R9021Zi4kvHG_ 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 diff --git a/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.woff2 b/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.woff2 deleted file mode 100644 index 89c0d09e7ac28fa8a86980e9905e1c02ee7ebfc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4584 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 SWT0jUIY|qZd}3}i0ssK8jJret diff --git a/smart-admin-web/src/assets/icons/iconfont.css b/smart-admin-web/src/assets/icons/iconfont.css deleted file mode 100644 index 8c269496..00000000 --- a/smart-admin-web/src/assets/icons/iconfont.css +++ /dev/null @@ -1,113 +0,0 @@ -@font-face {font-family: "iconfont"; - src: url('iconfont.eot?t=1567826173562'); /* IE9 */ - src: url('iconfont.eot?t=1567826173562#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'), - url('iconfont.woff?t=1567826173562') format('woff'), - url('iconfont.ttf?t=1567826173562') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ - url('iconfont.svg?t=1567826173562#iconfont') format('svg'); /* iOS 4.1- */ -} - -.iconfont { - font-family: "iconfont" !important; - font-size: 16px; - font-style: normal; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.iconduojicaidan:before { - content: "\e608"; -} - -.icondaohangzhankai:before { - content: "\e609"; -} - -.icondaohangzhedie:before { - content: "\e60a"; -} - -.iconxiangshangjiantou:before { - content: "\e60b"; -} - -.iconxiangzuojiantou:before { - content: "\e60c"; -} - -.iconxiangyoujiantou:before { - content: "\e60d"; -} - -.iconguanbianniu:before { - content: "\e60e"; -} - -.iconshujushangchuan:before { - content: "\e60f"; -} - -.iconxitongjiankong:before { - content: "\e610"; -} - -.iconyoujianguanli:before { - content: "\e611"; -} - -.iconxiaoping:before { - content: "\e612"; -} - -.iconrenyuanguanli:before { - content: "\e613"; -} - -.iconxiangxiala:before { - content: "\e614"; -} - -.iconexceldaorudaochu:before { - content: "\e615"; -} - -.iconxiangxiajiantou:before { - content: "\e616"; -} - -.iconshouye:before { - content: "\e617"; -} - -.iconxitongshezhi:before { - content: "\e618"; -} - -.iconxiaoxi:before { - content: "\e619"; -} - -.iconquanping:before { - content: "\e61a"; -} - -.iconzujian:before { - content: "\e61b"; -} - -.iconnews:before { - content: "\e61e"; -} - -.icondingshirenwu:before { - content: "\e622"; -} - -.icondongtaijiazai:before { - content: "\e623"; -} - -.iconjiekouwendang:before { - content: "\e624"; -} - diff --git a/smart-admin-web/src/assets/icons/iconfont.eot b/smart-admin-web/src/assets/icons/iconfont.eot deleted file mode 100644 index cf0b3fbdf621e7a70585e35f454f7db627ef94f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8812 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 diff --git a/smart-admin-web/src/assets/icons/iconfont.js b/smart-admin-web/src/assets/icons/iconfont.js deleted file mode 100644 index 6a3315a1..00000000 --- a/smart-admin-web/src/assets/icons/iconfont.js +++ /dev/null @@ -1 +0,0 @@ -!function(e){var c,t='',h=(c=document.getElementsByTagName("script"))[c.length-1].getAttribute("data-injectcss");if(h&&!e.__iconfont__svg__cssinject__){e.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(c){console&&console.log(c)}}!function(c){if(document.addEventListener)if(~["complete","loaded","interactive"].indexOf(document.readyState))setTimeout(c,0);else{var h=function(){document.removeEventListener("DOMContentLoaded",h,!1),c()};document.addEventListener("DOMContentLoaded",h,!1)}else document.attachEvent&&(a=c,o=e.document,l=!1,(i=function(){try{o.documentElement.doScroll("left")}catch(c){return void setTimeout(i,50)}t()})(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,t())});function t(){l||(l=!0,a())}var a,o,l,i}(function(){var c,h;(c=document.createElement("div")).innerHTML=t,t=null,(h=c.getElementsByTagName("svg")[0])&&(h.setAttribute("aria-hidden","true"),h.style.position="absolute",h.style.width=0,h.style.height=0,h.style.overflow="hidden",function(c,h){h.firstChild?function(c,h){h.parentNode.insertBefore(c,h)}(c,h.firstChild):h.appendChild(c)}(h,document.body))})}(window); \ No newline at end of file diff --git a/smart-admin-web/src/assets/icons/iconfont.svg b/smart-admin-web/src/assets/icons/iconfont.svg deleted file mode 100644 index a349f5e2..00000000 --- a/smart-admin-web/src/assets/icons/iconfont.svg +++ /dev/null @@ -1,98 +0,0 @@ - - - - - -Created by iconfont - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/smart-admin-web/src/assets/icons/iconfont.ttf b/smart-admin-web/src/assets/icons/iconfont.ttf deleted file mode 100644 index 69587d9ec84c49f0f13af71459b52433868ec15d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8644 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
w^-dZn^ z3s*qrn|3l~Sz1U|&2;ZDEER)=9US)di$HsD+%`Nk0ar`bu88Z_uQW%O5*)4;6)FYz zcoJ{tih*;|#w7KS9EnsW{5$tQNJpjBu-!GR#wNx81dutfx&$F6gH5I3AtNF18fFN! z&~OPpf$$K7GaLo%RvhYqj0K27BTz;TekR?&hiF~zsv11ZJ;!K5QLM=2*uHc7B99nh zQ*F*=2Qzj@+DWg^jm7>svc7p`J*N5I{Rch>A9CQOt5YA!+I{F;>(eAD`=P0;r}Y>d zxZ% z@#F{ZNjwh{9vp_pIUX9s3xhx#^h5VDX*V`A*j9WC5B4-2wmh#r3~8k-X|JM z`2nJVJb%bf8~19asqu$IysFV<*HC+Od!GeLJ>``1K*% zj@tIxF{Gg}JVo%c6t+(ZyEx?!b|c@|O9KUdwjhQrG%ghea6L8j#wFb#r2H(>#~d?c zxULa0o#tSE?9O|G0q?zYEKf_gWwgfK|JSy$->`!SgGa@~n2`TV(xZ}h@ zi#>%)?d?+TRE3nqM)qA*A!Xm&gp`F=q}$2@FNGF_qa?Hdixq$i`3fK?mT(si^eZ}R zT`TX?(yqqA0&YU93;a<(ZEW$y{HTca#@%AA{IepyC4Y5yeihNGe2^@|BQc^a=$9b1^d^wQ#ZA9&1cW+QAazkMcs?%H8+Z!6aDprT0nCyKBzhYtpnoZkLLUE zTndXjsGFuv|K3dISMfFs@`Z?F{nYM!b_o{vs9@pqnFd>*x3l{-XfQau>bw|u^~j57 zZvVv>v5r!Z=a68gm6t&8Zsld<@n5E3g8zR^yfFlM74%K5yutc`kpbPrnSTP_2+6Q= z{0s7)R-W+B&F5Nqj(>Nqw(=6_&$aS0@;_+h75qc<%T``xVUk*TgYBVcD{rzQ%^TZJ z%uFrK9LgVjAU{97xG=l8uw<-c?w*-jK00+`rMQyrnK^NCesLkcw!CJAG&!>{b7FShj*kuwih%^ZJiT}fe{XHWvS;Ar zEFnI`@^E$@Ks?W;*&XE2ka$miK{zwQY5Orv!fk4vK0 zaW;y-f(CD_Xr+DGU+FPnC-8OrkN7X~wLa~5DUnDf1?RIyI=p^^OtJ{C1h@r-2@jSO zr5MF2foH}xYNrln9$H>JGCw^ve`spKIW)C+cxqwpETa3T=ItBBnM3n4-kEt+ofP#) zkXu?@c74iO(f^k61B=V8vN^XrwQvx13-inF$-~P>mi^w-he3AE%r7klobE?zw|a>l zN9T1gUOYYz@`;&+2S5tQhCd#nqf_CTGt)CiF~1Ybh`=$J3+h^9t0xaHE-)}N`oFmw8(bqIu$hvzZi>1F#6rnEFQ4_;>>h9mPc_b)D= Mo>_p1<{6R9021Zi4kvHG_ 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 diff --git a/smart-admin-web/src/assets/icons/iconfont.woff2 b/smart-admin-web/src/assets/icons/iconfont.woff2 deleted file mode 100644 index 89c0d09e7ac28fa8a86980e9905e1c02ee7ebfc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4584 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 SWT0jUIY|qZd}3}i0ssK8jJret diff --git a/smart-admin-web/src/assets/images/default_icon.png b/smart-admin-web/src/assets/images/default_icon.png deleted file mode 100644 index 1e0872fd462bc710a45851953108675002830fb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2364 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 \ No newline at end of file diff --git a/smart-admin-web/src/assets/images/error-page/error-404.svg b/smart-admin-web/src/assets/images/error-page/error-404.svg deleted file mode 100644 index 77d97f71..00000000 --- a/smart-admin-web/src/assets/images/error-page/error-404.svg +++ /dev/null @@ -1 +0,0 @@ -drone_delivery \ No newline at end of file diff --git a/smart-admin-web/src/assets/images/error-page/error-500.svg b/smart-admin-web/src/assets/images/error-page/error-500.svg deleted file mode 100644 index ef72fd32..00000000 --- a/smart-admin-web/src/assets/images/error-page/error-500.svg +++ /dev/null @@ -1 +0,0 @@ -co-working \ No newline at end of file diff --git a/smart-admin-web/src/assets/images/icon-qr-qq-wechat.png b/smart-admin-web/src/assets/images/icon-qr-qq-wechat.png deleted file mode 100644 index c5f6b18591f0025bc37fc2dae5c7bc85177c42ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43541 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 W(3(E^8d>n@;Zjjhm#>!n6!bq|VVLs( diff --git a/smart-admin-web/src/assets/images/icon-social-bilibili.svg b/smart-admin-web/src/assets/images/icon-social-bilibili.svg deleted file mode 100644 index d655a329..00000000 --- a/smart-admin-web/src/assets/images/icon-social-bilibili.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/smart-admin-web/src/assets/images/icon-social-juejin.svg b/smart-admin-web/src/assets/images/icon-social-juejin.svg deleted file mode 100644 index c0ad2aeb..00000000 --- a/smart-admin-web/src/assets/images/icon-social-juejin.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/smart-admin-web/src/assets/images/icon-social-twitter.svg b/smart-admin-web/src/assets/images/icon-social-twitter.svg deleted file mode 100644 index cef3ec09..00000000 --- a/smart-admin-web/src/assets/images/icon-social-twitter.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/smart-admin-web/src/assets/images/icon-social-zhihu.svg b/smart-admin-web/src/assets/images/icon-social-zhihu.svg deleted file mode 100644 index 3a82ca82..00000000 --- a/smart-admin-web/src/assets/images/icon-social-zhihu.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/smart-admin-web/src/assets/images/login-alipay.png b/smart-admin-web/src/assets/images/login-alipay.png deleted file mode 100644 index 7d9f0306411646da46ca036af00fda790a3f2e04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1881 zcmah~3sBQ`81D&+FRmSShx37<3Zl}cZ)l`2Xp2;=houvIa2k>TU1<`NlokhbDB}hq zj(K+6yrF>NR1gN644ncxb?SUf#0NS>CqqR=IZ^Pr6b0R#+;U0&kNke$_x-=$_g!*h z=FjmQJz+G5!|~KdX^reS-t~+e!M@w<>RxvEh|$F}u|yJMhbfE`juMF&ptr)wm=S}~ z^cBaj5Dv$!(`<@o;tlg4gs_TW7e?f;k}R9U2?=wMFk-o?EGz5hK3XxKXNaPA2NF|aeWpb4&5Ri%`!Js%8l*ohg-3(!?eVbigDi5s6(#>Ib68Ada+Asr}AT1jJG? zD~2;Piiq11*4=_HZix&f}1Kx{502Ds>3u5w7O ztEOFAL0XJ5r(tL$MOcA;Js|VYvB-wB_lAoO9gBQOF31K0x+?UYiXGTu+rTv)>_2uf z*ufaiwk^f>=cG2zf7rHn*K5N~j@F8Wvn`in_@Qa2dg?K!Wyzi;QND-IOySk=yS*XX zt)+{l=&kcR&^u0FP0H=Fewvp$Ao?L!94yam`YmnCH-2IK+1#@%!~TrWhFK@N!%J7!*4Fmmb+uVl3deZGiT2}ZJ4~&k2cX>gowl&QcX7DeCrsF5qv^6u<$di1!;Y>v-{rP!=~DORz|&)IA54+wLH@j)fIM8e z2`k?EqNr~1^oe@s2Cp0LUL)6v-MF_R4oO~leEqx3x9Zbu{kNwK+nZY!?a9t=aVHhS zGJ@;;|496?cMY9jzn3=Cm|rGTx>Xm=9vSPbu5W5g$bCB3JMR*2M*XkP6Y)$cW9}#J=&dl_z5gbhbrsjj6wK^wT++n&d zXjjYjFEH+H29ics2NeQ=fq^kq!%pl;{E#U^coq$tz5YFhR39%!XAF&W%S{o03^>a=@^35$V0jIjJB$iA&=sa1J65=C60ygUO74+WSU3O@D z!Ll(scb53A>1*|NcPet=YTLfQ$|F{vx;=ycpoXpwEdJn9kZ!?vB+e$5KC4J5YmDPN z)?fX2n=y+%?bdY#x!zPV?7Q;eaGr(9DfEy#ALbwMUA27l50c3~%7$2OA@=2>nR>5U z_sZq@v7YstFP24(*eEZ&RubpY)L4?XE`jVUtOe#ZZ`;-}rK7bca7|jZI`wSUQ2}yw zTyHt|^W@S$r_J4FypKfsmy@-|N*wwA?(+*Jr;{BX7KFR*^5N2GpQri;q3LB2$GU(w mv8MFgjFT(C$93)NIc^+tZ^1ph@s-5&v(xM5Yj;O1U;QsNJ;NIS diff --git a/smart-admin-web/src/assets/images/login-bg.jpg b/smart-admin-web/src/assets/images/login-bg.jpg deleted file mode 100644 index 04c27b4f2c492241b7865a392088329c277a59ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 547587 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 p7WA>N`#QUh?Mu08+iN+ZX!f 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 j9xu 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 Fon}TpX09i97m*h7*dv1|%%2{CYZ>9ezC*_ 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

=z%Au|oxZ+3Nx4tps65@o9A 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

}ngG#A4Q5r8#O`f*3&>TJaB5%}!J10U|4?($) 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
}E@v|_G9?1zA4Z(GKO^K= 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 I=fBtg2Zx>A6#xJL diff --git a/smart-admin-web/src/assets/images/login-logo.png b/smart-admin-web/src/assets/images/login-logo.png deleted file mode 100644 index 61765e6dab63920b8e5a9962605860893332543c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4900 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 bXeU50`OgRKIXU;Y|65_K9ME+ZK4<;~Y*11s diff --git a/smart-admin-web/src/assets/images/login-sina.png b/smart-admin-web/src/assets/images/login-sina.png deleted file mode 100644 index 950619fd1b7c76b785dea3be1d775ffe950278c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1851 zcmah~2~ZPf6pna+2#ORLpfk9J;4zZ>AlVWrBmp9XBgT?~Se9ggK#~oc1p-*DfH+Vs zDD^0eCly3Rk!meMOB0Jn83932#0r!mShN%iiU-mS0@@jw?(FV=?DxI*{`b8%n;RPJ zZ)@#hO&}0##Q{PoK028nt9kglE0sTr56+lKj;%vtu~Z0!2|h|B1_s0$C=QmwkTNal z8tg?N%pOq51u|nO28|A969``31|6hGgfSonj#Fv*#KD?6BA`<8iQ#Ms zO`;RP@v4Ay6keAeEK{T>DtJnw_Zq;<0OAHTFa`kzjasV*4SeE+T@as}x2Z&60)i#- ziEo0EOF{twg2Dis!XYc@EH>cDqtH1_7LVrvFlclxmByvgnPfT#WYItd1DL#sxHnW8 z3rdB4lfLj3pBRr}I*>|DO--ewGARfeN2T+4JSvSrWiZG%f~-%|VvvEX)w@ku5W;!| zs?uR9L<^WLLNQ1(#wX&DzBz(MH*Hp{pG*^;FscF4QRx(#`A8E$rD7VVOGecb&Xo!( ztcEqP7SrQc`ZN~Ll0-5Mf3I1MW*V)>r10Cby%(*QrRiX*6xJijr~(%`*3BH24ium; zgdwO5LDW+j4~<7KL?4gn0D-`qVIHtDT%}basrps#a9|;X!F;0mJDG;xOc|XH;vz7) zt7%-2MtcL5AWBti+Iyi~kU{?s6qjEKVbK4Al?pHxK{XJrfy!L5RGl_%!ka__inV$S z(kfuFkWa*qM^UMipr=wV5sH_eWzllw(vGE zPpA72Urcu}ti{_F#ruEFOr3J~G4IUp@&5aS5|q+Ex$mijq6dO~^g^ee?3C z@wKd>$l>Ni&6l&D9V|MS{w(_LqAnu>wFLGYJ9xb1W<;~ap1PWq9*0w6v#+;RabAl* zy4LeJqv7S4E3@t!<2ui;jMqIHBGfFGz?>WM{*;>hBvO3mz{rCnrHuW<5}SFR?&25y zIo-~FIuw0!PFn7DM)qry&N=gB#p!`vwo$ilk8K{`UT1%EV5E0!3|T$8KXah{uVD;j zJ6Km#+dF(&A6_5R&0e!s$NVnl>}avv<7rCeG8@;m$6B6{jn_yf;8ds8)xK?}{5_GG z9i(j0{&RK@vn$fa(Af-kK%G?ZI=I;BP^HoK5}}nfn&YupZ2HX3V*UEGoq65W?P`k` zuNXeQPM1&l6TSLS-kpw@d6qSRqM)gGqjoj^f z;+8eZety7mv3sFS>71{B%CPn-?9AG?LA7Ak*<7IKo|m_GpYxJv%cp^y21@_P#jeMJ zw|a)|#O3@}8&a^CMXv3=$0}Y9b5<;FaEK~7Zr%3R%Pbz| z$5H-3JC_~UJm=_2Q)6S?-b7B#g0ix*N2c;}6>0C04U|hppZn)`e835B-Lz(WA#-rs zKjf{7hxJF=UzAogYcGU`X^yWy8J+AAo*R>I$REmBwb5fZnIuQsN;aOk;`wdT><;&! znj&df-j%_M7Wcu!MG@KTer<}Yu;d0i!SMpAJ4YZNFN0qfmTtMdC35q88euy(GglLC Rzrp-F6N`d{r+uR{{{_^{#sUBU diff --git a/smart-admin-web/src/assets/images/login-taobao.png b/smart-admin-web/src/assets/images/login-taobao.png deleted file mode 100644 index ecaa608aecd8657619c9852b6f9818d6bb52d6fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1898 zcmah~2~ZPf6pn}zupkye8a%cE6_FkMCyIZBz;K@pO6X-8I329Cdh!$0%1HJ0YddqBBDYdcxCEY z#E(WB--oI-q(&Jo(c*eGWWlh_dV*rpXnym}1f)$tNFW|bL@_DzNnJe?Kw&9!iLa8Q zBxFbu8j@i^qBA1Y+Kd#f7-r7*2mH(u%77jrA;7HHVMd8r${eyQq2`utkO>Sy$P_8_ zT~Hcj6d=P52;j>Wu(VtsUqC2ka|L`KvDh2nakwIoBLca67FQtg;YfHqVEAHE-VAVp zL?sU%_C>9v%p{T|Bp_%qnb;;i8#g3^T(MXTa(Ez*$D$A{<4TN#%q-04K4L+R7_|nJ zAW<9xEEb`7JdKnxsYu@)K~IdD#f-ygq7nw0Ap+#GIhG?00b%VZjz}};hMdD%5YZue z1S5?UmOF~2vZPdw!arzMuOCGlNfq+%**=Iis#g*Ss6vc*nn6p6oZxN=i;&0+2t?ur zHIC~>G9HzLlejSnCjgnul3_96xdg>v++_56kAuh|5|J`3-&q{$=Bv3}2_*tw^f^Z) z;c(tTl{kzhto$I90tx>ErR0Yp68c{-td%6-20cV+fLbaRB(TIGZ%U;k6f=?#rbR;K zQYLjgHj2U$AzvU9Dg-_#^pK!q$HE)a-Y^#)I~M+!T#yO|v{dMO6+5y;wSi?i+JDqy zw1W|hYFh)uufXHNja(q<9yu@Yx75MAm zoS@47$|%v`+Gw}mSWCN!yV0WQZ`(k6mde{j_}DfAa{s7_@#*&Rii!uqC$?CzqYG4O zt#0owue*VTc*Hfm$ttN`)9Bc8$98L3X8aC~x61}(EyNzuL2DV8FNY_w?PDlDDIu*|xL*ZBd@j75lIBolW(M zpSiG)>BF$^H~X!pWm=h1Ry%okG<1W31BW(7)I5#b-1ThAQ6janwjg^}FT-ci_~wU= zw{II8CTh2@4xo)w5GP`EqUjEQ`ssI8EWJW^fWEz0xyjn@{*wH|ho`>@uMQBBnz+Ko zd-rC`tNuROUcSJ;!lq=-t`7ekS*H~~*nQ@n;cJ)1b;+(1A756A^VGekLl~&C>S{SA z%w#ovI+z4lm-WV!O+;m#Ktb% zQWh}vM`H=|?hp0LXUzq48)K$8^SbACJoF25ns9GR4I+ZQdCqQuo!2;X=!LmgzZ`57 ziJaBNx;f*(B)^%$ipsx|rZM^^hxR(Hh%C6}cyukJt17%dF6zyy2^|l1v~{jgPk#Q@ zwJ8s8u*p{wj8|mZ0E$7^S3GZa4Kk|Pi-g{Tt7w{-V=Sa^F>O3LkA1hyf zx@yISt2Sv_GctFsA8_rfj%{+WIoTDM@owI{C4JS#<2o zud^DI%W_Xe3NP4oY(3g@==faQc?7+0aQe2vyY1Nz>sj^It~6iu{=`W-yCasrU#KEN JejsQ?&OeO7%7_2} diff --git a/smart-admin-web/src/assets/images/login_desc_bg.png b/smart-admin-web/src/assets/images/login_desc_bg.png deleted file mode 100644 index 70d8d62f10871e3af7783c3c23b246f6e4ea24ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 272693 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%0AK3FI^M%_lJo#)O{!vCfw1OP75wP6Wjy`Z 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 P00000NkvXXu0mjfFM&Ni diff --git a/smart-admin-web/src/assets/images/login_logo.png b/smart-admin-web/src/assets/images/login_logo.png deleted file mode 100644 index 2955b838b1f804fca7a4f66b2f1e653e199c6491..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3523 zcmaJ^c{r4N8y?MAVzOinF@~lHvshy68Cx0IDvpXVGnkmAnaPl45QR9_ELlQA9Fc=) zQ>ej3DP&7R7*05{CE^>M(>dQCU*CIO@B3S>=f0o&d7k^9H_p+)W{2Cu4 zOOzYd5n@TD6Crxq`dWCTt{&uwp*B)qN7v9$6M{k@4d4g^I8sLosgKr0piwBu-w%|R zjZW}EJ7cW>&c!>KK>e6Z8X68~u~^zH9c?Pz7mhSEG=w8ia1=_57oo)nrZ90qS`>!r z4+ad8fv1ybOcIp>*e{c8BAy5zk2^CF~c>OMua;P8Ptn(Ja2G5synG@XiGW~$E4C-snmcUU3B!LGN}wd zDh*<3xzja6$f46D3W3UEsDH;`v1mIAgNdWyiFOzhD33*(L?WP3x){t6l%<}9fj$C> zv@$f*L!t~Vtr5BiD+>#Rp7jqbhKj#PCQ_I`u!MiH`ai|)*nv#rWyTQcq(CCUnocD{ zzL$+A{alOAPx=1F5`L~l_orAmPYir#xc@cmA6GmF?QH+CF7NP<`H2*sX8_CYVZl7b?VU|n8rW@ND?EN{0u?#8d` zu11!n>}d5Yvrgq?2cXUy608$+9M-9;ciIaLBj2e_cPNd=L(jh|zus(h%T`TVLkaS3 zj&gG?a3OG%HF|bF*}>zH?^O2i$Qonq+uXu>&>F}+!$M9%MYATmG_V_o_DR>q%`M|vPCZ@sS-I+)I~oaW*< z(!UoMY#myZlaY-j#&K#PGbfCr2A)d*9h*!%5B8Cc_G;GIcf^&J+lGuwXex=X6;KH9 z47jYEQy+k)fi8sr+T^R?&mIP|G7{(ctVH4f8n%!F0;;D9uob9JY@CsgpioKim1rMY{yOsw}ni z=^NE+3?EY4S`~@{h&ZL=N~+$*tV(mTlwO)N%omy+hh*G>**KiD0X)bcJ(U;fsP=V> zj;eqLG>^VyA3Odv@!P2sN#~1e?9BxzSfBy^A-I?C<;u~Ml6<(_62tQuBV56Z$`Ygz zQ?`KW;1TQ3)mZP1*&R)2(A8>5xiI-I(Uh3A|KfUm`C+JQ)jbPR$)1|b!2{c zhqBaammJ~NFNbLo8vSzZY1QNIx?Qq9-AeYh2wP3*gM}k0mtiIz{-a42_VQnI)+-Xj zRugP#;|z&er4v!TY7Wc2CL&>JbX}E^)dPa*(}OB~q&a~v6kEq`qyqLRt0Ao*phDk# zJ6Y(DQ^FrQ-b^hIy>>5SQ?iLo@Ot~pEVp>$CdhfwSvhW-GuBU1a<+y$%dhK_x2O%d zt314b`!u~R+zYx~?-nJcqawjTM$Jfr1}8a+G)<1cJki?RIL%7TCHlALK$VnnL9%00 zjM!0VFzJ`={lohm-9HqV8^mbNZFF*BAFE0^Aydd9IjMkZCrH42cFgpBcMjc@aIxy9 zd_~Tqo4MsmqCyH2$X5++8$w(Hb}M2wyA)etFEZ0|dFa_0wq<|Guj;B7&)PRB4Ia`y z+gJ#$1FzK14;f@9T_?f%&%N>VyOCa?7@3AX@%5pcJELDiA>g67>p+UZdPBpV&iqcP zj6H&CZZ`Js>8iAEZ9#m5;Z5*FM5gP~g7vCK=u>OH>P3Q(eB0CL=OPltF?O!Ox_>^c zah-}$nSSCQPi#mqr+ljr$~P9YFC_K%AF$~76U!fZR+%5a$Jy=aa?#$^iXNbZENuT^ zK$PI2%|XsgkL1Di^z2%d52{=KXim}rvhcl7BPs>ip^z(^m|%5I>ho|L&>MNaeybT` zy5?JT&GDi9KH6AdvhtdLcP_jgypC!-v;eb_=b7Vl5jgItPMxRZCdjN9FvE=dxBqX{(;NmX9v z@%_g`g|DZ2S@GOplWiVTJ+87WHe7G;;iPU)WM;-QWluNJ>%*x}pMR;Ho4#H@DYUgI zNP;|JK!x;56YgYL8tuOVnQU|KN$(0N6NtxbSKEhexI>~k;+M4KM2$& zHu~y~9ru(Ghx;zLA+%kW8S@{Pb6%pn1!jLwc{Jw24QZ@?p`q8$km+(3LAiG|6(dwX z3h&Jw{D{bUf9_%q72a|sJYX1Am_Aw5r+LmMvx#K|{6(w9&!wSNZ`-kB>Ct0xSR zS+66eTEZU+Sbdo+bsjjAzYg0!qx86}whJrcm3eJ`t)D%ilWXJ>v6;vmQB}^V8H>1K zMi@klv>r*FM&c7?0I?|P#X)hzmVr46M_2S;e~c(1HvL8lH>6izmc+PnH!V{=LXQkP z+*3jJnJJx=c^p{T<@mPz_@zu#z<>#~x!{<+Ad>#_SP6$6;x@B(&?xng_$ofai54I# zf2G<4wVLCJw0>Qg*=I<;*AprDwE_!!s5%*6WL9u_o;6sYI#CAM%xL4GH>Ex~=o7iNBu_v3JG`>BPAWAzoZn!?TkNp|{O z7*h~U8Ks45*|fjq;gN^GtS9tj8Y$H7%jXbi?s~H}-EL4(xhU=3rS%~nydrDKTo@$& zDd&doa%Ow}=M53s8!QmGw*WG{GCNS8jO(?9q=hHJme|$-#`@qK%`|?fx}r=pp~_vX z`8*g}lLcb*#ESZXvqB|>bn7Y=fVoA2+|Sy5tWLW8v`aK>v(m(&Y%~w_$D0JrtqPUf zFFJsSpjwR1Mfx^rNZUaeH`jU34<_dS!C*OOZ zmd_w>aFF1r_ZE(GTTj2(Wt?6yI-Z@LsOx0|VXLN${%P(NeJM@+-l z`uy9wS~Dv(QWU*M6}y$cZOX=|)vbKkI1#s2j@b_GIAms{=UBYiQ|(@VZ1~S2ic+#s zANNay{Qmx#&}Ij{2dkR=5Np#*S*;V>Y-i>#_>(7PiMXP+Q@x>$1u;(@VCtVAJu6 tGS=QCRUehO68+vJ$t3R!A4hkA0bAmd(nT|i(L29Yc2*9UyGOmE{sS_N8H`MrO$jAq0|eB!YiLSRct)Kw!Hv8Gn>@ z)WIG>q){{pTNur73Z2gu5HL0irxS=FBo^3@6iB9;Ko%dgLBM2x6NtO6gO&pwMG7KY zM>0q*k&bv`WC+pFA7W+-HV#Md1t=sI0US;Vr7{uWCXl~%5&ZquH4Fm&8^Q`Pf&3?_ zqYhXwipC&;bv5-gi0~uYV0}YPxSp1w_7Qckwia9;rlk*q>u6}f5n6f(9YgRx4}>3$ z;U9p&p)LQ3#Xp%qf>mzk7e{s|I5|>EqBWf6godLn#3TVAo*J|XcX|@ zWh2PH%>{1xTfKj{{=d&f>$hAOKN;B8aR1k^e_in%w6*=$y8Oex<|k44j%V<#ZJLxJ zC?FtCvq4+n!(Z?`L|J%u`BvK1zPR)>koCB9b`4Cp2wU^Q*5X*EtT>L6qJh7O%(B+6 z1aK{Cl7{!yf84}CqgZD(yTQtiv;O55`# zxo0~-b21C(7%&^)dr1-LQ?$!VM$57p1K8N_kS5cszT@A^K;NbILGqN1G2wN>^NR;k zm02CM`isywV%(E?dYdj6E%)-gT-2~{;U3XwKNNLNM_ER3JkUw}QG|MtTF--1RnfTX zURTdyd@zT*@xcVVkz~Zkz*M=-?GL3Qscj=wD!dX1yF3va3|j_=;MRT=BR^vbj1b9f!HE6r3v$ z#m!?-2|O3niycc5@YfOvnMn|1`GXSx8KBP(wXP#K(xUb}?55y0dV0}Ht@^rtaaP)2 za%@;I{mS^B4*^~Z#a`RIzbnm@257FN#Bl&TyZwozIwTwVBkr>|k|EK(L917{@wl$L zhai%fFiMf0*$6Q06z?u47a4w4G*CX&Eaf+=w@Zn%v)gfCqmOE_;Dq=00qNRMRlI#d zgJ-AapALhG*@#mUPl^yoA$-E1HmE%u!^bEBo*f6Zviw8tqWB9_iX!97FEC zvb`9Z`4Nb8)tNI<3O16@rs$q%I7XM_bP8|oOFSaCqd)4!oAl?8^De#w4mD_;-mfBb z-S~lqpEc0`XD0UWBn|Zr^-blEebn6EFP)FWKE{XL9`{^r<_6G^Z$v8Al>y4|NKE7=QEaw@&|2qm4&+j zD|+u1nySr)&YOy2C{CEvbgXK4wPOXSb?L9Q1ej(@PgC8MlGoX3LwDp>=Q}k#`=8|2 zC>$W-=45_a7zkXMU)j#};A%FGn1OJVH>L@4)crjZ7q;h8p}i-#LjXl(Ud%f2j#-jv z3jK+^v$05nZXOQ}KXHHA{AFjzxG2&-1}A**EG53FE@PGuWxTkob-r(0vh}Cv+;fY_ zoeB$vT)>a~GrA_+DZr{JH@_uR{=y*qlE)1M3M8RJNY-s*qA+6zo%5NFpbo`9Y5RUu zDcg7wx&VV=-@K}&BjPI5F$OQIl!cG2$r5JHW;$R+o)5a_Mox{ivZ5!M_Rdo#W?9;u zKN^$AAUweF-2-rf0=Zg>O884gmiV=Kcw^Fh18;#m(Wfutc1F=G;c)7ik6uWFxR0FJ zAf}dxS}#)dsf%8{1$zlo$JrwmUOUV~xzE&^M~3lPNvgBFT}0Z***0g*h-a zXXT#3Z5DdP)1EJfE`N7>rG8wHV2CQf$VoC(i07lB#ax z<)T#%%238z-_=Fc!Xd{}bp&DG(i2f!?(#I_PJRSZ(!lbG1=IYSaG#Bsi)55_feVm! z%JhNmv#b)g4uj2VLD8xAwkVv?t?9Zl+3zH@WEE6cp;!cHLDgvqdKLC`f$lW(`K~mp z`aIq^1VW4_b1!vCU{4aDQ$n`}I~jVNO5cf%8y;Z62Ayw`YRlf=s@r2Wg-d0&&E}?6 z2Bp6Jo}-vG{<0OE%@(jK!n&6jrV7;lwEp%)uWhlT#;0qs4m&zQ_f;ruU5&+?C2EU3 zx~9{2zaHK1xoRwzaHfgJZHhQwZN1(h`qX_d`~zUF@6CCxaTVOdpmngkbkC~Up<&78 zU7qbl@rv8F;cmu^<<~D!5~Oj_wl^pbOOmnbn0eFc$&5T-FX0FimnC4AdmToiF5?5> zeyi2{7mm@z4UWl$>7MOLpeq=g=@FzTdAZgzN91dKC#1qI5U;lPagE*?FKAdzRG4{l zhd7|3^k~O(Bgom{!18k@WH?nYaZ)2^31YMMqU z==Eh2`nfS5Nx`eH#2Uak-YOo)kK*K>0x~jH*?Q+;(J_m{;6ulFy|^cn_%toI2YU)8 zrFLKxKJEjlv6OV%ty3l3)9x&k<&O4FKQt-2&CUb(WjjH&pVJ|KZViB=dt^pk41v!a)+k^Pg@_JE0wbqdbk0vRShpt zUgOy5P1g#ppe+*9;-uXG#Hy1m=Wt%&tS@9>HpebWH1sU&pyqwgUHP;n_=N-0EFstfS3!`>;N zwtU`D$GR48VG;H5>uRA?=kuIk{!FGOdpooIxfTMocuzm##jg zIRHbFXV|3S=mqnY0}Z>MeJSS#uS=<Y?Oeh6l%8BuEBa)-;$cvR) zy*E;19#3iPo*IPA79@2MOwMlBCaEwfG>3~=}&4U8iH|^-l4gpW>4rqbnhM?FiSqyf4weC0gv1ip6I)RSDMyoH<(g z=d@+n3*kTmk$VPGsP4_{4p}^7WJjd@E#UsKXTcgSr>FO{R5{1?s74nDUQoII_QZ7r z6%8GV-2Z-kST={V?}LV#^GL)#`Qc!p5jD`~{D%A6y31rmw4pb=3R0w*vwy6sn*%?x zyCOotKA0Br-Cez+VawtXF?WB0l2a$l|IARm!VC3piN>h+MzzHR+MAc@Zxb6_ZrqVB zrSg2L{AT^~`{AZf8~8?c$cCuiJ$Bb;!KS-&;iZpPJ{6D{rxUHs@}M8?bOLV7bHLm8 zYPu4|v9TUbnoJH_^2+5MdAmAUmPgYBH-QW6V{qpOtlE25M zUiNF2{*W9P@nqA57ecIpo?ZVs%)Hi^eO5i~*_7m0vxGHC^mHdK^agP<`O|0?WMfkR vFs8(ACgxNx+umreHwAuys5Pwm2ucXVl&y6}TYvo&*M6hl6O5(_0f;?=9|j<)Tv|Bb4bT`dJDUL;2n70y z?HdRNdTb)m`CKe*0fQBD1#&h7VzW^!pwS}%5E%x9vw39HX#F)5lFcBa0?a+|9s);z z#dh5-1blXT`qFnt(uoYzMq8wfm?RhA0w4`3=5lxGMFm!^MInt7dC0Ll65sAh~6Fk8RhquBJOfdutk{O<4VuJi~q2$(t z3?|8&;{3&y{6t2vKu|!!;i99XvC*bjzAzj|AQFi-(-2BFKLn|3@4@ua0D!VA*9bh2K^gO5GCY% zHqM~q01m(fc%Vp*C49rmv*h9N4gRmPT<$lt2=oU2j_qI3BHtJRfb#}K{3sz^USy`h zf?EQTqY$8he4#I&&-t41%`8617qR#Pq@&|PhKWdY0Gr3)M~l||g9A`#AV5Yfe8=D| zF{XH50-l67ClRbR;H^k_{9jNHK7-AS`Cq6x$=rg3xBM@ty!;FrNc+EF2A#y@3%N9T z4cH4Eixcp|KU?$gAW?ZDkjA3}R0_V&(1M~Z_9(V0MSBFYaGq6yKQ zLLu0jni45rxfDJq7+E04)j(d}_j#<8EOnT^;*e=HhPtWd~JSk|!4ZrNGQv8vdPqwbTBA=2E0Qix8W zUIy$VY#MgF)*qyQ#?IEj>C06i2x}A`htlQi% zKF_if<{rC0uXtt-f^WYao|uGFV%>Uf0O^6lRmbz*G)nGToBH?%7Ar?x?7R|dG0DFh zRi0uC(=hPPDX5k0NWi#yLw3Kr1A%tvoJ_NJ-v#D@kCf)dH}!CPG9Vt+-K8S5EaC<2 zQu4a{(0l5px0?r6-j36+24gZOYB?jN7on21+>lKLb4U%n(Q$Ig_RI?YYVhbnkZ9VJF1vG^eaNZFPd86s~bO^_l7+_4Li;SH-qv z<>^~q@*lZQjhqLAj@=!M^fg?R=%vUp^1@_aPD|{Vu^Yqu^ekI}@7*)h*PP6>wR$&l z?|?+-mp5p3C8tlJ-X1l4BK7($ zDM0Ph4>bqR2W9ySSCZ#8N#`i_@0$);EgeH>hUC3!?Fiu=(*rPZ%=JHGA2=rYHTmer zcZ>4Z@0qYJdHh(x)-NMgS2K8soq1CoQa9x)BZ$Ufq3hEZwWxblvMX8S3`~2gPROU$ zQwFp927ORJs1BPM2&`lii1xu|C}-D`o7eOFT-1Z}V1eYTOA5@fu%xq8beM97^Sw4~ z?V56{RYrBIjd}i3t-8ycU0M&fzI5qDi}!mNh!8r1`dYL7S>epam)ajvYHua!Wsql4 zFQStuV}yi&(C9pc=8KRDqb$0bWJQ~bkM{jvb-O}-%>D&aE$C4(U1sE3Sr0?+4O26* zcvPPXA6ZETd1_L7MV0d}DV@aE5`9vSNLBMEsb`e(37eNa@Hc6;2PbD#AEZyYUZ1gA zfhNZ_**`#MTT6QS5oDh@_-{d15v}ej4fgP=y;_^8c`sB(ja{$qQ|$b(Jf$UHXQReP zO*?CANqtX!2AE#77r_}QJaKh%|AlR&@S%#$zv?H78&J@su5AV$dzmKc1W#mv!T_hI zT$9M@EjzqiNEjUf^og!RH$P=%1w`pquXY&fQiioDP>a}<=^V|vlF3=>+my&pA47JL zO|{ChZw_%!3?>CSf%y%d$Z2uInk>SS<=RF~X)?n%*Y-Mda|a4`Kr9u1D-ONrNQ%Ec z5NPP2k2hvV;WRhelRERl8xYM!C5d2>{&tqP;i2L?-UsK5N_ALes!T>&Uglb+hIE=@ zonMz<<~5uW$=SnPV+?4-8_g7EruH|+gE=*oNN?LxgwlwnCG?PDv$XdeJ4Y>+y3@n* ziFrZU)Vaa?)FIDa4e@by$sX43CClE;G^PKjoZ;=(IWnZ}W~cdVKe{&3T$jH*!Umo@ zr%8uy2(_Ciu@BB}?JCPrjayfuc4J~d!HqC^X$bp#E9TY6VhwG!W6rvx?y@Zvu@pw0 zYJgWj_SHOY>BQXe)lF857b6vG(Bos8^&v~U{VG4~s6A&|T3&VOa^D}3!~Vzplf%f3 zzAMol!4*|zr$=GeTV>BS zWl8EqCHfzpI!wr#wDy=79cjN%p|!OyvqiGMMS6VonufQ*4UeB)fA{K!AGis)HsGje zqSJAsv2_y+uPiWE&4{=aC8gn4R^bP;I%jQ1DhQdmt`Db`3$0y{{;aKStxE@(QNwK+ zcbAS7+ei-H!l7d>8)Mk+d)`!|klGS0NmWmML|x&PqSCU5`F+Lc`oq;mlCJkg%2H>; zc%7>CcJD>L`lY{nwlu~niu)3tJzN*ZE>#XX;1t{2oxZd>3++GqI`}_cCId<(7G`cY zbyJRmy5jMY)axslRa+C3rH%D2r54F%T07iBOei|mhv#8>hcECYm&;Eg%*T_VwL4bC z%tRS(>xsCsN-|V6o}(Frjnks%2B@2$_L)uQW7$mGD-Wp?@HRYI;Y8q6nT5D-#vv7Z zW@i^hD@)dPvW|Tq)g4N)I#^QFR^w|+K9z#iZOKlCL{r%f!IL#Tb6ny)cDTjne&|)b z0G~?b#AF5C6^qMSibee4=2F^eJj&9(E6h7z8OlgTtG=i@D2@4v<1;&~f5n_xkOvETAgbqyq z)Ea+6Ks1=Bkzh>xSy<3St=dj06v6_HxG=#eQPBmUArX)+OwffQ5P!O$fAfytInycA z>HNL-X4;wQNt!o(_nvdl_q}`XyZ7Aln93~D(Xp7^kyYf#qn9ELJ>1)i9ur&w6CmyFSCTun z2~T<>fL|5drNS0K#NX%-9uqg8;t5dy}Qt01-!s>Y}`B*Kb~}dnQ2I)~_JfJ%H|hjn~G? zSs%mVFLInU+`k886faKkRWT*EuInT>@l~aPR}AKp`ldd5kfM5k?B5@vgP*=7C`f>T|NN5!nDibjWUP|PF)4mV4?Mi45DA5cfIj&u1FsLl ze1`9Z9!lOGpyLTM{l|rjRB}1q5RdY%eZ9GS%t=6Uw$}-d>T)Sp!+ii8BPVoEuD3&0 z0_;66<3}rTw)aE2y&^esd$x7Lj5)woc)G}`u=l(l;3=IX7G1bu^_n3w2+-wirL6EW zd=2!kVbZ00hD>85xv?1;LghJG+h_Pz@_%jb;M6Zo-#|_80oc{mDtKknu<6b=d1Y14d|)t|PNjx^kmiYHv|0SIQ)I(TK;FeU>xM*L+05XqULe$`Zz!Tb$WjSF9GdL~+=vBmFQc2vFNKb;hxeq zw5^iZ#%Yz4JgzE%x%$Ri*`a6gq8-Bo^)g-j;}mZR7uH3v254D7R2r99ShEsfHfSaQUyn=yY$65hxI1E;;TA+gv^ z#1lK=+r2QXrUodqU@IoVKh=&KTZenW1Y{n=TR;ygODFu%-gB_lCLJ3-;6&nG1Hcm} zFf4XZc;WWc5;Rwfwj@tndWB?SBXlEh@+S&~p5eaT-{;cte_s}1A%s)fGKe|6q^TKC z?@5q6jA8K{&JNF@$8E^foRw)ESGK4QJI+(+?#<-^uU>E?OKjaJ`cmMqS851k1BVFH z)kNd3q3m%yRR>S?I|}2e_U=BR^`$+!9E+QGP<9u}T-^GQDDomAI2W}%o0Mb-AY3*p z1f&2YkIh{S3%Ub612KE&eN4iPed-f<2qA#~VY0jbn9|90EfoP_yuXIw0G?3!MbG!~ zl<(w@^=*`p*D-zgkxed;AMr~^wSVP1!%Y6KAn9&o^ z|1~J;y2pGNsah56Gn#c_W&{`su@((z%!|k{4o6P$z}{twJ2eFKcg`dNEvzw_!g`qi zO+VEP%o>-;qp_Y8%qapaP@(CkwJyMz9+a6Pz;J8st)`#Ws3eca>$=n7O(Ve0%{BM7 zRt4A$V;a7xw?OJ1_UlY-E#D$&u_AS^7Or^uN2q`A%FKAfv>u>9lNFG7thu)}B1tU3 zlqJ|Qg8(Bzv#vGqSX0cZTnvL^$&pE(l>j3_v#wbqx>YW~kSj+}k>w;n3pK;i5|8zt zDirlSUzVss%1eM@)~styJgzb^pW%BUw+j+r+18qMttseLBIaumnc@m(#%nMiM*A2+ z=)F=Lq~vSIZ<$SaI_C2vM`zmhM1U&K>rZBs0Gm-Y@z_38(mQi6=8O8|@p~cl+;a~| z!L=3ReEn=LMS@=E?T3@;Bp4C%_0!o*B8-gr`0;c$B8-d*|9t*`_bAxG$c=#f00000 LNkvXXu0mjfRjz|) diff --git a/smart-admin-web/src/assets/images/shadow.png b/smart-admin-web/src/assets/images/shadow.png deleted file mode 100644 index 79cc097fd05bf5f241324a963c3d21cb62aee884..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224307 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ð#!yPL3NxhH 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⋘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 z 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

Vgn8s3BxJttwP!+0+JWPIHiMQ2?i?r?ll#HSd3D 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 F{{SzO*Q5Xd diff --git a/smart-admin-web/src/assets/images/slider/sub_slider_default.png b/smart-admin-web/src/assets/images/slider/sub_slider_default.png deleted file mode 100644 index 67a4f2794e26b2e082f282b6209dd3208365cfca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3105 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 MHZZ?drRNg&AN+^vQ~&?~ diff --git a/smart-admin-web/src/assets/style/lib/animate.css b/smart-admin-web/src/assets/style/lib/animate.css deleted file mode 100644 index 6c72f594..00000000 --- a/smart-admin-web/src/assets/style/lib/animate.css +++ /dev/null @@ -1,3625 +0,0 @@ -@charset "UTF-8"; - -/*! - * animate.css -https://daneden.github.io/animate.css/ - * Version - 3.7.2 - * Licensed under the MIT license - http://opensource.org/licenses/MIT - * - * Copyright (c) 2019 Daniel Eden - */ - -@-webkit-keyframes bounce { - from, - 20%, - 53%, - 80%, - to { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - 40%, - 43% { - -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); - animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); - -webkit-transform: translate3d(0, -30px, 0); - transform: translate3d(0, -30px, 0); - } - - 70% { - -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); - animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); - -webkit-transform: translate3d(0, -15px, 0); - transform: translate3d(0, -15px, 0); - } - - 90% { - -webkit-transform: translate3d(0, -4px, 0); - transform: translate3d(0, -4px, 0); - } -} - -@keyframes bounce { - from, - 20%, - 53%, - 80%, - to { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - 40%, - 43% { - -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); - animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); - -webkit-transform: translate3d(0, -30px, 0); - transform: translate3d(0, -30px, 0); - } - - 70% { - -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); - animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); - -webkit-transform: translate3d(0, -15px, 0); - transform: translate3d(0, -15px, 0); - } - - 90% { - -webkit-transform: translate3d(0, -4px, 0); - transform: translate3d(0, -4px, 0); - } -} - -.bounce { - -webkit-animation-name: bounce; - animation-name: bounce; - -webkit-transform-origin: center bottom; - transform-origin: center bottom; -} - -@-webkit-keyframes flash { - from, - 50%, - to { - opacity: 1; - } - - 25%, - 75% { - opacity: 0; - } -} - -@keyframes flash { - from, - 50%, - to { - opacity: 1; - } - - 25%, - 75% { - opacity: 0; - } -} - -.flash { - -webkit-animation-name: flash; - animation-name: flash; -} - -/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ - -@-webkit-keyframes pulse { - from { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } - - 50% { - -webkit-transform: scale3d(1.05, 1.05, 1.05); - transform: scale3d(1.05, 1.05, 1.05); - } - - to { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } -} - -@keyframes pulse { - from { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } - - 50% { - -webkit-transform: scale3d(1.05, 1.05, 1.05); - transform: scale3d(1.05, 1.05, 1.05); - } - - to { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } -} - -.pulse { - -webkit-animation-name: pulse; - animation-name: pulse; -} - -@-webkit-keyframes rubberBand { - from { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } - - 30% { - -webkit-transform: scale3d(1.25, 0.75, 1); - transform: scale3d(1.25, 0.75, 1); - } - - 40% { - -webkit-transform: scale3d(0.75, 1.25, 1); - transform: scale3d(0.75, 1.25, 1); - } - - 50% { - -webkit-transform: scale3d(1.15, 0.85, 1); - transform: scale3d(1.15, 0.85, 1); - } - - 65% { - -webkit-transform: scale3d(0.95, 1.05, 1); - transform: scale3d(0.95, 1.05, 1); - } - - 75% { - -webkit-transform: scale3d(1.05, 0.95, 1); - transform: scale3d(1.05, 0.95, 1); - } - - to { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } -} - -@keyframes rubberBand { - from { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } - - 30% { - -webkit-transform: scale3d(1.25, 0.75, 1); - transform: scale3d(1.25, 0.75, 1); - } - - 40% { - -webkit-transform: scale3d(0.75, 1.25, 1); - transform: scale3d(0.75, 1.25, 1); - } - - 50% { - -webkit-transform: scale3d(1.15, 0.85, 1); - transform: scale3d(1.15, 0.85, 1); - } - - 65% { - -webkit-transform: scale3d(0.95, 1.05, 1); - transform: scale3d(0.95, 1.05, 1); - } - - 75% { - -webkit-transform: scale3d(1.05, 0.95, 1); - transform: scale3d(1.05, 0.95, 1); - } - - to { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } -} - -.rubberBand { - -webkit-animation-name: rubberBand; - animation-name: rubberBand; -} - -@-webkit-keyframes shake { - from, - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - 10%, - 30%, - 50%, - 70%, - 90% { - -webkit-transform: translate3d(-10px, 0, 0); - transform: translate3d(-10px, 0, 0); - } - - 20%, - 40%, - 60%, - 80% { - -webkit-transform: translate3d(10px, 0, 0); - transform: translate3d(10px, 0, 0); - } -} - -@keyframes shake { - from, - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - 10%, - 30%, - 50%, - 70%, - 90% { - -webkit-transform: translate3d(-10px, 0, 0); - transform: translate3d(-10px, 0, 0); - } - - 20%, - 40%, - 60%, - 80% { - -webkit-transform: translate3d(10px, 0, 0); - transform: translate3d(10px, 0, 0); - } -} - -.shake { - -webkit-animation-name: shake; - animation-name: shake; -} - -@-webkit-keyframes headShake { - 0% { - -webkit-transform: translateX(0); - transform: translateX(0); - } - - 6.5% { - -webkit-transform: translateX(-6px) rotateY(-9deg); - transform: translateX(-6px) rotateY(-9deg); - } - - 18.5% { - -webkit-transform: translateX(5px) rotateY(7deg); - transform: translateX(5px) rotateY(7deg); - } - - 31.5% { - -webkit-transform: translateX(-3px) rotateY(-5deg); - transform: translateX(-3px) rotateY(-5deg); - } - - 43.5% { - -webkit-transform: translateX(2px) rotateY(3deg); - transform: translateX(2px) rotateY(3deg); - } - - 50% { - -webkit-transform: translateX(0); - transform: translateX(0); - } -} - -@keyframes headShake { - 0% { - -webkit-transform: translateX(0); - transform: translateX(0); - } - - 6.5% { - -webkit-transform: translateX(-6px) rotateY(-9deg); - transform: translateX(-6px) rotateY(-9deg); - } - - 18.5% { - -webkit-transform: translateX(5px) rotateY(7deg); - transform: translateX(5px) rotateY(7deg); - } - - 31.5% { - -webkit-transform: translateX(-3px) rotateY(-5deg); - transform: translateX(-3px) rotateY(-5deg); - } - - 43.5% { - -webkit-transform: translateX(2px) rotateY(3deg); - transform: translateX(2px) rotateY(3deg); - } - - 50% { - -webkit-transform: translateX(0); - transform: translateX(0); - } -} - -.headShake { - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - -webkit-animation-name: headShake; - animation-name: headShake; -} - -@-webkit-keyframes swing { - 20% { - -webkit-transform: rotate3d(0, 0, 1, 15deg); - transform: rotate3d(0, 0, 1, 15deg); - } - - 40% { - -webkit-transform: rotate3d(0, 0, 1, -10deg); - transform: rotate3d(0, 0, 1, -10deg); - } - - 60% { - -webkit-transform: rotate3d(0, 0, 1, 5deg); - transform: rotate3d(0, 0, 1, 5deg); - } - - 80% { - -webkit-transform: rotate3d(0, 0, 1, -5deg); - transform: rotate3d(0, 0, 1, -5deg); - } - - to { - -webkit-transform: rotate3d(0, 0, 1, 0deg); - transform: rotate3d(0, 0, 1, 0deg); - } -} - -@keyframes swing { - 20% { - -webkit-transform: rotate3d(0, 0, 1, 15deg); - transform: rotate3d(0, 0, 1, 15deg); - } - - 40% { - -webkit-transform: rotate3d(0, 0, 1, -10deg); - transform: rotate3d(0, 0, 1, -10deg); - } - - 60% { - -webkit-transform: rotate3d(0, 0, 1, 5deg); - transform: rotate3d(0, 0, 1, 5deg); - } - - 80% { - -webkit-transform: rotate3d(0, 0, 1, -5deg); - transform: rotate3d(0, 0, 1, -5deg); - } - - to { - -webkit-transform: rotate3d(0, 0, 1, 0deg); - transform: rotate3d(0, 0, 1, 0deg); - } -} - -.swing { - -webkit-transform-origin: top center; - transform-origin: top center; - -webkit-animation-name: swing; - animation-name: swing; -} - -@-webkit-keyframes tada { - from { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } - - 10%, - 20% { - -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); - transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); - } - - 30%, - 50%, - 70%, - 90% { - -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); - transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); - } - - 40%, - 60%, - 80% { - -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); - transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); - } - - to { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } -} - -@keyframes tada { - from { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } - - 10%, - 20% { - -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); - transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); - } - - 30%, - 50%, - 70%, - 90% { - -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); - transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); - } - - 40%, - 60%, - 80% { - -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); - transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); - } - - to { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } -} - -.tada { - -webkit-animation-name: tada; - animation-name: tada; -} - -/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ - -@-webkit-keyframes wobble { - from { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - 15% { - -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); - transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); - } - - 30% { - -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); - transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); - } - - 45% { - -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); - transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); - } - - 60% { - -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); - transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); - } - - 75% { - -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); - transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); - } - - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@keyframes wobble { - from { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - 15% { - -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); - transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); - } - - 30% { - -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); - transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); - } - - 45% { - -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); - transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); - } - - 60% { - -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); - transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); - } - - 75% { - -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); - transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); - } - - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -.wobble { - -webkit-animation-name: wobble; - animation-name: wobble; -} - -@-webkit-keyframes jello { - from, - 11.1%, - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - 22.2% { - -webkit-transform: skewX(-12.5deg) skewY(-12.5deg); - transform: skewX(-12.5deg) skewY(-12.5deg); - } - - 33.3% { - -webkit-transform: skewX(6.25deg) skewY(6.25deg); - transform: skewX(6.25deg) skewY(6.25deg); - } - - 44.4% { - -webkit-transform: skewX(-3.125deg) skewY(-3.125deg); - transform: skewX(-3.125deg) skewY(-3.125deg); - } - - 55.5% { - -webkit-transform: skewX(1.5625deg) skewY(1.5625deg); - transform: skewX(1.5625deg) skewY(1.5625deg); - } - - 66.6% { - -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg); - transform: skewX(-0.78125deg) skewY(-0.78125deg); - } - - 77.7% { - -webkit-transform: skewX(0.390625deg) skewY(0.390625deg); - transform: skewX(0.390625deg) skewY(0.390625deg); - } - - 88.8% { - -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg); - transform: skewX(-0.1953125deg) skewY(-0.1953125deg); - } -} - -@keyframes jello { - from, - 11.1%, - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - 22.2% { - -webkit-transform: skewX(-12.5deg) skewY(-12.5deg); - transform: skewX(-12.5deg) skewY(-12.5deg); - } - - 33.3% { - -webkit-transform: skewX(6.25deg) skewY(6.25deg); - transform: skewX(6.25deg) skewY(6.25deg); - } - - 44.4% { - -webkit-transform: skewX(-3.125deg) skewY(-3.125deg); - transform: skewX(-3.125deg) skewY(-3.125deg); - } - - 55.5% { - -webkit-transform: skewX(1.5625deg) skewY(1.5625deg); - transform: skewX(1.5625deg) skewY(1.5625deg); - } - - 66.6% { - -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg); - transform: skewX(-0.78125deg) skewY(-0.78125deg); - } - - 77.7% { - -webkit-transform: skewX(0.390625deg) skewY(0.390625deg); - transform: skewX(0.390625deg) skewY(0.390625deg); - } - - 88.8% { - -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg); - transform: skewX(-0.1953125deg) skewY(-0.1953125deg); - } -} - -.jello { - -webkit-animation-name: jello; - animation-name: jello; - -webkit-transform-origin: center; - transform-origin: center; -} - -@-webkit-keyframes heartBeat { - 0% { - -webkit-transform: scale(1); - transform: scale(1); - } - - 14% { - -webkit-transform: scale(1.3); - transform: scale(1.3); - } - - 28% { - -webkit-transform: scale(1); - transform: scale(1); - } - - 42% { - -webkit-transform: scale(1.3); - transform: scale(1.3); - } - - 70% { - -webkit-transform: scale(1); - transform: scale(1); - } -} - -@keyframes heartBeat { - 0% { - -webkit-transform: scale(1); - transform: scale(1); - } - - 14% { - -webkit-transform: scale(1.3); - transform: scale(1.3); - } - - 28% { - -webkit-transform: scale(1); - transform: scale(1); - } - - 42% { - -webkit-transform: scale(1.3); - transform: scale(1.3); - } - - 70% { - -webkit-transform: scale(1); - transform: scale(1); - } -} - -.heartBeat { - -webkit-animation-name: heartBeat; - animation-name: heartBeat; - -webkit-animation-duration: 1.3s; - animation-duration: 1.3s; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; -} - -@-webkit-keyframes bounceIn { - from, - 20%, - 40%, - 60%, - 80%, - to { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - } - - 0% { - opacity: 0; - -webkit-transform: scale3d(0.3, 0.3, 0.3); - transform: scale3d(0.3, 0.3, 0.3); - } - - 20% { - -webkit-transform: scale3d(1.1, 1.1, 1.1); - transform: scale3d(1.1, 1.1, 1.1); - } - - 40% { - -webkit-transform: scale3d(0.9, 0.9, 0.9); - transform: scale3d(0.9, 0.9, 0.9); - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(1.03, 1.03, 1.03); - transform: scale3d(1.03, 1.03, 1.03); - } - - 80% { - -webkit-transform: scale3d(0.97, 0.97, 0.97); - transform: scale3d(0.97, 0.97, 0.97); - } - - to { - opacity: 1; - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } -} - -@keyframes bounceIn { - from, - 20%, - 40%, - 60%, - 80%, - to { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - } - - 0% { - opacity: 0; - -webkit-transform: scale3d(0.3, 0.3, 0.3); - transform: scale3d(0.3, 0.3, 0.3); - } - - 20% { - -webkit-transform: scale3d(1.1, 1.1, 1.1); - transform: scale3d(1.1, 1.1, 1.1); - } - - 40% { - -webkit-transform: scale3d(0.9, 0.9, 0.9); - transform: scale3d(0.9, 0.9, 0.9); - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(1.03, 1.03, 1.03); - transform: scale3d(1.03, 1.03, 1.03); - } - - 80% { - -webkit-transform: scale3d(0.97, 0.97, 0.97); - transform: scale3d(0.97, 0.97, 0.97); - } - - to { - opacity: 1; - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } -} - -.bounceIn { - -webkit-animation-duration: 0.75s; - animation-duration: 0.75s; - -webkit-animation-name: bounceIn; - animation-name: bounceIn; -} - -@-webkit-keyframes bounceInDown { - from, - 60%, - 75%, - 90%, - to { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - } - - 0% { - opacity: 0; - -webkit-transform: translate3d(0, -3000px, 0); - transform: translate3d(0, -3000px, 0); - } - - 60% { - opacity: 1; - -webkit-transform: translate3d(0, 25px, 0); - transform: translate3d(0, 25px, 0); - } - - 75% { - -webkit-transform: translate3d(0, -10px, 0); - transform: translate3d(0, -10px, 0); - } - - 90% { - -webkit-transform: translate3d(0, 5px, 0); - transform: translate3d(0, 5px, 0); - } - - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@keyframes bounceInDown { - from, - 60%, - 75%, - 90%, - to { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - } - - 0% { - opacity: 0; - -webkit-transform: translate3d(0, -3000px, 0); - transform: translate3d(0, -3000px, 0); - } - - 60% { - opacity: 1; - -webkit-transform: translate3d(0, 25px, 0); - transform: translate3d(0, 25px, 0); - } - - 75% { - -webkit-transform: translate3d(0, -10px, 0); - transform: translate3d(0, -10px, 0); - } - - 90% { - -webkit-transform: translate3d(0, 5px, 0); - transform: translate3d(0, 5px, 0); - } - - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -.bounceInDown { - -webkit-animation-name: bounceInDown; - animation-name: bounceInDown; -} - -@-webkit-keyframes bounceInLeft { - from, - 60%, - 75%, - 90%, - to { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - } - - 0% { - opacity: 0; - -webkit-transform: translate3d(-3000px, 0, 0); - transform: translate3d(-3000px, 0, 0); - } - - 60% { - opacity: 1; - -webkit-transform: translate3d(25px, 0, 0); - transform: translate3d(25px, 0, 0); - } - - 75% { - -webkit-transform: translate3d(-10px, 0, 0); - transform: translate3d(-10px, 0, 0); - } - - 90% { - -webkit-transform: translate3d(5px, 0, 0); - transform: translate3d(5px, 0, 0); - } - - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@keyframes bounceInLeft { - from, - 60%, - 75%, - 90%, - to { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - } - - 0% { - opacity: 0; - -webkit-transform: translate3d(-3000px, 0, 0); - transform: translate3d(-3000px, 0, 0); - } - - 60% { - opacity: 1; - -webkit-transform: translate3d(25px, 0, 0); - transform: translate3d(25px, 0, 0); - } - - 75% { - -webkit-transform: translate3d(-10px, 0, 0); - transform: translate3d(-10px, 0, 0); - } - - 90% { - -webkit-transform: translate3d(5px, 0, 0); - transform: translate3d(5px, 0, 0); - } - - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -.bounceInLeft { - -webkit-animation-name: bounceInLeft; - animation-name: bounceInLeft; -} - -@-webkit-keyframes bounceInRight { - from, - 60%, - 75%, - 90%, - to { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - } - - from { - opacity: 0; - -webkit-transform: translate3d(3000px, 0, 0); - transform: translate3d(3000px, 0, 0); - } - - 60% { - opacity: 1; - -webkit-transform: translate3d(-25px, 0, 0); - transform: translate3d(-25px, 0, 0); - } - - 75% { - -webkit-transform: translate3d(10px, 0, 0); - transform: translate3d(10px, 0, 0); - } - - 90% { - -webkit-transform: translate3d(-5px, 0, 0); - transform: translate3d(-5px, 0, 0); - } - - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@keyframes bounceInRight { - from, - 60%, - 75%, - 90%, - to { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - } - - from { - opacity: 0; - -webkit-transform: translate3d(3000px, 0, 0); - transform: translate3d(3000px, 0, 0); - } - - 60% { - opacity: 1; - -webkit-transform: translate3d(-25px, 0, 0); - transform: translate3d(-25px, 0, 0); - } - - 75% { - -webkit-transform: translate3d(10px, 0, 0); - transform: translate3d(10px, 0, 0); - } - - 90% { - -webkit-transform: translate3d(-5px, 0, 0); - transform: translate3d(-5px, 0, 0); - } - - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -.bounceInRight { - -webkit-animation-name: bounceInRight; - animation-name: bounceInRight; -} - -@-webkit-keyframes bounceInUp { - from, - 60%, - 75%, - 90%, - to { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - } - - from { - opacity: 0; - -webkit-transform: translate3d(0, 3000px, 0); - transform: translate3d(0, 3000px, 0); - } - - 60% { - opacity: 1; - -webkit-transform: translate3d(0, -20px, 0); - transform: translate3d(0, -20px, 0); - } - - 75% { - -webkit-transform: translate3d(0, 10px, 0); - transform: translate3d(0, 10px, 0); - } - - 90% { - -webkit-transform: translate3d(0, -5px, 0); - transform: translate3d(0, -5px, 0); - } - - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@keyframes bounceInUp { - from, - 60%, - 75%, - 90%, - to { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - } - - from { - opacity: 0; - -webkit-transform: translate3d(0, 3000px, 0); - transform: translate3d(0, 3000px, 0); - } - - 60% { - opacity: 1; - -webkit-transform: translate3d(0, -20px, 0); - transform: translate3d(0, -20px, 0); - } - - 75% { - -webkit-transform: translate3d(0, 10px, 0); - transform: translate3d(0, 10px, 0); - } - - 90% { - -webkit-transform: translate3d(0, -5px, 0); - transform: translate3d(0, -5px, 0); - } - - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -.bounceInUp { - -webkit-animation-name: bounceInUp; - animation-name: bounceInUp; -} - -@-webkit-keyframes bounceOut { - 20% { - -webkit-transform: scale3d(0.9, 0.9, 0.9); - transform: scale3d(0.9, 0.9, 0.9); - } - - 50%, - 55% { - opacity: 1; - -webkit-transform: scale3d(1.1, 1.1, 1.1); - transform: scale3d(1.1, 1.1, 1.1); - } - - to { - opacity: 0; - -webkit-transform: scale3d(0.3, 0.3, 0.3); - transform: scale3d(0.3, 0.3, 0.3); - } -} - -@keyframes bounceOut { - 20% { - -webkit-transform: scale3d(0.9, 0.9, 0.9); - transform: scale3d(0.9, 0.9, 0.9); - } - - 50%, - 55% { - opacity: 1; - -webkit-transform: scale3d(1.1, 1.1, 1.1); - transform: scale3d(1.1, 1.1, 1.1); - } - - to { - opacity: 0; - -webkit-transform: scale3d(0.3, 0.3, 0.3); - transform: scale3d(0.3, 0.3, 0.3); - } -} - -.bounceOut { - -webkit-animation-duration: 0.75s; - animation-duration: 0.75s; - -webkit-animation-name: bounceOut; - animation-name: bounceOut; -} - -@-webkit-keyframes bounceOutDown { - 20% { - -webkit-transform: translate3d(0, 10px, 0); - transform: translate3d(0, 10px, 0); - } - - 40%, - 45% { - opacity: 1; - -webkit-transform: translate3d(0, -20px, 0); - transform: translate3d(0, -20px, 0); - } - - to { - opacity: 0; - -webkit-transform: translate3d(0, 2000px, 0); - transform: translate3d(0, 2000px, 0); - } -} - -@keyframes bounceOutDown { - 20% { - -webkit-transform: translate3d(0, 10px, 0); - transform: translate3d(0, 10px, 0); - } - - 40%, - 45% { - opacity: 1; - -webkit-transform: translate3d(0, -20px, 0); - transform: translate3d(0, -20px, 0); - } - - to { - opacity: 0; - -webkit-transform: translate3d(0, 2000px, 0); - transform: translate3d(0, 2000px, 0); - } -} - -.bounceOutDown { - -webkit-animation-name: bounceOutDown; - animation-name: bounceOutDown; -} - -@-webkit-keyframes bounceOutLeft { - 20% { - opacity: 1; - -webkit-transform: translate3d(20px, 0, 0); - transform: translate3d(20px, 0, 0); - } - - to { - opacity: 0; - -webkit-transform: translate3d(-2000px, 0, 0); - transform: translate3d(-2000px, 0, 0); - } -} - -@keyframes bounceOutLeft { - 20% { - opacity: 1; - -webkit-transform: translate3d(20px, 0, 0); - transform: translate3d(20px, 0, 0); - } - - to { - opacity: 0; - -webkit-transform: translate3d(-2000px, 0, 0); - transform: translate3d(-2000px, 0, 0); - } -} - -.bounceOutLeft { - -webkit-animation-name: bounceOutLeft; - animation-name: bounceOutLeft; -} - -@-webkit-keyframes bounceOutRight { - 20% { - opacity: 1; - -webkit-transform: translate3d(-20px, 0, 0); - transform: translate3d(-20px, 0, 0); - } - - to { - opacity: 0; - -webkit-transform: translate3d(2000px, 0, 0); - transform: translate3d(2000px, 0, 0); - } -} - -@keyframes bounceOutRight { - 20% { - opacity: 1; - -webkit-transform: translate3d(-20px, 0, 0); - transform: translate3d(-20px, 0, 0); - } - - to { - opacity: 0; - -webkit-transform: translate3d(2000px, 0, 0); - transform: translate3d(2000px, 0, 0); - } -} - -.bounceOutRight { - -webkit-animation-name: bounceOutRight; - animation-name: bounceOutRight; -} - -@-webkit-keyframes bounceOutUp { - 20% { - -webkit-transform: translate3d(0, -10px, 0); - transform: translate3d(0, -10px, 0); - } - - 40%, - 45% { - opacity: 1; - -webkit-transform: translate3d(0, 20px, 0); - transform: translate3d(0, 20px, 0); - } - - to { - opacity: 0; - -webkit-transform: translate3d(0, -2000px, 0); - transform: translate3d(0, -2000px, 0); - } -} - -@keyframes bounceOutUp { - 20% { - -webkit-transform: translate3d(0, -10px, 0); - transform: translate3d(0, -10px, 0); - } - - 40%, - 45% { - opacity: 1; - -webkit-transform: translate3d(0, 20px, 0); - transform: translate3d(0, 20px, 0); - } - - to { - opacity: 0; - -webkit-transform: translate3d(0, -2000px, 0); - transform: translate3d(0, -2000px, 0); - } -} - -.bounceOutUp { - -webkit-animation-name: bounceOutUp; - animation-name: bounceOutUp; -} - -@-webkit-keyframes fadeIn { - from { - opacity: 0; - } - - to { - opacity: 1; - } -} - -@keyframes fadeIn { - from { - opacity: 0; - } - - to { - opacity: 1; - } -} - -.fadeIn { - -webkit-animation-name: fadeIn; - animation-name: fadeIn; -} - -@-webkit-keyframes fadeInDown { - from { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } - - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@keyframes fadeInDown { - from { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } - - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -.fadeInDown { - -webkit-animation-name: fadeInDown; - animation-name: fadeInDown; -} - -@-webkit-keyframes fadeInDownBig { - from { - opacity: 0; - -webkit-transform: translate3d(0, -2000px, 0); - transform: translate3d(0, -2000px, 0); - } - - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@keyframes fadeInDownBig { - from { - opacity: 0; - -webkit-transform: translate3d(0, -2000px, 0); - transform: translate3d(0, -2000px, 0); - } - - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -.fadeInDownBig { - -webkit-animation-name: fadeInDownBig; - animation-name: fadeInDownBig; -} - -@-webkit-keyframes fadeInLeft { - from { - opacity: 0; - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - } - - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@keyframes fadeInLeft { - from { - opacity: 0; - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - } - - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -.fadeInLeft { - -webkit-animation-name: fadeInLeft; - animation-name: fadeInLeft; -} - -@-webkit-keyframes fadeInLeftBig { - from { - opacity: 0; - -webkit-transform: translate3d(-2000px, 0, 0); - transform: translate3d(-2000px, 0, 0); - } - - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@keyframes fadeInLeftBig { - from { - opacity: 0; - -webkit-transform: translate3d(-2000px, 0, 0); - transform: translate3d(-2000px, 0, 0); - } - - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -.fadeInLeftBig { - -webkit-animation-name: fadeInLeftBig; - animation-name: fadeInLeftBig; -} - -@-webkit-keyframes fadeInRight { - from { - opacity: 0; - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } - - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@keyframes fadeInRight { - from { - opacity: 0; - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } - - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -.fadeInRight { - -webkit-animation-name: fadeInRight; - animation-name: fadeInRight; -} - -@-webkit-keyframes fadeInRightBig { - from { - opacity: 0; - -webkit-transform: translate3d(2000px, 0, 0); - transform: translate3d(2000px, 0, 0); - } - - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@keyframes fadeInRightBig { - from { - opacity: 0; - -webkit-transform: translate3d(2000px, 0, 0); - transform: translate3d(2000px, 0, 0); - } - - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -.fadeInRightBig { - -webkit-animation-name: fadeInRightBig; - animation-name: fadeInRightBig; -} - -@-webkit-keyframes fadeInUp { - from { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } - - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@keyframes fadeInUp { - from { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } - - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -.fadeInUp { - -webkit-animation-name: fadeInUp; - animation-name: fadeInUp; -} - -@-webkit-keyframes fadeInUpBig { - from { - opacity: 0; - -webkit-transform: translate3d(0, 2000px, 0); - transform: translate3d(0, 2000px, 0); - } - - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@keyframes fadeInUpBig { - from { - opacity: 0; - -webkit-transform: translate3d(0, 2000px, 0); - transform: translate3d(0, 2000px, 0); - } - - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -.fadeInUpBig { - -webkit-animation-name: fadeInUpBig; - animation-name: fadeInUpBig; -} - -@-webkit-keyframes fadeOut { - from { - opacity: 1; - } - - to { - opacity: 0; - } -} - -@keyframes fadeOut { - from { - opacity: 1; - } - - to { - opacity: 0; - } -} - -.fadeOut { - -webkit-animation-name: fadeOut; - animation-name: fadeOut; -} - -@-webkit-keyframes fadeOutDown { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } -} - -@keyframes fadeOutDown { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } -} - -.fadeOutDown { - -webkit-animation-name: fadeOutDown; - animation-name: fadeOutDown; -} - -@-webkit-keyframes fadeOutDownBig { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(0, 2000px, 0); - transform: translate3d(0, 2000px, 0); - } -} - -@keyframes fadeOutDownBig { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(0, 2000px, 0); - transform: translate3d(0, 2000px, 0); - } -} - -.fadeOutDownBig { - -webkit-animation-name: fadeOutDownBig; - animation-name: fadeOutDownBig; -} - -@-webkit-keyframes fadeOutLeft { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - } -} - -@keyframes fadeOutLeft { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - } -} - -.fadeOutLeft { - -webkit-animation-name: fadeOutLeft; - animation-name: fadeOutLeft; -} - -@-webkit-keyframes fadeOutLeftBig { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(-2000px, 0, 0); - transform: translate3d(-2000px, 0, 0); - } -} - -@keyframes fadeOutLeftBig { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(-2000px, 0, 0); - transform: translate3d(-2000px, 0, 0); - } -} - -.fadeOutLeftBig { - -webkit-animation-name: fadeOutLeftBig; - animation-name: fadeOutLeftBig; -} - -@-webkit-keyframes fadeOutRight { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } -} - -@keyframes fadeOutRight { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } -} - -.fadeOutRight { - -webkit-animation-name: fadeOutRight; - animation-name: fadeOutRight; -} - -@-webkit-keyframes fadeOutRightBig { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(2000px, 0, 0); - transform: translate3d(2000px, 0, 0); - } -} - -@keyframes fadeOutRightBig { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(2000px, 0, 0); - transform: translate3d(2000px, 0, 0); - } -} - -.fadeOutRightBig { - -webkit-animation-name: fadeOutRightBig; - animation-name: fadeOutRightBig; -} - -@-webkit-keyframes fadeOutUp { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } -} - -@keyframes fadeOutUp { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } -} - -.fadeOutUp { - -webkit-animation-name: fadeOutUp; - animation-name: fadeOutUp; -} - -@-webkit-keyframes fadeOutUpBig { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(0, -2000px, 0); - transform: translate3d(0, -2000px, 0); - } -} - -@keyframes fadeOutUpBig { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(0, -2000px, 0); - transform: translate3d(0, -2000px, 0); - } -} - -.fadeOutUpBig { - -webkit-animation-name: fadeOutUpBig; - animation-name: fadeOutUpBig; -} - -@-webkit-keyframes flip { - from { - -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) - rotate3d(0, 1, 0, -360deg); - transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, -360deg); - -webkit-animation-timing-function: ease-out; - animation-timing-function: ease-out; - } - - 40% { - -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) - rotate3d(0, 1, 0, -190deg); - transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) - rotate3d(0, 1, 0, -190deg); - -webkit-animation-timing-function: ease-out; - animation-timing-function: ease-out; - } - - 50% { - -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) - rotate3d(0, 1, 0, -170deg); - transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) - rotate3d(0, 1, 0, -170deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } - - 80% { - -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0) - rotate3d(0, 1, 0, 0deg); - transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0) - rotate3d(0, 1, 0, 0deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } - - to { - -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) - rotate3d(0, 1, 0, 0deg); - transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } -} - -@keyframes flip { - from { - -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) - rotate3d(0, 1, 0, -360deg); - transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, -360deg); - -webkit-animation-timing-function: ease-out; - animation-timing-function: ease-out; - } - - 40% { - -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) - rotate3d(0, 1, 0, -190deg); - transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) - rotate3d(0, 1, 0, -190deg); - -webkit-animation-timing-function: ease-out; - animation-timing-function: ease-out; - } - - 50% { - -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) - rotate3d(0, 1, 0, -170deg); - transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) - rotate3d(0, 1, 0, -170deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } - - 80% { - -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0) - rotate3d(0, 1, 0, 0deg); - transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0) - rotate3d(0, 1, 0, 0deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } - - to { - -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) - rotate3d(0, 1, 0, 0deg); - transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } -} - -.animated.flip { - -webkit-backface-visibility: visible; - backface-visibility: visible; - -webkit-animation-name: flip; - animation-name: flip; -} - -@-webkit-keyframes flipInX { - from { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - opacity: 0; - } - - 40% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } - - 60% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); - transform: perspective(400px) rotate3d(1, 0, 0, 10deg); - opacity: 1; - } - - 80% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); - transform: perspective(400px) rotate3d(1, 0, 0, -5deg); - } - - to { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } -} - -@keyframes flipInX { - from { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - opacity: 0; - } - - 40% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } - - 60% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); - transform: perspective(400px) rotate3d(1, 0, 0, 10deg); - opacity: 1; - } - - 80% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); - transform: perspective(400px) rotate3d(1, 0, 0, -5deg); - } - - to { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } -} - -.flipInX { - -webkit-backface-visibility: visible !important; - backface-visibility: visible !important; - -webkit-animation-name: flipInX; - animation-name: flipInX; -} - -@-webkit-keyframes flipInY { - from { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); - transform: perspective(400px) rotate3d(0, 1, 0, 90deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - opacity: 0; - } - - 40% { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); - transform: perspective(400px) rotate3d(0, 1, 0, -20deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } - - 60% { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); - transform: perspective(400px) rotate3d(0, 1, 0, 10deg); - opacity: 1; - } - - 80% { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); - transform: perspective(400px) rotate3d(0, 1, 0, -5deg); - } - - to { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } -} - -@keyframes flipInY { - from { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); - transform: perspective(400px) rotate3d(0, 1, 0, 90deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - opacity: 0; - } - - 40% { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); - transform: perspective(400px) rotate3d(0, 1, 0, -20deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } - - 60% { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); - transform: perspective(400px) rotate3d(0, 1, 0, 10deg); - opacity: 1; - } - - 80% { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); - transform: perspective(400px) rotate3d(0, 1, 0, -5deg); - } - - to { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } -} - -.flipInY { - -webkit-backface-visibility: visible !important; - backface-visibility: visible !important; - -webkit-animation-name: flipInY; - animation-name: flipInY; -} - -@-webkit-keyframes flipOutX { - from { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } - - 30% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - opacity: 1; - } - - to { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - opacity: 0; - } -} - -@keyframes flipOutX { - from { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } - - 30% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - opacity: 1; - } - - to { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - opacity: 0; - } -} - -.flipOutX { - -webkit-animation-duration: 0.75s; - animation-duration: 0.75s; - -webkit-animation-name: flipOutX; - animation-name: flipOutX; - -webkit-backface-visibility: visible !important; - backface-visibility: visible !important; -} - -@-webkit-keyframes flipOutY { - from { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } - - 30% { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); - transform: perspective(400px) rotate3d(0, 1, 0, -15deg); - opacity: 1; - } - - to { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); - transform: perspective(400px) rotate3d(0, 1, 0, 90deg); - opacity: 0; - } -} - -@keyframes flipOutY { - from { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } - - 30% { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); - transform: perspective(400px) rotate3d(0, 1, 0, -15deg); - opacity: 1; - } - - to { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); - transform: perspective(400px) rotate3d(0, 1, 0, 90deg); - opacity: 0; - } -} - -.flipOutY { - -webkit-animation-duration: 0.75s; - animation-duration: 0.75s; - -webkit-backface-visibility: visible !important; - backface-visibility: visible !important; - -webkit-animation-name: flipOutY; - animation-name: flipOutY; -} - -@-webkit-keyframes lightSpeedIn { - from { - -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); - transform: translate3d(100%, 0, 0) skewX(-30deg); - opacity: 0; - } - - 60% { - -webkit-transform: skewX(20deg); - transform: skewX(20deg); - opacity: 1; - } - - 80% { - -webkit-transform: skewX(-5deg); - transform: skewX(-5deg); - } - - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@keyframes lightSpeedIn { - from { - -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); - transform: translate3d(100%, 0, 0) skewX(-30deg); - opacity: 0; - } - - 60% { - -webkit-transform: skewX(20deg); - transform: skewX(20deg); - opacity: 1; - } - - 80% { - -webkit-transform: skewX(-5deg); - transform: skewX(-5deg); - } - - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -.lightSpeedIn { - -webkit-animation-name: lightSpeedIn; - animation-name: lightSpeedIn; - -webkit-animation-timing-function: ease-out; - animation-timing-function: ease-out; -} - -@-webkit-keyframes lightSpeedOut { - from { - opacity: 1; - } - - to { - -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); - transform: translate3d(100%, 0, 0) skewX(30deg); - opacity: 0; - } -} - -@keyframes lightSpeedOut { - from { - opacity: 1; - } - - to { - -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); - transform: translate3d(100%, 0, 0) skewX(30deg); - opacity: 0; - } -} - -.lightSpeedOut { - -webkit-animation-name: lightSpeedOut; - animation-name: lightSpeedOut; - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; -} - -@-webkit-keyframes rotateIn { - from { - -webkit-transform-origin: center; - transform-origin: center; - -webkit-transform: rotate3d(0, 0, 1, -200deg); - transform: rotate3d(0, 0, 1, -200deg); - opacity: 0; - } - - to { - -webkit-transform-origin: center; - transform-origin: center; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - opacity: 1; - } -} - -@keyframes rotateIn { - from { - -webkit-transform-origin: center; - transform-origin: center; - -webkit-transform: rotate3d(0, 0, 1, -200deg); - transform: rotate3d(0, 0, 1, -200deg); - opacity: 0; - } - - to { - -webkit-transform-origin: center; - transform-origin: center; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - opacity: 1; - } -} - -.rotateIn { - -webkit-animation-name: rotateIn; - animation-name: rotateIn; -} - -@-webkit-keyframes rotateInDownLeft { - from { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate3d(0, 0, 1, -45deg); - transform: rotate3d(0, 0, 1, -45deg); - opacity: 0; - } - - to { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - opacity: 1; - } -} - -@keyframes rotateInDownLeft { - from { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate3d(0, 0, 1, -45deg); - transform: rotate3d(0, 0, 1, -45deg); - opacity: 0; - } - - to { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - opacity: 1; - } -} - -.rotateInDownLeft { - -webkit-animation-name: rotateInDownLeft; - animation-name: rotateInDownLeft; -} - -@-webkit-keyframes rotateInDownRight { - from { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate3d(0, 0, 1, 45deg); - transform: rotate3d(0, 0, 1, 45deg); - opacity: 0; - } - - to { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - opacity: 1; - } -} - -@keyframes rotateInDownRight { - from { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate3d(0, 0, 1, 45deg); - transform: rotate3d(0, 0, 1, 45deg); - opacity: 0; - } - - to { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - opacity: 1; - } -} - -.rotateInDownRight { - -webkit-animation-name: rotateInDownRight; - animation-name: rotateInDownRight; -} - -@-webkit-keyframes rotateInUpLeft { - from { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate3d(0, 0, 1, 45deg); - transform: rotate3d(0, 0, 1, 45deg); - opacity: 0; - } - - to { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - opacity: 1; - } -} - -@keyframes rotateInUpLeft { - from { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate3d(0, 0, 1, 45deg); - transform: rotate3d(0, 0, 1, 45deg); - opacity: 0; - } - - to { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - opacity: 1; - } -} - -.rotateInUpLeft { - -webkit-animation-name: rotateInUpLeft; - animation-name: rotateInUpLeft; -} - -@-webkit-keyframes rotateInUpRight { - from { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate3d(0, 0, 1, -90deg); - transform: rotate3d(0, 0, 1, -90deg); - opacity: 0; - } - - to { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - opacity: 1; - } -} - -@keyframes rotateInUpRight { - from { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate3d(0, 0, 1, -90deg); - transform: rotate3d(0, 0, 1, -90deg); - opacity: 0; - } - - to { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - opacity: 1; - } -} - -.rotateInUpRight { - -webkit-animation-name: rotateInUpRight; - animation-name: rotateInUpRight; -} - -@-webkit-keyframes rotateOut { - from { - -webkit-transform-origin: center; - transform-origin: center; - opacity: 1; - } - - to { - -webkit-transform-origin: center; - transform-origin: center; - -webkit-transform: rotate3d(0, 0, 1, 200deg); - transform: rotate3d(0, 0, 1, 200deg); - opacity: 0; - } -} - -@keyframes rotateOut { - from { - -webkit-transform-origin: center; - transform-origin: center; - opacity: 1; - } - - to { - -webkit-transform-origin: center; - transform-origin: center; - -webkit-transform: rotate3d(0, 0, 1, 200deg); - transform: rotate3d(0, 0, 1, 200deg); - opacity: 0; - } -} - -.rotateOut { - -webkit-animation-name: rotateOut; - animation-name: rotateOut; -} - -@-webkit-keyframes rotateOutDownLeft { - from { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - opacity: 1; - } - - to { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate3d(0, 0, 1, 45deg); - transform: rotate3d(0, 0, 1, 45deg); - opacity: 0; - } -} - -@keyframes rotateOutDownLeft { - from { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - opacity: 1; - } - - to { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate3d(0, 0, 1, 45deg); - transform: rotate3d(0, 0, 1, 45deg); - opacity: 0; - } -} - -.rotateOutDownLeft { - -webkit-animation-name: rotateOutDownLeft; - animation-name: rotateOutDownLeft; -} - -@-webkit-keyframes rotateOutDownRight { - from { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - opacity: 1; - } - - to { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate3d(0, 0, 1, -45deg); - transform: rotate3d(0, 0, 1, -45deg); - opacity: 0; - } -} - -@keyframes rotateOutDownRight { - from { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - opacity: 1; - } - - to { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate3d(0, 0, 1, -45deg); - transform: rotate3d(0, 0, 1, -45deg); - opacity: 0; - } -} - -.rotateOutDownRight { - -webkit-animation-name: rotateOutDownRight; - animation-name: rotateOutDownRight; -} - -@-webkit-keyframes rotateOutUpLeft { - from { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - opacity: 1; - } - - to { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate3d(0, 0, 1, -45deg); - transform: rotate3d(0, 0, 1, -45deg); - opacity: 0; - } -} - -@keyframes rotateOutUpLeft { - from { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - opacity: 1; - } - - to { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate3d(0, 0, 1, -45deg); - transform: rotate3d(0, 0, 1, -45deg); - opacity: 0; - } -} - -.rotateOutUpLeft { - -webkit-animation-name: rotateOutUpLeft; - animation-name: rotateOutUpLeft; -} - -@-webkit-keyframes rotateOutUpRight { - from { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - opacity: 1; - } - - to { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate3d(0, 0, 1, 90deg); - transform: rotate3d(0, 0, 1, 90deg); - opacity: 0; - } -} - -@keyframes rotateOutUpRight { - from { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - opacity: 1; - } - - to { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate3d(0, 0, 1, 90deg); - transform: rotate3d(0, 0, 1, 90deg); - opacity: 0; - } -} - -.rotateOutUpRight { - -webkit-animation-name: rotateOutUpRight; - animation-name: rotateOutUpRight; -} - -@-webkit-keyframes hinge { - 0% { - -webkit-transform-origin: top left; - transform-origin: top left; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - } - - 20%, - 60% { - -webkit-transform: rotate3d(0, 0, 1, 80deg); - transform: rotate3d(0, 0, 1, 80deg); - -webkit-transform-origin: top left; - transform-origin: top left; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - } - - 40%, - 80% { - -webkit-transform: rotate3d(0, 0, 1, 60deg); - transform: rotate3d(0, 0, 1, 60deg); - -webkit-transform-origin: top left; - transform-origin: top left; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - opacity: 1; - } - - to { - -webkit-transform: translate3d(0, 700px, 0); - transform: translate3d(0, 700px, 0); - opacity: 0; - } -} - -@keyframes hinge { - 0% { - -webkit-transform-origin: top left; - transform-origin: top left; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - } - - 20%, - 60% { - -webkit-transform: rotate3d(0, 0, 1, 80deg); - transform: rotate3d(0, 0, 1, 80deg); - -webkit-transform-origin: top left; - transform-origin: top left; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - } - - 40%, - 80% { - -webkit-transform: rotate3d(0, 0, 1, 60deg); - transform: rotate3d(0, 0, 1, 60deg); - -webkit-transform-origin: top left; - transform-origin: top left; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - opacity: 1; - } - - to { - -webkit-transform: translate3d(0, 700px, 0); - transform: translate3d(0, 700px, 0); - opacity: 0; - } -} - -.hinge { - -webkit-animation-duration: 2s; - animation-duration: 2s; - -webkit-animation-name: hinge; - animation-name: hinge; -} - -@-webkit-keyframes jackInTheBox { - from { - opacity: 0; - -webkit-transform: scale(0.1) rotate(30deg); - transform: scale(0.1) rotate(30deg); - -webkit-transform-origin: center bottom; - transform-origin: center bottom; - } - - 50% { - -webkit-transform: rotate(-10deg); - transform: rotate(-10deg); - } - - 70% { - -webkit-transform: rotate(3deg); - transform: rotate(3deg); - } - - to { - opacity: 1; - -webkit-transform: scale(1); - transform: scale(1); - } -} - -@keyframes jackInTheBox { - from { - opacity: 0; - -webkit-transform: scale(0.1) rotate(30deg); - transform: scale(0.1) rotate(30deg); - -webkit-transform-origin: center bottom; - transform-origin: center bottom; - } - - 50% { - -webkit-transform: rotate(-10deg); - transform: rotate(-10deg); - } - - 70% { - -webkit-transform: rotate(3deg); - transform: rotate(3deg); - } - - to { - opacity: 1; - -webkit-transform: scale(1); - transform: scale(1); - } -} - -.jackInTheBox { - -webkit-animation-name: jackInTheBox; - animation-name: jackInTheBox; -} - -/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ - -@-webkit-keyframes rollIn { - from { - opacity: 0; - -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); - transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); - } - - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@keyframes rollIn { - from { - opacity: 0; - -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); - transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); - } - - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -.rollIn { - -webkit-animation-name: rollIn; - animation-name: rollIn; -} - -/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ - -@-webkit-keyframes rollOut { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); - transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); - } -} - -@keyframes rollOut { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); - transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); - } -} - -.rollOut { - -webkit-animation-name: rollOut; - animation-name: rollOut; -} - -@-webkit-keyframes zoomIn { - from { - opacity: 0; - -webkit-transform: scale3d(0.3, 0.3, 0.3); - transform: scale3d(0.3, 0.3, 0.3); - } - - 50% { - opacity: 1; - } -} - -@keyframes zoomIn { - from { - opacity: 0; - -webkit-transform: scale3d(0.3, 0.3, 0.3); - transform: scale3d(0.3, 0.3, 0.3); - } - - 50% { - opacity: 1; - } -} - -.zoomIn { - -webkit-animation-name: zoomIn; - animation-name: zoomIn; -} - -@-webkit-keyframes zoomInDown { - from { - opacity: 0; - -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); - transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); - -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - } -} - -@keyframes zoomInDown { - from { - opacity: 0; - -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); - transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); - -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - } -} - -.zoomInDown { - -webkit-animation-name: zoomInDown; - animation-name: zoomInDown; -} - -@-webkit-keyframes zoomInLeft { - from { - opacity: 0; - -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); - transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); - -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - } -} - -@keyframes zoomInLeft { - from { - opacity: 0; - -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); - transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); - -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - } -} - -.zoomInLeft { - -webkit-animation-name: zoomInLeft; - animation-name: zoomInLeft; -} - -@-webkit-keyframes zoomInRight { - from { - opacity: 0; - -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); - transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); - -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - } -} - -@keyframes zoomInRight { - from { - opacity: 0; - -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); - transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); - -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - } -} - -.zoomInRight { - -webkit-animation-name: zoomInRight; - animation-name: zoomInRight; -} - -@-webkit-keyframes zoomInUp { - from { - opacity: 0; - -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); - transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); - -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - } -} - -@keyframes zoomInUp { - from { - opacity: 0; - -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); - transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); - -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - } -} - -.zoomInUp { - -webkit-animation-name: zoomInUp; - animation-name: zoomInUp; -} - -@-webkit-keyframes zoomOut { - from { - opacity: 1; - } - - 50% { - opacity: 0; - -webkit-transform: scale3d(0.3, 0.3, 0.3); - transform: scale3d(0.3, 0.3, 0.3); - } - - to { - opacity: 0; - } -} - -@keyframes zoomOut { - from { - opacity: 1; - } - - 50% { - opacity: 0; - -webkit-transform: scale3d(0.3, 0.3, 0.3); - transform: scale3d(0.3, 0.3, 0.3); - } - - to { - opacity: 0; - } -} - -.zoomOut { - -webkit-animation-name: zoomOut; - animation-name: zoomOut; -} - -@-webkit-keyframes zoomOutDown { - 40% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); - -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - } - - to { - opacity: 0; - -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); - transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); - -webkit-transform-origin: center bottom; - transform-origin: center bottom; - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - } -} - -@keyframes zoomOutDown { - 40% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); - -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - } - - to { - opacity: 0; - -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); - transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); - -webkit-transform-origin: center bottom; - transform-origin: center bottom; - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - } -} - -.zoomOutDown { - -webkit-animation-name: zoomOutDown; - animation-name: zoomOutDown; -} - -@-webkit-keyframes zoomOutLeft { - 40% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); - } - - to { - opacity: 0; - -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0); - transform: scale(0.1) translate3d(-2000px, 0, 0); - -webkit-transform-origin: left center; - transform-origin: left center; - } -} - -@keyframes zoomOutLeft { - 40% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); - } - - to { - opacity: 0; - -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0); - transform: scale(0.1) translate3d(-2000px, 0, 0); - -webkit-transform-origin: left center; - transform-origin: left center; - } -} - -.zoomOutLeft { - -webkit-animation-name: zoomOutLeft; - animation-name: zoomOutLeft; -} - -@-webkit-keyframes zoomOutRight { - 40% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); - } - - to { - opacity: 0; - -webkit-transform: scale(0.1) translate3d(2000px, 0, 0); - transform: scale(0.1) translate3d(2000px, 0, 0); - -webkit-transform-origin: right center; - transform-origin: right center; - } -} - -@keyframes zoomOutRight { - 40% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); - } - - to { - opacity: 0; - -webkit-transform: scale(0.1) translate3d(2000px, 0, 0); - transform: scale(0.1) translate3d(2000px, 0, 0); - -webkit-transform-origin: right center; - transform-origin: right center; - } -} - -.zoomOutRight { - -webkit-animation-name: zoomOutRight; - animation-name: zoomOutRight; -} - -@-webkit-keyframes zoomOutUp { - 40% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); - -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - } - - to { - opacity: 0; - -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); - transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); - -webkit-transform-origin: center bottom; - transform-origin: center bottom; - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - } -} - -@keyframes zoomOutUp { - 40% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); - -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - } - - to { - opacity: 0; - -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); - transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); - -webkit-transform-origin: center bottom; - transform-origin: center bottom; - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - } -} - -.zoomOutUp { - -webkit-animation-name: zoomOutUp; - animation-name: zoomOutUp; -} - -@-webkit-keyframes slideInDown { - from { - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - visibility: visible; - } - - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@keyframes slideInDown { - from { - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - visibility: visible; - } - - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -.slideInDown { - -webkit-animation-name: slideInDown; - animation-name: slideInDown; -} - -@-webkit-keyframes slideInLeft { - from { - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - visibility: visible; - } - - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@keyframes slideInLeft { - from { - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - visibility: visible; - } - - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -.slideInLeft { - -webkit-animation-name: slideInLeft; - animation-name: slideInLeft; -} - -@-webkit-keyframes slideInRight { - from { - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - visibility: visible; - } - - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@keyframes slideInRight { - from { - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - visibility: visible; - } - - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -.slideInRight { - -webkit-animation-name: slideInRight; - animation-name: slideInRight; -} - -@-webkit-keyframes slideInUp { - from { - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - visibility: visible; - } - - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@keyframes slideInUp { - from { - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - visibility: visible; - } - - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -.slideInUp { - -webkit-animation-name: slideInUp; - animation-name: slideInUp; -} - -@-webkit-keyframes slideOutDown { - from { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - to { - visibility: hidden; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } -} - -@keyframes slideOutDown { - from { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - to { - visibility: hidden; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } -} - -.slideOutDown { - -webkit-animation-name: slideOutDown; - animation-name: slideOutDown; -} - -@-webkit-keyframes slideOutLeft { - from { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - to { - visibility: hidden; - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - } -} - -@keyframes slideOutLeft { - from { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - to { - visibility: hidden; - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - } -} - -.slideOutLeft { - -webkit-animation-name: slideOutLeft; - animation-name: slideOutLeft; -} - -@-webkit-keyframes slideOutRight { - from { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - to { - visibility: hidden; - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } -} - -@keyframes slideOutRight { - from { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - to { - visibility: hidden; - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } -} - -.slideOutRight { - -webkit-animation-name: slideOutRight; - animation-name: slideOutRight; -} - -@-webkit-keyframes slideOutUp { - from { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - to { - visibility: hidden; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } -} - -@keyframes slideOutUp { - from { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - to { - visibility: hidden; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } -} - -.slideOutUp { - -webkit-animation-name: slideOutUp; - animation-name: slideOutUp; -} - -.animated { - -webkit-animation-duration: 1s; - animation-duration: 1s; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; -} - -.animated.infinite { - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite; -} - -.animated.delay-1s { - -webkit-animation-delay: 1s; - animation-delay: 1s; -} - -.animated.delay-2s { - -webkit-animation-delay: 2s; - animation-delay: 2s; -} - -.animated.delay-3s { - -webkit-animation-delay: 3s; - animation-delay: 3s; -} - -.animated.delay-4s { - -webkit-animation-delay: 4s; - animation-delay: 4s; -} - -.animated.delay-5s { - -webkit-animation-delay: 5s; - animation-delay: 5s; -} - -.animated.fast { - -webkit-animation-duration: 800ms; - animation-duration: 800ms; -} - -.animated.faster { - -webkit-animation-duration: 500ms; - animation-duration: 500ms; -} - -.animated.slow { - -webkit-animation-duration: 2s; - animation-duration: 2s; -} - -.animated.slower { - -webkit-animation-duration: 3s; - animation-duration: 3s; -} - -@media (print), (prefers-reduced-motion: reduce) { - .animated { - -webkit-animation-duration: 1ms !important; - animation-duration: 1ms !important; - -webkit-transition-duration: 1ms !important; - transition-duration: 1ms !important; - -webkit-animation-iteration-count: 1 !important; - animation-iteration-count: 1 !important; - } -} \ No newline at end of file diff --git a/smart-admin-web/src/components/active-plate/active-plate.vue b/smart-admin-web/src/components/active-plate/active-plate.vue deleted file mode 100644 index 237e2e05..00000000 --- a/smart-admin-web/src/components/active-plate/active-plate.vue +++ /dev/null @@ -1,67 +0,0 @@ - - - - - diff --git a/smart-admin-web/src/components/charts/bar.vue b/smart-admin-web/src/components/charts/bar.vue deleted file mode 100644 index 49dcd500..00000000 --- a/smart-admin-web/src/components/charts/bar.vue +++ /dev/null @@ -1,73 +0,0 @@ - - - diff --git a/smart-admin-web/src/components/charts/index.js b/smart-admin-web/src/components/charts/index.js deleted file mode 100644 index cd86f348..00000000 --- a/smart-admin-web/src/components/charts/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import ChartPie from './pie.vue'; -import ChartBar from './bar.vue'; -export { ChartPie, ChartBar }; diff --git a/smart-admin-web/src/components/charts/pie.vue b/smart-admin-web/src/components/charts/pie.vue deleted file mode 100644 index 4c4ffc7d..00000000 --- a/smart-admin-web/src/components/charts/pie.vue +++ /dev/null @@ -1,85 +0,0 @@ - - - diff --git a/smart-admin-web/src/components/charts/theme.json b/smart-admin-web/src/components/charts/theme.json deleted file mode 100644 index 909b518a..00000000 --- a/smart-admin-web/src/components/charts/theme.json +++ /dev/null @@ -1,490 +0,0 @@ -{ - "color": [ - "#2d8cf0", - "#19be6b", - "#ff9900", - "#E46CBB", - "#9A66E4", - "#ed3f14" - ], - "backgroundColor": "rgba(0,0,0,0)", - "textStyle": {}, - "title": { - "textStyle": { - "color": "#516b91" - }, - "subtextStyle": { - "color": "#93b7e3" - } - }, - "line": { - "itemStyle": { - "normal": { - "borderWidth": "2" - } - }, - "lineStyle": { - "normal": { - "width": "2" - } - }, - "symbolSize": "6", - "symbol": "emptyCircle", - "smooth": true - }, - "radar": { - "itemStyle": { - "normal": { - "borderWidth": "2" - } - }, - "lineStyle": { - "normal": { - "width": "2" - } - }, - "symbolSize": "6", - "symbol": "emptyCircle", - "smooth": true - }, - "bar": { - "itemStyle": { - "normal": { - "barBorderWidth": 0, - "barBorderColor": "#ccc" - }, - "emphasis": { - "barBorderWidth": 0, - "barBorderColor": "#ccc" - } - } - }, - "pie": { - "itemStyle": { - "normal": { - "borderWidth": 0, - "borderColor": "#ccc" - }, - "emphasis": { - "borderWidth": 0, - "borderColor": "#ccc" - } - } - }, - "scatter": { - "itemStyle": { - "normal": { - "borderWidth": 0, - "borderColor": "#ccc" - }, - "emphasis": { - "borderWidth": 0, - "borderColor": "#ccc" - } - } - }, - "boxplot": { - "itemStyle": { - "normal": { - "borderWidth": 0, - "borderColor": "#ccc" - }, - "emphasis": { - "borderWidth": 0, - "borderColor": "#ccc" - } - } - }, - "parallel": { - "itemStyle": { - "normal": { - "borderWidth": 0, - "borderColor": "#ccc" - }, - "emphasis": { - "borderWidth": 0, - "borderColor": "#ccc" - } - } - }, - "sankey": { - "itemStyle": { - "normal": { - "borderWidth": 0, - "borderColor": "#ccc" - }, - "emphasis": { - "borderWidth": 0, - "borderColor": "#ccc" - } - } - }, - "funnel": { - "itemStyle": { - "normal": { - "borderWidth": 0, - "borderColor": "#ccc" - }, - "emphasis": { - "borderWidth": 0, - "borderColor": "#ccc" - } - } - }, - "gauge": { - "itemStyle": { - "normal": { - "borderWidth": 0, - "borderColor": "#ccc" - }, - "emphasis": { - "borderWidth": 0, - "borderColor": "#ccc" - } - } - }, - "candlestick": { - "itemStyle": { - "normal": { - "color": "#edafda", - "color0": "transparent", - "borderColor": "#d680bc", - "borderColor0": "#8fd3e8", - "borderWidth": "2" - } - } - }, - "graph": { - "itemStyle": { - "normal": { - "borderWidth": 0, - "borderColor": "#ccc" - } - }, - "lineStyle": { - "normal": { - "width": 1, - "color": "#aaa" - } - }, - "symbolSize": "6", - "symbol": "emptyCircle", - "smooth": true, - "color": [ - "#2d8cf0", - "#19be6b", - "#f5ae4a", - "#9189d5", - "#56cae2", - "#cbb0e3" - ], - "label": { - "normal": { - "textStyle": { - "color": "#eee" - } - } - } - }, - "map": { - "itemStyle": { - "normal": { - "areaColor": "#f3f3f3", - "borderColor": "#516b91", - "borderWidth": 0.5 - }, - "emphasis": { - "areaColor": "rgba(165,231,240,1)", - "borderColor": "#516b91", - "borderWidth": 1 - } - }, - "label": { - "normal": { - "textStyle": { - "color": "#000" - } - }, - "emphasis": { - "textStyle": { - "color": "rgb(81,107,145)" - } - } - } - }, - "geo": { - "itemStyle": { - "normal": { - "areaColor": "#f3f3f3", - "borderColor": "#516b91", - "borderWidth": 0.5 - }, - "emphasis": { - "areaColor": "rgba(165,231,240,1)", - "borderColor": "#516b91", - "borderWidth": 1 - } - }, - "label": { - "normal": { - "textStyle": { - "color": "#000" - } - }, - "emphasis": { - "textStyle": { - "color": "rgb(81,107,145)" - } - } - } - }, - "categoryAxis": { - "axisLine": { - "show": true, - "lineStyle": { - "color": "#cccccc" - } - }, - "axisTick": { - "show": false, - "lineStyle": { - "color": "#333" - } - }, - "axisLabel": { - "show": true, - "textStyle": { - "color": "#999999" - } - }, - "splitLine": { - "show": true, - "lineStyle": { - "color": [ - "#eeeeee" - ] - } - }, - "splitArea": { - "show": false, - "areaStyle": { - "color": [ - "rgba(250,250,250,0.05)", - "rgba(200,200,200,0.02)" - ] - } - } - }, - "valueAxis": { - "axisLine": { - "show": true, - "lineStyle": { - "color": "#cccccc" - } - }, - "axisTick": { - "show": false, - "lineStyle": { - "color": "#333" - } - }, - "axisLabel": { - "show": true, - "textStyle": { - "color": "#999999" - } - }, - "splitLine": { - "show": true, - "lineStyle": { - "color": [ - "#eeeeee" - ] - } - }, - "splitArea": { - "show": false, - "areaStyle": { - "color": [ - "rgba(250,250,250,0.05)", - "rgba(200,200,200,0.02)" - ] - } - } - }, - "logAxis": { - "axisLine": { - "show": true, - "lineStyle": { - "color": "#cccccc" - } - }, - "axisTick": { - "show": false, - "lineStyle": { - "color": "#333" - } - }, - "axisLabel": { - "show": true, - "textStyle": { - "color": "#999999" - } - }, - "splitLine": { - "show": true, - "lineStyle": { - "color": [ - "#eeeeee" - ] - } - }, - "splitArea": { - "show": false, - "areaStyle": { - "color": [ - "rgba(250,250,250,0.05)", - "rgba(200,200,200,0.02)" - ] - } - } - }, - "timeAxis": { - "axisLine": { - "show": true, - "lineStyle": { - "color": "#cccccc" - } - }, - "axisTick": { - "show": false, - "lineStyle": { - "color": "#333" - } - }, - "axisLabel": { - "show": true, - "textStyle": { - "color": "#999999" - } - }, - "splitLine": { - "show": true, - "lineStyle": { - "color": [ - "#eeeeee" - ] - } - }, - "splitArea": { - "show": false, - "areaStyle": { - "color": [ - "rgba(250,250,250,0.05)", - "rgba(200,200,200,0.02)" - ] - } - } - }, - "toolbox": { - "iconStyle": { - "normal": { - "borderColor": "#999" - }, - "emphasis": { - "borderColor": "#666" - } - } - }, - "legend": { - "textStyle": { - "color": "#999999" - } - }, - "tooltip": { - "axisPointer": { - "lineStyle": { - "color": "#ccc", - "width": 1 - }, - "crossStyle": { - "color": "#ccc", - "width": 1 - } - } - }, - "timeline": { - "lineStyle": { - "color": "#8fd3e8", - "width": 1 - }, - "itemStyle": { - "normal": { - "color": "#8fd3e8", - "borderWidth": 1 - }, - "emphasis": { - "color": "#8fd3e8" - } - }, - "controlStyle": { - "normal": { - "color": "#8fd3e8", - "borderColor": "#8fd3e8", - "borderWidth": 0.5 - }, - "emphasis": { - "color": "#8fd3e8", - "borderColor": "#8fd3e8", - "borderWidth": 0.5 - } - }, - "checkpointStyle": { - "color": "#8fd3e8", - "borderColor": "rgba(138,124,168,0.37)" - }, - "label": { - "normal": { - "textStyle": { - "color": "#8fd3e8" - } - }, - "emphasis": { - "textStyle": { - "color": "#8fd3e8" - } - } - } - }, - "visualMap": { - "color": [ - "#516b91", - "#59c4e6", - "#a5e7f0" - ] - }, - "dataZoom": { - "backgroundColor": "rgba(0,0,0,0)", - "dataBackgroundColor": "rgba(255,255,255,0.3)", - "fillerColor": "rgba(167,183,204,0.4)", - "handleColor": "#a7b7cc", - "handleSize": "100%", - "textStyle": { - "color": "#333" - } - }, - "markPoint": { - "label": { - "normal": { - "textStyle": { - "color": "#eee" - } - }, - "emphasis": { - "textStyle": { - "color": "#eee" - } - } - } - } -} \ No newline at end of file diff --git a/smart-admin-web/src/components/common-icon/common-icon.vue b/smart-admin-web/src/components/common-icon/common-icon.vue deleted file mode 100644 index 03cbc0e8..00000000 --- a/smart-admin-web/src/components/common-icon/common-icon.vue +++ /dev/null @@ -1,52 +0,0 @@ - - - - - diff --git a/smart-admin-web/src/components/common-icon/index.js b/smart-admin-web/src/components/common-icon/index.js deleted file mode 100644 index ca1bd334..00000000 --- a/smart-admin-web/src/components/common-icon/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import CommonIcon from './common-icon.vue'; -export default CommonIcon; diff --git a/smart-admin-web/src/components/count-to/count-to.vue b/smart-admin-web/src/components/count-to/count-to.vue deleted file mode 100644 index 4c8f274e..00000000 --- a/smart-admin-web/src/components/count-to/count-to.vue +++ /dev/null @@ -1,198 +0,0 @@ - - - diff --git a/smart-admin-web/src/components/count-to/index.js b/smart-admin-web/src/components/count-to/index.js deleted file mode 100644 index 52c7fb88..00000000 --- a/smart-admin-web/src/components/count-to/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import countTo from './count-to.vue'; -export default countTo; diff --git a/smart-admin-web/src/components/count-to/index.less b/smart-admin-web/src/components/count-to/index.less deleted file mode 100644 index e17d7c60..00000000 --- a/smart-admin-web/src/components/count-to/index.less +++ /dev/null @@ -1,10 +0,0 @@ -@prefix: ~"count-to"; - -.@{prefix}-wrapper{ - .content-outer{ - display: inline-block; - .@{prefix}-unit-text{ - font-style: normal; - } - } -} diff --git a/smart-admin-web/src/components/editor/editor.vue b/smart-admin-web/src/components/editor/editor.vue deleted file mode 100644 index da3123dc..00000000 --- a/smart-admin-web/src/components/editor/editor.vue +++ /dev/null @@ -1,77 +0,0 @@ - - - - - diff --git a/smart-admin-web/src/components/editor/index.js b/smart-admin-web/src/components/editor/index.js deleted file mode 100644 index 58c0cd58..00000000 --- a/smart-admin-web/src/components/editor/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import Editor from './editor.vue'; -export default Editor; diff --git a/smart-admin-web/src/components/employee/employee-selector.vue b/smart-admin-web/src/components/employee/employee-selector.vue deleted file mode 100644 index a55f140a..00000000 --- a/smart-admin-web/src/components/employee/employee-selector.vue +++ /dev/null @@ -1,54 +0,0 @@ - - \ No newline at end of file diff --git a/smart-admin-web/src/components/icons/icons.vue b/smart-admin-web/src/components/icons/icons.vue deleted file mode 100644 index 08112f96..00000000 --- a/smart-admin-web/src/components/icons/icons.vue +++ /dev/null @@ -1,38 +0,0 @@ - - - - - diff --git a/smart-admin-web/src/components/icons/index.js b/smart-admin-web/src/components/icons/index.js deleted file mode 100644 index 9bce89b3..00000000 --- a/smart-admin-web/src/components/icons/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import Icons from './icons.vue'; -export default Icons; diff --git a/smart-admin-web/src/components/main/components/a-back-top/index.js b/smart-admin-web/src/components/main/components/a-back-top/index.js deleted file mode 100644 index 7c87382d..00000000 --- a/smart-admin-web/src/components/main/components/a-back-top/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import ABackTop from './index.vue'; -export default ABackTop; diff --git a/smart-admin-web/src/components/main/components/a-back-top/index.vue b/smart-admin-web/src/components/main/components/a-back-top/index.vue deleted file mode 100644 index e13c5621..00000000 --- a/smart-admin-web/src/components/main/components/a-back-top/index.vue +++ /dev/null @@ -1,130 +0,0 @@ - - diff --git a/smart-admin-web/src/components/main/components/fullscreen/fullscreen.vue b/smart-admin-web/src/components/main/components/fullscreen/fullscreen.vue deleted file mode 100644 index b5fb231c..00000000 --- a/smart-admin-web/src/components/main/components/fullscreen/fullscreen.vue +++ /dev/null @@ -1,92 +0,0 @@ - - - - - diff --git a/smart-admin-web/src/components/main/components/fullscreen/index.js b/smart-admin-web/src/components/main/components/fullscreen/index.js deleted file mode 100644 index 45c287e9..00000000 --- a/smart-admin-web/src/components/main/components/fullscreen/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import Fullscreen from './fullscreen.vue'; -export default Fullscreen; diff --git a/smart-admin-web/src/components/main/components/header-bar/custom-bread-crumb/custom-bread-crumb.less b/smart-admin-web/src/components/main/components/header-bar/custom-bread-crumb/custom-bread-crumb.less deleted file mode 100644 index 1ace1eb8..00000000 --- a/smart-admin-web/src/components/main/components/header-bar/custom-bread-crumb/custom-bread-crumb.less +++ /dev/null @@ -1,4 +0,0 @@ -.custom-bread-crumb{ - display: inline-block; - vertical-align: top; -} diff --git a/smart-admin-web/src/components/main/components/header-bar/custom-bread-crumb/custom-bread-crumb.vue b/smart-admin-web/src/components/main/components/header-bar/custom-bread-crumb/custom-bread-crumb.vue deleted file mode 100644 index 9d1fc5d7..00000000 --- a/smart-admin-web/src/components/main/components/header-bar/custom-bread-crumb/custom-bread-crumb.vue +++ /dev/null @@ -1,44 +0,0 @@ - - diff --git a/smart-admin-web/src/components/main/components/header-bar/custom-bread-crumb/index.js b/smart-admin-web/src/components/main/components/header-bar/custom-bread-crumb/index.js deleted file mode 100644 index a360517d..00000000 --- a/smart-admin-web/src/components/main/components/header-bar/custom-bread-crumb/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import customBreadCrumb from './custom-bread-crumb.vue'; -export default customBreadCrumb; diff --git a/smart-admin-web/src/components/main/components/header-bar/header-bar.less b/smart-admin-web/src/components/main/components/header-bar/header-bar.less deleted file mode 100644 index 9c62d564..00000000 --- a/smart-admin-web/src/components/main/components/header-bar/header-bar.less +++ /dev/null @@ -1,19 +0,0 @@ -.header-bar{ - width: 100%; - height: 100%; - position: relative; - .custom-content-con{ - float: right; - height: auto; - padding-right: 20px; - // line-height: 64px; - & > *{ - float: right; - } - } -} - - -.step-bottom-btn{ - width: 380px !important; -} diff --git a/smart-admin-web/src/components/main/components/header-bar/header-bar.vue b/smart-admin-web/src/components/main/components/header-bar/header-bar.vue deleted file mode 100644 index 059b69c4..00000000 --- a/smart-admin-web/src/components/main/components/header-bar/header-bar.vue +++ /dev/null @@ -1,106 +0,0 @@ - - - - diff --git a/smart-admin-web/src/components/main/components/header-bar/index.js b/smart-admin-web/src/components/main/components/header-bar/index.js deleted file mode 100644 index 7559bb43..00000000 --- a/smart-admin-web/src/components/main/components/header-bar/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import HeaderBar from './header-bar'; -export default HeaderBar; diff --git a/smart-admin-web/src/components/main/components/header-bar/sider-trigger/index.js b/smart-admin-web/src/components/main/components/header-bar/sider-trigger/index.js deleted file mode 100644 index e474a26d..00000000 --- a/smart-admin-web/src/components/main/components/header-bar/sider-trigger/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import siderTrigger from './sider-trigger.vue'; -export default siderTrigger; diff --git a/smart-admin-web/src/components/main/components/header-bar/sider-trigger/sider-trigger.less b/smart-admin-web/src/components/main/components/header-bar/sider-trigger/sider-trigger.less deleted file mode 100644 index bb852980..00000000 --- a/smart-admin-web/src/components/main/components/header-bar/sider-trigger/sider-trigger.less +++ /dev/null @@ -1,21 +0,0 @@ -.trans{ - transition: transform .2s ease; -} -@size: 40px; -.sider-trigger-a{ - padding: 6px; - width: @size; - height: @size; - display: inline-block; - text-align: center; - color: #5c6b77; - margin-top: 10px; - i{ - .trans; - vertical-align: top; - } - &.collapsed i{ - transform: rotateZ(180deg); - .trans; - } -} diff --git a/smart-admin-web/src/components/main/components/header-bar/sider-trigger/sider-trigger.vue b/smart-admin-web/src/components/main/components/header-bar/sider-trigger/sider-trigger.vue deleted file mode 100644 index 71971884..00000000 --- a/smart-admin-web/src/components/main/components/header-bar/sider-trigger/sider-trigger.vue +++ /dev/null @@ -1,35 +0,0 @@ - - - diff --git a/smart-admin-web/src/components/main/components/language/index.js b/smart-admin-web/src/components/main/components/language/index.js deleted file mode 100644 index 74d5e61b..00000000 --- a/smart-admin-web/src/components/main/components/language/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import Language from './language.vue'; -export default Language; diff --git a/smart-admin-web/src/components/main/components/language/language.vue b/smart-admin-web/src/components/main/components/language/language.vue deleted file mode 100644 index 29a8cbb0..00000000 --- a/smart-admin-web/src/components/main/components/language/language.vue +++ /dev/null @@ -1,54 +0,0 @@ - - - diff --git a/smart-admin-web/src/components/main/components/notice/notice.vue b/smart-admin-web/src/components/main/components/notice/notice.vue deleted file mode 100644 index 337d09ae..00000000 --- a/smart-admin-web/src/components/main/components/notice/notice.vue +++ /dev/null @@ -1,371 +0,0 @@ - - - - - diff --git a/smart-admin-web/src/components/main/components/side-menu/collapsed-menu.vue b/smart-admin-web/src/components/main/components/side-menu/collapsed-menu.vue deleted file mode 100644 index 6011e12b..00000000 --- a/smart-admin-web/src/components/main/components/side-menu/collapsed-menu.vue +++ /dev/null @@ -1,84 +0,0 @@ - - diff --git a/smart-admin-web/src/components/main/components/side-menu/index.js b/smart-admin-web/src/components/main/components/side-menu/index.js deleted file mode 100644 index 4a51d599..00000000 --- a/smart-admin-web/src/components/main/components/side-menu/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import SideMenu from './side-menu.vue'; -export default SideMenu; diff --git a/smart-admin-web/src/components/main/components/side-menu/item-mixin.js b/smart-admin-web/src/components/main/components/side-menu/item-mixin.js deleted file mode 100644 index 921342fe..00000000 --- a/smart-admin-web/src/components/main/components/side-menu/item-mixin.js +++ /dev/null @@ -1,30 +0,0 @@ -export default { - props: { - // 父文件 - parentItem: { - type: Object, - default: () => { } - }, - // 主题 - theme: { - type: String, - require: false - }, - // 图标尺寸 - iconSize: { - type: Number, - require: false - } - }, - computed: { - parentName () { - return this.parentItem.name; - }, - children () { - return this.parentItem.children; - }, - textColor () { - return this.theme === 'dark' ? '#fff' : '#495060'; - } - } -}; diff --git a/smart-admin-web/src/components/main/components/side-menu/mixin.js b/smart-admin-web/src/components/main/components/side-menu/mixin.js deleted file mode 100644 index 770d5bb6..00000000 --- a/smart-admin-web/src/components/main/components/side-menu/mixin.js +++ /dev/null @@ -1,18 +0,0 @@ -import CommonIcon from '_c/common-icon'; -import { showTitle } from '@/lib/menu-func'; -export default { - components: { - CommonIcon - }, - methods: { - showTitle (item) { - return showTitle(item, this); - }, - showChildren (item) { - return item.children && (item.children.length > 0 || (item.meta && item.meta.showAlways)); - }, - getNameOrHref (item, children0) { - return item.href ? `isTurnByHref_${item.href}` : (children0 ? item.children[0].name : item.name); - } - } -}; diff --git a/smart-admin-web/src/components/main/components/side-menu/side-menu-item.vue b/smart-admin-web/src/components/main/components/side-menu/side-menu-item.vue deleted file mode 100644 index d236b7a5..00000000 --- a/smart-admin-web/src/components/main/components/side-menu/side-menu-item.vue +++ /dev/null @@ -1,35 +0,0 @@ - - diff --git a/smart-admin-web/src/components/main/components/side-menu/side-menu.less b/smart-admin-web/src/components/main/components/side-menu/side-menu.less deleted file mode 100644 index e50fae79..00000000 --- a/smart-admin-web/src/components/main/components/side-menu/side-menu.less +++ /dev/null @@ -1,39 +0,0 @@ -.side-menu-wrapper{ - user-select: none; - .menu-collapsed{ - padding-top: 10px; - - .ivu-dropdown{ - .ivu-dropdown-rel a{ - width: 100%; - } - } - .ivu-tooltip{ - width: 100%; - .ivu-tooltip-rel{ - width: 100%; - } - .ivu-tooltip-popper .ivu-tooltip-content{ - .ivu-tooltip-arrow{ - border-right-color: #fff; - } - .ivu-tooltip-inner{ - background: #fff; - color: #495060; - } - } - } - - - } - a.drop-menu-a{ - display: inline-block; - padding: 6px 15px; - width: 100%; - text-align: center; - color: #495060; - } -} -.menu-title{ - padding-left: 6px; -} diff --git a/smart-admin-web/src/components/main/components/side-menu/side-menu.vue b/smart-admin-web/src/components/main/components/side-menu/side-menu.vue deleted file mode 100644 index ceccb359..00000000 --- a/smart-admin-web/src/components/main/components/side-menu/side-menu.vue +++ /dev/null @@ -1,197 +0,0 @@ - - - diff --git a/smart-admin-web/src/components/main/components/tags-nav/index.js b/smart-admin-web/src/components/main/components/tags-nav/index.js deleted file mode 100644 index 56d2f1c2..00000000 --- a/smart-admin-web/src/components/main/components/tags-nav/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import TagsNav from './tags-nav.vue'; -export default TagsNav; diff --git a/smart-admin-web/src/components/main/components/tags-nav/tags-nav.less b/smart-admin-web/src/components/main/components/tags-nav/tags-nav.less deleted file mode 100644 index ddb05134..00000000 --- a/smart-admin-web/src/components/main/components/tags-nav/tags-nav.less +++ /dev/null @@ -1,136 +0,0 @@ -.no-select{ - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.size{ - height: 100%; -} -.tags-nav{ - position: relative; - margin:0 auto; - // border-top: 1px solid #F0F0F0; - // border-bottom: 1px solid #F0F0F0; - background: #f4f6f8; - padding:0 20px; - - .no-select; - .size; - .close-con{ - position: absolute; - right: 0; - top: 5px; - height: 30px; - width: 42px; - background: #f3f5f7; - text-align: center; - z-index: 10; - margin-top:5px; - - border-top: 1px solid #F5F7FC; - border-bottom: 1px solid #F5F7FC; - i{ - color:#666666; - } - button{ - margin-top:3px; - - } - } - .btn-con{ - margin-top:10px; - position: absolute; - top: 0px; - height: 30px; - line-height: 30px; - // padding:0 10px; - background: #f3f5f7; - z-index: 10; - - button{ - position: relative; - top:-1px; - line-height: 14px; - text-align: center; - color:#666666; - - } - &.left-btn{ - left: 0px; - border: 1px solid #F5F7FC; - } - &.right-btn{ - right: 42px; - border: 1px solid #F5F7FC; - } - } - .scroll-outer{ - position: absolute; - left: 52px; - right: 61px; - top: 0; - bottom: 0; - padding:10px 0; - .scroll-body{ - display: inline-block; - position: absolute; - box-shadow: border-box; - overflow: visible; - white-space: nowrap; - transition: left .3s ease; - .ivu-tag{ - height:34px; - margin:0; - } - .ivu-tag{ - // min-width:10px; - height:30px; - line-height: 30px; - border-radius: 3px; - padding:0 10px; - background: #fff!important; - border:none; - text-align: center; - color:#1C2B36; - font-size: 14px; - margin:0 5px; - span{ - color:#1C2B36!important; - padding:0 5px; - } - i{ - color:#1C2B36!important; - font-size: 4px; - } - } - .ivu-tag-primary{ - transition: background .2s ease; - background: #2D8CF0!important; - span,i{ - color:#fff!important; - } - } - } - } - .contextmenu { - position: absolute; - margin: 0; - padding: 5px 0; - background: #fff; - z-index: 1000; - list-style-type: none; - border-radius: 3px; - box-shadow: 2px 2px 3px 0 rgba(0, 0, 0, .1); - li { - margin: 0; - padding: 5px 15px; - cursor: pointer; - &:hover { - background: #eee; - } - } - } -} diff --git a/smart-admin-web/src/components/main/components/tags-nav/tags-nav.vue b/smart-admin-web/src/components/main/components/tags-nav/tags-nav.vue deleted file mode 100644 index 00909fa0..00000000 --- a/smart-admin-web/src/components/main/components/tags-nav/tags-nav.vue +++ /dev/null @@ -1,256 +0,0 @@ - - - - - diff --git a/smart-admin-web/src/components/main/components/user/index.js b/smart-admin-web/src/components/main/components/user/index.js deleted file mode 100644 index 54d7ca0b..00000000 --- a/smart-admin-web/src/components/main/components/user/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import User from './user.vue'; -export default User; diff --git a/smart-admin-web/src/components/main/components/user/user.less b/smart-admin-web/src/components/main/components/user/user.less deleted file mode 100644 index 9c5eeba7..00000000 --- a/smart-admin-web/src/components/main/components/user/user.less +++ /dev/null @@ -1,25 +0,0 @@ -.user-avatar-dropdown{ - padding-left:20px; - color:#909ca4; - .dropdown-arrows{ - margin:0 10px; - } - .head{ - position: relative; - top:-2px; - } -} -.user{ - - &-avatar-dropdown{ - cursor: pointer; - display: inline-block; - // height: 64px; - vertical-align: middle; - // line-height: 64px; - .ivu-badge-dot{ - top: 16px; - } - } - -} diff --git a/smart-admin-web/src/components/main/components/user/user.vue b/smart-admin-web/src/components/main/components/user/user.vue deleted file mode 100644 index d7f0324a..00000000 --- a/smart-admin-web/src/components/main/components/user/user.vue +++ /dev/null @@ -1,131 +0,0 @@ - - - - diff --git a/smart-admin-web/src/components/main/index.js b/smart-admin-web/src/components/main/index.js deleted file mode 100644 index 87be9ddf..00000000 --- a/smart-admin-web/src/components/main/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import Main from './main.vue'; -export default Main; diff --git a/smart-admin-web/src/components/main/main.less b/smart-admin-web/src/components/main/main.less deleted file mode 100644 index 588e8c13..00000000 --- a/smart-admin-web/src/components/main/main.less +++ /dev/null @@ -1,129 +0,0 @@ -//滚动条样式 -.scrollbar(@width: 2px){ - &::-webkit-scrollbar { width: @width; height: 8px; } - &::-webkit-scrollbar-thumb { border-radius: 5px; -webkit-box-shadow: inset 0 0 5px rgb(185, 185, 185); background: #c7c5c8; } - &::-webkit-scrollbar-track { border-radius: 0; background: #ddd; } -} -.no-scrollbar{ - &::-webkit-scrollbar {display:none} -} -.main{ - .scrollbar, - .ivu-table-overflowX, - .content-wrapper, - .w-e-text{ - .scrollbar; - } - iframe body{ - .scrollbar; - } - .logo-con{ - padding: 19px 10px 15px 5px; - &.collapsed{ - padding: 19px 0 15px; - text-align: center; - } - } - .menu-dropdown{ - margin-left: 200px; - } - .search-bar{ - padding:0 14px; - margin-bottom: 20px; - &.collapsed{ - padding:0 12px; - i{ - width: 40px; - - } - } - input{ - width: 100%; - height:36px; - background: #152a3a; - color:#44505c; - font-size: 14px; - outline: none; - - &::placeholder{ - color:#44505c; - } - &:focus{ - border:none; - outline: none; - background: #fff; - } - border:none; - } - i{ - line-height: 36px; - color:#44505c; - } - } - .header-con{ - background: #fff; - padding: 0 10px; - width: 100%; - } - .main-layout-con{ - height: 100%; - overflow: hidden; - } - .main-content-con{ - height: ~"calc(100% - 60px)"; - overflow: hidden; - } - .tag-nav-wrapper{ - padding: 0; - height:50px; - // background:#F0F0F0; - } - .content-wrapper{ - padding: 0 18px 18px; - height: ~"calc(100% - 80px)"; - overflow: auto; - } - .left-sider{ - .ivu-layout-sider-children{ - overflow-y: scroll; - margin-right: -18px; - } - } -} -.ivu-menu-light.ivu-menu-vertical .ivu-menu-item-active:not(.ivu-menu-submenu):after{ - right: inherit; left: 0; -} -.ivu-menu-item > i{ - margin-right: 12px !important; -} -.ivu-menu-submenu > .ivu-menu > .ivu-menu-item > i { - margin-right: 8px !important; -} -.collased-menu-dropdown{ - width: 100%; - margin: 0; - line-height: normal; - padding: 7px 0 6px 16px; - clear: both; - font-size: 12px !important; - white-space: nowrap; - list-style: none; - cursor: pointer; - transition: background 0.2s ease-in-out; - &:hover{ - background: rgba(100, 100, 100, 0.1); - } - & * { - color: #515a6e; - } - .ivu-menu-item > i{ - margin-right: 12px !important; - } - .ivu-menu-submenu > .ivu-menu > .ivu-menu-item > i { - margin-right: 8px !important; - } -} - -.ivu-select-dropdown.ivu-dropdown-transfer{ - max-height: 400px; -} diff --git a/smart-admin-web/src/components/main/main.vue b/smart-admin-web/src/components/main/main.vue deleted file mode 100644 index 0be9f2c1..00000000 --- a/smart-admin-web/src/components/main/main.vue +++ /dev/null @@ -1,533 +0,0 @@ - - - diff --git a/smart-admin-web/src/components/smart-admin-ad/ad.vue b/smart-admin-web/src/components/smart-admin-ad/ad.vue deleted file mode 100644 index 43f2d9e1..00000000 --- a/smart-admin-web/src/components/smart-admin-ad/ad.vue +++ /dev/null @@ -1,34 +0,0 @@ - - - diff --git a/smart-admin-web/src/components/smart-admin-ad/index.js b/smart-admin-web/src/components/smart-admin-ad/index.js deleted file mode 100644 index f0b0e3fb..00000000 --- a/smart-admin-web/src/components/smart-admin-ad/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import Ad from './ad.vue'; -export default Ad; diff --git a/smart-admin-web/src/components/tables/edit.vue b/smart-admin-web/src/components/tables/edit.vue deleted file mode 100644 index 55c142ac..00000000 --- a/smart-admin-web/src/components/tables/edit.vue +++ /dev/null @@ -1,102 +0,0 @@ - - - - - diff --git a/smart-admin-web/src/components/tables/handle-btns.js b/smart-admin-web/src/components/tables/handle-btns.js deleted file mode 100644 index 7254b3e1..00000000 --- a/smart-admin-web/src/components/tables/handle-btns.js +++ /dev/null @@ -1,70 +0,0 @@ -// 验证 -const validate = { - operation: (params) => { - if (params.operation === 0) { - return false; - } - return true; - }, - audit: (params) => { - if (params.audit === 0) { - return false; - } - return true; - } -}; -const btns = { - // 删除:需要判定 - delete: (h, params, vm) => { - let disabledFlag = false; - return h('Tooltip', { - props: { - content: '删除', - placement: 'top', - transfer: true - } - }, [h('Button', { - props: { - type: 'error', - size: 'small', - icon: 'md-trash', - disabled: disabledFlag - }, - style: { - marginRight: '5px' - }, - on: { - click: () => { - vm.$emit('on-delete', params); - } - } - })]); - }, - edit: (h, params, vm) => { - let disabledFlag = false; - return h('Tooltip', { - props: { - content: '编辑', - placement: 'top', - transfer: true - } - }, [h('Button', { - props: { - type: 'primary', - size: 'small', - icon: 'md-trash', - disabled: disabledFlag - }, - style: { - marginRight: '5px' - }, - on: { - click: () => { - vm.$emit('on-edit', params); - } - } - })]); - } -}; - -export default btns; diff --git a/smart-admin-web/src/components/tables/index.js b/smart-admin-web/src/components/tables/index.js deleted file mode 100644 index 899190c0..00000000 --- a/smart-admin-web/src/components/tables/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import Tables from './tables.vue'; -export default Tables; diff --git a/smart-admin-web/src/components/tables/index.less b/smart-admin-web/src/components/tables/index.less deleted file mode 100644 index 3c352e11..00000000 --- a/smart-admin-web/src/components/tables/index.less +++ /dev/null @@ -1,17 +0,0 @@ -.search-con{ - padding: 10px 0; - .search{ - &-col{ - display: inline-block; - width: 200px; - } - &-input{ - display: inline-block; - width: 200px; - margin-left: 2px; - } - &-btn{ - margin-left: 2px; - } - } -} diff --git a/smart-admin-web/src/components/tables/tables.vue b/smart-admin-web/src/components/tables/tables.vue deleted file mode 100644 index 0c2329b4..00000000 --- a/smart-admin-web/src/components/tables/tables.vue +++ /dev/null @@ -1,342 +0,0 @@ - - - diff --git a/smart-admin-web/src/config/index.js b/smart-admin-web/src/config/index.js deleted file mode 100644 index a80b6815..00000000 --- a/smart-admin-web/src/config/index.js +++ /dev/null @@ -1,38 +0,0 @@ -console.log('api url : ', process.env.VUE_APP_URL); -console.log('websocket url : ', process.env.VUE_APP_SOCKET_URL); -export default { - /** - * @description 配置显示在浏览器标签的title - */ - title: 'Smart-Admin', - /** - * @description token在Cookie中存储的天数,默认1天 - */ - cookieExpires: 3, - /** - * @description 是否使用国际化,默认为false - * 如果不使用,则需要在路由中给需要在菜单中展示的路由设置meta: {title: 'xxx'} - * 用来在菜单中显示文字 - */ - useI18n: false, - /** - * @description api请求基础路径 - */ - baseUrl: { - apiUrl: process.env.VUE_APP_URL, - webSocketUrl: process.env.VUE_APP_SOCKET_URL - }, - /** - * @description 默认打开的首页的路由name值,默认为home - */ - homeName: 'Home', - /** - * @description 需要加载的插件 - */ - plugin: { - 'error-store': { - showInHeader: true, // 设为false后不会在顶部显示错误日志徽标 - developmentOff: true // 设为true后在开发环境不会收集错误信息,方便开发中排查错误 - } - } -}; diff --git a/smart-admin-web/src/constants/file.js b/smart-admin-web/src/constants/file.js deleted file mode 100644 index 6a205f55..00000000 --- a/smart-admin-web/src/constants/file.js +++ /dev/null @@ -1,24 +0,0 @@ -export const FILE_TYPE = { - LOCAL: { - value: 1, - desc: '本地文件服务' - }, - ALI_OSS: { - value: 2, - desc: '阿里OSS文件服务' - }, - QI_NIU_OSS: { - value: 3, - desc: '七牛文件服务' - } -}; -export const SERVICE_TYPE = { - BACK_USER: { - value: '1', - desc: '用户后台' - } -}; -export default { - FILE_TYPE, - SERVICE_TYPE -}; diff --git a/smart-admin-web/src/constants/index.js b/smart-admin-web/src/constants/index.js deleted file mode 100644 index 55101226..00000000 --- a/smart-admin-web/src/constants/index.js +++ /dev/null @@ -1,10 +0,0 @@ -import notice from './notice.js'; -import login from './login.js'; -import file from './file.js'; -import privilege from './privilege'; -export default { - ...notice, - ...login, - ...file, - ...privilege -}; diff --git a/smart-admin-web/src/constants/login.js b/smart-admin-web/src/constants/login.js deleted file mode 100644 index fb28973b..00000000 --- a/smart-admin-web/src/constants/login.js +++ /dev/null @@ -1,13 +0,0 @@ -export const PRIVILEGE_TYPE = { - MENU: { - value: 1, - desc: '是' - }, - POINTS: { - value: 2, - desc: '否' - } -}; -export default { - PRIVILEGE_TYPE -}; diff --git a/smart-admin-web/src/constants/notice.js b/smart-admin-web/src/constants/notice.js deleted file mode 100644 index 0d5315fa..00000000 --- a/smart-admin-web/src/constants/notice.js +++ /dev/null @@ -1,13 +0,0 @@ -export const NOTICE_STATUS = { - YES: { - value: 1, - desc: '是' - }, - NO: { - value: 0, - desc: '否' - } -}; -export default { - NOTICE_STATUS -}; diff --git a/smart-admin-web/src/constants/privilege.js b/smart-admin-web/src/constants/privilege.js deleted file mode 100644 index 885e86d6..00000000 --- a/smart-admin-web/src/constants/privilege.js +++ /dev/null @@ -1,14 +0,0 @@ -export const PRIVILEGE_TYPE_ENUM = { - MENU: { - value: 1, - desc: '菜单' - }, - POINTS: { - value: 2, - desc: '功能点' - } -}; - -export default { - PRIVILEGE_TYPE_ENUM -}; diff --git a/smart-admin-web/src/constants/table-page.js b/smart-admin-web/src/constants/table-page.js deleted file mode 100644 index 83586bfd..00000000 --- a/smart-admin-web/src/constants/table-page.js +++ /dev/null @@ -1,6 +0,0 @@ - -/** - * table分页 每页条数切换的配置 - */ -export const PAGE_SIZE_OPTIONS = [10,20,30,50,75,100,150,200,300,500,1000]; - diff --git a/smart-admin-web/src/directives/directives.js b/smart-admin-web/src/directives/directives.js deleted file mode 100644 index 701eec5d..00000000 --- a/smart-admin-web/src/directives/directives.js +++ /dev/null @@ -1,11 +0,0 @@ -import draggable from './module/draggable'; -import clipboard from './module/clipboard'; -import privilege from './module/privilege'; - -const directives = { - draggable, - clipboard, - privilege -}; - -export default directives; diff --git a/smart-admin-web/src/directives/index.js b/smart-admin-web/src/directives/index.js deleted file mode 100644 index dcc9ffb3..00000000 --- a/smart-admin-web/src/directives/index.js +++ /dev/null @@ -1,31 +0,0 @@ -import directive from './directives'; - -const importDirective = Vue => { - /** - * 拖拽指令 v-draggable="options" - * options = { - * trigger: /这里传入作为拖拽触发器的CSS选择器/, - * body: /这里传入需要移动容器的CSS选择器/, - * recover: /拖动结束之后是否恢复到原来的位置/ - * } - */ - Vue.directive('draggable', directive.draggable); - /** - * clipboard指令 v-draggable="options" - * options = { - * value: /在输入框中使用v-model绑定的值/, - * success: /复制成功后的回调/, - * error: /复制失败后的回调/ - * } - */ - Vue.directive('clipboard', directive.clipboard); - /** - * privilege指令 v-privilege="options" - * options = { - * value: /当前按钮的唯一权限识别/, - * } - */ - Vue.directive('privilege', directive.privilege); -}; - -export default importDirective; diff --git a/smart-admin-web/src/directives/module/clipboard.js b/smart-admin-web/src/directives/module/clipboard.js deleted file mode 100644 index 0684eb61..00000000 --- a/smart-admin-web/src/directives/module/clipboard.js +++ /dev/null @@ -1,30 +0,0 @@ -import Clipboard from 'clipboard'; -export default { - bind: (el, binding) => { - const clipboard = new Clipboard(el, { - text: () => binding.value.value - }); - el.__success_callback__ = binding.value.success; - el.__error_callback__ = binding.value.error; - clipboard.on('success', e => { - const callback = el.__success_callback__; - callback && callback(e); - }); - clipboard.on('error', e => { - const callback = el.__error_callback__; - callback && callback(e); - }); - el.__clipboard__ = clipboard; - }, - update: (el, binding) => { - el.__clipboard__.text = () => binding.value.value; - el.__success_callback__ = binding.value.success; - el.__error_callback__ = binding.value.error; - }, - unbind: (el, binding) => { - delete el.__success_callback__; - delete el.__error_callback__; - el.__clipboard__.destroy(); - delete el.__clipboard__; - } -}; diff --git a/smart-admin-web/src/directives/module/draggable.js b/smart-admin-web/src/directives/module/draggable.js deleted file mode 100644 index 8bf798b3..00000000 --- a/smart-admin-web/src/directives/module/draggable.js +++ /dev/null @@ -1,42 +0,0 @@ -import { on } from '@/lib/util'; -export default { - inserted: (el, binding, vnode) => { - let triggerDom = document.querySelector(binding.value.trigger); - triggerDom.style.cursor = 'move'; - let bodyDom = document.querySelector(binding.value.body); - let pageX = 0; - let pageY = 0; - let transformX = 0; - let transformY = 0; - let canMove = false; - const handleMousedown = e => { - let transform = /\(.*\)/.exec(bodyDom.style.transform); - if (transform) { - transform = transform[0].slice(1, transform[0].length - 1); - let splitxy = transform.split('px, '); - transformX = parseFloat(splitxy[0]); - transformY = parseFloat(splitxy[1].split('px')[0]); - } - pageX = e.pageX; - pageY = e.pageY; - canMove = true; - }; - const handleMousemove = e => { - let xOffset = e.pageX - pageX + transformX; - let yOffset = e.pageY - pageY + transformY; - if (canMove) - {bodyDom.style.transform = `translate(${xOffset}px, ${yOffset}px)`;} - }; - const handleMouseup = e => { - canMove = false; - }; - on(triggerDom, 'mousedown', handleMousedown); - on(document, 'mousemove', handleMousemove); - on(document, 'mouseup', handleMouseup); - }, - update: (el, binding, vnode) => { - if (!binding.value.recover) return; - let bodyDom = document.querySelector(binding.value.body); - bodyDom.style.transform = ''; - } -}; diff --git a/smart-admin-web/src/directives/module/privilege.js b/smart-admin-web/src/directives/module/privilege.js deleted file mode 100644 index d5016721..00000000 --- a/smart-admin-web/src/directives/module/privilege.js +++ /dev/null @@ -1,23 +0,0 @@ -// 页面内按钮过滤 -import store from '@/store/index'; -export default { - inserted: function (el, binding, vnode) { - // 获取当前路由name - // 如果页面为同一模块下的子页面则取最上级权限 - let routeName = vnode.context.$route.meta.privilegeExtend - ? vnode.context.$route.meta.privilegeExtend - : vnode.context.$route.name; - // 超级管理员 - if (store.state.user.userLoginInfo.isSuperMan) { - return true; - } - // 获取功能点权限 - let functionList = store.state.user.privilegeFunctionPointsMap.get(routeName); - // 有权限 - if (functionList && functionList.includes(binding.value)) { - - } else { - el.parentNode.removeChild(el); - } - } -}; diff --git a/smart-admin-web/src/lib/cookie.js b/smart-admin-web/src/lib/cookie.js deleted file mode 100644 index 83386119..00000000 --- a/smart-admin-web/src/lib/cookie.js +++ /dev/null @@ -1,21 +0,0 @@ -import Cookies from 'js-cookie'; -import config from '@/config'; -const { cookieExpires } = config; -export const TOKEN_KEY = 'token'; - -export default { - setToken: token => { - Cookies.set(TOKEN_KEY, token, { - // token在Cookie中存储的天数,默认1天 - expires: cookieExpires || 7 - }); - }, - getToken: () => { - const token = Cookies.get(TOKEN_KEY); - if (token) return token; - else return null; - }, - clearToken: () => { - Cookies.remove(TOKEN_KEY); - } -}; diff --git a/smart-admin-web/src/lib/http.js b/smart-admin-web/src/lib/http.js deleted file mode 100644 index 0223aa7b..00000000 --- a/smart-admin-web/src/lib/http.js +++ /dev/null @@ -1,161 +0,0 @@ -import Axios from 'axios'; -import config from '@/config'; -import { Message, Spin } from 'view-design'; -import cookie from '@/lib/cookie'; -// 之所以封装这个axios,是因为在一些请求中,无法上传信息,很尴尬,估计原因是继承的有问题,无法携带headers -export const baseUrl = config.baseUrl.apiUrl; -export const socketBaseUrl = config.baseUrl.webSocketUrl; - -let axios = Axios.create({ - baseURL: baseUrl, - timeout: 30000, - headers: { - 'Content-Type': 'application/json; charset=utf-8' - } -}); - -axios.interceptors.request.use( - function (config) { - // 在发送请求之前做些什么 - if (cookie.getToken()) { - config.headers['x-access-token'] = cookie.getToken(); - } - return config; - }, - function (error) { - // 对请求错误做些什么 - Spin.hide(); - return Promise.reject(error); - } -); -// 添加响应拦截器 -axios.interceptors.response.use( - res => { - if (res.config.responseType === 'blob') { - let isReturnJson = res.headers && res.headers['content-type'] && res.headers['content-type'].indexOf("json") > -1; - //后端返回错误信息 - if (isReturnJson) { - let reader = new FileReader() - reader.onload = function (event) { - let content = reader.result - let parseRes = JSON.parse(content) // 错误信息 - return validateResponseCode({ - data: parseRes - }); - } - reader.readAsText(res.data); - return true - } else { - //下载文件 - download(res); - } - } else { - //正常json请求 - return validateResponseCode(res); - } - }, - error => { - Spin.hide(); - Message.error('服务内部错误'); - console.log('1111', error); - // 对响应错误做点什么 - return Promise.reject(error); - } -); - -function validateResponseCode (res) { - let { data } = res; - if (data && data.code && data.code !== 1) { - if (data.code === 1001) { - cookie.clearToken(); - localStorage.clear(); - window.location.href = window.location.pathname + '#/login'; - Message.error('未登录,或登录失效,请登录'); - return; - } else if (data.code === 502) { - window.location.href = window.location.pathname + '#/500'; - return; - } else { - Spin.hide(); - Message.error(data.msg); - return Promise.reject(res); - } - } - return Promise.resolve(data); -} - -function blobToText (blob) { - return new Promise((resolve, reject) => { - const fileReader = new FileReader(); - fileReader.readAsText(blob); - fileReader.onload = function () { - try { - const result = JSON.parse(this.result); - if (result && result['resultCode'] === 'fail') { - resolve(result); - } else { - reject(); - } - } catch (e) { - //TODO handle the exception - reject(); - } - } - }) -} - -export const postAxios = (url, data) => { - return axios.post(url, data); -}; - -export const postFileUploadAxios = (url, data) => { - return axios.post(url, data, { headers: { 'Content-Type': 'multipart/form-data' } }); -}; - -export const getDownloadAxios = (url) => { - return axios.get(url, { responseType: 'blob' }); -}; - -export const postDownloadAxios = (url, data) => { - return axios.post(url, data, { responseType: 'blob' }); -}; - -export const getAxios = (url, data) => { - return axios.get(url, { - params: data - }); -}; - -function download (res) { - let reader = new FileReader(); - let data = res.data; - reader.onload = e => { - if (e.target.result.indexOf('Result') != -1 && JSON.parse(e.target.result).Result == false) { - // 进行错误处理 - } else { - let fileName = "download"; - let contentDisposition = res.headers['Content-Disposition']; - contentDisposition = contentDisposition ? contentDisposition : res.headers['content-disposition']; - if (contentDisposition) { - fileName = window.decodeURI(contentDisposition.split('=')[1], "UTF-8"); - } - executeDownload(data, fileName); - } - }; - reader.readAsText(data); -} - -// 模拟点击a 标签进行下载 -function executeDownload (data, fileName) { - if (!data) { - return - } - let url = window.URL.createObjectURL(new Blob([data])); - let link = document.createElement('a'); - link.style.display = 'none'; - link.href = url; - link.setAttribute('download', fileName); - document.body.appendChild(link); - link.click(); - document.body.removeChild(link); -} diff --git a/smart-admin-web/src/lib/local.js b/smart-admin-web/src/lib/local.js deleted file mode 100644 index c19d7e3d..00000000 --- a/smart-admin-web/src/lib/local.js +++ /dev/null @@ -1,8 +0,0 @@ -export const localSave = (key, value) => { - localStorage.setItem(key, value); -}; - -export const localRead = key => { - return localStorage.getItem(key) || ''; -}; - diff --git a/smart-admin-web/src/lib/menu-func.js b/smart-admin-web/src/lib/menu-func.js deleted file mode 100644 index 914d5379..00000000 --- a/smart-admin-web/src/lib/menu-func.js +++ /dev/null @@ -1,276 +0,0 @@ -import { forEach, hasOneOf, objEqual } from '@/lib/util'; -import config from '@/config'; -import { localRead, localSave } from '@/lib/local'; -const { title, useI18n } = config; -export const hasChild = item => { - return item.children && item.children.length !== 0; -}; - -/** - * 通过权限过滤菜单 - * @param {Object} map 权限对象 - * @param {Array} menuList 菜单列表 - * @returns {Array} - */ -export const getShowMenu = (map = {}, menuList, access = false) => { - // 判断是否为超级管理员 - if (access) { - return menuList; - } - // 返回的菜单列表 - let result = []; - for (let menuItem of menuList) { - let routerObj = JSON.parse(JSON.stringify(menuItem)); - if ( - map.hasOwnProperty(menuItem.name) && - (menuItem.name !== 'home' && menuItem.name !== '_home') - ) { - // 判断该菜单权限下是否为数组,若为数组,则为功能点权限否则为子菜单 - if (getType(map[routerObj.name]) === 'array') { - let funcPrivilege = localRead('funcPrivilegeInfo') - ? JSON.parse(localRead('funcPrivilegeInfo')) - : {}; - localSave( - 'funcPrivilegeInfo', - JSON.stringify({ - ...funcPrivilege, - [routerObj.name]: map[routerObj.name] - }) - ); - } else if ( - getType(map[routerObj.name]) !== 'array' && - !routerObj.children - ) { - // 判断是否为二级菜单,若是则需要多枚举一层赋值 - let funcPrivilege = localRead('funcPrivilegeInfo') - ? JSON.parse(localRead('funcPrivilegeInfo')) - : {}; - localSave( - 'funcPrivilegeInfo', - JSON.stringify({ - ...funcPrivilege, - [routerObj.name]: map[routerObj.name][routerObj.name] - }) - ); - } else if ( - getType(map[routerObj.name]) !== 'array' && - routerObj.children - ) { - // 循环子菜单权限 - routerObj.children = getShowMenu( - map[routerObj.name], - routerObj.children - ); - } - result.push(routerObj); - } - } - return result; -}; -// 获取数据类型 -export const getType = obj => { - return {}.toString - .call(obj) - .match(/\s([a-zA-Z]+)/)[1] - .toLowerCase(); -}; - -/** - * @description 本地存储和获取标签导航列表 - */ -export const setTagNavListInLocalStorage = list => { - localStorage.tagNaveList = JSON.stringify(list); -}; -/** - * @returns {Array} 其中的每个元素只包含路由原信息中的name, path, meta三项 - */ -export const getTagNavListFromLocalStorage = () => { - const list = localStorage.tagNaveList; - return list ? JSON.parse(list) : []; -}; -export const getBreadCrumbList = (route, homeRoute) => { - let homeItem = { - ...homeRoute, - icon: homeRoute.meta.icon - }; - let routeMatched = route.matched; - if (routeMatched.some(item => item.name === homeRoute.name)) { - return [homeItem]; - } - let res = routeMatched - .filter(item => { - return item.meta === undefined || !item.meta.hideInBread; - }) - .map(item => { - let meta = { - ...item.meta - }; - if (meta.title && typeof meta.title === 'function') { - meta.__titleIsFunction__ = true; - meta.title = meta.title(route); - } - let obj = { - icon: (item.meta && item.meta.icon) || '', - name: item.name, - meta: meta - }; - return obj; - }); - res = res.filter(item => { - return !item.meta.hideInMenu; - }); - return [...res]; -}; -/** - * @param {Array} routers 路由列表数组 - * @description 用于找到路由列表中name为home的对象 - */ -export const getHomeRoute = (routers, homeName = 'Home') => { - let i = -1; - let len = routers.length; - let homeRoute = {}; - while (++i < len) { - let item = routers[i]; - if (item.children && item.children.length) { - let res = getHomeRoute(item.children, homeName); - if (res.name) return res; - } else { - if (item.name === homeName) homeRoute = item; - } - } - return homeRoute; -}; -/** - * @param {Array} list 标签列表 - * @param {String} name 当前关闭的标签的name - */ -export const getNextRoute = (list, route) => { - let res = {}; - if (list.length === 2) { - res = getHomeRoute(list); - } else { - const index = list.findIndex(item => routeEqual(item, route)); - if (index === list.length - 1) res = list[list.length - 2]; - else res = list[index + 1]; - } - return res; -}; - -/** - * 判断打开的标签列表里是否已存在这个新添加的路由对象 - */ -export const routeHasExist = (tagNavList, routeItem) => { - let len = tagNavList.length; - let res = false; - doCustomTimes(len, index => { - if (routeEqual(tagNavList[index], routeItem)) res = true; - }); - return res; -}; -/** - * @param {*} list 现有标签导航列表 - * @param {*} newRoute 新添加的路由原信息对象 - * @description 如果该newRoute已经存在则不再添加 - */ -export const getNewTagList = (list, newRoute) => { - const { name, path, meta, query } = newRoute; - let newList = [...list]; - let index = newList.findIndex(item => item.name === name); - if (index >= 0) { - newList[index] = { name, path, meta, query }; - } else newList.push({ name, path, meta, query }); - return newList; -}; -export const routeEqual = (route1, route2) => { - return route1.name === route2.name; -}; -export const getRouteTitleHandled = route => { - let router = { - ...route - }; - let meta = { - ...route.meta - }; - let title = ''; - if (meta.title) { - if (typeof meta.title === 'function') { - meta.__titleIsFunction__ = true; - title = meta.title(router); - } else title = meta.title; - } - meta.title = title; - router.meta = meta; - return router; -}; -/** - * @param {Number} times 回调函数需要执行的次数 - * @param {Function} callback 回调函数 - */ -export const doCustomTimes = (times, callback) => { - let i = -1; - while (++i < times) { - callback(i); - } -}; -export const showTitle = (item, vm) => { - let { title, __titleIsFunction__ } = item.meta; - if (!title) return; - if (useI18n) { - if (title.includes('{{') && title.includes('}}') && useI18n) { - title = title.replace(/({{[\s\S]+?}})/, (m, str) => - str.replace(/{{([\s\S]*)}}/, (m, _) => vm.$t(_.trim())) - ); - } else if (__titleIsFunction__) title = item.meta.title; - else title = vm.$t(item.name); - } else title = (item.meta && item.meta.title) || item.name; - return title; -}; -/** - * @description 根据当前跳转的路由设置显示在浏览器标签的title - * @param {Object} routeItem 路由对象 - * @param {Object} vm Vue实例 - */ -export const setTitle = (routeItem, vm) => { - const handledRoute = getRouteTitleHandled(routeItem); - const pageTitle = showTitle(handledRoute, vm); - const resTitle = pageTitle ? `${pageTitle} - ${title}` : title; - window.document.title = resTitle; -}; - -export const findNodeUpper = (ele, tag) => { - if (ele.parentNode) { - if (ele.parentNode.tagName === tag.toUpperCase()) { - return ele.parentNode; - } else { - return findNodeUpper(ele.parentNode, tag); - } - } -}; - -export const findNodeUpperByClasses = (ele, classes) => { - let parentNode = ele.parentNode; - if (parentNode) { - let classList = parentNode.classList; - if ( - classList && - classes.every(className => classList.contains(className)) - ) { - return parentNode; - } else { - return findNodeUpperByClasses(parentNode, classes); - } - } -}; - -export const findNodeDownward = (ele, tag) => { - const tagName = tag.toUpperCase(); - if (ele.childNodes.length) { - let i = -1; - let len = ele.childNodes.length; - while (++i < len) { - let child = ele.childNodes[i]; - if (child.tagName === tagName) return child; - else return findNodeDownward(child, tag); - } - } -}; diff --git a/smart-admin-web/src/lib/printPlugs.js b/smart-admin-web/src/lib/printPlugs.js deleted file mode 100644 index 9c4295dd..00000000 --- a/smart-admin-web/src/lib/printPlugs.js +++ /dev/null @@ -1,133 +0,0 @@ -// 打印类属性、方法定义 -/* eslint-disable */ -//第二个参数表明是否要关闭当前窗口 -const Print = function(dom, close, options) { - if (!(this instanceof Print)) return new Print(dom, close, options); - - this.options = this.extend( - { - noPrint: '.no-print' - }, - options - ); - - if (typeof dom === 'string') { - this.dom = document.querySelector(dom); - } else { - this.dom = dom; - } - - this.init(close); -}; -Print.prototype = { - init: function(close) { - var content = this.getStyle() + this.getHtml(); - this.writeIframe(content, close); - }, - extend: function(obj, obj2) { - for (var k in obj2) { - obj[k] = obj2[k]; - } - return obj; - }, - - getStyle: function() { - var str = '', - styles = document.querySelectorAll('style,link'); - for (var i = 0; i < styles.length; i++) { - str += styles[i].outerHTML; - } - str += - ''; - - return str; - }, - - getHtml: function() { - var inputs = document.querySelectorAll('input'); - var textareas = document.querySelectorAll('textarea'); - var selects = document.querySelectorAll('select'); - - for (var k in inputs) { - if (inputs[k].type == 'checkbox' || inputs[k].type == 'radio') { - if (inputs[k].checked == true) { - inputs[k].setAttribute('checked', 'checked'); - } else { - inputs[k].removeAttribute('checked'); - } - } else if (inputs[k].type == 'text') { - inputs[k].setAttribute('value', inputs[k].value); - } - } - - for (var k2 in textareas) { - if (textareas[k2].type == 'textarea') { - textareas[k2].innerHTML = textareas[k2].value; - } - } - - for (var k3 in selects) { - if (selects[k3].type == 'select-one') { - var child = selects[k3].children; - for (var i in child) { - if (child[i].tagName == 'OPTION') { - if (child[i].selected == true) { - child[i].setAttribute('selected', 'selected'); - } else { - child[i].removeAttribute('selected'); - } - } - } - } - } - return this.dom.outerHTML; - }, - - writeIframe: function(content, close) { - var w, - doc, - iframe = document.createElement('iframe'), - f = document.body.appendChild(iframe); - iframe.id = 'myIframe'; - iframe.style = 'position:absolute;'; - - w = f.contentWindow || f.contentDocument; - doc = f.contentDocument || f.contentWindow.document; - doc.open(); - doc.write(content); - doc.close(); - this.toPrint(w, close); - setTimeout(function() { - document.body.removeChild(iframe); - }, 500); - }, - - toPrint: function(frameWindow, close) { - try { - setTimeout(function() { - frameWindow.focus(); - try { - if (!frameWindow.document.execCommand('print', false, null)) { - frameWindow.print(); - } - } catch (e) { - frameWindow.print(); - } - frameWindow.close(); - if (close) { - window.close(); - } - }, 500); - } catch (err) { - console.log('err', err); - } - } -}; -const MyPlugin = {}; -MyPlugin.install = function(Vue, options) { - // 4. 添加实例方法 - Vue.prototype.$print = Print; -}; -export default MyPlugin; diff --git a/smart-admin-web/src/lib/render-dom.js b/smart-admin-web/src/lib/render-dom.js deleted file mode 100644 index 1cad207e..00000000 --- a/smart-admin-web/src/lib/render-dom.js +++ /dev/null @@ -1,10 +0,0 @@ -export default { - name: 'RenderDom', - functional: true, - props: { - render: Function - }, - render: (h, ctx) => { - return ctx.props.render(h); - } -}; diff --git a/smart-admin-web/src/lib/table-action.js b/smart-admin-web/src/lib/table-action.js deleted file mode 100644 index f9a541fc..00000000 --- a/smart-admin-web/src/lib/table-action.js +++ /dev/null @@ -1,84 +0,0 @@ -// 处理table操作按钮 -const tableAction = (h, array) => { - let btnArray = []; - let btnMore = []; - array.map((item, index) => { - if (index < 2) { - let btn = h( - 'a', - { - props: { - type: !index ? 'primary' : 'info', - size: 'small', - to: item.to ? item.to : '', - target: item.target ? item.target : '_self', - ghost: true - }, - style: { - marginLeft: '5px' - }, - directives: item.directives, - on: { - click: item.action - } - }, - item.title - ); - btnArray.push(btn); - } else { - btnMore.push( - h( - 'DropdownItem', - { - nativeOn: { - click: item.action - } - }, - item.title - ) - ); - } - }); - let dropdown = h( - 'Dropdown', - { - props: { - transfer: true - } - }, - [ - h( - 'a', - { - props: { - type: 'default', - size: 'small' - }, - style: { - marginLeft: '5px' - } - }, - [ - h('span', '更多'), - h('Icon', { - props: { - type: 'ios-arrow-down' - } - }) - ] - ), - h( - 'DropdownMenu', - { - slot: 'list' - }, - btnMore - ) - ] - ); - if (array.length > 2) { - btnArray.push(dropdown); - } - return btnArray; -}; -export default tableAction; diff --git a/smart-admin-web/src/lib/util.js b/smart-admin-web/src/lib/util.js deleted file mode 100644 index 6a3845b0..00000000 --- a/smart-admin-web/src/lib/util.js +++ /dev/null @@ -1,515 +0,0 @@ -import moment from 'moment'; -/** - * @param {String} url - * @description 从URL中解析参数 - */ -export const getParams = url => { - const keyValueArr = url.split('?')[1].split('&'); - let paramObj = {}; - keyValueArr.forEach(item => { - const keyValue = item.split('='); - paramObj[keyValue[0]] = keyValue[1]; - }); - return paramObj; -}; - -/** - * @param {Any} obj - * @description 获取数据类型 - */ -export const getType = obj => { - return {}.toString - .call(obj) - .match(/\s([a-zA-Z]+)/)[1] - .toLowerCase(); -}; -// 日期格式 -export const dateFormat = { - YMD: 'YMD', - YMDHM: 'YMDHM', - YMDHMS: 'YMDHMS' -}; -export const forEach = (arr, fn) => { - if (!arr.length || !fn) return; - let i = -1; - let len = arr.length; - while (++i < len) { - let item = arr[i]; - fn(item, i, arr); - } -}; - -/** - * @param {Array} arr1 - * @param {Array} arr2 - * @description 得到两个数组的交集, 两个数组的元素为数值或字符串 - */ -export const getIntersection = (arr1, arr2) => { - let len = Math.min(arr1.length, arr2.length); - let i = -1; - let res = []; - while (++i < len) { - const item = arr2[i]; - if (arr1.indexOf(item) > -1) res.push(item); - } - return res; -}; - -/** - * @param {Array} arr1 - * @param {Array} arr2 - * @description 得到两个数组的并集, 两个数组的元素为数值或字符串 - */ -export const getUnion = (arr1, arr2) => { - return Array.from(new Set([...arr1, ...arr2])); -}; - -/** - * @param {Array} target 目标数组 - * @param {Array} arr 需要查询的数组 - * @description 判断要查询的数组是否至少有一个元素包含在目标数组中 - */ -export const hasOneOf = (targetarr, arr) => { - return targetarr.some(_ => arr.indexOf(_) > -1); -}; - -/** - * @param {String|Number} value 要验证的字符串或数值 - * @param {*} validList 用来验证的列表 - */ -export function oneOf (value, validList) { - for (let i = 0; i < validList.length; i++) { - if (value === validList[i]) { - return true; - } - } - return false; -} - -/** - * @param {Number} timeStamp 判断时间戳格式是否是毫秒 - * @returns {Boolean} - */ -const isMillisecond = timeStamp => { - const timeStr = String(timeStamp); - return timeStr.length > 10; -}; - -/** - * @param {Number} timeStamp 传入的时间戳 - * @param {Number} currentTime 当前时间时间戳 - * @returns {Boolean} 传入的时间戳是否早于当前时间戳 - */ -const isEarly = (timeStamp, currentTime) => { - return timeStamp < currentTime; -}; - -/** - * @param {Number} num 数值 - * @returns {String} 处理后的字符串 - * @description 如果传入的数值小于10,即位数只有1位,则在前面补充0 - */ -const getHandledValue = num => { - return num < 10 ? '0' + num : num; -}; - -/** - * @param {Number} timeStamp 传入的时间戳 - * @param {Number} startType 要返回的时间字符串的格式类型,传入'year'则返回年开头的完整时间 - */ -const getDate = (timeStamp, startType) => { - const d = new Date(timeStamp * 1000); - const year = d.getFullYear(); - const month = getHandledValue(d.getMonth() + 1); - const date = getHandledValue(d.getDate()); - const hours = getHandledValue(d.getHours()); - const minutes = getHandledValue(d.getMinutes()); - const second = getHandledValue(d.getSeconds()); - let resStr = ''; - if (startType === 'year') { - resStr = - year + - '-' + - month + - '-' + - date + - ' ' + - hours + - ':' + - minutes + - ':' + - second; - } - else resStr = month + '-' + date + ' ' + hours + ':' + minutes; - return resStr; -}; - -/** - * @param {String|Number} timeStamp 时间戳 - * @returns {String} 相对时间字符串 - */ -export const getRelativeTime = timeStamp => { - // 判断当前传入的时间戳是秒格式还是毫秒 - const IS_MILLISECOND = isMillisecond(timeStamp); - // 如果是毫秒格式则转为秒格式 - if (IS_MILLISECOND) Math.floor((timeStamp /= 1000)); - // 传入的时间戳可以是数值或字符串类型,这里统一转为数值类型 - timeStamp = Number(timeStamp); - // 获取当前时间时间戳 - const currentTime = Math.floor(Date.parse(new Date()) / 1000); - // 判断传入时间戳是否早于当前时间戳 - const IS_EARLY = isEarly(timeStamp, currentTime); - // 获取两个时间戳差值 - let diff = currentTime - timeStamp; - // 如果IS_EARLY为false则差值取反 - if (!IS_EARLY) diff = -diff; - let resStr = ''; - const dirStr = IS_EARLY ? '前' : '后'; - // 少于等于59秒 - if (diff <= 59) resStr = diff + '秒' + dirStr; - // 多于59秒,少于等于59分钟59秒 - else if (diff > 59 && diff <= 3599) { resStr = Math.floor(diff / 60) + '分钟' + dirStr; } - // 多于59分钟59秒,少于等于23小时59分钟59秒 - else if (diff > 3599 && diff <= 86399) { resStr = Math.floor(diff / 3600) + '小时' + dirStr; } - // 多于23小时59分钟59秒,少于等于29天59分钟59秒 - else if (diff > 86399 && diff <= 2623859) { resStr = Math.floor(diff / 86400) + '天' + dirStr; } - // 多于29天59分钟59秒,少于364天23小时59分钟59秒,且传入的时间戳早于当前 - else if (diff > 2623859 && diff <= 31567859 && IS_EARLY) { resStr = getDate(timeStamp); } - else resStr = getDate(timeStamp, 'year'); - return resStr; -}; - -/** - * @returns {String} 当前浏览器名称 - */ -export const getExplorer = () => { - const ua = window.navigator.userAgent; - const isExplorer = exp => { - return ua.indexOf(exp) > -1; - }; - if (isExplorer('MSIE')) return 'IE'; - else if (isExplorer('Firefox')) return 'Firefox'; - else if (isExplorer('Chrome')) return 'Chrome'; - else if (isExplorer('Opera')) return 'Opera'; - else if (isExplorer('Safari')) return 'Safari'; -}; - -/** - * @description 绑定事件 on(element, event, handler) - */ -export const on = (function () { - if (document.addEventListener) { - return function (element, event, handler) { - if (element && event && handler) { - element.addEventListener(event, handler, false); - } - }; - } else { - return function (element, event, handler) { - if (element && event && handler) { - element.attachEvent('on' + event, handler); - } - }; - } -})(); - -/** - * @description 解绑事件 off(element, event, handler) - */ -export const off = (function () { - if (document.removeEventListener) { - return function (element, event, handler) { - if (element && event) { - element.removeEventListener(event, handler, false); - } - }; - } else { - return function (element, event, handler) { - if (element && event) { - element.detachEvent('on' + event, handler); - } - }; - } -})(); - -/** - * 判断一个对象是否存在key,如果传入第二个参数key,则是判断这个obj对象是否存在key这个属性 - * 如果没有传入key这个参数,则判断obj对象是否有键值对 - */ -export const hasKey = (obj, key) => { - if (key) return key in obj; - else { - let keysArr = Object.keys(obj); - return keysArr.length; - } -}; - -/** - * @param {*} obj1 对象 - * @param {*} obj2 对象 - * @description 判断两个对象是否相等,这两个对象的值只能是数字或字符串 - */ -export const objEqual = (obj1, obj2) => { - const keysArr1 = Object.keys(obj1); - const keysArr2 = Object.keys(obj2); - if (keysArr1.length !== keysArr2.length) return false; - else if (keysArr1.length === 0 && keysArr2.length === 0) return true; - /* eslint-disable-next-line */ else { return !keysArr1.some(key => obj1[key] != obj2[key]); } -}; - -// 相关工具类 -export const utils = { - /** - * @description table实现反选 - * @param {Object} vm Vue实例 - * @param {Array} tableSelectDate 选中的数据 - * @param {Array} allData 所有数据 - * @param {Array} key 数据中的唯一值 - */ - reverseSelect (vm, tableSelectDate, allData, key) { - let copyMess = JSON.parse(JSON.stringify(tableSelectDate)); - // 流程:先全部选中->再部分选中 - vm.handleSelectAll(false); - // 选中的idList - let idList = copyMess.map(item => item[key]); - console.log(idList); - for (let item of allData) { - if (idList.every(id => id !== item.id)) { - vm.$set(item, '_checked', true); - tableSelectDate.push(item); - } else { - vm.$set(item, '_checked', false); - } - } - }, - // 校验字符串是否相同 合同使用 - contrastString (originStr, changeStr) { - let origin = originStr - .replace(/\s*/g, '') - .replace(/"/g, '\'') - .replace(/ /g, '') - .replace(/disabled=\/'\/'/g, 'disabled'); - let change = changeStr - .replace(/\s*/g, '') - .replace(/"/g, '\'') - .replace(/ /g, '') - .replace(/disabled=\/'\/'/g, 'disabled'); - return origin === change; - }, - // 获取当前日期getDateStr(0)、前几天getDateStr(-10)、后几天getDateStr(20) - getDateStr (AddDayCount, format) { - let date = new Date(); - // 获取AddDayCount天后的日期 - date.setDate(date.getDate() + AddDayCount); - return this.getDate(date, format); - }, - getDate (date, format) { - let year = date.getFullYear(); - // day获取当前几号,不足10补0 - let day = date.getDate() > 9 ? date.getDate() : '0' + date.getDate(); - // month获取当前月份的日期,不足10补0 - let month = - date.getMonth() + 1 > 9 - ? date.getMonth() + 1 - : '0' + (date.getMonth() + 1); - // h获取当前小时,不足10补0 - let h = date.getHours() > 9 ? date.getHours() : '0' + date.getHours(); - // s获取当前分钟,不足10补0 - let m = date.getMinutes() > 9 ? date.getMinutes() : '0' + date.getMinutes(); - // s获取当前秒数,不足10补0 - let s = date.getSeconds() > 9 ? date.getSeconds() : '0' + date.getSeconds(); - let resultDate = ''; - if (format === dateFormat.YMD) { - resultDate = year + '-' + month + '-' + day; - } - if (format === dateFormat.YMDHM) { - resultDate = year + '-' + month + '-' + day + ' ' + h + ':' + m; - } - if (format === dateFormat.YMDHMS) { - resultDate = year + '-' + month + '-' + day + ' ' + h + ':' + m + ':' + s; - } - return resultDate; - }, - // 获取周一和周日日期,返回两种格式时间 - getDateWeek () { - let now = new Date(); - let nowTime = now.getTime(); - let day = now.getDay(); - let oneDayLong = 1000 * 60 * 60 * 24; - let MondayTime = nowTime - (day - 1) * oneDayLong; - let SundayTime = nowTime + (7 - day) * oneDayLong; - let monday = new Date(MondayTime); - let sunday = new Date(SundayTime); - return { - // first: this.getDateAll(monday), - // last: this.getDateAll(sunday), - firstDate: monday, - lastDate: sunday - }; - }, - // 获取月初与月末日期,返回两种时间格式 - getDateMonth () { - let dateFirter = new Date(); - let dateLast = new Date(); - dateFirter.setDate(1); - - let currentMonth = dateLast.getMonth(); - let nextMonth = ++currentMonth; - let nextMonthFirstDay = new Date(dateLast.getFullYear(), nextMonth, 1); - let oneDay = 1000 * 60 * 60 * 24; - dateLast = new Date(nextMonthFirstDay - oneDay); - - return { - // first: this.getDateAll(dateFirter), - // last: this.getDateAll(dateLast), - firstDate: dateFirter, - lastDate: dateLast - }; - }, - // 计算天数 - getDayBetweenDate (date) { - date = this.getDate(new Date(date), 'YMD'); - let startTime = Date.parse(new Date(date)); // IE支持“yyyy/MM/dd”格式 - let endTime = Date.parse(this.getDate(new Date(), 'YMD')); - let day = parseInt((endTime - startTime) / (1000 * 60 * 60 * 24)); - return day; - }, - getDateIntervalYear (firstDate, secondDate) { - if (!firstDate || !secondDate) { - return 0; - } - let first = new Date(firstDate); - let second = new Date(secondDate); - let firstYear = first.getFullYear(); - let secondYear = second.getFullYear(); - let intervalYear = secondYear - firstYear; - return intervalYear < 0 ? 0 : intervalYear; - }, - getDateIntervalYearFixed2 (firstDate, secondDate) { - if (!firstDate || !secondDate) { - return 0; - } - // 格式化时间 - let startDate = new Date(this.getDate(new Date(firstDate), 'YMD')); - let endDate = new Date(this.getDate(new Date(secondDate), 'YMD')); - // 得到毫秒值 - let startTime = Date.parse(startDate); - let endTime = Date.parse(endDate); - // 得到差了多少天 - let day = parseInt((endTime - startTime) / (1000 * 60 * 60 * 24)); - if (day <= 0) { - return 0; - } - // 得到差的多少年 保留两位小数 - let resultYear = parseFloat((day / (30 * 12)).toFixed(2)); - return resultYear; - }, - // 数字转化为中文大写 - // 代码如下所示: - convertCurrency (money) { - // 汉字的数字 - let cnNums = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']; - // 基本单位 - let cnIntRadice = ['', '拾', '佰', '仟']; - // 对应整数部分扩展单位 - let cnIntUnits = ['', '万', '亿', '兆']; - // 对应小数部分单位 - let cnDecUnits = ['角', '分', '毫', '厘']; - // 整数金额时后面跟的字符 - let cnInteger = '整'; - // 整型完以后的单位 - let cnIntLast = '元'; - // 最大处理的数字 - let maxNum = 999999999999999.9999; - // 金额整数部分 - let integerNum; - // 金额小数部分 - let decimalNum; - // 输出的中文金额字符串 - let chineseStr = ''; - // 分离金额后用的数组,预定义 - let parts; - if (money === '') { - return ''; - } - money = parseFloat(money); - if (money >= maxNum) { - // 超出最大处理数字 - return ''; - } - if (money === 0) { - chineseStr = cnNums[0] + cnIntLast + cnInteger; - return chineseStr; - } - // 转换为字符串 - money = money.toString(); - if (money.indexOf('.') === -1) { - integerNum = money; - decimalNum = ''; - } else { - parts = money.split('.'); - integerNum = parts[0]; - decimalNum = parts[1].substr(0, 4); - } - // 获取整型部分转换 - if (parseInt(integerNum, 10) > 0) { - let zeroCount = 0; - let IntLen = integerNum.length; - for (let i = 0; i < IntLen; i++) { - let n = integerNum.substr(i, 1); - let p = IntLen - i - 1; - let q = p / 4; - let m = p % 4; - if (n === '0') { - zeroCount++; - } else { - if (zeroCount > 0) { - chineseStr += cnNums[0]; - } - // 归零 - zeroCount = 0; - chineseStr += cnNums[parseInt(n)] + cnIntRadice[m]; - } - if (m === 0 && zeroCount < 4) { - chineseStr += cnIntUnits[q]; - } - } - chineseStr += cnIntLast; - } - // 小数部分 - if (decimalNum !== '') { - let decLen = decimalNum.length; - for (let i = 0; i < decLen; i++) { - let n = decimalNum.substr(i, 1); - if (n !== '0') { - chineseStr += cnNums[Number(n)] + cnDecUnits[i]; - } - } - } - if (chineseStr === '') { - chineseStr += cnNums[0] + cnIntLast + cnInteger; - } else if (decimalNum === '') { - chineseStr += cnInteger; - } - return chineseStr; - } -}; - - -export const dateTimeRangeConvert = (timerange) => { - // timerange - let arr = []; - if (timerange[0] === '') { - arr.push(null); - } else { - arr.push(moment(timerange[0]).format("YYYY-MM-DD 00:00:00")); - } - - if (timerange[1] === '') { - arr.push(null); - } else { - arr.push(moment(timerange[1]).format("YYYY-MM-DD 23:59:59")); - } - return arr; -} - diff --git a/smart-admin-web/src/locale/index.js b/smart-admin-web/src/locale/index.js deleted file mode 100644 index 5509260c..00000000 --- a/smart-admin-web/src/locale/index.js +++ /dev/null @@ -1,37 +0,0 @@ -import Vue from 'vue'; -import VueI18n from 'vue-i18n'; -import { localRead } from '@/lib/local'; -import customZhCn from './lang/zh-CN'; -import customZhTw from './lang/zh-TW'; -import customEnUs from './lang/en-US'; -import zhCnLocale from 'view-design/src/locale/lang/zh-CN'; -import enUsLocale from 'view-design/src/locale/lang/en-US'; -import zhTwLocale from 'view-design/src/locale/lang/zh-TW'; - -Vue.use(VueI18n); - -// 自动根据浏览器系统语言设置语言 -const navLang = navigator.language; -const localLang = (navLang === 'zh-CN' || navLang === 'en-US') ? navLang : false; -let lang = localLang || localRead('local') || 'zh-CN'; - -Vue.config.lang = lang; - -// vue-i18n 6.x+写法 -Vue.locale = () => { }; -const messages = { - 'zh-CN': Object.assign(zhCnLocale, customZhCn), - 'zh-TW': Object.assign(zhTwLocale, customZhTw), - 'en-US': Object.assign(enUsLocale, customEnUs) -}; -const i18n = new VueI18n({ - locale: lang, - messages -}); - -export default i18n; - -// vue-i18n 5.x写法 -// Vue.locale('zh-CN', Object.assign(zhCnLocale, customZhCn)) -// Vue.locale('en-US', Object.assign(zhTwLocale, customZhTw)) -// Vue.locale('zh-TW', Object.assign(enUsLocale, customEnUs)) diff --git a/smart-admin-web/src/locale/lang/en-US.js b/smart-admin-web/src/locale/lang/en-US.js deleted file mode 100644 index dc20d8f6..00000000 --- a/smart-admin-web/src/locale/lang/en-US.js +++ /dev/null @@ -1,46 +0,0 @@ -export default { - home: 'Home', - login: 'Login', - components: 'Components', - count_to_page: 'Count-to', - tables_page: 'Table', - split_pane_page: 'Split-pane', - markdown_page: 'Markdown-editor', - editor_page: 'Rich-Text-Editor', - icons_page: 'Custom-icon', - img_cropper_page: 'Image-editor', - update: 'Update', - doc: 'Document', - join_page: 'QQ Group', - update_table_page: 'Update .CSV', - update_paste_page: 'Paste Table Data', - multilevel: 'multilevel', - directive_page: 'Directive', - level_1: 'Level-1', - level_2: 'Level-2', - level_2_1: 'Level-2-1', - level_2_3: 'Level-2-3', - level_2_2: 'Level-2-2', - level_2_2_1: 'Level-2-2-1', - level_2_2_2: 'Level-2-2-2', - excel: 'Excel', - 'upload-excel': 'Upload Excel', - 'export-excel': 'Export Excel', - tools_methods_page: 'Tools Methods', - drag_list_page: 'Drag-list', - i18n_page: 'Internationalization', - modalTitle: 'Modal Title', - content: 'This is the modal box content.', - buttonText: 'Show Modal', - 'i18n-tip': 'Note: Only this page is multi-language, other pages do not add language content to the multi-language package.', - error_store_page: 'Error Collection', - error_logger_page: 'Error Logger', - query: 'Query', - params: 'Params', - cropper_page: 'Cropper', - message_page: 'Message Center', - tree_table_page: 'Tree Table', - org_tree_page: 'Org Tree', - drag_drawer_page: 'Draggable Drawer', - tree_select_page: 'Tree Selector' -} diff --git a/smart-admin-web/src/locale/lang/zh-CN.js b/smart-admin-web/src/locale/lang/zh-CN.js deleted file mode 100644 index 9e402562..00000000 --- a/smart-admin-web/src/locale/lang/zh-CN.js +++ /dev/null @@ -1,46 +0,0 @@ -export default { - home: '首页', - login: '登录', - components: '组件', - count_to_page: '数字渐变', - tables_page: '多功能表格', - split_pane_page: '分割窗口', - markdown_page: 'Markdown编辑器', - editor_page: '富文本编辑器', - icons_page: '自定义图标', - img_cropper_page: '图片编辑器', - update: '上传数据', - join_page: 'QQ群', - doc: '文档', - update_table_page: '上传CSV文件', - update_paste_page: '粘贴表格数据', - multilevel: '多级菜单', - directive_page: '指令', - level_1: 'Level-1', - level_2: 'Level-2', - level_2_1: 'Level-2-1', - level_2_3: 'Level-2-3', - level_2_2: 'Level-2-2', - level_2_2_1: 'Level-2-2-1', - level_2_2_2: 'Level-2-2-2', - excel: 'Excel', - 'upload-excel': '上传excel', - 'export-excel': '导出excel', - tools_methods_page: '工具函数', - drag_list_page: '拖拽列表', - i18n_page: '多语言', - modalTitle: '模态框题目', - content: '这是模态框内容', - buttonText: '显示模态框', - 'i18n-tip': '注:仅此页做了多语言,其他页面没有在多语言包中添加语言内容', - error_store_page: '错误收集', - error_logger_page: '错误日志', - query: '带参路由', - params: '动态路由', - cropper_page: '图片裁剪', - message_page: '消息中心', - tree_table_page: '树状表格', - org_tree_page: '组织结构树', - drag_drawer_page: '可拖动抽屉', - tree_select_page: '树状下拉选择器' -} diff --git a/smart-admin-web/src/locale/lang/zh-TW.js b/smart-admin-web/src/locale/lang/zh-TW.js deleted file mode 100644 index ce51c428..00000000 --- a/smart-admin-web/src/locale/lang/zh-TW.js +++ /dev/null @@ -1,46 +0,0 @@ -export default { - home: '首頁', - login: '登錄', - components: '组件', - count_to_page: '数字渐变', - tables_page: '多功能表格', - split_pane_page: '分割窗口', - markdown_page: 'Markdown編輯器', - editor_page: '富文本編輯器', - icons_page: '自定義圖標', - img_cropper_page: '圖片編輯器', - update: '上傳數據', - join_page: 'QQ群', - doc: '文檔', - update_table_page: '上傳CSV文件', - update_paste_page: '粘貼表格數據', - multilevel: '多级菜单', - directive_page: '指令', - level_1: 'Level-1', - level_2: 'Level-2', - level_2_1: 'Level-2-1', - level_2_3: 'Level-2-3', - level_2_2: 'Level-2-2', - level_2_2_1: 'Level-2-2-1', - level_2_2_2: 'Level-2-2-2', - excel: 'Excel', - 'upload-excel': '上傳excel', - 'export-excel': '導出excel', - tools_methods_page: '工具函數', - drag_list_page: '拖拽列表', - i18n_page: '多語言', - modalTitle: '模態框題目', - content: '這是模態框內容', - buttonText: '顯示模態框', - 'i18n-tip': '注:僅此頁做了多語言,其他頁面沒有在多語言包中添加語言內容', - error_store_page: '錯誤收集', - error_logger_page: '錯誤日誌', - query: '帶參路由', - params: '動態路由', - cropper_page: '圖片裁剪', - message_page: '消息中心', - tree_table_page: '樹狀表格', - org_tree_page: '組織結構樹', - drag_drawer_page: '可拖動抽屜', - tree_select_page: '樹狀下拉選擇器' -} diff --git a/smart-admin-web/src/main.js b/smart-admin-web/src/main.js deleted file mode 100644 index d213c7f2..00000000 --- a/smart-admin-web/src/main.js +++ /dev/null @@ -1,80 +0,0 @@ -// The Vue build version to load with the `import` command -// (runtime-only or standalone) has been set in webpack.base.conf with an alias. -import Vue from 'vue'; -import App from './App'; -import router from './router'; -import store from './store'; -import ViewUI from 'view-design'; -import i18n from '@/locale'; -import config from '@/config'; -import importDirective from '@/directives'; -import JsonViewer from 'vue-json-viewer'; -import _ from 'lodash'; -// import { directive as clickOutside } from 'v-click-outside-x'; -import * as vClickOutside from 'v-click-outside-x'; -import installPlugin from '@/plugins'; -import './themes/index.less'; -import '@/assets/icons/iconfont.css'; -import 'slick-carousel/slick/slick.css'; -import { Decimal } from 'decimal.js'; -// 枚举管理 -import Enum from 'vue-enum'; -import enumInfo from '@/constants'; -// 处理table操作按钮 -import tableAction from './lib/table-action'; - -// 时间 -import moment from 'moment'; - -import 'e-guide-layer/dist/e-guide-layer.css' -import eGuideLayer from 'e-guide-layer' - -Vue.use(eGuideLayer); - -Vue.prototype.$tableAction = tableAction; -Vue.use(Enum, { enumInfo }); -Vue.use(ViewUI, { - i18n: (key, value) => i18n.t(key, value) -}); -Vue.use(JsonViewer); -Vue.use(vClickOutside); - - -Number.prototype.toFixed = function (length) { - let x = new Decimal(this); - return x.toFixed(length); -}; - -//时间处理 -moment.locale('zh-cn'); //设置语言 或 moment.lang('zh-cn'); -Vue.prototype.$moment = moment;//赋值使用 - - -/** - * @description 注册admin内置插件 - */ -installPlugin(Vue); -/** - * @description 生产环境关掉提示 - */ -Vue.config.productionTip = false; -/** - * @description 全局注册应用配置 - */ -Vue.prototype.$config = config; -/** - * 注册指令 - */ -importDirective(Vue); -// Vue.directive('clickOutside', clickOutside); - -window._ = _; - -/* eslint-disable no-new */ -new Vue({ - el: '#app', - router, - i18n, - store, - render: h => h(App) -}); diff --git a/smart-admin-web/src/main.less b/smart-admin-web/src/main.less deleted file mode 100644 index 72a1a030..00000000 --- a/smart-admin-web/src/main.less +++ /dev/null @@ -1,37 +0,0 @@ -.warp-card { - margin-top: 10px; - &:first-child { - margin-top: 0; - } - .action-show { - .ivu-btn { - margin: 0 3px; - } - } - .action-hide { - .ivu-btn { - margin: 0 3px; - span { - //display: none; - } - } - } - .add-form { - padding-top: 15px; - } -} -.areaSelect .areaBox .areaArrow.active { - border-color: #689df6 !important; -} - -.areaSelect .areaBox .areaInput:hover, .areaSelect .areaBox .areaInput:focus { - border-color: #689df6 !important; -} - -.areaSelect .areaBox .areaModal ul li.active[data-v-16a01167] { - background: #fff !important; - color: #689df6 !important; -} -.main{ - .side-menu-wrapper .ivu-menu-dark .ivu-menu .ivu-menu-submenu-has-parent-submenu{ padding-left: 41px; } -} diff --git a/smart-admin-web/src/plugins/error-store/index.js b/smart-admin-web/src/plugins/error-store/index.js deleted file mode 100644 index c8b35b8f..00000000 --- a/smart-admin-web/src/plugins/error-store/index.js +++ /dev/null @@ -1,4 +0,0 @@ -import store from '@/store'; -export default { - install(Vue, options) {} -}; diff --git a/smart-admin-web/src/plugins/index.js b/smart-admin-web/src/plugins/index.js deleted file mode 100644 index 1a1c1870..00000000 --- a/smart-admin-web/src/plugins/index.js +++ /dev/null @@ -1,12 +0,0 @@ -import config from '@/config'; -const { plugin } = config; - -export default Vue => { - for (let name in plugin) { - const value = plugin[name]; - Vue.use( - require(`./${name}`).default, - typeof value === 'object' ? value : undefined - ); - } -}; diff --git a/smart-admin-web/src/router/before-close.js b/smart-admin-web/src/router/before-close.js deleted file mode 100644 index 0d4d61db..00000000 --- a/smart-admin-web/src/router/before-close.js +++ /dev/null @@ -1,17 +0,0 @@ -import { Modal } from 'view-design'; - -const beforeClose = { - before_close_normal: resolve => { - Modal.confirm({ - title: '确定要关闭这一页吗', - onOk: () => { - resolve(true); - }, - onCancel: () => { - resolve(false); - } - }); - } -}; - -export default beforeClose; diff --git a/smart-admin-web/src/router/index.js b/smart-admin-web/src/router/index.js deleted file mode 100644 index c86b14ee..00000000 --- a/smart-admin-web/src/router/index.js +++ /dev/null @@ -1,218 +0,0 @@ -import Vue from 'vue'; -import Router from 'vue-router'; -import { routers } from './routers'; -import store from '@/store'; -import ViewUI from 'view-design'; -import cookie from '@/lib/cookie'; -import { localRead } from '@/lib/local'; -import { setTitle } from '@/lib/menu-func'; -import config from '@/config'; - -const { homeName } = config; - -Vue.use(Router); -const router = new Router({ - // routes: routers, - routes: buildRouters(routers) - // mode: 'history' -}); -const LOGIN_PAGE_NAME = 'login'; - -// 防止用户刷新丢失登录信息 -if ( - Object.keys(store.state.user.userLoginInfo).length === 0 && - localRead('userLoginInfo') -) { - store.commit('setUserLoginInfo', JSON.parse(localRead('userLoginInfo'))); -} -// 解决路由跳转相同的地址报错 -const originalPush = Router.prototype.push; -Router.prototype.push = function (location) { - try { - return originalPush.call(this, location).catch(err => err); - } catch (error) { - // TODO zhuoda sentry - console.error(error); - } -}; - -// 关于当前页面 -Router.prototype.closeCurrentPage = function () { - let current = this.history.current; - store.commit('closeTag', current); - store.commit('deleteKeepAliveIncludes', current.name); -}; - -// 关闭当前页面然后跳转到指定页面 -Router.prototype.closeCurrentPageAndPush = function (pushParam) { - let current = this.history.current; - store.commit('closeTagNotPushNextRoute', current); - store.commit('deleteKeepAliveIncludes', current.name); - this.push(pushParam); -}; -let storeSelf = store; -router.beforeEach((to, from, next) => { - ViewUI.LoadingBar.start(); - const token = cookie.getToken(); - if (!token && to.name !== LOGIN_PAGE_NAME) { - // 未登录且要跳转的页面不是登录页 - next({ - name: LOGIN_PAGE_NAME // 跳转到登录页 - }); - } else if (!token && to.name === LOGIN_PAGE_NAME) { - // 未登陆且要跳转的页面是登录页 - next(); // 跳转 - } else if (token && to.name === LOGIN_PAGE_NAME) { - // 已登录且要跳转的页面是登录页 - next({ - // 跳转到home页 - name: homeName - }); - setTitle(to, router.app); - ViewUI.LoadingBar.finish(); - window.scrollTo(0, 0); - } else { - // 特殊页面直接放行 - if (to.meta.noValidatePrivilege) { - next(); - return; - } - - //如果是超管,直接放行 - if (store.state.user.userLoginInfo.isSuperMan) { - next(); - return; - } - - // 去掉/之后第一个字母 - let key = to.path.substr(1, 1); - let pathArray = storeSelf.state.user.privilegeRouterPathMap.get(key); - if (!(pathArray && pathArray.indexOf(to.path) >= 0)) { - next({ - name: 'Error401' - }); - } else { - next(); - } - } -}); - -router.afterEach(to => { - setTitle(to, router.app); - ViewUI.LoadingBar.finish(); - window.scrollTo(0, 0); -}); - -function buildRouters (routerArray) { - let lineRouters = []; - for (let routerItem of routerArray) { - //如果是顶层菜单 - if (routerItem.meta.topMenu) { - // for (let children of routerItem.children) { - let lineRouterArray = convertRouterTree2Line(routerItem.children); - lineRouters.push(...lineRouterArray); - // } - } else { - let lineRouterArray = convertRouterTree2Line([routerItem]); - lineRouters.push(...lineRouterArray); - } - } - return lineRouters; -} - -function convertRouterTree2Line (routerArray) { - //一级,比如 人员管理 - let topArray = []; - for (let router1Item of routerArray) { - let level2Array = []; - //二级,比如员工管理 - if (router1Item.children) { - for (let level2Item of router1Item.children) { - - let level2ItemCopy = {}; - for (let property in level2Item) { - if ('children' !== property) { - level2ItemCopy[property] = level2Item[property]; - } - } - - //三级, - if (level2Item.children) { - level2Array.push(...level2Item.children) - } - - level2ItemCopy.children = []; - level2Array.push(level2Item); - } - } - - let newTopRouterItem = {}; - for (let property in router1Item) { - if ('children' !== property) { - newTopRouterItem[property] = router1Item[property]; - } - } - - newTopRouterItem.children = level2Array; - topArray.push(newTopRouterItem); - } - - return topArray; -} - -let tempCheckObj = { - checkRouterNameMap: new Map(), - checkRouterPathMap: new Map() -}; - -function recursionCheckRouter (routerArray) { - for (let routerItem of routerArray) { - if (!routerItem.name) { - console.error('没有配置router name', routerItem); - } else { - let existNameRouter = tempCheckObj.checkRouterNameMap.get( - routerItem.name - ); - if (typeof existNameRouter !== 'undefined') { - console.error('存在相同的router name', routerItem, existNameRouter); - } else { - tempCheckObj.checkRouterNameMap.set(routerItem.name, routerItem); - } - } - - if (!routerItem.path) { - console.error('没有配置router path', routerItem); - } else { - // path必须以 / 开头 - if (routerItem.path !== '*' && routerItem.path.indexOf('/') !== 0) { - console.error('path 没有以/开头 ', routerItem); - } - - let existPathRouter = tempCheckObj.checkRouterPathMap.get( - routerItem.path - ); - if (typeof existPathRouter !== 'undefined') { - console.error('存在相同的router path', routerItem, existPathRouter); - } else { - tempCheckObj.checkRouterPathMap.set(routerItem.path, routerItem); - } - } - - if (routerItem.children) { - recursionCheckRouter(routerItem.children); - } - } -} - -//如果是开发环境,需要检测router的规范性 -if (process.env.NODE_ENV === 'development') { - recursionCheckRouter(routers); - delete tempCheckObj.checkRouterNameMap; - delete tempCheckObj.checkRouterPathMap; -} - -const topMenuArray = routers.filter(e => e.meta.topMenu); -export { topMenuArray }; - -export default router; - diff --git a/smart-admin-web/src/router/module/business/email.js b/smart-admin-web/src/router/module/business/email.js deleted file mode 100644 index 55c00de7..00000000 --- a/smart-admin-web/src/router/module/business/email.js +++ /dev/null @@ -1,40 +0,0 @@ -import Main from '@/components/main'; -// 基础设置 -export const emailSetting = [ - { - path: '/email', - name: 'Email', - component: Main, - meta: { - title: '邮件管理', - icon: 'icon iconfont iconyoujianguanli' - }, - children: [ - // 发送email - { - path: '/email/email-list', - name: 'EmailList', - meta: { - title: '邮件管理', - privilege: [ - { title: '查询', name: 'email-query' }, - { title: '新增', name: 'email-add' }, - { title: '编辑', name: 'email-update' }, - { title: '删除', name: 'email-delete' } - ] - }, - component: () => import('@/views/business/email/email-list.vue') - }, - // 发送email - { - path: '/email/send-mail', - name: 'SendMail', - meta: { - title: '发送邮件', - privilege: [{ title: '发送', name: 'email-send' }] - }, - component: () => import('@/views/business/email/send-mail.vue') - } - ] - } -]; diff --git a/smart-admin-web/src/router/module/business/index.js b/smart-admin-web/src/router/module/business/index.js deleted file mode 100644 index cf9ef2e4..00000000 --- a/smart-admin-web/src/router/module/business/index.js +++ /dev/null @@ -1,29 +0,0 @@ - -import Main from '@/components/main'; - -import { peony } from './peony'; -import { emailSetting } from './email'; -import { keepAlive } from './keep-alive'; -import { notice } from './notice'; -import { threeRouter } from './three-router'; - -// 业务 -export const business = [ - { - path: '/business', - name: 'Business', - component: Main, - meta: { - title: '业务功能', - topMenu:true, - icon: 'icon iconfont iconyoujianguanli' - }, - children: [ - ...peony, - ...emailSetting, - ...keepAlive, - ...notice, - ...threeRouter - ] - } -]; diff --git a/smart-admin-web/src/router/module/business/keep-alive.js b/smart-admin-web/src/router/module/business/keep-alive.js deleted file mode 100644 index 98c5e044..00000000 --- a/smart-admin-web/src/router/module/business/keep-alive.js +++ /dev/null @@ -1,31 +0,0 @@ -import Main from '@/components/main'; -// 接口文档 -export const keepAlive = [ - { - path: '/keep-alive', - name: 'KeepAlive', - component: Main, - meta: { - title: 'KeepAlive', - icon: 'icon iconfont iconxitongshezhi' - }, - children: [ - { - path: '/keep-alive/content-list', - name: 'KeepAliveContentList', - meta: { - title: 'KeepAlive列表' - }, - component: () => import('@/views/business/keep-alive/content-list.vue') - }, - { - path: '/keep-alive/add-content', - name: 'KeepAliveAddContent', - meta: { - title: 'KeepAlive表单' - }, - component: () => import('@/views/business/keep-alive/add-content.vue') - } - ] - } -]; diff --git a/smart-admin-web/src/router/module/business/notice.js b/smart-admin-web/src/router/module/business/notice.js deleted file mode 100644 index c4ae9550..00000000 --- a/smart-admin-web/src/router/module/business/notice.js +++ /dev/null @@ -1,52 +0,0 @@ -import Main from '@/components/main'; -// 消息管理 -export const notice = [ - { - path: '/notice', - name: 'Notice', - component: Main, - meta: { - title: '消息管理', - icon: 'icon iconfont iconnews' - }, - children: [ - { - path: '/notice/notice-list', - name: 'NoticeList', - meta: { - title: '通知管理', - privilege: [ - { title: '查询', name: 'notice-query' }, - { title: '添加', name: 'notice-add' }, - { title: '修改', name: 'notice-edit' }, - { title: '删除', name: 'notice-delete' }, - { title: '详情', name: 'notice-detail' }, - { title: '发送', name: 'notice-send' } - ] - }, - component: () => import('@/views/business/notice/notice-list.vue') - }, - { - path: '/notice/person-notice', - name: 'PersonNotice', - meta: { - title: '个人消息', - privilege: [ - { title: '查询', name: 'person-notice-query' }, - { title: '详情', name: 'person-notice-detail' } - ] - }, - component: () => import('@/views/business/notice/person-notice.vue') - }, - { - path: '/notice/notice-detail', - name: 'NoticeDetail', - meta: { - title: '消息详情', - hideInMenu:true - }, - component: () => import('@/views/business/notice/notice-detail.vue') - } - ] - } -]; diff --git a/smart-admin-web/src/router/module/business/peony.js b/smart-admin-web/src/router/module/business/peony.js deleted file mode 100644 index aff33eac..00000000 --- a/smart-admin-web/src/router/module/business/peony.js +++ /dev/null @@ -1,49 +0,0 @@ -import Main from '@/components/main'; -// t_peony路由 -export const peony = [ - { - path: '/peony', - name: 'Peony', - component: Main, - meta: { - title: '牡丹管理', - icon: 'icon iconfont iconyoujianguanli' - }, - children: [ - // 牡丹花 列表 - { - path: '/peony/peony-list', - name: 'PeonyList', - meta: { - title: '牡丹花列表', - privilege: [ - { title: '查询', name: 'peony-list-query' }, - { title: '新增', name: 'peony-list-add' }, - { title: '编辑', name: 'peony-list-update' }, - { title: '批量删除', name: 'peony-list-batch-delete' }, - { title: '批量导出', name: 'peony-list-batch-export' }, - { title: '导出全部', name: 'peony-list-export-all' } - ] - }, - component: () => import('@/views/business/peony/peony-list.vue') - }, - // 牡丹花 列表 1 - { - path: '/peony/peony-list1', - name: 'PeonyList1', - meta: { - title: '牡丹花列表1', - privilege: [ - { title: '查询', name: 'peony1-list-query' }, - { title: '新增', name: 'peony1-list-add' }, - { title: '编辑', name: 'peony1-list-update' }, - { title: '批量删除', name: 'peony1-list-batch-delete' }, - { title: '批量导出', name: 'peony1-list-batch-export' }, - { title: '导出全部', name: 'peony1-list-export-all' } - ] - }, - component: () => import('@/views/business/peony/peony-list.vue') - } - ] - } -]; diff --git a/smart-admin-web/src/router/module/business/three-router.js b/smart-admin-web/src/router/module/business/three-router.js deleted file mode 100644 index bd958adc..00000000 --- a/smart-admin-web/src/router/module/business/three-router.js +++ /dev/null @@ -1,63 +0,0 @@ -import Main from '@/components/main'; -// 三级路由演示 -export const threeRouter = [ - { - path: '/three-router', - name: 'ThreeRouter', - component: Main, - meta: { - title: '三级路由', - icon: 'icon iconfont iconzujian' - }, - children: [ - // 最大支持到三级菜单 - { - path: '/three-router/level-two', - name: 'LevelTwo', - meta: { - title: '三级菜单' - }, - children: [ - { - path: '/three-router/level-two/level-three1', - name: 'ThreeLevelRouterView', - meta: { - title: '三级菜单子颗粒', - privilege: [ - { title: '添加', name: 'three-level-router-view-add' }, - { title: '查询', name: 'three-level-router-view-query' }, - ] - }, - component: () => import('@/views/business/three-level-router/three-level-router-view.vue') - }, - { - path: '/three-router/level-two/level-three2', - name: 'RoleTwoTwo', - meta: { - title: '三级菜单子哈', - privilege: [ - { title: '添加', name: 'roleTwoTwo-add' }, - { title: '删除', name: 'roleTwoTwo-delete' }, - { title: '删除', name: 'roleTwoTwo-delete1' }, - { title: '删除', name: 'roleTwoTwo-delete2' }, - ] - }, - component: () => import('@/views/support/monitor/sql.vue') - } - ] - }, - { - path: '/three-router/level-two2', - name: 'RoleOneOne', - meta: { - title: '二级菜单', - privilege: [ - { title: '添加', name: 'roleOneOne-add' }, - { title: '删除', name: 'roleOneOne-delete' } - ] - }, - component: () => import('@/views/support/monitor/sql.vue') - } - ] - } -]; diff --git a/smart-admin-web/src/router/module/error.js b/smart-admin-web/src/router/module/error.js deleted file mode 100644 index 9ab50841..00000000 --- a/smart-admin-web/src/router/module/error.js +++ /dev/null @@ -1,33 +0,0 @@ -// 错误页 -export const error = [ - { - path: '/401', - name: 'Error401', - meta: { - hideInMenu: true, - access: true, - noValidatePrivilege: true - }, - component: () => import('@/views/error-page/401.vue') - }, - { - path: '/500', - name: 'Error500', - meta: { - hideInMenu: true, - access: true, - noValidatePrivilege: true - }, - component: () => import('@/views/error-page/500.vue') - }, - { - path: '*', - name: 'http://localhost:8080/#employee/role-employee-manage', - meta: { - hideInMenu: true, - access: true, - noValidatePrivilege: true - }, - component: () => import('@/views/error-page/404.vue') - } -]; diff --git a/smart-admin-web/src/router/module/home.js b/smart-admin-web/src/router/module/home.js deleted file mode 100644 index 87ca26a6..00000000 --- a/smart-admin-web/src/router/module/home.js +++ /dev/null @@ -1,29 +0,0 @@ -import Main from '@/components/main'; -// 首页 -export const home = [ - { - path: '/', - name: '_home', - redirect: '/home', - component: Main, - meta: { - title: '首页', - noKeepAlive: true, - hideInMenu: true, - noValidatePrivilege: true, - icon: 'icon iconfont iconxitongshezhi' - }, - children: [ - { - path: '/home', - name: 'Home', - meta: { - title: '首页', - noValidatePrivilege: true, - noKeepAlive: true - }, - component: () => import('@/views/home') - } - ] - } -]; diff --git a/smart-admin-web/src/router/module/support/api-doc.js b/smart-admin-web/src/router/module/support/api-doc.js deleted file mode 100644 index 8336078c..00000000 --- a/smart-admin-web/src/router/module/support/api-doc.js +++ /dev/null @@ -1,25 +0,0 @@ -import Main from '@/components/main'; -// 接口文档 -export const apiDoc = [ - { - path: '/api-doc', - component: Main, - name: 'ApiDoc', - meta: { - title: '接口文档', - icon: 'icon iconfont iconjiekouwendang' - }, - - children: [ - { - path: '/api-doc/swagger', - name: 'Swagger', - meta: { - title: 'Swagger接口文档', - icon: 'icon iconfont iconjiekouwendang' - }, - component: () => import('@/views/support/api-doc/swagger.vue') - } - ] - } -]; diff --git a/smart-admin-web/src/router/module/support/heart-beat.js b/smart-admin-web/src/router/module/support/heart-beat.js deleted file mode 100644 index 82e51a01..00000000 --- a/smart-admin-web/src/router/module/support/heart-beat.js +++ /dev/null @@ -1,31 +0,0 @@ -import Main from '@/components/main'; -// 心跳服务 -export const heartBeat = [ - { - path: '/heart-beat', - name: 'HeartBeat', - component: Main, - meta: { - title: '心跳服务', - icon: 'icon iconfont icondingshirenwu' - }, - - children: [ - { - path: '/heart-beat/heart-beat-list', - name: 'HeartBeatList', - meta: { - title: '心跳服务', - icon: 'icon iconfont icondingshirenwu', - privilege: [ - { - title: '查询任务', - name: 'heart-beat-query' - } - ] - }, - component: () => import('@/views/support/heart-beat/heart-beat-list.vue') - } - ] - } -]; diff --git a/smart-admin-web/src/router/module/support/index.js b/smart-admin-web/src/router/module/support/index.js deleted file mode 100644 index 0f1d4ad0..00000000 --- a/smart-admin-web/src/router/module/support/index.js +++ /dev/null @@ -1,30 +0,0 @@ - -import Main from '@/components/main'; - - -import { apiDoc } from './api-doc'; -import { heartBeat } from './heart-beat'; -import { monitor } from './monitor'; -import { reload } from './reload'; -import { task } from './task'; - -// 业务 -export const support = [ - { - path: '/support', - name: 'Support', - component: Main, - meta: { - title: '开发专用', - topMenu: true, - icon: 'icon iconfont iconjiekouwendang' - }, - children: [ - ...apiDoc, - ...heartBeat, - ...monitor, - ...reload, - ...task - ] - } -]; diff --git a/smart-admin-web/src/router/module/support/monitor.js b/smart-admin-web/src/router/module/support/monitor.js deleted file mode 100644 index 064ec831..00000000 --- a/smart-admin-web/src/router/module/support/monitor.js +++ /dev/null @@ -1,34 +0,0 @@ -import Main from '@/components/main'; -// 系统监控 -export const monitor = [ - { - path: '/monitor', - component: Main, - name: 'Monitor', - meta: { - title: '系统监控', - icon: 'icon iconfont iconxitongjiankong' - }, - children: [ - // 在线人数 - { - path: '/monitor/online-user', - name: 'OnlineUser', - meta: { - title: '在线人数', - privilege: [{ title: '查询', name: 'online-user-search' }] - }, - component: () => import('@/views/support/monitor/online-user.vue') - }, - // SQL监控 - { - path: '/monitor/sql', - name: 'Sql', - meta: { - title: 'SQL监控' - }, - component: () => import('@/views/support/monitor/sql.vue') - } - ] - } -]; diff --git a/smart-admin-web/src/router/module/support/reload.js b/smart-admin-web/src/router/module/support/reload.js deleted file mode 100644 index 929a10d5..00000000 --- a/smart-admin-web/src/router/module/support/reload.js +++ /dev/null @@ -1,40 +0,0 @@ -import Main from '@/components/main'; -// 动态加载 -export const reload = [ - { - path: '/reload', - name: 'Reload', - component: Main, - meta: { - title: '动态加载', - icon: 'icon iconfont icondongtaijiazai' - }, - - children: [ - { - path: '/reload/smart-reload-list', - name: 'SmartReloadList', - meta: { - title: 'SmartReload', - icon: 'icon iconfont icondongtaijiazai', - privilege: [ - { - title: '查询', - name: 'smart-reload-search' - }, - { - title: '执行reload', - name: 'smart-reload-update' - }, - { - title: '查看执行结果', - name: 'smart-reload-result' - } - ] - }, - component: () => - import('@/views/support/reload/smart-reload/smart-reload-list.vue') - } - ] - } -]; diff --git a/smart-admin-web/src/router/module/support/task.js b/smart-admin-web/src/router/module/support/task.js deleted file mode 100644 index 97b2c869..00000000 --- a/smart-admin-web/src/router/module/support/task.js +++ /dev/null @@ -1,63 +0,0 @@ -import Main from '@/components/main'; -// 任务调度 -export const task = [ - { - path: '/task', - name: 'Task', - component: Main, - meta: { - title: '定时任务', - icon: 'icon iconfont icondingshirenwu' - }, - - children: [ - { - path: '/system-setting/task-list', - name: 'TaskList', - meta: { - title: '任务管理', - icon: 'icon iconfont icondingshirenwu', - privilege: [ - { - title: '查询任务', - name: 'task-search' - }, - { - title: '刷新任务', - name: 'task-refresh' - }, - { - title: '添加任务', - name: 'task-add' - }, - { - title: '编辑任务', - name: 'task-update' - }, - { - title: '暂停任务', - name: 'task-pause' - }, - { - title: '恢复任务', - name: 'task-resume' - }, - { - title: '立即运行任务', - name: 'task-run' - }, - { - title: '查看任务日志', - name: 'task-query-log' - }, - { - title: '删除任务', - name: 'task-delete' - } - ] - }, - component: () => import('@/views/support/task/task-list.vue') - } - ] - } -]; diff --git a/smart-admin-web/src/router/module/system/employee.js b/smart-admin-web/src/router/module/system/employee.js deleted file mode 100644 index f01a9c6d..00000000 --- a/smart-admin-web/src/router/module/system/employee.js +++ /dev/null @@ -1,149 +0,0 @@ -import Main from '@/components/main'; -// 基础设置 -export const employee = [ - { - path: '/employee', - component: Main, - name: 'Employee', - meta: { - title: '人员管理', - icon: 'icon iconfont iconrenyuanguanli' - }, - children: [ - // 角色管理页面路由 - { - path: '/employee/role', - name: 'RoleManage', - meta: { - title: '角色管理', - privilege: [ - { - title: '添加角色', - name: 'add-role' - }, - { - title: '删除角色', - name: 'delete-role' - }, - { - title: '编辑角色', - name: 'update-role' - }, - { - title: '修改角色权限', - name: 'update-role-privilege' - }, - { - title: '添加成员', - name: 'add-employee-role' - }, - { - title: '移除成员', - name: 'delete-employee-role' - }, - { - title: '批量移除', - name: 'delete-employee-role-batch' - }, - { - title: '查询成员', - name: 'search-employee-list' - }, - { - title: '查询数据范围', - name: 'query-data-scope' - }, - { - title: '更新数据范围', - name: 'update-data-scope' - } - ] - }, - component: () => import('@/views/system/employee/role/role-manage.vue') - }, - // 岗位管理页面路由 新 - { - path: '/employee/position', - name: 'PositionList', - meta: { - title: '岗位管理', - privilege: [ - { - title: '查询', - name: 'search-position' - }, - { - title: '添加', - name: 'add-position' - }, - { - title: '修改', - name: 'update-position' - }, - { - title: '删除', - name: 'delete-position' - } - ] - }, - component: () => import('@/views/system/employee/position/position-list.vue') - }, - // 人员管理页面路由 - { - path: '/employee/role-employee-manage', - name: 'RoleEmployeeManage', - meta: { - title: '员工管理', - privilege: [ - { - title: '添加部门', - name: 'add-department' - }, - { - title: '编辑部门', - name: 'update-department' - }, - { - title: '删除部门', - name: 'delete-department' - }, - { - title: '查询', - name: 'search-department' - }, - { - title: '添加成员', - name: 'add-employee' - }, - { - title: '编辑成员', - name: 'update-employee' - }, - { - title: '禁用', - name: 'disabled-employee' - }, - { - title: '批量操作', - name: 'disabled-employee-batch' - }, - { - title: '员工角色编辑', - name: 'update-employee-role' - }, - { - title: '删除员工', - name: 'delete-employee' - }, - { - title: '重置密码', - name: 'reset-employee-password' - } - ] - }, - component: () => - import('@/views/system/employee/role-employee/role-employee-manage.vue') - } - ] - } -]; diff --git a/smart-admin-web/src/router/module/system/file.js b/smart-admin-web/src/router/module/system/file.js deleted file mode 100644 index 1d51b19a..00000000 --- a/smart-admin-web/src/router/module/system/file.js +++ /dev/null @@ -1,29 +0,0 @@ -import Main from '@/components/main'; -// 文件服务 -export const file = [ - { - path: '/file', - name: 'File', - component: Main, - meta: { - title: '文件服务', - icon: 'ios-cloud-upload' - }, - children: [ - { - path: '/file/file-list', - name: 'FileList', - meta: { - title: '文件列表', - icon: 'ios-cloud-upload', - privilege: [ - { title: '查询', name: 'file-filePage-query' }, - { title: '上传', name: 'file-filePage-upload' }, - { title: '下载', name: 'file-filePage-download' } - ] - }, - component: () => import('@/views/system/file/file-list.vue') - } - ] - } -]; diff --git a/smart-admin-web/src/router/module/system/index.js b/smart-admin-web/src/router/module/system/index.js deleted file mode 100644 index 1c5592c3..00000000 --- a/smart-admin-web/src/router/module/system/index.js +++ /dev/null @@ -1,28 +0,0 @@ - -import Main from '@/components/main'; - - -import { employee } from './employee'; -import { file } from './file'; -import { userLog } from './user-log'; -import { systemSetting } from './system-setting'; - -// 业务 -export const system = [ - { - path: '/system', - name: 'System', - component: Main, - meta: { - title: '系统设置', - topMenu: true, - icon: 'icon iconfont iconxitongshezhi' - }, - children: [ - ...employee, - ...file, - ...userLog, - ...systemSetting - ] - } -]; diff --git a/smart-admin-web/src/router/module/system/system-setting.js b/smart-admin-web/src/router/module/system/system-setting.js deleted file mode 100644 index 708cd3d7..00000000 --- a/smart-admin-web/src/router/module/system/system-setting.js +++ /dev/null @@ -1,65 +0,0 @@ -import Main from '@/components/main'; -// 基础设置 -export const systemSetting = [ - { - path: '/system-setting', - name: 'SystemSetting', - component: Main, - meta: { - title: '系统设置', - icon: 'icon iconfont iconxitongshezhi' - }, - - children: [ - { - path: '/system-setting/system-config', - name: 'SystemConfig', - meta: { - title: '系统参数', - privilege: [ - { - title: '查询系统参数', - name: 'system-params-search' - }, - { - title: '添加系统参数', - name: 'system-params-add' - }, - { - title: '修改系统参数', - name: 'system-config-update' - }, - { - title: '搜索系统参数', - name: 'system-config-search' - } - ] - }, - component: () => - import('@/views/system/system-setting/system-config/system-config.vue') - }, - { - path: '/system-setting/system-privilege', - name: 'SystemPrivilege', - meta: { - title: '菜单设置', - privilege: [ - { - title: '编辑', - name: 'privilege-main-update' - }, - { - title: '批量保存功能点', - name: 'privilege-batch-save-points' - }, - { - title: '查询', - name: 'privilege-main-search' - } - ] - }, - component: () => import('@/views/system/system-setting/system-privilege/system-privilege.vue') - } - ] - } -]; diff --git a/smart-admin-web/src/router/module/system/user-log.js b/smart-admin-web/src/router/module/system/user-log.js deleted file mode 100644 index 5d868c84..00000000 --- a/smart-admin-web/src/router/module/system/user-log.js +++ /dev/null @@ -1,42 +0,0 @@ -import Main from '@/components/main'; -// 用户日志 -export const userLog = [ - { - path: '/user-log', - name: 'UserLog', - component: Main, - meta: { - title: '用户日志', - icon: 'ios-paper-outline' - }, - children: [ - // 发送email - { - path: '/user-log/user-operate-log', - name: 'UserOperateLog', - meta: { - title: '用户操作日志', - privilege: [ - { title: '查询', name: 'user-operate-log-search' }, - { title: '详情', name: 'user-operate-log-detail' }, - { title: '删除', name: 'user-operate-log-delete' } - ] - }, - component: () => import('@/views/system/user-log/user-operate-log.vue') - }, - // 人员管理页面路由 - { - path: '/user-log/user-login-log', - name: 'UserLoginLog', - meta: { - title: '用户登录日志', - privilege: [ - { title: '查询', name: 'user-login-log-search' }, - { title: '删除', name: 'user-login-log-delete' } - ] - }, - component: () => import('@/views/system/user-log/user-login-log.vue') - } - ] - } -]; diff --git a/smart-admin-web/src/router/routers.js b/smart-admin-web/src/router/routers.js deleted file mode 100644 index afcb628c..00000000 --- a/smart-admin-web/src/router/routers.js +++ /dev/null @@ -1,43 +0,0 @@ -import { home } from './module/home'; -import { error } from './module/error'; -import { business } from './module/business'; -import { support } from './module/support'; -import { system } from './module/system'; - -/** - * - * meta除了原生参数外可配置的参数: - * meta: { - * title: { String|Number|Function } - * 显示在侧边栏、面包屑和标签栏的文字 - * 使用'{{ 多语言字段 }}'形式结合多语言使用,例子看多语言的路由配置; - * 可以传入一个回调函数,参数是当前路由对象,例子看动态路由和带参路由 - * hideInBread: (false) 设为true后此级路由将不会出现在面包屑中,示例看QQ群路由配置 - * hideInMenu: (false) 设为true后在左侧菜单不会显示该页面选项, - * privilegeExtend:{String} 同一功能模块下子页面的功能点权限继承菜单模块创建的路由权限 by lihaifan&lipeng - * noKeepAlive: (false) 设为true后页面在切换标签后不会缓存,如果需要缓存,无需设置这个字段,而且需要设置页面组件name属性和路由配置的name一致 - * noValidatePrivilege: (true) 表示此路由不需要验证权限 - * topMenu:(true),表示为顶级菜单 - * } - */ -// 登录模块 -export const login = { - path: '/login', - name: 'login', - meta: { - hideInMenu: true, - title: 'Login - 登录', - noValidatePrivilege: true - }, - component: () => import('@/views/login/login.vue') -}; - -// 全部路由 -export const routers = [ - login, - ...home, - ...error, - ...business, - ...system, - ...support -]; diff --git a/smart-admin-web/src/store/index.js b/smart-admin-web/src/store/index.js deleted file mode 100644 index 6883f539..00000000 --- a/smart-admin-web/src/store/index.js +++ /dev/null @@ -1,25 +0,0 @@ -import Vue from 'vue'; -import Vuex from 'vuex'; - -import user from './module/user'; -import app from './module/app'; -import notice from './module/notice'; - -Vue.use(Vuex); - -export default new Vuex.Store({ - state: { - // - }, - mutations: { - // - }, - actions: { - // - }, - modules: { - user, - notice, - app - } -}); diff --git a/smart-admin-web/src/store/module/app.js b/smart-admin-web/src/store/module/app.js deleted file mode 100644 index c19eade0..00000000 --- a/smart-admin-web/src/store/module/app.js +++ /dev/null @@ -1,129 +0,0 @@ -import { - getBreadCrumbList, - setTagNavListInLocalStorage, - getMenuByRouter, - getTagNavListFromLocalStorage, - getHomeRoute, - getNextRoute, - routeHasExist, - routeEqual, - getRouteTitleHandled -} from '@/lib/menu-func'; -import { localSave, localRead } from '@/lib/local'; -import router from '@/router'; -import { routers } from '@/router/routers'; -import config from '@/config'; -const { homeName } = config; -// 关闭页面+tag -const closePage = (state, route) => { - const nextRoute = getNextRoute(state.tagNavList, route); - state.tagNavList = state.tagNavList.filter(item => { - return !routeEqual(item, route); - }); - router.push(nextRoute); -}; - -export default { - state: { - // 缓存路由 - keepAliveIncludes: [], - // 面包屑列表 - breadCrumbList: [], - // tag列表 - tagNavList: [], - // 首页路由 - homeRoute: {}, - // 本地缓存 - local: localRead('local'), - // 错误列表 - errorList: [], - hasReadErrorPage: false - }, - getters: { - - errorCount: state => state.errorList.length - }, - mutations: { - // 加入缓存 - pushKeepAliveIncludes (state, val) { - if (state.keepAliveIncludes.length < 30) { - let number = state.keepAliveIncludes.findIndex(e => e === val); - if (number === -1) { - state.keepAliveIncludes.push(val); - } - } - }, - // 删除缓存 - deleteKeepAliveIncludes (state, val) { - let number = state.keepAliveIncludes.findIndex(e => e === val); - if (number !== -1) { - state.keepAliveIncludes.splice(number, 1); - } - }, - // 清空缓存 - clearKeepAliveIncludes (state, val) { - state.keepAliveIncludes = [val]; - }, - // 关闭其他 - deleteOtherKeepAliveIncludes (state, val) { - state.keepAliveIncludes.forEach((item, index, arr) => { - if (item !== config.homeName && item !== val) { - arr.splice(index, 1); - } - }); - }, - // 设置其是否出现在面包屑中 - setBreadCrumb (state, route) { - state.breadCrumbList = getBreadCrumbList(route, state.homeRoute); - }, - // 初始化首页使用 - setHomeRoute (state, routes) { - state.homeRoute = getHomeRoute(routes, homeName); - }, - // 设置tag列表 - setTagNavList (state, list) { - let tagList = []; - if (list) { - tagList = [...list]; - } else tagList = getTagNavListFromLocalStorage() || []; - if (tagList[0] && tagList[0].name !== homeName) tagList.shift(); - let homeTagIndex = tagList.findIndex(item => item.name === homeName); - if (homeTagIndex > 0) { - let homeTag = tagList.splice(homeTagIndex, 1)[0]; - tagList.unshift(homeTag); - } - state.tagNavList = tagList; - setTagNavListInLocalStorage([...tagList]); - }, - // 关闭tag - closeTag (state, route) { - let tag = state.tagNavList.filter(item => routeEqual(item, route)); - route = tag[0] ? tag[0] : null; - if (!route) return; - closePage(state, route); - }, - // 关闭当前tag,且不进行跳转 - closeTagNotPushNextRoute (state, route) { - state.tagNavList = state.tagNavList.filter(item => { - return !routeEqual(item, route); - }); - }, - // 新增tag - addTag (state, { route, type = 'unshift' }) { - let router = getRouteTitleHandled(route); - if (!routeHasExist(state.tagNavList, router)) { - if (type === 'push') state.tagNavList.push(router); - else { - if (router.name === homeName) state.tagNavList.unshift(router); - else state.tagNavList.splice(1, 0, router); - } - setTagNavListInLocalStorage([...state.tagNavList]); - } - }, - // 保存本地信息 - setLocal (state, lang) { - localSave('local', lang); - state.local = lang; - } - } -}; diff --git a/smart-admin-web/src/store/module/notice.js b/smart-admin-web/src/store/module/notice.js deleted file mode 100644 index 3cff149e..00000000 --- a/smart-admin-web/src/store/module/notice.js +++ /dev/null @@ -1,19 +0,0 @@ -import { noticeApi } from '@/api/notice'; -export default { - state: { - noticeList: [], - noticeNumber: 0 - }, - mutations: { - updateNotice(state, data) { - state.noticeList = [...state.noticeList, ...data]; - }, - updateNoticeNum(state, data) { - state.noticeNumber = data; - }, - restNotice(state) { - state.noticeList = []; - state.noticeNumber = 0; - } - } -}; diff --git a/smart-admin-web/src/store/module/user.js b/smart-admin-web/src/store/module/user.js deleted file mode 100644 index eb2ca10a..00000000 --- a/smart-admin-web/src/store/module/user.js +++ /dev/null @@ -1,122 +0,0 @@ -import cookie from '@/lib/cookie.js'; -import { loginApi } from '@/api/login'; -import { localSave, localRead } from '@/lib/local'; -import { getType } from '@/lib/util'; -import { PRIVILEGE_TYPE_ENUM } from '@/constants/privilege'; - -const localReadRouterPrivilege = () => { - let map = new Map(); - let userRouterPrivilegeString = localRead('userRouterPrivilege'); - if (userRouterPrivilegeString) { - let privilegeList = JSON.parse(userRouterPrivilegeString); - if (privilegeList) { - for (const path of privilegeList) { - let key = path.substr(1, 1); - let pathArray = map.get(key); - if (pathArray) { - pathArray.push(path); - } else { - pathArray = []; - pathArray.push(path); - map.set(key, pathArray); - } - } - } - } - return map; -}; - -export default { - state: { - token: cookie.getToken(), - // session信息 - userLoginInfo: {}, - isUpdatePrivilege: false, - // key为router name, value为 key的集合,用于v-privilege,页面功能点判断 - privilegeFunctionPointsMap: new Map(), - // 菜单key权限集合,用于左侧是否有菜单权限判断 - privilegeMenuKeyList: [], - /** - * key为 router path的首字母,value为集合 - * 这样做是为了提高查询效率,用于vue-router拦截判断path - */ - privilegeRouterPathMap: localReadRouterPrivilege() - - }, - mutations: { - // 设置token - setToken (state, token) { - state.token = token; - cookie.setToken(token); - }, - // 保存用户登录信息 - setUserLoginInfo (state, userLoginInfo) { - state.userLoginInfo = userLoginInfo; - localSave('userLoginInfo', JSON.stringify(userLoginInfo)); - }, - setUserPrivilege (state, privilegeList) { - state.isUpdatePrivilege = true; - let routerPathArray = []; - for (const privilege of privilegeList) { - // 是菜单权限 - if (privilege.type === PRIVILEGE_TYPE_ENUM.MENU.value) { - state.privilegeMenuKeyList.push(privilege.key); - if (privilege.url) { - routerPathArray.push(privilege.url); - // 去掉/之后第一个字母 - let key = privilege.url.substr(1, 1); - let pathArray = state.privilegeRouterPathMap.get(key); - if (pathArray) { - pathArray.push(privilege.url); - } else { - pathArray = []; - pathArray.push(privilege.url); - state.privilegeRouterPathMap.set(key, pathArray); - } - } - } - // 如果是功能点 - if (privilege.type === PRIVILEGE_TYPE_ENUM.POINTS.value) { - if (privilege.parentKey) { - let pointArray = state.privilegeFunctionPointsMap.get(privilege.parentKey); - if (pointArray) { - pointArray.push(privilege.key); - } else { - pointArray = []; - pointArray.push(privilege.key); - state.privilegeFunctionPointsMap.set(privilege.parentKey, pointArray); - } - } - } - } - localSave('userRouterPrivilege', JSON.stringify(routerPathArray)); - } - }, - getters: { - // 用户功能点权限 - userFuncPrivilegeInfo: () => localRead('funcPrivilegeInfo'), - // 用户菜单权限 - userMenuPrivilege: state => state.userLoginInfo.privilegeList - }, - actions: { - // 登录 - handleLogin ({ commit }, params) { - params.loginName = params.loginName.trim(); - return new Promise((resolve, reject) => { - loginApi - .login(params) - .then(res => { - localStorage.clear(); - const data = res.data; - commit('setToken', data.xaccessToken); - // 保存用户登录 - commit('setUserLoginInfo', data); - resolve(); - }) - .catch(err => { - reject(err); - }); - }); - } - } -}; diff --git a/smart-admin-web/src/themes/ReadMe.md b/smart-admin-web/src/themes/ReadMe.md deleted file mode 100644 index 57ab76e4..00000000 --- a/smart-admin-web/src/themes/ReadMe.md +++ /dev/null @@ -1 +0,0 @@ -这是配置主题及颜色的 diff --git a/smart-admin-web/src/themes/index.less b/smart-admin-web/src/themes/index.less deleted file mode 100644 index 6870d219..00000000 --- a/smart-admin-web/src/themes/index.less +++ /dev/null @@ -1,328 +0,0 @@ -@import '~view-design/src/styles/index.less'; -/************** - 导航栏 -**************/ -// 导航栏背景 -@menu-dark-title: #001529; -@menu-dark-active-bg: #000c17; -@layout-sider-background: #001529; -@primary-color: #2d8cf0; -@blue: #2d8cf0; -@blueA100: #2e3c5a; -@blueA200: #e7f3ff; -@blueA300: #f0f7fd; -@blueA400: #001529; -@garyA100: #f5f5f5; -@garyA200: #666; -@garyA300: #999; -@tableColor: #eee; -@black: #444; - -.side-menu-wrapper { - // 一级菜单 高亮颜色 - .ivu-menu-dark.ivu-menu-vertical .ivu-menu-item-active:not(.ivu-menu-submenu), - .ivu-menu-dark.ivu-menu-vertical .ivu-menu-submenu-title-active:not(.ivu-menu-submenu){ - color: #fff; - } - .ivu-menu-dark { - .ivu-menu { - .ivu-menu-submenu { - margin-bottom: 0; - } - - .ivu-menu-submenu-title { - padding: 8px 24px !important; - } - - .ivu-menu-submenu-has-parent-submenu { - padding-left: 51px; - } - - // 二级菜单 - .ivu-menu-item, - .ivu-menu-submenu-has-parent-submenu { - padding: 8px 0 9px 48px !important; - background: url('../assets/images/slider/sub_slider_default.png') 30px 0 - no-repeat !important; - - &:hover { - background: url('../assets/images/slider/sub_slider_default.png') 30px - 0 no-repeat !important; - } - - &.ivu-menu-item-active { - background: url('../assets/images/slider/sub_slider_active.png') 30px - 0 no-repeat !important; - border-right: 5px @primary-color solid; - - &:hover { - background: url('../assets/images/slider/sub_slider_active.png') - 30px 0 no-repeat !important; - border-right: 5px @primary-color solid; - } - } - } - .ivu-menu-submenu-has-parent-submenu { - padding-left: 31px !important; - .ivu-menu-submenu-title { - padding: 0 17px !important; - } - &.ivu-menu-child-item-active { - background: url('../assets/images/slider/sub_slider_active.png') 30px - 0 no-repeat !important; - border-right: 0; - } - .ivu-menu { - padding-top: 8px; - } - .ivu-menu-item, - .ivu-menu-item-active:hover { - background: none !important; - padding-left: 32px !important; - } - } - } - } -} - -// 导航栏 -.menu-collapsed { - text-align: center; - padding-top: 0 !important; -} - -// 左侧导航收缩 -.ivu-layout-sider-collapsed { - .ivu-dropdown { - text-align: center; - line-height: 38px; - margin: 0px auto; - color: #515a6e; - - &:hover { - color: @primary-color; - } - } - .ivu-tooltip { - line-height: 38px; - } -} -// 收缩导航栏鼠标经过下拉 -.menu-dropdown { - width: 160px; - left: 65px !important; - background: #001529; - border-radius: 3px; - color: #fff; - .ivu-dropdown-item { - color: #fff; - height: 40px; - line-height: 40px; - padding: 0 20px; - box-sizing: border-box; - .menu-title { - // padding:5px 0; - } - &:hover { - background: none; - border-right: 4px @primary-color solid; - } - } -} -/************** - header -**************/ -@layout-header-height: 52px; - -//面包屑 -.ivu-breadcrumb { - color: #515a6e; -} - -.ivu-breadcrumb-item-separator { - color: #515a6e; -} - - -/************** - table -**************/ -@table-thead-bg: #F7F7F9; -@border-color-split: #F7F7F9; -// @border-color-base: #F7F7F9; - -.ivu-table { - height: auto; - - table { - border-spacing: 0; - width: 100%; - tr { - &.ivu-table-row-hover { - tr, td { - animation: tableHover 0.5s; - } - } - th, td { - border: 1px @tableColor solid; - border-left: 0; - border-top: 0; - text-align: center; - &.ivu-table-column-left { - text-align: left; - } - &:nth-child(1) { - border-left: 0; - } - .ivu-table-cell { - padding: 0 8px; - overflow: inherit; - } - .table-line { - background: @tableColor; - height: 1px; - margin: 8px -18px; - } - } - th { - color: @garyA200; - background: @garyA100; - height: 42px; - font-size: 14px; - color: #808080; - text-align: left; - } - td { - font-weight: normal; - padding: 2px 0; - height: 32px; - text-align: left; - font-size: 12px; - border-bottom: 1px solid #F7F7F9; - .ivu-table-cell-with-expand{ - height: 32px; - line-height: 32px; - } - } - } - } -} - -.ivu-table-body { - &::-webkit-scrollbar { - width: 10px; - height: 10px; - } -} - -.ivu-card-extra { - position: absolute; - right: 8px; - top: 8px; -} - -.ivu-card-head { - background: #fafafa; - border-radius: 4px 4px 0 0; - padding: 12px 16px; - font-size: 14px; - font-weight: bold; - .ivu-icon { - color: #666; - } -} - -.ivu-select-dropdown { - z-index: 10000; - &::-webkit-scrollbar { - width: 10px; - height: 10px; - } -} - -.ivu-dropdown-transfer, -.ivu-select-dropdown-transfer { - position: fixed; -} - -.ivu-table-fixed-body { - overflow: inherit; -} -.ivu-card{ - box-shadow: none !important; -} -// 表单类 -.ivu-btn{ - &:focus{ - box-shadow: none; - } -} - -.ivu-spin-fix{ - background-color: rgba(255, 255, 255, 0.3); -} - -// 重写字体大小 -.ivu-select, -.ivu-select-single .ivu-select-selection .ivu-select-placeholder, -.ivu-select-single .ivu-select-selection .ivu-select-selected-value, -.ivu-select-input, -.ivu-input, -textarea.ivu-input, -.ivu-btn, -.ivu-checkbox-wrapper, -.ivu-form .ivu-form-item-label{ - font-size: 12px; -} -.ivu-btn-large{ - font-size: 14px; -} -.ivu-select-item, -.ivu-dropdown-item{ - font-size: 12px !important; -} - -/****自定义样式***/ - -.search-card .ivu-form-item { - margin-bottom: 0px !important; -} - -.marginRight10{ - margin-right: 10px !important; -} -.marginLeft10{ - margin-left: 10px !important; -} - -.marginBottom10{ - margin-bottom: 10px !important; -} - -.float-right{ - float:right; -} - -.float-left{ - float:left; -} - -.error-color{ - color: #ed4014; -} - -.smart-query-card .ivu-card-body{ - padding: 10px !important; -} - -.smart-query-form-row:not(:first-child){ - margin-top: 8px; -} - -.smart-query-form-row span{ - margin-right: 8px; -} - -.smart-query-table-page{ - margin-top: 10px; -} \ No newline at end of file diff --git a/smart-admin-web/src/views/business/email/email-list.vue b/smart-admin-web/src/views/business/email/email-list.vue deleted file mode 100644 index 357998a8..00000000 --- a/smart-admin-web/src/views/business/email/email-list.vue +++ /dev/null @@ -1,214 +0,0 @@ - - - diff --git a/smart-admin-web/src/views/business/email/send-mail.vue b/smart-admin-web/src/views/business/email/send-mail.vue deleted file mode 100644 index d06261d9..00000000 --- a/smart-admin-web/src/views/business/email/send-mail.vue +++ /dev/null @@ -1,215 +0,0 @@ - - - - diff --git a/smart-admin-web/src/views/business/keep-alive/add-content.vue b/smart-admin-web/src/views/business/keep-alive/add-content.vue deleted file mode 100644 index 0c2290dd..00000000 --- a/smart-admin-web/src/views/business/keep-alive/add-content.vue +++ /dev/null @@ -1,94 +0,0 @@ - - - - diff --git a/smart-admin-web/src/views/business/keep-alive/content-list.vue b/smart-admin-web/src/views/business/keep-alive/content-list.vue deleted file mode 100644 index 11b34887..00000000 --- a/smart-admin-web/src/views/business/keep-alive/content-list.vue +++ /dev/null @@ -1,80 +0,0 @@ - - - - diff --git a/smart-admin-web/src/views/business/notice/notice-detail.vue b/smart-admin-web/src/views/business/notice/notice-detail.vue deleted file mode 100644 index 66687bda..00000000 --- a/smart-admin-web/src/views/business/notice/notice-detail.vue +++ /dev/null @@ -1,49 +0,0 @@ - - - diff --git a/smart-admin-web/src/views/business/notice/notice-list.vue b/smart-admin-web/src/views/business/notice/notice-list.vue deleted file mode 100644 index 8c129b19..00000000 --- a/smart-admin-web/src/views/business/notice/notice-list.vue +++ /dev/null @@ -1,369 +0,0 @@ - - - - diff --git a/smart-admin-web/src/views/business/notice/person-notice.vue b/smart-admin-web/src/views/business/notice/person-notice.vue deleted file mode 100644 index cc2fec01..00000000 --- a/smart-admin-web/src/views/business/notice/person-notice.vue +++ /dev/null @@ -1,221 +0,0 @@ - - - - - diff --git a/smart-admin-web/src/views/business/peony/components/peony-list-form.vue b/smart-admin-web/src/views/business/peony/components/peony-list-form.vue deleted file mode 100644 index 9f99862b..00000000 --- a/smart-admin-web/src/views/business/peony/components/peony-list-form.vue +++ /dev/null @@ -1,133 +0,0 @@ - - \ No newline at end of file diff --git a/smart-admin-web/src/views/business/peony/peony-list.vue b/smart-admin-web/src/views/business/peony/peony-list.vue deleted file mode 100644 index 8c0edaff..00000000 --- a/smart-admin-web/src/views/business/peony/peony-list.vue +++ /dev/null @@ -1,495 +0,0 @@ - - - diff --git a/smart-admin-web/src/views/business/three-level-router/three-level-router-view.vue b/smart-admin-web/src/views/business/three-level-router/three-level-router-view.vue deleted file mode 100644 index 2003c453..00000000 --- a/smart-admin-web/src/views/business/three-level-router/three-level-router-view.vue +++ /dev/null @@ -1,58 +0,0 @@ - - - - diff --git a/smart-admin-web/src/views/error-page/401.vue b/smart-admin-web/src/views/error-page/401.vue deleted file mode 100644 index 70b3c366..00000000 --- a/smart-admin-web/src/views/error-page/401.vue +++ /dev/null @@ -1,19 +0,0 @@ - - - diff --git a/smart-admin-web/src/views/error-page/404.vue b/smart-admin-web/src/views/error-page/404.vue deleted file mode 100644 index 291406f6..00000000 --- a/smart-admin-web/src/views/error-page/404.vue +++ /dev/null @@ -1,19 +0,0 @@ - - - diff --git a/smart-admin-web/src/views/error-page/500.vue b/smart-admin-web/src/views/error-page/500.vue deleted file mode 100644 index e2a6c249..00000000 --- a/smart-admin-web/src/views/error-page/500.vue +++ /dev/null @@ -1,19 +0,0 @@ - - - diff --git a/smart-admin-web/src/views/error-page/back-btn-group.vue b/smart-admin-web/src/views/error-page/back-btn-group.vue deleted file mode 100644 index 7966849b..00000000 --- a/smart-admin-web/src/views/error-page/back-btn-group.vue +++ /dev/null @@ -1,40 +0,0 @@ - - - diff --git a/smart-admin-web/src/views/error-page/error-content.vue b/smart-admin-web/src/views/error-page/error-content.vue deleted file mode 100644 index d81d965e..00000000 --- a/smart-admin-web/src/views/error-page/error-content.vue +++ /dev/null @@ -1,28 +0,0 @@ - - - diff --git a/smart-admin-web/src/views/error-page/error.less b/smart-admin-web/src/views/error-page/error.less deleted file mode 100644 index 63802459..00000000 --- a/smart-admin-web/src/views/error-page/error.less +++ /dev/null @@ -1,46 +0,0 @@ -.error-page{ - width: 100%; - height: 100%; - position: relative; - background: #f8f8f9; - .content-con{ - width: 700px; - height: 600px; - position: absolute; - left: 50%; - top: 50%; - transform: translate(-50%, -60%); - img{ - display: block; - width: 100%; - height: 100%; - } - .text-con{ - position: absolute; - left: 0px; - top: 0px; - h4{ - position: absolute; - left: 0px; - top: 0px; - font-size: 80px; - font-weight: 700; - color: #348EED; - } - h5{ - position: absolute; - width: 700px; - left: 0px; - top: 100px; - font-size: 20px; - font-weight: 700; - color: #67647D; - } - } - .back-btn-group{ - position: absolute; - right: 0px; - bottom: 20px; - } - } -} diff --git a/smart-admin-web/src/views/home/components/card.vue b/smart-admin-web/src/views/home/components/card.vue deleted file mode 100644 index 763eabf4..00000000 --- a/smart-admin-web/src/views/home/components/card.vue +++ /dev/null @@ -1,43 +0,0 @@ - - - - - diff --git a/smart-admin-web/src/views/home/components/chart-bar.vue b/smart-admin-web/src/views/home/components/chart-bar.vue deleted file mode 100644 index 8130be3c..00000000 --- a/smart-admin-web/src/views/home/components/chart-bar.vue +++ /dev/null @@ -1,140 +0,0 @@ - - - - - diff --git a/smart-admin-web/src/views/home/components/chart-funnel.vue b/smart-admin-web/src/views/home/components/chart-funnel.vue deleted file mode 100644 index dd076399..00000000 --- a/smart-admin-web/src/views/home/components/chart-funnel.vue +++ /dev/null @@ -1,106 +0,0 @@ - - - - - diff --git a/smart-admin-web/src/views/home/components/chart-gauge.vue b/smart-admin-web/src/views/home/components/chart-gauge.vue deleted file mode 100644 index 99750aa7..00000000 --- a/smart-admin-web/src/views/home/components/chart-gauge.vue +++ /dev/null @@ -1,87 +0,0 @@ - - - - - diff --git a/smart-admin-web/src/views/home/components/chart-line.vue b/smart-admin-web/src/views/home/components/chart-line.vue deleted file mode 100644 index d7aeed44..00000000 --- a/smart-admin-web/src/views/home/components/chart-line.vue +++ /dev/null @@ -1,123 +0,0 @@ - - - - - diff --git a/smart-admin-web/src/views/home/components/chart-pie.vue b/smart-admin-web/src/views/home/components/chart-pie.vue deleted file mode 100644 index 01037399..00000000 --- a/smart-admin-web/src/views/home/components/chart-pie.vue +++ /dev/null @@ -1,110 +0,0 @@ - - - - - diff --git a/smart-admin-web/src/views/home/components/home-circle.vue b/smart-admin-web/src/views/home/components/home-circle.vue deleted file mode 100644 index 903ec4e2..00000000 --- a/smart-admin-web/src/views/home/components/home-circle.vue +++ /dev/null @@ -1,41 +0,0 @@ - - - - - diff --git a/smart-admin-web/src/views/home/components/home-progress.vue b/smart-admin-web/src/views/home/components/home-progress.vue deleted file mode 100644 index dc9682a7..00000000 --- a/smart-admin-web/src/views/home/components/home-progress.vue +++ /dev/null @@ -1,59 +0,0 @@ - - - - - diff --git a/smart-admin-web/src/views/home/components/theme.json b/smart-admin-web/src/views/home/components/theme.json deleted file mode 100644 index 909b518a..00000000 --- a/smart-admin-web/src/views/home/components/theme.json +++ /dev/null @@ -1,490 +0,0 @@ -{ - "color": [ - "#2d8cf0", - "#19be6b", - "#ff9900", - "#E46CBB", - "#9A66E4", - "#ed3f14" - ], - "backgroundColor": "rgba(0,0,0,0)", - "textStyle": {}, - "title": { - "textStyle": { - "color": "#516b91" - }, - "subtextStyle": { - "color": "#93b7e3" - } - }, - "line": { - "itemStyle": { - "normal": { - "borderWidth": "2" - } - }, - "lineStyle": { - "normal": { - "width": "2" - } - }, - "symbolSize": "6", - "symbol": "emptyCircle", - "smooth": true - }, - "radar": { - "itemStyle": { - "normal": { - "borderWidth": "2" - } - }, - "lineStyle": { - "normal": { - "width": "2" - } - }, - "symbolSize": "6", - "symbol": "emptyCircle", - "smooth": true - }, - "bar": { - "itemStyle": { - "normal": { - "barBorderWidth": 0, - "barBorderColor": "#ccc" - }, - "emphasis": { - "barBorderWidth": 0, - "barBorderColor": "#ccc" - } - } - }, - "pie": { - "itemStyle": { - "normal": { - "borderWidth": 0, - "borderColor": "#ccc" - }, - "emphasis": { - "borderWidth": 0, - "borderColor": "#ccc" - } - } - }, - "scatter": { - "itemStyle": { - "normal": { - "borderWidth": 0, - "borderColor": "#ccc" - }, - "emphasis": { - "borderWidth": 0, - "borderColor": "#ccc" - } - } - }, - "boxplot": { - "itemStyle": { - "normal": { - "borderWidth": 0, - "borderColor": "#ccc" - }, - "emphasis": { - "borderWidth": 0, - "borderColor": "#ccc" - } - } - }, - "parallel": { - "itemStyle": { - "normal": { - "borderWidth": 0, - "borderColor": "#ccc" - }, - "emphasis": { - "borderWidth": 0, - "borderColor": "#ccc" - } - } - }, - "sankey": { - "itemStyle": { - "normal": { - "borderWidth": 0, - "borderColor": "#ccc" - }, - "emphasis": { - "borderWidth": 0, - "borderColor": "#ccc" - } - } - }, - "funnel": { - "itemStyle": { - "normal": { - "borderWidth": 0, - "borderColor": "#ccc" - }, - "emphasis": { - "borderWidth": 0, - "borderColor": "#ccc" - } - } - }, - "gauge": { - "itemStyle": { - "normal": { - "borderWidth": 0, - "borderColor": "#ccc" - }, - "emphasis": { - "borderWidth": 0, - "borderColor": "#ccc" - } - } - }, - "candlestick": { - "itemStyle": { - "normal": { - "color": "#edafda", - "color0": "transparent", - "borderColor": "#d680bc", - "borderColor0": "#8fd3e8", - "borderWidth": "2" - } - } - }, - "graph": { - "itemStyle": { - "normal": { - "borderWidth": 0, - "borderColor": "#ccc" - } - }, - "lineStyle": { - "normal": { - "width": 1, - "color": "#aaa" - } - }, - "symbolSize": "6", - "symbol": "emptyCircle", - "smooth": true, - "color": [ - "#2d8cf0", - "#19be6b", - "#f5ae4a", - "#9189d5", - "#56cae2", - "#cbb0e3" - ], - "label": { - "normal": { - "textStyle": { - "color": "#eee" - } - } - } - }, - "map": { - "itemStyle": { - "normal": { - "areaColor": "#f3f3f3", - "borderColor": "#516b91", - "borderWidth": 0.5 - }, - "emphasis": { - "areaColor": "rgba(165,231,240,1)", - "borderColor": "#516b91", - "borderWidth": 1 - } - }, - "label": { - "normal": { - "textStyle": { - "color": "#000" - } - }, - "emphasis": { - "textStyle": { - "color": "rgb(81,107,145)" - } - } - } - }, - "geo": { - "itemStyle": { - "normal": { - "areaColor": "#f3f3f3", - "borderColor": "#516b91", - "borderWidth": 0.5 - }, - "emphasis": { - "areaColor": "rgba(165,231,240,1)", - "borderColor": "#516b91", - "borderWidth": 1 - } - }, - "label": { - "normal": { - "textStyle": { - "color": "#000" - } - }, - "emphasis": { - "textStyle": { - "color": "rgb(81,107,145)" - } - } - } - }, - "categoryAxis": { - "axisLine": { - "show": true, - "lineStyle": { - "color": "#cccccc" - } - }, - "axisTick": { - "show": false, - "lineStyle": { - "color": "#333" - } - }, - "axisLabel": { - "show": true, - "textStyle": { - "color": "#999999" - } - }, - "splitLine": { - "show": true, - "lineStyle": { - "color": [ - "#eeeeee" - ] - } - }, - "splitArea": { - "show": false, - "areaStyle": { - "color": [ - "rgba(250,250,250,0.05)", - "rgba(200,200,200,0.02)" - ] - } - } - }, - "valueAxis": { - "axisLine": { - "show": true, - "lineStyle": { - "color": "#cccccc" - } - }, - "axisTick": { - "show": false, - "lineStyle": { - "color": "#333" - } - }, - "axisLabel": { - "show": true, - "textStyle": { - "color": "#999999" - } - }, - "splitLine": { - "show": true, - "lineStyle": { - "color": [ - "#eeeeee" - ] - } - }, - "splitArea": { - "show": false, - "areaStyle": { - "color": [ - "rgba(250,250,250,0.05)", - "rgba(200,200,200,0.02)" - ] - } - } - }, - "logAxis": { - "axisLine": { - "show": true, - "lineStyle": { - "color": "#cccccc" - } - }, - "axisTick": { - "show": false, - "lineStyle": { - "color": "#333" - } - }, - "axisLabel": { - "show": true, - "textStyle": { - "color": "#999999" - } - }, - "splitLine": { - "show": true, - "lineStyle": { - "color": [ - "#eeeeee" - ] - } - }, - "splitArea": { - "show": false, - "areaStyle": { - "color": [ - "rgba(250,250,250,0.05)", - "rgba(200,200,200,0.02)" - ] - } - } - }, - "timeAxis": { - "axisLine": { - "show": true, - "lineStyle": { - "color": "#cccccc" - } - }, - "axisTick": { - "show": false, - "lineStyle": { - "color": "#333" - } - }, - "axisLabel": { - "show": true, - "textStyle": { - "color": "#999999" - } - }, - "splitLine": { - "show": true, - "lineStyle": { - "color": [ - "#eeeeee" - ] - } - }, - "splitArea": { - "show": false, - "areaStyle": { - "color": [ - "rgba(250,250,250,0.05)", - "rgba(200,200,200,0.02)" - ] - } - } - }, - "toolbox": { - "iconStyle": { - "normal": { - "borderColor": "#999" - }, - "emphasis": { - "borderColor": "#666" - } - } - }, - "legend": { - "textStyle": { - "color": "#999999" - } - }, - "tooltip": { - "axisPointer": { - "lineStyle": { - "color": "#ccc", - "width": 1 - }, - "crossStyle": { - "color": "#ccc", - "width": 1 - } - } - }, - "timeline": { - "lineStyle": { - "color": "#8fd3e8", - "width": 1 - }, - "itemStyle": { - "normal": { - "color": "#8fd3e8", - "borderWidth": 1 - }, - "emphasis": { - "color": "#8fd3e8" - } - }, - "controlStyle": { - "normal": { - "color": "#8fd3e8", - "borderColor": "#8fd3e8", - "borderWidth": 0.5 - }, - "emphasis": { - "color": "#8fd3e8", - "borderColor": "#8fd3e8", - "borderWidth": 0.5 - } - }, - "checkpointStyle": { - "color": "#8fd3e8", - "borderColor": "rgba(138,124,168,0.37)" - }, - "label": { - "normal": { - "textStyle": { - "color": "#8fd3e8" - } - }, - "emphasis": { - "textStyle": { - "color": "#8fd3e8" - } - } - } - }, - "visualMap": { - "color": [ - "#516b91", - "#59c4e6", - "#a5e7f0" - ] - }, - "dataZoom": { - "backgroundColor": "rgba(0,0,0,0)", - "dataBackgroundColor": "rgba(255,255,255,0.3)", - "fillerColor": "rgba(167,183,204,0.4)", - "handleColor": "#a7b7cc", - "handleSize": "100%", - "textStyle": { - "color": "#333" - } - }, - "markPoint": { - "label": { - "normal": { - "textStyle": { - "color": "#eee" - } - }, - "emphasis": { - "textStyle": { - "color": "#eee" - } - } - } - } -} \ No newline at end of file diff --git a/smart-admin-web/src/views/home/home.vue b/smart-admin-web/src/views/home/home.vue deleted file mode 100644 index 99cdbac2..00000000 --- a/smart-admin-web/src/views/home/home.vue +++ /dev/null @@ -1,154 +0,0 @@ - - - - - diff --git a/smart-admin-web/src/views/home/index.js b/smart-admin-web/src/views/home/index.js deleted file mode 100644 index 5f66ed9d..00000000 --- a/smart-admin-web/src/views/home/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import home from './home.vue'; -export default home; diff --git a/smart-admin-web/src/views/login/canvas.js b/smart-admin-web/src/views/login/canvas.js deleted file mode 100644 index 67b21ffb..00000000 --- a/smart-admin-web/src/views/login/canvas.js +++ /dev/null @@ -1,289 +0,0 @@ -// 离子波浪 -export const lonWave = () => { - var starlings = function (n, r, t, o, e, u, i, f) { - var a = f.onSetup - void 0 === a && (a = null) - var v = f.onRepeat - void 0 === v && (v = null) - var c = f.modifier - void 0 === c && (c = null) - var l = f.perspective - void 0 === l && (l = 1) - var d = f.pixelRatio - void 0 === d && (d = 1) - var m = f.triangles - void 0 === m && (m = !1) - var s - var p - var y = r.length - var w = function (n, r) { - let t = s.createShader(n) - return s.shaderSource(t, r), s.compileShader(t), t - } - var b = function () { - for (var n = 0; n < o.length; n += 1) { - for (var r = s.createBuffer(), e = o[n], u = e.data(0, 0).length, i = new Float32Array(t * y * u), f = 0; f < t; f += 1) { - for (var a = e.data(f, t), v = f * y * u, l = 0; l < y; l += 1) { - for (var d = 0; d < u; d += 1) { - c !== null && e.name === c.attribute ? i[v] = c.value(i[v], a, d, l) : i[v] = a[d] - v += 1 - } - } - } - s.bindBuffer(s.ARRAY_BUFFER, r) - s.bufferData(s.ARRAY_BUFFER, i, s.STATIC_DRAW) - var m = s.getAttribLocation(p, o[n].name) - s.enableVertexAttribArray(m) - s.vertexAttribPointer(m, u, s.FLOAT, !1, !1, 0, 0) - } - } - var A = function () { - e.push({ - name: 'uMVP', - type: 'mat4' - }) - for (var n = 0; n < e.length; n += 1) { - var r = s.getUniformLocation(p, e[n].name) - e[n].location = r - } - } - var F = { - float: function (n, r) { - return s.uniform1f(n, r) - }, - vec2: function (n, r) { - return s.uniform2fv(n, r) - }, - vec3: function (n, r) { - return s.uniform3fv(n, r) - }, - vec4: function (n, r) { - return s.uniform4fv(n, r) - }, - mat2: function (n, r) { - return s.uniformMatrix2fv(n, !1, r) - }, - mat3: function (n, r) { - return s.uniformMatrix3fv(n, !1, r) - }, - mat4: function (n, r) { - return s.uniformMatrix4fv(n, !1, r) - } - } - var g = function () { - s.clear(16640) - s.useProgram(p) - v !== null && v(s, p, e) - for (var n = 0; n < e.length; n += 1) F[e[n].type](e[n].location, e[n].value) - s.drawArrays(m ? s.TRIANGLES : s.POINTS, 0, y * t) - requestAnimationFrame(g) - } - var h = function () { - n.width = n.clientWidth * d - n.height = n.clientHeight * d - var r = s.drawingBufferWidth - var t = s.drawingBufferHeight - s.viewport(0, 0, r, t) - e[e.length - 1].value = [l / (r / t), 0, 0, 0, 0, l, 0, 0, 0, 0, -1, -1, 0, 0, 1, 1] - } - s = n.getContext('webgl') - p = s.createProgram() - s.attachShader(p, w(s.VERTEX_SHADER, u)) - s.attachShader(p, w(s.FRAGMENT_SHADER, i)) - s.linkProgram(p) - A() - h() - b() - a !== null && a(s) - g() - window.addEventListener('resize', h, !1) - } - - // Do you like rainbow waves? - var rainbow = false - - // Need more performance? - var HD = true - - var canvas = document.getElementById('canvas') - var background = document.querySelector('.background') - var bar = document.querySelector('.progress') - var initialize = function initialize (vertices) { - var pixelRatio = HD ? window.devicePixelRatio : 1 - var rows = HD ? 90 : 90 - var multiplier = rows * rows - var duration = 0.4 - var geometry = [{ - x: 0, - y: 0, - z: 0 - }] - var pointSize = (HD ? 6 : 2).toFixed(1) - - var step = 0.004 - var size = 5 - var attributes = [{ - name: 'aPositionStart', - data: function data (i, total) { - return [size - (i % rows / rows + 0.5 / rows) * (size * 2), -1, (size - (Math.floor(i / rows) / rows + 0.5 / rows) * size * 2) * -1] - } - }, - { - name: 'aControlPointOne', - data: function data (i) { - return [size - (i % rows / rows + 0.5 / rows) * (size * 2), -0.5 + getRandom(0.2), (size - (Math.floor(i / rows) / rows + 0.5 / rows) * size * 2) * -1] - } - }, - { - name: 'aControlPointTwo', - data: function data (i) { - return [size - (i % rows / rows + 0.5 / rows) * (size * 2), -0.5 + getRandom(0.2), (size - (Math.floor(i / rows) / rows + 0.5 / rows) * size * 2) * -1] - } - }, - { - name: 'aPositionEnd', - data: function data (i) { - return [size - (i % rows / rows + 0.5 / rows) * (size * 2), -1, (size - (Math.floor(i / rows) / rows + 0.5 / rows) * size * 2) * -1] - } - }, - { - name: 'aOffset', - data: function data (i) { - return [i * ((1 - duration) / (multiplier - 1))] - } - }, - { - name: 'aColor', - data: function data (i, total) { - return getHSL(rainbow ? i / total * 1.0 : 0.5 + i / total * 0.4, 0.5, 0.5) - } - }] - - var uniforms = [{ - name: 'uProgress', - type: 'float', - value: 0.8 - }] - - var vertexShader = '\n attribute vec3 aPositionStart;\n attribute vec3 aControlPointOne;\n attribute vec3 aControlPointTwo;\n attribute vec3 aPositionEnd;\n attribute float aOffset;\n attribute vec3 aColor;\n\n uniform float uProgress;\n uniform mat4 uMVP;\n\n varying vec3 vColor;\n\n vec3 bezier4(vec3 a, vec3 b, vec3 c, vec3 d, float t) {\n return mix(mix(mix(a, b, t), mix(b, c, t), t), mix(mix(b, c, t), mix(c, d, t), t), t);\n }\n\n float easeInOutQuint(float t){\n return t < 0.5 ? 16.0 * t * t * t * t * t : 1.0 + 16.0 * (--t) * t * t * t * t;\n }\n\n void main () {\n float tProgress = easeInOutQuint(min(1.0, max(0.0, (uProgress - aOffset)) / ' + duration + '));\n vec3 newPosition = bezier4(aPositionStart, aControlPointOne, aControlPointTwo, aPositionEnd, tProgress);\n gl_PointSize = ' + pointSize + ' + ((newPosition.y + 1.0) * 80.0);\n gl_Position = uMVP * vec4(newPosition, 1.0);\n vColor = aColor;\n }\n' - - var fragmentShader = '\n precision mediump float;\n\n varying vec3 vColor;\n\n void main() {\n vec2 pc = 2.0 * gl_PointCoord - 1.0;\n gl_FragColor = vec4(vColor, 1.0 - dot(pc, pc));\n }\n' - - var onSetup = function onSetup (gl) { - gl.blendFunc(gl.SRC_ALPHA, gl.ONE) - gl.enable(gl.BLEND) - } - - var onRepeat = function onRepeat () { - rotateY(uniforms[uniforms.length - 1].value, 0.002) - if (uniforms[0].value < 0) { - uniforms[0].value = 1 - } - uniforms[0].value -= step - } - - var options = { - onSetup: onSetup, - onRepeat: onRepeat, - pixelRatio: pixelRatio - } - - starlings(canvas, geometry, multiplier, attributes, uniforms, vertexShader, fragmentShader, options) - } - - var getRandom = function getRandom (value) { - return Math.random() * value - value / 2 - } - - var rotateY = function rotateY (matrix, angle) { - var sin = Math.sin(angle) - var cos = Math.cos(angle) - var clone = JSON.parse(JSON.stringify(matrix)) - - matrix[0] = clone[0] * cos - clone[8] * sin - matrix[1] = clone[1] * cos - clone[9] * sin - matrix[2] = clone[2] * cos - clone[10] * sin - matrix[3] = clone[3] * cos - clone[11] * sin - matrix[8] = clone[0] * sin + clone[8] * cos - matrix[9] = clone[1] * sin + clone[9] * cos - matrix[10] = clone[2] * sin + clone[10] * cos - matrix[11] = clone[3] * sin + clone[11] * cos - } - - var h2r = function h2r (p, q, t) { - if (t < 0) t += 1 - if (t > 1) t -= 1 - if (t < 1 / 6) return p + (q - p) * 6 * t - if (t < 1 / 2) return q - if (t < 2 / 3) return p + (q - p) * 6 * (2 / 3 - t) - return p - } - - var getHSL = function getHSL (h, s, l) { - h = (h % 1 + 1) % 1 - s = Math.max(0, Math.min(1, s)) - l = Math.max(0, Math.min(1, l)) - if (s === 0) return [l, l, l] - var p = l <= 0.5 ? l * (1 + s) : l + s - l * s - var q = 2 * l - p - return [h2r(q, p, h + 1 / 3), h2r(q, p, h), h2r(q, p, h - 1 / 3)] - } - initialize() -} - -// 随机线条 -export const canvasParticle = (function () { - function getElementByTag (name) { return document.getElementsByTagName(name) } - function getELementById (id) { return document.getElementById(id) } - function canvasInit (canvasConfig) { - canvasConfig = canvasConfig || {} - var html = getElementByTag('html')[0] - var body = document.getElementById('canvasView') - var canvasObj = document.createElement('canvas') - var canvas = { element: canvasObj, points: [], config: { vx: canvasConfig.vx || 4, vy: canvasConfig.vy || 4, height: canvasConfig.height || 2, width: canvasConfig.width || 2, count: canvasConfig.count || 100, color: canvasConfig.color || '121, 162, 185', stroke: canvasConfig.stroke || '130,255,255', dist: canvasConfig.dist || 6000, e_dist: canvasConfig.e_dist || 20000, max_conn: 10 } }; if (canvas.element.getContext('2d')) { canvas.context = canvas.element.getContext('2d') } else { return null } - body.style.padding = '0'; body.style.margin = '0'; body.appendChild(canvas.element); canvas.element.style = 'position: fixed; top: 0; left: 0; z-index: -1;'; canvasSize(canvas.element); window.onresize = function () { canvasSize(canvas.element) } - body.onmousemove = function (e) { var event = e || window.event; canvas.mouse = { x: event.clientX, y: event.clientY } } - document.onmouseleave = function () { canvas.mouse = undefined } - setInterval(function () { drawPoint(canvas) }, 40) - } - function canvasSize (canvas) { - var width = document.getElementById('canvasView').style.width - var height = document.getElementById('canvasView').style.height - width = parseInt(width); height = parseInt(height) - canvas.width = width || window.innerWeight || document.documentElement.clientWidth || document.body.clientWidth; canvas.height = height || window.innerWeight || document.documentElement.clientHeight || document.body.clientHeight - } - function drawPoint (canvas) { - var context = canvas.context - var point - var dist - context.clearRect(0, 0, canvas.element.width, canvas.element.height); context.beginPath(); context.fillStyle = 'rgb(' + canvas.config.color + ')'; for (var i = 0, len = canvas.config.count; i < len; i++) { - if (canvas.points.length != canvas.config.count) { point = { x: Math.floor(Math.random() * canvas.element.width), y: Math.floor(Math.random() * canvas.element.height), vx: canvas.config.vx / 2 - Math.random() * canvas.config.vx, vy: canvas.config.vy / 2 - Math.random() * canvas.config.vy } } else { point = borderPoint(canvas.points[i], canvas) } - context.fillRect(point.x - canvas.config.width / 2, point.y - canvas.config.height / 2, canvas.config.width, canvas.config.height); canvas.points[i] = point - } - drawLine(context, canvas, canvas.mouse); context.closePath() - } - function borderPoint (point, canvas) { - var p = point; if (point.x <= 0 || point.x >= canvas.element.width) { p.vx = -p.vx; p.x += p.vx } else if (point.y <= 0 || point.y >= canvas.element.height) { p.vy = -p.vy; p.y += p.vy } else { p = { x: p.x + p.vx, y: p.y + p.vy, vx: p.vx, vy: p.vy } } - return p - } - function drawLine (context, canvas, mouse) { - let dist - context = context || canvas.context; for (var i = 0, len = canvas.config.count; i < len; i++) { - canvas.points[i].max_conn = 0; for (var j = 0; j < len; j++) { - if (i != j) { - dist = Math.round(canvas.points[i].x - canvas.points[j].x) * Math.round(canvas.points[i].x - canvas.points[j].x) + - Math.round(canvas.points[i].y - canvas.points[j].y) * Math.round(canvas.points[i].y - canvas.points[j].y); if (dist <= canvas.config.dist && canvas.points[i].max_conn < canvas.config.max_conn) { - canvas.points[i].max_conn++; context.lineWidth = 0.5 - dist / canvas.config.dist; context.strokeStyle = 'rgba(' + canvas.config.stroke + ',' + (1 - dist / canvas.config.dist) + ')' - context.beginPath(); context.moveTo(canvas.points[i].x, canvas.points[i].y); context.lineTo(canvas.points[j].x, canvas.points[j].y); context.stroke() - } - } - } - if (mouse) { - dist = Math.round(canvas.points[i].x - mouse.x) * Math.round(canvas.points[i].x - mouse.x) + - Math.round(canvas.points[i].y - mouse.y) * Math.round(canvas.points[i].y - mouse.y); if (dist > canvas.config.dist && dist <= canvas.config.e_dist) { canvas.points[i].x = canvas.points[i].x + (mouse.x - canvas.points[i].x) / 20; canvas.points[i].y = canvas.points[i].y + (mouse.y - canvas.points[i].y) / 20 } - if (dist <= canvas.config.e_dist) { context.lineWidth = 1; context.strokeStyle = 'rgba(' + canvas.config.stroke + ',' + (1 - dist / canvas.config.e_dist) + ')'; context.beginPath(); context.moveTo(canvas.points[i].x, canvas.points[i].y); context.lineTo(mouse.x, mouse.y); context.stroke() } - } - } - } - return canvasInit -})() diff --git a/smart-admin-web/src/views/login/components/login-form.vue b/smart-admin-web/src/views/login/components/login-form.vue deleted file mode 100644 index b50ae0e6..00000000 --- a/smart-admin-web/src/views/login/components/login-form.vue +++ /dev/null @@ -1,134 +0,0 @@ - - diff --git a/smart-admin-web/src/views/login/login.less b/smart-admin-web/src/views/login/login.less deleted file mode 100644 index 82a52efc..00000000 --- a/smart-admin-web/src/views/login/login.less +++ /dev/null @@ -1,128 +0,0 @@ -.center { - text-align: center; -} - -.login { - font-family: Arial, "PingFang SC", "Microsoft YaHei"; - width: 100%; - height: 100%; - background: url(../../assets/images/login-bg.jpg) no-repeat fixed; - background-size: cover; - - .content { - width: 424px; - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -56%) - } - .ivu-card { - background: rgba(255, 255, 255, 0.95); - border-radius: 10px; - box-shadow: 5px 5px 15px rgba(0, 0, 0, 0.3); - } - .form-con { - margin: 32px 0; - width: 424px; - background: #fff; - padding: 32px 32px; - border-radius: 8px; - .ivu-input { - border: 1px solid #E8E8EE; - border-radius: 4px; - font-size: 16px; - color: #525252; - padding: 0 20px; - &:focus { - border: 1px solid #0097F6; - box-shadow: none; - } - } - .ivu-form-item-error-tip { - height: 30px; - line-height: 30px; - padding: 0; - color: #f66; - top:90%; - } - .ivu-form-item { - margin-bottom: 22px; - } - .remember { - margin: -10px 0 10px; - } - .ivu-input, - .ivu-btn { - height: 48px; - } - .ivu-btn { - font-size: 16px; - } - .ivu-input-group-prepend { - padding: 4px 15px; - } - .code-input { - width: 172px; - } - .codeUrl { - height: 80%; - position: absolute; - z-index: 3; - top: 0; - bottom: 0; - margin: auto; - right: 24px; - border-radius: 0 4px 4px 0; - cursor: pointer; - } - } - .login-tip { - font-size: 10px; - text-align: center; - color: #c3c3c3; - } - .footerDesc { - font-family: "MicrosoftYaHei"; - color: #A6A6A8; - font-size: 14px; - } - .otherWay { - font-size: 14px; - font-family: "Microsoft YaHei"; - .inline { - display: inline-block; - } - .align { - vertical-align: middle; - } - .marginLeft { - margin-left: 20px; - float:right; - } - } - .remember { - font-size: 14px; - } -} -.draw { - position: fixed; - width: 1px; - z-index: 99999; - line-height: 1px; - pointer-events: none; -} - -@keyframes floatOne { - 0% { - opacity: 1; - } - - 50% { - opacity: 1; - } - - 100% { - opacity: 0; - transform: translate3D(0, -20px, 0) scale(5) rotate(45deg); - } -} \ No newline at end of file diff --git a/smart-admin-web/src/views/login/login.vue b/smart-admin-web/src/views/login/login.vue deleted file mode 100644 index 0e529a15..00000000 --- a/smart-admin-web/src/views/login/login.vue +++ /dev/null @@ -1,52 +0,0 @@ - - - - diff --git a/smart-admin-web/src/views/support/api-doc/swagger.vue b/smart-admin-web/src/views/support/api-doc/swagger.vue deleted file mode 100644 index c05f5e73..00000000 --- a/smart-admin-web/src/views/support/api-doc/swagger.vue +++ /dev/null @@ -1,33 +0,0 @@ - - - diff --git a/smart-admin-web/src/views/support/heart-beat/heart-beat-list.vue b/smart-admin-web/src/views/support/heart-beat/heart-beat-list.vue deleted file mode 100644 index 1637378e..00000000 --- a/smart-admin-web/src/views/support/heart-beat/heart-beat-list.vue +++ /dev/null @@ -1,115 +0,0 @@ - - diff --git a/smart-admin-web/src/views/support/monitor/online-user.vue b/smart-admin-web/src/views/support/monitor/online-user.vue deleted file mode 100644 index b133c303..00000000 --- a/smart-admin-web/src/views/support/monitor/online-user.vue +++ /dev/null @@ -1,152 +0,0 @@ - - - - - diff --git a/smart-admin-web/src/views/support/monitor/sql.vue b/smart-admin-web/src/views/support/monitor/sql.vue deleted file mode 100644 index ced71bf8..00000000 --- a/smart-admin-web/src/views/support/monitor/sql.vue +++ /dev/null @@ -1,33 +0,0 @@ - - - diff --git a/smart-admin-web/src/views/support/reload/smart-reload/smart-reload-list.vue b/smart-admin-web/src/views/support/reload/smart-reload/smart-reload-list.vue deleted file mode 100644 index b0027c4c..00000000 --- a/smart-admin-web/src/views/support/reload/smart-reload/smart-reload-list.vue +++ /dev/null @@ -1,273 +0,0 @@ - - diff --git a/smart-admin-web/src/views/support/task/task-list.vue b/smart-admin-web/src/views/support/task/task-list.vue deleted file mode 100644 index d73e96be..00000000 --- a/smart-admin-web/src/views/support/task/task-list.vue +++ /dev/null @@ -1,556 +0,0 @@ - - - - - diff --git a/smart-admin-web/src/views/system/employee/components/department-employee-tree-item/department-employee-tree-item.vue b/smart-admin-web/src/views/system/employee/components/department-employee-tree-item/department-employee-tree-item.vue deleted file mode 100644 index 8f64b4d5..00000000 --- a/smart-admin-web/src/views/system/employee/components/department-employee-tree-item/department-employee-tree-item.vue +++ /dev/null @@ -1,124 +0,0 @@ - - - - diff --git a/smart-admin-web/src/views/system/employee/components/department-employee-tree/department-employee-tree.vue b/smart-admin-web/src/views/system/employee/components/department-employee-tree/department-employee-tree.vue deleted file mode 100644 index be1e3c5a..00000000 --- a/smart-admin-web/src/views/system/employee/components/department-employee-tree/department-employee-tree.vue +++ /dev/null @@ -1,251 +0,0 @@ - - - - diff --git a/smart-admin-web/src/views/system/employee/position/position-list.vue b/smart-admin-web/src/views/system/employee/position/position-list.vue deleted file mode 100644 index 98870609..00000000 --- a/smart-admin-web/src/views/system/employee/position/position-list.vue +++ /dev/null @@ -1,366 +0,0 @@ - - - - diff --git a/smart-admin-web/src/views/system/employee/role-employee/components/employee-table-add/employee-table-add.vue b/smart-admin-web/src/views/system/employee/role-employee/components/employee-table-add/employee-table-add.vue deleted file mode 100644 index e93daec4..00000000 --- a/smart-admin-web/src/views/system/employee/role-employee/components/employee-table-add/employee-table-add.vue +++ /dev/null @@ -1,527 +0,0 @@ - - - diff --git a/smart-admin-web/src/views/system/employee/role-employee/components/employee-table-detail/employee-table-detail.vue b/smart-admin-web/src/views/system/employee/role-employee/components/employee-table-detail/employee-table-detail.vue deleted file mode 100644 index a2cc214d..00000000 --- a/smart-admin-web/src/views/system/employee/role-employee/components/employee-table-detail/employee-table-detail.vue +++ /dev/null @@ -1,72 +0,0 @@ - - - diff --git a/smart-admin-web/src/views/system/employee/role-employee/components/employee-table/employee-table.vue b/smart-admin-web/src/views/system/employee/role-employee/components/employee-table/employee-table.vue deleted file mode 100644 index 9708e5fc..00000000 --- a/smart-admin-web/src/views/system/employee/role-employee/components/employee-table/employee-table.vue +++ /dev/null @@ -1,572 +0,0 @@ - - - diff --git a/smart-admin-web/src/views/system/employee/role-employee/role-employee-manage.vue b/smart-admin-web/src/views/system/employee/role-employee/role-employee-manage.vue deleted file mode 100644 index 034407a7..00000000 --- a/smart-admin-web/src/views/system/employee/role-employee/role-employee-manage.vue +++ /dev/null @@ -1,831 +0,0 @@ - - - - diff --git a/smart-admin-web/src/views/system/employee/role/components/role-data-scope/role-data-scope.vue b/smart-admin-web/src/views/system/employee/role/components/role-data-scope/role-data-scope.vue deleted file mode 100644 index 0413ce76..00000000 --- a/smart-admin-web/src/views/system/employee/role/components/role-data-scope/role-data-scope.vue +++ /dev/null @@ -1,144 +0,0 @@ - - - - diff --git a/smart-admin-web/src/views/system/employee/role/components/role-list/role-list.vue b/smart-admin-web/src/views/system/employee/role/components/role-list/role-list.vue deleted file mode 100644 index 55ab14c3..00000000 --- a/smart-admin-web/src/views/system/employee/role/components/role-list/role-list.vue +++ /dev/null @@ -1,407 +0,0 @@ - - - - diff --git a/smart-admin-web/src/views/system/employee/role/components/role-tree/role-tree.vue b/smart-admin-web/src/views/system/employee/role/components/role-tree/role-tree.vue deleted file mode 100644 index fe4eec67..00000000 --- a/smart-admin-web/src/views/system/employee/role/components/role-tree/role-tree.vue +++ /dev/null @@ -1,431 +0,0 @@ - - - - diff --git a/smart-admin-web/src/views/system/employee/role/role-manage.vue b/smart-admin-web/src/views/system/employee/role/role-manage.vue deleted file mode 100644 index 9765f362..00000000 --- a/smart-admin-web/src/views/system/employee/role/role-manage.vue +++ /dev/null @@ -1,339 +0,0 @@ - - - diff --git a/smart-admin-web/src/views/system/file/file-list.vue b/smart-admin-web/src/views/system/file/file-list.vue deleted file mode 100644 index 9f79d984..00000000 --- a/smart-admin-web/src/views/system/file/file-list.vue +++ /dev/null @@ -1,279 +0,0 @@ - - - diff --git a/smart-admin-web/src/views/system/system-setting/system-config/system-config.vue b/smart-admin-web/src/views/system/system-setting/system-config/system-config.vue deleted file mode 100644 index 0fd884a4..00000000 --- a/smart-admin-web/src/views/system/system-setting/system-config/system-config.vue +++ /dev/null @@ -1,397 +0,0 @@ - - - diff --git a/smart-admin-web/src/views/system/system-setting/system-privilege/components/privilege-form.vue b/smart-admin-web/src/views/system/system-setting/system-privilege/components/privilege-form.vue deleted file mode 100644 index f4454771..00000000 --- a/smart-admin-web/src/views/system/system-setting/system-privilege/components/privilege-form.vue +++ /dev/null @@ -1,144 +0,0 @@ - - - diff --git a/smart-admin-web/src/views/system/system-setting/system-privilege/system-privilege.vue b/smart-admin-web/src/views/system/system-setting/system-privilege/system-privilege.vue deleted file mode 100644 index ade7836b..00000000 --- a/smart-admin-web/src/views/system/system-setting/system-privilege/system-privilege.vue +++ /dev/null @@ -1,410 +0,0 @@ - - - diff --git a/smart-admin-web/src/views/system/user-log/user-login-log.vue b/smart-admin-web/src/views/system/user-log/user-login-log.vue deleted file mode 100644 index bc9b0928..00000000 --- a/smart-admin-web/src/views/system/user-log/user-login-log.vue +++ /dev/null @@ -1,185 +0,0 @@ - - - diff --git a/smart-admin-web/src/views/system/user-log/user-operate-log.vue b/smart-admin-web/src/views/system/user-log/user-operate-log.vue deleted file mode 100644 index db47df63..00000000 --- a/smart-admin-web/src/views/system/user-log/user-operate-log.vue +++ /dev/null @@ -1,252 +0,0 @@ - - - - - diff --git a/smart-admin-web/src/views/three-router/three-content.vue b/smart-admin-web/src/views/three-router/three-content.vue deleted file mode 100644 index eeac6f71..00000000 --- a/smart-admin-web/src/views/three-router/three-content.vue +++ /dev/null @@ -1,26 +0,0 @@ - - - diff --git a/smart-admin-web/tests/e2e/.eslintrc b/smart-admin-web/tests/e2e/.eslintrc deleted file mode 100644 index 02023fba..00000000 --- a/smart-admin-web/tests/e2e/.eslintrc +++ /dev/null @@ -1,12 +0,0 @@ -{ - "plugins": [ - "cypress" - ], - "env": { - "mocha": true, - "cypress/globals": true - }, - "rules": { - "strict": "off" - } -} diff --git a/smart-admin-web/tests/e2e/plugins/index.js b/smart-admin-web/tests/e2e/plugins/index.js deleted file mode 100644 index cfefc78b..00000000 --- a/smart-admin-web/tests/e2e/plugins/index.js +++ /dev/null @@ -1,9 +0,0 @@ -// https://docs.cypress.io/guides/guides/plugins-guide.html - -module.exports = (on, config) => Object.assign({}, config, { - fixturesFolder: 'tests/e2e/fixtures', - integrationFolder: 'tests/e2e/specs', - screenshotsFolder: 'tests/e2e/screenshots', - videosFolder: 'tests/e2e/videos', - supportFile: 'tests/e2e/support/index.js' -}) diff --git a/smart-admin-web/tests/e2e/specs/test.js b/smart-admin-web/tests/e2e/specs/test.js deleted file mode 100644 index 41ad94a0..00000000 --- a/smart-admin-web/tests/e2e/specs/test.js +++ /dev/null @@ -1,8 +0,0 @@ -// https://docs.cypress.io/api/introduction/api.html - -describe('My First Test', () => { - it('Visits the app root url', () => { - cy.visit('/') - cy.contains('h1', 'Welcome to Your Vue.js App') - }) -}) diff --git a/smart-admin-web/tests/e2e/support/commands.js b/smart-admin-web/tests/e2e/support/commands.js deleted file mode 100644 index c1f5a772..00000000 --- a/smart-admin-web/tests/e2e/support/commands.js +++ /dev/null @@ -1,25 +0,0 @@ -// *********************************************** -// This example commands.js shows you how to -// create various custom commands and overwrite -// existing commands. -// -// For more comprehensive examples of custom -// commands please read more here: -// https://on.cypress.io/custom-commands -// *********************************************** -// -// -// -- This is a parent command -- -// Cypress.Commands.add("login", (email, password) => { ... }) -// -// -// -- This is a child command -- -// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... }) -// -// -// -- This is a dual command -- -// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... }) -// -// -// -- This is will overwrite an existing command -- -// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) diff --git a/smart-admin-web/tests/e2e/support/index.js b/smart-admin-web/tests/e2e/support/index.js deleted file mode 100644 index d68db96d..00000000 --- a/smart-admin-web/tests/e2e/support/index.js +++ /dev/null @@ -1,20 +0,0 @@ -// *********************************************************** -// This example support/index.js is processed and -// loaded automatically before your test files. -// -// This is a great place to put global configuration and -// behavior that modifies Cypress. -// -// You can change the location of this file or turn off -// automatically serving support files with the -// 'supportFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/configuration -// *********************************************************** - -// Import commands.js using ES2015 syntax: -import './commands' - -// Alternatively you can use CommonJS syntax: -// require('./commands') diff --git a/smart-admin-web/tests/unit/.eslintrc.js b/smart-admin-web/tests/unit/.eslintrc.js deleted file mode 100644 index 8038afe9..00000000 --- a/smart-admin-web/tests/unit/.eslintrc.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - env: { - mocha: true - }, - rules: { - 'import/no-extraneous-dependencies': 'off' - } -} diff --git a/smart-admin-web/tests/unit/HelloWorld.spec.js b/smart-admin-web/tests/unit/HelloWorld.spec.js deleted file mode 100644 index bb668bf4..00000000 --- a/smart-admin-web/tests/unit/HelloWorld.spec.js +++ /dev/null @@ -1,13 +0,0 @@ -import { expect } from 'chai' -import { shallow } from '@vue/test-utils' -import HelloWorld from '@/components/HelloWorld.vue' - -describe('HelloWorld.vue', () => { - it('renders props.msg when passed', () => { - const msg = 'new message' - const wrapper = shallow(HelloWorld, { - propsData: { msg } - }) - expect(wrapper.text()).to.include(msg) - }) -}) diff --git a/smart-admin-web/vscode/settings.json b/smart-admin-web/vscode/settings.json deleted file mode 100644 index ab4bb79a..00000000 --- a/smart-admin-web/vscode/settings.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\cmd.exe", - "jetbrainsKeymap.promptV3Features": true, - "editor.multiCursorModifier": "ctrlCmd", - "editor.formatOnPaste": true, - "debug.allowBreakpointsEverywhere": true, - "files.autoSave": "afterDelay", - "workbench.colorTheme": "One Dark Pro", - "workbench.iconTheme": "vscode-icons", - "vetur.validation.template": false, - "[javascript]": { - "editor.defaultFormatter": "vscode.typescript-language-features" - }, - "[less]": { - "editor.defaultFormatter": "HookyQR.beautify" - }, - "javascript.format.insertSpaceBeforeFunctionParenthesis": true, - "eslint.autoFixOnSave": true, - "eslint.alwaysShowStatus": true, - "workbench.startupEditor": "newUntitledFile", - //"vetur.format.defaultFormatter.html": "js-beautify-html", - //"vetur.format.defaultFormatter.js": "vscode-typescript", //让vue中的js按编辑器自带的ts格式进行格式化 - "vetur.format.defaultFormatterOptions": { - // "js-beautify-html": { - // // force|force-aligned | force-expand-multiline - // "wrap_line_length": 100, - // "wrap_attributes": "auto", - // "end_with_newline": false - // //"wrap_attributes": "auto" - // }, - "prettyhtml": { - "printWidth": 100, - "singleQuote": false, - "wrapAttributes": false, - "sortAttributes": true - }, - "prettier": { - "semi": true, - "singleQuote": true - } - }, - "search.location": "panel", -} diff --git a/smart-admin-web/vue.config.js b/smart-admin-web/vue.config.js deleted file mode 100644 index af5bfbf7..00000000 --- a/smart-admin-web/vue.config.js +++ /dev/null @@ -1,77 +0,0 @@ -const path = require('path'); -const resolve = dir => { - return path.join(__dirname, dir); -}; -const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); -const CompressionWebpackPlugin = require('compression-webpack-plugin'); -const productionGzipExtensions = ['js', 'css']; -// 项目部署基础 -// 默认情况下,我们假设你的应用将被部署在域的根目录下, -// 例如:https://www.my-app.com/ -// 默认:'/' -// 如果您的应用程序部署在子路径中,则需要在这指定子路径 -// 例如:https://www.foobar.com/my-app/ -// 需要将它改为'/my-app/' -const publicPath = process.env.NODE_ENV === 'production' ? '/' : '/'; -const lintOnSave = process.env.NODE_ENV === 'production'; - -module.exports = { - // Project deployment base - // By default we assume your app will be deployed at the root of a domain, - // e.g. https://www.my-app.com/ - // If your app is deployed at a sub-path, you will need to specify that - // sub-path here. For example, if your app is deployed at - // https://www.foobar.com/my-app/ - // then change this to '/my-app/' - publicPath, - // tweak internal webpack configuration. - // see https://github.com/vuejs/vue-cli/blob/dev/docs/webpack.md - // 如果你不需要使用eslint,把lintOnSave设为false即可 - lintOnSave, - chainWebpack: config => { - config.entry = { - main: ['babel-polyfill', './src/main'], - vendors: './src/vendors' - }; - config.module - .rule('view-design') - .test(/view-design.src.*?js$/) - .use('babel') - .loader('babel-loader') - .end(); - config.resolve.alias - .set('@', resolve('src')) // key,value自行定义,比如.set('@@', resolve('src/components')) - .set('_c', resolve('src/components')); - }, - // 设为false打包时不生成.map文件 - productionSourceMap: false, - // 这里写你调用接口的基础路径,来解决跨域,如果设置了代理,那你本地开发环境的axios的baseUrl要写为 '' ,即空字符串 - // devServer: { - // proxy: 'localhost:3000' - // } - configureWebpack: { - plugins: [ - // 开启gzip压缩 - new CompressionWebpackPlugin({ - algorithm: 'gzip', - test: new RegExp('\\.(' + productionGzipExtensions.join('|') + ')$'), - threshold: 10240, - minRatio: 0.8 - }) - ], - optimization: { - minimizer: [ - new UglifyJsPlugin({ - uglifyOptions: { - compress: { - warnings: true, - drop_console: true, // console - drop_debugger: true, - pure_funcs: ['console.log'] // 移除console - } - } - }) - ] - } - } -}; diff --git a/smart_admin_v2.sql b/smart_admin_v2.sql new file mode 100644 index 00000000..66e86031 --- /dev/null +++ b/smart_admin_v2.sql @@ -0,0 +1,2071 @@ +-- -------------------------------------------------------- +-- 服务器版本: 8.0.23 - MySQL Community Server - GPL +-- 服务器操作系统: Linux +-- HeidiSQL 版本: 11.3.0.6295 +-- -------------------------------------------------------- + +-- 导出 smart_admin_v2 的数据库结构 +DROP DATABASE IF EXISTS `smart_admin_v2`; +CREATE DATABASE IF NOT EXISTS `smart_admin_v2` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci */ /*!80016 DEFAULT ENCRYPTION='N' */; +USE `smart_admin_v2`; + +-- 导出 表 smart_admin_v2.t_category 结构 +DROP TABLE IF EXISTS `t_category`; +CREATE TABLE IF NOT EXISTS `t_category` ( + `category_id` int NOT NULL AUTO_INCREMENT COMMENT '分类id', + `category_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '分类名称', + `category_type` smallint NOT NULL COMMENT '分类类型', + `parent_id` int NOT NULL COMMENT '父级id', + `sort` int NOT NULL DEFAULT '0' COMMENT '排序', + `disabled_flag` tinyint NOT NULL DEFAULT '0' COMMENT '是否禁用', + `deleted_flag` tinyint NOT NULL DEFAULT '0' COMMENT '是否删除', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL, + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`category_id`) USING BTREE, + KEY `idx_parent_id` (`parent_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=358 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='分类表,主要用于商品分类'; + +-- 正在导出表 smart_admin_v2.t_category 的数据:~11 rows (大约) +DELETE FROM `t_category`; +/*!40000 ALTER TABLE `t_category` DISABLE KEYS */; +INSERT INTO `t_category` (`category_id`, `category_name`, `category_type`, `parent_id`, `sort`, `disabled_flag`, `deleted_flag`, `remark`, `update_time`, `create_time`) VALUES + (1, '手机', 1, 0, 0, 0, 0, NULL, '2022-10-10 22:27:24', '2022-07-14 20:55:15'), + (2, '键盘', 1, 0, 0, 0, 0, NULL, '2022-09-14 21:39:00', '2022-07-14 20:55:48'), + (3, '自定义1', 2, 0, 0, 0, 0, NULL, '2022-09-14 22:01:06', '2022-07-14 20:56:03'), + (4, '自定义2', 2, 0, 0, 0, 0, NULL, '2022-09-14 22:01:10', '2022-07-14 20:56:09'), + (351, '鼠标', 1, 0, 0, 0, 0, NULL, '2022-09-14 21:39:06', '2022-09-14 21:39:06'), + (352, '苹果', 1, 1, 0, 0, 0, NULL, '2022-09-14 21:39:25', '2022-09-14 21:39:25'), + (353, '华为', 1, 1, 0, 0, 0, NULL, '2022-09-14 21:39:32', '2022-09-14 21:39:32'), + (354, 'IKBC', 1, 2, 0, 0, 0, NULL, '2022-09-14 21:39:38', '2022-09-14 21:39:38'), + (355, '双飞燕', 1, 2, 0, 0, 0, NULL, '2022-09-14 21:39:47', '2022-09-14 21:39:47'), + (356, '罗技', 1, 351, 0, 0, 0, NULL, '2022-09-14 21:39:57', '2022-09-14 21:39:57'), + (357, '小米', 1, 1, 0, 0, 0, NULL, '2022-10-10 22:27:39', '2022-10-10 22:27:39'); +/*!40000 ALTER TABLE `t_category` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_change_log 结构 +DROP TABLE IF EXISTS `t_change_log`; +CREATE TABLE IF NOT EXISTS `t_change_log` ( + `change_log_id` bigint NOT NULL AUTO_INCREMENT COMMENT '更新日志id', + `version` varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '版本', + `type` int NOT NULL COMMENT '更新类型:[1:特大版本功能更新;2:功能更新;3:bug修复]', + `publish_author` varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '发布人', + `public_date` date NOT NULL COMMENT '发布日期', + `content` text COLLATE utf8mb4_general_ci NOT NULL COMMENT '更新内容', + `link` text COLLATE utf8mb4_general_ci COMMENT '跳转链接', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`change_log_id`), + UNIQUE KEY `version_unique` (`version`) +) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='系统更新日志'; + +-- 正在导出表 smart_admin_v2.t_change_log 的数据:~3 rows (大约) +DELETE FROM `t_change_log`; +/*!40000 ALTER TABLE `t_change_log` DISABLE KEYS */; +INSERT INTO `t_change_log` (`change_log_id`, `version`, `type`, `publish_author`, `public_date`, `content`, `link`, `create_time`, `update_time`) VALUES + (2, 'v1.1.0', 2, '卓大', '2020-05-09', 'SmartAdmin中后台系统 v1.1.0 版本(20200422)正式更新上线,更新内容如下:\n\n1.【新增】增加员工姓名查询\n\n2.【新增】增加文件预览组件\n\n3.【新增】新增四级菜单\n', 'http://smartadmin.1024lab.net/views/1.x/base/About.html', '2022-10-10 11:27:31', '2022-10-19 14:41:09'), + (8, 'v1.0.0', 1, '卓大', '2019-11-01', 'SmartAdmin中后台系统 v1.0.0 版本(20191101)正式更新上线,更新内容如下:\n\n1.【新增】人员管理\n\n2.【新增】系统设置\n\n3.【新增】心跳服务\n\n4.【新增】动态加载\n\n5.【新增】缓存策略\n\n6.【新增】定时任务', 'http://smartadmin.1024lab.net/views/1.x/base/About.html', '2022-10-10 11:41:57', '2022-10-19 14:40:31'), + (9, 'v1.2.0', 2, '卓大', '2020-05-23', 'SmartAdmin中后台系统 v1.2.0 版本(20200515)正式更新上线,更新内容如下:\n\n1.【新增】增加数据权限\n\n2.【新增】帮助文档', NULL, '2022-10-19 14:40:03', '2022-10-19 14:40:03'), + (10, 'v1.2.1', 3, '卓大', '2020-05-24', 'SmartAdmin中后台系统 v1.2.1 版本(20200524)正式更新上线,更新内容如下:\n\n1.【修复】四级菜单权限bug\n\n2.【修复】缓存keepalive的Bug\n\n', NULL, '2022-10-22 13:39:57', '2022-10-22 13:39:57'), + (11, 'v1.3.0', 2, '卓大', '2020-06-01', 'SmartAdmin中后台系统 v1.3.0 版本(20200601)正式更新上线,更新内容如下:\n\n1.【新增】工作台看板功能\n\n2.【新增】天气预报功能\n\n3.【新增】记录上次登录IP功能', NULL, '2022-10-22 13:42:07', '2022-10-22 13:42:53'), + (12, 'v1.4.0', 2, '卓大', '2020-06-06', 'SmartAdmin中后台系统 v1.4.0 版本(20200606)正式更新上线,更新内容如下:\n\n1.【新增】联系客服功能\n\n2.【新增】意见反馈功能', NULL, '2022-10-22 13:43:20', '2022-10-22 13:43:31'), + (13, 'v1.5.0', 2, '卓大', '2020-06-14', 'SmartAdmin中后台系统 v1.5.0 版本(20200614)正式更新上线,更新内容如下:\n\n1.【新增】OA系统\n\n2.【新增】通知公告', NULL, '2022-10-22 13:45:04', '2022-10-22 13:45:14'), + (14, 'v1.6.0', 2, '卓大', '2020-06-17', 'SmartAdmin中后台系统 v1.6.0 版本(20200617)正式更新上线,更新内容如下:\n\n1.【新增】代码生成\n\n2.【新增】通知公告', NULL, '2022-10-22 13:45:44', '2022-10-22 13:46:03'), + (15, 'v2.0.0', 1, '卓大', '2022-10-22', 'SmartAdmin中后台系统 v2.0.0 版本(20191101)正式更新上线,更新内容如下:\n\n1.【新增】人员管理\n\n2.【新增】系统设置\n\n3.【新增】心跳服务\n\n4.【新增】动态加载\n\n5.【新增】缓存策略\n\n6.【新增】定时任务', 'http://smartadmin.1024lab.net/views/1.x/base/About.html', '2022-10-22 13:47:01', '2022-10-22 13:47:01'), + (16, 'v1.7.0', 2, '卓大', '2022-10-22', 'SmartAdmin中后台系统 v1.7.0 版本(20200624)正式更新上线,更新内容如下:\n\n1.【新增】商品管理\n\n2.【新增】商品分类', NULL, '2022-10-22 13:48:02', '2022-10-22 13:48:02'); +/*!40000 ALTER TABLE `t_change_log` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_code_generator_config 结构 +DROP TABLE IF EXISTS `t_code_generator_config`; +CREATE TABLE IF NOT EXISTS `t_code_generator_config` ( + `table_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '表名', + `basic` text COLLATE utf8mb4_general_ci COMMENT '基础命名信息', + `fields` text COLLATE utf8mb4_general_ci COMMENT '字段列表', + `insert_and_update` text COLLATE utf8mb4_general_ci COMMENT '新建、修改', + `delete_info` text COLLATE utf8mb4_general_ci COMMENT '删除', + `query_fields` text COLLATE utf8mb4_general_ci COMMENT '查询', + `table_fields` text COLLATE utf8mb4_general_ci COMMENT '列表', + `detail` text COLLATE utf8mb4_general_ci COMMENT '详情', + `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`table_name`) USING BTREE, + UNIQUE KEY `table_unique` (`table_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='代码生成器的每个表的配置'; + +-- 正在导出表 smart_admin_v2.t_code_generator_config 的数据:~3 rows (大约) +DELETE FROM `t_code_generator_config`; +/*!40000 ALTER TABLE `t_code_generator_config` DISABLE KEYS */; +/*!40000 ALTER TABLE `t_code_generator_config` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_config 结构 +DROP TABLE IF EXISTS `t_config`; +CREATE TABLE IF NOT EXISTS `t_config` ( + `config_id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `config_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '参数名字', + `config_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '参数key', + `config_value` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '上次修改时间', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`config_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统配置'; + +-- 正在导出表 smart_admin_v2.t_config 的数据:~3 rows (大约) +DELETE FROM `t_config`; +/*!40000 ALTER TABLE `t_config` DISABLE KEYS */; +INSERT INTO `t_config` (`config_id`, `config_name`, `config_key`, `config_value`, `remark`, `update_time`, `create_time`) VALUES + (1, '万能密码', 'super_password', 'sasasa', '建议定期修改', '2022-10-19 20:25:57', '2021-12-16 23:32:46'), + (2, '本地上传url前缀', 'local_upload_url_prefix', 'http://localhost/file/', NULL, '2022-05-20 23:28:38', '2022-03-22 13:36:01'), + (7, '登录失效时间(单位 小时)', 'login_expires_hour', '2', NULL, '2022-10-16 19:04:59', '2022-10-16 19:04:59'); +/*!40000 ALTER TABLE `t_config` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_data_tracer 结构 +DROP TABLE IF EXISTS `t_data_tracer`; +CREATE TABLE IF NOT EXISTS `t_data_tracer` ( + `data_tracer_id` bigint NOT NULL AUTO_INCREMENT, + `data_id` bigint NOT NULL COMMENT '各种单据的id', + `type` int NOT NULL COMMENT '单据类型', + `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '操作内容', + `diff_old` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '差异:旧的数据', + `diff_new` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '差异:新的数据', + `extra_data` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '额外信息', + `user_id` bigint NOT NULL COMMENT '用户id', + `user_type` int NOT NULL COMMENT '用户类型:1 后管用户 ', + `user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户名称', + `ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `user_agent` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`data_tracer_id`) USING BTREE, + KEY `order_id_order_type` (`data_id`,`type`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='各种单据操作记录'; + +-- 正在导出表 smart_admin_v2.t_data_tracer 的数据:~15 rows (大约) +DELETE FROM `t_data_tracer`; +/*!40000 ALTER TABLE `t_data_tracer` DISABLE KEYS */; +INSERT INTO `t_data_tracer` (`data_tracer_id`, `data_id`, `type`, `content`, `diff_old`, `diff_new`, `extra_data`, `user_id`, `user_type`, `user_name`, `ip`, `user_agent`, `update_time`, `create_time`) VALUES + (1, 49, 2, '新增', NULL, NULL, NULL, 1, 1, '管理员', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', '2022-10-22 14:27:33', '2022-10-22 14:27:33'), + (2, 50, 2, '新增', NULL, NULL, NULL, 1, 1, '管理员', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', '2022-10-22 14:29:56', '2022-10-22 14:29:56'), + (3, 51, 2, '新增', NULL, NULL, NULL, 1, 1, '管理员', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', '2022-10-22 14:30:46', '2022-10-22 14:30:46'), + (4, 52, 2, '新增', NULL, NULL, NULL, 1, 1, '管理员', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', '2022-10-22 14:33:03', '2022-10-22 14:33:03'), + (5, 53, 2, '新增', NULL, NULL, NULL, 1, 1, '管理员', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', '2022-10-22 14:34:56', '2022-10-22 14:34:56'), + (6, 54, 2, '新增', NULL, NULL, NULL, 1, 1, '管理员', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', '2022-10-22 14:36:10', '2022-10-22 14:36:10'), + (7, 55, 2, '新增', NULL, NULL, NULL, 1, 1, '管理员', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', '2022-10-22 14:37:57', '2022-10-22 14:37:57'), + (8, 56, 2, '新增', NULL, NULL, NULL, 1, 1, '管理员', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', '2022-10-22 14:40:45', '2022-10-22 14:40:45'), + (9, 57, 2, '新增', NULL, NULL, NULL, 1, 1, '管理员', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', '2022-10-22 14:46:00', '2022-10-22 14:46:00'), + (10, 58, 2, '新增', NULL, NULL, NULL, 1, 1, '管理员', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', '2022-10-22 14:47:12', '2022-10-22 14:47:12'), + (11, 58, 2, '', NULL, NULL, NULL, 1, 1, '管理员', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', '2022-10-22 14:47:26', '2022-10-22 14:47:26'), + (12, 59, 2, '新增', NULL, NULL, NULL, 1, 1, '管理员', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', '2022-10-22 14:50:12', '2022-10-22 14:50:12'), + (13, 17, 3, '新增', NULL, NULL, NULL, 44, 1, '卓大', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', '2022-10-22 14:57:36', '2022-10-22 14:57:36'), + (14, 18, 3, '新增', NULL, NULL, NULL, 1, 1, '管理员', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', '2022-10-22 17:03:35', '2022-10-22 17:03:35'), + (15, 2, 3, '新增银行:
银行信息ID:26
账户名称:"1024创新实验室"
禁用状态:false
开户银行:"工商银行"
备注:"基本户"
账号:"1024"
是否对公:true', NULL, NULL, NULL, 1, 1, '管理员', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', '2022-10-22 17:58:43', '2022-10-22 17:58:43'), + (16, 2, 3, '新增银行:
银行信息ID:27
账户名称:"1024创新实验室"
禁用状态:false
开户银行:"建设银行"
备注:"其他户"
账号:"10241"
是否对公:false', NULL, NULL, NULL, 1, 1, '管理员', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', '2022-10-22 17:59:19', '2022-10-22 17:59:19'), + (17, 2, 3, '新增发票:
禁用状态:false
开户行:"中国银行"
备注:""
银行账户:"1024lab"
开票抬头:"1024创新实验室"
纳税人识别号:"1024lab"', NULL, NULL, NULL, 1, 1, '管理员', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', '2022-10-22 17:59:35', '2022-10-22 17:59:35'), + (18, 2, 3, '修改企业信息', '统一社会信用代码:"1024lab"
详细地址:"1024大楼"
区县名称:"洛龙区"
禁用状态:false
类型:有限企业
城市名称:"洛阳市"
删除状态:false
联系人:"卓大"
省份名称:"河南省"
企业logo:"public/common/fb827d63dda74a60ab8b4f70cc7c7d0a_20221022145641_jpg"
联系人电话:"18637925892"
企业名称:"1024创新实验室"
邮箱:"lab1024@163.com"', '统一社会信用代码:"1024lab"
详细地址:"1024大楼"
区县名称:"洛龙区"
禁用状态:false
类型:有限企业
城市名称:"洛阳市"
删除状态:false
联系人:"卓大"
省份名称:"河南省"
企业logo:"public/common/fb827d63dda74a60ab8b4f70cc7c7d0a_20221022145641_jpg"
联系人电话:"18637925892"
企业名称:"1024创新实验室1"
邮箱:"lab1024@163.com"', NULL, 1, 1, '管理员', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', '2022-10-22 17:59:49', '2022-10-22 17:59:49'), + (19, 2, 3, '修改企业信息', '统一社会信用代码:"1024lab"
详细地址:"1024大楼"
区县名称:"洛龙区"
禁用状态:false
类型:有限企业
城市名称:"洛阳市"
删除状态:false
联系人:"卓大"
省份名称:"河南省"
企业logo:"public/common/fb827d63dda74a60ab8b4f70cc7c7d0a_20221022145641_jpg"
联系人电话:"18637925892"
企业名称:"1024创新实验室1"
邮箱:"lab1024@163.com"', '统一社会信用代码:"1024lab"
详细地址:"1024大楼"
区县名称:"洛龙区"
禁用状态:false
类型:有限企业
城市名称:"洛阳市"
删除状态:false
联系人:"卓大"
省份名称:"河南省"
企业logo:"public/common/fb827d63dda74a60ab8b4f70cc7c7d0a_20221022145641_jpg"
联系人电话:"18637925892"
企业名称:"1024创新实验室"
邮箱:"lab1024@163.com"', NULL, 1, 1, '管理员', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', '2022-10-22 17:59:52', '2022-10-22 17:59:52'); +/*!40000 ALTER TABLE `t_data_tracer` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_department 结构 +DROP TABLE IF EXISTS `t_department`; +CREATE TABLE IF NOT EXISTS `t_department` ( + `department_id` bigint NOT NULL AUTO_INCREMENT COMMENT '部门主键id', + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '部门名称', + `manager_id` bigint DEFAULT NULL COMMENT '部门负责人id', + `parent_id` bigint NOT NULL DEFAULT '0' COMMENT '部门的父级id', + `sort` int NOT NULL COMMENT '部门排序', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`department_id`) USING BTREE, + KEY `parent_id` (`parent_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='部门'; + +-- 正在导出表 smart_admin_v2.t_department 的数据:~4 rows (大约) +DELETE FROM `t_department`; +/*!40000 ALTER TABLE `t_department` DISABLE KEYS */; +INSERT INTO `t_department` (`department_id`, `name`, `manager_id`, `parent_id`, `sort`, `update_time`, `create_time`) VALUES + (1, '1024创新实验室', 1, 0, 1, '2022-10-19 20:17:09', '2022-10-19 20:17:09'), + (2, '开发部', 44, 1, 1000, '2022-10-19 20:22:23', '2022-10-19 20:22:23'), + (3, '产品部', 2, 1, 99, '2022-10-21 10:25:30', '2022-10-21 10:25:30'), + (4, '销售部', 64, 1, 9, '2022-10-21 10:25:47', '2022-10-21 10:25:47'); +/*!40000 ALTER TABLE `t_department` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_dict_key 结构 +DROP TABLE IF EXISTS `t_dict_key`; +CREATE TABLE IF NOT EXISTS `t_dict_key` ( + `dict_key_id` bigint NOT NULL AUTO_INCREMENT, + `key_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '编码', + `key_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注', + `deleted_flag` tinyint NOT NULL DEFAULT '0' COMMENT '删除状态', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`dict_key_id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='字段key'; + +-- 正在导出表 smart_admin_v2.t_dict_key 的数据:~1 rows (大约) +DELETE FROM `t_dict_key`; +/*!40000 ALTER TABLE `t_dict_key` DISABLE KEYS */; +INSERT INTO `t_dict_key` (`dict_key_id`, `key_code`, `key_name`, `remark`, `deleted_flag`, `update_time`, `create_time`) VALUES + (1, 'GODOS_PLACE', '商品产地', '商品产地的字典', 0, '2022-10-21 16:07:41', '2022-10-21 16:07:41'); +/*!40000 ALTER TABLE `t_dict_key` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_dict_value 结构 +DROP TABLE IF EXISTS `t_dict_value`; +CREATE TABLE IF NOT EXISTS `t_dict_value` ( + `dict_value_id` bigint NOT NULL AUTO_INCREMENT, + `dict_key_id` bigint NOT NULL, + `value_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '编码', + `value_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注', + `sort` int NOT NULL DEFAULT '0' COMMENT '排序', + `deleted_flag` tinyint NOT NULL DEFAULT '0' COMMENT '删除状态', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`dict_value_id`) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='字典的值'; + +-- 正在导出表 smart_admin_v2.t_dict_value 的数据:~3 rows (大约) +DELETE FROM `t_dict_value`; +/*!40000 ALTER TABLE `t_dict_value` DISABLE KEYS */; +INSERT INTO `t_dict_value` (`dict_value_id`, `dict_key_id`, `value_code`, `value_name`, `remark`, `sort`, `deleted_flag`, `update_time`, `create_time`) VALUES + (1, 1, 'LUO_YANG', '洛阳', '', 1, 0, '2022-10-21 16:07:54', '2022-10-21 16:07:54'), + (2, 1, 'ZHENG_ZHOU', '郑州', '', 1, 0, '2022-10-21 16:08:02', '2022-10-21 16:08:02'), + (3, 1, 'BEI_JING', '北京', '', 3, 0, '2022-10-21 19:13:03', '2022-10-21 16:08:22'); +/*!40000 ALTER TABLE `t_dict_value` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_employee 结构 +DROP TABLE IF EXISTS `t_employee`; +CREATE TABLE IF NOT EXISTS `t_employee` ( + `employee_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', + `login_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '登录帐号', + `login_pwd` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '登录密码', + `actual_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '员工名称', + `gender` tinyint(1) NOT NULL DEFAULT '0' COMMENT '性别', + `phone` varchar(15) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '手机号码', + `department_id` int NOT NULL COMMENT '部门id', + `disabled_flag` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '是否被禁用 0否1是', + `deleted_flag` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '是否删除0否 1是', + `administrator_flag` tinyint NOT NULL DEFAULT '0' COMMENT '是否为超级管理员: 0 不是,1是', + `remark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`employee_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=72 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='员工表'; + +-- 正在导出表 smart_admin_v2.t_employee 的数据:~12 rows (大约) +DELETE FROM `t_employee`; +/*!40000 ALTER TABLE `t_employee` DISABLE KEYS */; +INSERT INTO `t_employee` (`employee_id`, `login_name`, `login_pwd`, `actual_name`, `gender`, `phone`, `department_id`, `disabled_flag`, `deleted_flag`, `administrator_flag`, `remark`, `update_time`, `create_time`) VALUES + (1, 'admin', '40cc20b8891cd3fd1f008ea7f4ac17c3', '管理员', 0, '13500000000', 1, 0, 0, 1, NULL, '2022-10-22 19:33:02', '2018-05-11 09:38:54'), + (2, 'huke', '40cc20b8891cd3fd1f008ea7f4ac17c3', '胡克', 0, '13123123121', 1, 0, 0, 0, NULL, '2022-10-19 20:17:30', '2021-07-29 11:24:55'), + (44, 'zhuoda', '40cc20b8891cd3fd1f008ea7f4ac17c3', '卓大', 1, '18637925892', 1, 0, 0, 1, NULL, '2022-10-22 14:29:04', '2021-08-11 10:04:53'), + (47, 'shanyi', '40cc20b8891cd3fd1f008ea7f4ac17c3', '善逸', 1, '13123111123', 1, 0, 0, 0, NULL, '2022-10-19 20:19:50', '2021-08-16 17:14:55'), + (48, 'qinjiu', '40cc20b8891cd3fd1f008ea7f4ac17c3', '琴酒', 2, '14112343212', 2, 0, 0, 0, NULL, '2022-10-19 20:23:40', '2021-08-17 10:29:41'), + (63, 'kaiyun', '40cc20b8891cd3fd1f008ea7f4ac17c3', '开云', 0, '13112312346', 2, 0, 0, 0, NULL, '2022-10-19 20:23:40', '2022-06-03 22:41:55'), + (64, 'qingye', '40cc20b8891cd3fd1f008ea7f4ac17c3', '清野', 1, '13123123111', 2, 0, 0, 0, NULL, '2022-10-19 20:23:40', '2022-06-16 17:19:08'), + (65, 'feiye', '40cc20b8891cd3fd1f008ea7f4ac17c3', '飞叶', 1, '13123123112', 1, 0, 0, 0, NULL, '2022-09-15 16:51:09', '2022-06-16 17:24:18'), + (66, 'luoyi', '40cc20b8891cd3fd1f008ea7f4ac17c3', '罗伊', 1, '13123123142', 1, 1, 0, 0, NULL, '2022-09-15 16:51:19', '2022-06-16 17:24:56'), + (67, 'chuxiao', '7287168489ed5598741362cbec2b0741', '初晓', 1, '13123123123', 1, 0, 0, 0, NULL, '2022-09-17 15:42:42', '2022-06-16 17:28:32'), + (68, 'xuanpeng', '40cc20b8891cd3fd1f008ea7f4ac17c3', '玄朋', 1, '13123123124', 1, 0, 0, 0, NULL, '2022-09-15 16:51:43', '2022-06-16 17:30:17'), + (69, 'peixian', '40cc20b8891cd3fd1f008ea7f4ac17c3', '佩弦', 1, '18377482773', 1, 0, 0, 0, NULL, '2022-10-19 20:17:35', '2022-06-25 16:42:52'); +/*!40000 ALTER TABLE `t_employee` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_feedback 结构 +DROP TABLE IF EXISTS `t_feedback`; +CREATE TABLE IF NOT EXISTS `t_feedback` ( + `feedback_id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', + `feedback_content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '反馈内容', + `feedback_attachment` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '反馈图片', + `user_id` bigint NOT NULL COMMENT '创建人id', + `user_type` int NOT NULL COMMENT '创建人用户类型', + `user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建人姓名', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`feedback_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='意见反馈'; + +-- 正在导出表 smart_admin_v2.t_feedback 的数据:~0 rows (大约) +DELETE FROM `t_feedback`; +/*!40000 ALTER TABLE `t_feedback` DISABLE KEYS */; +INSERT INTO `t_feedback` (`feedback_id`, `feedback_content`, `feedback_attachment`, `user_id`, `user_type`, `user_name`, `create_time`, `update_time`) VALUES + (1, '希望增加微信公众号消息提醒功能', 'public/feedback/609fd595e8a9416b992c3a00e37cc8e0_20221022133322_jpg', 44, 1, '卓大', '2022-10-22 13:33:25', '2022-10-22 13:33:25'), + (2, '顶部菜单希望能尽快实现', '', 44, 1, '卓大', '2022-10-22 13:34:20', '2022-10-22 13:34:20'), + (3, 'app版本什么时候能推出?', '', 1, 1, '管理员', '2022-10-22 13:35:13', '2022-10-22 13:35:13'); +/*!40000 ALTER TABLE `t_feedback` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_file 结构 +DROP TABLE IF EXISTS `t_file`; +CREATE TABLE IF NOT EXISTS `t_file` ( + `file_id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `folder_type` tinyint unsigned NOT NULL COMMENT '文件夹类型', + `file_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '文件名称', + `file_size` int DEFAULT NULL COMMENT '文件大小', + `file_key` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '文件key,用于文件下载', + `file_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '文件类型', + `creator_id` int DEFAULT NULL COMMENT '创建人,即上传人', + `creator_user_type` int DEFAULT NULL COMMENT '创建人用户类型', + `creator_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人姓名', + `update_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '上次更新时间', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`file_id`) USING BTREE, + UNIQUE KEY `uk_file_key` (`file_key`) USING BTREE, + KEY `module_id_module_type` (`folder_type`) USING BTREE, + KEY `module_type` (`folder_type`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='文件'; + +-- 正在导出表 smart_admin_v2.t_file 的数据:~14 rows (大约) +DELETE FROM `t_file`; +/*!40000 ALTER TABLE `t_file` DISABLE KEYS */; +INSERT INTO `t_file` (`file_id`, `folder_type`, `file_name`, `file_size`, `file_key`, `file_type`, `creator_id`, `creator_user_type`, `creator_name`, `update_time`, `create_time`) VALUES + (4, 1, '1024lab-gzh.jpg', 27898, 'public/common/7e3cb80f02c84ca3aba359f166c8c69e-20221021115207-jpg', 'jpg', 1, 1, '管理员', '2022-10-21 11:52:07', '2022-10-21 11:52:07'), + (5, 1, 'QQ拼音截图20220914221459.png', 4088, 'public/common/b298956317bd419d899a4d3f1d28dbb6-20221021115215-png', 'png', 1, 1, '管理员', '2022-10-21 11:52:15', '2022-10-21 11:52:15'), + (6, 1, 'dfcb686a409e8c0e0c93f95e7129dc46.jpeg', 30137, 'public/common/b817542a80a84435ae86991d68546eb4_20221021121746_jpeg', 'jpeg', 1, 1, '管理员', '2022-10-21 12:17:47', '2022-10-21 12:17:47'), + (7, 1, 'QQ拼音截图20220914221459.png', 4088, 'public/common/888ea37c5a6c4c088658264464ba3cae_20221021121755_png', 'png', 1, 1, '管理员', '2022-10-21 12:17:55', '2022-10-21 12:17:55'), + (18, 4, 'zhuoda-wechat.jpg', 42080, 'public/feedback/609fd595e8a9416b992c3a00e37cc8e0_20221022133322_jpg', 'jpg', 44, 1, '卓大', '2022-10-22 13:33:23', '2022-10-22 13:33:23'), + (19, 1, '1024lab-gzh.jpg', 27898, 'public/common/fb827d63dda74a60ab8b4f70cc7c7d0a_20221022145641_jpg', 'jpg', 44, 1, '卓大', '2022-10-22 14:56:42', '2022-10-22 14:56:42'), + (20, 1, 'xiaozhen-gzh.jpg', 8786, 'public/common/f4a76fa720814949a610f05f6f9545bf_20221022170256_jpg', 'jpg', 1, 1, '管理员', '2022-10-22 17:02:56', '2022-10-22 17:02:56'), + (21, 1, '1024lab-gzh.jpg', 27898, 'public/common/852b7e19bef94af39c1a6156edf47cfb_20221022170332_jpg', 'jpg', 1, 1, '管理员', '2022-10-22 17:03:32', '2022-10-22 17:03:32'); +/*!40000 ALTER TABLE `t_file` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_goods 结构 +DROP TABLE IF EXISTS `t_goods`; +CREATE TABLE IF NOT EXISTS `t_goods` ( + `goods_id` int NOT NULL AUTO_INCREMENT, + `goods_status` int DEFAULT NULL COMMENT '商品状态:[1:预约中,2:售卖中,3:售罄]', + `category_id` int NOT NULL COMMENT '商品类目', + `goods_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '商品名称', + `place` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '产地', + `price` decimal(10,2) unsigned NOT NULL COMMENT '价格', + `shelves_flag` tinyint unsigned NOT NULL COMMENT '上架状态', + `deleted_flag` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '删除状态', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注', + `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `create_time` datetime DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`goods_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='商品'; + +-- 正在导出表 smart_admin_v2.t_goods 的数据:~3 rows (大约) +DELETE FROM `t_goods`; +/*!40000 ALTER TABLE `t_goods` DISABLE KEYS */; +INSERT INTO `t_goods` (`goods_id`, `goods_status`, `category_id`, `goods_name`, `place`, `price`, `shelves_flag`, `deleted_flag`, `remark`, `update_time`, `create_time`) VALUES + (1, 1, 353, 'Mote60', 'BEI_JING', 9999.00, 1, 0, NULL, '2022-10-21 19:57:49', '2021-09-01 22:25:30'), + (7, 1, 352, 'iphone15 pro', 'LUO_YANG', 50000.00, 1, 0, '备注', '2022-10-21 19:58:07', '2022-09-15 14:17:11'), + (8, 1, 352, 'iphone14', 'ZHENG_ZHOU', 150.00, 0, 0, '', '2022-10-21 19:12:49', '2022-10-21 19:00:11'); +/*!40000 ALTER TABLE `t_goods` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_heart_beat_record 结构 +DROP TABLE IF EXISTS `t_heart_beat_record`; +CREATE TABLE IF NOT EXISTS `t_heart_beat_record` ( + `heart_beat_record_id` int NOT NULL AUTO_INCREMENT COMMENT '自增id', + `project_path` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '项目名称', + `server_ip` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '服务器ip', + `process_no` int NOT NULL COMMENT '进程号', + `process_start_time` datetime NOT NULL COMMENT '进程开启时间', + `heart_beat_time` datetime NOT NULL COMMENT '心跳时间', + PRIMARY KEY (`heart_beat_record_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=313 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='公用服务 - 服务心跳'; + +-- 正在导出表 smart_admin_v2.t_heart_beat_record 的数据:~305 rows (大约) +DELETE FROM `t_heart_beat_record`; +/*!40000 ALTER TABLE `t_heart_beat_record` DISABLE KEYS */; +INSERT INTO `t_heart_beat_record` (`heart_beat_record_id`, `project_path`, `server_ip`, `process_no`, `process_start_time`, `heart_beat_time`) VALUES + (309, 'E:\\code_work_space\\idea\\transport-project\\tms', '127.0.0.1;192.168.1.113', 37328, '2022-10-22 11:52:59', '2022-10-22 12:00:18'), + (310, 'E:\\code_work_space\\idea\\transport-project\\tms', '127.0.0.1;192.168.1.113', 37312, '2022-10-22 13:27:35', '2022-10-22 17:19:44'), + (311, 'E:\\code_work_space\\idea\\transport-project\\tms', '127.0.0.1;192.168.1.113', 12608, '2022-10-22 17:53:00', '2022-10-22 18:00:20'), + (312, 'E:\\code_work_space\\idea\\transport-project\\tms', '127.0.0.1;192.168.1.113', 35360, '2022-10-22 18:14:55', '2022-10-22 19:32:24'); +/*!40000 ALTER TABLE `t_heart_beat_record` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_help_doc 结构 +DROP TABLE IF EXISTS `t_help_doc`; +CREATE TABLE IF NOT EXISTS `t_help_doc` ( + `help_doc_id` bigint NOT NULL AUTO_INCREMENT, + `help_doc_catalog_id` bigint NOT NULL COMMENT '类型1公告 2动态', + `title` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '标题', + `content_text` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '文本内容', + `content_html` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'html内容', + `attachment` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '附件', + `sort` int NOT NULL DEFAULT '0' COMMENT '排序', + `page_view_count` int NOT NULL DEFAULT '0' COMMENT '页面浏览量,传说中的pv', + `user_view_count` int NOT NULL DEFAULT '0' COMMENT '用户浏览量,传说中的uv', + `author` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '作者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`help_doc_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='帮助文档'; + +-- 正在导出表 smart_admin_v2.t_help_doc 的数据:~28 rows (大约) +DELETE FROM `t_help_doc`; +/*!40000 ALTER TABLE `t_help_doc` DISABLE KEYS */; +/*!40000 ALTER TABLE `t_help_doc` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_help_doc_catalog 结构 +DROP TABLE IF EXISTS `t_help_doc_catalog`; +CREATE TABLE IF NOT EXISTS `t_help_doc_catalog` ( + `help_doc_catalog_id` bigint NOT NULL AUTO_INCREMENT COMMENT '帮助文档目录', + `name` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '名称', + `sort` int NOT NULL DEFAULT '0' COMMENT '排序字段', + `parent_id` bigint NOT NULL COMMENT '父级id', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`help_doc_catalog_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='帮助文档-目录'; + +-- 正在导出表 smart_admin_v2.t_help_doc_catalog 的数据:~5 rows (大约) +DELETE FROM `t_help_doc_catalog`; +/*!40000 ALTER TABLE `t_help_doc_catalog` DISABLE KEYS */; +/*!40000 ALTER TABLE `t_help_doc_catalog` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_help_doc_relation 结构 +DROP TABLE IF EXISTS `t_help_doc_relation`; +CREATE TABLE IF NOT EXISTS `t_help_doc_relation` ( + `relation_id` bigint NOT NULL COMMENT '关联id', + `relation_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '关联名称', + `help_doc_id` bigint NOT NULL COMMENT '文档id', + `create_time` datetime DEFAULT CURRENT_TIMESTAMP, + `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`relation_id`,`help_doc_id`) USING BTREE, + UNIQUE KEY `uni_menu_help_doc` (`relation_id`,`help_doc_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='帮助文档-关联表'; + +-- 正在导出表 smart_admin_v2.t_help_doc_relation 的数据:~4 rows (大约) +DELETE FROM `t_help_doc_relation`; +/*!40000 ALTER TABLE `t_help_doc_relation` DISABLE KEYS */; +/*!40000 ALTER TABLE `t_help_doc_relation` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_help_doc_view_record 结构 +DROP TABLE IF EXISTS `t_help_doc_view_record`; +CREATE TABLE IF NOT EXISTS `t_help_doc_view_record` ( + `help_doc_id` int NOT NULL COMMENT '通知公告id', + `user_id` int NOT NULL COMMENT '用户id', + `user_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '用户名称', + `page_view_count` int DEFAULT '0' COMMENT '查看次数', + `first_ip` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '首次ip', + `first_user_agent` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '首次用户设备等标识', + `last_ip` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最后一次ip', + `last_user_agent` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最后一次用户设备等标识', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`help_doc_id`,`user_id`) USING BTREE, + UNIQUE KEY `uk_notice_employee` (`help_doc_id`,`user_id`) USING BTREE COMMENT '资讯员工' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='帮助文档-查看记录'; + +-- 正在导出表 smart_admin_v2.t_help_doc_view_record 的数据:~69 rows (大约) +DELETE FROM `t_help_doc_view_record`; +/*!40000 ALTER TABLE `t_help_doc_view_record` DISABLE KEYS */; +/*!40000 ALTER TABLE `t_help_doc_view_record` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_login_log 结构 +DROP TABLE IF EXISTS `t_login_log`; +CREATE TABLE IF NOT EXISTS `t_login_log` ( + `login_log_id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', + `user_id` int NOT NULL COMMENT '用户id', + `user_type` int NOT NULL COMMENT '用户类型', + `user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户名', + `login_ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '用户ip', + `user_agent` text COLLATE utf8mb4_unicode_ci COMMENT 'user-agent信息', + `login_result` int NOT NULL COMMENT '登录结果:0成功 1失败 2 退出', + `remark` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`login_log_id`) USING BTREE, + KEY `customer_id` (`user_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户登录日志'; + +-- 正在导出表 smart_admin_v2.t_login_log 的数据:~5 rows (大约) +DELETE FROM `t_login_log`; +/*!40000 ALTER TABLE `t_login_log` DISABLE KEYS */; +INSERT INTO `t_login_log` (`login_log_id`, `user_id`, `user_type`, `user_name`, `login_ip`, `user_agent`, `login_result`, `remark`, `update_time`, `create_time`) VALUES + (1, 1, 1, '管理员', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 0, '电脑端', '2022-10-21 10:31:08', '2022-10-21 10:31:06'), + (2, 1, 1, '管理员', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 0, '电脑端', '2022-10-22 10:29:16', '2022-10-22 10:29:16'), + (3, 44, 1, '卓大', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, '密码错误', '2022-10-22 10:51:49', '2022-10-22 10:51:49'), + (4, 44, 1, '卓大', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 0, '万能密码登录', '2022-10-22 10:52:00', '2022-10-22 10:52:00'), + (5, 44, 1, '卓大', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 0, '万能密码登录', '2022-10-22 11:56:06', '2022-10-22 11:56:07'), + (6, 44, 1, '卓大', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 0, '万能密码登录', '2022-10-22 13:32:26', '2022-10-22 13:32:26'), + (7, 44, 1, '卓大', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 0, '万能密码登录', '2022-10-22 14:08:14', '2022-10-22 14:08:14'), + (8, 44, 1, '卓大', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 0, '万能密码登录', '2022-10-22 14:40:55', '2022-10-22 14:40:55'), + (9, 1, 1, '管理员', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 0, '万能密码登录', '2022-10-22 18:28:07', '2022-10-22 18:28:07'), + (10, 1, 1, '管理员', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 0, '万能密码登录', '2022-10-22 18:28:54', '2022-10-22 18:28:54'), + (11, 1, 1, '管理员', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 0, '万能密码登录', '2022-10-22 18:58:21', '2022-10-22 18:58:21'), + (12, 1, 1, '管理员', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 0, '万能密码登录', '2022-10-22 19:07:09', '2022-10-22 19:07:10'), + (13, 1, 1, '管理员', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, '密码错误', '2022-10-22 19:32:28', '2022-10-22 19:32:28'), + (14, 1, 1, '管理员', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 0, '电脑端', '2022-10-22 19:32:37', '2022-10-22 19:32:37'); +/*!40000 ALTER TABLE `t_login_log` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_menu 结构 +DROP TABLE IF EXISTS `t_menu`; +CREATE TABLE IF NOT EXISTS `t_menu` ( + `menu_id` bigint NOT NULL AUTO_INCREMENT COMMENT '菜单ID', + `menu_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '菜单名称', + `menu_type` int NOT NULL COMMENT '类型', + `parent_id` bigint NOT NULL COMMENT '父菜单ID', + `sort` int DEFAULT NULL COMMENT '显示顺序', + `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '路由地址', + `component` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '组件路径', + `perms_type` int DEFAULT NULL COMMENT '权限类型', + `api_perms` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT '后端权限字符串', + `web_perms` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT '前端权限字符串', + `icon` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '菜单图标', + `context_menu_id` bigint DEFAULT NULL COMMENT '功能点关联菜单ID', + `frame_flag` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否为外链', + `frame_url` text COMMENT '外链地址', + `cache_flag` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否缓存', + `visible_flag` tinyint(1) NOT NULL DEFAULT '1' COMMENT '显示状态', + `disabled_flag` tinyint(1) NOT NULL DEFAULT '0' COMMENT '禁用状态', + `deleted_flag` tinyint(1) NOT NULL DEFAULT '0' COMMENT '删除状态', + `create_user_id` bigint NOT NULL COMMENT '创建人', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_user_id` bigint DEFAULT NULL COMMENT '更新人', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`menu_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=208 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='菜单表'; + +-- 正在导出表 smart_admin_v2.t_menu 的数据:~107 rows (大约) +DELETE FROM `t_menu`; +/*!40000 ALTER TABLE `t_menu` DISABLE KEYS */; +INSERT INTO `t_menu` (`menu_id`, `menu_name`, `menu_type`, `parent_id`, `sort`, `path`, `component`, `perms_type`, `api_perms`, `web_perms`, `icon`, `context_menu_id`, `frame_flag`, `frame_url`, `cache_flag`, `visible_flag`, `disabled_flag`, `deleted_flag`, `create_user_id`, `create_time`, `update_user_id`, `update_time`) VALUES + (26, '菜单管理', 2, 50, 0, '/menu/list', '/system/menu/menu-list.vue', NULL, NULL, NULL, 'CopyOutlined', NULL, 0, NULL, 1, 1, 0, 0, 2, '2021-08-09 15:04:35', 1, '2022-10-16 00:04:19'), + (40, '批量删除', 3, 26, NULL, NULL, NULL, 1, NULL, 'system:menu:batch:delete', NULL, 26, 0, NULL, 0, 1, 0, 0, 1, '2021-08-12 09:45:56', 1, '2022-10-22 10:39:01'), + (45, '部门员工', 1, 0, 100, '/organization', NULL, NULL, NULL, NULL, 'UserSwitchOutlined', NULL, 0, NULL, 0, 1, 0, 0, 1, '2021-08-12 16:13:27', 44, '2022-10-22 11:19:49'), + (46, '部门员工', 2, 45, 1, '/employee/department', '/system/employee/department/index.vue', NULL, NULL, NULL, 'AuditOutlined', NULL, 0, NULL, 0, 1, 0, 0, 1, '2021-08-12 16:21:50', 1, '2022-06-23 16:19:54'), + (47, '商品管理', 2, 48, 3, '/erp/goods/list', '/business/erp/goods/goods-list.vue', NULL, NULL, NULL, 'AliwangwangOutlined', NULL, 0, NULL, 0, 1, 0, 0, 1, '2021-08-12 17:58:39', 1, '2022-09-14 21:50:11'), + (48, '商品管理', 1, 137, 10, '/goods', NULL, NULL, NULL, NULL, 'BarcodeOutlined', NULL, 0, NULL, 0, 1, 0, 0, 1, '2021-08-12 18:02:59', 1, '2022-06-24 20:07:35'), + (50, '系统设置', 1, 0, 200, '/setting', NULL, NULL, NULL, NULL, 'SettingOutlined', NULL, 0, NULL, 0, 1, 0, 0, 1, '2021-08-13 16:41:33', 1, '2022-09-14 15:46:51'), + (76, '角色管理', 2, 45, 2, '/employee/role', '/system/employee/role/index.vue', NULL, NULL, NULL, 'SlidersOutlined', NULL, 0, NULL, 0, 1, 0, 0, 1, '2021-08-26 10:31:00', 1, '2022-06-23 16:21:06'), + (78, '商品分类', 2, 48, 1, '/erp/catalog/goods', '/business/erp/catalog/goods-catalog.vue', NULL, NULL, NULL, 'ApartmentOutlined', NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-05-18 23:34:14', 1, '2022-09-14 21:52:12'), + (79, '自定义分组', 2, 48, 2, '/erp/catalog/custom', '/business/erp/catalog/custom-catalog.vue', NULL, NULL, NULL, 'AppstoreAddOutlined', NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-05-18 23:37:53', 1, '2022-09-14 21:50:58'), + (81, '请求监控', 2, 111, 3, '/support/operate-log/operate-log-list', '/support/operate-log/operate-log-list.vue', NULL, NULL, NULL, 'VideoCameraOutlined', NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-05-20 12:37:24', 1, '2022-10-22 18:33:10'), + (85, '组件演示', 2, 84, NULL, '/demonstration/index', '/support/demonstration/index.vue', NULL, NULL, NULL, 'ClearOutlined', NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-05-20 23:16:46', NULL, '2022-05-20 23:16:46'), + (86, '添加部门', 3, 46, NULL, NULL, NULL, 1, NULL, 'system:department:add', NULL, NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-05-26 23:33:37', NULL, '2022-10-22 10:39:01'), + (87, '修改部门', 3, 46, NULL, NULL, NULL, 1, NULL, 'system:department:update', NULL, NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-05-26 23:34:11', NULL, '2022-10-22 10:39:02'), + (88, '删除部门', 3, 46, NULL, NULL, NULL, 1, NULL, 'system:department:delete', NULL, NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-05-26 23:34:49', NULL, '2022-10-22 10:39:03'), + (91, '添加员工', 3, 46, NULL, NULL, NULL, 1, NULL, 'system:employee:add', NULL, NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-05-27 00:11:38', NULL, '2022-10-22 10:39:03'), + (92, '编辑员工', 3, 46, NULL, NULL, NULL, 1, NULL, 'system:employee:update', NULL, NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-05-27 00:12:10', NULL, '2022-10-22 10:39:04'), + (93, '禁用启用员工', 3, 46, NULL, NULL, NULL, 1, NULL, 'system:employee:disabled', NULL, NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-05-27 00:12:37', NULL, '2022-10-22 10:39:05'), + (94, '调整部门', 3, 46, NULL, NULL, NULL, 1, NULL, 'system:employee:department:update', NULL, NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-05-27 00:12:59', NULL, '2022-10-22 10:39:06'), + (95, '重置密码', 3, 46, NULL, NULL, NULL, 1, NULL, 'system:employee:password:reset', NULL, NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-05-27 00:13:30', 1, '2022-10-20 13:39:13'), + (96, '删除员工', 3, 46, NULL, NULL, NULL, 1, NULL, 'system:employee:delete', NULL, NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-05-27 00:14:08', NULL, '2022-10-22 10:39:07'), + (97, '添加角色', 3, 76, NULL, NULL, NULL, 1, NULL, 'system:role:add', NULL, NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-05-27 00:34:00', 1, '2022-10-22 10:39:09'), + (98, '删除角色', 3, 76, NULL, NULL, NULL, 1, NULL, 'system:role:delete', NULL, NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-05-27 00:34:19', 1, '2022-10-22 10:39:09'), + (99, '编辑角色', 3, 76, NULL, NULL, NULL, 1, NULL, 'system:role:update', NULL, NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-05-27 00:34:55', NULL, '2022-10-22 10:39:10'), + (100, '更新数据范围', 3, 76, NULL, NULL, NULL, 1, NULL, 'system:role:dataScope:update', NULL, NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-05-27 00:37:03', NULL, '2022-10-22 10:39:11'), + (101, '批量移除员工', 3, 76, NULL, NULL, NULL, 1, NULL, 'system:role:employee:batch:delete', NULL, NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-05-27 00:39:05', NULL, '2022-10-22 10:39:38'), + (102, '移除员工', 3, 76, NULL, NULL, NULL, 1, NULL, 'system:role:employee:delete', NULL, NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-05-27 00:39:21', NULL, '2022-10-22 10:39:39'), + (103, '添加员工', 3, 76, NULL, NULL, NULL, 1, NULL, 'system:role:employee:add', NULL, NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-05-27 00:39:38', NULL, '2022-10-22 10:39:40'), + (104, '修改权限', 3, 76, NULL, NULL, NULL, 1, NULL, 'system:role:menu:update', NULL, NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-05-27 00:41:55', NULL, '2022-10-22 10:39:41'), + (105, '添加', 3, 26, NULL, NULL, NULL, 1, NULL, 'system:menu:add', NULL, 26, 0, NULL, 0, 1, 0, 0, 1, '2022-05-27 00:44:37', 1, '2022-10-22 10:39:41'), + (106, '编辑', 3, 26, NULL, NULL, NULL, 1, NULL, 'system:menu:update', NULL, 26, 0, NULL, 0, 1, 0, 0, 1, '2022-05-27 00:44:59', 1, '2022-10-22 10:39:44'), + (108, '删除', 3, 26, NULL, NULL, NULL, 1, NULL, 'system:menu:delete', NULL, 26, 0, NULL, 0, 1, 0, 0, 1, '2022-05-27 00:45:55', 1, '2022-10-22 10:39:43'), + (109, '参数配置', 2, 50, 3, '/config/config-list', '/support/config/config-list.vue', NULL, NULL, NULL, 'AntDesignOutlined', NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-05-27 13:34:41', 1, '2022-06-23 16:24:16'), + (110, '数据字典', 2, 50, 4, '/setting/dict', '/support/dict/index.vue', NULL, NULL, NULL, 'BarcodeOutlined', NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-05-27 17:53:00', 1, '2022-05-27 18:09:14'), + (111, '监控服务', 1, 0, 4, '/monitor', NULL, NULL, NULL, NULL, 'BarChartOutlined', NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-06-17 11:13:23', 1, '2022-10-22 18:32:31'), + (113, '查询', 3, 112, NULL, NULL, NULL, NULL, NULL, 'ad', NULL, NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-06-17 11:31:36', NULL, '2022-06-17 11:31:36'), + (114, '运维工具', 1, 0, 5, NULL, NULL, NULL, NULL, NULL, 'NodeCollapseOutlined', NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-06-20 10:09:16', 1, '2022-10-22 18:32:37'), + (117, 'Reload', 2, 114, NULL, '/hook', '/support/reload/reload-list.vue', NULL, NULL, NULL, 'ReloadOutlined', NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-06-20 10:16:49', NULL, '2022-06-20 10:16:49'), + (122, '数据库监控', 2, 111, 4, '/support/druid/index', NULL, NULL, NULL, NULL, 'ConsoleSqlOutlined', NULL, 1, 'http://localhost:60001/druid/index.html', 0, 1, 0, 0, 1, '2022-06-20 14:49:33', 1, '2022-10-22 18:33:07'), + (130, '单号管理', 2, 50, 6, '/support/serial-number/serial-number-list', '/support/serial-number/serial-number-list.vue', NULL, NULL, NULL, 'NumberOutlined', NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-06-24 14:45:22', 1, '2022-06-28 16:23:41'), + (132, '通知公告', 2, 138, NULL, '/oa/notice/notice-list', '/business/oa/notice/notice-list.vue', NULL, NULL, NULL, 'SoundOutlined', NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-06-24 18:23:09', 1, '2022-09-14 19:54:34'), + (133, '缓存管理', 2, 114, NULL, '/support/cache/cache-list', '/support/cache/cache-list.vue', NULL, NULL, NULL, 'BorderInnerOutlined', NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-06-24 18:52:25', NULL, '2022-06-24 18:52:25'), + (137, '进销存系统', 1, 0, 2, NULL, NULL, NULL, NULL, NULL, 'AccountBookOutlined', NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-06-24 20:07:20', 1, '2022-10-22 18:30:19'), + (138, 'OA系统', 1, 0, 1, NULL, NULL, NULL, NULL, NULL, 'BankOutlined', NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-06-24 20:09:18', 1, '2022-10-22 18:30:15'), + (142, '公告详情', 2, 132, NULL, '/oa/notice/notice-detail', '/business/oa/notice/notice-detail.vue', NULL, NULL, NULL, NULL, NULL, 0, NULL, 0, 0, 0, 0, 1, '2022-06-25 16:38:47', 1, '2022-09-14 19:46:17'), + (143, '登录日志', 2, 111, 2, '/support/login-log/login-log-list', '/support/login-log/login-log-list.vue', NULL, NULL, NULL, 'LoginOutlined', NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-06-28 15:01:38', 1, '2022-10-22 18:33:03'), + (144, '企业信息', 2, 138, 2, '/oa/enterprise/enterprise-list', '/business/oa/enterprise/enterprise-list.vue', NULL, NULL, NULL, 'ShopOutlined', NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-09-14 17:00:07', 1, '2022-09-14 19:04:58'), + (145, '企业详情', 2, 144, NULL, '/oa/enterprise/enterprise-detail', '/business/oa/enterprise/enterprise-detail.vue', NULL, NULL, NULL, NULL, NULL, 0, NULL, 0, 0, 0, 0, 1, '2022-09-14 18:52:52', NULL, '2022-09-14 18:52:52'), + (146, '系统文档', 1, 0, 3, NULL, NULL, NULL, NULL, NULL, 'FileWordOutlined', NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-09-14 19:56:53', 1, '2022-10-22 18:30:26'), + (147, '系统手册', 2, 146, NULL, '/help-doc/help-doc-manage-list', '/support/help-doc/management/help-doc-manage-list.vue', NULL, NULL, NULL, 'FolderViewOutlined', NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-09-14 19:59:01', NULL, '2022-09-14 19:59:01'), + (148, '意见反馈', 2, 146, NULL, '/feedback/feedback-list', '/support/feedback/feedback-list.vue', NULL, NULL, NULL, 'CoffeeOutlined', NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-09-14 19:59:52', 1, '2022-09-14 20:00:37'), + (149, '我的通知', 2, 132, NULL, '/oa/notice/notice-employee-list', '/business/oa/notice/notice-employee-list.vue', NULL, NULL, NULL, NULL, NULL, 0, NULL, 0, 0, 0, 0, 1, '2022-09-14 20:29:41', 1, '2022-09-14 20:31:23'), + (150, '我的通知公告详情', 2, 132, NULL, '/oa/notice/notice-employee-detail', '/business/oa/notice/notice-employee-detail.vue', NULL, NULL, NULL, NULL, NULL, 0, NULL, 0, 0, 0, 0, 1, '2022-09-14 20:30:25', 1, '2022-09-14 20:31:38'), + (151, '代码生成', 2, 0, 600, '/support/code-generator', '/support/code-generator/code-generator-list.vue', NULL, NULL, NULL, 'CoffeeOutlined', NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-09-21 18:25:05', 1, '2022-10-22 11:27:58'), + (152, '更新日志', 2, 146, 3, '/support/change-log/change-log-list', '/support/change-log/change-log-list.vue', NULL, NULL, NULL, 'HeartOutlined', NULL, 0, NULL, 0, 1, 0, 0, 44, '2022-10-10 10:31:20', 44, '2022-10-10 10:31:45'), + (153, '清除缓存', 3, 133, NULL, NULL, NULL, 1, NULL, 'support:cache:delete', NULL, 133, 0, NULL, 0, 1, 1, 0, 1, '2022-10-15 22:45:13', 1, '2022-10-21 20:37:13'), + (154, '获取缓存key', 3, 133, NULL, NULL, NULL, NULL, NULL, 'support:cache:keys', NULL, 133, 0, NULL, 0, 1, 1, 0, 1, '2022-10-15 22:45:48', 1, '2022-10-15 23:40:09'), + (155, '执行', 3, 117, NULL, NULL, NULL, 1, NULL, 'support:reload:execute', NULL, 117, 0, NULL, 0, 1, 0, 0, 1, '2022-10-15 23:16:45', 1, '2022-10-22 10:37:33'), + (156, '查看结果', 3, 117, NULL, NULL, NULL, 1, NULL, 'support:reload:result', NULL, 117, 0, NULL, 0, 1, 0, 0, 1, '2022-10-15 23:17:23', 1, '2022-10-22 10:37:36'), + (157, '单号生成', 3, 130, NULL, NULL, NULL, 1, NULL, 'support:serial:number:generate', NULL, 130, 0, NULL, 0, 1, 0, 0, 1, '2022-10-15 23:21:06', 1, '2022-10-22 10:36:34'), + (158, '生成记录', 3, 130, NULL, NULL, NULL, 1, NULL, 'support:serial:number:record', NULL, 130, 0, NULL, 0, 1, 0, 0, 1, '2022-10-15 23:21:34', 1, '2022-10-22 10:36:42'), + (159, '新建', 3, 110, NULL, NULL, NULL, 1, NULL, 'support:dict:add', NULL, 110, 0, NULL, 0, 1, 0, 0, 1, '2022-10-15 23:23:51', NULL, '2022-10-22 10:41:07'), + (160, '编辑', 3, 110, NULL, NULL, NULL, 1, NULL, 'support:dict:update', NULL, 110, 0, NULL, 0, 1, 0, 0, 1, '2022-10-15 23:24:05', NULL, '2022-10-22 10:41:08'), + (161, '批量删除', 3, 110, NULL, NULL, NULL, 1, NULL, 'support:dict:batch:delete', NULL, 110, 0, NULL, 0, 1, 0, 0, 1, '2022-10-15 23:24:34', NULL, '2022-10-22 10:41:09'), + (162, '刷新缓存', 3, 110, NULL, NULL, NULL, 1, NULL, 'support:dict:refresh', NULL, 110, 0, NULL, 0, 1, 0, 0, 1, '2022-10-15 23:24:55', NULL, '2022-10-22 10:41:10'), + (163, '新建', 3, 109, NULL, NULL, NULL, 1, NULL, 'support:config:add', NULL, 109, 0, NULL, 0, 1, 0, 0, 1, '2022-10-15 23:26:56', NULL, '2022-10-22 10:41:10'), + (164, '编辑', 3, 109, NULL, NULL, NULL, 11, NULL, 'support:config:update', NULL, 109, 0, NULL, 0, 1, 0, 0, 1, '2022-10-15 23:27:07', NULL, '2022-10-22 10:41:12'), + (165, '查询', 3, 47, NULL, NULL, NULL, 1, NULL, 'goods:query', NULL, 47, 0, NULL, 0, 1, 0, 0, 1, '2022-10-16 19:55:39', NULL, '2022-10-22 10:41:13'), + (166, '新建', 3, 47, NULL, NULL, NULL, 1, NULL, 'goods:add', NULL, 47, 0, NULL, 0, 1, 0, 0, 1, '2022-10-16 19:56:00', NULL, '2022-10-22 10:41:14'), + (167, '批量删除', 3, 47, NULL, NULL, NULL, 1, NULL, 'goods:batchDelete', NULL, 47, 0, NULL, 0, 1, 0, 0, 1, '2022-10-16 19:56:15', NULL, '2022-10-22 10:41:15'), + (168, '查询', 3, 147, NULL, NULL, NULL, 1, NULL, 'helpDoc:query', NULL, 147, 0, NULL, 0, 1, 0, 0, 1, '2022-10-16 20:12:13', NULL, '2022-10-22 10:41:17'), + (169, '新建', 3, 147, NULL, NULL, NULL, 1, NULL, 'helpDoc:add', NULL, 147, 0, NULL, 0, 1, 0, 0, 1, '2022-10-16 20:12:37', 1, '2022-10-21 20:49:24'), + (170, '新建目录', 3, 147, NULL, NULL, NULL, 1, NULL, 'helpDocCatalog:addCategory', NULL, 147, 0, NULL, 0, 1, 0, 0, 1, '2022-10-16 20:12:57', NULL, '2022-10-22 10:41:18'), + (171, '修改目录', 3, 147, NULL, NULL, NULL, 1, NULL, 'helpDocCatalog:edit', NULL, 147, 0, NULL, 0, 1, 0, 0, 1, '2022-10-16 20:13:46', 1, '2022-10-21 20:50:01'), + (173, '新建', 3, 78, NULL, NULL, NULL, 1, NULL, 'goodsCategory:add', NULL, 78, 0, NULL, 0, 1, 0, 0, 1, '2022-10-16 20:17:02', NULL, '2022-10-22 10:41:19'), + (174, '添加子分类', 3, 78, NULL, NULL, NULL, 1, NULL, 'goodsCategory:addChild', NULL, 78, 0, NULL, 0, 1, 0, 0, 1, '2022-10-16 20:17:22', NULL, '2022-10-22 10:41:21'), + (175, '编辑', 3, 78, NULL, NULL, NULL, 1, NULL, 'goodsCategory:edit', NULL, 78, 0, NULL, 0, 1, 0, 0, 1, '2022-10-16 20:17:38', NULL, '2022-10-22 10:41:22'), + (176, '删除', 3, 78, NULL, NULL, NULL, 1, NULL, 'goodsCategory:delete', NULL, 78, 0, NULL, 0, 1, 0, 0, 1, '2022-10-16 20:17:50', NULL, '2022-10-22 10:41:22'), + (177, '新建', 3, 79, NULL, NULL, NULL, 1, NULL, 'customCategory:add', NULL, 78, 0, NULL, 0, 1, 0, 0, 1, '2022-10-16 20:17:02', NULL, '2022-10-22 10:41:23'), + (178, '添加子分类', 3, 79, NULL, NULL, NULL, 1, NULL, 'customCategory:addChild', NULL, 78, 0, NULL, 0, 1, 0, 0, 1, '2022-10-16 20:17:22', NULL, '2022-10-22 10:41:24'), + (179, '编辑', 3, 79, NULL, NULL, NULL, 1, NULL, 'customCategory:edit', NULL, 78, 0, NULL, 0, 1, 0, 0, 1, '2022-10-16 20:17:38', NULL, '2022-10-22 10:41:24'), + (180, '删除', 3, 79, NULL, NULL, NULL, 1, NULL, 'customCategory:delete', NULL, 78, 0, NULL, 0, 1, 0, 0, 1, '2022-10-16 20:17:50', NULL, '2022-10-22 10:41:25'), + (181, '查询', 3, 144, NULL, NULL, NULL, 2, 'EnterpriseController.deleteEnterprise', 'enterprise:query', NULL, 144, 0, NULL, 0, 1, 0, 0, 1, '2022-10-16 20:25:14', 1, '2022-10-21 20:15:12'), + (182, '新建', 3, 144, NULL, NULL, NULL, 2, 'EnterpriseController.createEnterprise', 'enterprise:add', NULL, 144, 0, NULL, 0, 1, 0, 0, 1, '2022-10-16 20:25:25', 1, '2022-10-21 20:15:30'), + (183, '编辑', 3, 144, NULL, NULL, NULL, 2, 'EnterpriseController.updateEnterprise', 'enterprise:edit', NULL, 144, 0, NULL, 0, 1, 0, 0, 1, '2022-10-16 20:25:36', 1, '2022-10-21 20:15:39'), + (184, '删除', 3, 144, NULL, NULL, NULL, 2, 'EnterpriseController.deleteEnterprise', 'enterprise:delete', NULL, 144, 0, NULL, 0, 1, 0, 0, 1, '2022-10-16 20:25:53', 1, '2022-10-21 20:11:24'), + (185, '查询', 3, 132, NULL, NULL, NULL, 2, 'NoticeController.query', 'notice:query', NULL, 132, 0, NULL, 0, 1, 0, 0, 1, '2022-10-16 20:26:38', 1, '2022-10-21 20:19:24'), + (186, '新建', 3, 132, NULL, NULL, NULL, 2, 'NoticeController.add', 'notice:add', NULL, 132, 0, NULL, 0, 1, 0, 0, 1, '2022-10-16 20:27:04', 1, '2022-10-21 20:19:49'), + (187, '编辑', 3, 132, NULL, NULL, NULL, 2, 'NoticeController.update', 'notice:edit', NULL, 132, 0, NULL, 0, 1, 0, 0, 1, '2022-10-16 20:27:15', 1, '2022-10-21 20:21:16'), + (188, '删除', 3, 132, NULL, NULL, NULL, 2, 'NoticeController.delete', 'notice:delete', NULL, 132, 0, NULL, 0, 1, 0, 0, 1, '2022-10-16 20:27:23', 1, '2022-10-21 20:21:25'), + (189, '查询', 3, 148, NULL, NULL, NULL, 1, NULL, 'feedback:query', NULL, 148, 0, NULL, 0, 1, 0, 0, 1, '2022-10-16 20:28:04', 1, '2022-10-22 10:38:46'), + (190, '查询', 3, 152, NULL, NULL, NULL, 1, NULL, 'changeLog:query', NULL, 152, 0, NULL, 0, 1, 0, 0, 1, '2022-10-16 20:28:33', 1, '2022-10-21 20:42:00'), + (191, '新建', 3, 152, NULL, NULL, NULL, 1, NULL, 'changeLog:add', NULL, 152, 0, NULL, 0, 1, 0, 0, 1, '2022-10-16 20:28:46', 1, '2022-10-21 20:42:09'), + (192, '批量删除', 3, 152, NULL, NULL, NULL, 1, NULL, 'changeLog:batchDelete', NULL, 152, 0, NULL, 0, 1, 0, 0, 1, '2022-10-16 20:29:10', 1, '2022-10-21 20:42:16'), + (193, '文件管理', 2, 50, 20, '/support/file/file-list', '/support/file/file-list.vue', NULL, NULL, NULL, 'FolderOpenOutlined', NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-10-21 11:26:11', 1, '2022-10-22 11:29:22'), + (194, '删除', 3, 47, NULL, NULL, NULL, 1, NULL, 'goods:delete', NULL, 47, 0, NULL, 0, 1, 0, 0, 1, '2022-10-21 20:00:12', 1, '2022-10-21 20:04:58'), + (195, '修改', 3, 47, NULL, NULL, NULL, 1, NULL, 'goods:update', NULL, NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-10-21 20:05:23', NULL, '2022-10-21 20:05:23'), + (196, '查看详情', 3, 145, NULL, NULL, NULL, 2, 'EnterpriseController.getDetail', 'enterprise:detail', NULL, NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-10-21 20:16:47', NULL, '2022-10-21 20:16:47'), + (198, '删除', 3, 152, NULL, NULL, NULL, 1, NULL, 'changeLog:delete', NULL, NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-10-21 20:42:34', NULL, '2022-10-21 20:42:34'), + (199, '查询', 3, 109, NULL, NULL, NULL, 1, NULL, 'support:config:query', NULL, NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-10-21 20:45:14', NULL, '2022-10-21 20:45:14'), + (200, '查询', 3, 193, NULL, NULL, NULL, 1, NULL, 'support:file:query', NULL, NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-10-21 20:47:23', 1, '2022-10-22 11:21:10'), + (201, '删除', 3, 147, NULL, NULL, NULL, 1, NULL, 'helpDoc:delete', NULL, NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-10-21 21:03:20', NULL, '2022-10-21 21:03:20'), + (202, '更新', 3, 147, NULL, NULL, NULL, 1, NULL, 'helpDoc:update', NULL, NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-10-21 21:03:32', NULL, '2022-10-21 21:03:32'), + (203, '查询', 3, 143, NULL, NULL, NULL, 1, NULL, 'loginLog:query', NULL, NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-10-21 21:05:11', NULL, '2022-10-21 21:05:11'), + (204, '查询', 3, 81, NULL, NULL, NULL, 1, NULL, 'operateLog:query', NULL, NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-10-22 10:33:31', NULL, '2022-10-22 10:33:31'), + (205, '详情', 3, 81, NULL, NULL, NULL, 1, NULL, 'operateLog:detail', NULL, NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-10-22 10:33:49', NULL, '2022-10-22 10:33:49'), + (206, '心跳监控', 2, 111, 1, '/support/heart-beat/heart-beat-list', '/support/heart-beat/heart-beat-list.vue', 1, NULL, NULL, 'FallOutlined', NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-10-22 10:47:03', 1, '2022-10-22 18:32:52'), + (207, '更新', 3, 152, NULL, NULL, NULL, 1, NULL, 'changeLog:update', NULL, NULL, 0, NULL, 0, 1, 0, 0, 1, '2022-10-22 11:51:32', NULL, '2022-10-22 11:51:32'); +/*!40000 ALTER TABLE `t_menu` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_notice 结构 +DROP TABLE IF EXISTS `t_notice`; +CREATE TABLE IF NOT EXISTS `t_notice` ( + `notice_id` bigint NOT NULL AUTO_INCREMENT, + `notice_type_id` bigint NOT NULL COMMENT '类型1公告 2动态', + `title` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '标题', + `all_visible_flag` tinyint(1) NOT NULL COMMENT '是否全部可见', + `scheduled_publish_flag` tinyint(1) NOT NULL COMMENT '是否定时发布', + `publish_time` datetime NOT NULL COMMENT '发布时间', + `content_text` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '文本内容', + `content_html` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'html内容', + `attachment` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '附件', + `page_view_count` int NOT NULL DEFAULT '0' COMMENT '页面浏览量,传说中的pv', + `user_view_count` int NOT NULL DEFAULT '0' COMMENT '用户浏览量,传说中的uv', + `source` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '来源', + `author` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '作者', + `document_number` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '文号,如:1024创新实验室发〔2022〕字第36号', + `deleted_flag` tinyint(1) NOT NULL DEFAULT '0', + `create_user_id` bigint DEFAULT NULL COMMENT '创建人', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`notice_id`) +) ENGINE=InnoDB AUTO_INCREMENT=61 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='通知'; + +-- 正在导出表 smart_admin_v2.t_notice 的数据:~27 rows (大约) +DELETE FROM `t_notice`; +/*!40000 ALTER TABLE `t_notice` DISABLE KEYS */; +INSERT INTO `t_notice` (`notice_id`, `notice_type_id`, `title`, `all_visible_flag`, `scheduled_publish_flag`, `publish_time`, `content_text`, `content_html`, `attachment`, `page_view_count`, `user_view_count`, `source`, `author`, `document_number`, `deleted_flag`, `create_user_id`, `update_time`, `create_time`) VALUES + (49, 1, 'Spring Boot 3.0.0 首个 RC 发布', 1, 0, '2022-10-22 14:27:34', 'Spring Boot 3.0.0 首个 RC 发布\nSpring Boot 3.0 首个 RC 已发布,此外还为两个分支发布了更新:2.7.5 & 2.6.13。\n3.0.0-RC1\n发布公告写道,此版本包含 135 项功能增强、文档改进、依赖升级和 Bugfix。\nSpring Boot 3.0 的开发工作始于实验性的 Spring Native,旨在为 GraalVM 原生镜像提供支持。在该版本中,开发者现在可以使用标准 Spring Boot Maven 或 Gradle 插件将 Spring Boot 应用程序转换为原生可执行文件,而无需任何特殊配置。\n此版本还在参考文档中添加新内容来解释 AOT 处理背后的概念以及如何开始生成第一个 GraalVM 原生镜像。\n除此之外,Spring Boot 3.0 还完成了迁移到 JakartaEE 9 的工作,以及将使用的 Java 版本升级到 Java 17。\n其他新特性:\n为 Spring Data JDBC 提供更灵活的自动配置为 Prometheus 示例提供自动配置增强 Log4j2 功能,包括配置文件支持和环境属性查找\n详情查看 Release Note。\nSpring Boot 2.7.5 和 2.6.13 的更新内容主要是修复错误,优化文档和升级依赖,详情查看 Release Note (2.7.5、2.6.13)。\n相关链接\nSpring Boot 的详细介绍:点击查看Spring Boot 的下载地址:点击下载', '

Spring Boot 3.0.0 首个 RC 发布

Spring Boot 3.0 首个 RC 已发布,此外还为两个分支发布了更新:2.7.5 & 2.6.13。

3.0.0-RC1

发布公告写道,此版本包含 135 项功能增强、文档改进、依赖升级和 Bugfix。

Spring Boot 3.0 的开发工作始于实验性的 Spring Native,旨在为 GraalVM 原生镜像提供支持。在该版本中,开发者现在可以使用标准 Spring Boot Maven 或 Gradle 插件将 Spring Boot 应用程序转换为原生可执行文件,而无需任何特殊配置。

此版本还在参考文档中添加新内容来解释 AOT 处理背后的概念以及如何开始生成第一个 GraalVM 原生镜像。

除此之外,Spring Boot 3.0 还完成了迁移到 JakartaEE 9 的工作,以及将使用的 Java 版本升级到 Java 17。

其他新特性:

为 Spring Data JDBC 提供更灵活的自动配置为 Prometheus 示例提供自动配置增强 Log4j2 功能,包括配置文件支持和环境属性查找

详情查看 Release Note。

Spring Boot 2.7.5 和 2.6.13 的更新内容主要是修复错误,优化文档和升级依赖,详情查看 Release Note (2.7.5、2.6.13)。

相关链接

Spring Boot 的详细介绍:点击查看Spring Boot 的下载地址:点击下载

', '', 0, 0, '开源中国', '卓大', NULL, 0, 1, '2022-10-22 14:27:33', '2022-10-22 14:27:33'), + (50, 1, 'Oracle 推出 JDK 8 的直接替代品', 1, 0, '2022-10-22 14:29:56', 'Oracle 推出 JDK 8 的直接替代品\n来源: OSCHINA\n编辑: 白开水不加糖\n2022-10-20 08:14:29\n 0\n为了向传统的 Java 8 服务器工作负载提供 Java 17 级别的性能,Oracle 宣布推出 Java SE Subscription Enterprise Performance Pack (Enterprise Performance Pack)。并声称这是 JDK 8 的直接替代品,现已在 MyOracleSupport 上面向所有 Java SE 订阅客户和 Oracle 云基础设施 (OCI) 用户免费提供。\n“Enterprise Performance Pack 为 JDK 8 用户提供了在 JDK 8 和 JDK 17 发布之间的 7 年时间里,为 Java 带来的重大内存管理和性能改进。这些改进包括:现代垃圾回收算法、紧凑字符串、增强的可观察性和数十种其他优化。”\nJava 8 发布于 2014 年,和 Java 17 一样都是长期支持 (LTS) 版本;尽管发布距今已有近九年的历史,但仍被很多开发人员和组织所广泛应用。New Relic 发布的一份 “2022 年 Java 生态系统状况报告” 数据表明,Java 8 仍被 46.45% 的 Java 应用程序在生产中使用。\n根据介绍,Enterprise Performance Pack 在 Intel 和基于 Arm 的系统(如 Ampere Altra)上支持 headless Linux 64 位工作负载。\nOracle 方面称,使用 Enterprise Performance Pack 的客户将可以立即看到以或接近内存或 CPU 容量运行的 JDK 8 工作负载的好处。在 Oracle 自己的产品和云服务进行的测试表明,高负载应用程序的内存和性能都提高了大约 40%。即使没有接近容量运行的 JDK 8 应用程序,也可以会看到高达 5% 的性能提升。\n虽然 Enterprise Performance Pack 中包含的许多改进可以通过默认选项获得,但 Oracle 建议用户还是自己研究文档,以最大限度地提高性能并最大限度地降低内存使用率。例如,通过启用可扩展的低延迟 ZGC 垃圾收集器来提高应用程序响应能力,需要通过 -XX:+UseZGC 选项。', '

Oracle 推出 JDK 8 的直接替代品

来源: OSCHINA

编辑: 白开水不加糖

2022-10-20 08:14:29

 0

为了向传统的 Java 8 服务器工作负载提供 Java 17 级别的性能,Oracle 宣布推出 Java SE Subscription Enterprise Performance Pack (Enterprise Performance Pack)。并声称这是 JDK 8 的直接替代品,现已在 MyOracleSupport 上面向所有 Java SE 订阅客户和 Oracle 云基础设施 (OCI) 用户免费提供。

“Enterprise Performance Pack 为 JDK 8 用户提供了在 JDK 8 和 JDK 17 发布之间的 7 年时间里,为 Java 带来的重大内存管理和性能改进。这些改进包括:现代垃圾回收算法、紧凑字符串、增强的可观察性和数十种其他优化。”

Java 8 发布于 2014 年,和 Java 17 一样都是长期支持 (LTS) 版本;尽管发布距今已有近九年的历史,但仍被很多开发人员和组织所广泛应用。New Relic 发布的一份 “2022 年 Java 生态系统状况报告” 数据表明,Java 8 仍被 46.45% 的 Java 应用程序在生产中使用。

根据介绍,Enterprise Performance Pack 在 Intel 和基于 Arm 的系统(如 Ampere Altra)上支持 headless Linux 64 位工作负载。

Oracle 方面称,使用 Enterprise Performance Pack 的客户将可以立即看到以或接近内存或 CPU 容量运行的 JDK 8 工作负载的好处。在 Oracle 自己的产品和云服务进行的测试表明,高负载应用程序的内存和性能都提高了大约 40%。即使没有接近容量运行的 JDK 8 应用程序,也可以会看到高达 5% 的性能提升。

虽然 Enterprise Performance Pack 中包含的许多改进可以通过默认选项获得,但 Oracle 建议用户还是自己研究文档,以最大限度地提高性能并最大限度地降低内存使用率。例如,通过启用可扩展的低延迟 ZGC 垃圾收集器来提高应用程序响应能力,需要通过 -XX:+UseZGC 选项。

', '', 0, 0, 'OSChina', '卓大', NULL, 0, 1, '2022-10-22 14:29:56', '2022-10-22 14:29:56'), + (51, 1, 'Spring Framework 6.0.0 RC2 发布', 1, 0, '2022-10-22 14:30:46', 'Spring Framework 6.0.0 RC2 发布\nSpring Framework 6.0.0 发布了第二个 RC 版本。\n新特性\n确保可以在构建时评估 classpath 检查 #29352为 JPA 持久化回调引入 Register 反射提示 #29348检查 @RegisterReflectionForBinding 是否至少指定一个类 #29346为 AOT 引擎设置引入 builder API #29341支持检测正在进行的 AOT 处理 #29340重新组织 HTTP Observation 类型 #29334支持在没有 java.beans.Introspector 的前提下,执行基本属性判断 #29320为BindingReflectionHintsRegistrar 添加 Kotlin 数据类组件支持 #29316将 HttpServiceFactory 和 RSocketServiceProxyFactory 切换到 builder 模型,以便优先进行可编程配置 #29296引入基于 GraalVM FieldValueTransformer API 的 PreComputeFieldFeature#29081在 TestContext 框架中引入 SPI 来处理 ApplicationContext 故障 #28826SimpleEvaluationContext 支持禁用 array 分配 #28808DateTimeFormatterRegistrar 支持默认回退到 ISO 解析 #26985\nSpring Framework 6.0 作为重大更新,要求使用 Java 17 或更高版本,并且已迁移到 Jakarta EE 9+(在 jakarta 命名空间中取代了以前基于 javax 的 EE API),以及对其他基础设施的修改。基于这些变化,Spring Framework 6.0 支持最新 Web 容器,如 Tomcat 10 / Jetty 11,以及最新的持久性框架 Hibernate ORM 6.1。这些特性仅可用于 Servlet API 和 JPA 的 jakarta 命名空间变体。\n值得一提的是,开发者可通过此版本在基于 Spring 的应用中体验 “虚拟线程”(JDK 19 中的预览版 “Project Loom”),查看此文章了解更多细节。现在提供了自定义选项来插入基于虚拟线程的 Executor 实现,目标是在 Project Loom 正式可用时提供 “一等公民” 的配置选项。\n除了上述的变化,Spring Framework 6.0 还包含许多其他改进和特性,例如:\n提供基于 @HttpExchange 服务接口的 HTTP 接口客户端对 RFC 7807 问题详细信息的支持Spring HTTP 客户端提供基于 Micrometer 的可观察性……\n详情查看 Release Note。\n按照发布计划,Spring Framework 6.0 将于 11 月正式 GA。', '

Spring Framework 6.0.0 RC2 发布

Spring Framework 6.0.0 发布了第二个 RC 版本

新特性

  • 确保可以在构建时评估 classpath 检查 #29352
  • 为 JPA 持久化回调引入 Register 反射提示 #29348
  • 检查 @RegisterReflectionForBinding 是否至少指定一个类 #29346
  • 为 AOT 引擎设置引入 builder API #29341
  • 支持检测正在进行的 AOT 处理 #29340
  • 重新组织 HTTP Observation 类型 #29334
  • 支持在没有 java.beans.Introspector 的前提下,执行基本属性判断 #29320
  • BindingReflectionHintsRegistrar 添加 Kotlin 数据类组件支持 #29316
  • 将 HttpServiceFactory 和 RSocketServiceProxyFactory 切换到 builder 模型,以便优先进行可编程配置 #29296
  • 引入基于 GraalVM FieldValueTransformer API 的 PreComputeFieldFeature#29081
  • 在 TestContext 框架中引入 SPI 来处理 ApplicationContext 故障 #28826
  • SimpleEvaluationContext 支持禁用 array 分配 #28808
  • DateTimeFormatterRegistrar 支持默认回退到 ISO 解析 #26985

Spring Framework 6.0 作为重大更新,要求使用 Java 17 或更高版本,并且已迁移到 Jakarta EE 9+(在 jakarta 命名空间中取代了以前基于 javax 的 EE API),以及对其他基础设施的修改。基于这些变化,Spring Framework 6.0 支持最新 Web 容器,如 Tomcat 10 / Jetty 11,以及最新的持久性框架 Hibernate ORM 6.1。这些特性仅可用于 Servlet API 和 JPA 的 jakarta 命名空间变体。

值得一提的是,开发者可通过此版本在基于 Spring 的应用中体验 “虚拟线程”(JDK 19 中的预览版 “Project Loom”),查看此文章了解更多细节。现在提供了自定义选项来插入基于虚拟线程的 Executor 实现,目标是在 Project Loom 正式可用时提供 “一等公民” 的配置选项。

除了上述的变化,Spring Framework 6.0 还包含许多其他改进和特性,例如:

详情查看 Release Note

按照发布计划,Spring Framework 6.0 将于 11 月正式 GA。

', '', 0, 0, 'CSDN', '罗伊', NULL, 0, 1, '2022-10-22 14:30:45', '2022-10-22 14:30:45'), + (52, 1, 'Windows Terminal 正式成为 Windows 11 默认终端', 1, 0, '2022-10-22 14:33:03', '今年 7 月 ,微软在 Windows 11 的 Beta 版本测试了将系统默认终端设置为 Windows Terminal 。如今该设置已登录稳定版本,从 Windows 11 22H2 版本开始,Windows Terminal 将正式成为 Windows 11 的默认设置。\n默认终端是在打开命令行应用程序时默认启动的终端模拟器。从 Windows 诞生之日起,其默认终端一直是 Windows 控制台主机 conhost.exe。此次更新则意味着,以后 Windows 11 的所有命令行应用程序都将在 Windows Terminal 中自动打开。\nWindows Terminal 拥有非常多现代化的功能,毕竟它很新( 2019 年 5 月在 Microsoft Build 上首次发布),吸取了很多现代终端的灵感。它支持多选项卡和窗格、命令面板等现代化的 UI 和操作方式,以及大量的自定义选项,比如目录、配置文件图标、自定义背景图像、配色方案、字体和透明度。\n当然,如果不想用 Windows Terminal,用户也可以在 Windows 设置中的 隐私和安全 > 开发人员页面和 Windows 终端设置 中调整默认终端设置,(此更新使用 “让 Windows 决定” 作为默认选择,即默认采用 Windows Terminal) 。\n此外,如果在更新之前就已设置其他默认终端,此次更新不会覆盖你的偏好。\n关于 Windows 11 默认终端的更多详情可查看微软博客。', '

今年 7 月 ,微软在 Windows 11 的 Beta 版本测试了将系统默认终端设置为 Windows Terminal 。如今该设置已登录稳定版本,从 Windows 11 22H2 版本开始,Windows Terminal 将正式成为 Windows 11 的默认设置。

默认终端是在打开命令行应用程序时默认启动的终端模拟器。从 Windows 诞生之日起,其默认终端一直是 Windows 控制台主机 conhost.exe。此次更新则意味着,以后 Windows 11 的所有命令行应用程序都将在 Windows Terminal 中自动打开。

Windows Terminal 拥有非常多现代化的功能,毕竟它很新( 2019 年 5 月在 Microsoft Build 上首次发布),吸取了很多现代终端的灵感。它支持多选项卡和窗格、命令面板等现代化的 UI 和操作方式,以及大量的自定义选项,比如目录、配置文件图标、自定义背景图像、配色方案、字体和透明度。

当然,如果不想用 Windows Terminal,用户也可以在 Windows 设置中的 隐私和安全 > 开发人员页面和 Windows 终端设置 中调整默认终端设置,(此更新使用 “让 Windows 决定” 作为默认选择,即默认采用 Windows Terminal) 。

此外,如果在更新之前就已设置其他默认终端,此次更新不会覆盖你的偏好。

关于 Windows 11 默认终端的更多详情可查看微软博客

', '', 0, 0, '开源中国', '善逸', NULL, 0, 1, '2022-10-22 14:33:03', '2022-10-22 14:33:03'), + (53, 1, 'TypeScript 诞生 10 周年', 1, 0, '2022-10-22 14:34:56', 'TypeScript 已经诞生 10 年了。10 年前 ——2012 年 10 月 1 日,TypeScript 首次公开亮相。当时主导 TypeScript 开发的 Anders Hejlsberg 这样描述 TypeScript:\n它是 JavaScript 的类型化超集,可被编译成常用的 JavaScript。TypeScript 还可以通过启用丰富的工具体验来极大地帮助提升生产力,与此同时开发者保持不变维护现有的代码,并继续使用喜爱的 JavaScript 库。TypeScript is a typed superset of JavaScript that compiles to idiomatic (normal) JavaScript, can dramatically improve your productivity by enabling rich tooling experiences, all while maintaining your existing code and continuing to use the same JavaScript libraries you already love.\n微软在博客中回顾了 TypeScript 刚亮相时受到的评价,大多数人对它都是持怀疑态度,毕竟这对于许多 JavaScript 开发者来说,试图将静态类型引入 JavaScript 是一个笑话 —— 或是邪恶的阴谋。反对者则直言这是十分愚蠢的想法,他们认为当时已存在可以编译为 JavaScript 的强类型语言,例如 C#、Java 和 C++。他们还吐槽主导 TypeScript 开发的 Anders Hejlsberg 对静态类型有 “迷之执着”。\n当时微软意识到 JavaScript 未来将会被应用到无数场景,而且他们公司内部团队在处理复杂的 JavaScript 代码库时面临着巨大的挑战,所以他们觉得有必要创造强大的工具来帮助编写 JavaScript—— 尤其是针对大型 JavaScript 项目。基于此需求,TypeScript 也确定了自己的定位和特性,它是 JavaScript 的超集,将类型检查和静态分析、显式接口和最佳实践结合到单一语言和编译器中。通过在 JavaScript 上构建,TypeScript 能够更接近目标运行时,同时仅添加支持大型应用程序和大型团队所需的语法糖。\n团队还坚持 TypeScript 要能够与现有的 JavaScript 无缝交互,与 JavaScript 共同进化,并且看上去也和 JavaScript 类似。\nTypeScript 诞生之初的部分设计目标:\n不会对已有的程序增加运行时开销与当前和未来的 ECMAScript 提案保持一致保留所有 JavaScript 代码的运行时行为避免添加表达式类型的语法 (expression-level syntax)使用一致、完全可擦除的结构化类型系统……\n这些目标指导着 TypeScript 的发展方向:关注类型系统,成为 JavaScript 的类型检查器,只添加类型检查所需的语法,避免添加新的运行时语法和行为。\n微软提到,TypeScript 拥有如今的繁荣生态离不开一个重要属性:开源。TypeScript 一开始就是免费且开源 —— 语言规范和编译器都是开源项目,并且以真正开放的方式来运作。事实上,微软当时对外展现出的姿态并不是现在的 “拥抱开源”,所以他们内部并没真正认识到 TypeScript 的开源是如何帮助它走向成功。因此有人认为,TypeScript 在很大程度上引导微软开始更多地转向开源。\n现在,TypeScript 仍在积极发展和迭代改进,并被全球数百万开发者使用。在诸多编程语言排名、指数或开发者调查中,TypeScript 一直位居前列,也是最受欢迎和最常用的编程语言。', '

TypeScript 已经诞生 10 年了。10 年前 ——2012 年 10 月 1 日,TypeScript 首次公开亮相。当时主导 TypeScript 开发的 Anders Hejlsberg 这样描述 TypeScript:

它是 JavaScript 的类型化超集,可被编译成常用的 JavaScript。TypeScript 还可以通过启用丰富的工具体验来极大地帮助提升生产力,与此同时开发者保持不变维护现有的代码,并继续使用喜爱的 JavaScript 库。TypeScript is a typed superset of JavaScript that compiles to idiomatic (normal) JavaScript, can dramatically improve your productivity by enabling rich tooling experiences, all while maintaining your existing code and continuing to use the same JavaScript libraries you already love.

微软在博客中回顾了 TypeScript 刚亮相时受到的评价,大多数人对它都是持怀疑态度,毕竟这对于许多 JavaScript 开发者来说,试图将静态类型引入 JavaScript 是一个笑话 —— 或是邪恶的阴谋。反对者则直言这是十分愚蠢的想法,他们认为当时已存在可以编译为 JavaScript 的强类型语言,例如 C#、Java 和 C++。他们还吐槽主导 TypeScript 开发的 Anders Hejlsberg 对静态类型有 “迷之执着”。

当时微软意识到 JavaScript 未来将会被应用到无数场景,而且他们公司内部团队在处理复杂的 JavaScript 代码库时面临着巨大的挑战,所以他们觉得有必要创造强大的工具来帮助编写 JavaScript—— 尤其是针对大型 JavaScript 项目。基于此需求,TypeScript 也确定了自己的定位和特性,它是 JavaScript 的超集,将类型检查和静态分析、显式接口和最佳实践结合到单一语言和编译器中。通过在 JavaScript 上构建,TypeScript 能够更接近目标运行时,同时仅添加支持大型应用程序和大型团队所需的语法糖。

团队还坚持 TypeScript 要能够与现有的 JavaScript 无缝交互,与 JavaScript 共同进化,并且看上去也和 JavaScript 类似。

TypeScript 诞生之初的部分设计目标

  • 不会对已有的程序增加运行时开销
  • 与当前和未来的 ECMAScript 提案保持一致
  • 保留所有 JavaScript 代码的运行时行为
  • 避免添加表达式类型的语法 (expression-level syntax)
  • 使用一致、完全可擦除的结构化类型系统
  • ……

这些目标指导着 TypeScript 的发展方向:关注类型系统,成为 JavaScript 的类型检查器,只添加类型检查所需的语法,避免添加新的运行时语法和行为。

微软提到,TypeScript 拥有如今的繁荣生态离不开一个重要属性:开源。TypeScript 一开始就是免费且开源 —— 语言规范和编译器都是开源项目,并且以真正开放的方式来运作。事实上,微软当时对外展现出的姿态并不是现在的 “拥抱开源”,所以他们内部并没真正认识到 TypeScript 的开源是如何帮助它走向成功。因此有人认为,TypeScript 在很大程度上引导微软开始更多地转向开源。

现在,TypeScript 仍在积极发展和迭代改进,并被全球数百万开发者使用。在诸多编程语言排名、指数或开发者调查中,TypeScript 一直位居前列,也是最受欢迎和最常用的编程语言。

', '', 0, 0, '开源中国', '开云', NULL, 0, 1, '2022-10-22 14:34:56', '2022-10-22 14:34:56'), + (54, 1, 'JetBrains Fleet 公测,下一代 IDE', 1, 0, '2022-10-22 14:36:10', 'JetBrains 宣布首次公共预览 Fleet,所有人都可以使用。Fleet 是由 JetBrains 打造的下一代 IDE,于 2021 年首次正式推出。它是一个新的分布式多语言编辑器和 IDE,基于 JetBrains 在后端的 IntelliJ 平台,采用了全新的用户界面和分布式架构从头开始构建。\n下载 Fleet:https://www.jetbrains.com.cn/fleet/download/\n\n公告表示,自从最初宣布 Fleet 以来,有超过 137,000 人报名参加私人预览;官方最初之所以决定从封闭式预览开始,是为了能够以渐进的方式处理反馈。现如今,JetBrains Fleet 仍处于起步阶段,还有大量的工作要做。其向公众开放预览的原因有两个方面:“首先,我们认为让所有注册者再等下去是不对的,但单独邀请这么多人对我们来说也缺乏意义。面向公众开放预览对我们来说更容易。第二,也是最重要的,我们一直是一家以开放态度打造产品的公司。我们不希望 Fleet 在这方面有任何不同。”\nJetBrains 方面提供了一个图表,以显示 Fleet 目前提供支持的语言和技术,以及每个技术的状态。但值得注意的是,Fleet 仍处于早期阶段,有些事情可能无法按预期工作;所以即使有些东西被列为受支持的,也有可能存在问题。\n同时 JetBrains 也强调称,他们并不打算取代其现有的 IDE。\n因此,请不要期望在 Fleet 中看到与我们的 IDE(如 IntelliJ IDEA)完全相同的功能。尽管我们会继续开发 Fleet,我们 IDE 的所有功能也不会出现在其中。Fleet 是我们为开发者提供不同用户体验的一个机会。话虽如此,我们确实希望听到你认为 Fleet 还缺少什么功能的反馈,例如特定的重构选项、工具集成等。我们现有的 IDE 将继续发展。我们对其有很多计划,包括性能改进、新的用户界面、远程开发等等。最后,Fleet 还在底层采用了我们现有工具的智慧,所以这些工具都不会消失。\nJetBrains 透露,在未来几个月他们将致力于稳定 Fleet,并尽可能地解决得到的反馈。同时,将在以下领域开展工作:\n为插件作者提供 API 支持和 SDK–鉴于 Fleet 有一个分布式架构,我们需要努力为插件作者简化工作。 虽然我们保证会为扩展 Fleet 提供一个平台,但也请求大家在这方面多一点耐心。 性能 – 我们希望 Fleet 不仅在内存占用方面,而且在响应时间方面都能表现出色。 有很多地方我们仍然可以提高性能,我们将在这些方面努力。 主题和键盘地图 – 我们知道许多开发者已经习惯了他们现有的编辑器和 IDE,当他们转移到新的 IDE 时,往往会想念他们以前的键盘绑定和主题。 我们将致力于增加对更多主题和键盘映射的支持。 我们当然也会致力于 Vim 的模拟。\n更多详情可查看官方博客。', '

JetBrains 宣布首次公共预览 Fleet,所有人都可以使用。Fleet 是由 JetBrains 打造的下一代 IDE,于 2021 年首次正式推出。它是一个新的分布式多语言编辑器和 IDE,基于 JetBrains 在后端的 IntelliJ 平台,采用了全新的用户界面和分布式架构从头开始构建。

下载 Fleet:https://www.jetbrains.com.cn/fleet/download/


公告表示,自从最初宣布 Fleet 以来,有超过 137,000 人报名参加私人预览;官方最初之所以决定从封闭式预览开始,是为了能够以渐进的方式处理反馈。现如今,JetBrains Fleet 仍处于起步阶段,还有大量的工作要做。其向公众开放预览的原因有两个方面:“首先,我们认为让所有注册者再等下去是不对的,但单独邀请这么多人对我们来说也缺乏意义。面向公众开放预览对我们来说更容易。第二,也是最重要的,我们一直是一家以开放态度打造产品的公司。我们不希望 Fleet 在这方面有任何不同。”

JetBrains 方面提供了一个图表,以显示 Fleet 目前提供支持的语言和技术,以及每个技术的状态。但值得注意的是,Fleet 仍处于早期阶段,有些事情可能无法按预期工作;所以即使有些东西被列为受支持的,也有可能存在问题。

同时 JetBrains 也强调称,他们并不打算取代其现有的 IDE。

因此,请不要期望在 Fleet 中看到与我们的 IDE(如 IntelliJ IDEA)完全相同的功能。尽管我们会继续开发 Fleet,我们 IDE 的所有功能也不会出现在其中。Fleet 是我们为开发者提供不同用户体验的一个机会。话虽如此,我们确实希望听到你认为 Fleet 还缺少什么功能的反馈,例如特定的重构选项、工具集成等。我们现有的 IDE 将继续发展。我们对其有很多计划,包括性能改进、新的用户界面、远程开发等等。最后,Fleet 还在底层采用了我们现有工具的智慧,所以这些工具都不会消失。

JetBrains 透露,在未来几个月他们将致力于稳定 Fleet,并尽可能地解决得到的反馈。同时,将在以下领域开展工作:

  • 为插件作者提供 API 支持和 SDK–鉴于 Fleet 有一个分布式架构,我们需要努力为插件作者简化工作。 虽然我们保证会为扩展 Fleet 提供一个平台,但也请求大家在这方面多一点耐心。 
  • 性能 – 我们希望 Fleet 不仅在内存占用方面,而且在响应时间方面都能表现出色。 有很多地方我们仍然可以提高性能,我们将在这些方面努力。 
  • 主题和键盘地图 – 我们知道许多开发者已经习惯了他们现有的编辑器和 IDE,当他们转移到新的 IDE 时,往往会想念他们以前的键盘绑定和主题。 我们将致力于增加对更多主题和键盘映射的支持。 我们当然也会致力于 Vim 的模拟。

更多详情可查看官方博客

', '', 0, 0, 'CSDN', '开云', NULL, 0, 1, '2022-10-22 14:36:10', '2022-10-22 14:36:10'), + (55, 2, '1024创新实验室 十一放假通知', 1, 0, '2022-09-29 14:37:57', '国庆假期即将来临,根据国务院办公厅关于国庆节的放假安排,废纸信息网安排如下:10月1日至7日放假调休,共7天。\n衷心预祝\n国庆快乐,阖家幸福!', '

国庆假期即将来临,根据国务院办公厅关于国庆节的放假安排,废纸信息网安排如下:10月1日至7日放假调休,共7天。

衷心预祝

国庆快乐,阖家幸福!

', '', 0, 0, '人力行政部', '卓大', '1024创新实验室发〔2022〕字第36号', 0, 1, '2022-10-22 14:53:55', '2022-10-22 14:37:57'), + (56, 2, '十月份技术分享会议', 1, 0, '2022-10-08 14:40:46', '尊敬的各位技术大佬:\n1024创新实验室技术分享即将隆重举行\n现将有关会议事宜通知如下:\n一、会议内容\n1、研究探讨SmartAdmin的技术体系\n二、会议形式\n大会专题小会分组讨论;\n三、会议时间及地点\n会议报到时间:xxx1年6月14日\n会议报到地点:洛阳市', '

尊敬的各位技术大佬:

1024创新实验室技术分享即将隆重举行

现将有关会议事宜通知如下:

一、会议内容

1、研究探讨SmartAdmin的技术体系

二、会议形式

大会专题小会分组讨论;

三、会议时间及地点

会议报到时间:xxx1年6月14日

会议报到地点:洛阳市

', '', 0, 0, '技术部', '开云', '1024创新实验室发〔2022〕字第33号', 0, 1, '2022-10-22 14:53:42', '2022-10-22 14:40:45'), + (57, 2, '关于疫情防控上班通知', 1, 0, '2022-06-28 14:46:01', '近期,国内部分地区疫情频发,多地疫情出现外溢,为有效降低我市疫情输入和传播风险,洛阳市疾病预防控制中心发布疫情防控公众提示:\n一、所有入(返)洛阳人员均需提前3天向目的地社区(村居)、酒店宾馆、接待单位等所属网格进行报备,或通过“洛阳即时通系统”进行自主报备,配合做好健康码和行程码查验、核酸检测、隔离观察和健康监测等相关疫情防控措施。\n二、倡导广大群众减少跨地市出行,避免人群大范围流动引发的疫情传播扩散风险。\n三、对7天内有高风险区旅居史的人员,采取7天集中隔离医学观察;对7天内有中风险区旅居史的人员,采取7天居家隔离医学观察,如不具备居家隔离医学观察条件的,采取集中隔离医学观察。\n四、对疫情发生地出现一定范围社区传播或已实施大范围社区管控措施,基于对疫情输入风险研判结果,对近7天内来自疫情发生地所在县(市、区)的流入人员,参照中风险区旅居史人员的防控要求采取相应措施。\n五、对所有省外入(返)洛阳人员,须持有48小时内核酸检测阴性证明,抵达后进行“5天3检”,每次检测间隔24小时。推广“落地检”,按照“自愿免费即采即走,不限制流动”的原则,抵达我市后,立即进行1次核酸检测。\n六、加强重点机构场所疫情防控,坚持非必要不举办,对确需举办的培训、会展、文艺演出等大型聚集性活动,查验48小时内核酸检测阴性证明;建筑工地等人员密集型单位,查验外省(区、市)返岗人员48小时内核酸检测阴性证明;养老机构、儿童福利机构等查验探访人员48小时内核酸检测阴性证明;对进入宾馆、酒店和旅游景区等人流密集场所时,查验48小时内核酸检测阴性证明。\n七、近期有外出旅行史的人员,请密切关注疫情发生地区公布的病例和无症状感染者流调轨迹信息和中高风险区信息。有涉疫风险的人员要立即向社区(村)、住宿宾馆和单位报告,配合落实隔离医学观察。\n八、发热病人、健康码“黄码”等人员要履行个人防护责任,主动配合健康监测和核酸检测,在未排除感染风险前不出行。\n', '

近期,国内部分地区疫情频发,多地疫情出现外溢,为有效降低我市疫情输入和传播风险,洛阳市疾病预防控制中心发布疫情防控公众提示:

一、所有入(返)洛阳人员均需提前3天向目的地社区(村居)、酒店宾馆、接待单位等所属网格进行报备,或通过“洛阳即时通系统”进行自主报备,配合做好健康码和行程码查验、核酸检测、隔离观察和健康监测等相关疫情防控措施。

二、倡导广大群众减少跨地市出行,避免人群大范围流动引发的疫情传播扩散风险。

三、对7天内有高风险区旅居史的人员,采取7天集中隔离医学观察;对7天内有中风险区旅居史的人员,采取7天居家隔离医学观察,如不具备居家隔离医学观察条件的,采取集中隔离医学观察。

四、对疫情发生地出现一定范围社区传播或已实施大范围社区管控措施,基于对疫情输入风险研判结果,对近7天内来自疫情发生地所在县(市、区)的流入人员,参照中风险区旅居史人员的防控要求采取相应措施。

五、对所有省外入(返)洛阳人员,须持有48小时内核酸检测阴性证明,抵达后进行“5天3检”,每次检测间隔24小时。推广“落地检”,按照“自愿免费即采即走,不限制流动”的原则,抵达我市后,立即进行1次核酸检测。

六、加强重点机构场所疫情防控,坚持非必要不举办,对确需举办的培训、会展、文艺演出等大型聚集性活动,查验48小时内核酸检测阴性证明;建筑工地等人员密集型单位,查验外省(区、市)返岗人员48小时内核酸检测阴性证明;养老机构、儿童福利机构等查验探访人员48小时内核酸检测阴性证明;对进入宾馆、酒店和旅游景区等人流密集场所时,查验48小时内核酸检测阴性证明。

七、近期有外出旅行史的人员,请密切关注疫情发生地区公布的病例和无症状感染者流调轨迹信息和中高风险区信息。有涉疫风险的人员要立即向社区(村)、住宿宾馆和单位报告,配合落实隔离医学观察。

八、发热病人、健康码“黄码”等人员要履行个人防护责任,主动配合健康监测和核酸检测,在未排除感染风险前不出行。


', '', 0, 0, '行政部', '卓大', '1024创新实验室发〔2022〕字第40号', 0, 1, '2022-10-22 14:53:36', '2022-10-22 14:46:00'), + (58, 2, '办公室消杀关键位置通知', 1, 0, '2022-05-19 14:47:13', '开展消毒消杀是杀灭病源、切断疫情传播的有效手段,是防控疫情的重要措施。为了切实将新型冠状病毒肺炎疫情防控工作落到实处,守护好辖区居民及工作人员的身体健康和生命安全,青山镇高度重视新型冠状病毒肺炎的消杀工作,将采购的防护服,防护面罩,一次性手套,口罩,84消毒液,酒精消毒液以及喷雾工具等消毒消杀物资,分发到镇级各站所各村(社区),全镇开展消杀工作。', '

开展消毒消杀是杀灭病源、切断疫情传播的有效手段,是防控疫情的重要措施。为了切实将新型冠状病毒肺炎疫情防控工作落到实处,守护好辖区居民及工作人员的身体健康和生命安全,青山镇高度重视新型冠状病毒肺炎的消杀工作,将采购的防护服,防护面罩,一次性手套,口罩,84消毒液,酒精消毒液以及喷雾工具等消毒消杀物资,分发到镇级各站所各村(社区),全镇开展消杀工作。

', '', 0, 0, '行政部', '卓大', '1024创新实验室发〔2022〕字第26号', 0, 1, '2022-10-22 14:53:30', '2022-10-22 14:47:12'), + (59, 2, '十月份人事任命通知', 1, 0, '2022-09-22 14:50:12', '1024创新实验室发〔2022〕字第36号\n1024创新实验室发〔2022〕字第36号\n1024创新实验室发〔2022〕字第36号\n1024创新实验室发〔2022〕字第36号\n1024创新实验室发〔2022〕字第36号\n1024创新实验室发〔2022〕字第36号', '

1024创新实验室发〔2022〕字第36号

1024创新实验室发〔2022〕字第36号

1024创新实验室发〔2022〕字第36号

1024创新实验室发〔2022〕字第36号

1024创新实验室发〔2022〕字第36号

1024创新实验室发〔2022〕字第36号

', '', 0, 0, '销售部', '卓大', '1024创新实验室发〔2022〕字第30号', 0, 1, '2022-10-22 14:53:18', '2022-10-22 14:50:11'), + (60, 2, '1024创新实验室 春节放假通知', 1, 0, '2022-10-21 23:37:57', '春节假期即将来临,根据国务院办公厅关于国庆节的放假安排,废纸信息网安排如下:10月1日至7日放假调休,共7天。\n衷心预祝\n国庆快乐,阖家幸福!', '

国庆假期即将来临,根据国务院办公厅关于国庆节的放假安排,废纸信息网安排如下:10月1日至7日放假调休,共7天。

衷心预祝

国庆快乐,阖家幸福!

', '', 0, 0, '人力行政部', '卓大', '1024创新实验室发〔2022〕字第36号', 0, 1, '2022-10-22 14:53:09', '2022-10-22 14:37:57'); +/*!40000 ALTER TABLE `t_notice` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_notice_type 结构 +DROP TABLE IF EXISTS `t_notice_type`; +CREATE TABLE IF NOT EXISTS `t_notice_type` ( + `notice_type_id` bigint NOT NULL AUTO_INCREMENT COMMENT '通知类型', + `notice_type_name` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '类型名称', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`notice_type_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='通知类型'; + +-- 正在导出表 smart_admin_v2.t_notice_type 的数据:~2 rows (大约) +DELETE FROM `t_notice_type`; +/*!40000 ALTER TABLE `t_notice_type` DISABLE KEYS */; +INSERT INTO `t_notice_type` (`notice_type_id`, `notice_type_name`, `create_time`, `update_time`) VALUES + (1, '公告', '2022-08-16 20:29:15', '2022-08-16 20:29:15'), + (2, '通知', '2022-08-16 20:29:20', '2022-08-16 20:29:20'); +/*!40000 ALTER TABLE `t_notice_type` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_notice_view_record 结构 +DROP TABLE IF EXISTS `t_notice_view_record`; +CREATE TABLE IF NOT EXISTS `t_notice_view_record` ( + `notice_id` int NOT NULL COMMENT '通知公告id', + `employee_id` int NOT NULL COMMENT '员工id', + `page_view_count` int DEFAULT '0' COMMENT '查看次数', + `first_ip` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '首次ip', + `first_user_agent` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '首次用户设备等标识', + `last_ip` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最后一次ip', + `last_user_agent` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最后一次用户设备等标识', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`notice_id`,`employee_id`) USING BTREE, + UNIQUE KEY `uk_notice_employee` (`notice_id`,`employee_id`) USING BTREE COMMENT '资讯员工' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='通知查看记录'; + +-- 正在导出表 smart_admin_v2.t_notice_view_record 的数据:~36 rows (大约) +DELETE FROM `t_notice_view_record`; +/*!40000 ALTER TABLE `t_notice_view_record` DISABLE KEYS */; +INSERT INTO `t_notice_view_record` (`notice_id`, `employee_id`, `page_view_count`, `first_ip`, `first_user_agent`, `last_ip`, `last_user_agent`, `create_time`, `update_time`) VALUES + (60, 1, 1, '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', NULL, NULL, '2022-10-22 18:00:25', '2022-10-22 18:00:25'); +/*!40000 ALTER TABLE `t_notice_view_record` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_notice_visible_range 结构 +DROP TABLE IF EXISTS `t_notice_visible_range`; +CREATE TABLE IF NOT EXISTS `t_notice_visible_range` ( + `notice_id` int NOT NULL COMMENT '资讯id', + `data_type` tinyint NOT NULL COMMENT '数据类型1员工 2部门', + `data_id` int NOT NULL COMMENT '员工or部门id', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE KEY `uk_notice_data` (`notice_id`,`data_type`,`data_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='通知可见范围'; + +-- 正在导出表 smart_admin_v2.t_notice_visible_range 的数据:~0 rows (大约) +DELETE FROM `t_notice_visible_range`; +/*!40000 ALTER TABLE `t_notice_visible_range` DISABLE KEYS */; +/*!40000 ALTER TABLE `t_notice_visible_range` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_oa_bank 结构 +DROP TABLE IF EXISTS `t_oa_bank`; +CREATE TABLE IF NOT EXISTS `t_oa_bank` ( + `bank_id` bigint NOT NULL AUTO_INCREMENT COMMENT '银行信息ID', + `bank_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '开户银行', + `account_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '账户名称', + `account_number` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '账号', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '备注', + `business_flag` tinyint(1) NOT NULL COMMENT '是否对公', + `enterprise_id` bigint NOT NULL COMMENT '企业ID', + `disabled_flag` tinyint(1) NOT NULL DEFAULT '0' COMMENT '禁用状态', + `deleted_flag` tinyint(1) NOT NULL DEFAULT '0' COMMENT '删除状态', + `create_user_id` bigint NOT NULL COMMENT '创建人ID', + `create_user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '创建人', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`bank_id`) USING BTREE, + KEY `idx_enterprise_id` (`enterprise_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='OA银行信息\n'; + +-- 正在导出表 smart_admin_v2.t_oa_bank 的数据:~21 rows (大约) +DELETE FROM `t_oa_bank`; +/*!40000 ALTER TABLE `t_oa_bank` DISABLE KEYS */; +INSERT INTO `t_oa_bank` (`bank_id`, `bank_name`, `account_name`, `account_number`, `remark`, `business_flag`, `enterprise_id`, `disabled_flag`, `deleted_flag`, `create_user_id`, `create_user_name`, `create_time`, `update_time`) VALUES + (26, '工商银行', '1024创新实验室', '1024', '基本户', 1, 2, 0, 0, 1, '管理员', '2022-10-22 17:58:43', '2022-10-22 17:58:43'), + (27, '建设银行', '1024创新实验室', '10241', '其他户', 0, 2, 0, 0, 1, '管理员', '2022-10-22 17:59:19', '2022-10-22 17:59:19'); +/*!40000 ALTER TABLE `t_oa_bank` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_oa_enterprise 结构 +DROP TABLE IF EXISTS `t_oa_enterprise`; +CREATE TABLE IF NOT EXISTS `t_oa_enterprise` ( + `enterprise_id` bigint NOT NULL AUTO_INCREMENT COMMENT '企业ID', + `enterprise_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '企业名称', + `enterprise_logo` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '企业logo', + `type` int NOT NULL DEFAULT '1' COMMENT '类型(1:有限公司;2:合伙公司)', + `unified_social_credit_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '统一社会信用代码', + `contact` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '联系人', + `contact_phone` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '联系人电话', + `email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '邮箱', + `province` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '省份', + `province_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '省份名称', + `city` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '市', + `city_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '城市名称', + `district` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '区县', + `district_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '区县名称', + `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '详细地址', + `business_license` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '营业执照', + `disabled_flag` tinyint(1) NOT NULL DEFAULT '0' COMMENT '禁用状态', + `deleted_flag` tinyint(1) NOT NULL DEFAULT '0' COMMENT '删除状态', + `create_user_id` bigint NOT NULL COMMENT '创建人ID', + `create_user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '创建人', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`enterprise_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=119 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='OA企业模块\r\n'; + +-- 正在导出表 smart_admin_v2.t_oa_enterprise 的数据:~14 rows (大约) +DELETE FROM `t_oa_enterprise`; +/*!40000 ALTER TABLE `t_oa_enterprise` DISABLE KEYS */; +INSERT INTO `t_oa_enterprise` (`enterprise_id`, `enterprise_name`, `enterprise_logo`, `type`, `unified_social_credit_code`, `contact`, `contact_phone`, `email`, `province`, `province_name`, `city`, `city_name`, `district`, `district_name`, `address`, `business_license`, `disabled_flag`, `deleted_flag`, `create_user_id`, `create_user_name`, `create_time`, `update_time`) VALUES + (1, '1024创新区块链实验室', 'public/common/f4a76fa720814949a610f05f6f9545bf_20221022170256_jpg', 1, '1024lab_block', '开云', '18637925892', NULL, '410000', '河南省', '410300', '洛阳市', '410311', '洛龙区', '区块链大楼', 'public/common/852b7e19bef94af39c1a6156edf47cfb_20221022170332_jpg', 0, 0, 1, '管理员', '2021-10-22 17:03:35', '2022-10-22 17:04:18'), + (2, '1024创新实验室', 'public/common/fb827d63dda74a60ab8b4f70cc7c7d0a_20221022145641_jpg', 1, '1024lab', '卓大', '18637925892', 'lab1024@163.com', '410000', '河南省', '410300', '洛阳市', '410311', '洛龙区', '1024大楼', NULL, 0, 0, 44, '卓大', '2022-10-22 14:57:36', '2022-10-22 17:03:57'); +/*!40000 ALTER TABLE `t_oa_enterprise` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_oa_enterprise_employee 结构 +DROP TABLE IF EXISTS `t_oa_enterprise_employee`; +CREATE TABLE IF NOT EXISTS `t_oa_enterprise_employee` ( + `enterprise_employee_id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `enterprise_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '订单ID', + `employee_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '货物名称', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`enterprise_employee_id`) USING BTREE, + UNIQUE KEY `uk_enterprise_employee` (`enterprise_id`,`employee_id`) USING BTREE, + KEY `idx_employee_id` (`employee_id`) USING BTREE, + KEY `idx_enterprise_id` (`enterprise_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=157 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='企业关联的员工'; + +-- 正在导出表 smart_admin_v2.t_oa_enterprise_employee 的数据:~63 rows (大约) +DELETE FROM `t_oa_enterprise_employee`; +/*!40000 ALTER TABLE `t_oa_enterprise_employee` DISABLE KEYS */; +INSERT INTO `t_oa_enterprise_employee` (`enterprise_employee_id`, `enterprise_id`, `employee_id`, `update_time`, `create_time`) VALUES + (154, '2', '2', '2022-10-22 17:57:50', '2022-10-22 17:57:50'), + (155, '2', '44', '2022-10-22 17:57:50', '2022-10-22 17:57:50'); +/*!40000 ALTER TABLE `t_oa_enterprise_employee` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_oa_invoice 结构 +DROP TABLE IF EXISTS `t_oa_invoice`; +CREATE TABLE IF NOT EXISTS `t_oa_invoice` ( + `invoice_id` bigint NOT NULL AUTO_INCREMENT COMMENT '发票信息ID', + `invoice_heads` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '开票抬头', + `taxpayer_identification_number` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '纳税人识别号', + `account_number` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '银行账户', + `bank_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '开户行', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '备注', + `enterprise_id` bigint NOT NULL COMMENT '企业ID', + `disabled_flag` tinyint(1) NOT NULL DEFAULT '0' COMMENT '禁用状态', + `deleted_flag` tinyint(1) NOT NULL DEFAULT '0' COMMENT '删除状态', + `create_user_id` bigint NOT NULL COMMENT '创建人ID', + `create_user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '创建人', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`invoice_id`) USING BTREE, + KEY `idx_enterprise_id` (`enterprise_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='OA发票信息\n'; + +-- 正在导出表 smart_admin_v2.t_oa_invoice 的数据:~14 rows (大约) +DELETE FROM `t_oa_invoice`; +/*!40000 ALTER TABLE `t_oa_invoice` DISABLE KEYS */; +INSERT INTO `t_oa_invoice` (`invoice_id`, `invoice_heads`, `taxpayer_identification_number`, `account_number`, `bank_name`, `remark`, `enterprise_id`, `disabled_flag`, `deleted_flag`, `create_user_id`, `create_user_name`, `create_time`, `update_time`) VALUES + (15, '1024创新实验室', '1024lab', '1024lab', '中国银行', '', 2, 0, 0, 1, '管理员', '2022-10-22 17:59:35', '2022-10-22 17:59:35'); +/*!40000 ALTER TABLE `t_oa_invoice` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_operate_log 结构 +DROP TABLE IF EXISTS `t_operate_log`; +CREATE TABLE IF NOT EXISTS `t_operate_log` ( + `operate_log_id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `operate_user_id` int NOT NULL COMMENT '用户id', + `operate_user_type` int NOT NULL COMMENT '用户类型', + `operate_user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户名称', + `module` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作模块', + `content` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作内容', + `url` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '请求路径', + `method` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '请求方法', + `param` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '请求参数', + `ip` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '请求ip', + `user_agent` text COLLATE utf8mb4_unicode_ci COMMENT '请求user-agent', + `success_flag` tinyint DEFAULT NULL COMMENT '请求结果 0失败 1成功', + `fail_reason` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '失败原因', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`operate_log_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=981 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='操作记录'; + +-- 正在导出表 smart_admin_v2.t_operate_log 的数据:~797 rows (大约) +DELETE FROM `t_operate_log`; +/*!40000 ALTER TABLE `t_operate_log` DISABLE KEYS */; +INSERT INTO `t_operate_log` (`operate_log_id`, `operate_user_id`, `operate_user_type`, `operate_user_name`, `module`, `content`, `url`, `method`, `param`, `ip`, `user_agent`, `success_flag`, `fail_reason`, `update_time`, `create_time`) VALUES + (1, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 19:40:23', '2022-10-19 19:40:23'), + (2, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 19:40:57', '2022-10-19 19:40:57'), + (3, 1, 1, '管理员', '系统-部门管理', '查询部门列表 @author 卓大', '/department/listAll', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.listAll', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 19:42:04', '2022-10-19 19:42:04'), + (4, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 19:42:04', '2022-10-19 19:42:04'), + (5, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":1,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 19:42:04', '2022-10-19 19:42:04'), + (6, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":85,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 19:42:11', '2022-10-19 19:42:11'), + (7, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":1,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 19:42:12', '2022-10-19 19:42:12'), + (8, 1, 1, '管理员', '系统-部门管理', '查询部门列表 @author 卓大', '/department/listAll', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.listAll', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 19:43:17', '2022-10-19 19:43:17'), + (9, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 19:43:17', '2022-10-19 19:43:17'), + (10, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":1,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 19:43:17', '2022-10-19 19:43:17'), + (11, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 19:43:19', '2022-10-19 19:43:19'), + (12, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":79,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 19:43:26', '2022-10-19 19:43:26'), + (13, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":80,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 19:43:27', '2022-10-19 19:43:27'), + (14, 1, 1, '管理员', '系统-角色', '获取所有角色 @author 卓大', '/role/getAll', 'net.lab1024.sa.admin.module.system.role.controller.RoleController.getAllRole', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 19:43:28', '2022-10-19 19:43:28'), + (15, 1, 1, '管理员', '系统-部门管理', '查询部门树形列表 @author 卓大', '/department/treeList', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.departmentTree', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 19:43:28', '2022-10-19 19:43:28'), + (16, 1, 1, '管理员', '系统-员工管理', '添加员工(返回添加员工的密码) @author 卓大', '/employee/add', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.addEmployee', '[{"actualName":"李阿姨","departmentId":80,"disabledFlag":false,"gender":2,"loginName":"liayi","phone":"13123123123","updateId":1}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 19:43:51', '2022-10-19 19:43:51'), + (17, 1, 1, '管理员', '系统-员工管理', '添加员工(返回添加员工的密码) @author 卓大', '/employee/add', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.addEmployee', '[{"actualName":"李阿姨","departmentId":80,"disabledFlag":false,"gender":2,"loginName":"liayi","phone":"13123123109","updateId":1}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 19:43:57', '2022-10-19 19:43:57'), + (18, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":80,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 19:43:57', '2022-10-19 19:43:57'), + (19, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":1,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 19:56:23', '2022-10-19 19:56:23'), + (20, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 19:56:24', '2022-10-19 19:56:24'), + (21, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":1,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 19:56:49', '2022-10-19 19:56:49'), + (22, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 19:56:55', '2022-10-19 19:56:55'), + (23, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":78,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 19:56:57', '2022-10-19 19:56:57'), + (24, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":79,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 19:56:59', '2022-10-19 19:56:59'), + (25, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":80,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 19:56:59', '2022-10-19 19:56:59'), + (26, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":78,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 19:57:00', '2022-10-19 19:57:00'), + (27, 1, 1, '管理员', '系统-部门管理', '查询部门列表 @author 卓大', '/department/listAll', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.listAll', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:05:25', '2022-10-19 20:05:25'), + (28, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:05:26', '2022-10-19 20:05:26'), + (29, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":1,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:05:26', '2022-10-19 20:05:26'), + (30, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":85,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:05:51', '2022-10-19 20:05:51'), + (31, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":1,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:11:08', '2022-10-19 20:11:08'), + (32, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":85,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:11:19', '2022-10-19 20:11:19'), + (33, 1, 1, '管理员', '系统-部门管理', '查询部门树形列表 @author 卓大', '/department/treeList', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.departmentTree', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:11:23', '2022-10-19 20:11:23'), + (34, 1, 1, '管理员', '系统-员工管理', '查询所有员工 @author 卓大', '/employee/queryAll', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.queryAllEmployee', '[null]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 0, 'org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter \'departmentIdList\' not found. Available parameters are [queryForm, param1]\r\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)\r\n at com.sun.proxy.$Proxy116.selectList(Unknown Source)\r\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:223)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:173)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:78)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\r\n at com.sun.proxy.$Proxy137.queryEmployee(Unknown Source)\r\n at net.lab1024.sa.admin.module.system.employee.service.EmployeeService.queryAllEmployee(EmployeeService.java:368)\r\n at net.lab1024.sa.admin.module.system.employee.service.EmployeeService$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at com.alibaba.druid.support.spring.stat.DruidStatInterceptor.invoke(DruidStatInterceptor.java:73)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.system.employee.service.EmployeeService$$EnhancerBySpringCGLIB$$1.queryAllEmployee()\r\n at net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.queryAllEmployee(EmployeeController.java:104)\r\n at net.lab1024.sa.admin.module.system.employee.controller.EmployeeController$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:64)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:57)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.system.employee.controller.EmployeeController$$EnhancerBySpringCGLIB$$1.queryAllEmployee()\r\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1063)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\r\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:84)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at net.lab1024.sa.common.common.security.SecurityTokenFilter.doFilterInternal(SecurityTokenFilter.java:62)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\r\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\r\n at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:97)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:41002)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\r\n at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1723)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\r\n at java.lang.Thread.run(Thread.java:748)\r\nCaused by: org.apache.ibatis.binding.BindingException: Parameter \'departmentIdList\' not found. Available parameters are [queryForm, param1]\r\n at org.apache.ibatis.binding.MapperMethod$ParamMap.get(MapperMethod.java:212)\r\n at org.apache.ibatis.scripting.xmltags.DynamicContext$ContextAccessor.getProperty(DynamicContext.java:120)\r\n at org.apache.ibatis.ognl.OgnlRuntime.getProperty(OgnlRuntime.java:3338)\r\n at org.apache.ibatis.ognl.ASTProperty.getValueBody(ASTProperty.java:121)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.ASTNotEq.getValueBody(ASTNotEq.java:50)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.ASTAnd.getValueBody(ASTAnd.java:61)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:560)\r\n at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:524)\r\n at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:46)\r\n at org.apache.ibatis.scripting.xmltags.ExpressionEvaluator.evaluateBoolean(ExpressionEvaluator.java:32)\r\n at org.apache.ibatis.scripting.xmltags.IfSqlNode.apply(IfSqlNode.java:34)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.lambda$apply$0(MixedSqlNode.java:32)\r\n at java.util.ArrayList.forEach(ArrayList.java:1257)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32)\r\n at org.apache.ibatis.scripting.xmltags.TrimSqlNode.apply(TrimSqlNode.java:55)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.lambda$apply$0(MixedSqlNode.java:32)\r\n at java.util.ArrayList.forEach(ArrayList.java:1257)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32)\r\n at org.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:39)\r\n at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:305)\r\n at net.lab1024.sa.admin.module.system.datascope.MyBatisPlugin.intercept(MyBatisPlugin.java:46)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)\r\n at com.sun.proxy.$Proxy156.query(Unknown Source)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)\r\n at sun.reflect.GeneratedMethodAccessor244.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426)\r\n ... 134 more\r\n', '2022-10-19 20:11:23', '2022-10-19 20:11:23'), + (35, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:16:08', '2022-10-19 20:16:08'), + (36, 1, 1, '管理员', '系统-员工管理', '查询所有员工 @author 卓大', '/employee/queryAll', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.queryAllEmployee', '[null]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:16:13', '2022-10-19 20:16:13'), + (37, 1, 1, '管理员', '系统-部门管理', '查询部门树形列表 @author 卓大', '/department/treeList', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.departmentTree', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:16:13', '2022-10-19 20:16:13'), + (38, 1, 1, '管理员', '系统-部门管理', '查询部门列表 @author 卓大', '/department/listAll', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.listAll', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:17:41', '2022-10-19 20:17:41'), + (39, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:17:41', '2022-10-19 20:17:41'), + (40, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":1,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:17:42', '2022-10-19 20:17:42'), + (41, 1, 1, '管理员', '系统-部门管理', '查询部门树形列表 @author 卓大', '/department/treeList', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.departmentTree', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:17:44', '2022-10-19 20:17:44'), + (42, 1, 1, '管理员', '系统-员工管理', '查询所有员工 @author 卓大', '/employee/queryAll', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.queryAllEmployee', '[null]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:17:44', '2022-10-19 20:17:44'), + (43, 1, 1, '管理员', '系统-部门管理', '查询部门树形列表 @author 卓大', '/department/treeList', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.departmentTree', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:18:15', '2022-10-19 20:18:15'), + (44, 1, 1, '管理员', '系统-角色', '获取所有角色 @author 卓大', '/role/getAll', 'net.lab1024.sa.admin.module.system.role.controller.RoleController.getAllRole', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:18:15', '2022-10-19 20:18:15'), + (45, 1, 1, '管理员', '系统-员工管理', '添加员工(返回添加员工的密码) @author 卓大', '/employee/add', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.addEmployee', '[{"actualName":"卓大","departmentId":1,"disabledFlag":false,"gender":1,"loginName":"zhuoda","phone":"18637925892","roleIdList":[1],"updateId":1}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:18:31', '2022-10-19 20:18:31'), + (46, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:21:42', '2022-10-19 20:21:42'), + (47, 1, 1, '管理员', '系统-员工管理', '查询所有员工 @author 卓大', '/employee/queryAll', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.queryAllEmployee', '[null]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:21:50', '2022-10-19 20:21:50'), + (48, 1, 1, '管理员', '系统-部门管理', '查询部门树形列表 @author 卓大', '/department/treeList', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.departmentTree', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:21:50', '2022-10-19 20:21:50'), + (49, 1, 1, '管理员', '系统-员工管理', '查询所有员工 @author 卓大', '/employee/queryAll', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.queryAllEmployee', '[null]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:21:59', '2022-10-19 20:21:59'), + (50, 1, 1, '管理员', '系统-部门管理', '查询部门树形列表 @author 卓大', '/department/treeList', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.departmentTree', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:22:05', '2022-10-19 20:22:05'), + (51, 1, 1, '管理员', '系统-员工管理', '查询所有员工 @author 卓大', '/employee/queryAll', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.queryAllEmployee', '[null]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:22:05', '2022-10-19 20:22:05'), + (52, 1, 1, '管理员', '系统-部门管理', '添加部门 @author 卓大', '/department/add', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.addDepartment', '[{"managerId":44,"name":"开发部","parentId":1,"sort":1000}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:22:23', '2022-10-19 20:22:23'), + (53, 1, 1, '管理员', '系统-部门管理', '查询部门列表 @author 卓大', '/department/listAll', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.listAll', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:22:23', '2022-10-19 20:22:23'), + (54, 1, 1, '管理员', '系统-部门管理', '查询部门树形列表 @author 卓大', '/department/treeList', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.departmentTree', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:22:25', '2022-10-19 20:22:25'), + (55, 1, 1, '管理员', '系统-员工管理', '查询所有员工 @author 卓大', '/employee/queryAll', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.queryAllEmployee', '[null]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:22:26', '2022-10-19 20:22:26'), + (56, 1, 1, '管理员', '系统-部门管理', '查询部门树形列表 @author 卓大', '/department/treeList', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.departmentTree', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:23:00', '2022-10-19 20:23:00'), + (57, 1, 1, '管理员', '系统-员工管理', '查询所有员工 @author 卓大', '/employee/queryAll', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.queryAllEmployee', '[null]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:23:00', '2022-10-19 20:23:00'), + (58, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":2,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:23:28', '2022-10-19 20:23:28'), + (59, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":1,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:23:30', '2022-10-19 20:23:30'), + (60, 1, 1, '管理员', '系统-部门管理', '查询部门列表 @author 卓大', '/department/listAll', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.listAll', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:23:38', '2022-10-19 20:23:38'), + (61, 1, 1, '管理员', '系统-员工管理', '批量调整员工部门 @author 卓大', '/employee/update/batch/department', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.batchUpdateDepartment', '[{"departmentId":2,"employeeIdList":[48,63,64]}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:23:40', '2022-10-19 20:23:40'), + (62, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":1,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:23:41', '2022-10-19 20:23:41'), + (63, 1, 1, '管理员', '系统-角色', '获取所有角色 @author 卓大', '/role/getAll', 'net.lab1024.sa.admin.module.system.role.controller.RoleController.getAllRole', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:23:48', '2022-10-19 20:23:48'), + (64, 1, 1, '管理员', '系统-角色-菜单', '获取角色关联菜单权限 @author 卓大', '/role/menu/getRoleSelectedMenu/1', 'net.lab1024.sa.admin.module.system.role.controller.RoleMenuController.getRoleSelectedMenu', '[1]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:23:49', '2022-10-19 20:23:49'), + (65, 1, 1, '管理员', '系统-角色', '更新角色 @author 卓大', '/role/update', 'net.lab1024.sa.admin.module.system.role.controller.RoleController.updateRole', '[{"remark":"","roleId":1,"roleName":"技术总监"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:24:09', '2022-10-19 20:24:09'), + (66, 1, 1, '管理员', '系统-角色', '获取所有角色 @author 卓大', '/role/getAll', 'net.lab1024.sa.admin.module.system.role.controller.RoleController.getAllRole', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:24:09', '2022-10-19 20:24:09'), + (67, 1, 1, '管理员', '系统-角色', '获取所有角色 @author 卓大', '/role/getAll', 'net.lab1024.sa.admin.module.system.role.controller.RoleController.getAllRole', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:25:11', '2022-10-19 20:25:11'), + (68, 1, 1, '管理员', '系统-角色-菜单', '获取角色关联菜单权限 @author 卓大', '/role/menu/getRoleSelectedMenu/1', 'net.lab1024.sa.admin.module.system.role.controller.RoleMenuController.getRoleSelectedMenu', '[1]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:25:11', '2022-10-19 20:25:11'), + (69, 1, 1, '管理员', '系统-角色-菜单', '获取角色关联菜单权限 @author 卓大', '/role/menu/getRoleSelectedMenu/34', 'net.lab1024.sa.admin.module.system.role.controller.RoleMenuController.getRoleSelectedMenu', '[34]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:25:13', '2022-10-19 20:25:13'), + (70, 1, 1, '管理员', '系统-角色-菜单', '获取角色关联菜单权限 @author 卓大', '/role/menu/getRoleSelectedMenu/35', 'net.lab1024.sa.admin.module.system.role.controller.RoleMenuController.getRoleSelectedMenu', '[35]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:25:13', '2022-10-19 20:25:13'), + (71, 1, 1, '管理员', '系统-角色-菜单', '获取角色关联菜单权限 @author 卓大', '/role/menu/getRoleSelectedMenu/36', 'net.lab1024.sa.admin.module.system.role.controller.RoleMenuController.getRoleSelectedMenu', '[36]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:25:14', '2022-10-19 20:25:14'), + (72, 1, 1, '管理员', '系统-系统-数据范围', '获取当前系统所配置的所有数据范围 @author 罗伊', '/dataScope/list', 'net.lab1024.sa.admin.module.system.datascope.DataScopeController.dataScopeList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:25:15', '2022-10-19 20:25:15'), + (73, 1, 1, '管理员', '系统-角色-数据范围', '获取某角色所设置的数据范围 @author 卓大', '/role/dataScope/getRoleDataScopeList/36', 'net.lab1024.sa.admin.module.system.role.controller.RoleDataScopeController.dataScopeListByRole', '[36]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:25:15', '2022-10-19 20:25:15'), + (74, 1, 1, '管理员', '系统-角色-员工', '查询某个角色下的员工列表 @author 卓大', '/role/employee/queryEmployee', 'net.lab1024.sa.admin.module.system.role.controller.RoleEmployeeController.queryEmployee', '[{"pageNum":1,"pageSize":15,"roleId":"36"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:25:17', '2022-10-19 20:25:17'), + (75, 1, 1, '管理员', '系统-角色-员工', '获取某个角色下的所有员工列表(无分页) @author 卓大', '/role/employee/getAllEmployeeByRoleId/36', 'net.lab1024.sa.admin.module.system.role.controller.RoleEmployeeController.listAllEmployeeRoleId', '[36]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:25:20', '2022-10-19 20:25:20'), + (76, 1, 1, '管理员', '系统-部门管理', '查询部门树形列表 @author 卓大', '/department/treeList', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.departmentTree', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:25:20', '2022-10-19 20:25:20'), + (77, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:25:20', '2022-10-19 20:25:20'), + (78, 1, 1, '管理员', '系统-角色-员工', '角色成员列表中批量添加员工 @author 卓大', '/role/employee/batchAddRoleEmployee', 'net.lab1024.sa.admin.module.system.role.controller.RoleEmployeeController.addEmployeeList', '[{"employeeIdList":[63],"roleId":36}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:25:26', '2022-10-19 20:25:26'), + (79, 1, 1, '管理员', '系统-角色-员工', '查询某个角色下的员工列表 @author 卓大', '/role/employee/queryEmployee', 'net.lab1024.sa.admin.module.system.role.controller.RoleEmployeeController.queryEmployee', '[{"pageNum":1,"pageSize":15,"roleId":"36"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:25:26', '2022-10-19 20:25:26'), + (80, 1, 1, '管理员', '系统-角色-员工', '查询某个角色下的员工列表 @author 卓大', '/role/employee/queryEmployee', 'net.lab1024.sa.admin.module.system.role.controller.RoleEmployeeController.queryEmployee', '[{"pageNum":1,"pageSize":15,"roleId":"1"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:25:28', '2022-10-19 20:25:28'), + (81, 1, 1, '管理员', '系统-角色-菜单', '获取角色关联菜单权限 @author 卓大', '/role/menu/getRoleSelectedMenu/1', 'net.lab1024.sa.admin.module.system.role.controller.RoleMenuController.getRoleSelectedMenu', '[1]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:25:28', '2022-10-19 20:25:28'), + (82, 1, 1, '管理员', '系统-角色-数据范围', '获取某角色所设置的数据范围 @author 卓大', '/role/dataScope/getRoleDataScopeList/1', 'net.lab1024.sa.admin.module.system.role.controller.RoleDataScopeController.dataScopeListByRole', '[1]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:25:28', '2022-10-19 20:25:28'), + (83, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-19 20:25:30', '2022-10-19 20:25:30'), + (84, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 09:40:04', '2022-10-20 09:40:04'), + (85, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 09:42:20', '2022-10-20 09:42:20'), + (86, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 09:42:20', '2022-10-20 09:42:20'), + (87, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 09:42:20', '2022-10-20 09:42:20'), + (88, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 09:43:01', '2022-10-20 09:43:01'), + (89, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 09:43:01', '2022-10-20 09:43:01'), + (90, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 10:03:56', '2022-10-20 10:03:56'), + (91, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 10:04:00', '2022-10-20 10:04:00'), + (92, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 10:04:13', '2022-10-20 10:04:13'), + (93, 1, 1, '管理员', '系统-部门管理', '查询部门列表 @author 卓大', '/department/listAll', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.listAll', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 10:04:26', '2022-10-20 10:04:26'), + (94, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 10:04:26', '2022-10-20 10:04:26'), + (95, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":1,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 10:04:26', '2022-10-20 10:04:26'), + (96, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 10:55:45', '2022-10-20 10:55:45'), + (97, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 10:55:46', '2022-10-20 10:55:46'), + (98, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 10:55:46', '2022-10-20 10:55:46'), + (99, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 10:55:47', '2022-10-20 10:55:47'), + (100, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 10:55:48', '2022-10-20 10:55:48'), + (101, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 10:56:02', '2022-10-20 10:56:02'), + (102, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 10:56:03', '2022-10-20 10:56:03'), + (103, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 10:56:03', '2022-10-20 10:56:03'), + (104, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 10:56:04', '2022-10-20 10:56:04'), + (105, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 10:56:05', '2022-10-20 10:56:05'), + (106, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:12:04', '2022-10-20 11:12:04'), + (107, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:12:06', '2022-10-20 11:12:06'), + (108, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:12:07', '2022-10-20 11:12:07'), + (109, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:12:07', '2022-10-20 11:12:07'), + (110, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:12:07', '2022-10-20 11:12:07'), + (111, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:12:09', '2022-10-20 11:12:09'), + (112, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:13:08', '2022-10-20 11:13:08'), + (113, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:13:15', '2022-10-20 11:13:15'), + (114, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:13:15', '2022-10-20 11:13:15'), + (115, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:13:16', '2022-10-20 11:13:16'), + (116, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:13:21', '2022-10-20 11:13:21'), + (117, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:13:25', '2022-10-20 11:13:25'), + (118, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:13:59', '2022-10-20 11:13:59'), + (119, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:13:59', '2022-10-20 11:13:59'), + (120, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:13:59', '2022-10-20 11:13:59'), + (121, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:14:07', '2022-10-20 11:14:07'), + (122, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:14:12', '2022-10-20 11:14:12'), + (123, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:14:12', '2022-10-20 11:14:12'), + (124, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:14:13', '2022-10-20 11:14:13'), + (125, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:14:18', '2022-10-20 11:14:18'), + (126, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:14:18', '2022-10-20 11:14:18'), + (127, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:14:27', '2022-10-20 11:14:27'), + (128, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:14:27', '2022-10-20 11:14:27'), + (129, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:14:46', '2022-10-20 11:14:46'), + (130, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:14:46', '2022-10-20 11:14:46'), + (131, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:14:46', '2022-10-20 11:14:46'), + (132, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:14:49', '2022-10-20 11:14:49'), + (133, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:14:50', '2022-10-20 11:14:50'), + (134, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:14:51', '2022-10-20 11:14:51'), + (135, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:17:10', '2022-10-20 11:17:10'), + (136, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 11:17:10', '2022-10-20 11:17:10'), + (137, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 13:37:21', '2022-10-20 13:37:21'), + (138, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 13:39:09', '2022-10-20 13:39:09'), + (139, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 13:39:09', '2022-10-20 13:39:09'), + (140, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 13:39:09', '2022-10-20 13:39:09'), + (141, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"disabledFlag":false,"frameFlag":false,"menuId":95,"menuName":"重置密码","menuType":3,"parentId":46,"permsType":1,"updateUserId":1,"visibleFlag":true,"webPerms":"system:employee:password:reset"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 13:39:13', '2022-10-20 13:39:13'), + (142, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 13:39:14', '2022-10-20 13:39:14'), + (143, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 13:39:17', '2022-10-20 13:39:17'), + (144, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 13:39:17', '2022-10-20 13:39:17'), + (145, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 13:46:37', '2022-10-20 13:46:37'), + (146, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 13:46:37', '2022-10-20 13:46:37'), + (147, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 13:46:37', '2022-10-20 13:46:37'), + (148, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 13:46:38', '2022-10-20 13:46:38'), + (149, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 13:47:00', '2022-10-20 13:47:00'), + (150, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/15', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[15]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 13:47:04', '2022-10-20 13:47:04'), + (151, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 13:47:04', '2022-10-20 13:47:04'), + (152, 1, 1, '管理员', 'OA办公-发票信息', '分页查询发票信息 @author 善逸', '/oa/invoice/page/query', 'net.lab1024.sa.admin.module.business.oa.invoice.InvoiceController.queryByPage', '[{"deletedFlag":false,"enterpriseId":15,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 13:47:07', '2022-10-20 13:47:07'), + (153, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/15', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[15]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 13:47:35', '2022-10-20 13:47:35'), + (154, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 13:47:35', '2022-10-20 13:47:35'), + (155, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-20 13:47:54', '2022-10-20 13:47:54'), + (156, 1, 1, '管理员', '系统-部门管理', '查询部门列表 @author 卓大', '/department/listAll', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.listAll', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:24:38', '2022-10-21 10:24:38'), + (157, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:24:39', '2022-10-21 10:24:39'), + (158, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":1,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:24:39', '2022-10-21 10:24:39'), + (159, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":2,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:24:41', '2022-10-21 10:24:41'), + (160, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":1,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:24:42', '2022-10-21 10:24:42'), + (161, 1, 1, '管理员', '系统-员工管理', '查询所有员工 @author 卓大', '/employee/queryAll', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.queryAllEmployee', '[null]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:25:13', '2022-10-21 10:25:13'), + (162, 1, 1, '管理员', '系统-部门管理', '查询部门树形列表 @author 卓大', '/department/treeList', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.departmentTree', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:25:13', '2022-10-21 10:25:13'), + (163, 1, 1, '管理员', '系统-部门管理', '添加部门 @author 卓大', '/department/add', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.addDepartment', '[{"managerId":2,"name":"产品部","parentId":1,"sort":99}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:25:30', '2022-10-21 10:25:30'), + (164, 1, 1, '管理员', '系统-部门管理', '查询部门列表 @author 卓大', '/department/listAll', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.listAll', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:25:31', '2022-10-21 10:25:31'), + (165, 1, 1, '管理员', '系统-部门管理', '查询部门树形列表 @author 卓大', '/department/treeList', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.departmentTree', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:25:40', '2022-10-21 10:25:40'), + (166, 1, 1, '管理员', '系统-员工管理', '查询所有员工 @author 卓大', '/employee/queryAll', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.queryAllEmployee', '[null]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:25:40', '2022-10-21 10:25:40'), + (167, 1, 1, '管理员', '系统-部门管理', '添加部门 @author 卓大', '/department/add', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.addDepartment', '[{"managerId":64,"name":"销售部","parentId":1,"sort":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:25:48', '2022-10-21 10:25:48'), + (168, 1, 1, '管理员', '系统-部门管理', '查询部门列表 @author 卓大', '/department/listAll', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.listAll', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:25:48', '2022-10-21 10:25:48'), + (169, 1, 1, '管理员', '系统-员工管理', '查询所有员工 @author 卓大', '/employee/queryAll', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.queryAllEmployee', '[null]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:25:51', '2022-10-21 10:25:51'), + (170, 1, 1, '管理员', '系统-部门管理', '查询部门树形列表 @author 卓大', '/department/treeList', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.departmentTree', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:25:51', '2022-10-21 10:25:51'), + (171, 1, 1, '管理员', '系统-部门管理', '更新部门 @author 卓大', '/department/update', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.updateDepartment', '[{"departmentId":4,"managerId":64,"name":"销售部","parentId":1,"sort":9}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:25:57', '2022-10-21 10:25:57'), + (172, 1, 1, '管理员', '系统-部门管理', '查询部门列表 @author 卓大', '/department/listAll', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.listAll', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:25:57', '2022-10-21 10:25:57'), + (173, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":4,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:25:57', '2022-10-21 10:25:57'), + (174, 1, 1, '管理员', '系统-员工管理', '查询所有员工 @author 卓大', '/employee/queryAll', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.queryAllEmployee', '[null]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:25:59', '2022-10-21 10:25:59'), + (175, 1, 1, '管理员', '系统-部门管理', '查询部门树形列表 @author 卓大', '/department/treeList', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.departmentTree', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:25:59', '2022-10-21 10:25:59'), + (176, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":3,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:26:08', '2022-10-21 10:26:08'), + (177, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":2,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:26:09', '2022-10-21 10:26:09'), + (178, 1, 1, '管理员', '系统-角色', '获取所有角色 @author 卓大', '/role/getAll', 'net.lab1024.sa.admin.module.system.role.controller.RoleController.getAllRole', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:26:12', '2022-10-21 10:26:12'), + (179, 1, 1, '管理员', '系统-角色-菜单', '获取角色关联菜单权限 @author 卓大', '/role/menu/getRoleSelectedMenu/1', 'net.lab1024.sa.admin.module.system.role.controller.RoleMenuController.getRoleSelectedMenu', '[1]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:26:13', '2022-10-21 10:26:13'), + (180, 1, 1, '管理员', '系统-角色-菜单', '获取角色关联菜单权限 @author 卓大', '/role/menu/getRoleSelectedMenu/34', 'net.lab1024.sa.admin.module.system.role.controller.RoleMenuController.getRoleSelectedMenu', '[34]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:26:14', '2022-10-21 10:26:14'), + (181, 1, 1, '管理员', '系统-角色-菜单', '获取角色关联菜单权限 @author 卓大', '/role/menu/getRoleSelectedMenu/35', 'net.lab1024.sa.admin.module.system.role.controller.RoleMenuController.getRoleSelectedMenu', '[35]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:26:14', '2022-10-21 10:26:14'), + (182, 1, 1, '管理员', '系统-角色-菜单', '获取角色关联菜单权限 @author 卓大', '/role/menu/getRoleSelectedMenu/36', 'net.lab1024.sa.admin.module.system.role.controller.RoleMenuController.getRoleSelectedMenu', '[36]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:26:15', '2022-10-21 10:26:15'), + (183, 1, 1, '管理员', '系统-角色-菜单', '获取角色关联菜单权限 @author 卓大', '/role/menu/getRoleSelectedMenu/37', 'net.lab1024.sa.admin.module.system.role.controller.RoleMenuController.getRoleSelectedMenu', '[37]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:26:17', '2022-10-21 10:26:17'), + (184, 1, 1, '管理员', '系统-部门管理', '查询部门列表 @author 卓大', '/department/listAll', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.listAll', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:26:17', '2022-10-21 10:26:17'), + (185, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:26:18', '2022-10-21 10:26:18'), + (186, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":1,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:26:18', '2022-10-21 10:26:18'), + (187, 1, 1, '管理员', '系统-角色', '获取所有角色 @author 卓大', '/role/getAll', 'net.lab1024.sa.admin.module.system.role.controller.RoleController.getAllRole', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:26:30', '2022-10-21 10:26:30'), + (188, 1, 1, '管理员', '系统-角色-菜单', '获取角色关联菜单权限 @author 卓大', '/role/menu/getRoleSelectedMenu/1', 'net.lab1024.sa.admin.module.system.role.controller.RoleMenuController.getRoleSelectedMenu', '[1]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:26:30', '2022-10-21 10:26:30'), + (189, 1, 1, '管理员', '系统-系统-数据范围', '获取当前系统所配置的所有数据范围 @author 罗伊', '/dataScope/list', 'net.lab1024.sa.admin.module.system.datascope.DataScopeController.dataScopeList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:26:32', '2022-10-21 10:26:32'), + (190, 1, 1, '管理员', '系统-角色-数据范围', '获取某角色所设置的数据范围 @author 卓大', '/role/dataScope/getRoleDataScopeList/1', 'net.lab1024.sa.admin.module.system.role.controller.RoleDataScopeController.dataScopeListByRole', '[1]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:26:32', '2022-10-21 10:26:32'), + (191, 1, 1, '管理员', '系统-角色-员工', '查询某个角色下的员工列表 @author 卓大', '/role/employee/queryEmployee', 'net.lab1024.sa.admin.module.system.role.controller.RoleEmployeeController.queryEmployee', '[{"pageNum":1,"pageSize":15,"roleId":"1"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:26:32', '2022-10-21 10:26:32'), + (192, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:26:36', '2022-10-21 10:26:36'), + (193, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:26:40', '2022-10-21 10:26:40'), + (194, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:26:40', '2022-10-21 10:26:40'), + (195, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:26:41', '2022-10-21 10:26:41'), + (196, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"disabledFlag":false,"frameFlag":false,"menuId":95,"menuName":"重置密码","menuType":3,"parentId":46,"permsType":1,"updateUserId":1,"visibleFlag":true,"webPerms":"system:employee:password:reset"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:26:43', '2022-10-21 10:26:43'), + (197, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:26:43', '2022-10-21 10:26:43'), + (198, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:34:28', '2022-10-21 10:34:28'), + (199, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/15', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[15]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:34:30', '2022-10-21 10:34:30'), + (200, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:34:30', '2022-10-21 10:34:30'), + (201, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/15', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[15]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:34:34', '2022-10-21 10:34:34'), + (202, 1, 1, '管理员', 'OA办公-企业', '编辑企业 @author 开云', '/oa/enterprise/update', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.updateEnterprise', '[{"address":"wqdqwe1啊啊","city":110100,"cityName":"北京市","contact":"12312324234","contactPhone":"13123123123","createUserId":1,"createUserName":"管理员","disabledFlag":true,"district":110117,"districtName":"平谷区","email":"qweqwe@11.asd1","enterpriseId":15,"enterpriseLogo":"","enterpriseName":"1024创新实验室","province":110000,"provinceName":"北京市","type":1,"unifiedSocialCreditCode":"而非教科文irl啊啊啊1112"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:34:38', '2022-10-21 10:34:38'), + (203, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/15', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[15]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:34:39', '2022-10-21 10:34:39'), + (204, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/15', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[15]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:37:40', '2022-10-21 10:37:40'), + (205, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:37:40', '2022-10-21 10:37:40'), + (206, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/15', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[15]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:37:50', '2022-10-21 10:37:50'), + (207, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:37:50', '2022-10-21 10:37:50'), + (208, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/15', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[15]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:37:51', '2022-10-21 10:37:51'), + (209, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:37:51', '2022-10-21 10:37:51'), + (210, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:38:03', '2022-10-21 10:38:03'), + (211, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:52:15', '2022-10-21 10:52:15'), + (212, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/15', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[15]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:52:17', '2022-10-21 10:52:17'), + (213, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 10:52:17', '2022-10-21 10:52:17'), + (214, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:25:01', '2022-10-21 11:25:01'), + (215, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:25:23', '2022-10-21 11:25:23'), + (216, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:25:23', '2022-10-21 11:25:23'), + (217, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:25:23', '2022-10-21 11:25:23'), + (218, 1, 1, '管理员', '系统-菜单', '添加菜单 @author 卓大', '/menu/add', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.addMenu', '[{"cacheFlag":false,"component":"/support/file/file-list","createUserId":1,"disabledFlag":false,"frameFlag":false,"icon":"FolderOpenOutlined","menuName":"文件管理","menuType":2,"parentId":50,"path":"/support/file/file-list","permsType":1,"sort":20,"visibleFlag":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:26:11', '2022-10-21 11:26:11'), + (219, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:26:11', '2022-10-21 11:26:11'), + (220, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:26:18', '2022-10-21 11:26:18'), + (221, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:26:18', '2022-10-21 11:26:18'), + (222, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"component":"/support/file/file-list,vue","disabledFlag":false,"frameFlag":false,"icon":"FolderOpenOutlined","menuId":193,"menuName":"文件管理","menuType":2,"parentId":50,"path":"/support/file/file-list","permsType":1,"sort":20,"updateUserId":1,"visibleFlag":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:26:22', '2022-10-21 11:26:22'), + (223, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:26:22', '2022-10-21 11:26:22'), + (224, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:26:31', '2022-10-21 11:26:31'), + (225, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:26:57', '2022-10-21 11:26:57'), + (226, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:26:57', '2022-10-21 11:26:57'), + (227, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:26:57', '2022-10-21 11:26:57'), + (228, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"component":"/support/file/file-list.vue","disabledFlag":false,"frameFlag":false,"icon":"FolderOpenOutlined","menuId":193,"menuName":"文件管理","menuType":2,"parentId":50,"path":"/support/file/file-list","permsType":1,"sort":20,"updateUserId":1,"visibleFlag":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:27:02', '2022-10-21 11:27:02'), + (229, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:27:02', '2022-10-21 11:27:02'), + (230, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:27:08', '2022-10-21 11:27:08'), + (231, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:32:18', '2022-10-21 11:32:18'), + (232, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/15', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[15]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:32:19', '2022-10-21 11:32:19'), + (233, 1, 1, '管理员', 'OA办公-企业', '编辑企业 @author 开云', '/oa/enterprise/update', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.updateEnterprise', '[{"address":"wqdqwe1啊啊","city":110100,"cityName":"北京市","contact":"12312324234","contactPhone":"13123123123","createUserId":1,"createUserName":"管理员","disabledFlag":true,"district":110117,"districtName":"平谷区","email":"qweqwe@11.asd1","enterpriseId":15,"enterpriseLogo":"public/common/035f9b3366fc4a108495a18b5af4236c2022-10-21 11:33:46.jpg","enterpriseName":"1024创新实验室","province":110000,"provinceName":"北京市","type":1,"unifiedSocialCreditCode":"而非教科文irl啊啊啊1112"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:33:55', '2022-10-21 11:33:55'), + (234, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/5', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[5]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:34:02', '2022-10-21 11:34:02'), + (235, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:34:02', '2022-10-21 11:34:02'), + (236, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:34:05', '2022-10-21 11:34:05'), + (237, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/6', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[6]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:34:07', '2022-10-21 11:34:07'), + (238, 1, 1, '管理员', 'OA办公-企业', '编辑企业 @author 开云', '/oa/enterprise/update', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.updateEnterprise', '[{"address":"fgdsda","city":130300,"cityName":"秦皇岛市","contact":"110","contactPhone":"13123123123","createUserId":1,"createUserName":"管理员","disabledFlag":false,"district":130306,"districtName":"抚宁区","email":"110@qq.cc","enterpriseId":6,"enterpriseLogo":"public/common/882d5810d01549209e709d6658a8e4772022-10-21 11:35:08.jpeg","enterpriseName":"1024物流公司","province":130000,"provinceName":"河北省","type":1,"unifiedSocialCreditCode":"110"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:35:11', '2022-10-21 11:35:11'), + (239, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/15', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[15]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:35:15', '2022-10-21 11:35:15'), + (240, 1, 1, '管理员', 'OA办公-企业', '编辑企业 @author 开云', '/oa/enterprise/update', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.updateEnterprise', '[{"address":"wqdqwe1啊啊","businessLicense":"public/common/a4ce8db50ff74e05ad2e492dd94335cb2022-10-21 11:36:34.png","city":110100,"cityName":"北京市","contact":"12312324234","contactPhone":"13123123123","createUserId":1,"createUserName":"管理员","disabledFlag":true,"district":110117,"districtName":"平谷区","email":"qweqwe@11.asd1","enterpriseId":15,"enterpriseLogo":"public/common/035f9b3366fc4a108495a18b5af4236c2022-10-21 11:33:46.jpg","enterpriseName":"1024创新实验室","province":110000,"provinceName":"北京市","type":1,"unifiedSocialCreditCode":"而非教科文irl啊啊啊1112"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:36:39', '2022-10-21 11:36:39'), + (241, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/5', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[5]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:51:34', '2022-10-21 11:51:34'), + (242, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:51:34', '2022-10-21 11:51:34'), + (243, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:51:34', '2022-10-21 11:51:34'), + (244, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/15', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[15]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:51:36', '2022-10-21 11:51:36'), + (245, 1, 1, '管理员', 'OA办公-企业', '编辑企业 @author 开云', '/oa/enterprise/update', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.updateEnterprise', '[{"address":"wqdqwe1啊啊","businessLicense":"public/common/b298956317bd419d899a4d3f1d28dbb6-20221021115215-png","city":110100,"cityName":"北京市","contact":"12312324234","contactPhone":"13123123123","createUserId":1,"createUserName":"管理员","disabledFlag":true,"district":110117,"districtName":"平谷区","email":"qweqwe@11.asd1","enterpriseId":15,"enterpriseLogo":"public/common/7e3cb80f02c84ca3aba359f166c8c69e-20221021115207-jpg","enterpriseName":"1024创新实验室","province":110000,"provinceName":"北京市","type":1,"unifiedSocialCreditCode":"而非教科文irl啊啊啊1112"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 11:52:17', '2022-10-21 11:52:17'), + (246, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 12:17:37', '2022-10-21 12:17:37'), + (247, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/6', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[6]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 12:17:41', '2022-10-21 12:17:41'), + (248, 1, 1, '管理员', 'OA办公-企业', '编辑企业 @author 开云', '/oa/enterprise/update', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.updateEnterprise', '[{"address":"fgdsda","businessLicense":"public/common/888ea37c5a6c4c088658264464ba3cae_20221021121755_png","city":130300,"cityName":"秦皇岛市","contact":"110","contactPhone":"13123123123","createUserId":1,"createUserName":"管理员","disabledFlag":false,"district":130306,"districtName":"抚宁区","email":"110@qq.cc","enterpriseId":6,"enterpriseLogo":"public/common/b817542a80a84435ae86991d68546eb4_20221021121746_jpeg","enterpriseName":"1024物流公司","province":130000,"provinceName":"河北省","type":1,"unifiedSocialCreditCode":"110"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 12:17:57', '2022-10-21 12:17:57'), + (249, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 12:51:20', '2022-10-21 12:51:20'), + (250, 1, 1, '管理员', '系统-部门管理', '查询部门列表 @author 卓大', '/department/listAll', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.listAll', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 12:51:23', '2022-10-21 12:51:23'), + (251, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 12:51:24', '2022-10-21 12:51:24'), + (252, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":1,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 12:51:24', '2022-10-21 12:51:24'), + (253, 1, 1, '管理员', '系统-角色', '获取所有角色 @author 卓大', '/role/getAll', 'net.lab1024.sa.admin.module.system.role.controller.RoleController.getAllRole', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 12:51:27', '2022-10-21 12:51:27'), + (254, 1, 1, '管理员', '系统-角色-菜单', '获取角色关联菜单权限 @author 卓大', '/role/menu/getRoleSelectedMenu/1', 'net.lab1024.sa.admin.module.system.role.controller.RoleMenuController.getRoleSelectedMenu', '[1]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 12:51:28', '2022-10-21 12:51:28'), + (255, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 12:51:33', '2022-10-21 12:51:33'), + (256, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 12:51:34', '2022-10-21 12:51:34'), + (257, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 12:51:43', '2022-10-21 12:51:43'), + (258, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 12:52:27', '2022-10-21 12:52:27'), + (259, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 12:52:31', '2022-10-21 12:52:31'), + (260, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 12:52:31', '2022-10-21 12:52:31'), + (261, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 12:52:31', '2022-10-21 12:52:31'), + (262, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"disabledFlag":false,"frameFlag":false,"icon":"FileWordOutlined","menuId":146,"menuName":"系统文档","menuType":1,"parentId":0,"sort":500,"updateUserId":1,"visibleFlag":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 12:52:42', '2022-10-21 12:52:42'), + (263, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 12:52:43', '2022-10-21 12:52:43'), + (264, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 12:52:47', '2022-10-21 12:52:47'), + (265, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 12:53:02', '2022-10-21 12:53:02'), + (266, 1, 1, '管理员', '系统-部门管理', '查询部门列表 @author 卓大', '/department/listAll', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.listAll', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 12:57:39', '2022-10-21 12:57:39'), + (267, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 12:57:39', '2022-10-21 12:57:39'), + (268, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":1,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 12:57:39', '2022-10-21 12:57:39'), + (269, 1, 1, '管理员', '系统-角色', '获取所有角色 @author 卓大', '/role/getAll', 'net.lab1024.sa.admin.module.system.role.controller.RoleController.getAllRole', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 12:57:39', '2022-10-21 12:57:39'), + (270, 1, 1, '管理员', '系统-角色-菜单', '获取角色关联菜单权限 @author 卓大', '/role/menu/getRoleSelectedMenu/1', 'net.lab1024.sa.admin.module.system.role.controller.RoleMenuController.getRoleSelectedMenu', '[1]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 12:57:40', '2022-10-21 12:57:40'), + (271, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 12:57:42', '2022-10-21 12:57:42'), + (272, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 12:58:33', '2022-10-21 12:58:33'), + (273, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 12:58:41', '2022-10-21 12:58:41'), + (274, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":2,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 12:58:41', '2022-10-21 12:58:41'), + (275, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 12:58:42', '2022-10-21 12:58:42'), + (276, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 0, 'org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression \'query.goodsType != null\'. Cause: org.apache.ibatis.ognl.NoSuchPropertyException: net.lab1024.sa.admin.module.business.goods.domain.form.GoodsQueryForm.goodsType\r\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)\r\n at com.sun.proxy.$Proxy116.selectList(Unknown Source)\r\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:223)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:173)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:78)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\r\n at com.sun.proxy.$Proxy166.query(Unknown Source)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService.query(GoodsService.java:142)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at com.alibaba.druid.support.spring.stat.DruidStatInterceptor.invoke(DruidStatInterceptor.java:73)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService$$EnhancerBySpringCGLIB$$1.query()\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query(GoodsController.java:40)\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:64)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:57)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController$$EnhancerBySpringCGLIB$$1.query()\r\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1063)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:84)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at net.lab1024.sa.common.common.security.SecurityTokenFilter.doFilterInternal(SecurityTokenFilter.java:62)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\r\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\r\n at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:97)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:41002)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\r\n at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1723)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\r\n at java.lang.Thread.run(Thread.java:748)\r\nCaused by: org.apache.ibatis.builder.BuilderException: Error evaluating expression \'query.goodsType != null\'. Cause: org.apache.ibatis.ognl.NoSuchPropertyException: net.lab1024.sa.admin.module.business.goods.domain.form.GoodsQueryForm.goodsType\r\n at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:48)\r\n at org.apache.ibatis.scripting.xmltags.ExpressionEvaluator.evaluateBoolean(ExpressionEvaluator.java:32)\r\n at org.apache.ibatis.scripting.xmltags.IfSqlNode.apply(IfSqlNode.java:34)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.lambda$apply$0(MixedSqlNode.java:32)\r\n at java.util.ArrayList.forEach(ArrayList.java:1257)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32)\r\n at org.apache.ibatis.scripting.xmltags.TrimSqlNode.apply(TrimSqlNode.java:55)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.lambda$apply$0(MixedSqlNode.java:32)\r\n at java.util.ArrayList.forEach(ArrayList.java:1257)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32)\r\n at org.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:39)\r\n at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:305)\r\n at net.lab1024.sa.admin.module.system.datascope.MyBatisPlugin.intercept(MyBatisPlugin.java:46)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)\r\n at com.sun.proxy.$Proxy156.query(Unknown Source)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)\r\n at sun.reflect.GeneratedMethodAccessor234.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426)\r\n ... 134 more\r\nCaused by: org.apache.ibatis.ognl.NoSuchPropertyException: net.lab1024.sa.admin.module.business.goods.domain.form.GoodsQueryForm.goodsType\r\n at org.apache.ibatis.ognl.ObjectPropertyAccessor.getProperty(ObjectPropertyAccessor.java:164)\r\n at org.apache.ibatis.ognl.OgnlRuntime.getProperty(OgnlRuntime.java:3338)\r\n at org.apache.ibatis.ognl.ASTProperty.getValueBody(ASTProperty.java:121)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.ASTChain.getValueBody(ASTChain.java:141)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.ASTNotEq.getValueBody(ASTNotEq.java:50)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:560)\r\n at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:524)\r\n at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:46)\r\n ... 154 more\r\n', '2022-10-21 12:58:42', '2022-10-21 12:58:42'), + (277, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/5', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[5]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 13:02:51', '2022-10-21 13:02:51'), + (278, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 13:02:51', '2022-10-21 13:02:51'), + (279, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 13:02:52', '2022-10-21 13:02:52'), + (280, 1, 1, '管理员', '系统-角色', '获取所有角色 @author 卓大', '/role/getAll', 'net.lab1024.sa.admin.module.system.role.controller.RoleController.getAllRole', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 13:02:53', '2022-10-21 13:02:53'), + (281, 1, 1, '管理员', '系统-角色-菜单', '获取角色关联菜单权限 @author 卓大', '/role/menu/getRoleSelectedMenu/1', 'net.lab1024.sa.admin.module.system.role.controller.RoleMenuController.getRoleSelectedMenu', '[1]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 13:02:53', '2022-10-21 13:02:53'), + (282, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 13:15:04', '2022-10-21 13:15:04'), + (283, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 14:50:30', '2022-10-21 14:50:30'), + (284, 1, 1, '管理员', '系统-部门管理', '查询部门列表 @author 卓大', '/department/listAll', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.listAll', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 15:08:50', '2022-10-21 15:08:50'), + (285, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 15:08:50', '2022-10-21 15:08:50'), + (286, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":1,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 15:08:50', '2022-10-21 15:08:50'), + (287, 1, 1, '管理员', '系统-部门管理', '查询部门列表 @author 卓大', '/department/listAll', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.listAll', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 15:09:18', '2022-10-21 15:09:18'), + (288, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 15:09:18', '2022-10-21 15:09:18'), + (289, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":1,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 15:09:18', '2022-10-21 15:09:18'), + (290, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 15:09:30', '2022-10-21 15:09:30'), + (291, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 15:12:10', '2022-10-21 15:12:10'), + (292, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 15:12:22', '2022-10-21 15:12:22'), + (293, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 15:13:40', '2022-10-21 15:13:40'), + (294, 1, 1, '管理员', '系统-部门管理', '查询部门列表 @author 卓大', '/department/listAll', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.listAll', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 15:13:44', '2022-10-21 15:13:44'), + (295, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 15:13:45', '2022-10-21 15:13:45'), + (296, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":1,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 15:13:45', '2022-10-21 15:13:45'), + (297, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 15:13:48', '2022-10-21 15:13:48'), + (298, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 15:14:26', '2022-10-21 15:14:26'), + (299, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 15:14:31', '2022-10-21 15:14:31'), + (300, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 15:15:44', '2022-10-21 15:15:44'), + (301, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 16:00:01', '2022-10-21 16:00:01'), + (302, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 16:01:45', '2022-10-21 16:01:45'), + (303, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 0, 'org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression \'query.goodsType != null\'. Cause: org.apache.ibatis.ognl.NoSuchPropertyException: net.lab1024.sa.admin.module.business.goods.domain.form.GoodsQueryForm.goodsType\r\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)\r\n at com.sun.proxy.$Proxy116.selectList(Unknown Source)\r\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:223)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:173)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:78)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\r\n at com.sun.proxy.$Proxy166.query(Unknown Source)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService.query(GoodsService.java:142)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at com.alibaba.druid.support.spring.stat.DruidStatInterceptor.invoke(DruidStatInterceptor.java:73)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService$$EnhancerBySpringCGLIB$$1.query()\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query(GoodsController.java:42)\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:64)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:57)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController$$EnhancerBySpringCGLIB$$1.query()\r\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1063)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:84)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at net.lab1024.sa.common.common.security.SecurityTokenFilter.doFilterInternal(SecurityTokenFilter.java:62)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\r\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\r\n at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:97)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:41002)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\r\n at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1723)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\r\n at java.lang.Thread.run(Thread.java:748)\r\nCaused by: org.apache.ibatis.builder.BuilderException: Error evaluating expression \'query.goodsType != null\'. Cause: org.apache.ibatis.ognl.NoSuchPropertyException: net.lab1024.sa.admin.module.business.goods.domain.form.GoodsQueryForm.goodsType\r\n at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:48)\r\n at org.apache.ibatis.scripting.xmltags.ExpressionEvaluator.evaluateBoolean(ExpressionEvaluator.java:32)\r\n at org.apache.ibatis.scripting.xmltags.IfSqlNode.apply(IfSqlNode.java:34)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.lambda$apply$0(MixedSqlNode.java:32)\r\n at java.util.ArrayList.forEach(ArrayList.java:1257)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32)\r\n at org.apache.ibatis.scripting.xmltags.TrimSqlNode.apply(TrimSqlNode.java:55)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.lambda$apply$0(MixedSqlNode.java:32)\r\n at java.util.ArrayList.forEach(ArrayList.java:1257)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32)\r\n at org.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:39)\r\n at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:305)\r\n at net.lab1024.sa.admin.module.system.datascope.MyBatisPlugin.intercept(MyBatisPlugin.java:46)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)\r\n at com.sun.proxy.$Proxy156.query(Unknown Source)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)\r\n at sun.reflect.GeneratedMethodAccessor234.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426)\r\n ... 134 more\r\nCaused by: org.apache.ibatis.ognl.NoSuchPropertyException: net.lab1024.sa.admin.module.business.goods.domain.form.GoodsQueryForm.goodsType\r\n at org.apache.ibatis.ognl.ObjectPropertyAccessor.getProperty(ObjectPropertyAccessor.java:164)\r\n at org.apache.ibatis.ognl.OgnlRuntime.getProperty(OgnlRuntime.java:3338)\r\n at org.apache.ibatis.ognl.ASTProperty.getValueBody(ASTProperty.java:121)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.ASTChain.getValueBody(ASTChain.java:141)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.ASTNotEq.getValueBody(ASTNotEq.java:50)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:560)\r\n at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:524)\r\n at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:46)\r\n ... 154 more\r\n', '2022-10-21 16:01:45', '2022-10-21 16:01:45'), + (304, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 16:08:56', '2022-10-21 16:08:56'), + (305, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 0, 'org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression \'query.goodsType != null\'. Cause: org.apache.ibatis.ognl.NoSuchPropertyException: net.lab1024.sa.admin.module.business.goods.domain.form.GoodsQueryForm.goodsType\r\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)\r\n at com.sun.proxy.$Proxy116.selectList(Unknown Source)\r\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:223)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:173)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:78)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\r\n at com.sun.proxy.$Proxy166.query(Unknown Source)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService.query(GoodsService.java:142)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at com.alibaba.druid.support.spring.stat.DruidStatInterceptor.invoke(DruidStatInterceptor.java:73)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService$$EnhancerBySpringCGLIB$$1.query()\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query(GoodsController.java:42)\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:64)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:57)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController$$EnhancerBySpringCGLIB$$1.query()\r\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1063)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:84)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at net.lab1024.sa.common.common.security.SecurityTokenFilter.doFilterInternal(SecurityTokenFilter.java:62)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\r\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\r\n at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:97)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:41002)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\r\n at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1723)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\r\n at java.lang.Thread.run(Thread.java:748)\r\nCaused by: org.apache.ibatis.builder.BuilderException: Error evaluating expression \'query.goodsType != null\'. Cause: org.apache.ibatis.ognl.NoSuchPropertyException: net.lab1024.sa.admin.module.business.goods.domain.form.GoodsQueryForm.goodsType\r\n at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:48)\r\n at org.apache.ibatis.scripting.xmltags.ExpressionEvaluator.evaluateBoolean(ExpressionEvaluator.java:32)\r\n at org.apache.ibatis.scripting.xmltags.IfSqlNode.apply(IfSqlNode.java:34)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.lambda$apply$0(MixedSqlNode.java:32)\r\n at java.util.ArrayList.forEach(ArrayList.java:1257)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32)\r\n at org.apache.ibatis.scripting.xmltags.TrimSqlNode.apply(TrimSqlNode.java:55)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.lambda$apply$0(MixedSqlNode.java:32)\r\n at java.util.ArrayList.forEach(ArrayList.java:1257)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32)\r\n at org.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:39)\r\n at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:305)\r\n at net.lab1024.sa.admin.module.system.datascope.MyBatisPlugin.intercept(MyBatisPlugin.java:46)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)\r\n at com.sun.proxy.$Proxy156.query(Unknown Source)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)\r\n at sun.reflect.GeneratedMethodAccessor234.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426)\r\n ... 134 more\r\nCaused by: org.apache.ibatis.ognl.NoSuchPropertyException: net.lab1024.sa.admin.module.business.goods.domain.form.GoodsQueryForm.goodsType\r\n at org.apache.ibatis.ognl.ObjectPropertyAccessor.getProperty(ObjectPropertyAccessor.java:164)\r\n at org.apache.ibatis.ognl.OgnlRuntime.getProperty(OgnlRuntime.java:3338)\r\n at org.apache.ibatis.ognl.ASTProperty.getValueBody(ASTProperty.java:121)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.ASTChain.getValueBody(ASTChain.java:141)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.ASTNotEq.getValueBody(ASTNotEq.java:50)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:560)\r\n at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:524)\r\n at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:46)\r\n ... 154 more\r\n', '2022-10-21 16:08:56', '2022-10-21 16:08:56'), + (306, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 0, 'org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression \'query.goodsType != null\'. Cause: org.apache.ibatis.ognl.NoSuchPropertyException: net.lab1024.sa.admin.module.business.goods.domain.form.GoodsQueryForm.goodsType\r\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)\r\n at com.sun.proxy.$Proxy114.selectList(Unknown Source)\r\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:223)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:173)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:78)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\r\n at com.sun.proxy.$Proxy164.query(Unknown Source)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService.query(GoodsService.java:136)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at com.alibaba.druid.support.spring.stat.DruidStatInterceptor.invoke(DruidStatInterceptor.java:73)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService$$EnhancerBySpringCGLIB$$1.query()\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query(GoodsController.java:42)\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:64)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:57)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:61)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController$$EnhancerBySpringCGLIB$$1.query()\r\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1063)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:84)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at net.lab1024.sa.common.common.security.SecurityTokenFilter.doFilterInternal(SecurityTokenFilter.java:62)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\r\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\r\n at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:97)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:41002)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\r\n at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1723)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\r\n at java.lang.Thread.run(Thread.java:748)\r\nCaused by: org.apache.ibatis.builder.BuilderException: Error evaluating expression \'query.goodsType != null\'. Cause: org.apache.ibatis.ognl.NoSuchPropertyException: net.lab1024.sa.admin.module.business.goods.domain.form.GoodsQueryForm.goodsType\r\n at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:48)\r\n at org.apache.ibatis.scripting.xmltags.ExpressionEvaluator.evaluateBoolean(ExpressionEvaluator.java:32)\r\n at org.apache.ibatis.scripting.xmltags.IfSqlNode.apply(IfSqlNode.java:34)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.lambda$apply$0(MixedSqlNode.java:32)\r\n at java.util.ArrayList.forEach(ArrayList.java:1257)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32)\r\n at org.apache.ibatis.scripting.xmltags.TrimSqlNode.apply(TrimSqlNode.java:55)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.lambda$apply$0(MixedSqlNode.java:32)\r\n at java.util.ArrayList.forEach(ArrayList.java:1257)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32)\r\n at org.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:39)\r\n at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:305)\r\n at net.lab1024.sa.admin.module.system.datascope.MyBatisPlugin.intercept(MyBatisPlugin.java:46)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)\r\n at com.sun.proxy.$Proxy154.query(Unknown Source)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)\r\n at sun.reflect.GeneratedMethodAccessor163.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426)\r\n ... 137 more\r\nCaused by: org.apache.ibatis.ognl.NoSuchPropertyException: net.lab1024.sa.admin.module.business.goods.domain.form.GoodsQueryForm.goodsType\r\n at org.apache.ibatis.ognl.ObjectPropertyAccessor.getProperty(ObjectPropertyAccessor.java:164)\r\n at org.apache.ibatis.ognl.OgnlRuntime.getProperty(OgnlRuntime.java:3338)\r\n at org.apache.ibatis.ognl.ASTProperty.getValueBody(ASTProperty.java:121)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.ASTChain.getValueBody(ASTChain.java:141)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.ASTNotEq.getValueBody(ASTNotEq.java:50)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:560)\r\n at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:524)\r\n at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:46)\r\n ... 157 more\r\n', '2022-10-21 18:54:29', '2022-10-21 18:54:29'), + (307, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 18:54:29', '2022-10-21 18:54:29'), + (308, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 18:54:33', '2022-10-21 18:54:33'), + (309, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 18:57:05', '2022-10-21 18:57:05'), + (310, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 0, 'org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression \'query.goodsType != null\'. Cause: org.apache.ibatis.ognl.NoSuchPropertyException: net.lab1024.sa.admin.module.business.goods.domain.form.GoodsQueryForm.goodsType\r\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)\r\n at com.sun.proxy.$Proxy114.selectList(Unknown Source)\r\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:223)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:173)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:78)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\r\n at com.sun.proxy.$Proxy164.query(Unknown Source)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService.query(GoodsService.java:136)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at com.alibaba.druid.support.spring.stat.DruidStatInterceptor.invoke(DruidStatInterceptor.java:73)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService$$EnhancerBySpringCGLIB$$1.query()\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query(GoodsController.java:42)\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:64)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:57)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:61)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController$$EnhancerBySpringCGLIB$$1.query()\r\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1063)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:84)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at net.lab1024.sa.common.common.security.SecurityTokenFilter.doFilterInternal(SecurityTokenFilter.java:62)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\r\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\r\n at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:97)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:41002)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\r\n at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1723)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\r\n at java.lang.Thread.run(Thread.java:748)\r\nCaused by: org.apache.ibatis.builder.BuilderException: Error evaluating expression \'query.goodsType != null\'. Cause: org.apache.ibatis.ognl.NoSuchPropertyException: net.lab1024.sa.admin.module.business.goods.domain.form.GoodsQueryForm.goodsType\r\n at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:48)\r\n at org.apache.ibatis.scripting.xmltags.ExpressionEvaluator.evaluateBoolean(ExpressionEvaluator.java:32)\r\n at org.apache.ibatis.scripting.xmltags.IfSqlNode.apply(IfSqlNode.java:34)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.lambda$apply$0(MixedSqlNode.java:32)\r\n at java.util.ArrayList.forEach(ArrayList.java:1257)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32)\r\n at org.apache.ibatis.scripting.xmltags.TrimSqlNode.apply(TrimSqlNode.java:55)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.lambda$apply$0(MixedSqlNode.java:32)\r\n at java.util.ArrayList.forEach(ArrayList.java:1257)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32)\r\n at org.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:39)\r\n at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:305)\r\n at net.lab1024.sa.admin.module.system.datascope.MyBatisPlugin.intercept(MyBatisPlugin.java:46)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)\r\n at com.sun.proxy.$Proxy154.query(Unknown Source)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)\r\n at sun.reflect.GeneratedMethodAccessor163.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426)\r\n ... 137 more\r\nCaused by: org.apache.ibatis.ognl.NoSuchPropertyException: net.lab1024.sa.admin.module.business.goods.domain.form.GoodsQueryForm.goodsType\r\n at org.apache.ibatis.ognl.ObjectPropertyAccessor.getProperty(ObjectPropertyAccessor.java:164)\r\n at org.apache.ibatis.ognl.OgnlRuntime.getProperty(OgnlRuntime.java:3338)\r\n at org.apache.ibatis.ognl.ASTProperty.getValueBody(ASTProperty.java:121)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.ASTChain.getValueBody(ASTChain.java:141)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.ASTNotEq.getValueBody(ASTNotEq.java:50)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:560)\r\n at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:524)\r\n at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:46)\r\n ... 157 more\r\n', '2022-10-21 18:57:06', '2022-10-21 18:57:06'), + (311, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 18:57:07', '2022-10-21 18:57:07'), + (312, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 18:59:19', '2022-10-21 18:59:19'), + (313, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 0, 'org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression \'query.goodsType != null\'. Cause: org.apache.ibatis.ognl.NoSuchPropertyException: net.lab1024.sa.admin.module.business.goods.domain.form.GoodsQueryForm.goodsType\r\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)\r\n at com.sun.proxy.$Proxy114.selectList(Unknown Source)\r\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:223)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:173)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:78)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\r\n at com.sun.proxy.$Proxy164.query(Unknown Source)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService.query(GoodsService.java:136)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at com.alibaba.druid.support.spring.stat.DruidStatInterceptor.invoke(DruidStatInterceptor.java:73)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService$$EnhancerBySpringCGLIB$$1.query()\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query(GoodsController.java:42)\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:64)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:57)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:61)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController$$EnhancerBySpringCGLIB$$1.query()\r\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1063)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:84)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at net.lab1024.sa.common.common.security.SecurityTokenFilter.doFilterInternal(SecurityTokenFilter.java:62)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\r\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\r\n at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:97)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:41002)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\r\n at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1723)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\r\n at java.lang.Thread.run(Thread.java:748)\r\nCaused by: org.apache.ibatis.builder.BuilderException: Error evaluating expression \'query.goodsType != null\'. Cause: org.apache.ibatis.ognl.NoSuchPropertyException: net.lab1024.sa.admin.module.business.goods.domain.form.GoodsQueryForm.goodsType\r\n at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:48)\r\n at org.apache.ibatis.scripting.xmltags.ExpressionEvaluator.evaluateBoolean(ExpressionEvaluator.java:32)\r\n at org.apache.ibatis.scripting.xmltags.IfSqlNode.apply(IfSqlNode.java:34)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.lambda$apply$0(MixedSqlNode.java:32)\r\n at java.util.ArrayList.forEach(ArrayList.java:1257)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32)\r\n at org.apache.ibatis.scripting.xmltags.TrimSqlNode.apply(TrimSqlNode.java:55)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.lambda$apply$0(MixedSqlNode.java:32)\r\n at java.util.ArrayList.forEach(ArrayList.java:1257)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32)\r\n at org.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:39)\r\n at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:305)\r\n at net.lab1024.sa.admin.module.system.datascope.MyBatisPlugin.intercept(MyBatisPlugin.java:46)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)\r\n at com.sun.proxy.$Proxy154.query(Unknown Source)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)\r\n at sun.reflect.GeneratedMethodAccessor163.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426)\r\n ... 137 more\r\nCaused by: org.apache.ibatis.ognl.NoSuchPropertyException: net.lab1024.sa.admin.module.business.goods.domain.form.GoodsQueryForm.goodsType\r\n at org.apache.ibatis.ognl.ObjectPropertyAccessor.getProperty(ObjectPropertyAccessor.java:164)\r\n at org.apache.ibatis.ognl.OgnlRuntime.getProperty(OgnlRuntime.java:3338)\r\n at org.apache.ibatis.ognl.ASTProperty.getValueBody(ASTProperty.java:121)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.ASTChain.getValueBody(ASTChain.java:141)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.ASTNotEq.getValueBody(ASTNotEq.java:50)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:560)\r\n at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:524)\r\n at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:46)\r\n ... 157 more\r\n', '2022-10-21 18:59:19', '2022-10-21 18:59:19'), + (314, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 18:59:21', '2022-10-21 18:59:21'), + (315, 1, 1, '管理员', 'ERP进销存-商品管理', '添加商品 @author 胡克', '/goods/add', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.add', '[{"categoryId":352,"goodsName":"iphone14","goodsStatus":1,"place":"LUO_YANG","price":150,"remark":"","shelvesFlag":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:00:12', '2022-10-21 19:00:12'), + (316, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 0, 'org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression \'query.goodsType != null\'. Cause: org.apache.ibatis.ognl.NoSuchPropertyException: net.lab1024.sa.admin.module.business.goods.domain.form.GoodsQueryForm.goodsType\r\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)\r\n at com.sun.proxy.$Proxy114.selectList(Unknown Source)\r\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:223)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:173)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:78)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\r\n at com.sun.proxy.$Proxy164.query(Unknown Source)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService.query(GoodsService.java:136)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at com.alibaba.druid.support.spring.stat.DruidStatInterceptor.invoke(DruidStatInterceptor.java:73)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService$$EnhancerBySpringCGLIB$$1.query()\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query(GoodsController.java:42)\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:64)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:57)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:61)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController$$EnhancerBySpringCGLIB$$1.query()\r\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1063)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:84)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at net.lab1024.sa.common.common.security.SecurityTokenFilter.doFilterInternal(SecurityTokenFilter.java:62)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\r\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\r\n at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:97)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:41002)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\r\n at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1723)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\r\n at java.lang.Thread.run(Thread.java:748)\r\nCaused by: org.apache.ibatis.builder.BuilderException: Error evaluating expression \'query.goodsType != null\'. Cause: org.apache.ibatis.ognl.NoSuchPropertyException: net.lab1024.sa.admin.module.business.goods.domain.form.GoodsQueryForm.goodsType\r\n at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:48)\r\n at org.apache.ibatis.scripting.xmltags.ExpressionEvaluator.evaluateBoolean(ExpressionEvaluator.java:32)\r\n at org.apache.ibatis.scripting.xmltags.IfSqlNode.apply(IfSqlNode.java:34)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.lambda$apply$0(MixedSqlNode.java:32)\r\n at java.util.ArrayList.forEach(ArrayList.java:1257)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32)\r\n at org.apache.ibatis.scripting.xmltags.TrimSqlNode.apply(TrimSqlNode.java:55)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.lambda$apply$0(MixedSqlNode.java:32)\r\n at java.util.ArrayList.forEach(ArrayList.java:1257)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32)\r\n at org.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:39)\r\n at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:305)\r\n at net.lab1024.sa.admin.module.system.datascope.MyBatisPlugin.intercept(MyBatisPlugin.java:46)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)\r\n at com.sun.proxy.$Proxy154.query(Unknown Source)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)\r\n at sun.reflect.GeneratedMethodAccessor163.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426)\r\n ... 137 more\r\nCaused by: org.apache.ibatis.ognl.NoSuchPropertyException: net.lab1024.sa.admin.module.business.goods.domain.form.GoodsQueryForm.goodsType\r\n at org.apache.ibatis.ognl.ObjectPropertyAccessor.getProperty(ObjectPropertyAccessor.java:164)\r\n at org.apache.ibatis.ognl.OgnlRuntime.getProperty(OgnlRuntime.java:3338)\r\n at org.apache.ibatis.ognl.ASTProperty.getValueBody(ASTProperty.java:121)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.ASTChain.getValueBody(ASTChain.java:141)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.ASTNotEq.getValueBody(ASTNotEq.java:50)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:560)\r\n at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:524)\r\n at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:46)\r\n ... 157 more\r\n', '2022-10-21 19:00:12', '2022-10-21 19:00:12'), + (317, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:03:39', '2022-10-21 19:03:39'), + (318, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 0, 'org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression \'query.goodsType != null\'. Cause: org.apache.ibatis.ognl.NoSuchPropertyException: net.lab1024.sa.admin.module.business.goods.domain.form.GoodsQueryForm.goodsType\r\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)\r\n at com.sun.proxy.$Proxy114.selectList(Unknown Source)\r\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:223)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:173)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:78)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\r\n at com.sun.proxy.$Proxy164.query(Unknown Source)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService.query(GoodsService.java:136)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at com.alibaba.druid.support.spring.stat.DruidStatInterceptor.invoke(DruidStatInterceptor.java:73)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService$$EnhancerBySpringCGLIB$$1.query()\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query(GoodsController.java:42)\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:64)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:57)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:61)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController$$EnhancerBySpringCGLIB$$1.query()\r\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1063)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:84)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at net.lab1024.sa.common.common.security.SecurityTokenFilter.doFilterInternal(SecurityTokenFilter.java:62)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\r\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\r\n at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:97)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:41002)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\r\n at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1723)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\r\n at java.lang.Thread.run(Thread.java:748)\r\nCaused by: org.apache.ibatis.builder.BuilderException: Error evaluating expression \'query.goodsType != null\'. Cause: org.apache.ibatis.ognl.NoSuchPropertyException: net.lab1024.sa.admin.module.business.goods.domain.form.GoodsQueryForm.goodsType\r\n at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:48)\r\n at org.apache.ibatis.scripting.xmltags.ExpressionEvaluator.evaluateBoolean(ExpressionEvaluator.java:32)\r\n at org.apache.ibatis.scripting.xmltags.IfSqlNode.apply(IfSqlNode.java:34)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.lambda$apply$0(MixedSqlNode.java:32)\r\n at java.util.ArrayList.forEach(ArrayList.java:1257)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32)\r\n at org.apache.ibatis.scripting.xmltags.TrimSqlNode.apply(TrimSqlNode.java:55)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.lambda$apply$0(MixedSqlNode.java:32)\r\n at java.util.ArrayList.forEach(ArrayList.java:1257)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32)\r\n at org.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:39)\r\n at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:305)\r\n at net.lab1024.sa.admin.module.system.datascope.MyBatisPlugin.intercept(MyBatisPlugin.java:46)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)\r\n at com.sun.proxy.$Proxy154.query(Unknown Source)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)\r\n at sun.reflect.GeneratedMethodAccessor163.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426)\r\n ... 137 more\r\nCaused by: org.apache.ibatis.ognl.NoSuchPropertyException: net.lab1024.sa.admin.module.business.goods.domain.form.GoodsQueryForm.goodsType\r\n at org.apache.ibatis.ognl.ObjectPropertyAccessor.getProperty(ObjectPropertyAccessor.java:164)\r\n at org.apache.ibatis.ognl.OgnlRuntime.getProperty(OgnlRuntime.java:3338)\r\n at org.apache.ibatis.ognl.ASTProperty.getValueBody(ASTProperty.java:121)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.ASTChain.getValueBody(ASTChain.java:141)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.ASTNotEq.getValueBody(ASTNotEq.java:50)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:560)\r\n at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:524)\r\n at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:46)\r\n ... 157 more\r\n', '2022-10-21 19:03:39', '2022-10-21 19:03:39'), + (319, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:04:41', '2022-10-21 19:04:41'), + (320, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:05:22', '2022-10-21 19:05:22'), + (321, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:06:36', '2022-10-21 19:06:36'), + (322, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:06:52', '2022-10-21 19:06:52'), + (323, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:06:52', '2022-10-21 19:06:52'), + (324, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:06:55', '2022-10-21 19:06:55'), + (325, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:06:55', '2022-10-21 19:06:55'), + (326, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:06:58', '2022-10-21 19:06:58'), + (327, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:06:58', '2022-10-21 19:06:58'), + (328, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"categoryId":352,"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:07:02', '2022-10-21 19:07:02'), + (329, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:07:03', '2022-10-21 19:07:03'), + (330, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:08:18', '2022-10-21 19:08:18'), + (331, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:08:19', '2022-10-21 19:08:19'), + (332, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:08:20', '2022-10-21 19:08:20'), + (333, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:08:20', '2022-10-21 19:08:20'), + (334, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:08:25', '2022-10-21 19:08:25'), + (335, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:08:25', '2022-10-21 19:08:25'), + (336, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:09:02', '2022-10-21 19:09:02'), + (337, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:09:02', '2022-10-21 19:09:02'), + (338, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:09:21', '2022-10-21 19:09:21'), + (339, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:09:21', '2022-10-21 19:09:21'), + (340, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:11:25', '2022-10-21 19:11:25'), + (341, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:11:26', '2022-10-21 19:11:26'), + (342, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:11:34', '2022-10-21 19:11:34'), + (343, 1, 1, '管理员', 'ERP进销存-商品管理', '更新商品 @author 胡克', '/goods/update', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.update', '[{"categoryId":352,"goodsId":8,"goodsName":"iphone14","goodsStatus":1,"place":"LUO_YANG","price":150,"remark":"","shelvesFlag":false}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:11:38', '2022-10-21 19:11:38'), + (344, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:11:38', '2022-10-21 19:11:38'), + (345, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:12:31', '2022-10-21 19:12:31'), + (346, 1, 1, '管理员', 'ERP进销存-商品管理', '更新商品 @author 胡克', '/goods/update', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.update', '[{"categoryId":352,"goodsId":8,"goodsName":"iphone14","goodsStatus":1,"place":"ZHENG_ZHOU","price":150,"remark":"","shelvesFlag":false}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:12:50', '2022-10-21 19:12:50'), + (347, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:12:50', '2022-10-21 19:12:50'), + (348, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:13:10', '2022-10-21 19:13:10'), + (349, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:17:57', '2022-10-21 19:17:57'), + (350, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:17:57', '2022-10-21 19:17:57'), + (351, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:20:22', '2022-10-21 19:20:22'), + (352, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:20:22', '2022-10-21 19:20:22'), + (353, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:21:11', '2022-10-21 19:21:11'), + (354, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:21:11', '2022-10-21 19:21:11'), + (355, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"goodsStatus":2,"pageNum":1,"pageSize":10,"place":"LUO_YANG","searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:22:08', '2022-10-21 19:22:08'), + (356, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:22:10', '2022-10-21 19:22:10'), + (357, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"place":"ZHENG_ZHOU","searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:22:16', '2022-10-21 19:22:16'), + (358, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:22:18', '2022-10-21 19:22:18'), + (359, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:22:27', '2022-10-21 19:22:27'), + (360, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:22:28', '2022-10-21 19:22:28'), + (361, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:23:00', '2022-10-21 19:23:00'), + (362, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:23:00', '2022-10-21 19:23:00'), + (363, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:23:03', '2022-10-21 19:23:03'), + (364, 1, 1, '管理员', 'ERP进销存-商品管理', '更新商品 @author 胡克', '/goods/update', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.update', '[{"categoryId":354,"goodsId":4,"goodsName":"计算机组成原理2","goodsStatus":2,"place":"BEI_JING","price":12,"remark":"4234","shelvesFlag":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:23:09', '2022-10-21 19:23:09'), + (365, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:23:09', '2022-10-21 19:23:09'), + (366, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:24:27', '2022-10-21 19:24:27'), + (367, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:24:27', '2022-10-21 19:24:27'), + (368, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:30:55', '2022-10-21 19:30:55'), + (369, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:30:55', '2022-10-21 19:30:55'), + (370, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:30:55', '2022-10-21 19:30:55'), + (371, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:30:55', '2022-10-21 19:30:55'), + (372, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:31:10', '2022-10-21 19:31:10'), + (373, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:31:10', '2022-10-21 19:31:10'), + (374, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:31:21', '2022-10-21 19:31:21'), + (375, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:31:21', '2022-10-21 19:31:21'), + (376, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:31:33', '2022-10-21 19:31:33'), + (377, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:31:33', '2022-10-21 19:31:33'), + (378, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:31:48', '2022-10-21 19:31:48'), + (379, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:31:48', '2022-10-21 19:31:48'), + (380, 1, 1, '管理员', 'ERP进销存-商品管理', '删除 @author 卓大', '/goods/delete/2', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.delete', '[2]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:31:55', '2022-10-21 19:31:55'), + (381, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:31:59', '2022-10-21 19:31:59'), + (382, 1, 1, '管理员', 'ERP进销存-商品管理', '更新商品 @author 胡克', '/goods/update', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.update', '[{"categoryId":2,"goodsId":2,"goodsName":"颈椎病康复指南","goodsStatus":3,"place":"ZHENG_ZHOU","price":988,"shelvesFlag":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:32:07', '2022-10-21 19:32:07'), + (383, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:32:07', '2022-10-21 19:32:07'), + (384, 1, 1, '管理员', 'ERP进销存-商品管理', '删除 @author 卓大', '/goods/delete/2', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.delete', '[2]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 0, 'org.springframework.dao.DataIntegrityViolationException: net.lab1024.sa.common.module.support.datatracer.dao.DataTracerDao.insert (batch index #1) failed. Cause: java.sql.BatchUpdateException: Field \'type\' doesn\'t have a default value\n; Field \'type\' doesn\'t have a default value; nested exception is java.sql.BatchUpdateException: Field \'type\' doesn\'t have a default value\r\n at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:251)\r\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)\r\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:88)\r\n at com.baomidou.mybatisplus.extension.toolkit.SqlHelper.executeBatch(SqlHelper.java:189)\r\n at com.baomidou.mybatisplus.extension.toolkit.SqlHelper.executeBatch(SqlHelper.java:211)\r\n at com.baomidou.mybatisplus.extension.service.impl.ServiceImpl.executeBatch(ServiceImpl.java:239)\r\n at com.baomidou.mybatisplus.extension.service.impl.ServiceImpl.saveBatch(ServiceImpl.java:135)\r\n at com.baomidou.mybatisplus.extension.service.IService.saveBatch(IService.java:73)\r\n at com.baomidou.mybatisplus.extension.service.IService$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.common.module.support.datatracer.manager.DataTracerManger$$EnhancerBySpringCGLIB$$1.saveBatch()\r\n at net.lab1024.sa.common.module.support.datatracer.service.DataTracerService.addTraceList(DataTracerService.java:207)\r\n at net.lab1024.sa.common.module.support.datatracer.service.DataTracerService.addTraceList(DataTracerService.java:186)\r\n at net.lab1024.sa.common.module.support.datatracer.service.DataTracerService.batchDelete(DataTracerService.java:135)\r\n at net.lab1024.sa.common.module.support.datatracer.service.DataTracerService$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at com.alibaba.druid.support.spring.stat.DruidStatInterceptor.invoke(DruidStatInterceptor.java:73)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.common.module.support.datatracer.service.DataTracerService$$EnhancerBySpringCGLIB$$1.batchDelete()\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService.delete(GoodsService.java:124)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at com.alibaba.druid.support.spring.stat.DruidStatInterceptor.invoke(DruidStatInterceptor.java:73)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService$$EnhancerBySpringCGLIB$$1.delete()\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController.delete(GoodsController.java:64)\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:64)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:57)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:61)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController$$EnhancerBySpringCGLIB$$1.delete()\r\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1063)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\r\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:84)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at net.lab1024.sa.common.common.security.SecurityTokenFilter.doFilterInternal(SecurityTokenFilter.java:62)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\r\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\r\n at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:97)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:41002)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\r\n at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1723)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\r\n at java.lang.Thread.run(Thread.java:748)\r\nCaused by: java.sql.BatchUpdateException: Field \'type\' doesn\'t have a default value\r\n at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)\r\n at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)\r\n at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)\r\n at java.lang.reflect.Constructor.newInstance(Constructor.java:423)\r\n at com.mysql.cj.util.Util.handleNewInstance(Util.java:192)\r\n at com.mysql.cj.util.Util.getInstance(Util.java:167)\r\n at com.mysql.cj.util.Util.getInstance(Util.java:174)\r\n at com.mysql.cj.jdbc.exceptions.SQLError.createBatchUpdateException(SQLError.java:224)\r\n at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchedInserts(ClientPreparedStatement.java:755)\r\n at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchInternal(ClientPreparedStatement.java:426)\r\n at com.mysql.cj.jdbc.StatementImpl.executeBatch(StatementImpl.java:794)\r\n at com.p6spy.engine.wrapper.StatementWrapper.executeBatch(StatementWrapper.java:97)\r\n at com.alibaba.druid.filter.FilterChainImpl.statement_executeBatch(FilterChainImpl.java:3118)\r\n at com.alibaba.druid.filter.FilterAdapter.statement_executeBatch(FilterAdapter.java:2507)\r\n at com.alibaba.druid.filter.FilterEventAdapter.statement_executeBatch(FilterEventAdapter.java:279)\r\n at com.alibaba.druid.filter.FilterChainImpl.statement_executeBatch(FilterChainImpl.java:3116)\r\n at com.alibaba.druid.filter.FilterAdapter.statement_executeBatch(FilterAdapter.java:2507)\r\n at com.alibaba.druid.filter.FilterEventAdapter.statement_executeBatch(FilterEventAdapter.java:279)\r\n at com.alibaba.druid.filter.FilterChainImpl.statement_executeBatch(FilterChainImpl.java:3116)\r\n at com.alibaba.druid.proxy.jdbc.StatementProxyImpl.executeBatch(StatementProxyImpl.java:202)\r\n at com.alibaba.druid.pool.DruidPooledPreparedStatement.executeBatch(DruidPooledPreparedStatement.java:565)\r\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:78)\r\n at com.sun.proxy.$Proxy158.executeBatch(Unknown Source)\r\n at com.baomidou.mybatisplus.core.executor.MybatisBatchExecutor.doFlushStatements(MybatisBatchExecutor.java:135)\r\n at org.apache.ibatis.executor.BaseExecutor.flushStatements(BaseExecutor.java:129)\r\n at org.apache.ibatis.executor.BaseExecutor.flushStatements(BaseExecutor.java:122)\r\n at com.baomidou.mybatisplus.core.executor.MybatisCachingExecutor.flushStatements(MybatisCachingExecutor.java:218)\r\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63)\r\n at com.sun.proxy.$Proxy154.flushStatements(Unknown Source)\r\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63)\r\n at com.sun.proxy.$Proxy154.flushStatements(Unknown Source)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.flushStatements(DefaultSqlSession.java:252)\r\n at com.baomidou.mybatisplus.extension.toolkit.SqlHelper.lambda$executeBatch$0(SqlHelper.java:217)\r\n at com.baomidou.mybatisplus.extension.toolkit.SqlHelper.executeBatch(SqlHelper.java:179)\r\n ... 152 more\r\nCaused by: java.sql.SQLException: Field \'type\' doesn\'t have a default value\r\n at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)\r\n at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)\r\n at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)\r\n at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1092)\r\n at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1040)\r\n at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1348)\r\n at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchedInserts(ClientPreparedStatement.java:716)\r\n ... 189 more\r\n', '2022-10-21 19:32:11', '2022-10-21 19:32:11'), + (385, 1, 1, '管理员', 'ERP进销存-商品管理', '删除 @author 卓大', '/goods/delete/2', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.delete', '[2]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:42:37', '2022-10-21 19:42:37'), + (386, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:42:37', '2022-10-21 19:42:37'), + (387, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:42:42', '2022-10-21 19:42:42'), + (388, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:43:23', '2022-10-21 19:43:23'), + (389, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:47:19', '2022-10-21 19:47:19'), + (390, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:47:19', '2022-10-21 19:47:19'), + (391, 1, 1, '管理员', 'ERP进销存-商品管理', '删除 @author 卓大', '/goods/delete/2', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.delete', '[2]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 0, 'org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter \'goodsId\' not found. Available parameters are [deletedFlag, goodsIdList, param1, param2]\r\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)\r\n at com.sun.proxy.$Proxy114.update(Unknown Source)\r\n at org.mybatis.spring.SqlSessionTemplate.update(SqlSessionTemplate.java:287)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:65)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\r\n at com.sun.proxy.$Proxy164.batchUpdateDeleted(Unknown Source)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService.batchDelete(GoodsService.java:137)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService.delete(GoodsService.java:124)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at com.alibaba.druid.support.spring.stat.DruidStatInterceptor.invoke(DruidStatInterceptor.java:73)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService$$EnhancerBySpringCGLIB$$1.delete()\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController.delete(GoodsController.java:64)\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:64)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:57)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:61)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController$$EnhancerBySpringCGLIB$$1.delete()\r\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1063)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\r\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:84)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at net.lab1024.sa.common.common.security.SecurityTokenFilter.doFilterInternal(SecurityTokenFilter.java:62)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\r\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\r\n at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:97)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:41002)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\r\n at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1723)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\r\n at java.lang.Thread.run(Thread.java:748)\r\nCaused by: org.apache.ibatis.binding.BindingException: Parameter \'goodsId\' not found. Available parameters are [deletedFlag, goodsIdList, param1, param2]\r\n at org.apache.ibatis.binding.MapperMethod$ParamMap.get(MapperMethod.java:212)\r\n at org.apache.ibatis.scripting.xmltags.DynamicContext$ContextAccessor.getProperty(DynamicContext.java:120)\r\n at org.apache.ibatis.ognl.OgnlRuntime.getProperty(OgnlRuntime.java:3338)\r\n at org.apache.ibatis.ognl.ASTProperty.getValueBody(ASTProperty.java:121)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:560)\r\n at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:524)\r\n at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:46)\r\n at org.apache.ibatis.scripting.xmltags.ExpressionEvaluator.evaluateIterable(ExpressionEvaluator.java:43)\r\n at org.apache.ibatis.scripting.xmltags.ForEachSqlNode.apply(ForEachSqlNode.java:54)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.lambda$apply$0(MixedSqlNode.java:32)\r\n at java.util.ArrayList.forEach(ArrayList.java:1257)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32)\r\n at org.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:39)\r\n at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:305)\r\n at org.apache.ibatis.executor.statement.BaseStatementHandler.(BaseStatementHandler.java:64)\r\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.(PreparedStatementHandler.java:41)\r\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.(RoutingStatementHandler.java:46)\r\n at org.apache.ibatis.session.Configuration.newStatementHandler(Configuration.java:658)\r\n at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.doUpdate(MybatisSimpleExecutor.java:54)\r\n at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)\r\n at com.baomidou.mybatisplus.core.executor.MybatisCachingExecutor.update(MybatisCachingExecutor.java:85)\r\n at sun.reflect.GeneratedMethodAccessor367.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49)\r\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:83)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)\r\n at com.sun.proxy.$Proxy154.update(Unknown Source)\r\n at sun.reflect.GeneratedMethodAccessor367.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63)\r\n at com.sun.proxy.$Proxy154.update(Unknown Source)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197)\r\n at sun.reflect.GeneratedMethodAccessor432.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426)\r\n ... 136 more\r\n', '2022-10-21 19:47:28', '2022-10-21 19:47:28'), + (392, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:53:07', '2022-10-21 19:53:07'), + (393, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:53:07', '2022-10-21 19:53:07'), + (394, 1, 1, '管理员', 'ERP进销存-商品管理', '删除 @author 卓大', '/goods/delete/2', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.delete', '[2]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 0, 'org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter \'goodsId\' not found. Available parameters are [deletedFlag, goodsIdList, param1, param2]\r\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)\r\n at com.sun.proxy.$Proxy114.update(Unknown Source)\r\n at org.mybatis.spring.SqlSessionTemplate.update(SqlSessionTemplate.java:287)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:65)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\r\n at com.sun.proxy.$Proxy164.batchUpdateDeleted(Unknown Source)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService.batchDelete(GoodsService.java:137)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService.delete(GoodsService.java:124)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at com.alibaba.druid.support.spring.stat.DruidStatInterceptor.invoke(DruidStatInterceptor.java:73)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService$$EnhancerBySpringCGLIB$$1.delete()\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController.delete(GoodsController.java:64)\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:64)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:57)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:61)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController$$EnhancerBySpringCGLIB$$1.delete()\r\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1063)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\r\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:84)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at net.lab1024.sa.common.common.security.SecurityTokenFilter.doFilterInternal(SecurityTokenFilter.java:62)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\r\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\r\n at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:97)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:41002)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\r\n at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1723)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\r\n at java.lang.Thread.run(Thread.java:748)\r\nCaused by: org.apache.ibatis.binding.BindingException: Parameter \'goodsId\' not found. Available parameters are [deletedFlag, goodsIdList, param1, param2]\r\n at org.apache.ibatis.binding.MapperMethod$ParamMap.get(MapperMethod.java:212)\r\n at org.apache.ibatis.scripting.xmltags.DynamicContext$ContextAccessor.getProperty(DynamicContext.java:120)\r\n at org.apache.ibatis.ognl.OgnlRuntime.getProperty(OgnlRuntime.java:3338)\r\n at org.apache.ibatis.ognl.ASTProperty.getValueBody(ASTProperty.java:121)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:560)\r\n at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:524)\r\n at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:46)\r\n at org.apache.ibatis.scripting.xmltags.ExpressionEvaluator.evaluateIterable(ExpressionEvaluator.java:43)\r\n at org.apache.ibatis.scripting.xmltags.ForEachSqlNode.apply(ForEachSqlNode.java:54)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.lambda$apply$0(MixedSqlNode.java:32)\r\n at java.util.ArrayList.forEach(ArrayList.java:1257)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32)\r\n at org.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:39)\r\n at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:305)\r\n at org.apache.ibatis.executor.statement.BaseStatementHandler.(BaseStatementHandler.java:64)\r\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.(PreparedStatementHandler.java:41)\r\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.(RoutingStatementHandler.java:46)\r\n at org.apache.ibatis.session.Configuration.newStatementHandler(Configuration.java:658)\r\n at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.doUpdate(MybatisSimpleExecutor.java:54)\r\n at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)\r\n at com.baomidou.mybatisplus.core.executor.MybatisCachingExecutor.update(MybatisCachingExecutor.java:85)\r\n at sun.reflect.GeneratedMethodAccessor367.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49)\r\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:83)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)\r\n at com.sun.proxy.$Proxy154.update(Unknown Source)\r\n at sun.reflect.GeneratedMethodAccessor367.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63)\r\n at com.sun.proxy.$Proxy154.update(Unknown Source)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197)\r\n at sun.reflect.GeneratedMethodAccessor432.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426)\r\n ... 136 more\r\n', '2022-10-21 19:53:12', '2022-10-21 19:53:12'), + (395, 1, 1, '管理员', 'ERP进销存-商品管理', '删除 @author 卓大', '/goods/delete/2', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.delete', '[2]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 0, 'org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter \'goodsId\' not found. Available parameters are [deletedFlag, goodsIdList, param1, param2]\r\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)\r\n at com.sun.proxy.$Proxy114.update(Unknown Source)\r\n at org.mybatis.spring.SqlSessionTemplate.update(SqlSessionTemplate.java:287)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:65)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\r\n at com.sun.proxy.$Proxy164.batchUpdateDeleted(Unknown Source)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService.batchDelete(GoodsService.java:137)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService.delete(GoodsService.java:124)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at com.alibaba.druid.support.spring.stat.DruidStatInterceptor.invoke(DruidStatInterceptor.java:73)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService$$EnhancerBySpringCGLIB$$1.delete()\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController.delete(GoodsController.java:64)\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:64)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:57)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:61)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController$$EnhancerBySpringCGLIB$$1.delete()\r\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1063)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\r\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:84)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at net.lab1024.sa.common.common.security.SecurityTokenFilter.doFilterInternal(SecurityTokenFilter.java:62)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\r\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\r\n at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:97)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:41002)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\r\n at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1723)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\r\n at java.lang.Thread.run(Thread.java:748)\r\nCaused by: org.apache.ibatis.binding.BindingException: Parameter \'goodsId\' not found. Available parameters are [deletedFlag, goodsIdList, param1, param2]\r\n at org.apache.ibatis.binding.MapperMethod$ParamMap.get(MapperMethod.java:212)\r\n at org.apache.ibatis.scripting.xmltags.DynamicContext$ContextAccessor.getProperty(DynamicContext.java:120)\r\n at org.apache.ibatis.ognl.OgnlRuntime.getProperty(OgnlRuntime.java:3338)\r\n at org.apache.ibatis.ognl.ASTProperty.getValueBody(ASTProperty.java:121)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:560)\r\n at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:524)\r\n at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:46)\r\n at org.apache.ibatis.scripting.xmltags.ExpressionEvaluator.evaluateIterable(ExpressionEvaluator.java:43)\r\n at org.apache.ibatis.scripting.xmltags.ForEachSqlNode.apply(ForEachSqlNode.java:54)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.lambda$apply$0(MixedSqlNode.java:32)\r\n at java.util.ArrayList.forEach(ArrayList.java:1257)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32)\r\n at org.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:39)\r\n at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:305)\r\n at org.apache.ibatis.executor.statement.BaseStatementHandler.(BaseStatementHandler.java:64)\r\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.(PreparedStatementHandler.java:41)\r\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.(RoutingStatementHandler.java:46)\r\n at org.apache.ibatis.session.Configuration.newStatementHandler(Configuration.java:658)\r\n at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.doUpdate(MybatisSimpleExecutor.java:54)\r\n at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)\r\n at com.baomidou.mybatisplus.core.executor.MybatisCachingExecutor.update(MybatisCachingExecutor.java:85)\r\n at sun.reflect.GeneratedMethodAccessor367.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49)\r\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:83)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)\r\n at com.sun.proxy.$Proxy154.update(Unknown Source)\r\n at sun.reflect.GeneratedMethodAccessor367.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63)\r\n at com.sun.proxy.$Proxy154.update(Unknown Source)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197)\r\n at sun.reflect.GeneratedMethodAccessor432.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426)\r\n ... 136 more\r\n', '2022-10-21 19:53:48', '2022-10-21 19:53:48'), + (396, 1, 1, '管理员', 'ERP进销存-商品管理', '删除 @author 卓大', '/goods/delete/2', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.delete', '[2]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 0, 'org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter \'goodsId\' not found. Available parameters are [deletedFlag, goodsIdList, param1, param2]\r\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)\r\n at com.sun.proxy.$Proxy114.update(Unknown Source)\r\n at org.mybatis.spring.SqlSessionTemplate.update(SqlSessionTemplate.java:287)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:65)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\r\n at com.sun.proxy.$Proxy164.batchUpdateDeleted(Unknown Source)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService.batchDelete(GoodsService.java:137)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService.delete(GoodsService.java:124)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at com.alibaba.druid.support.spring.stat.DruidStatInterceptor.invoke(DruidStatInterceptor.java:73)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.goods.service.GoodsService$$EnhancerBySpringCGLIB$$1.delete()\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController.delete(GoodsController.java:64)\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:64)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:57)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:61)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.goods.controller.GoodsController$$EnhancerBySpringCGLIB$$1.delete()\r\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1063)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\r\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:84)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at net.lab1024.sa.common.common.security.SecurityTokenFilter.doFilterInternal(SecurityTokenFilter.java:62)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\r\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\r\n at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:97)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:41002)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\r\n at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1723)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\r\n at java.lang.Thread.run(Thread.java:748)\r\nCaused by: org.apache.ibatis.binding.BindingException: Parameter \'goodsId\' not found. Available parameters are [deletedFlag, goodsIdList, param1, param2]\r\n at org.apache.ibatis.binding.MapperMethod$ParamMap.get(MapperMethod.java:212)\r\n at org.apache.ibatis.scripting.xmltags.DynamicContext$ContextAccessor.getProperty(DynamicContext.java:120)\r\n at org.apache.ibatis.ognl.OgnlRuntime.getProperty(OgnlRuntime.java:3338)\r\n at org.apache.ibatis.ognl.ASTProperty.getValueBody(ASTProperty.java:121)\r\n at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)\r\n at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)\r\n at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:560)\r\n at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:524)\r\n at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:46)\r\n at org.apache.ibatis.scripting.xmltags.ExpressionEvaluator.evaluateIterable(ExpressionEvaluator.java:43)\r\n at org.apache.ibatis.scripting.xmltags.ForEachSqlNode.apply(ForEachSqlNode.java:54)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.lambda$apply$0(MixedSqlNode.java:32)\r\n at java.util.ArrayList.forEach(ArrayList.java:1257)\r\n at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32)\r\n at org.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:39)\r\n at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:305)\r\n at org.apache.ibatis.executor.statement.BaseStatementHandler.(BaseStatementHandler.java:64)\r\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.(PreparedStatementHandler.java:41)\r\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.(RoutingStatementHandler.java:46)\r\n at org.apache.ibatis.session.Configuration.newStatementHandler(Configuration.java:658)\r\n at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.doUpdate(MybatisSimpleExecutor.java:54)\r\n at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)\r\n at com.baomidou.mybatisplus.core.executor.MybatisCachingExecutor.update(MybatisCachingExecutor.java:85)\r\n at sun.reflect.GeneratedMethodAccessor367.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49)\r\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:83)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)\r\n at com.sun.proxy.$Proxy154.update(Unknown Source)\r\n at sun.reflect.GeneratedMethodAccessor367.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63)\r\n at com.sun.proxy.$Proxy154.update(Unknown Source)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197)\r\n at sun.reflect.GeneratedMethodAccessor432.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426)\r\n ... 136 more\r\n', '2022-10-21 19:53:53', '2022-10-21 19:53:53'), + (397, 1, 1, '管理员', 'ERP进销存-商品管理', '删除 @author 卓大', '/goods/delete/2', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.delete', '[2]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:54:16', '2022-10-21 19:54:16'), + (398, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:54:16', '2022-10-21 19:54:16'), + (399, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:54:45', '2022-10-21 19:54:45'), + (400, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:54:45', '2022-10-21 19:54:45'), + (401, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:56:58', '2022-10-21 19:56:58'), + (402, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:56:58', '2022-10-21 19:56:58'), + (403, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:56:58', '2022-10-21 19:56:58'), + (404, 1, 1, '管理员', 'ERP进销存-商品管理', '批量 @author 卓大', '/goods/batchDelete', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.batchDelete', '[[4,3]]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:57:05', '2022-10-21 19:57:05'), + (405, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:57:05', '2022-10-21 19:57:05'), + (406, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:57:28', '2022-10-21 19:57:28'), + (407, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":"","shelvesFlag":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:57:30', '2022-10-21 19:57:30'), + (408, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":"","shelvesFlag":false}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:57:31', '2022-10-21 19:57:31'), + (409, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:57:32', '2022-10-21 19:57:32'), + (410, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:57:33', '2022-10-21 19:57:33'), + (411, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":"","shelvesFlag":false}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:57:33', '2022-10-21 19:57:33'), + (412, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:57:34', '2022-10-21 19:57:34'), + (413, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:57:37', '2022-10-21 19:57:37'), + (414, 1, 1, '管理员', 'ERP进销存-商品管理', '更新商品 @author 胡克', '/goods/update', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.update', '[{"categoryId":353,"goodsId":1,"goodsName":"Mote60","goodsStatus":1,"place":"BEI_JING","price":9999,"shelvesFlag":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:57:49', '2022-10-21 19:57:49'), + (415, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:57:49', '2022-10-21 19:57:49'), + (416, 1, 1, '管理员', 'ERP进销存-商品管理', '更新商品 @author 胡克', '/goods/update', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.update', '[{"categoryId":352,"goodsId":7,"goodsName":"iphone15 pro","goodsStatus":1,"place":"LUO_YANG","price":50000,"remark":"备注","shelvesFlag":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:58:07', '2022-10-21 19:58:07'), + (417, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:58:07', '2022-10-21 19:58:07'), + (418, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:58:11', '2022-10-21 19:58:11'), + (419, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:59:28', '2022-10-21 19:59:28'), + (420, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:59:28', '2022-10-21 19:59:28'), + (421, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:59:30', '2022-10-21 19:59:30'), + (422, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:59:44', '2022-10-21 19:59:44'), + (423, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:59:45', '2022-10-21 19:59:45'), + (424, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:59:45', '2022-10-21 19:59:45'), + (425, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 19:59:46', '2022-10-21 19:59:46'), + (426, 1, 1, '管理员', '系统-菜单', '添加菜单 @author 卓大', '/menu/add', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.addMenu', '[{"cacheFlag":false,"createUserId":1,"disabledFlag":false,"frameFlag":false,"menuName":"删除","menuType":3,"parentId":0,"permsType":1,"visibleFlag":true,"webPerms":"goods:delete"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:00:12', '2022-10-21 20:00:12'), + (427, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:00:13', '2022-10-21 20:00:13'), + (428, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:00:13', '2022-10-21 20:00:13'), + (429, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:00:18', '2022-10-21 20:00:18'), + (430, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:00:26', '2022-10-21 20:00:26'), + (431, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:00:26', '2022-10-21 20:00:26'), + (432, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:00:26', '2022-10-21 20:00:26'), + (433, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"contextMenuId":47,"disabledFlag":false,"frameFlag":false,"menuId":194,"menuName":"删除","menuType":3,"parentId":0,"permsType":1,"updateUserId":1,"visibleFlag":true,"webPerms":"goods:delete"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:00:45', '2022-10-21 20:00:45'), + (434, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:00:45', '2022-10-21 20:00:45'), + (435, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:00:45', '2022-10-21 20:00:45'), + (436, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:00:48', '2022-10-21 20:00:48'), + (437, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:00:52', '2022-10-21 20:00:52'), + (438, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:00:53', '2022-10-21 20:00:53'), + (439, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:00:53', '2022-10-21 20:00:53'), + (440, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:00:59', '2022-10-21 20:00:59'), + (441, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:01:01', '2022-10-21 20:01:01'), + (442, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:01:03', '2022-10-21 20:01:03'), + (443, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:01:04', '2022-10-21 20:01:04'), + (444, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:01:04', '2022-10-21 20:01:04'), + (445, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:01:05', '2022-10-21 20:01:05'), + (446, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:02:16', '2022-10-21 20:02:16'), + (447, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:04:15', '2022-10-21 20:04:15'), + (448, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:04:38', '2022-10-21 20:04:38'), + (449, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"disabledFlag":false,"frameFlag":false,"menuId":194,"menuName":"删除","menuType":3,"parentId":47,"permsType":1,"updateUserId":1,"visibleFlag":true,"webPerms":"goods:delete"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:04:58', '2022-10-21 20:04:58'), + (450, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:04:58', '2022-10-21 20:04:58'), + (451, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:05:11', '2022-10-21 20:05:11'), + (452, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:05:11', '2022-10-21 20:05:11'), + (453, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:05:12', '2022-10-21 20:05:12'), + (454, 1, 1, '管理员', '系统-菜单', '添加菜单 @author 卓大', '/menu/add', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.addMenu', '[{"cacheFlag":false,"createUserId":1,"disabledFlag":false,"frameFlag":false,"menuName":"修改","menuType":3,"parentId":47,"permsType":1,"visibleFlag":true,"webPerms":"goods:update"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:05:24', '2022-10-21 20:05:24'), + (455, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:05:24', '2022-10-21 20:05:24'), + (456, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:05:53', '2022-10-21 20:05:53'), + (457, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:10:32', '2022-10-21 20:10:32'), + (458, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:10:43', '2022-10-21 20:10:43'), + (459, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:10:43', '2022-10-21 20:10:43'), + (460, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:10:43', '2022-10-21 20:10:43'), + (461, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:10:43', '2022-10-21 20:10:43'), + (462, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:10:43', '2022-10-21 20:10:43'), + (463, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:11:09', '2022-10-21 20:11:09'), + (464, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:11:09', '2022-10-21 20:11:09'), + (465, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:11:09', '2022-10-21 20:11:09'), + (466, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":["EnterpriseController.deleteEnterprise"],"cacheFlag":false,"contextMenuId":144,"disabledFlag":false,"frameFlag":false,"menuId":184,"menuName":"删除","menuType":3,"parentId":144,"permsType":2,"updateUserId":1,"visibleFlag":true,"webPerms":"enterprise:delete"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:11:24', '2022-10-21 20:11:24'), + (467, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:11:25', '2022-10-21 20:11:25'), + (468, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:12:25', '2022-10-21 20:12:25'), + (469, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:12:26', '2022-10-21 20:12:26'), + (470, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:12:28', '2022-10-21 20:12:28'), + (471, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:12:33', '2022-10-21 20:12:33'), + (472, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:12:33', '2022-10-21 20:12:33'), + (473, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:12:35', '2022-10-21 20:12:35'), + (474, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:12:44', '2022-10-21 20:12:44'), + (475, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:12:44', '2022-10-21 20:12:44'), + (476, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:12:44', '2022-10-21 20:12:44'), + (477, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":["EnterpriseController.deleteEnterprise"],"cacheFlag":false,"contextMenuId":144,"disabledFlag":false,"frameFlag":false,"menuId":181,"menuName":"查询","menuType":3,"parentId":144,"permsType":2,"updateUserId":1,"visibleFlag":true,"webPerms":"enterprise:query"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:15:12', '2022-10-21 20:15:12'), + (478, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:15:12', '2022-10-21 20:15:12'), + (479, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:15:20', '2022-10-21 20:15:20'), + (480, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:15:20', '2022-10-21 20:15:20'), + (481, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:15:20', '2022-10-21 20:15:20'), + (482, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":["EnterpriseController.createEnterprise"],"cacheFlag":false,"contextMenuId":144,"disabledFlag":false,"frameFlag":false,"menuId":182,"menuName":"新建","menuType":3,"parentId":144,"permsType":2,"updateUserId":1,"visibleFlag":true,"webPerms":"enterprise:add"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:15:30', '2022-10-21 20:15:30'), + (483, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:15:31', '2022-10-21 20:15:31'), + (484, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:15:33', '2022-10-21 20:15:33'), + (485, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:15:33', '2022-10-21 20:15:33'), + (486, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:15:33', '2022-10-21 20:15:33'), + (487, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":["EnterpriseController.updateEnterprise"],"cacheFlag":false,"contextMenuId":144,"disabledFlag":false,"frameFlag":false,"menuId":183,"menuName":"编辑","menuType":3,"parentId":144,"permsType":2,"updateUserId":1,"visibleFlag":true,"webPerms":"enterprise:edit"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:15:39', '2022-10-21 20:15:39'), + (488, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:15:40', '2022-10-21 20:15:40'), + (489, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:16:03', '2022-10-21 20:16:03'), + (490, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:16:03', '2022-10-21 20:16:03'), + (491, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:16:06', '2022-10-21 20:16:06'), + (492, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:16:12', '2022-10-21 20:16:12'), + (493, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:16:12', '2022-10-21 20:16:12'), + (494, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:16:15', '2022-10-21 20:16:15'), + (495, 1, 1, '管理员', '系统-菜单', '添加菜单 @author 卓大', '/menu/add', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.addMenu', '[{"apiPermsList":["EnterpriseController.getDetail"],"cacheFlag":false,"createUserId":1,"disabledFlag":false,"frameFlag":false,"menuName":"查看详情","menuType":3,"parentId":145,"permsType":2,"visibleFlag":true,"webPerms":"enterprise:detail"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:16:47', '2022-10-21 20:16:47'), + (496, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:16:48', '2022-10-21 20:16:48'), + (497, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:17:48', '2022-10-21 20:17:48'), + (498, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:17:49', '2022-10-21 20:17:49'), + (499, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:17:57', '2022-10-21 20:17:57'), + (500, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:18:49', '2022-10-21 20:18:49'), + (501, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:18:49', '2022-10-21 20:18:49'), + (502, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:18:50', '2022-10-21 20:18:50'), + (503, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:18:52', '2022-10-21 20:18:52'), + (504, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:18:52', '2022-10-21 20:18:52'), + (505, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:18:52', '2022-10-21 20:18:52'), + (506, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:18:55', '2022-10-21 20:18:55'), + (507, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:18:55', '2022-10-21 20:18:55'), + (508, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:19:00', '2022-10-21 20:19:00'), + (509, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:19:06', '2022-10-21 20:19:06'), + (510, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:19:06', '2022-10-21 20:19:06'), + (511, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:19:06', '2022-10-21 20:19:06'), + (512, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":["NoticeController.query"],"cacheFlag":false,"contextMenuId":132,"disabledFlag":false,"frameFlag":false,"menuId":185,"menuName":"查询","menuType":3,"parentId":132,"permsType":2,"updateUserId":1,"visibleFlag":true,"webPerms":"notice:query"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:19:24', '2022-10-21 20:19:24'), + (513, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:19:24', '2022-10-21 20:19:24'), + (514, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:19:40', '2022-10-21 20:19:40'), + (515, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:19:40', '2022-10-21 20:19:40'), + (516, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:19:40', '2022-10-21 20:19:40'), + (517, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":["NoticeController.add"],"cacheFlag":false,"contextMenuId":132,"disabledFlag":false,"frameFlag":false,"menuId":186,"menuName":"新建","menuType":3,"parentId":132,"permsType":2,"updateUserId":1,"visibleFlag":true,"webPerms":"notice:add"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:19:49', '2022-10-21 20:19:49'), + (518, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:19:50', '2022-10-21 20:19:50'), + (519, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:19:53', '2022-10-21 20:19:53'), + (520, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:19:53', '2022-10-21 20:19:53'), + (521, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:19:53', '2022-10-21 20:19:53'), + (522, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:21:11', '2022-10-21 20:21:11'), + (523, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:21:11', '2022-10-21 20:21:11'), + (524, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:21:11', '2022-10-21 20:21:11'), + (525, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":["NoticeController.update"],"cacheFlag":false,"contextMenuId":132,"disabledFlag":false,"frameFlag":false,"menuId":187,"menuName":"编辑","menuType":3,"parentId":132,"permsType":2,"updateUserId":1,"visibleFlag":true,"webPerms":"notice:edit"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:21:16', '2022-10-21 20:21:16'), + (526, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:21:16', '2022-10-21 20:21:16'), + (527, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:21:18', '2022-10-21 20:21:18'), + (528, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:21:19', '2022-10-21 20:21:19'), + (529, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:21:19', '2022-10-21 20:21:19'), + (530, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":["NoticeController.delete"],"cacheFlag":false,"contextMenuId":132,"disabledFlag":false,"frameFlag":false,"menuId":188,"menuName":"删除","menuType":3,"parentId":132,"permsType":2,"updateUserId":1,"visibleFlag":true,"webPerms":"notice:delete"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:21:25', '2022-10-21 20:21:25'), + (531, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:21:26', '2022-10-21 20:21:26'), + (532, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:23:13', '2022-10-21 20:23:13'), + (533, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:26:00', '2022-10-21 20:26:00'), + (534, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:26:20', '2022-10-21 20:26:20'), + (535, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:26:24', '2022-10-21 20:26:24'), + (536, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:26:29', '2022-10-21 20:26:29'), + (537, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:32:16', '2022-10-21 20:32:16'), + (538, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:33:41', '2022-10-21 20:33:41'), + (539, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:33:41', '2022-10-21 20:33:41'), + (540, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:33:48', '2022-10-21 20:33:48'), + (541, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:37:01', '2022-10-21 20:37:01'), + (542, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:37:01', '2022-10-21 20:37:01'), + (543, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:37:01', '2022-10-21 20:37:01'), + (544, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:37:01', '2022-10-21 20:37:01'), + (545, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:37:01', '2022-10-21 20:37:01'), + (546, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"contextMenuId":133,"disabledFlag":true,"frameFlag":false,"menuId":153,"menuName":"清除缓存","menuType":3,"parentId":133,"permsType":1,"updateUserId":1,"visibleFlag":true,"webPerms":"support:cache:delete"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:37:13', '2022-10-21 20:37:13'), + (547, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:37:14', '2022-10-21 20:37:14'), + (548, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:37:22', '2022-10-21 20:37:22'), + (549, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:37:22', '2022-10-21 20:37:22'), + (550, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:37:22', '2022-10-21 20:37:22'), + (551, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:37:34', '2022-10-21 20:37:34'), + (552, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:37:34', '2022-10-21 20:37:34'), + (553, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:37:35', '2022-10-21 20:37:35'), + (554, 1, 1, '管理员', '系统-菜单', '添加菜单 @author 卓大', '/menu/add', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.addMenu', '[{"cacheFlag":false,"createUserId":1,"disabledFlag":false,"frameFlag":false,"menuName":"查询缓存","menuType":3,"parentId":133,"permsType":1,"visibleFlag":true,"webPerms":"support:cache:names"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:37:55', '2022-10-21 20:37:55'), + (555, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:37:56', '2022-10-21 20:37:56'), + (556, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:38:39', '2022-10-21 20:38:39'), + (557, 1, 1, '管理员', '系统-菜单', '批量删除菜单 @author 卓大', '/menu/batchDelete', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.batchDeleteMenu', '[[197]]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:38:53', '2022-10-21 20:38:53'), + (558, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:38:53', '2022-10-21 20:38:53'), + (559, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:40:10', '2022-10-21 20:40:10'), + (560, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:40:46', '2022-10-21 20:40:46'), + (561, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:40:46', '2022-10-21 20:40:46'), + (562, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:40:46', '2022-10-21 20:40:46'), + (563, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:40:46', '2022-10-21 20:40:46'), + (564, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:40:46', '2022-10-21 20:40:46'), + (565, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"contextMenuId":152,"disabledFlag":false,"frameFlag":false,"menuId":190,"menuName":"查询","menuType":3,"parentId":152,"permsType":1,"updateUserId":1,"visibleFlag":true,"webPerms":"changeLog:query"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:42:00', '2022-10-21 20:42:00'), + (566, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:42:01', '2022-10-21 20:42:01'), + (567, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:42:07', '2022-10-21 20:42:07'), + (568, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:42:07', '2022-10-21 20:42:07'), + (569, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:42:07', '2022-10-21 20:42:07'), + (570, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"contextMenuId":152,"disabledFlag":false,"frameFlag":false,"menuId":191,"menuName":"新建","menuType":3,"parentId":152,"permsType":1,"updateUserId":1,"visibleFlag":true,"webPerms":"changeLog:add"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:42:09', '2022-10-21 20:42:09'), + (571, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:42:09', '2022-10-21 20:42:09'), + (572, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:42:13', '2022-10-21 20:42:13'), + (573, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:42:14', '2022-10-21 20:42:14'), + (574, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:42:14', '2022-10-21 20:42:14'), + (575, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"contextMenuId":152,"disabledFlag":false,"frameFlag":false,"menuId":192,"menuName":"批量删除","menuType":3,"parentId":152,"permsType":1,"updateUserId":1,"visibleFlag":true,"webPerms":"changeLog:batchDelete"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:42:16', '2022-10-21 20:42:16'), + (576, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:42:16', '2022-10-21 20:42:16'), + (577, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:42:19', '2022-10-21 20:42:19'), + (578, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:42:19', '2022-10-21 20:42:19'), + (579, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:42:21', '2022-10-21 20:42:21'), + (580, 1, 1, '管理员', '系统-菜单', '添加菜单 @author 卓大', '/menu/add', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.addMenu', '[{"cacheFlag":false,"createUserId":1,"disabledFlag":false,"frameFlag":false,"menuName":"删除","menuType":3,"parentId":152,"permsType":1,"visibleFlag":true,"webPerms":"changeLog:delete"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:42:34', '2022-10-21 20:42:34'), + (581, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:42:35', '2022-10-21 20:42:35'), + (582, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:44:58', '2022-10-21 20:44:58'), + (583, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:44:58', '2022-10-21 20:44:58'), + (584, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:44:59', '2022-10-21 20:44:59'), + (585, 1, 1, '管理员', '系统-菜单', '添加菜单 @author 卓大', '/menu/add', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.addMenu', '[{"cacheFlag":false,"createUserId":1,"disabledFlag":false,"frameFlag":false,"menuName":"查询","menuType":3,"parentId":109,"permsType":1,"visibleFlag":true,"webPerms":"support:config:query"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:45:14', '2022-10-21 20:45:14'), + (586, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:45:15', '2022-10-21 20:45:15'), + (587, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:47:12', '2022-10-21 20:47:12'), + (588, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:47:12', '2022-10-21 20:47:12'), + (589, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:47:13', '2022-10-21 20:47:13'), + (590, 1, 1, '管理员', '系统-菜单', '添加菜单 @author 卓大', '/menu/add', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.addMenu', '[{"cacheFlag":false,"createUserId":1,"disabledFlag":false,"frameFlag":false,"menuName":"查询","menuType":3,"parentId":193,"permsType":1,"visibleFlag":true,"webPerms":"file:query"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:47:23', '2022-10-21 20:47:23'), + (591, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:47:24', '2022-10-21 20:47:24'), + (592, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:48:20', '2022-10-21 20:48:20'), + (593, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:48:31', '2022-10-21 20:48:31'), + (594, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:48:31', '2022-10-21 20:48:31'), + (595, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:48:31', '2022-10-21 20:48:31'), + (596, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:48:31', '2022-10-21 20:48:31'), + (597, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:48:32', '2022-10-21 20:48:32'), + (598, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:49:10', '2022-10-21 20:49:10'), + (599, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:49:10', '2022-10-21 20:49:10'), + (600, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:49:10', '2022-10-21 20:49:10'), + (601, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"contextMenuId":147,"disabledFlag":false,"frameFlag":false,"menuId":169,"menuName":"新建","menuType":3,"parentId":147,"permsType":1,"updateUserId":1,"visibleFlag":true,"webPerms":"helpDoc:add"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:49:24', '2022-10-21 20:49:24'), + (602, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:49:25', '2022-10-21 20:49:25'), + (603, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:49:28', '2022-10-21 20:49:28'), + (604, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:49:28', '2022-10-21 20:49:28'), + (605, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:49:28', '2022-10-21 20:49:28'), + (606, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:49:55', '2022-10-21 20:49:55'), + (607, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:49:56', '2022-10-21 20:49:56'), + (608, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:49:56', '2022-10-21 20:49:56'), + (609, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"contextMenuId":147,"disabledFlag":false,"frameFlag":false,"menuId":171,"menuName":"修改目录","menuType":3,"parentId":147,"permsType":1,"updateUserId":1,"visibleFlag":true,"webPerms":"helpDocCatalog:edit"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:50:01', '2022-10-21 20:50:01'), + (610, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:50:02', '2022-10-21 20:50:02'), + (611, 1, 1, '管理员', '系统-菜单', '批量删除菜单 @author 卓大', '/menu/batchDelete', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.batchDeleteMenu', '[[172]]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:50:36', '2022-10-21 20:50:36'), + (612, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 20:50:36', '2022-10-21 20:50:36'), + (613, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 21:02:52', '2022-10-21 21:02:52'), + (614, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 21:02:53', '2022-10-21 21:02:53'), + (615, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 21:02:54', '2022-10-21 21:02:54'), + (616, 1, 1, '管理员', '系统-菜单', '添加菜单 @author 卓大', '/menu/add', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.addMenu', '[{"cacheFlag":false,"createUserId":1,"disabledFlag":false,"frameFlag":false,"menuName":"删除","menuType":3,"parentId":147,"permsType":1,"visibleFlag":true,"webPerms":"helpDoc:delete"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 21:03:20', '2022-10-21 21:03:20'), + (617, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 21:03:21', '2022-10-21 21:03:21'), + (618, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 21:03:21', '2022-10-21 21:03:21'), + (619, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 21:03:21', '2022-10-21 21:03:21'), + (620, 1, 1, '管理员', '系统-菜单', '添加菜单 @author 卓大', '/menu/add', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.addMenu', '[{"cacheFlag":false,"createUserId":1,"disabledFlag":false,"frameFlag":false,"menuName":"更新","menuType":3,"parentId":147,"permsType":1,"visibleFlag":true,"webPerms":"helpDoc:update"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 21:03:32', '2022-10-21 21:03:32'), + (621, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 21:03:33', '2022-10-21 21:03:33'), + (622, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 21:04:57', '2022-10-21 21:04:57'), + (623, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 21:04:58', '2022-10-21 21:04:58'), + (624, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 21:04:59', '2022-10-21 21:04:59'), + (625, 1, 1, '管理员', '系统-菜单', '添加菜单 @author 卓大', '/menu/add', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.addMenu', '[{"cacheFlag":false,"createUserId":1,"disabledFlag":false,"frameFlag":false,"menuName":"查询","menuType":3,"parentId":143,"permsType":1,"visibleFlag":true,"webPerms":"loginLog:query"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 21:05:11', '2022-10-21 21:05:11'), + (626, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 21:05:11', '2022-10-21 21:05:11'), + (627, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 21:05:49', '2022-10-21 21:05:49'), + (628, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 21:05:50', '2022-10-21 21:05:50'), + (629, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 21:05:52', '2022-10-21 21:05:52'), + (630, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 21:06:23', '2022-10-21 21:06:23'), + (631, 1, 1, '管理员', '系统-菜单', '批量删除菜单 @author 卓大', '/menu/batchDelete', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.batchDeleteMenu', '[[82]]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 21:06:32', '2022-10-21 21:06:32'), + (632, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-21 21:06:32', '2022-10-21 21:06:32'), + (633, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:29:21', '2022-10-22 10:29:21'), + (634, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:29:34', '2022-10-22 10:29:34'), + (635, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:29:34', '2022-10-22 10:29:34'), + (636, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:29:34', '2022-10-22 10:29:34'), + (637, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"component":"/support/operate-log/operate-log-list.vue","disabledFlag":false,"frameFlag":false,"icon":"VideoCameraOutlined","menuId":81,"menuName":"请求监控","menuType":2,"parentId":111,"path":"/support/log/operate-log/list","updateUserId":1,"visibleFlag":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:29:40', '2022-10-22 10:29:40'), + (638, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:29:40', '2022-10-22 10:29:40'), + (639, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:29:44', '2022-10-22 10:29:44'), + (640, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:29:45', '2022-10-22 10:29:45'), + (641, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"component":"/support/operate-log/operate-log-list.vue","disabledFlag":false,"frameFlag":false,"icon":"VideoCameraOutlined","menuId":81,"menuName":"请求监控","menuType":2,"parentId":111,"path":"/support/operate-log/operate-log-list","updateUserId":1,"visibleFlag":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:30:05', '2022-10-22 10:30:05'), + (642, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:30:06', '2022-10-22 10:30:06'), + (643, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:30:12', '2022-10-22 10:30:12'), + (644, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:30:12', '2022-10-22 10:30:12'), + (645, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:30:13', '2022-10-22 10:30:13'), + (646, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:33:09', '2022-10-22 10:33:09'), + (647, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:33:12', '2022-10-22 10:33:12'), + (648, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:33:12', '2022-10-22 10:33:12'), + (649, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:33:13', '2022-10-22 10:33:13'), + (650, 1, 1, '管理员', '系统-菜单', '添加菜单 @author 卓大', '/menu/add', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.addMenu', '[{"cacheFlag":false,"createUserId":1,"disabledFlag":false,"frameFlag":false,"menuName":"查询","menuType":3,"parentId":81,"permsType":1,"visibleFlag":true,"webPerms":"operateLog:query"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:33:31', '2022-10-22 10:33:31'), + (651, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:33:31', '2022-10-22 10:33:31'), + (652, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:33:37', '2022-10-22 10:33:37'), + (653, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:33:37', '2022-10-22 10:33:37'), + (654, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:33:38', '2022-10-22 10:33:38'), + (655, 1, 1, '管理员', '系统-菜单', '添加菜单 @author 卓大', '/menu/add', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.addMenu', '[{"cacheFlag":false,"createUserId":1,"disabledFlag":false,"frameFlag":false,"menuName":"详情","menuType":3,"parentId":81,"permsType":1,"visibleFlag":true,"webPerms":"operateLog:detail"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:33:49', '2022-10-22 10:33:49'), + (656, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:33:50', '2022-10-22 10:33:50'), + (657, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:36:17', '2022-10-22 10:36:17'), + (658, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:36:17', '2022-10-22 10:36:17'), + (659, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:36:17', '2022-10-22 10:36:17'), + (660, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:36:17', '2022-10-22 10:36:17'), + (661, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"contextMenuId":130,"disabledFlag":false,"frameFlag":false,"menuId":157,"menuName":"单号生成","menuType":3,"parentId":130,"permsType":1,"updateUserId":1,"visibleFlag":true,"webPerms":"support:serial:number:generate"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:36:34', '2022-10-22 10:36:34'), + (662, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:36:35', '2022-10-22 10:36:35'), + (663, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:36:36', '2022-10-22 10:36:36'), + (664, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:36:36', '2022-10-22 10:36:36'), + (665, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:36:36', '2022-10-22 10:36:36'), + (666, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:36:37', '2022-10-22 10:36:37'), + (667, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"contextMenuId":130,"disabledFlag":false,"frameFlag":false,"menuId":158,"menuName":"生成记录","menuType":3,"parentId":130,"permsType":1,"updateUserId":1,"visibleFlag":true,"webPerms":"support:serial:number:record"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:36:42', '2022-10-22 10:36:42'), + (668, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:36:43', '2022-10-22 10:36:43'), + (669, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:37:31', '2022-10-22 10:37:31'), + (670, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:37:31', '2022-10-22 10:37:31'), + (671, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:37:31', '2022-10-22 10:37:31'), + (672, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:37:31', '2022-10-22 10:37:31'), + (673, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"contextMenuId":117,"disabledFlag":false,"frameFlag":false,"menuId":155,"menuName":"执行","menuType":3,"parentId":117,"permsType":1,"updateUserId":1,"visibleFlag":true,"webPerms":"support:reload:execute"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:37:33', '2022-10-22 10:37:33'), + (674, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:37:33', '2022-10-22 10:37:33'), + (675, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:37:34', '2022-10-22 10:37:34'), + (676, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:37:34', '2022-10-22 10:37:34'), + (677, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:37:35', '2022-10-22 10:37:35'), + (678, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:37:35', '2022-10-22 10:37:35'), + (679, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"contextMenuId":117,"disabledFlag":false,"frameFlag":false,"menuId":156,"menuName":"查看结果","menuType":3,"parentId":117,"permsType":1,"updateUserId":1,"visibleFlag":true,"webPerms":"support:reload:result"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:37:36', '2022-10-22 10:37:36'), + (680, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:37:37', '2022-10-22 10:37:37'), + (681, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:37:38', '2022-10-22 10:37:38'), + (682, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:37:38', '2022-10-22 10:37:38'), + (683, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:37:38', '2022-10-22 10:37:38'), + (684, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:37:38', '2022-10-22 10:37:38'), + (685, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:38:44', '2022-10-22 10:38:44'), + (686, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:38:44', '2022-10-22 10:38:44'), + (687, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:38:44', '2022-10-22 10:38:44'), + (688, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:38:44', '2022-10-22 10:38:44'), + (689, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"contextMenuId":148,"disabledFlag":false,"frameFlag":false,"menuId":189,"menuName":"查询","menuType":3,"parentId":148,"permsType":1,"updateUserId":1,"visibleFlag":true,"webPerms":"feedback:query"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:38:46', '2022-10-22 10:38:46'), + (690, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:38:46', '2022-10-22 10:38:46'), + (691, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:39:21', '2022-10-22 10:39:21'), + (692, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:39:21', '2022-10-22 10:39:21'), + (693, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:39:21', '2022-10-22 10:39:21'), + (694, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:39:22', '2022-10-22 10:39:22'), + (695, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:39:23', '2022-10-22 10:39:23'), + (696, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:39:23', '2022-10-22 10:39:23'), + (697, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:39:23', '2022-10-22 10:39:23'), + (698, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:39:24', '2022-10-22 10:39:24'), + (699, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:39:25', '2022-10-22 10:39:25'), + (700, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:39:25', '2022-10-22 10:39:25'), + (701, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:39:25', '2022-10-22 10:39:25'), + (702, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:39:26', '2022-10-22 10:39:26'), + (703, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:39:31', '2022-10-22 10:39:31'), + (704, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:39:31', '2022-10-22 10:39:31'), + (705, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:39:32', '2022-10-22 10:39:32'), + (706, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:39:32', '2022-10-22 10:39:32'), + (707, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:39:34', '2022-10-22 10:39:34'), + (708, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:39:35', '2022-10-22 10:39:35'), + (709, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:39:35', '2022-10-22 10:39:35'), + (710, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:39:35', '2022-10-22 10:39:35'), + (711, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:39:36', '2022-10-22 10:39:36'), + (712, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:40:45', '2022-10-22 10:40:45'), + (713, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:40:46', '2022-10-22 10:40:46'), + (714, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:40:46', '2022-10-22 10:40:46'), + (715, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:40:46', '2022-10-22 10:40:46'), + (716, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:41:40', '2022-10-22 10:41:40'), + (717, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:42:54', '2022-10-22 10:42:54'), + (718, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:44:24', '2022-10-22 10:44:24'), + (719, 1, 1, '管理员', '系统-角色', '获取所有角色 @author 卓大', '/role/getAll', 'net.lab1024.sa.admin.module.system.role.controller.RoleController.getAllRole', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:45:00', '2022-10-22 10:45:00'), + (720, 1, 1, '管理员', '系统-角色-菜单', '获取角色关联菜单权限 @author 卓大', '/role/menu/getRoleSelectedMenu/1', 'net.lab1024.sa.admin.module.system.role.controller.RoleMenuController.getRoleSelectedMenu', '[1]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:45:00', '2022-10-22 10:45:00'), + (721, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:45:21', '2022-10-22 10:45:21'), + (722, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:45:39', '2022-10-22 10:45:39'), + (723, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:45:41', '2022-10-22 10:45:41'), + (724, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:45:47', '2022-10-22 10:45:47'), + (725, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:45:57', '2022-10-22 10:45:57'), + (726, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:45:57', '2022-10-22 10:45:57'), + (727, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:45:57', '2022-10-22 10:45:57'), + (728, 1, 1, '管理员', '系统-菜单', '添加菜单 @author 卓大', '/menu/add', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.addMenu', '[{"cacheFlag":false,"component":"/support/heart-beat/heart-beat-list.vue","createUserId":1,"disabledFlag":false,"frameFlag":false,"icon":"FallOutlined","menuName":"心跳监控","menuType":2,"parentId":111,"path":"/support/heart-beat/heart-beat-list","permsType":1,"visibleFlag":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:47:03', '2022-10-22 10:47:03'), + (729, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:47:03', '2022-10-22 10:47:03'), + (730, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:47:11', '2022-10-22 10:47:11'), + (731, 1, 1, '管理员', '系统-部门管理', '查询部门列表 @author 卓大', '/department/listAll', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.listAll', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:49:32', '2022-10-22 10:49:32'), + (732, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":1,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:49:32', '2022-10-22 10:49:32'), + (733, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:49:32', '2022-10-22 10:49:32'), + (734, 1, 1, '管理员', '系统-角色', '获取所有角色 @author 卓大', '/role/getAll', 'net.lab1024.sa.admin.module.system.role.controller.RoleController.getAllRole', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:49:36', '2022-10-22 10:49:36'), + (735, 1, 1, '管理员', '系统-部门管理', '查询部门树形列表 @author 卓大', '/department/treeList', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.departmentTree', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:49:36', '2022-10-22 10:49:36'), + (736, 1, 1, '管理员', '系统-角色', '获取所有角色 @author 卓大', '/role/getAll', 'net.lab1024.sa.admin.module.system.role.controller.RoleController.getAllRole', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:54:10', '2022-10-22 10:54:10'), + (737, 1, 1, '管理员', '系统-角色-菜单', '获取角色关联菜单权限 @author 卓大', '/role/menu/getRoleSelectedMenu/1', 'net.lab1024.sa.admin.module.system.role.controller.RoleMenuController.getRoleSelectedMenu', '[1]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:54:10', '2022-10-22 10:54:10'), + (738, 1, 1, '管理员', '系统-角色-菜单', '获取角色关联菜单权限 @author 卓大', '/role/menu/getRoleSelectedMenu/34', 'net.lab1024.sa.admin.module.system.role.controller.RoleMenuController.getRoleSelectedMenu', '[34]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:54:12', '2022-10-22 10:54:12'), + (739, 1, 1, '管理员', '系统-角色-菜单', '获取角色关联菜单权限 @author 卓大', '/role/menu/getRoleSelectedMenu/35', 'net.lab1024.sa.admin.module.system.role.controller.RoleMenuController.getRoleSelectedMenu', '[35]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:54:12', '2022-10-22 10:54:12'), + (740, 1, 1, '管理员', '系统-角色-菜单', '获取角色关联菜单权限 @author 卓大', '/role/menu/getRoleSelectedMenu/1', 'net.lab1024.sa.admin.module.system.role.controller.RoleMenuController.getRoleSelectedMenu', '[1]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:54:13', '2022-10-22 10:54:13'), + (741, 1, 1, '管理员', '系统-角色-菜单', '更新角色权限 @author 卓大', '/role/menu/updateRoleMenu', 'net.lab1024.sa.admin.module.system.role.controller.RoleMenuController.updateRoleMenu', '[{"menuIdList":[45,46,86,87,88,91,92,93,94,95,96,76,97,98,99,100,101,102,103,104,26,40,105,106,108,50,130,157,158,193,200,122,111,143],"roleId":1}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:54:28', '2022-10-22 10:54:28'), + (742, 1, 1, '管理员', '系统-系统-数据范围', '获取当前系统所配置的所有数据范围 @author 罗伊', '/dataScope/list', 'net.lab1024.sa.admin.module.system.datascope.DataScopeController.dataScopeList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:54:30', '2022-10-22 10:54:30'), + (743, 1, 1, '管理员', '系统-角色-数据范围', '获取某角色所设置的数据范围 @author 卓大', '/role/dataScope/getRoleDataScopeList/1', 'net.lab1024.sa.admin.module.system.role.controller.RoleDataScopeController.dataScopeListByRole', '[1]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:54:30', '2022-10-22 10:54:30'), + (744, 1, 1, '管理员', '系统-角色-员工', '查询某个角色下的员工列表 @author 卓大', '/role/employee/queryEmployee', 'net.lab1024.sa.admin.module.system.role.controller.RoleEmployeeController.queryEmployee', '[{"pageNum":1,"pageSize":15,"roleId":"1"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:54:30', '2022-10-22 10:54:30'), + (745, 1, 1, '管理员', '系统-角色-员工', '获取某个角色下的所有员工列表(无分页) @author 卓大', '/role/employee/getAllEmployeeByRoleId/1', 'net.lab1024.sa.admin.module.system.role.controller.RoleEmployeeController.listAllEmployeeRoleId', '[1]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:54:32', '2022-10-22 10:54:32'), + (746, 1, 1, '管理员', '系统-部门管理', '查询部门树形列表 @author 卓大', '/department/treeList', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.departmentTree', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:54:32', '2022-10-22 10:54:32'), + (747, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:54:32', '2022-10-22 10:54:32'), + (748, 1, 1, '管理员', '系统-角色-员工', '角色成员列表中批量添加员工 @author 卓大', '/role/employee/batchAddRoleEmployee', 'net.lab1024.sa.admin.module.system.role.controller.RoleEmployeeController.addEmployeeList', '[{"employeeIdList":[44],"roleId":1}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:54:35', '2022-10-22 10:54:35'), + (749, 1, 1, '管理员', '系统-角色-员工', '查询某个角色下的员工列表 @author 卓大', '/role/employee/queryEmployee', 'net.lab1024.sa.admin.module.system.role.controller.RoleEmployeeController.queryEmployee', '[{"pageNum":1,"pageSize":15,"roleId":"1"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:54:35', '2022-10-22 10:54:35'), + (750, 44, 1, '卓大', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 10:54:55', '2022-10-22 10:54:55'), + (751, 44, 1, '卓大', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 10:54:57', '2022-10-22 10:54:57'), + (752, 44, 1, '卓大', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 10:55:11', '2022-10-22 10:55:11'), + (753, 44, 1, '卓大', '系统-部门管理', '查询部门列表 @author 卓大', '/department/listAll', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.listAll', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 10:55:21', '2022-10-22 10:55:21'), + (754, 44, 1, '卓大', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 10:55:21', '2022-10-22 10:55:21'), + (755, 44, 1, '卓大', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":1,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 10:55:21', '2022-10-22 10:55:21'), + (756, 44, 1, '卓大', '系统-部门管理', '查询部门列表 @author 卓大', '/department/listAll', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.listAll', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 10:56:36', '2022-10-22 10:56:36'), + (757, 44, 1, '卓大', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 10:56:36', '2022-10-22 10:56:36'), + (758, 44, 1, '卓大', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":1,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 10:56:36', '2022-10-22 10:56:36'), + (759, 44, 1, '卓大', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 10:56:42', '2022-10-22 10:56:42'), + (760, 44, 1, '卓大', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 10:56:48', '2022-10-22 10:56:48'), + (761, 1, 1, '管理员', '系统-角色', '获取所有角色 @author 卓大', '/role/getAll', 'net.lab1024.sa.admin.module.system.role.controller.RoleController.getAllRole', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:57:15', '2022-10-22 10:57:15'), + (762, 1, 1, '管理员', '系统-角色-菜单', '获取角色关联菜单权限 @author 卓大', '/role/menu/getRoleSelectedMenu/1', 'net.lab1024.sa.admin.module.system.role.controller.RoleMenuController.getRoleSelectedMenu', '[1]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 10:57:16', '2022-10-22 10:57:16'), + (763, 44, 1, '卓大', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 10:57:16', '2022-10-22 10:57:16'), + (764, 44, 1, '卓大', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 10:58:43', '2022-10-22 10:58:43'), + (765, 1, 1, '管理员', '系统-角色', '获取所有角色 @author 卓大', '/role/getAll', 'net.lab1024.sa.admin.module.system.role.controller.RoleController.getAllRole', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 11:03:05', '2022-10-22 11:03:05'), + (766, 44, 1, '卓大', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:03:06', '2022-10-22 11:03:06'), + (767, 1, 1, '管理员', '系统-角色-菜单', '获取角色关联菜单权限 @author 卓大', '/role/menu/getRoleSelectedMenu/1', 'net.lab1024.sa.admin.module.system.role.controller.RoleMenuController.getRoleSelectedMenu', '[1]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 11:03:06', '2022-10-22 11:03:06'), + (768, 44, 1, '卓大', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:03:10', '2022-10-22 11:03:10'), + (769, 44, 1, '卓大', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:03:10', '2022-10-22 11:03:10'), + (770, 44, 1, '卓大', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:03:10', '2022-10-22 11:03:10'), + (771, 44, 1, '卓大', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:03:20', '2022-10-22 11:03:20'), + (772, 44, 1, '卓大', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:03:20', '2022-10-22 11:03:20'), + (773, 44, 1, '卓大', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:07:41', '2022-10-22 11:07:41'), + (774, 44, 1, '卓大', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:16:18', '2022-10-22 11:16:18'), + (775, 44, 1, '卓大', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:16:20', '2022-10-22 11:16:20'), + (776, 44, 1, '卓大', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:16:20', '2022-10-22 11:16:20'), + (777, 44, 1, '卓大', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:16:20', '2022-10-22 11:16:20'), + (778, 44, 1, '卓大', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"disabledFlag":false,"frameFlag":false,"icon":"UserSwitchOutlined","menuId":45,"menuName":"部门员工","menuType":1,"parentId":0,"path":"/organization","sort":100,"updateUserId":44,"visibleFlag":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:19:50', '2022-10-22 11:19:50'), + (779, 44, 1, '卓大', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:19:50', '2022-10-22 11:19:50'), + (780, 44, 1, '卓大', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:20:07', '2022-10-22 11:20:07'), + (781, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 11:20:57', '2022-10-22 11:20:57'), + (782, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 11:21:07', '2022-10-22 11:21:07'), + (783, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 11:21:07', '2022-10-22 11:21:07'), + (784, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 11:21:07', '2022-10-22 11:21:07'), + (785, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 11:21:07', '2022-10-22 11:21:07'), + (786, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 11:21:08', '2022-10-22 11:21:08'), + (787, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"disabledFlag":false,"frameFlag":false,"menuId":200,"menuName":"查询","menuType":3,"parentId":193,"permsType":1,"updateUserId":1,"visibleFlag":true,"webPerms":"support:file:query"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 11:21:10', '2022-10-22 11:21:10'), + (788, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 11:21:10', '2022-10-22 11:21:10'), + (789, 44, 1, '卓大', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:21:43', '2022-10-22 11:21:43'), + (790, 44, 1, '卓大', '系统-部门管理', '查询部门列表 @author 卓大', '/department/listAll', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.listAll', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:21:44', '2022-10-22 11:21:44'), + (791, 44, 1, '卓大', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:21:45', '2022-10-22 11:21:45'), + (792, 44, 1, '卓大', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":1,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:21:45', '2022-10-22 11:21:45'), + (793, 44, 1, '卓大', '系统-角色', '获取所有角色 @author 卓大', '/role/getAll', 'net.lab1024.sa.admin.module.system.role.controller.RoleController.getAllRole', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:21:45', '2022-10-22 11:21:45'), + (794, 44, 1, '卓大', '系统-角色-菜单', '获取角色关联菜单权限 @author 卓大', '/role/menu/getRoleSelectedMenu/1', 'net.lab1024.sa.admin.module.system.role.controller.RoleMenuController.getRoleSelectedMenu', '[1]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:21:45', '2022-10-22 11:21:45'), + (795, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 11:27:51', '2022-10-22 11:27:51'), + (796, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 11:27:51', '2022-10-22 11:27:51'), + (797, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"component":"/support/code-generator/code-generator-list.vue","disabledFlag":false,"frameFlag":false,"icon":"CoffeeOutlined","menuId":151,"menuName":"代码生成","menuType":2,"parentId":0,"path":"/support/code-generator","sort":600,"updateUserId":1,"visibleFlag":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 11:27:58', '2022-10-22 11:27:58'), + (798, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 11:27:58', '2022-10-22 11:27:58'), + (799, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 11:27:58', '2022-10-22 11:27:58'), + (800, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 11:28:05', '2022-10-22 11:28:05'), + (801, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 11:28:05', '2022-10-22 11:28:05'), + (802, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 11:28:08', '2022-10-22 11:28:08'), + (803, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 11:29:25', '2022-10-22 11:29:25'), + (804, 1, 1, '管理员', '系统-菜单', '添加菜单 @author 卓大', '/menu/add', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.addMenu', '[{"cacheFlag":false,"createUserId":1,"disabledFlag":false,"frameFlag":false,"menuName":"更新","menuType":3,"parentId":152,"permsType":1,"visibleFlag":true,"webPerms":"changeLog:update"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 11:51:32', '2022-10-22 11:51:32'), + (805, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 11:51:32', '2022-10-22 11:51:32'), + (806, 44, 1, '卓大', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:56:11', '2022-10-22 11:56:11'), + (807, 44, 1, '卓大', '系统-部门管理', '查询部门列表 @author 卓大', '/department/listAll', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.listAll', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:56:14', '2022-10-22 11:56:14'), + (808, 44, 1, '卓大', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:56:14', '2022-10-22 11:56:14'), + (809, 44, 1, '卓大', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":1,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:56:14', '2022-10-22 11:56:14'), + (810, 44, 1, '卓大', '系统-角色', '获取所有角色 @author 卓大', '/role/getAll', 'net.lab1024.sa.admin.module.system.role.controller.RoleController.getAllRole', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:56:16', '2022-10-22 11:56:16'), + (811, 44, 1, '卓大', '系统-角色-菜单', '获取角色关联菜单权限 @author 卓大', '/role/menu/getRoleSelectedMenu/1', 'net.lab1024.sa.admin.module.system.role.controller.RoleMenuController.getRoleSelectedMenu', '[1]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:56:16', '2022-10-22 11:56:16'), + (812, 44, 1, '卓大', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:56:17', '2022-10-22 11:56:17'), + (813, 44, 1, '卓大', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:56:18', '2022-10-22 11:56:18'), + (814, 44, 1, '卓大', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:56:18', '2022-10-22 11:56:18'), + (815, 44, 1, '卓大', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:56:18', '2022-10-22 11:56:18'), + (816, 44, 1, '卓大', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"disabledFlag":false,"frameFlag":false,"icon":"UserSwitchOutlined","menuId":45,"menuName":"部门员工","menuType":1,"parentId":0,"path":"/organization","sort":100,"updateUserId":44,"visibleFlag":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:56:19', '2022-10-22 11:56:19'), + (817, 44, 1, '卓大', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 11:56:20', '2022-10-22 11:56:20'), + (818, 1, 1, '管理员', '系统-部门管理', '查询部门树形列表 @author 卓大', '/department/treeList', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.departmentTree', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 14:42:06', '2022-10-22 14:42:06'), + (819, 44, 1, '卓大', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 14:56:22', '2022-10-22 14:56:22'), + (820, 44, 1, '卓大', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 14:56:25', '2022-10-22 14:56:25'), + (821, 44, 1, '卓大', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 14:56:26', '2022-10-22 14:56:26'), + (822, 44, 1, '卓大', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 14:56:26', '2022-10-22 14:56:26'), + (823, 44, 1, '卓大', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 14:56:30', '2022-10-22 14:56:30'), + (824, 44, 1, '卓大', 'OA办公-企业', '新建企业 @author 开云', '/oa/enterprise/create', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.createEnterprise', '[{"address":"1024大楼","city":410300,"cityName":"洛阳市","contact":"卓大","contactPhone":"18637925892","createUserId":44,"createUserName":"卓大","disabledFlag":false,"district":410311,"districtName":"洛龙区","email":"lab1024@163.com","enterpriseLogo":"public/common/fb827d63dda74a60ab8b4f70cc7c7d0a_20221022145641_jpg","enterpriseName":"1024创新实验室","province":410000,"provinceName":"河南省","type":1,"unifiedSocialCreditCode":"1024lab"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 14:57:36', '2022-10-22 14:57:36'), + (825, 44, 1, '卓大', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47', 1, NULL, '2022-10-22 14:57:37', '2022-10-22 14:57:37'), + (826, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:00:49', '2022-10-22 17:00:49'), + (827, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:02:36', '2022-10-22 17:02:36'), + (828, 1, 1, '管理员', 'OA办公-企业', '新建企业 @author 开云', '/oa/enterprise/create', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.createEnterprise', '[{"address":"区块链大楼","businessLicense":"public/common/852b7e19bef94af39c1a6156edf47cfb_20221022170332_jpg","city":410300,"cityName":"洛阳市","contact":"开云","contactPhone":"18637925892","createUserId":1,"createUserName":"管理员","disabledFlag":false,"district":410311,"districtName":"洛龙区","enterpriseLogo":"public/common/f4a76fa720814949a610f05f6f9545bf_20221022170256_jpg","enterpriseName":"1024创新区块链实验室","province":410000,"provinceName":"河南省","type":1,"unifiedSocialCreditCode":"1024lab_block"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:03:35', '2022-10-22 17:03:35'), + (829, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:03:35', '2022-10-22 17:03:35'), + (830, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:04:03', '2022-10-22 17:04:03'), + (831, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:04:19', '2022-10-22 17:04:19'), + (832, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/2', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[2]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:04:24', '2022-10-22 17:04:24'), + (833, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:04:24', '2022-10-22 17:04:24'), + (834, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:04:43', '2022-10-22 17:04:43'), + (835, 1, 1, '管理员', 'OA办公-企业', '企业查询员工 @author 罗伊', '/oa/enterprise/employee/list', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.employeeList', '[[2]]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:04:56', '2022-10-22 17:04:56'), + (836, 1, 1, '管理员', '系统-部门管理', '查询部门树形列表 @author 卓大', '/department/treeList', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.departmentTree', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:04:56', '2022-10-22 17:04:56'), + (837, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:04:56', '2022-10-22 17:04:56'), + (838, 1, 1, '管理员', 'OA办公-企业', '企业查询员工 @author 罗伊', '/oa/enterprise/employee/list', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.employeeList', '[[2]]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:07:25', '2022-10-22 17:07:25'), + (839, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:07:26', '2022-10-22 17:07:26'), + (840, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:07:32', '2022-10-22 17:07:32'), + (841, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:11:13', '2022-10-22 17:11:13'), + (842, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:11:13', '2022-10-22 17:11:13'), + (843, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/2', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[2]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:53:33', '2022-10-22 17:53:33'), + (844, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:53:33', '2022-10-22 17:53:33'), + (845, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/2', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[2]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:53:35', '2022-10-22 17:53:35'), + (846, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:53:35', '2022-10-22 17:53:35'), + (847, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/2', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[2]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:53:37', '2022-10-22 17:53:37'), + (848, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:53:37', '2022-10-22 17:53:37'), + (849, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/2', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[2]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:53:56', '2022-10-22 17:53:56'), + (850, 1, 1, '管理员', 'OA办公-企业', '分页查询企业员工 @author 卓大', '/oa/enterprise/employee/queryPage', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryPageEmployeeList', '[{"enterpriseId":2,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 0, 'org.springframework.jdbc.BadSqlGrammarException: \r\n### Error querying database. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'from t_oa_enterprise_employee\n left join t_oa_enterprise on t_oa_enterpr\' at line 6\r\n### The error may exist in file [E:\\code\\transport-projects\\yuxin-tms\\1024lab-tms-service\\sa-admin\\target\\classes\\mapper\\business\\oa\\enterprise\\EnterpriseEmployeeMapper.xml]\r\n### The error may involve defaultParameterMap\r\n### The error occurred while setting parameters\r\n### SQL: SELECT COUNT(*) FROM (select t_oa_enterprise_employee.*, t_oa_enterprise.enterprise_name, t_employee.*, t_employee.actual_name as employeeName, from t_oa_enterprise_employee left join t_oa_enterprise on t_oa_enterprise_employee.enterprise_id = t_oa_enterprise.enterprise_id left join t_employee on t_oa_enterprise_employee.employee_id = t_employee.employee_id where t_oa_enterprise_employee.enterprise_id = ?) TOTAL\r\n### Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'from t_oa_enterprise_employee\n left join t_oa_enterprise on t_oa_enterpr\' at line 6\n; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'from t_oa_enterprise_employee\n left join t_oa_enterprise on t_oa_enterpr\' at line 6\r\n at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239)\r\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)\r\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:88)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)\r\n at com.sun.proxy.$Proxy114.selectList(Unknown Source)\r\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:223)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:173)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:78)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\r\n at com.sun.proxy.$Proxy171.queryPageEmployeeList(Unknown Source)\r\n at net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseService.queryPageEmployeeList(EnterpriseService.java:246)\r\n at net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseService$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at com.alibaba.druid.support.spring.stat.DruidStatInterceptor.invoke(DruidStatInterceptor.java:73)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseService$$EnhancerBySpringCGLIB$$1.queryPageEmployeeList()\r\n at net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryPageEmployeeList(EnterpriseController.java:105)\r\n at net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:64)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:57)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:61)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController$$EnhancerBySpringCGLIB$$1.queryPageEmployeeList()\r\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1063)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:84)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at net.lab1024.sa.common.common.security.SecurityTokenFilter.doFilterInternal(SecurityTokenFilter.java:62)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\r\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\r\n at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:97)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:41002)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\r\n at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1723)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\r\n at java.lang.Thread.run(Thread.java:748)\r\nCaused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'from t_oa_enterprise_employee\n left join t_oa_enterprise on t_oa_enterpr\' at line 6\r\n at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)\r\n at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)\r\n at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)\r\n at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:370)\r\n at com.p6spy.engine.wrapper.PreparedStatementWrapper.execute(PreparedStatementWrapper.java:362)\r\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3461)\r\n at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)\r\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)\r\n at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)\r\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)\r\n at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167)\r\n at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497)\r\n at sun.reflect.GeneratedMethodAccessor258.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)\r\n at com.sun.proxy.$Proxy159.execute(Unknown Source)\r\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64)\r\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)\r\n at sun.reflect.GeneratedMethodAccessor268.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63)\r\n at com.sun.proxy.$Proxy157.query(Unknown Source)\r\n at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.doQuery(MybatisSimpleExecutor.java:69)\r\n at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)\r\n at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)\r\n at com.baomidou.mybatisplus.core.executor.MybatisCachingExecutor.query(MybatisCachingExecutor.java:165)\r\n at com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor.willDoQuery(PaginationInnerInterceptor.java:134)\r\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:59)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)\r\n at com.sun.proxy.$Proxy155.query(Unknown Source)\r\n at sun.reflect.GeneratedMethodAccessor255.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49)\r\n at net.lab1024.sa.admin.module.system.datascope.MyBatisPlugin.intercept(MyBatisPlugin.java:64)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)\r\n at com.sun.proxy.$Proxy155.query(Unknown Source)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)\r\n at sun.reflect.GeneratedMethodAccessor281.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426)\r\n ... 137 more\r\n', '2022-10-22 17:54:08', '2022-10-22 17:54:08'), + (851, 1, 1, '管理员', 'OA办公-企业', '分页查询企业员工 @author 卓大', '/oa/enterprise/employee/queryPage', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryPageEmployeeList', '[{"enterpriseId":2,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 0, 'org.springframework.jdbc.BadSqlGrammarException: \r\n### Error querying database. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'from t_oa_enterprise_employee\n left join t_oa_enterprise on t_oa_enterpr\' at line 6\r\n### The error may exist in file [E:\\code\\transport-projects\\yuxin-tms\\1024lab-tms-service\\sa-admin\\target\\classes\\mapper\\business\\oa\\enterprise\\EnterpriseEmployeeMapper.xml]\r\n### The error may involve defaultParameterMap\r\n### The error occurred while setting parameters\r\n### SQL: SELECT COUNT(*) FROM (select t_oa_enterprise_employee.*, t_oa_enterprise.enterprise_name, t_employee.*, t_employee.actual_name as employeeName, from t_oa_enterprise_employee left join t_oa_enterprise on t_oa_enterprise_employee.enterprise_id = t_oa_enterprise.enterprise_id left join t_employee on t_oa_enterprise_employee.employee_id = t_employee.employee_id where t_oa_enterprise_employee.enterprise_id = ?) TOTAL\r\n### Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'from t_oa_enterprise_employee\n left join t_oa_enterprise on t_oa_enterpr\' at line 6\n; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'from t_oa_enterprise_employee\n left join t_oa_enterprise on t_oa_enterpr\' at line 6\r\n at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239)\r\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)\r\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:88)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)\r\n at com.sun.proxy.$Proxy114.selectList(Unknown Source)\r\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:223)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:173)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:78)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\r\n at com.sun.proxy.$Proxy171.queryPageEmployeeList(Unknown Source)\r\n at net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseService.queryPageEmployeeList(EnterpriseService.java:246)\r\n at net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseService$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at com.alibaba.druid.support.spring.stat.DruidStatInterceptor.invoke(DruidStatInterceptor.java:73)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseService$$EnhancerBySpringCGLIB$$1.queryPageEmployeeList()\r\n at net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryPageEmployeeList(EnterpriseController.java:105)\r\n at net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:64)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:57)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:61)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController$$EnhancerBySpringCGLIB$$1.queryPageEmployeeList()\r\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1063)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:84)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at net.lab1024.sa.common.common.security.SecurityTokenFilter.doFilterInternal(SecurityTokenFilter.java:62)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\r\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\r\n at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:97)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:41002)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\r\n at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1723)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\r\n at java.lang.Thread.run(Thread.java:748)\r\nCaused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'from t_oa_enterprise_employee\n left join t_oa_enterprise on t_oa_enterpr\' at line 6\r\n at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)\r\n at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)\r\n at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)\r\n at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:370)\r\n at com.p6spy.engine.wrapper.PreparedStatementWrapper.execute(PreparedStatementWrapper.java:362)\r\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3461)\r\n at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)\r\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)\r\n at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)\r\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)\r\n at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167)\r\n at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497)\r\n at sun.reflect.GeneratedMethodAccessor258.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)\r\n at com.sun.proxy.$Proxy159.execute(Unknown Source)\r\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64)\r\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)\r\n at sun.reflect.GeneratedMethodAccessor268.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63)\r\n at com.sun.proxy.$Proxy157.query(Unknown Source)\r\n at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.doQuery(MybatisSimpleExecutor.java:69)\r\n at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)\r\n at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)\r\n at com.baomidou.mybatisplus.core.executor.MybatisCachingExecutor.query(MybatisCachingExecutor.java:165)\r\n at com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor.willDoQuery(PaginationInnerInterceptor.java:134)\r\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:59)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)\r\n at com.sun.proxy.$Proxy155.query(Unknown Source)\r\n at sun.reflect.GeneratedMethodAccessor255.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49)\r\n at net.lab1024.sa.admin.module.system.datascope.MyBatisPlugin.intercept(MyBatisPlugin.java:64)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)\r\n at com.sun.proxy.$Proxy155.query(Unknown Source)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)\r\n at sun.reflect.GeneratedMethodAccessor281.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426)\r\n ... 137 more\r\n', '2022-10-22 17:54:09', '2022-10-22 17:54:09'), + (852, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/2', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[2]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:54:16', '2022-10-22 17:54:16'), + (853, 1, 1, '管理员', 'OA办公-企业', '分页查询企业员工 @author 卓大', '/oa/enterprise/employee/queryPage', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryPageEmployeeList', '[{"enterpriseId":2,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 0, 'org.springframework.jdbc.BadSqlGrammarException: \r\n### Error querying database. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'from t_oa_enterprise_employee\n left join t_oa_enterprise on t_oa_enterpr\' at line 6\r\n### The error may exist in file [E:\\code\\transport-projects\\yuxin-tms\\1024lab-tms-service\\sa-admin\\target\\classes\\mapper\\business\\oa\\enterprise\\EnterpriseEmployeeMapper.xml]\r\n### The error may involve defaultParameterMap\r\n### The error occurred while setting parameters\r\n### SQL: SELECT COUNT(*) FROM (select t_oa_enterprise_employee.*, t_oa_enterprise.enterprise_name, t_employee.*, t_employee.actual_name as employeeName, from t_oa_enterprise_employee left join t_oa_enterprise on t_oa_enterprise_employee.enterprise_id = t_oa_enterprise.enterprise_id left join t_employee on t_oa_enterprise_employee.employee_id = t_employee.employee_id where t_oa_enterprise_employee.enterprise_id = ?) TOTAL\r\n### Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'from t_oa_enterprise_employee\n left join t_oa_enterprise on t_oa_enterpr\' at line 6\n; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'from t_oa_enterprise_employee\n left join t_oa_enterprise on t_oa_enterpr\' at line 6\r\n at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239)\r\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)\r\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:88)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)\r\n at com.sun.proxy.$Proxy114.selectList(Unknown Source)\r\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:223)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:173)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:78)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\r\n at com.sun.proxy.$Proxy171.queryPageEmployeeList(Unknown Source)\r\n at net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseService.queryPageEmployeeList(EnterpriseService.java:246)\r\n at net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseService$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at com.alibaba.druid.support.spring.stat.DruidStatInterceptor.invoke(DruidStatInterceptor.java:73)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseService$$EnhancerBySpringCGLIB$$1.queryPageEmployeeList()\r\n at net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryPageEmployeeList(EnterpriseController.java:105)\r\n at net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:64)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:57)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:61)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController$$EnhancerBySpringCGLIB$$1.queryPageEmployeeList()\r\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1063)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:84)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at net.lab1024.sa.common.common.security.SecurityTokenFilter.doFilterInternal(SecurityTokenFilter.java:62)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\r\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\r\n at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:97)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:41002)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\r\n at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1723)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\r\n at java.lang.Thread.run(Thread.java:748)\r\nCaused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'from t_oa_enterprise_employee\n left join t_oa_enterprise on t_oa_enterpr\' at line 6\r\n at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)\r\n at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)\r\n at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)\r\n at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:370)\r\n at com.p6spy.engine.wrapper.PreparedStatementWrapper.execute(PreparedStatementWrapper.java:362)\r\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3461)\r\n at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)\r\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)\r\n at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)\r\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)\r\n at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167)\r\n at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497)\r\n at sun.reflect.GeneratedMethodAccessor258.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)\r\n at com.sun.proxy.$Proxy159.execute(Unknown Source)\r\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64)\r\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)\r\n at sun.reflect.GeneratedMethodAccessor268.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63)\r\n at com.sun.proxy.$Proxy157.query(Unknown Source)\r\n at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.doQuery(MybatisSimpleExecutor.java:69)\r\n at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)\r\n at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)\r\n at com.baomidou.mybatisplus.core.executor.MybatisCachingExecutor.query(MybatisCachingExecutor.java:165)\r\n at com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor.willDoQuery(PaginationInnerInterceptor.java:134)\r\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:59)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)\r\n at com.sun.proxy.$Proxy155.query(Unknown Source)\r\n at sun.reflect.GeneratedMethodAccessor255.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49)\r\n at net.lab1024.sa.admin.module.system.datascope.MyBatisPlugin.intercept(MyBatisPlugin.java:64)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)\r\n at com.sun.proxy.$Proxy155.query(Unknown Source)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)\r\n at sun.reflect.GeneratedMethodAccessor281.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426)\r\n ... 137 more\r\n', '2022-10-22 17:54:16', '2022-10-22 17:54:16'), + (854, 1, 1, '管理员', 'OA办公-企业', '分页查询企业员工 @author 卓大', '/oa/enterprise/employee/queryPage', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryPageEmployeeList', '[{"enterpriseId":2,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:55:15', '2022-10-22 17:55:15'), + (855, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/2', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[2]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:55:15', '2022-10-22 17:55:15'), + (856, 1, 1, '管理员', 'OA办公-企业', '查询企业全部员工 @author 罗伊', '/oa/enterprise/employee/list', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.employeeList', '[[2]]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 0, 'org.springframework.jdbc.BadSqlGrammarException: \r\n### Error querying database. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'from t_oa_enterprise_employee\n left join t_oa_enterprise on t_oa_enterpr\' at line 6\r\n### The error may exist in file [E:\\code\\transport-projects\\yuxin-tms\\1024lab-tms-service\\sa-admin\\target\\classes\\mapper\\business\\oa\\enterprise\\EnterpriseEmployeeMapper.xml]\r\n### The error may involve defaultParameterMap\r\n### The error occurred while setting parameters\r\n### SQL: select t_oa_enterprise_employee.*, t_oa_enterprise.enterprise_name, t_employee.*, t_employee.actual_name as employeeName, from t_oa_enterprise_employee left join t_oa_enterprise on t_oa_enterprise_employee.enterprise_id = t_oa_enterprise.enterprise_id left join t_employee on t_oa_enterprise_employee.employee_id = t_employee.employee_id where t_oa_enterprise_employee.enterprise_id in ( ? )\r\n### Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'from t_oa_enterprise_employee\n left join t_oa_enterprise on t_oa_enterpr\' at line 6\n; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'from t_oa_enterprise_employee\n left join t_oa_enterprise on t_oa_enterpr\' at line 6\r\n at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239)\r\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)\r\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:88)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)\r\n at com.sun.proxy.$Proxy114.selectList(Unknown Source)\r\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:223)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:173)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:78)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\r\n at com.sun.proxy.$Proxy171.selectByEnterpriseIdList(Unknown Source)\r\n at net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseService.employeeList(EnterpriseService.java:234)\r\n at net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseService$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at com.alibaba.druid.support.spring.stat.DruidStatInterceptor.invoke(DruidStatInterceptor.java:73)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseService$$EnhancerBySpringCGLIB$$1.employeeList()\r\n at net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.employeeList(EnterpriseController.java:98)\r\n at net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController$$FastClassBySpringCGLIB$$1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:64)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:57)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:61)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\r\n at net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController$$EnhancerBySpringCGLIB$$1.employeeList()\r\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1063)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:84)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at net.lab1024.sa.common.common.security.SecurityTokenFilter.doFilterInternal(SecurityTokenFilter.java:62)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\r\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\r\n at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:97)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:41002)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\r\n at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1723)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\r\n at java.lang.Thread.run(Thread.java:748)\r\nCaused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'from t_oa_enterprise_employee\n left join t_oa_enterprise on t_oa_enterpr\' at line 6\r\n at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)\r\n at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)\r\n at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)\r\n at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:370)\r\n at com.p6spy.engine.wrapper.PreparedStatementWrapper.execute(PreparedStatementWrapper.java:362)\r\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3461)\r\n at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)\r\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)\r\n at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)\r\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)\r\n at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167)\r\n at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497)\r\n at sun.reflect.GeneratedMethodAccessor258.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)\r\n at com.sun.proxy.$Proxy159.execute(Unknown Source)\r\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64)\r\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)\r\n at sun.reflect.GeneratedMethodAccessor268.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63)\r\n at com.sun.proxy.$Proxy157.query(Unknown Source)\r\n at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.doQuery(MybatisSimpleExecutor.java:69)\r\n at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)\r\n at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)\r\n at com.baomidou.mybatisplus.core.executor.MybatisCachingExecutor.query(MybatisCachingExecutor.java:165)\r\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:65)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)\r\n at com.sun.proxy.$Proxy155.query(Unknown Source)\r\n at sun.reflect.GeneratedMethodAccessor255.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49)\r\n at net.lab1024.sa.admin.module.system.datascope.MyBatisPlugin.intercept(MyBatisPlugin.java:64)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)\r\n at com.sun.proxy.$Proxy155.query(Unknown Source)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)\r\n at sun.reflect.GeneratedMethodAccessor281.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426)\r\n ... 137 more\r\n', '2022-10-22 17:55:17', '2022-10-22 17:55:17'), + (857, 1, 1, '管理员', 'OA办公-企业', '分页查询企业员工 @author 卓大', '/oa/enterprise/employee/queryPage', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryPageEmployeeList', '[{"enterpriseId":2,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:56:13', '2022-10-22 17:56:13'), + (858, 1, 1, '管理员', 'OA办公-企业', '查询企业全部员工 @author 罗伊', '/oa/enterprise/employee/list', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.employeeList', '[[2]]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:56:14', '2022-10-22 17:56:14'), + (859, 1, 1, '管理员', '系统-部门管理', '查询部门树形列表 @author 卓大', '/department/treeList', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.departmentTree', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:56:14', '2022-10-22 17:56:14'), + (860, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:56:14', '2022-10-22 17:56:14'), + (861, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/2', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[2]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:57:40', '2022-10-22 17:57:40'), + (862, 1, 1, '管理员', 'OA办公-企业', '分页查询企业员工 @author 卓大', '/oa/enterprise/employee/queryPage', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryPageEmployeeList', '[{"enterpriseId":2,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:57:40', '2022-10-22 17:57:40'), + (863, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/2', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[2]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:57:40', '2022-10-22 17:57:40'), + (864, 1, 1, '管理员', 'OA办公-企业', '分页查询企业员工 @author 卓大', '/oa/enterprise/employee/queryPage', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryPageEmployeeList', '[{"enterpriseId":2,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:57:40', '2022-10-22 17:57:40'), + (865, 1, 1, '管理员', 'OA办公-企业', '分页查询企业员工 @author 卓大', '/oa/enterprise/employee/queryPage', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryPageEmployeeList', '[{"enterpriseId":2,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:57:45', '2022-10-22 17:57:45'), + (866, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/2', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[2]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:57:45', '2022-10-22 17:57:45'), + (867, 1, 1, '管理员', 'OA办公-企业', '查询企业全部员工 @author 罗伊', '/oa/enterprise/employee/list', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.employeeList', '[[2]]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:57:45', '2022-10-22 17:57:45'), + (868, 1, 1, '管理员', '系统-部门管理', '查询部门树形列表 @author 卓大', '/department/treeList', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.departmentTree', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:57:46', '2022-10-22 17:57:46'), + (869, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:57:46', '2022-10-22 17:57:46'), + (870, 1, 1, '管理员', 'OA办公-企业', '企业添加员工 @author 罗伊', '/oa/enterprise/employee/add', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.addEmployee', '[{"employeeIdList":[2,44,47],"enterpriseId":2}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:57:50', '2022-10-22 17:57:50'), + (871, 1, 1, '管理员', 'OA办公-企业', '分页查询企业员工 @author 卓大', '/oa/enterprise/employee/queryPage', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryPageEmployeeList', '[{"enterpriseId":2,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:57:50', '2022-10-22 17:57:50'), + (872, 1, 1, '管理员', 'OA办公-企业', '企业删除员工 @author 罗伊', '/oa/enterprise/employee/delete', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.deleteEmployee', '[{"employeeIdList":[47],"enterpriseId":2}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:57:55', '2022-10-22 17:57:55'), + (873, 1, 1, '管理员', 'OA办公-企业', '分页查询企业员工 @author 卓大', '/oa/enterprise/employee/queryPage', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryPageEmployeeList', '[{"enterpriseId":2,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:57:55', '2022-10-22 17:57:55'), + (874, 1, 1, '管理员', 'OA办公-发票信息', '分页查询发票信息 @author 善逸', '/oa/invoice/page/query', 'net.lab1024.sa.admin.module.business.oa.invoice.InvoiceController.queryByPage', '[{"deletedFlag":false,"enterpriseId":2,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:59:21', '2022-10-22 17:59:21'), + (875, 1, 1, '管理员', 'OA办公-发票信息', '新建发票信息 @author 善逸', '/oa/invoice/create', 'net.lab1024.sa.admin.module.business.oa.invoice.InvoiceController.createInvoice', '[{"accountNumber":"1024lab","bankName":"中国银行","createUserId":1,"createUserName":"管理员","disabledFlag":false,"enterpriseId":2,"invoiceHeads":"1024创新实验室","remark":"","taxpayerIdentificationNumber":"1024lab"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:59:35', '2022-10-22 17:59:35'), + (876, 1, 1, '管理员', 'OA办公-发票信息', '分页查询发票信息 @author 善逸', '/oa/invoice/page/query', 'net.lab1024.sa.admin.module.business.oa.invoice.InvoiceController.queryByPage', '[{"deletedFlag":false,"enterpriseId":2,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:59:35', '2022-10-22 17:59:35'), + (877, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/2', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[2]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:59:42', '2022-10-22 17:59:42'), + (878, 1, 1, '管理员', 'OA办公-企业', '编辑企业 @author 开云', '/oa/enterprise/update', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.updateEnterprise', '[{"address":"1024大楼","city":410300,"cityName":"洛阳市","contact":"卓大","contactPhone":"18637925892","createUserId":44,"createUserName":"卓大","disabledFlag":false,"district":410311,"districtName":"洛龙区","email":"lab1024@163.com","enterpriseId":2,"enterpriseLogo":"public/common/fb827d63dda74a60ab8b4f70cc7c7d0a_20221022145641_jpg","enterpriseName":"1024创新实验室1","province":410000,"provinceName":"河南省","type":1,"unifiedSocialCreditCode":"1024lab"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:59:49', '2022-10-22 17:59:49'), + (879, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/2', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[2]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:59:49', '2022-10-22 17:59:49'), + (880, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/2', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[2]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:59:50', '2022-10-22 17:59:50'), + (881, 1, 1, '管理员', 'OA办公-企业', '编辑企业 @author 开云', '/oa/enterprise/update', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.updateEnterprise', '[{"address":"1024大楼","city":410300,"cityName":"洛阳市","contact":"卓大","contactPhone":"18637925892","createUserId":44,"createUserName":"卓大","disabledFlag":false,"district":410311,"districtName":"洛龙区","email":"lab1024@163.com","enterpriseId":2,"enterpriseLogo":"public/common/fb827d63dda74a60ab8b4f70cc7c7d0a_20221022145641_jpg","enterpriseName":"1024创新实验室","province":410000,"provinceName":"河南省","type":1,"unifiedSocialCreditCode":"1024lab"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:59:52', '2022-10-22 17:59:52'), + (882, 1, 1, '管理员', 'OA办公-企业', '查询企业详情 @author 开云', '/oa/enterprise/get/2', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.getDetail', '[2]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 17:59:52', '2022-10-22 17:59:52'), + (883, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:00:07', '2022-10-22 18:00:07'), + (884, 1, 1, '管理员', '系统-部门管理', '查询部门树形列表 @author 卓大', '/department/treeList', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.departmentTree', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:00:19', '2022-10-22 18:00:19'), + (885, 1, 1, '管理员', '系统-部门管理', '查询部门树形列表 @author 卓大', '/department/treeList', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.departmentTree', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:00:25', '2022-10-22 18:00:25'), + (886, 1, 1, '管理员', '系统-部门管理', '查询部门列表 @author 卓大', '/department/listAll', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.listAll', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:29:02', '2022-10-22 18:29:02'), + (887, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:29:02', '2022-10-22 18:29:02'), + (888, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":1,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:29:03', '2022-10-22 18:29:03'), + (889, 1, 1, '管理员', '系统-角色', '获取所有角色 @author 卓大', '/role/getAll', 'net.lab1024.sa.admin.module.system.role.controller.RoleController.getAllRole', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:29:09', '2022-10-22 18:29:09'), + (890, 1, 1, '管理员', '系统-角色-菜单', '获取角色关联菜单权限 @author 卓大', '/role/menu/getRoleSelectedMenu/1', 'net.lab1024.sa.admin.module.system.role.controller.RoleMenuController.getRoleSelectedMenu', '[1]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:29:09', '2022-10-22 18:29:09'), + (891, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:29:11', '2022-10-22 18:29:11'), + (892, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:29:44', '2022-10-22 18:29:44'), + (893, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:29:47', '2022-10-22 18:29:47'), + (894, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":2,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:29:48', '2022-10-22 18:29:48'), + (895, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:29:48', '2022-10-22 18:29:48'), + (896, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:29:49', '2022-10-22 18:29:49'), + (897, 1, 1, '管理员', '系统-角色', '获取所有角色 @author 卓大', '/role/getAll', 'net.lab1024.sa.admin.module.system.role.controller.RoleController.getAllRole', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:29:51', '2022-10-22 18:29:51'), + (898, 1, 1, '管理员', '系统-角色-菜单', '获取角色关联菜单权限 @author 卓大', '/role/menu/getRoleSelectedMenu/1', 'net.lab1024.sa.admin.module.system.role.controller.RoleMenuController.getRoleSelectedMenu', '[1]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:29:51', '2022-10-22 18:29:51'), + (899, 1, 1, '管理员', '系统-部门管理', '查询部门列表 @author 卓大', '/department/listAll', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.listAll', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:29:52', '2022-10-22 18:29:52'), + (900, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:29:52', '2022-10-22 18:29:52'), + (901, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":1,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:29:52', '2022-10-22 18:29:52'), + (902, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:29:53', '2022-10-22 18:29:53'), + (903, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:29:57', '2022-10-22 18:29:57'), + (904, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:29:57', '2022-10-22 18:29:57'), + (905, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:29:57', '2022-10-22 18:29:57'), + (906, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:30:04', '2022-10-22 18:30:04'), + (907, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:30:04', '2022-10-22 18:30:04'), + (908, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:30:12', '2022-10-22 18:30:12'), + (909, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:30:12', '2022-10-22 18:30:12'), + (910, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"disabledFlag":false,"frameFlag":false,"icon":"BankOutlined","menuId":138,"menuName":"OA系统","menuType":1,"parentId":0,"sort":1,"updateUserId":1,"visibleFlag":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:30:15', '2022-10-22 18:30:15'), + (911, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:30:16', '2022-10-22 18:30:16'), + (912, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:30:17', '2022-10-22 18:30:17'), + (913, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:30:17', '2022-10-22 18:30:17'), + (914, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"disabledFlag":false,"frameFlag":false,"icon":"AccountBookOutlined","menuId":137,"menuName":"进销存系统","menuType":1,"parentId":0,"sort":2,"updateUserId":1,"visibleFlag":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:30:19', '2022-10-22 18:30:19'), + (915, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:30:19', '2022-10-22 18:30:19'), + (916, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:30:24', '2022-10-22 18:30:24'), + (917, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:30:24', '2022-10-22 18:30:24'), + (918, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"disabledFlag":false,"frameFlag":false,"icon":"FileWordOutlined","menuId":146,"menuName":"系统文档","menuType":1,"parentId":0,"sort":3,"updateUserId":1,"visibleFlag":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:30:26', '2022-10-22 18:30:26'), + (919, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:30:26', '2022-10-22 18:30:26'), + (920, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:30:33', '2022-10-22 18:30:33'), + (921, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:30:40', '2022-10-22 18:30:40'), + (922, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:31:17', '2022-10-22 18:31:17'), + (923, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:31:17', '2022-10-22 18:31:17'), + (924, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:31:35', '2022-10-22 18:31:35'), + (925, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":2,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:31:36', '2022-10-22 18:31:36'), + (926, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:31:37', '2022-10-22 18:31:37'), + (927, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:31:37', '2022-10-22 18:31:37'), + (928, 1, 1, '管理员', '系统-部门管理', '查询部门列表 @author 卓大', '/department/listAll', 'net.lab1024.sa.admin.module.system.department.controller.DepartmentController.listAll', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:31:46', '2022-10-22 18:31:46'), + (929, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:31:46', '2022-10-22 18:31:46'), + (930, 1, 1, '管理员', '系统-员工管理', '员工管理查询 @author 卓大', '/employee/query', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.query', '[{"deletedFlag":false,"departmentId":1,"disabledFlag":false,"pageNum":1,"pageSize":15}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:31:46', '2022-10-22 18:31:46'), + (931, 1, 1, '管理员', '系统-角色', '获取所有角色 @author 卓大', '/role/getAll', 'net.lab1024.sa.admin.module.system.role.controller.RoleController.getAllRole', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:31:47', '2022-10-22 18:31:47'), + (932, 1, 1, '管理员', '系统-角色-菜单', '获取角色关联菜单权限 @author 卓大', '/role/menu/getRoleSelectedMenu/1', 'net.lab1024.sa.admin.module.system.role.controller.RoleMenuController.getRoleSelectedMenu', '[1]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:31:47', '2022-10-22 18:31:47'), + (933, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:31:49', '2022-10-22 18:31:49'), + (934, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:32:23', '2022-10-22 18:32:23'), + (935, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:32:28', '2022-10-22 18:32:28'), + (936, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:32:28', '2022-10-22 18:32:28'), + (937, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:32:28', '2022-10-22 18:32:28'), + (938, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"disabledFlag":false,"frameFlag":false,"icon":"BarChartOutlined","menuId":111,"menuName":"监控服务","menuType":1,"parentId":0,"path":"/monitor","sort":4,"updateUserId":1,"visibleFlag":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:32:31', '2022-10-22 18:32:31'), + (939, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:32:31', '2022-10-22 18:32:31'), + (940, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:32:35', '2022-10-22 18:32:35'), + (941, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:32:35', '2022-10-22 18:32:35'), + (942, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"disabledFlag":false,"frameFlag":false,"icon":"NodeCollapseOutlined","menuId":114,"menuName":"运维工具","menuType":1,"parentId":0,"sort":5,"updateUserId":1,"visibleFlag":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:32:37', '2022-10-22 18:32:37'), + (943, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:32:37', '2022-10-22 18:32:37'), + (944, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:32:48', '2022-10-22 18:32:48'), + (945, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:32:48', '2022-10-22 18:32:48'), + (946, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"component":"/support/heart-beat/heart-beat-list.vue","disabledFlag":false,"frameFlag":false,"icon":"FallOutlined","menuId":206,"menuName":"心跳监控","menuType":2,"parentId":111,"path":"/support/heart-beat/heart-beat-list","permsType":1,"sort":1,"updateUserId":1,"visibleFlag":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:32:52', '2022-10-22 18:32:52'), + (947, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:32:52', '2022-10-22 18:32:52'), + (948, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:33:00', '2022-10-22 18:33:00'), + (949, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:33:00', '2022-10-22 18:33:00'), + (950, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"component":"/support/login-log/login-log-list.vue","disabledFlag":false,"frameFlag":false,"icon":"LoginOutlined","menuId":143,"menuName":"登录日志","menuType":2,"parentId":111,"path":"/support/login-log/login-log-list","sort":2,"updateUserId":1,"visibleFlag":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:33:03', '2022-10-22 18:33:03'), + (951, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:33:03', '2022-10-22 18:33:03'), + (952, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:33:05', '2022-10-22 18:33:05'), + (953, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:33:05', '2022-10-22 18:33:05'), + (954, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"disabledFlag":false,"frameFlag":true,"frameUrl":"http://localhost:60001/druid/index.html","icon":"ConsoleSqlOutlined","menuId":122,"menuName":"数据库监控","menuType":2,"parentId":111,"path":"/support/druid/index","sort":4,"updateUserId":1,"visibleFlag":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:33:07', '2022-10-22 18:33:07'), + (955, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:33:07', '2022-10-22 18:33:07'), + (956, 1, 1, '管理员', '系统-菜单', '获取所有请求路径 @author 卓大', '/menu/auth/url', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.getAuthUrl', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:33:08', '2022-10-22 18:33:08'), + (957, 1, 1, '管理员', '系统-菜单', '查询菜单树 @author 卓大', '/menu/tree', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuTree', '[true]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:33:08', '2022-10-22 18:33:08'), + (958, 1, 1, '管理员', '系统-菜单', '更新菜单 @author 卓大', '/menu/update', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.updateMenu', '[{"apiPermsList":[],"cacheFlag":false,"component":"/support/operate-log/operate-log-list.vue","disabledFlag":false,"frameFlag":false,"icon":"VideoCameraOutlined","menuId":81,"menuName":"请求监控","menuType":2,"parentId":111,"path":"/support/operate-log/operate-log-list","sort":3,"updateUserId":1,"visibleFlag":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:33:10', '2022-10-22 18:33:10'), + (959, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:33:10', '2022-10-22 18:33:10'), + (960, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:33:31', '2022-10-22 18:33:31'), + (961, 1, 1, '管理员', '系统-菜单', '查询菜单列表 @author 卓大', '/menu/query', 'net.lab1024.sa.admin.module.system.menu.controller.MenuController.queryMenuList', '[]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:33:36', '2022-10-22 18:33:36'), + (962, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":15,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:34:16', '2022-10-22 18:34:16'), + (963, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":10,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:35:57', '2022-10-22 18:35:57'), + (964, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:36:04', '2022-10-22 18:36:04'), + (965, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":2,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:36:05', '2022-10-22 18:36:05'), + (966, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:36:05', '2022-10-22 18:36:05'), + (967, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:36:05', '2022-10-22 18:36:05'), + (968, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":10,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:58:40', '2022-10-22 18:58:40'), + (969, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:58:42', '2022-10-22 18:58:42'), + (970, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":2,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:58:43', '2022-10-22 18:58:43'), + (971, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:58:44', '2022-10-22 18:58:44'), + (972, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:58:44', '2022-10-22 18:58:44'), + (973, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":10,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 18:59:23', '2022-10-22 18:59:23'), + (974, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 19:01:51', '2022-10-22 19:01:51'), + (975, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":2,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 19:01:52', '2022-10-22 19:01:52'), + (976, 1, 1, '管理员', 'ERP进销存-分类管理', '查询类目层级树 @author 胡克', '/category/tree', 'net.lab1024.sa.admin.module.business.category.controller.CategoryController.queryTree', '[{"categoryType":1,"parentId":0}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 19:01:53', '2022-10-22 19:01:53'), + (977, 1, 1, '管理员', 'ERP进销存-商品管理', '分页查询 @author 胡克', '/goods/query', 'net.lab1024.sa.admin.module.business.goods.controller.GoodsController.query', '[{"deletedFlag":false,"pageNum":1,"pageSize":10,"searchWord":""}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 19:01:53', '2022-10-22 19:01:53'), + (978, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":10,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 19:02:02', '2022-10-22 19:02:02'), + (979, 1, 1, '管理员', 'OA办公-企业', '分页查询企业模块 @author 开云', '/oa/enterprise/page/query', 'net.lab1024.sa.admin.module.business.oa.enterprise.EnterpriseController.queryByPage', '[{"deletedFlag":false,"keywords":"","pageNum":1,"pageSize":10,"searchCount":true}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 19:02:06', '2022-10-22 19:02:06'), + (980, 1, 1, '管理员', '系统-员工管理', '修改密码 @author 卓大', '/employee/update/password', 'net.lab1024.sa.admin.module.system.employee.controller.EmployeeController.updatePassword', '[{"employeeId":1,"newPassword":"a123123","oldPassword":"123456"}]', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 1, NULL, '2022-10-22 19:32:11', '2022-10-22 19:32:11'); +/*!40000 ALTER TABLE `t_operate_log` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_reload_item 结构 +DROP TABLE IF EXISTS `t_reload_item`; +CREATE TABLE IF NOT EXISTS `t_reload_item` ( + `tag` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '项名称', + `args` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '参数 可选', + `identification` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '运行标识', + `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`tag`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='reload项目'; + +-- 正在导出表 smart_admin_v2.t_reload_item 的数据:~2 rows (大约) +DELETE FROM `t_reload_item`; +/*!40000 ALTER TABLE `t_reload_item` DISABLE KEYS */; +INSERT INTO `t_reload_item` (`tag`, `args`, `identification`, `update_time`, `create_time`) VALUES + ('system_config', 'e', 'e', '2022-06-20 14:43:14', '2019-04-18 11:48:27'), + ('test', 'd', 'd', '2022-06-20 14:40:33', '2022-06-20 14:05:05'); +/*!40000 ALTER TABLE `t_reload_item` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_reload_result 结构 +DROP TABLE IF EXISTS `t_reload_result`; +CREATE TABLE IF NOT EXISTS `t_reload_result` ( + `tag` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `identification` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '运行标识', + `args` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `result` tinyint unsigned NOT NULL COMMENT '是否成功 ', + `exception` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci, + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='reload结果'; + +-- 正在导出表 smart_admin_v2.t_reload_result 的数据:~150 rows (大约) +DELETE FROM `t_reload_result`; +/*!40000 ALTER TABLE `t_reload_result` DISABLE KEYS */; +/*!40000 ALTER TABLE `t_reload_result` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_role 结构 +DROP TABLE IF EXISTS `t_role`; +CREATE TABLE IF NOT EXISTS `t_role` ( + `role_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', + `role_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '角色名称', + `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '角色描述', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`role_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=57 DEFAULT CHARSET=utf8 COMMENT='角色表'; + +-- 正在导出表 smart_admin_v2.t_role 的数据:~5 rows (大约) +DELETE FROM `t_role`; +/*!40000 ALTER TABLE `t_role` DISABLE KEYS */; +INSERT INTO `t_role` (`role_id`, `role_name`, `remark`, `update_time`, `create_time`) VALUES + (1, '技术总监', '', '2022-10-19 20:24:09', '2019-06-21 12:09:34'), + (34, '销售总监', '', '2022-10-19 20:24:28', '2019-08-30 09:30:50'), + (35, '总经理', '', '2019-08-30 09:31:05', '2019-08-30 09:31:05'), + (36, '董事长', '', '2019-08-30 09:31:11', '2019-08-30 09:31:11'), + (37, '财务', '', '2019-08-30 09:31:16', '2019-08-30 09:31:16'); +/*!40000 ALTER TABLE `t_role` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_role_data_scope 结构 +DROP TABLE IF EXISTS `t_role_data_scope`; +CREATE TABLE IF NOT EXISTS `t_role_data_scope` ( + `id` int NOT NULL AUTO_INCREMENT, + `data_scope_type` int NOT NULL COMMENT '数据范围id', + `view_type` int NOT NULL COMMENT '数据范围类型', + `role_id` int NOT NULL COMMENT '角色id', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=67 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色的数据范围'; + +-- 正在导出表 smart_admin_v2.t_role_data_scope 的数据:~0 rows (大约) +DELETE FROM `t_role_data_scope`; +/*!40000 ALTER TABLE `t_role_data_scope` DISABLE KEYS */; +/*!40000 ALTER TABLE `t_role_data_scope` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_role_employee 结构 +DROP TABLE IF EXISTS `t_role_employee`; +CREATE TABLE IF NOT EXISTS `t_role_employee` ( + `id` int NOT NULL AUTO_INCREMENT, + `role_id` int NOT NULL COMMENT '角色id', + `employee_id` int NOT NULL COMMENT '员工id', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `uk_role_employee` (`role_id`,`employee_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=327 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色员工功能表'; + +-- 正在导出表 smart_admin_v2.t_role_employee 的数据:~2 rows (大约) +DELETE FROM `t_role_employee`; +/*!40000 ALTER TABLE `t_role_employee` DISABLE KEYS */; +INSERT INTO `t_role_employee` (`id`, `role_id`, `employee_id`, `update_time`, `create_time`) VALUES + (325, 36, 63, '2022-10-19 20:25:26', '2022-10-19 20:25:26'), + (326, 1, 44, '2022-10-22 10:54:35', '2022-10-22 10:54:35'); +/*!40000 ALTER TABLE `t_role_employee` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_role_menu 结构 +DROP TABLE IF EXISTS `t_role_menu`; +CREATE TABLE IF NOT EXISTS `t_role_menu` ( + `role_menu_id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键id', + `role_id` bigint NOT NULL COMMENT '角色id', + `menu_id` bigint NOT NULL COMMENT '菜单id', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`role_menu_id`) USING BTREE, + KEY `idx_role_id` (`role_id`) USING BTREE, + KEY `idx_menu_id` (`menu_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色-菜单\n'; + +-- 正在导出表 smart_admin_v2.t_role_menu 的数据:~34 rows (大约) +DELETE FROM `t_role_menu`; +/*!40000 ALTER TABLE `t_role_menu` DISABLE KEYS */; +INSERT INTO `t_role_menu` (`role_menu_id`, `role_id`, `menu_id`, `update_time`, `create_time`) VALUES + (1, 1, 45, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (2, 1, 46, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (3, 1, 86, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (4, 1, 87, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (5, 1, 88, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (6, 1, 91, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (7, 1, 92, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (8, 1, 93, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (9, 1, 94, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (10, 1, 95, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (11, 1, 96, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (12, 1, 76, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (13, 1, 97, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (14, 1, 98, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (15, 1, 99, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (16, 1, 100, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (17, 1, 101, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (18, 1, 102, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (19, 1, 103, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (20, 1, 104, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (21, 1, 26, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (22, 1, 40, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (23, 1, 105, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (24, 1, 106, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (25, 1, 108, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (26, 1, 50, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (27, 1, 130, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (28, 1, 157, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (29, 1, 158, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (30, 1, 193, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (31, 1, 200, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (32, 1, 122, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (33, 1, 111, '2022-10-22 10:54:27', '2022-10-22 10:54:27'), + (34, 1, 143, '2022-10-22 10:54:27', '2022-10-22 10:54:27'); +/*!40000 ALTER TABLE `t_role_menu` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_serial_number 结构 +DROP TABLE IF EXISTS `t_serial_number`; +CREATE TABLE IF NOT EXISTS `t_serial_number` ( + `serial_number_id` int NOT NULL, + `business_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务名称', + `format` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '格式[yyyy]表示年,[mm]标识月,[dd]表示日,[nnn]表示三位数字', + `rule_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '规则格式。none没有周期, year 年周期, month月周期, day日周期', + `init_number` int unsigned NOT NULL DEFAULT '1' COMMENT '初始值', + `step_random_range` int unsigned NOT NULL COMMENT '步长随机数', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注', + `last_number` bigint DEFAULT NULL COMMENT '上次产生的单号, 默认为空', + `last_time` datetime DEFAULT NULL COMMENT '上次产生的单号时间', + `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `create_time` datetime DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`serial_number_id`) USING BTREE, + UNIQUE KEY `key_name` (`business_name`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='单号生成器定义表'; + +-- 正在导出表 smart_admin_v2.t_serial_number 的数据:~2 rows (大约) +DELETE FROM `t_serial_number`; +/*!40000 ALTER TABLE `t_serial_number` DISABLE KEYS */; +INSERT INTO `t_serial_number` (`serial_number_id`, `business_name`, `format`, `rule_type`, `init_number`, `step_random_range`, `remark`, `last_number`, `last_time`, `update_time`, `create_time`) VALUES + (1, '订单编号', 'DK[yyyy][mm][dd]NO[nnnnn]', 'day', 1000, 10, 'DK20201101NO321', 1082, '2022-06-24 15:20:40', '2022-06-24 15:20:18', '2021-02-19 14:37:50'), + (2, '合同编号', 'HT[yyyy][mm][dd][nnnnn]-CX', 'none', 1, 1, '', NULL, NULL, '2022-06-24 14:48:05', '2021-08-12 20:40:37'); +/*!40000 ALTER TABLE `t_serial_number` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_serial_number_record 结构 +DROP TABLE IF EXISTS `t_serial_number_record`; +CREATE TABLE IF NOT EXISTS `t_serial_number_record` ( + `serial_number_id` int NOT NULL, + `record_date` date NOT NULL COMMENT '记录日期', + `last_number` bigint NOT NULL DEFAULT '0' COMMENT '最后更新值', + `last_time` datetime NOT NULL COMMENT '最后更新时间', + `count` bigint NOT NULL DEFAULT '0' COMMENT '更新次数', + `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `create_time` datetime DEFAULT CURRENT_TIMESTAMP, + KEY `uk_generator` (`serial_number_id`,`record_date`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='serial_number记录表'; + +-- 正在导出表 smart_admin_v2.t_serial_number_record 的数据:~2 rows (大约) +DELETE FROM `t_serial_number_record`; +/*!40000 ALTER TABLE `t_serial_number_record` DISABLE KEYS */; +INSERT INTO `t_serial_number_record` (`serial_number_id`, `record_date`, `last_number`, `last_time`, `count`, `update_time`, `create_time`) VALUES + (1, '2022-03-02', 8581, '2022-03-03 14:37:11', 500, '2022-03-03 14:37:46', '2022-03-03 14:36:43'), + (1, '2022-03-03', 7053, '2022-03-03 14:38:48', 1500, '2022-03-03 14:47:32', '2022-03-03 14:38:19'), + (1, '2022-06-24', 1082, '2022-06-24 15:16:13', 15, '2022-06-24 15:20:18', '2022-06-24 15:15:51'); +/*!40000 ALTER TABLE `t_serial_number_record` ENABLE KEYS */; + +-- 导出 表 smart_admin_v2.t_table_column 结构 +DROP TABLE IF EXISTS `t_table_column`; +CREATE TABLE IF NOT EXISTS `t_table_column` ( + `table_column_id` bigint NOT NULL AUTO_INCREMENT, + `user_id` bigint NOT NULL COMMENT '用户id', + `user_type` int NOT NULL COMMENT '用户类型', + `table_id` int NOT NULL COMMENT '表格id', + `columns` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT '具体的表格列,存入的json', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`table_column_id`) USING BTREE, + UNIQUE KEY `uni_employee_table` (`user_id`,`table_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='表格的自定义列存储'; + +-- 正在导出表 smart_admin_v2.t_table_column 的数据:~0 rows (大约) +DELETE FROM `t_table_column`; +/*!40000 ALTER TABLE `t_table_column` DISABLE KEYS */; +/*!40000 ALTER TABLE `t_table_column` ENABLE KEYS */; + +/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */; +/*!40014 SET FOREIGN_KEY_CHECKS=IFNULL(@OLD_FOREIGN_KEY_CHECKS, 1) */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40111 SET SQL_NOTES=IFNULL(@OLD_SQL_NOTES, 1) */; diff --git a/快速部署/README.md b/快速启动/README.md similarity index 100% rename from 快速部署/README.md rename to 快速启动/README.md
-

- -
-
-
    - -
  • - -
    多级菜单
    -
    &#xe608;
    -
  • - -
  • - -
    导航展开
    -
    &#xe609;
    -
  • - -
  • - -
    导航折叠
    -
    &#xe60a;
    -
  • - -
  • - -
    向上箭头
    -
    &#xe60b;
    -
  • - -
  • - -
    向左箭头
    -
    &#xe60c;
    -
  • - -
  • - -
    向右箭头
    -
    &#xe60d;
    -
  • - -
  • - -
    关闭按钮
    -
    &#xe60e;
    -
  • - -
  • - -
    数据上传
    -
    &#xe60f;
    -
  • - -
  • - -
    系统监控
    -
    &#xe610;
    -
  • - -
  • - -
    邮件管理
    -
    &#xe611;
    -
  • - -
  • - -
    小屏
    -
    &#xe612;
    -
  • - -
  • - -
    人员管理
    -
    &#xe613;
    -
  • - -
  • - -
    向下拉
    -
    &#xe614;
    -
  • - -
  • - -
    excel导入导出
    -
    &#xe615;
    -
  • - -
  • - -
    向下箭头
    -
    &#xe616;
    -
  • - -
  • - -
    首页
    -
    &#xe617;
    -
  • - -
  • - -
    系统设置
    -
    &#xe618;
    -
  • - -
  • - -
    消息
    -
    &#xe619;
    -
  • - -
  • - -
    全屏
    -
    &#xe61a;
    -
  • - -
  • - -
    组件
    -
    &#xe61b;
    -
  • - -
  • - -
    news
    -
    &#xe61e;
    -
  • - -
  • - -
    定时任务
    -
    &#xe622;
    -
  • - -
  • - -
    动态加载
    -
    &#xe623;
    -
  • - -
  • - -
    接口文档
    -
    &#xe624;
    -
  • - -
-
-

Unicode 引用

-
- -

Unicode 是字体在网页端最原始的应用方式,特点是:

-
    -
  • 兼容性最好,支持 IE6+,及所有现代浏览器。
  • -
  • 支持按字体的方式去动态调整图标大小,颜色等等。
  • -
  • 但是因为是字体,所以不支持多色。只能使用平台里单色的图标,就算项目里有多色图标也会自动去色。
  • -
-
-

注意:新版 iconfont 支持多色图标,这些多色图标在 Unicode 模式下将不能使用,如果有需求建议使用symbol 的引用方式

-
-

Unicode 使用步骤如下:

-

第一步:拷贝项目下面生成的 @font-face

-
@font-face {
-  font-family: 'iconfont';
-  src: url('iconfont.eot');
-  src: url('iconfont.eot?#iefix') format('embedded-opentype'),
-      url('iconfont.woff2') format('woff2'),
-      url('iconfont.woff') format('woff'),
-      url('iconfont.ttf') format('truetype'),
-      url('iconfont.svg#iconfont') format('svg');
-}
-
-

第二步:定义使用 iconfont 的样式

-
.iconfont {
-  font-family: "iconfont" !important;
-  font-size: 16px;
-  font-style: normal;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-
-

第三步:挑选相应图标并获取字体编码,应用于页面

-
-<span class="iconfont">&#x33;</span>
-
-
-

"iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

-
-
-
-
-
    - -
  • - -
    - 多级菜单 -
    -
    .iconduojicaidan -
    -
  • - -
  • - -
    - 导航展开 -
    -
    .icondaohangzhankai -
    -
  • - -
  • - -
    - 导航折叠 -
    -
    .icondaohangzhedie -
    -
  • - -
  • - -
    - 向上箭头 -
    -
    .iconxiangshangjiantou -
    -
  • - -
  • - -
    - 向左箭头 -
    -
    .iconxiangzuojiantou -
    -
  • - -
  • - -
    - 向右箭头 -
    -
    .iconxiangyoujiantou -
    -
  • - -
  • - -
    - 关闭按钮 -
    -
    .iconguanbianniu -
    -
  • - -
  • - -
    - 数据上传 -
    -
    .iconshujushangchuan -
    -
  • - -
  • - -
    - 系统监控 -
    -
    .iconxitongjiankong -
    -
  • - -
  • - -
    - 邮件管理 -
    -
    .iconyoujianguanli -
    -
  • - -
  • - -
    - 小屏 -
    -
    .iconxiaoping -
    -
  • - -
  • - -
    - 人员管理 -
    -
    .iconrenyuanguanli -
    -
  • - -
  • - -
    - 向下拉 -
    -
    .iconxiangxiala -
    -
  • - -
  • - -
    - excel导入导出 -
    -
    .iconexceldaorudaochu -
    -
  • - -
  • - -
    - 向下箭头 -
    -
    .iconxiangxiajiantou -
    -
  • - -
  • - -
    - 首页 -
    -
    .iconshouye -
    -
  • - -
  • - -
    - 系统设置 -
    -
    .iconxitongshezhi -
    -
  • - -
  • - -
    - 消息 -
    -
    .iconxiaoxi -
    -
  • - -
  • - -
    - 全屏 -
    -
    .iconquanping -
    -
  • - -
  • - -
    - 组件 -
    -
    .iconzujian -
    -
  • - -
  • - -
    - news -
    -
    .iconnews -
    -
  • - -
  • - -
    - 定时任务 -
    -
    .icondingshirenwu -
    -
  • - -
  • - -
    - 动态加载 -
    -
    .icondongtaijiazai -
    -
  • - -
  • - -
    - 接口文档 -
    -
    .iconjiekouwendang -
    -
  • - -
-
-

font-class 引用

-
- -

font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。

-

与 Unicode 使用方式相比,具有如下特点:

-
    -
  • 兼容性良好,支持 IE8+,及所有现代浏览器。
  • -
  • 相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。
  • -
  • 因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。
  • -
  • 不过因为本质上还是使用的字体,所以多色图标还是不支持的。
  • -
-

使用步骤如下:

-

第一步:引入项目下面生成的 fontclass 代码:

-
<link rel="stylesheet" href="./iconfont.css">
-
-

第二步:挑选相应图标并获取类名,应用于页面:

-
<span class="iconfont iconxxx"></span>
-
-
-

" - iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

-
-
-
-
-
    - -
  • - -
    多级菜单
    -
    #iconduojicaidan
    -
  • - -
  • - -
    导航展开
    -
    #icondaohangzhankai
    -
  • - -
  • - -
    导航折叠
    -
    #icondaohangzhedie
    -
  • - -
  • - -
    向上箭头
    -
    #iconxiangshangjiantou
    -
  • - -
  • - -
    向左箭头
    -
    #iconxiangzuojiantou
    -
  • - -
  • - -
    向右箭头
    -
    #iconxiangyoujiantou
    -
  • - -
  • - -
    关闭按钮
    -
    #iconguanbianniu
    -
  • - -
  • - -
    数据上传
    -
    #iconshujushangchuan
    -
  • - -
  • - -
    系统监控
    -
    #iconxitongjiankong
    -
  • - -
  • - -
    邮件管理
    -
    #iconyoujianguanli
    -
  • - -
  • - -
    小屏
    -
    #iconxiaoping
    -
  • - -
  • - -
    人员管理
    -
    #iconrenyuanguanli
    -
  • - -
  • - -
    向下拉
    -
    #iconxiangxiala
    -
  • - -
  • - -
    excel导入导出
    -
    #iconexceldaorudaochu
    -
  • - -
  • - -
    向下箭头
    -
    #iconxiangxiajiantou
    -
  • - -
  • - -
    首页
    -
    #iconshouye
    -
  • - -
  • - -
    系统设置
    -
    #iconxitongshezhi
    -
  • - -
  • - -
    消息
    -
    #iconxiaoxi
    -
  • - -
  • - -
    全屏
    -
    #iconquanping
    -
  • - -
  • - -
    组件
    -
    #iconzujian
    -
  • - -
  • - -
    news
    -
    #iconnews
    -
  • - -
  • - -
    定时任务
    -
    #icondingshirenwu
    -
  • - -
  • - -
    动态加载
    -
    #icondongtaijiazai
    -
  • - -
  • - -
    接口文档
    -
    #iconjiekouwendang
    -
  • - -
-
-

Symbol 引用

-
- -

这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇文章 - 这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:

-
    -
  • 支持多色图标了,不再受单色限制。
  • -
  • 通过一些技巧,支持像字体那样,通过 font-size, color 来调整样式。
  • -
  • 兼容性较差,支持 IE9+,及现代浏览器。
  • -
  • 浏览器渲染 SVG 的性能一般,还不如 png。
  • -
-

使用步骤如下:

-

第一步:引入项目下面生成的 symbol 代码:

-
<script src="./iconfont.js"></script>
-
-

第二步:加入通用 CSS 代码(引入一次就行):

-
<style>
-.icon {
-  width: 1em;
-  height: 1em;
-  vertical-align: -0.15em;
-  fill: currentColor;
-  overflow: hidden;
-}
-</style>
-
-

第三步:挑选相应图标并获取类名,应用于页面:

-
<svg class="icon" aria-hidden="true">
-  <use xlink:href="#icon-xxx"></use>
-</svg>
-
-
-
- -
-