From 1f75c9614eebd03a9c4ecffd5a6df1a9e8185d38 Mon Sep 17 00:00:00 2001 From: zhuoda Date: Sat, 5 Nov 2022 22:38:44 +0800 Subject: [PATCH] v1.x --- .gitignore | 13 +- README.md | 1 - .../.browserslistrc | 0 .../.editorconfig | 0 .../.env.development | 0 .../.env.local | 0 .../.env.pre | 0 .../.env.prod | 0 .../.env.sit | 0 .../.eslintignore | 0 .../.eslintrc.js | 0 .../.gitignore | 0 .../.postcssrc.js | 0 .../.prettierrc.js | 0 .../.sentryclirc | 0 .../README.md | 0 .../babel.config.js | 0 .../package.json | 0 .../public/favicon.ico | Bin .../public/index.html | 0 .../src/App.vue | 0 .../src/api/employee.js | 0 .../src/api/file.js | 0 .../src/api/login.js | 0 .../src/api/system-config.js | 0 .../src/api/user.js | 0 .../src/assets/css/index.scss | 0 .../src/assets/logo.png | Bin .../employee/department-employee-selector.vue | 0 .../select-picker/SmartEnumSelectPicker.vue | 0 .../form/select-picker/SmartSelectPicker | 0 .../src/components/mixin/session-mixin.js | 0 .../src/components/van-bar/BackNavBar.vue | 0 .../src/components/van-bar/RouterNavBar.vue | 0 .../src/config/index.js | 0 .../src/constants/area.js | 0 .../src/constants/erp/contact-company.js | 0 .../src/constants/erp/index.js | 0 .../src/constants/file.js | 0 .../src/constants/index.js | 0 .../src/constants/school.js | 0 .../src/filters/filter.js | 0 .../src/filters/index.js | 0 .../src/lib/cookie.js | 0 .../src/lib/erp-http.js | 0 .../src/lib/http.js | 0 .../src/lib/local.js | 0 .../src/lib/menu-func.js | 0 .../src/lib/printPlugs.js | 0 .../src/lib/render-dom.js | 0 .../src/lib/smart-sentry.js | 0 .../src/lib/util.js | 0 .../src/lib/watermark.js | 0 .../src/main.js | 0 .../src/plugins/smart-sentry.js | 0 .../src/plugins/smart.js | 0 .../src/plugins/vant.js | 0 .../src/router/dashboard/index.js | 0 .../src/router/develop/develop.js | 0 .../src/router/error/error.js | 0 .../src/router/index.js | 0 .../src/router/login/login.js | 0 .../src/router/router-const.js | 0 .../src/router/routers.js | 0 .../src/router/user/user.js | 0 .../src/store/index.js | 0 .../src/store/module/app.js | 0 .../src/store/module/user.js | 0 .../src/themes/index.scss | 0 .../src/utils/index.js | 0 .../src/utils/request.js | 0 .../src/utils/validate.js | 0 .../src/views/dashboard/dashboard.vue | 0 .../src/views/develop/config.vue | 0 .../src/views/error/404.vue | 0 .../src/views/login/login.vue | 0 .../src/views/user/change-password.vue | 0 .../src/views/user/index.vue | 0 .../vue.config.js | 0 .../.gitignore | 0 .../README.md | 0 .../pom.xml | 0 .../smart-admin-api/doc/readme.txt | 0 .../smart-admin-api/pom.xml | 0 .../smartadmin/SmartAdminApplication.java | 0 .../common/anno/ApiModelPropertyEnum.java | 0 .../smartadmin/common/anno/DataScope.java | 0 .../smartadmin/common/anno/NoNeedLogin.java | 0 .../common/anno/NoValidPrivilege.java | 0 .../smartadmin/common/anno/OperateLog.java | 0 .../common/constant/CommentSortTypeEnum.java | 0 .../smartadmin/common/constant/JudgeEnum.java | 0 .../common/constant/ResponseCodeConst.java | 0 .../common/controller/BaseController.java | 0 .../smartadmin/common/domain/BaseEntity.java | 0 .../smartadmin/common/domain/BaseEnum.java | 0 .../smartadmin/common/domain/ITask.java | 0 .../common/domain/OrderItemDTO.java | 0 .../common/domain/PageParamDTO.java | 0 .../common/domain/PageResultDTO.java | 0 .../smartadmin/common/domain/ResponseDTO.java | 0 .../common/domain/ValidateList.java | 0 .../exception/SmartBusinessException.java | 0 .../exception/SmartResponseCodeException.java | 0 .../heartbeat/AbstractHeartBeatCommand.java | 0 .../common/heartbeat/HeartBeatConfig.java | 0 .../common/heartbeat/HeartBeatLogger.java | 0 .../HeartBeatRecordCommendInterface.java | 0 .../common/heartbeat/HeartBeatRecordDTO.java | 0 .../heartbeat/HeatBeatRecordHelper.java | 0 .../smartadmin/common/heartbeat/IpUtil.java | 0 .../common/heartbeat/StringUtil.java | 0 .../common/json/LongJsonDeserializer.java | 0 .../common/json/LongJsonSerializer.java | 0 .../common/kaptcha/KaptchaColor.java | 0 .../common/kaptcha/KaptchaNoise.java | 0 .../common/kaptcha/KaptchaWordRenderer.java | 0 .../common/reload/SmartReloadManager.java | 0 .../common/reload/SmartReloadScheduler.java | 0 .../abstracts/AbstractSmartReloadCommand.java | 0 .../AbstractSmartReloadCommand4Spring.java | 0 .../common/reload/annotation/SmartReload.java | 0 .../domain/AbstractSmartReloadObject.java | 0 .../reload/domain/AnnotationReloadObject.java | 0 .../reload/domain/InterfaceReloadObject.java | 0 .../reload/domain/entity/ReloadItem.java | 0 .../domain/entity/SmartReloadResult.java | 0 .../SmartReloadCommandInterface.java | 0 .../interfaces/SmartReloadThreadLogger.java | 0 .../reload/interfaces/SmartReloadable.java | 0 .../SmartSwaggerApiModelEnumPlugin.java | 0 .../bigdecimal/BigDecimalValidator.java | 0 .../validator/bigdecimal/CheckBigDecimal.java | 0 .../bigdecimal/ComparisonSymbolEnum.java | 0 .../common/validator/en/CheckEnum.java | 0 .../common/validator/en/EnumValidator.java | 0 .../config/SmartAdminWebAppConfig.java | 0 .../config/SmartDruidDataSourceConfig.java | 0 .../config/SmartHeartBeatConfig.java | 0 .../smartadmin/config/SmartKaptchaConfig.java | 0 .../config/SmartMybatisPlusConfig.java | 0 .../smartadmin/config/SmartRedisConfig.java | 0 .../smartadmin/config/SmartReloadConfig.java | 0 .../config/SmartRestTemplateConfig.java | 0 .../SmartSwaggerApiModelEnumConfig.java | 0 .../SmartSwaggerDynamicGroupConfig.java | 0 .../config/SmartWebSocketConfig.java | 0 .../config/SystemEnvironmentCondition.java | 0 .../smartadmin/constant/CommonConst.java | 0 .../constant/SmartReloadTagConst.java | 0 .../smartadmin/constant/SwaggerTagConst.java | 0 .../constant/SystemEnvironmentEnum.java | 0 .../handler/SmartGlobalExceptionHandler.java | 0 .../handler/SmartOperateLogAspect.java | 0 .../SmartAuthenticationInterceptor.java | 0 .../listener/SmartAdminStartupRunner.java | 0 .../business/email/EmailController.java | 0 .../module/business/email/EmailDao.java | 0 .../business/email/EmailSendStatusEnum.java | 0 .../module/business/email/EmailService.java | 0 .../email/domain/dto/EmailConfigDTO.java | 0 .../business/email/domain/dto/EmailDTO.java | 0 .../email/domain/dto/EmailQueryDTO.java | 0 .../business/email/domain/dto/EmailVO.java | 0 .../email/domain/entity/EmailEntity.java | 0 .../module/business/log/LogService.java | 0 .../OrderOperateLogController.java | 0 .../orderoperatelog/OrderOperateLogDao.java | 0 .../OrderOperateLogService.java | 0 .../OrderOperateLogDefaultEmpEnum.java | 0 .../OrderOperateLogOperateTypeConst.java | 0 .../OrderOperateLogOrderTypeEnum.java | 0 .../domain/dto/OrderOperateLogSaveDTO.java | 0 .../domain/dto/SupplierOrderOperateVO.java | 0 .../domain/entity/OrderOperateLogEntity.java | 0 .../domain/vo/OrderOperateLogVO.java | 0 .../userloginlog/UserLoginLogController.java | 0 .../log/userloginlog/UserLoginLogDao.java | 0 .../log/userloginlog/UserLoginLogService.java | 0 .../userloginlog/domain/UserLoginLogDTO.java | 0 .../domain/UserLoginLogEntity.java | 0 .../domain/UserLoginLogQueryDTO.java | 0 .../UserOperateLogController.java | 0 .../log/useroperatelog/UserOperateLogDao.java | 0 .../useroperatelog/UserOperateLogService.java | 0 .../domain/UserOperateLogDTO.java | 0 .../domain/UserOperateLogEntity.java | 0 .../domain/UserOperateLogQueryDTO.java | 0 .../business/notice/NoticeController.java | 0 .../module/business/notice/NoticeManage.java | 0 .../module/business/notice/NoticeService.java | 0 .../module/business/notice/dao/NoticeDao.java | 0 .../notice/dao/NoticeReceiveRecordDao.java | 0 .../notice/domain/dto/NoticeAddDTO.java | 0 .../notice/domain/dto/NoticeDetailVO.java | 0 .../notice/domain/dto/NoticeQueryDTO.java | 0 .../notice/domain/dto/NoticeReadCountDTO.java | 0 .../notice/domain/dto/NoticeReceiveDTO.java | 0 .../domain/dto/NoticeReceiveQueryDTO.java | 0 .../notice/domain/dto/NoticeUpdateDTO.java | 0 .../business/notice/domain/dto/NoticeVO.java | 0 .../notice/domain/entity/NoticeEntity.java | 0 .../entity/NoticeReceiveRecordEntity.java | 0 .../peony/controller/PeonyController.java | 0 .../module/business/peony/dao/PeonyDao.java | 0 .../peony/domain/dto/PeonyAddDTO.java | 0 .../peony/domain/dto/PeonyQueryDTO.java | 0 .../peony/domain/dto/PeonyUpdateDTO.java | 0 .../peony/domain/entity/PeonyEntity.java | 0 .../peony/domain/vo/PeonyExcelVO.java | 0 .../business/peony/domain/vo/PeonyVO.java | 0 .../business/peony/service/PeonyService.java | 0 .../constant/SqlOperateTypeEnum.java | 0 .../support/codegenerator/dao/TableDao.java | 0 .../domain/CodeGeneratorDTO.java | 0 .../domain/CodeGeneratorQueryColumnDTO.java | 0 .../codegenerator/domain/ColumnVO.java | 0 .../codegenerator/domain/QueryFieldVO.java | 0 .../service/CodeGeneratorComponent.java | 0 .../service/CodeGeneratorService.java | 0 .../module/support/file/FileController.java | 0 .../module/support/file/FileDao.java | 0 .../file/constant/FileModuleTypeEnum.java | 0 .../file/constant/FileResponseCodeConst.java | 0 .../file/constant/FileServiceNameConst.java | 0 .../file/constant/FileServiceTypeEnum.java | 0 .../support/file/domain/dto/FileAddDTO.java | 0 .../support/file/domain/dto/FileDTO.java | 0 .../support/file/domain/dto/FileQueryDTO.java | 0 .../support/file/domain/dto/OSSConfig.java | 0 .../file/domain/entity/FileEntity.java | 0 .../module/support/file/domain/vo/FileVO.java | 0 .../support/file/domain/vo/UploadVO.java | 0 .../support/file/service/FileService.java | 0 .../file/service/FileServiceAliYun.java | 0 .../file/service/FileServiceLocal.java | 0 .../file/service/FileServiceQiNiuYun.java | 0 .../support/file/service/IFileService.java | 0 .../heartbeat/HeartBeatController.java | 0 .../support/heartbeat/HeartBeatRecordDao.java | 0 .../heartbeat/HeartBeatRecordEntity.java | 0 .../support/heartbeat/HeartBeatRecordVO.java | 0 .../support/heartbeat/HeartBeatService.java | 0 .../support/idgenerator/IdGeneratorDao.java | 0 .../idgenerator/IdGeneratorManager.java | 0 .../idgenerator/IdGeneratorService.java | 0 .../idgenerator/constant/IdGeneratorEnum.java | 0 .../constant/IdGeneratorRuleTypeEnum.java | 0 .../idgenerator/domain/IdGeneratorEntity.java | 0 .../domain/IdGeneratorLastNumberDTO.java | 0 .../idgenerator/domain/IdGeneratorPOJO.java | 0 .../domain/IdGeneratorRecordDTO.java | 0 .../support/quartz/constant/QuartzConst.java | 0 .../quartz/constant/TaskResultEnum.java | 0 .../quartz/constant/TaskStatusEnum.java | 0 .../quartz/controller/QuartzController.java | 0 .../support/quartz/dao/QuartzTaskDao.java | 0 .../support/quartz/dao/QuartzTaskLogDao.java | 0 .../quartz/domain/dto/QuartzLogQueryDTO.java | 0 .../quartz/domain/dto/QuartzQueryDTO.java | 0 .../quartz/domain/dto/QuartzTaskDTO.java | 0 .../quartz/domain/dto/QuartzTaskLogVO.java | 0 .../quartz/domain/dto/QuartzTaskVO.java | 0 .../domain/entity/QuartzTaskEntity.java | 0 .../domain/entity/QuartzTaskLogEntity.java | 0 .../support/quartz/service/QuartzTask.java | 0 .../quartz/service/QuartzTaskLogService.java | 0 .../quartz/service/QuartzTaskService.java | 0 .../support/quartz/task/test/Example.java | 0 .../smartreload/SmartReloadCommand.java | 0 .../smartreload/SmartReloadController.java | 0 .../smartreload/SmartReloadService.java | 0 .../smartreload/dao/ReloadItemDao.java | 0 .../smartreload/dao/ReloadResultDao.java | 0 .../domain/dto/ReloadItemUpdateDTO.java | 0 .../smartreload/domain/dto/ReloadItemVO.java | 0 .../domain/dto/ReloadResultVO.java | 0 .../domain/entity/ReloadItemEntity.java | 0 .../domain/entity/ReloadResultEntity.java | 0 .../support/websocket/MessageTypeEnum.java | 0 .../support/websocket/WebSocketServer.java | 0 .../websocket/domain/MessageCommonDTO.java | 0 .../support/websocket/domain/MessageDTO.java | 0 .../domain/WebSocketHeartBeatDTO.java | 0 .../system/datascope/DataScopeController.java | 0 .../system/datascope/DataScopeRoleDao.java | 0 .../system/datascope/MyBatisPlugin.java | 0 .../datascope/constant/DataScopeTypeEnum.java | 0 .../constant/DataScopeViewTypeEnum.java | 0 .../constant/DataScopeWhereInTypeEnum.java | 0 .../domain/dto/DataScopeAndViewTypeVO.java | 0 .../domain/dto/DataScopeBatchSetDTO.java | 0 .../domain/dto/DataScopeBatchSetRoleDTO.java | 0 .../datascope/domain/dto/DataScopeDTO.java | 0 .../domain/dto/DataScopeSelectVO.java | 0 .../domain/dto/DataScopeSqlConfigDTO.java | 0 .../domain/dto/DataScopeViewTypeVO.java | 0 .../domain/entity/DataScopeRoleEntity.java | 0 .../datascope/service/DataScopeService.java | 0 .../service/DataScopeSqlConfigService.java | 0 .../service/DataScopeViewService.java | 0 .../strategy/DataScopePowerStrategy.java | 0 .../department/DepartmentController.java | 0 .../system/department/DepartmentDao.java | 0 .../DepartmentResponseCodeConst.java | 0 .../system/department/DepartmentService.java | 0 .../department/DepartmentTreeService.java | 0 .../domain/dto/DepartmentCreateDTO.java | 0 .../domain/dto/DepartmentUpdateDTO.java | 0 .../department/domain/dto/DepartmentVO.java | 0 .../domain/entity/DepartmentEntity.java | 0 .../system/employee/EmployeeController.java | 0 .../module/system/employee/EmployeeDao.java | 0 .../system/employee/EmployeeService.java | 0 .../constant/EmployeeResponseCodeConst.java | 0 .../employee/constant/EmployeeStatusEnum.java | 0 .../system/employee/domain/bo/EmployeeBO.java | 0 .../employee/domain/dto/EmployeeAddDTO.java | 0 .../employee/domain/dto/EmployeeBaseDTO.java | 0 .../dto/EmployeeBatchUpdateStatusDTO.java | 0 .../employee/domain/dto/EmployeeDTO.java | 0 .../domain/dto/EmployeeLoginFormDTO.java | 0 .../employee/domain/dto/EmployeeQueryDTO.java | 0 .../domain/dto/EmployeeQueryExportDTO.java | 0 .../domain/dto/EmployeeUpdateDTO.java | 0 .../domain/dto/EmployeeUpdatePwdDTO.java | 0 .../domain/dto/EmployeeUpdateRolesDTO.java | 0 .../domain/entity/EmployeeEntity.java | 0 .../system/employee/domain/vo/EmployeeVO.java | 0 .../module/system/login/LoginController.java | 0 .../system/login/LoginResponseCodeConst.java | 0 .../module/system/login/LoginService.java | 0 .../system/login/LoginTokenService.java | 0 .../module/system/login/domain/KaptchaVO.java | 0 .../system/login/domain/LoginCacheDTO.java | 0 .../system/login/domain/LoginDetailVO.java | 0 .../login/domain/LoginPrivilegeDTO.java | 0 .../system/login/domain/RequestTokenBO.java | 0 .../system/position/PositionController.java | 0 .../module/system/position/PositionDao.java | 0 .../position/PositionResponseCodeConst.java | 0 .../system/position/PositionService.java | 0 .../position/domain/dto/PositionAddDTO.java | 0 .../position/domain/dto/PositionQueryDTO.java | 0 .../domain/dto/PositionRelationAddDTO.java | 0 .../domain/dto/PositionRelationQueryDTO.java | 0 .../domain/dto/PositionRelationResultDTO.java | 0 .../position/domain/dto/PositionResultVO.java | 0 .../domain/dto/PositionUpdateDTO.java | 0 .../domain/entity/PositionEntity.java | 0 .../domain/entity/PositionRelationEntity.java | 0 .../constant/PrivilegeResponseCodeConst.java | 0 .../privilege/constant/PrivilegeTypeEnum.java | 0 .../controller/PrivilegeController.java | 0 .../system/privilege/dao/PrivilegeDao.java | 0 .../domain/dto/PrivilegeFunctionDTO.java | 0 .../domain/dto/PrivilegeFunctionVO.java | 0 .../domain/dto/PrivilegeMenuDTO.java | 0 .../privilege/domain/dto/PrivilegeMenuVO.java | 0 .../domain/dto/PrivilegeRequestUrlVO.java | 0 .../domain/entity/PrivilegeEntity.java | 0 .../service/PrivilegeEmployeeService.java | 0 .../service/PrivilegeRequestUrlService.java | 0 .../privilege/service/PrivilegeService.java | 0 .../system/role/basic/RoleController.java | 0 .../module/system/role/basic/RoleDao.java | 0 .../role/basic/RoleResponseCodeConst.java | 0 .../module/system/role/basic/RoleService.java | 0 .../role/basic/domain/dto/RoleAddDTO.java | 0 .../role/basic/domain/dto/RoleBatchDTO.java | 0 .../role/basic/domain/dto/RoleQueryDTO.java | 0 .../role/basic/domain/dto/RoleSelectedVO.java | 0 .../role/basic/domain/dto/RoleUpdateDTO.java | 0 .../system/role/basic/domain/dto/RoleVO.java | 0 .../role/basic/domain/entity/RoleEntity.java | 0 .../roleemployee/RoleEmployeeController.java | 0 .../role/roleemployee/RoleEmployeeDao.java | 0 .../roleemployee/RoleEmployeeService.java | 0 .../roleemployee/domain/RoleEmployeeDTO.java | 0 .../domain/RoleEmployeeEntity.java | 0 .../RolePrivilegeController.java | 0 .../role/roleprivilege/RolePrivilegeDao.java | 0 .../roleprivilege/RolePrivilegeService.java | 0 .../domain/dto/RolePrivilegeDTO.java | 0 .../domain/dto/RolePrivilegeSimpleDTO.java | 0 .../domain/dto/RolePrivilegeTreeVO.java | 0 .../domain/entity/RolePrivilegeEntity.java | 0 .../systemconfig/SystemConfigController.java | 0 .../system/systemconfig/SystemConfigDao.java | 0 .../systemconfig/SystemConfigService.java | 0 .../constant/SystemConfigDataType.java | 0 .../constant/SystemConfigEnum.java | 0 .../SystemConfigResponseCodeConst.java | 0 .../domain/dto/SystemConfigAddDTO.java | 0 .../domain/dto/SystemConfigDTO.java | 0 .../domain/dto/SystemConfigQueryDTO.java | 0 .../domain/dto/SystemConfigUpdateDTO.java | 0 .../domain/dto/SystemConfigVO.java | 0 .../domain/entity/SystemConfigEntity.java | 0 .../third/SmartApplicationContext.java | 0 .../smartadmin/third/SmartRedisService.java | 0 .../smartadmin/util/SmartBaseEnumUtil.java | 0 .../smartadmin/util/SmartBeanUtil.java | 0 .../smartadmin/util/SmartBigDecimalUtil.java | 0 .../smartadmin/util/SmartDateUtil.java | 0 .../smartadmin/util/SmartDigestUtil.java | 0 .../util/SmartEasyPoiExcelUtil.java | 0 .../smartadmin/util/SmartFileUtil.java | 0 .../smartadmin/util/SmartHttpUtil.java | 0 .../lab1024/smartadmin/util/SmartIPUtil.java | 0 .../smartadmin/util/SmartPageUtil.java | 0 .../smartadmin/util/SmartQuartzUtil.java | 0 .../util/SmartRequestTokenUtil.java | 0 .../smartadmin/util/SmartSendMailUtil.java | 0 .../smartadmin/util/SmartStringUtil.java | 0 .../smartadmin/util/SmartThreadFactory.java | 0 .../util/SmartVerificationUtil.java | 0 .../smartadmin/util/excel/SmartExcel.java | 0 .../util/excel/SmartExcelFileType.java | 0 .../util/excel/SmartExcelReader.java | 0 .../smartadmin/util/excel/SmartSheet.java | 0 .../src/main/resources/banner.txt | 0 .../main/resources/dev/application.properties | 0 .../src/main/resources/dev/log4j2.xml | 0 .../src/main/resources/dev/spy.properties | 0 .../mapper/business/email/EmailMapper.xml | 0 .../business/log/OrderOperateLogMapper.xml | 0 .../business/log/UserLoginLogMapper.xml | 0 .../business/log/UserOperateLogMapper.xml | 0 .../mapper/business/notice/NoticeMapper.xml | 0 .../notice/NoticeReceiveRecordMapper.xml | 0 .../mapper/business/peony/PeonyMapper.xml | 0 .../support/codegenerator/TableMapper.xml | 0 .../mapper/support/file/FileMapper.xml | 0 .../heartbeat/HeartBeatRecordMapper.xml | 0 .../support/idgenerator/IdGeneratorMapper.xml | 0 .../support/quartz/QuartzTaskLogMapper.xml | 0 .../support/quartz/QuartzTaskMapper.xml | 0 .../support/smartreload/ReloadItemMapper.xml | 0 .../smartreload/ReloadResultMapper.xml | 0 .../system/datascope/DataScopeRoleMapper.xml | 0 .../system/department/DepartmentMapper.xml | 0 .../mapper/system/employee/EmployeeMapper.xml | 0 .../mapper/system/position/PositionMapper.xml | 0 .../system/privilege/PrivilegeMapper.xml | 0 .../mapper/system/role/RoleEmployeeMapper.xml | 0 .../mapper/system/role/RoleMapper.xml | 0 .../system/role/RolePrivilegeMapper.xml | 0 .../systemconfig/SystemConfigMapper.xml | 0 .../main/resources/pre/application.properties | 0 .../src/main/resources/pre/log4j2.xml | 0 .../resources/prod/application.properties | 0 .../src/main/resources/prod/log4j2.xml | 0 .../main/resources/sit/application.properties | 0 .../src/main/resources/sit/log4j2.xml | 0 .../src/main/resources/sit/spy.properties | 0 .../main/resources/sql/quartz_mysql_2.3.0.sql | 0 .../src/main/resources/sql/smart-admin.sql | 0 .../codegenerator/java/AddDTO.java.vm | 0 .../codegenerator/java/Controller.java.vm | 0 .../templates/codegenerator/java/Dao.java.vm | 0 .../templates/codegenerator/java/Dao.xml.vm | 0 .../codegenerator/java/Entity.java.vm | 0 .../codegenerator/java/ExcelVO.java.vm | 0 .../codegenerator/java/QueryDTO.java.vm | 0 .../codegenerator/java/Service.java.vm | 0 .../codegenerator/java/UpdateDTO.java.vm | 0 .../templates/codegenerator/java/VO.java.vm | 0 .../templates/codegenerator/web/Api.js.vm | 0 .../templates/codegenerator/web/List.vue.vm | 0 .../codegenerator/web/ListForm.vue.vm | 0 .../templates/codegenerator/web/Router.js.vm | 0 .../java/net/lab1024/smartadmin/BaseTest.java | 0 .../SmartAdminApplicationTests.java | 0 .../CodeGeneratorServiceTest.java | 0 .../.babelrc | 0 .../.editorconfig | 0 .../.env.development | 0 .../.env.local | 0 .../.env.prod | 0 .../.env.sit | 0 .../.eslintignore | 0 .../.eslintrc.js | 0 .../.gitignore | 0 .../.postcssrc.js | 0 .../.travis.yml | 0 .../README.md | 0 .../cypress.json | 0 .../doc/notice.txt | 0 smart-admin-web/package-lock.json | 15500 ++++++++++++++ .../package.json | 0 .../public/favicon.ico | Bin .../public/index.html | 0 .../src/App.vue | 0 .../src/api/data-scope.js | 0 .../src/api/department.js | 0 .../src/api/email.js | 0 .../src/api/employee.js | 0 .../src/api/file.js | 0 .../src/api/heart-beat.js | 0 .../src/api/login.js | 0 .../src/api/notice.js | 0 .../src/api/online-user.js | 0 .../src/api/peony.js | 0 .../src/api/position.js | 0 .../src/api/privilege.js | 0 .../src/api/role.js | 0 .../src/api/smart-reload.js | 0 .../src/api/system-config.js | 0 .../src/api/task-manage.js | 0 .../src/api/user-log.js | 0 .../src/api/user.js | 0 .../src/assets/icons/demo.css | 0 .../src/assets/icons/demo_index.html | 0 .../font_1299963_2zqwx2axi0j/demo.css | 0 .../font_1299963_2zqwx2axi0j/demo_index.html | 0 .../font_1299963_2zqwx2axi0j/iconfont.css | 0 .../font_1299963_2zqwx2axi0j/iconfont.eot | Bin .../font_1299963_2zqwx2axi0j/iconfont.js | 0 .../font_1299963_2zqwx2axi0j/iconfont.svg | 0 .../font_1299963_2zqwx2axi0j/iconfont.ttf | Bin .../font_1299963_2zqwx2axi0j/iconfont.woff | Bin .../font_1299963_2zqwx2axi0j/iconfont.woff2 | Bin .../src/assets/icons/iconfont.css | 0 .../src/assets/icons/iconfont.eot | Bin .../src/assets/icons/iconfont.js | 0 .../src/assets/icons/iconfont.svg | 0 .../src/assets/icons/iconfont.ttf | Bin .../src/assets/icons/iconfont.woff | Bin .../src/assets/icons/iconfont.woff2 | Bin .../src/assets/images/default_icon.png | Bin .../assets/images/error-page/error-401.svg | 0 .../assets/images/error-page/error-404.svg | 0 .../assets/images/error-page/error-500.svg | 0 .../src/assets/images/icon-qr-qq-wechat.png | Bin .../assets/images/icon-social-bilibili.svg | 0 .../src/assets/images/icon-social-juejin.svg | 0 .../src/assets/images/icon-social-twitter.svg | 0 .../src/assets/images/icon-social-zhihu.svg | 0 .../src/assets/images/login-alipay.png | Bin .../src/assets/images/login-bg.jpg | Bin .../src/assets/images/login-logo.png | Bin .../src/assets/images/login-sina.png | Bin .../src/assets/images/login-taobao.png | Bin .../src/assets/images/login_desc_bg.png | Bin .../src/assets/images/login_logo.png | Bin .../src/assets/images/logo-min.png | Bin .../src/assets/images/logo.png | Bin .../src/assets/images/logo1.png | Bin .../src/assets/images/message.png | Bin .../src/assets/images/shadow.png | Bin .../images/slider/sub_slider_active.png | Bin .../images/slider/sub_slider_default.png | Bin .../src/assets/style/lib/animate.css | 0 .../components/active-plate/active-plate.vue | 0 .../src/components/charts/bar.vue | 0 .../src/components/charts/index.js | 0 .../src/components/charts/pie.vue | 0 .../src/components/charts/theme.json | 0 .../components/common-icon/common-icon.vue | 0 .../src/components/common-icon/index.js | 0 .../src/components/count-to/count-to.vue | 0 .../src/components/count-to/index.js | 0 .../src/components/count-to/index.less | 0 .../src/components/editor/editor.vue | 0 .../src/components/editor/index.js | 0 .../components/employee/employee-selector.vue | 0 .../src/components/icons/icons.vue | 0 .../src/components/icons/index.js | 0 .../main/components/a-back-top/index.js | 0 .../main/components/a-back-top/index.vue | 0 .../main/components/fullscreen/fullscreen.vue | 0 .../main/components/fullscreen/index.js | 0 .../custom-bread-crumb.less | 0 .../custom-bread-crumb/custom-bread-crumb.vue | 0 .../header-bar/custom-bread-crumb/index.js | 0 .../components/header-bar/header-bar.less | 0 .../main/components/header-bar/header-bar.vue | 0 .../main/components/header-bar/index.js | 0 .../header-bar/sider-trigger/index.js | 0 .../sider-trigger/sider-trigger.less | 0 .../sider-trigger/sider-trigger.vue | 0 .../main/components/language/index.js | 0 .../main/components/language/language.vue | 0 .../main/components/notice/notice.vue | 0 .../components/side-menu/collapsed-menu.vue | 0 .../main/components/side-menu/index.js | 0 .../main/components/side-menu/item-mixin.js | 0 .../main/components/side-menu/mixin.js | 0 .../components/side-menu/side-menu-item.vue | 0 .../main/components/side-menu/side-menu.less | 0 .../main/components/side-menu/side-menu.vue | 0 .../main/components/tags-nav/index.js | 0 .../main/components/tags-nav/tags-nav.less | 0 .../main/components/tags-nav/tags-nav.vue | 0 .../components/main/components/user/index.js | 0 .../components/main/components/user/user.less | 0 .../components/main/components/user/user.vue | 0 .../src/components/main/index.js | 0 .../src/components/main/main.less | 0 .../src/components/main/main.vue | 0 .../src/components/smart-admin-ad/ad.vue | 0 .../src/components/smart-admin-ad/index.js | 0 .../src/components/tables/edit.vue | 0 .../src/components/tables/handle-btns.js | 0 .../src/components/tables/index.js | 0 .../src/components/tables/index.less | 0 .../src/components/tables/tables.vue | 0 .../src/config/index.js | 0 .../src/constants/file.js | 0 .../src/constants/index.js | 0 .../src/constants/login.js | 0 .../src/constants/notice.js | 0 .../src/constants/privilege.js | 0 .../src/constants/table-page.js | 0 .../src/directives/directives.js | 0 .../src/directives/index.js | 0 .../src/directives/module/clipboard.js | 0 .../src/directives/module/draggable.js | 0 .../src/directives/module/privilege.js | 0 .../src/filters/index.js | 0 .../src/lib/cookie.js | 0 .../src/lib/http.js | 0 .../src/lib/local.js | 0 .../src/lib/menu-func.js | 0 .../src/lib/printPlugs.js | 0 .../src/lib/render-dom.js | 0 .../src/lib/table-action.js | 0 .../src/lib/util.js | 0 .../src/locale/index.js | 0 .../src/locale/lang/en-US.js | 0 .../src/locale/lang/zh-CN.js | 0 .../src/locale/lang/zh-TW.js | 0 .../src/main.js | 0 .../src/main.less | 0 .../src/plugins/error-store/index.js | 0 .../src/plugins/index.js | 0 .../src/router/before-close.js | 0 .../src/router/index.js | 0 .../src/router/module/business/email.js | 0 .../src/router/module/business/index.js | 0 .../src/router/module/business/keep-alive.js | 0 .../src/router/module/business/notice.js | 0 .../src/router/module/business/peony.js | 0 .../router/module/business/three-router.js | 0 .../src/router/module/error.js | 0 .../src/router/module/home.js | 0 .../src/router/module/support/api-doc.js | 0 .../src/router/module/support/heart-beat.js | 0 .../src/router/module/support/index.js | 0 .../src/router/module/support/monitor.js | 0 .../src/router/module/support/reload.js | 0 .../src/router/module/support/task.js | 0 .../src/router/module/system/employee.js | 0 .../src/router/module/system/file.js | 0 .../src/router/module/system/index.js | 0 .../router/module/system/system-setting.js | 0 .../src/router/module/system/user-log.js | 0 .../src/router/routers.js | 0 .../src/store/index.js | 0 .../src/store/module/app.js | 0 .../src/store/module/notice.js | 0 .../src/store/module/user.js | 0 .../src/themes/ReadMe.md | 0 .../src/themes/index.less | 0 .../src/views/business/email/email-list.vue | 0 .../src/views/business/email/send-mail.vue | 0 .../views/business/keep-alive/add-content.vue | 0 .../business/keep-alive/content-list.vue | 0 .../views/business/notice/notice-detail.vue | 0 .../src/views/business/notice/notice-list.vue | 0 .../views/business/notice/person-notice.vue | 0 .../peony/components/peony-list-form.vue | 0 .../src/views/business/peony/peony-list.vue | 0 .../three-level-router-view.vue | 0 .../src/views/error-page/401.vue | 0 .../src/views/error-page/404.vue | 0 .../src/views/error-page/500.vue | 0 .../src/views/error-page/back-btn-group.vue | 0 .../src/views/error-page/error-content.vue | 0 .../src/views/error-page/error.less | 0 .../src/views/home/components/card.vue | 0 .../src/views/home/components/chart-bar.vue | 0 .../views/home/components/chart-funnel.vue | 0 .../src/views/home/components/chart-gauge.vue | 0 .../src/views/home/components/chart-line.vue | 0 .../src/views/home/components/chart-pie.vue | 0 .../src/views/home/components/home-circle.vue | 0 .../views/home/components/home-progress.vue | 0 .../src/views/home/components/theme.json | 0 .../src/views/home/home.vue | 0 .../src/views/home/index.js | 0 .../src/views/login/canvas.js | 0 .../src/views/login/components/login-form.vue | 0 .../src/views/login/login.less | 0 .../src/views/login/login.vue | 0 .../src/views/support/api-doc/swagger.vue | 0 .../support/heart-beat/heart-beat-list.vue | 0 .../src/views/support/monitor/online-user.vue | 0 .../src/views/support/monitor/sql.vue | 0 .../reload/smart-reload/smart-reload-list.vue | 0 .../src/views/support/task/task-list.vue | 0 .../department-employee-tree-item.vue | 0 .../department-employee-tree.vue | 0 .../employee/position/position-list.vue | 0 .../employee-table-add/employee-table-add.vue | 0 .../employee-table-detail.vue | 0 .../employee-table/employee-table.vue | 0 .../role-employee/role-employee-manage.vue | 0 .../role-data-scope/role-data-scope.vue | 0 .../role/components/role-list/role-list.vue | 0 .../role/components/role-tree/role-tree.vue | 0 .../system/employee/role/role-manage.vue | 0 .../src/views/system/file/file-list.vue | 0 .../system-config/system-config.vue | 0 .../components/privilege-form.vue | 0 .../system-privilege/system-privilege.vue | 0 .../views/system/user-log/user-login-log.vue | 0 .../system/user-log/user-operate-log.vue | 0 .../src/views/three-router/three-content.vue | 0 .../tests/e2e/.eslintrc | 0 .../tests/e2e/plugins/index.js | 0 .../tests/e2e/specs/test.js | 0 .../tests/e2e/support/commands.js | 0 .../tests/e2e/support/index.js | 0 .../tests/unit/.eslintrc.js | 0 .../tests/unit/HelloWorld.spec.js | 0 .../vscode/settings.json | 0 .../vue.config.js | 0 smart_admin_v2/smart-admin-api/.gitignore | 35 - smart_admin_v2/smart-admin-api/pom.xml | 368 - .../smart-admin-api/sa-admin/pom.xml | 47 - .../sa/admin/SmartAdminApplication.java | 33 - .../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 | 71 - .../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 | 79 - .../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 | 75 - .../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 | 118 - .../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 | 144 - .../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 | 54 - .../system/datascope/DataScopeController.java | 41 - .../system/datascope/MyBatisPlugin.java | 186 - .../datascope/constant/DataScopeTypeEnum.java | 56 - .../constant/DataScopeViewTypeEnum.java | 53 - .../constant/DataScopeWhereInTypeEnum.java | 42 - .../domain/DataScopeAndViewTypeVO.java | 35 - .../system/datascope/domain/DataScopeDTO.java | 32 - .../datascope/domain/DataScopeSqlConfig.java | 41 - .../datascope/domain/DataScopeViewTypeVO.java | 28 - .../datascope/service/DataScopeService.java | 75 - .../service/DataScopeSqlConfigService.java | 149 - .../service/DataScopeViewService.java | 162 - .../strategy/DataScopePowerStrategy.java | 27 - .../controller/DepartmentController.java | 74 - .../system/department/dao/DepartmentDao.java | 40 - .../domain/entity/DepartmentEntity.java | 62 - .../domain/form/DepartmentAddForm.java | 36 - .../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 | 108 - .../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 | 89 - .../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 | 72 - .../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 | 95 - .../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 | 36 - .../domain/form/RoleDataScopeUpdateForm.java | 43 - .../domain/form/RoleEmployeeQueryForm.java | 24 - .../domain/form/RoleEmployeeUpdateForm.java | 30 - .../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 | 26 - .../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 | 63 - .../system/support/AdminConfigController.java | 60 - .../system/support/AdminDictController.java | 83 - .../system/support/AdminFileController.java | 51 - .../support/AdminHeartBeatController.java | 41 - .../support/AdminHelpDocController.java | 114 - .../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 | 99 - .../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 | 24 - .../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 | 99 - .../src/main/resources/prod/application.yaml | 18 - .../src/main/resources/prod/log4j2.xml | 99 - .../src/main/resources/test/application.yaml | 18 - .../src/main/resources/test/log4j2.xml | 99 - .../src/main/resources/test/spy.properties | 18 - .../sa/admin/SmartAdminApplicationTest.java | 25 - .../smart-admin-api/sa-common/pom.xml | 236 - .../common/common/annoation/NoNeedLogin.java | 20 - .../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 | 53 - .../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 - .../sa/common/common/domain/ValidateList.java | 153 - .../common/common/enumeration/BaseEnum.java | 99 - .../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 | 30 - .../BigDecimalNullZeroSerializer.java | 29 - .../serializer/DictValueVoSerializer.java | 52 - .../json/serializer/FileKeySerializer.java | 45 - .../json/serializer/FileKeyVoSerializer.java | 46 - .../json/serializer/LongJsonSerializer.java | 28 - .../security/AbstractSecurityConfig.java | 91 - .../SecurityAuthenticationFailHandler.java | 43 - .../common/security/SecurityMethodSource.java | 66 - .../SecurityPermissionCheckService.java | 74 - .../common/security/SecurityTokenFilter.java | 64 - .../common/swagger/ApiModelPropertyEnum.java | 40 - .../swagger/Swagger2MapperImplExtension.java | 91 - .../SwaggerApiModelPropertyEnumPlugin.java | 77 - .../sa/common/common/util/SmartBeanUtil.java | 94 - .../common/util/SmartBigDecimalUtil.java | 247 - .../common/util/SmartEasyPoiExcelUtil.java | 114 - .../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 | 334 - .../common/util/SmartVerificationUtil.java | 98 - .../validator/enumeration/CheckEnum.java | 52 - .../validator/enumeration/EnumValidator.java | 75 - .../lab1024/sa/common/config/AsyncConfig.java | 71 - .../sa/common/config/CorsFilterConfig.java | 45 - .../sa/common/config/DataSourceConfig.java | 197 - .../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 | 72 - .../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 | 150 - .../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 | 38 - .../support/captcha/config/CaptchaConfig.java | 46 - .../support/captcha/config/CaptchaNoise.java | 44 - .../captcha/config/CaptchaWordRenderer.java | 74 - .../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 | 39 - .../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 | 38 - .../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 | 72 - .../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 | 22 - .../reload/core/domain/SmartReloadItem.java | 32 - .../reload/core/domain/SmartReloadObject.java | 32 - .../reload/core/domain/SmartReloadResult.java | 43 - .../core/thread/SmartReloadRunnable.java | 120 - .../support/reload/dao/ReloadItemDao.java | 25 - .../support/reload/dao/ReloadResultDao.java | 26 - .../support/reload/domain/ReloadForm.java | 31 - .../reload/domain/ReloadItemEntity.java | 50 - .../support/reload/domain/ReloadItemVO.java | 36 - .../reload/domain/ReloadResultEntity.java | 53 - .../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 | 52 - .../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 | 19 - .../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 | 134 - .../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 | 134 - .../src/main/resources/prod/sa-common.yaml | 134 - .../src/main/resources/test/sa-common.yaml | 134 - .../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 - .../.vscode/launch.json | 26 - .../javascript-ant-design-vue3/README.en.md | 0 .../javascript-ant-design-vue3/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 | 4 - .../public/favicon.ico | Bin 16958 -> 0 bytes .../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 27898 -> 0 bytes .../assets/images/1024lab/xiaozhen-gzh.jpg | Bin 8786 -> 0 bytes .../assets/images/1024lab/zhuoda-wechat.jpg | Bin 42080 -> 0 bytes .../src/assets/images/login/ali-icon.png | Bin 7011 -> 0 bytes .../src/assets/images/login/google-icon.png | Bin 6228 -> 0 bytes .../src/assets/images/login/login-bg.jpg | Bin 403238 -> 0 bytes .../login/login-form-open-eyes-close.png | Bin 4914 -> 0 bytes .../images/login/login-form-open-eyes.png | Bin 6557 -> 0 bytes .../src/assets/images/login/login-qr.png | Bin 11297 -> 0 bytes .../src/assets/images/login/qq-icon.png | Bin 5353 -> 0 bytes .../src/assets/images/login/wechat-icon.png | Bin 6657 -> 0 bytes .../src/assets/images/login/weibo-icon.png | Bin 7799 -> 0 bytes .../src/assets/images/logo/logo-min.png | Bin 2079 -> 0 bytes .../src/assets/images/logo/logo.png | Bin 6053 -> 0 bytes .../images/logo/smart-admin-logo-white.png | Bin 8106 -> 0 bytes .../assets/images/logo/smart-admin-logo.png | Bin 14325 -> 0 bytes .../src/assets/images/notice/edit_icon.png | Bin 700 -> 0 bytes .../src/assets/images/notice/file_icon.png | Bin 488 -> 0 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 | 29 - .../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 | 22 - .../src/lib/smart-wartermark.js | 103 - .../javascript-ant-design-vue3/src/main.js | 89 - .../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 | 150 - .../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 | 157 - .../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 | 252 - ...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.js | 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 | 95 - .../src/views/system/login/login.less | 175 - .../src/views/system/login/login.vue | 206 - .../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 | 94 - .../typescript-ant-design-vue3/.env | 2 - .../.env.development | 8 - .../typescript-ant-design-vue3/.env.localhost | 8 - .../typescript-ant-design-vue3/.env.pre | 8 - .../.env.production | 8 - .../typescript-ant-design-vue3/.env.test | 8 - .../typescript-ant-design-vue3/.eslintignore | 17 - .../typescript-ant-design-vue3/.eslintrc.js | 76 - .../typescript-ant-design-vue3/.gitignore | 6 - .../typescript-ant-design-vue3/.prettierrc.js | 31 - .../.stylelintignore | 3 - .../.stylelintrc.js | 70 - .../typescript-ant-design-vue3/README.md | 0 .../typescript-ant-design-vue3/index.html | 24 - .../typescript-ant-design-vue3/package.json | 82 - .../public/favicon.ico | Bin 16958 -> 0 bytes .../typescript-ant-design-vue3/src/App.vue | 38 - .../src/api/base-model/page-param-model.ts | 35 - .../src/api/base-model/page-result-model.ts | 50 - .../src/api/base-model/response-model.ts | 30 - .../src/api/base-model/sort-item-model.ts | 24 - .../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 27898 -> 0 bytes .../assets/images/1024lab/xiaozhen-gzh.jpg | Bin 8786 -> 0 bytes .../assets/images/1024lab/zhuoda-wechat.jpg | Bin 42080 -> 0 bytes .../src/assets/images/login/ali-icon.png | Bin 7011 -> 0 bytes .../src/assets/images/login/google-icon.png | Bin 6228 -> 0 bytes .../src/assets/images/login/login-bg.jpg | Bin 3517917 -> 0 bytes .../login/login-form-open-eyes-close.png | Bin 4914 -> 0 bytes .../images/login/login-form-open-eyes.png | Bin 6557 -> 0 bytes .../src/assets/images/login/login-qr.png | Bin 11297 -> 0 bytes .../src/assets/images/login/qq-icon.png | Bin 5353 -> 0 bytes .../src/assets/images/login/wechat-icon.png | Bin 6657 -> 0 bytes .../src/assets/images/login/weibo-icon.png | Bin 7799 -> 0 bytes .../src/assets/images/logo/logo-min.png | Bin 2079 -> 0 bytes .../src/assets/images/logo/logo.png | Bin 6053 -> 0 bytes .../images/logo/smart-admin-logo-white.png | Bin 8106 -> 0 bytes .../assets/images/logo/smart-admin-logo.png | Bin 14325 -> 0 bytes .../src/assets/images/notice/edit_icon.png | Bin 700 -> 0 bytes .../src/assets/images/notice/file_icon.png | Bin 488 -> 0 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.ts | 17546 ---------------- .../framework/area-cascader/province-city.ts | 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.ts | 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.ts | 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.ts | 35 - .../constants/business/erp/category-const.ts | 25 - .../src/constants/business/erp/goods-const.ts | 28 - .../constants/business/oa/enterprise-const.ts | 25 - .../src/constants/business/oa/notice-const.ts | 37 - .../src/constants/common-const.ts | 57 - .../src/constants/index.ts | 38 - .../src/constants/layout-const.ts | 22 - .../src/constants/local-storage-key-const.ts | 31 - .../src/constants/regular-const.ts | 28 - .../src/constants/support/change-log-const.ts | 32 - .../constants/support/code-generator-const.ts | 120 - .../constants/support/data-tracer-const.ts | 31 - .../src/constants/support/file-const.ts | 33 - .../src/constants/support/login-log-const.ts | 30 - .../src/constants/support/table-id-const.ts | 57 - .../src/constants/system/employee-const.ts | 30 - .../src/constants/system/home-const.ts | 15 - .../constants/system/login-device-const.ts | 34 - .../src/constants/system/menu-const.ts | 50 - .../src/directives/privilege.ts | 31 - .../src/i18n/index.ts | 41 - .../src/i18n/lang/en-US/index.ts | 17 - .../src/i18n/lang/zh-CN/index.ts | 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.ts | 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.ts | 130 - .../src/lib/default-time-ranges.ts | 29 - .../src/lib/highlight-line-number.ts | 226 - .../src/lib/smart-sentry.ts | 24 - .../src/lib/smart-wartermark.ts | 114 - .../typescript-ant-design-vue3/src/main.ts | 88 - .../src/plugins/privilege-plugin.ts | 30 - .../src/plugins/smart-enums-plugin.ts | 80 - .../src/router/index.ts | 152 - .../src/router/routers.ts | 14 - .../src/router/support/help-doc.ts | 28 - .../src/router/system/home.ts | 40 - .../src/router/system/login.ts | 22 - .../src/shims-vue.d.ts | 29 - .../src/store/index.ts | 12 - .../src/store/modules/model/UserTagNav.ts | 36 - .../src/store/modules/system/app-config.ts | 57 - .../src/store/modules/system/role.ts | 95 - .../src/store/modules/system/spin.ts | 34 - .../src/store/modules/system/user.ts | 306 - .../src/theme/index.less | 153 - .../src/theme/smart-admin.less | 112 - .../src/types/config.d.ts | 48 - .../src/types/env.d.ts | 18 - .../src/types/json-viewer.d.ts | 11 - .../src/types/smart-enum.d.ts | 28 - .../src/types/user.d.ts | 57 - .../src/utils/cookie-util.ts | 29 - .../src/utils/local-util.ts | 21 - .../src/utils/str-util.ts | 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.ts | 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.ts | 151 - .../system/menu/menu-list-table-columns.ts | 83 - .../src/views/system/menu/menu-list.vue | 256 - .../src/vite-env.d.ts | 1 - .../typescript-ant-design-vue3/tsconfig.json | 42 - .../typescript-ant-design-vue3/vite.config.ts | 65 - smart_admin_v2/smart_admin_v2.sql | 2068 -- .../代码规范_v1 => 代码规范}/api接口规范.md | 0 .../front-standard-guide.md | 0 .../java-standard-guide.md | 0 .../快速启动_v1 => 快速部署}/README.md | 0 1848 files changed, 15509 insertions(+), 130864 deletions(-) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/.browserslistrc (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/.editorconfig (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/.env.development (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/.env.local (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/.env.pre (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/.env.prod (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/.env.sit (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/.eslintignore (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/.eslintrc.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/.gitignore (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/.postcssrc.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/.prettierrc.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/.sentryclirc (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/README.md (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/babel.config.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/package.json (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/public/favicon.ico (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/public/index.html (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/App.vue (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/api/employee.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/api/file.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/api/login.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/api/system-config.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/api/user.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/assets/css/index.scss (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/assets/logo.png (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/components/employee/department-employee-selector.vue (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/components/form/select-picker/SmartEnumSelectPicker.vue (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/components/form/select-picker/SmartSelectPicker (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/components/mixin/session-mixin.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/components/van-bar/BackNavBar.vue (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/components/van-bar/RouterNavBar.vue (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/config/index.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/constants/area.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/constants/erp/contact-company.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/constants/erp/index.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/constants/file.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/constants/index.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/constants/school.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/filters/filter.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/filters/index.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/lib/cookie.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/lib/erp-http.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/lib/http.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/lib/local.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/lib/menu-func.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/lib/printPlugs.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/lib/render-dom.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/lib/smart-sentry.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/lib/util.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/lib/watermark.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/main.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/plugins/smart-sentry.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/plugins/smart.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/plugins/vant.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/router/dashboard/index.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/router/develop/develop.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/router/error/error.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/router/index.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/router/login/login.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/router/router-const.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/router/routers.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/router/user/user.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/store/index.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/store/module/app.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/store/module/user.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/themes/index.scss (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/utils/index.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/utils/request.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/utils/validate.js (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/views/dashboard/dashboard.vue (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/views/develop/config.vue (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/views/error/404.vue (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/views/login/login.vue (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/views/user/change-password.vue (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/src/views/user/index.vue (100%) rename {smart_admin_v1/smart-admin-h5 => smart-admin-h5}/vue.config.js (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/.gitignore (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/README.md (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/pom.xml (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/doc/readme.txt (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/pom.xml (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/SmartAdminApplication.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/ApiModelPropertyEnum.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/DataScope.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/NoNeedLogin.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/NoValidPrivilege.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/OperateLog.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/constant/CommentSortTypeEnum.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/constant/JudgeEnum.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/constant/ResponseCodeConst.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/controller/BaseController.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/BaseEntity.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/BaseEnum.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/ITask.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/OrderItemDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/PageParamDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/PageResultDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/ResponseDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/ValidateList.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/exception/SmartBusinessException.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/exception/SmartResponseCodeException.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/AbstractHeartBeatCommand.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeartBeatConfig.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeartBeatLogger.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeartBeatRecordCommendInterface.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeartBeatRecordDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeatBeatRecordHelper.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/IpUtil.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/StringUtil.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/json/LongJsonDeserializer.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/json/LongJsonSerializer.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/kaptcha/KaptchaColor.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/kaptcha/KaptchaNoise.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/kaptcha/KaptchaWordRenderer.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/SmartReloadManager.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/SmartReloadScheduler.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/abstracts/AbstractSmartReloadCommand.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/abstracts/AbstractSmartReloadCommand4Spring.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/annotation/SmartReload.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/AbstractSmartReloadObject.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/AnnotationReloadObject.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/InterfaceReloadObject.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/entity/ReloadItem.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/entity/SmartReloadResult.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/interfaces/SmartReloadCommandInterface.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/interfaces/SmartReloadThreadLogger.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/interfaces/SmartReloadable.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/swagger/SmartSwaggerApiModelEnumPlugin.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/bigdecimal/BigDecimalValidator.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/bigdecimal/CheckBigDecimal.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/bigdecimal/ComparisonSymbolEnum.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/en/CheckEnum.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/en/EnumValidator.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartAdminWebAppConfig.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartDruidDataSourceConfig.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartHeartBeatConfig.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartKaptchaConfig.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartMybatisPlusConfig.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartRedisConfig.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartReloadConfig.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartRestTemplateConfig.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartSwaggerApiModelEnumConfig.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartSwaggerDynamicGroupConfig.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartWebSocketConfig.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SystemEnvironmentCondition.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/constant/CommonConst.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/constant/SmartReloadTagConst.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/constant/SwaggerTagConst.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/constant/SystemEnvironmentEnum.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/handler/SmartGlobalExceptionHandler.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/handler/SmartOperateLogAspect.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/interceptor/SmartAuthenticationInterceptor.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/listener/SmartAdminStartupRunner.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/EmailController.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/EmailDao.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/EmailSendStatusEnum.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/EmailService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/dto/EmailConfigDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/dto/EmailDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/dto/EmailQueryDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/dto/EmailVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/entity/EmailEntity.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/LogService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/OrderOperateLogController.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/OrderOperateLogDao.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/OrderOperateLogService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/constant/OrderOperateLogDefaultEmpEnum.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/constant/OrderOperateLogOperateTypeConst.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/constant/OrderOperateLogOrderTypeEnum.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/domain/dto/OrderOperateLogSaveDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/domain/dto/SupplierOrderOperateVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/domain/entity/OrderOperateLogEntity.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/domain/vo/OrderOperateLogVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/UserLoginLogController.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/UserLoginLogDao.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/UserLoginLogService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/domain/UserLoginLogDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/domain/UserLoginLogEntity.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/domain/UserLoginLogQueryDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/UserOperateLogController.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/UserOperateLogDao.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/UserOperateLogService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/domain/UserOperateLogDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/domain/UserOperateLogEntity.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/domain/UserOperateLogQueryDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/NoticeController.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/NoticeManage.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/NoticeService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/dao/NoticeDao.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/dao/NoticeReceiveRecordDao.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeAddDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeDetailVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeQueryDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeReadCountDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeReceiveDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeReceiveQueryDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeUpdateDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/entity/NoticeEntity.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/entity/NoticeReceiveRecordEntity.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/controller/PeonyController.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/dao/PeonyDao.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/dto/PeonyAddDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/dto/PeonyQueryDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/dto/PeonyUpdateDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/entity/PeonyEntity.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/vo/PeonyExcelVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/vo/PeonyVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/service/PeonyService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/constant/SqlOperateTypeEnum.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/dao/TableDao.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/domain/CodeGeneratorDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/domain/CodeGeneratorQueryColumnDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/domain/ColumnVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/domain/QueryFieldVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/service/CodeGeneratorComponent.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/service/CodeGeneratorService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/FileController.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/FileDao.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/constant/FileModuleTypeEnum.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/constant/FileResponseCodeConst.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/constant/FileServiceNameConst.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/constant/FileServiceTypeEnum.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/dto/FileAddDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/dto/FileDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/dto/FileQueryDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/dto/OSSConfig.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/entity/FileEntity.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/vo/FileVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/vo/UploadVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/FileService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/FileServiceAliYun.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/FileServiceLocal.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/FileServiceQiNiuYun.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/IFileService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatController.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatRecordDao.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatRecordEntity.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatRecordVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/IdGeneratorDao.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/IdGeneratorManager.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/IdGeneratorService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/constant/IdGeneratorEnum.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/constant/IdGeneratorRuleTypeEnum.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/domain/IdGeneratorEntity.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/domain/IdGeneratorLastNumberDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/domain/IdGeneratorPOJO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/domain/IdGeneratorRecordDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/constant/QuartzConst.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/constant/TaskResultEnum.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/constant/TaskStatusEnum.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/controller/QuartzController.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/dao/QuartzTaskDao.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/dao/QuartzTaskLogDao.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzLogQueryDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzQueryDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzTaskDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzTaskLogVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzTaskVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/entity/QuartzTaskEntity.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/entity/QuartzTaskLogEntity.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/service/QuartzTask.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/service/QuartzTaskLogService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/service/QuartzTaskService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/task/test/Example.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/SmartReloadCommand.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/SmartReloadController.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/SmartReloadService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/dao/ReloadItemDao.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/dao/ReloadResultDao.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/dto/ReloadItemUpdateDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/dto/ReloadItemVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/dto/ReloadResultVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/entity/ReloadItemEntity.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/entity/ReloadResultEntity.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/MessageTypeEnum.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/WebSocketServer.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/domain/MessageCommonDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/domain/MessageDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/domain/WebSocketHeartBeatDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/DataScopeController.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/DataScopeRoleDao.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/MyBatisPlugin.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/constant/DataScopeTypeEnum.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/constant/DataScopeViewTypeEnum.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/constant/DataScopeWhereInTypeEnum.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeAndViewTypeVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeBatchSetDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeBatchSetRoleDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeSelectVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeSqlConfigDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeViewTypeVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/entity/DataScopeRoleEntity.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/service/DataScopeService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/service/DataScopeSqlConfigService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/service/DataScopeViewService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/strategy/DataScopePowerStrategy.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentController.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentDao.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentResponseCodeConst.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentTreeService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/domain/dto/DepartmentCreateDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/domain/dto/DepartmentUpdateDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/domain/dto/DepartmentVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/domain/entity/DepartmentEntity.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/EmployeeController.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/EmployeeDao.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/EmployeeService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/constant/EmployeeResponseCodeConst.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/constant/EmployeeStatusEnum.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/bo/EmployeeBO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeAddDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeBaseDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeBatchUpdateStatusDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeLoginFormDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeQueryDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeQueryExportDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeUpdateDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeUpdatePwdDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeUpdateRolesDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/entity/EmployeeEntity.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/vo/EmployeeVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/LoginController.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/LoginResponseCodeConst.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/LoginService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/LoginTokenService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/KaptchaVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/LoginCacheDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/LoginDetailVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/LoginPrivilegeDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/RequestTokenBO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/PositionController.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/PositionDao.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/PositionResponseCodeConst.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/PositionService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionAddDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionQueryDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionRelationAddDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionRelationQueryDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionRelationResultDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionResultVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionUpdateDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/entity/PositionEntity.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/entity/PositionRelationEntity.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/constant/PrivilegeResponseCodeConst.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/constant/PrivilegeTypeEnum.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/controller/PrivilegeController.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/dao/PrivilegeDao.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeFunctionDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeFunctionVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeMenuDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeMenuVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeRequestUrlVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/entity/PrivilegeEntity.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/service/PrivilegeEmployeeService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/service/PrivilegeRequestUrlService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/service/PrivilegeService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/RoleController.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/RoleDao.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/RoleResponseCodeConst.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/RoleService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleAddDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleBatchDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleQueryDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleSelectedVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleUpdateDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/entity/RoleEntity.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/RoleEmployeeController.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/RoleEmployeeDao.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/RoleEmployeeService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/domain/RoleEmployeeDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/domain/RoleEmployeeEntity.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/RolePrivilegeController.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/RolePrivilegeDao.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/RolePrivilegeService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/domain/dto/RolePrivilegeDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/domain/dto/RolePrivilegeSimpleDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/domain/dto/RolePrivilegeTreeVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/domain/entity/RolePrivilegeEntity.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/SystemConfigController.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/SystemConfigDao.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/SystemConfigService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/constant/SystemConfigDataType.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/constant/SystemConfigEnum.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/constant/SystemConfigResponseCodeConst.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigAddDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigQueryDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigUpdateDTO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigVO.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/entity/SystemConfigEntity.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/third/SmartApplicationContext.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/third/SmartRedisService.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartBaseEnumUtil.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartBeanUtil.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartBigDecimalUtil.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartDateUtil.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartDigestUtil.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartEasyPoiExcelUtil.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartFileUtil.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartHttpUtil.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartIPUtil.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartPageUtil.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartQuartzUtil.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartRequestTokenUtil.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartSendMailUtil.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartStringUtil.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartThreadFactory.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartVerificationUtil.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/excel/SmartExcel.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/excel/SmartExcelFileType.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/excel/SmartExcelReader.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/excel/SmartSheet.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/banner.txt (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/dev/application.properties (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/dev/log4j2.xml (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/dev/spy.properties (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/mapper/business/email/EmailMapper.xml (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/mapper/business/log/OrderOperateLogMapper.xml (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/mapper/business/log/UserLoginLogMapper.xml (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/mapper/business/log/UserOperateLogMapper.xml (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/mapper/business/notice/NoticeMapper.xml (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/mapper/business/notice/NoticeReceiveRecordMapper.xml (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/mapper/business/peony/PeonyMapper.xml (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/mapper/support/codegenerator/TableMapper.xml (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/mapper/support/file/FileMapper.xml (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/mapper/support/heartbeat/HeartBeatRecordMapper.xml (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/mapper/support/idgenerator/IdGeneratorMapper.xml (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/mapper/support/quartz/QuartzTaskLogMapper.xml (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/mapper/support/quartz/QuartzTaskMapper.xml (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/mapper/support/smartreload/ReloadItemMapper.xml (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/mapper/support/smartreload/ReloadResultMapper.xml (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/mapper/system/datascope/DataScopeRoleMapper.xml (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/mapper/system/department/DepartmentMapper.xml (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/mapper/system/employee/EmployeeMapper.xml (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/mapper/system/position/PositionMapper.xml (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/mapper/system/privilege/PrivilegeMapper.xml (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/mapper/system/role/RoleEmployeeMapper.xml (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/mapper/system/role/RoleMapper.xml (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/mapper/system/role/RolePrivilegeMapper.xml (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/mapper/system/systemconfig/SystemConfigMapper.xml (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/pre/application.properties (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/pre/log4j2.xml (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/prod/application.properties (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/prod/log4j2.xml (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/sit/application.properties (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/sit/log4j2.xml (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/sit/spy.properties (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/sql/quartz_mysql_2.3.0.sql (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/sql/smart-admin.sql (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/templates/codegenerator/java/AddDTO.java.vm (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/templates/codegenerator/java/Controller.java.vm (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/templates/codegenerator/java/Dao.java.vm (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/templates/codegenerator/java/Dao.xml.vm (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/templates/codegenerator/java/Entity.java.vm (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/templates/codegenerator/java/ExcelVO.java.vm (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/templates/codegenerator/java/QueryDTO.java.vm (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/templates/codegenerator/java/Service.java.vm (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/templates/codegenerator/java/UpdateDTO.java.vm (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/templates/codegenerator/java/VO.java.vm (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/templates/codegenerator/web/Api.js.vm (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/templates/codegenerator/web/List.vue.vm (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/templates/codegenerator/web/ListForm.vue.vm (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/main/resources/templates/codegenerator/web/Router.js.vm (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/test/java/net/lab1024/smartadmin/BaseTest.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/test/java/net/lab1024/smartadmin/SmartAdminApplicationTests.java (100%) rename {smart_admin_v1/smart-admin-service => smart-admin-service}/smart-admin-api/src/test/java/net/lab1024/smartadmin/module/support/codegenerator/CodeGeneratorServiceTest.java (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/.babelrc (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/.editorconfig (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/.env.development (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/.env.local (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/.env.prod (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/.env.sit (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/.eslintignore (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/.eslintrc.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/.gitignore (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/.postcssrc.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/.travis.yml (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/README.md (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/cypress.json (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/doc/notice.txt (100%) create mode 100644 smart-admin-web/package-lock.json rename {smart_admin_v1/smart-admin-web => smart-admin-web}/package.json (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/public/favicon.ico (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/public/index.html (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/App.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/api/data-scope.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/api/department.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/api/email.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/api/employee.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/api/file.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/api/heart-beat.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/api/login.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/api/notice.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/api/online-user.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/api/peony.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/api/position.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/api/privilege.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/api/role.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/api/smart-reload.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/api/system-config.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/api/task-manage.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/api/user-log.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/api/user.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/icons/demo.css (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/icons/demo_index.html (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/demo.css (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/demo_index.html (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.css (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.eot (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.svg (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.ttf (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.woff (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.woff2 (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/icons/iconfont.css (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/icons/iconfont.eot (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/icons/iconfont.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/icons/iconfont.svg (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/icons/iconfont.ttf (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/icons/iconfont.woff (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/icons/iconfont.woff2 (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/images/default_icon.png (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/images/error-page/error-401.svg (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/images/error-page/error-404.svg (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/images/error-page/error-500.svg (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/images/icon-qr-qq-wechat.png (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/images/icon-social-bilibili.svg (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/images/icon-social-juejin.svg (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/images/icon-social-twitter.svg (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/images/icon-social-zhihu.svg (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/images/login-alipay.png (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/images/login-bg.jpg (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/images/login-logo.png (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/images/login-sina.png (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/images/login-taobao.png (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/images/login_desc_bg.png (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/images/login_logo.png (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/images/logo-min.png (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/images/logo.png (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/images/logo1.png (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/images/message.png (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/images/shadow.png (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/images/slider/sub_slider_active.png (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/images/slider/sub_slider_default.png (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/assets/style/lib/animate.css (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/active-plate/active-plate.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/charts/bar.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/charts/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/charts/pie.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/charts/theme.json (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/common-icon/common-icon.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/common-icon/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/count-to/count-to.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/count-to/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/count-to/index.less (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/editor/editor.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/editor/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/employee/employee-selector.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/icons/icons.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/icons/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/components/a-back-top/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/components/a-back-top/index.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/components/fullscreen/fullscreen.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/components/fullscreen/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/components/header-bar/custom-bread-crumb/custom-bread-crumb.less (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/components/header-bar/custom-bread-crumb/custom-bread-crumb.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/components/header-bar/custom-bread-crumb/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/components/header-bar/header-bar.less (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/components/header-bar/header-bar.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/components/header-bar/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/components/header-bar/sider-trigger/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/components/header-bar/sider-trigger/sider-trigger.less (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/components/header-bar/sider-trigger/sider-trigger.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/components/language/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/components/language/language.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/components/notice/notice.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/components/side-menu/collapsed-menu.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/components/side-menu/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/components/side-menu/item-mixin.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/components/side-menu/mixin.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/components/side-menu/side-menu-item.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/components/side-menu/side-menu.less (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/components/side-menu/side-menu.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/components/tags-nav/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/components/tags-nav/tags-nav.less (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/components/tags-nav/tags-nav.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/components/user/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/components/user/user.less (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/components/user/user.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/main.less (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/main/main.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/smart-admin-ad/ad.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/smart-admin-ad/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/tables/edit.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/tables/handle-btns.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/tables/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/tables/index.less (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/components/tables/tables.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/config/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/constants/file.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/constants/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/constants/login.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/constants/notice.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/constants/privilege.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/constants/table-page.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/directives/directives.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/directives/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/directives/module/clipboard.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/directives/module/draggable.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/directives/module/privilege.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/filters/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/lib/cookie.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/lib/http.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/lib/local.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/lib/menu-func.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/lib/printPlugs.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/lib/render-dom.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/lib/table-action.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/lib/util.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/locale/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/locale/lang/en-US.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/locale/lang/zh-CN.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/locale/lang/zh-TW.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/main.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/main.less (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/plugins/error-store/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/plugins/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/router/before-close.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/router/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/router/module/business/email.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/router/module/business/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/router/module/business/keep-alive.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/router/module/business/notice.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/router/module/business/peony.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/router/module/business/three-router.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/router/module/error.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/router/module/home.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/router/module/support/api-doc.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/router/module/support/heart-beat.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/router/module/support/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/router/module/support/monitor.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/router/module/support/reload.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/router/module/support/task.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/router/module/system/employee.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/router/module/system/file.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/router/module/system/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/router/module/system/system-setting.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/router/module/system/user-log.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/router/routers.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/store/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/store/module/app.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/store/module/notice.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/store/module/user.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/themes/ReadMe.md (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/themes/index.less (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/business/email/email-list.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/business/email/send-mail.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/business/keep-alive/add-content.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/business/keep-alive/content-list.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/business/notice/notice-detail.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/business/notice/notice-list.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/business/notice/person-notice.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/business/peony/components/peony-list-form.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/business/peony/peony-list.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/business/three-level-router/three-level-router-view.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/error-page/401.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/error-page/404.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/error-page/500.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/error-page/back-btn-group.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/error-page/error-content.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/error-page/error.less (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/home/components/card.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/home/components/chart-bar.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/home/components/chart-funnel.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/home/components/chart-gauge.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/home/components/chart-line.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/home/components/chart-pie.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/home/components/home-circle.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/home/components/home-progress.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/home/components/theme.json (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/home/home.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/home/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/login/canvas.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/login/components/login-form.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/login/login.less (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/login/login.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/support/api-doc/swagger.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/support/heart-beat/heart-beat-list.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/support/monitor/online-user.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/support/monitor/sql.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/support/reload/smart-reload/smart-reload-list.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/support/task/task-list.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/system/employee/components/department-employee-tree-item/department-employee-tree-item.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/system/employee/components/department-employee-tree/department-employee-tree.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/system/employee/position/position-list.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/system/employee/role-employee/components/employee-table-add/employee-table-add.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/system/employee/role-employee/components/employee-table-detail/employee-table-detail.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/system/employee/role-employee/components/employee-table/employee-table.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/system/employee/role-employee/role-employee-manage.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/system/employee/role/components/role-data-scope/role-data-scope.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/system/employee/role/components/role-list/role-list.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/system/employee/role/components/role-tree/role-tree.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/system/employee/role/role-manage.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/system/file/file-list.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/system/system-setting/system-config/system-config.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/system/system-setting/system-privilege/components/privilege-form.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/system/system-setting/system-privilege/system-privilege.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/system/user-log/user-login-log.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/system/user-log/user-operate-log.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/src/views/three-router/three-content.vue (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/tests/e2e/.eslintrc (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/tests/e2e/plugins/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/tests/e2e/specs/test.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/tests/e2e/support/commands.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/tests/e2e/support/index.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/tests/unit/.eslintrc.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/tests/unit/HelloWorld.spec.js (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/vscode/settings.json (100%) rename {smart_admin_v1/smart-admin-web => smart-admin-web}/vue.config.js (100%) delete mode 100644 smart_admin_v2/smart-admin-api/.gitignore delete mode 100644 smart_admin_v2/smart-admin-api/pom.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/pom.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/SmartAdminApplication.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/common/AdminBaseController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/config/OperateLogAspectConfig.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/config/SecurityConfig.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/config/SecurityMethodConfig.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminCacheConst.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminRedisKeyConst.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminSwaggerTagConst.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/listener/AdminStartupRunner.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/constant/CategoryTypeEnum.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/controller/CategoryController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/dao/CategoryDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/dto/CategoryBaseDTO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/dto/CategorySimpleDTO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/entity/CategoryEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/form/CategoryAddForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/form/CategoryTreeQueryForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/form/CategoryUpdateForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/vo/CategoryTreeVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/vo/CategoryVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/manager/CategoryCacheManager.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/service/CategoryQueryService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/service/CategoryService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/constant/GoodsStatusEnum.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/controller/GoodsController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/dao/GoodsDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/entity/GoodsEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/form/GoodsAddForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/form/GoodsQueryForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/form/GoodsUpdateForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/vo/GoodsVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/manager/GoodsManager.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/service/GoodsService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/BankController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/BankDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/BankService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankCreateForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankQueryForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankUpdateForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseEmployeeManager.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/constant/EnterpriseTypeEnum.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/dao/EnterpriseDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/dao/EnterpriseEmployeeDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/entity/EnterpriseEmployeeEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/entity/EnterpriseEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseCreateForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseEmployeeForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseEmployeeQueryForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseQueryForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseUpdateForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/vo/EnterpriseEmployeeVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/vo/EnterpriseListVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/vo/EnterpriseVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/InvoiceController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/InvoiceDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/InvoiceService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceAddForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceQueryForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceUpdateForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/constant/NoticeVisibleRangeDataTypeEnum.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/controller/NoticeController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/dao/NoticeDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/dao/NoticeTypeDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/entity/NoticeEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/entity/NoticeTypeEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeAddForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeEmployeeQueryForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeQueryForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeUpdateForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeViewRecordQueryForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeVisibleRangeForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeDetailVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeEmployeeVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeTypeVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeUpdateFormVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeViewRecordVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeVisibleRangeVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/manager/NoticeManager.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/service/NoticeEmployeeService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/service/NoticeService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/service/NoticeTypeService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/DataScope.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/DataScopeController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/MyBatisPlugin.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/constant/DataScopeTypeEnum.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/constant/DataScopeViewTypeEnum.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/constant/DataScopeWhereInTypeEnum.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain/DataScopeAndViewTypeVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain/DataScopeDTO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain/DataScopeSqlConfig.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain/DataScopeViewTypeVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/service/DataScopeService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/service/DataScopeSqlConfigService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/service/DataScopeViewService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/strategy/DataScopePowerStrategy.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/controller/DepartmentController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/dao/DepartmentDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/entity/DepartmentEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/form/DepartmentAddForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/form/DepartmentUpdateForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentEmployeeTreeVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentTreeVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/manager/DepartmentCacheManager.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/manager/DepartmentManager.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/service/DepartmentService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/controller/EmployeeController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/dao/EmployeeDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/entity/EmployeeEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeAddForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeBatchUpdateDepartmentForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeQueryForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeUpdateForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeUpdatePasswordForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeUpdateRoleForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/vo/EmployeeVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/manager/EmployeeManager.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/service/EmployeePermissionService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/service/EmployeeService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/controller/LoginController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/domain/LoginEmployeeDetail.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/domain/LoginForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/service/LoginService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/constant/MenuPermsTypeEnum.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/constant/MenuTypeEnum.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/controller/MenuController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/dao/MenuDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/entity/MenuEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuAddForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuBaseForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuPointsOperateForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuUpdateForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/vo/MenuSimpleTreeVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/vo/MenuTreeVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/vo/MenuVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/manager/MenuManager.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/service/MenuService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleDataScopeController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleEmployeeController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleMenuController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleDataScopeDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleEmployeeDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleMenuDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleDataScopeEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleEmployeeEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleMenuEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleAddForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleDataScopeUpdateForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleEmployeeQueryForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleEmployeeUpdateForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleMenuUpdateForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleQueryForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleUpdateForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleDataScopeVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleEmployeeVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleMenuTreeVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleSelectedVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/manager/RoleDataScopeManager.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/manager/RoleEmployeeManager.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/manager/RoleMenuManager.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleDataScopeService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleEmployeeService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleMenuService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminCacheController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminChangeLogController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminConfigController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminDictController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminFileController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminHeartBeatController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminHelpDocController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminLoginLogController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminOperateLogController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminReloadController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminSerialNumberController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/dev/application.yaml delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/dev/log4j2.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/dev/spy.properties delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/category/CategoryMapper.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/goods/GoodsMapper.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/notice/NoticeMapper.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/bank/BankMapper.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/enterprise/EnterpriseEmployeeMapper.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/enterprise/EnterpriseMapper.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/invoice/InvoiceMapper.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/notice/NoticeDao.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/system/department/DepartmentMapper.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/system/employee/EmployeeMapper.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/system/menu/MenuMapper.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/system/role/RoleDataScopeMapper.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/system/role/RoleEmployeeMapper.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/system/role/RoleMapper.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/system/role/RoleMenuMapper.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/pre/application.yaml delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/pre/log4j2.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/prod/application.yaml delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/prod/log4j2.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/test/application.yaml delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/test/log4j2.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/test/spy.properties delete mode 100644 smart_admin_v2/smart-admin-api/sa-admin/src/test/java/net/lab1024/sa/admin/SmartAdminApplicationTest.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/pom.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/annoation/NoNeedLogin.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/annoation/SaAuth.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/ErrorCode.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/ErrorCodeRangeContainer.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/ErrorCodeRegister.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/SystemErrorCode.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/UnexpectedErrorCode.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/UserErrorCode.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/constant/RequestHeaderConst.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/constant/StringConst.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/controller/SupportBaseController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/DataScopePlugin.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/PageParam.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/PageResult.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/RequestUrlVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/RequestUser.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/ResponseDTO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/SystemEnvironment.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/ValidateData.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/ValidateList.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/BaseEnum.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/GenderEnum.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/SystemEnvironmentEnum.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/UserTypeEnum.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/excel/ExcelStyle.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/exception/BusinessException.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/interceptor/AbstractInterceptor.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/deserializer/DictValueVoDeserializer.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/deserializer/FileKeyVoDeserializer.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/deserializer/LongJsonDeserializer.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/BigDecimalNullZeroSerializer.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/DictValueVoSerializer.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/FileKeySerializer.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/FileKeyVoSerializer.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/LongJsonSerializer.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/AbstractSecurityConfig.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityAuthenticationFailHandler.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityMethodSource.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityPermissionCheckService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityTokenFilter.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/swagger/ApiModelPropertyEnum.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/swagger/Swagger2MapperImplExtension.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/swagger/SwaggerApiModelPropertyEnumPlugin.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartBeanUtil.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartBigDecimalUtil.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartEasyPoiExcelUtil.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartEnumUtil.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartPageUtil.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartRequestUtil.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartStringUtil.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartVerificationUtil.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/validator/enumeration/CheckEnum.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/validator/enumeration/EnumValidator.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/AsyncConfig.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/CorsFilterConfig.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/DataSourceConfig.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/DateConfig.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/FileCloudConfig.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/HeartBeatConfig.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/MvcConfig.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/MybatisPlusConfig.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/PostProcessorConfig.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/RedisConfig.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/ReloadConfig.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/RepeatSubmitConfig.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/RestTemplateConfig.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/ScheduleConfig.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/SwaggerConfig.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/SystemEnvironmentConfig.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/UrlConfig.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/CacheKeyConst.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/RedisKeyConst.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/ReloadConst.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/SwaggerTagConst.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/UrlPrefixConst.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/handler/GlobalExceptionHandler.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/listener/SmartApplicationListener.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/cache/CacheService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/CaptchaController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/CaptchaService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaColor.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaConfig.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaNoise.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaWordRenderer.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/domain/CaptchaForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/domain/CaptchaVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/constant/ChangeLogTypeEnum.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/controller/ChangeLogController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/dao/ChangeLogDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/entity/ChangeLogEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/form/ChangeLogAddForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/form/ChangeLogQueryForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/form/ChangeLogUpdateForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/vo/ChangeLogVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/manager/ChangeLogManager.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/service/ChangeLogService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeDeleteEnum.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeFrontComponentEnum.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeGeneratorConstant.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeGeneratorPageTypeEnum.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeQueryFieldQueryTypeEnum.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/controller/CodeGeneratorController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/dao/CodeGeneratorConfigDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/dao/CodeGeneratorDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/entity/CodeGeneratorConfigEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/form/CodeGeneratorConfigForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/form/CodeGeneratorPreviewForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/form/TableQueryForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeBasic.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeDelete.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeField.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeInsertAndUpdate.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeInsertAndUpdateField.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeQueryField.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeTableField.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/vo/TableColumnVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/vo/TableConfigVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/vo/TableVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/CodeGeneratorService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/CodeGeneratorTemplateService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/CodeGenerateBaseVariableService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/ControllerVariableService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/DaoVariableService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/ManagerVariableService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/ServiceVariableService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/AddFormVariableService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/DeleteFormVariableService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/EntityVariableService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/MapperVariableService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/QueryFormVariableService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/UpdateFormVariableService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/VOVariableService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/ApiVariableService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/ConstVariableService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/FormVariableService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/ListVariableService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/util/CodeGeneratorTool.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigKeyEnum.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigAddForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigQueryForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigUpdateForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldBigDecimal.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldDict.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldEnum.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldLabel.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldSql.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/constant/DataTracerConst.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/constant/DataTracerTypeEnum.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/controller/DataTracerController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/dao/DataTracerDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/bo/DataTracerContentBO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/entity/DataTracerEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/form/DataTracerForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/form/DataTracerQueryForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/vo/DataTracerVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/manager/DataTracerManger.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/service/DataTracerChangeContentService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/service/DataTracerService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/controller/DictController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/dao/DictKeyDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/dao/DictValueDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/entity/DictKeyEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/entity/DictValueEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictKeyAddForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictKeyQueryForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictKeyUpdateForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictValueAddForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictValueQueryForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictValueUpdateForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/vo/DictKeyVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/vo/DictValueVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/service/DictCacheService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/service/DictService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/controller/FeedbackController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/dao/FeedbackDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackAddForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackQueryForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/service/FeedbackService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/constant/FileFolderTypeEnum.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/controller/FileController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/dao/FileDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/entity/FileEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/form/FileQueryForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/form/FileUrlUploadForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileDownloadVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileMetadataVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileUploadVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/FileService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/FileStorageCloudServiceImpl.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/FileStorageLocalServiceImpl.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/IFileStorageService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/HeartBeatRecordDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/HeartBeatRecordHandler.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/HeartBeatService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/HeartBeatManager.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/HeartBeatRecord.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/HeartBeatRunnable.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/IHeartBeatRecordHandler.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/domain/HeartBeatRecordEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/domain/HeartBeatRecordQueryForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/domain/HeartBeatRecordVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/controller/HelpDocController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/dao/HelpDocCatalogDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/dao/HelpDocDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/entity/HelpDocCatalogEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/entity/HelpDocEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocAddForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocCatalogAddForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocCatalogUpdateForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocQueryForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocRelationForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocUpdateForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocViewRecordQueryForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocCatalogVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocDetailVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocRecordVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocRelationVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocViewRecordVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/manager/HelpDocManager.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/service/HelpDocCatalogService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/service/HelpDocService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/service/HelpDocUserService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/DecryptData.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweAspect.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweDecrypt.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweEncrypt.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweUserKey.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/LoginLogDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/LoginLogResultEnum.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/LoginLogService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/domain/LoginLogEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/domain/LoginLogQueryForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/domain/LoginLogVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/OperateLogDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/OperateLogService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/annoation/OperateLog.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/core/OperateLogAspect.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/core/OperateLogConfig.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/domain/OperateLogEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/domain/OperateLogQueryForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/domain/OperateLogVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/redis/RedisService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/ReloadCommand.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/ReloadService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/AbstractSmartReloadCommand.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/SmartReloadManager.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/annoation/SmartReload.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/domain/SmartReloadItem.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/domain/SmartReloadObject.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/domain/SmartReloadResult.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/thread/SmartReloadRunnable.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/dao/ReloadItemDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/dao/ReloadResultDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadItemEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadItemVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadResultEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadResultVO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/RepeatSubmitAspect.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/annoation/RepeatSubmit.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/ticket/AbstractRepeatSubmitTicket.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/ticket/RepeatSubmitCaffeineTicket.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/ticket/RepeatSubmitRedisTicket.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/constant/SerialNumberIdEnum.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/constant/SerialNumberRuleTypeEnum.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/dao/SerialNumberDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/dao/SerialNumberRecordDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberGenerateForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberGenerateResultBO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberInfoBO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberLastGenerateBO.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberRecordEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberRecordQueryForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/SerialNumberBaseService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/SerialNumberRecordService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/SerialNumberService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/impl/SerialNumberInternService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/impl/SerialNumberMysqlService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/impl/SerialNumberRedisService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/TableColumnController.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/TableColumnDao.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/TableColumnService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/domain/TableColumnEntity.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/domain/TableColumnItemForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/domain/TableColumnUpdateForm.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/token/JwtConst.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/token/LoginDeviceEnum.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/token/TokenService.java delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/META-INF/spring.factories delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/banner.txt delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/constant/enum.java.vm delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/controller/Controller.java.vm delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/dao/Dao.java.vm delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/entity/Entity.java.vm delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/form/AddForm.java.vm delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/form/QueryForm.java.vm delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/form/UpdateForm.java.vm delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/vo/VO.java.vm delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/manager/Manager.java.vm delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/mapper/Mapper.xml.vm delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/service/Service.java.vm delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/js/api.js.vm delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/js/const.js.vm delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/js/form.vue.vm delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/js/list.vue.vm delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/tools.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/dev/sa-common.yaml delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/ChangeLogMapper.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/CodeGeneratorMapper.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/ConfigMapper.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/DataTracerMapper.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/DictKeyMapper.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/DictValueMapper.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/FeedbackMapper.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/FileMapper.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/HeartBeatRecordMapper.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/HelpDocDao.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/LoginLogMapper.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/OperateLogMapper.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/ReloadItemMapper.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/ReloadResultMapper.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/SerialNumberMapper.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/SerialNumberRecordMapper.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/TableColumnMapper.xml delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/pre/sa-common.yaml delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/prod/sa-common.yaml delete mode 100644 smart_admin_v2/smart-admin-api/sa-common/src/main/resources/test/sa-common.yaml delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.env delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.env.development delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.env.localhost delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.env.pre delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.env.production delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.env.test delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.eslintignore delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.eslintrc.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.gitignore delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.prettierrc.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.stylelintignore delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.stylelintrc.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.vscode/launch.json delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/README.en.md delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/README.md delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/index.html delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/jsconfig.json delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/package.json delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/postcss.config.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/public/favicon.ico delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/App.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/business/category/category-api.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/business/goods/goods-api.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/bank-api.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/enterprise-api.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/invoice-api.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/notice-api.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/cache/cache-api.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/change-log/change-log-api.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/code-generator/code-generator-api.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/config/config-api.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/data-tracer/data-tracer-api.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/dict/dict-api.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/feedback/feedback-api.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/file/file-api.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/heart-beat/heart-beat-api.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/help-doc/help-doc-api.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/help-doc/help-doc-catalog-api.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/login-log/login-log-api.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/operate-log/operate-log-api.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/reload/reload-api.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/serial-number/serial-number-api.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/table/table-column-api.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/system/department/department-api.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/system/employee/employee-api.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/system/home/home-api.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/system/login/login-api.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/system/menu/menu-api.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/system/role-menu/role-menu-api.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/system/role/role-api.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/assets/images/1024lab/1024lab-gzh.jpg delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/assets/images/1024lab/xiaozhen-gzh.jpg delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/assets/images/1024lab/zhuoda-wechat.jpg delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/ali-icon.png delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/google-icon.png delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/login-bg.jpg delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/login-form-open-eyes-close.png delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/login-form-open-eyes.png delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/login-qr.png delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/qq-icon.png delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/wechat-icon.png delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/weibo-icon.png delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/assets/images/logo/logo-min.png delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/assets/images/logo/logo.png delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/assets/images/logo/smart-admin-logo-white.png delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/assets/images/logo/smart-admin-logo.png delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/assets/images/notice/edit_icon.png delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/assets/images/notice/file_icon.png delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/components/business/category-tree-select/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/components/business/oa/enterprise-bank-select/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/components/business/oa/enterprise-invoice-select/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/components/business/oa/enterprise-select/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/components/framework/area-cascader/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/components/framework/area-cascader/province-city-district.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/components/framework/area-cascader/province-city.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/components/framework/boolean-select/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/components/framework/icon-select/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/components/framework/iframe/iframe-index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/components/framework/iframe/route-default-component.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/components/framework/smart-enum-checkbox/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/components/framework/smart-enum-radio/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/components/framework/smart-enum-select/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/components/framework/smart-loading/index.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/components/framework/wangeditor/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/components/support/data-tracer/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/components/support/dict-key-select/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/components/support/dict-select/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/components/support/file-preview-modal/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/components/support/file-preview/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/components/support/file-upload/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/components/support/table-operator/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/components/support/table-operator/smart-table-column-merge.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/components/support/table-operator/smart-table-column-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/components/system/department-tree-select/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/components/system/employee-select/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/components/system/employee-table-select-modal/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/components/system/menu-tree-select/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/config/app-config.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/constants/business/erp/category-const.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/constants/business/erp/goods-const.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/constants/business/oa/enterprise-const.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/constants/business/oa/notice-const.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/constants/common-const.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/constants/index.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/constants/layout-const.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/constants/local-storage-key-const.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/constants/regular-const.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/constants/support/change-log-const.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/constants/support/code-generator-const.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/constants/support/data-tracer-const.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/constants/support/file-const.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/constants/support/login-log-const.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/constants/support/table-id-const.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/constants/system/employee-const.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/constants/system/home-const.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/constants/system/login-device-const.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/constants/system/menu-const.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/directives/privilege.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/i18n/index.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/i18n/lang/en-US/index.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/i18n/lang/zh-CN/index.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/layout/components/header-user-space/header-avatar.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/layout/components/header-user-space/header-message.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/layout/components/header-user-space/header-reset-password-modal/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/layout/components/header-user-space/header-setting.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/layout/components/header-user-space/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/layout/components/menu-location-breadcrumb/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/layout/components/page-tag/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-expand-menu/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-expand-menu/recursion-menu.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-expand-menu/sub-menu.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-expand-menu/top-menu.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-help-doc/components/contact-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-help-doc/components/feedback-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-help-doc/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-menu/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-menu/recursion-menu.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/layout/components/side-menu/sub-menu.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/layout/components/smart-footer/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/layout/smart-help-doc-layout.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/layout/smart-keep-alive.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/layout/smart-layout.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/layout/smart-side-expand-layout.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/layout/smart-side-layout.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/lib/axios.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/lib/default-time-ranges.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/lib/highlight-line-number.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/lib/smart-sentry.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/lib/smart-wartermark.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/main.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/plugins/privilege-plugin.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/plugins/smart-enums-plugin.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/router/index.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/router/routers.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/router/support/help-doc.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/router/system/home.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/router/system/login.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/store/index.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/store/modules/system/app-config.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/store/modules/system/role.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/store/modules/system/spin.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/store/modules/system/user.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/theme/index.less delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/theme/smart-admin.less delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/utils/cookie-util.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/utils/local-util.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/utils/str-util.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/business/erp/catalog/components/category-form-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/business/erp/catalog/components/category-tree-table.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/business/erp/catalog/custom-catalog.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/business/erp/catalog/goods-catalog.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/business/erp/goods/components/goods-form-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/business/erp/goods/goods-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-bank-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-bank-operate-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-employee-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-invoice-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-invoice-operate-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-operate-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/enterprise-detail.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/enterprise/enterprise-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/components/notice-form-drawer.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/components/notice-form-visible-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/components/notice-form-visible-transfer-department.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/components/notice-form-visible-transfer-employee.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/components/notice-view-record-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/notice-detail.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/notice-employee-detail.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/notice-employee-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/business/oa/notice/notice-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/cache/cache-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/change-log/change-log-form.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/change-log/change-log-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/change-log/change-log-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/code-generator-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/code-generator-util.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-basic.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-delete.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-field.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-insert-and-update.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-query-field.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-table-field.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/code-generator/components/preview/code-generator-preview-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/config/config-form-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/config/config-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/dict/components/dict-key-operate-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/dict/components/dict-value-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/dict/components/dict-value-operate-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/dict/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/feedback/feedback-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/file/file-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/heart-beat/heart-beat-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/components/help-doc-catalog-form-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/components/help-doc-catalog-tree-select.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/components/help-doc-catalog-tree.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/components/help-doc-form-drawer.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/components/help-doc-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/help-doc-manage-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/management/help-doc-mitt.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/user-view/components/help-doc-view-record-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/help-doc/user-view/help-doc-user-view.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/login-log/login-log-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/operate-log/operate-log-detail-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/operate-log/operate-log-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/reload/do-reload-form-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/reload/reload-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/reload/reload-result-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/serial-number/serial-number-generate-form-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/serial-number/serial-number-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/support/serial-number/serial-number-record-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/40X/403.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/40X/404.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/department-children/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/department-form-modal/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/department-tree/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/employee-department-form-modal/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/employee-form-modal/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/employee-list/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/components/employee-password-dialog/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/department-mitt.ts delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/department/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-data-scope/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-employee-list/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-form-modal/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-list/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-setting/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-tree/index.less delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-tree/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-tree/role-tree-checkbox.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-tree/role-tree-menu.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/components/role-tree/role-tree-point.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/employee/role/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/changelog-card.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/default-home-card.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/echarts/category.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/echarts/gauge.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/echarts/gradient.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/echarts/pie.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/official-account-card.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/quick-entry/home-quick-entry-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/quick-entry/home-quick-entry.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/quick-entry/init-quick-entry-list.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/components/to-be-done-card.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/home-header.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/home-notice.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/index.less delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/home/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/login/login.less delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/login/login.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/menu/components/menu-operate-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/menu/components/menu-tree-select.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/menu/menu-data-handler.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/menu/menu-list-table-columns.js delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/views/system/menu/menu-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/vite.config.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/.env delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/.env.development delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/.env.localhost delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/.env.pre delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/.env.production delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/.env.test delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/.eslintignore delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/.eslintrc.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/.gitignore delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/.prettierrc.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/.stylelintignore delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/.stylelintrc.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/README.md delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/index.html delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/package.json delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/public/favicon.ico delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/App.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/base-model/page-param-model.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/base-model/page-result-model.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/base-model/response-model.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/base-model/sort-item-model.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/business/category/category-api.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/business/goods/goods-api.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/business/oa/bank-api.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/business/oa/enterprise-api.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/business/oa/invoice-api.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/business/oa/notice-api.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/support/cache/cache-api.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/support/change-log/change-log-api.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/support/code-generator/code-generator-api.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/support/config/config-api.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/support/data-tracer/data-tracer-api.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/support/dict/dict-api.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/support/feedback/feedback-api.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/support/file/file-api.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/support/heart-beat/heart-beat-api.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/support/help-doc/help-doc-api.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/support/help-doc/help-doc-catalog-api.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/support/login-log/login-log-api.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/support/operate-log/operate-log-api.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/support/reload/reload-api.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/support/serial-number/serial-number-api.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/support/table/table-column-api.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/system/department/department-api.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/system/employee/employee-api.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/system/home/home-api.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/system/login/login-api.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/system/menu/menu-api.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/system/role-menu/role-menu-api.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/api/system/role/role-api.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/assets/images/1024lab/1024lab-gzh.jpg delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/assets/images/1024lab/xiaozhen-gzh.jpg delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/assets/images/1024lab/zhuoda-wechat.jpg delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/assets/images/login/ali-icon.png delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/assets/images/login/google-icon.png delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/assets/images/login/login-bg.jpg delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/assets/images/login/login-form-open-eyes-close.png delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/assets/images/login/login-form-open-eyes.png delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/assets/images/login/login-qr.png delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/assets/images/login/qq-icon.png delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/assets/images/login/wechat-icon.png delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/assets/images/login/weibo-icon.png delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/assets/images/logo/logo-min.png delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/assets/images/logo/logo.png delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/assets/images/logo/smart-admin-logo-white.png delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/assets/images/logo/smart-admin-logo.png delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/assets/images/notice/edit_icon.png delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/assets/images/notice/file_icon.png delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/components/business/category-tree-select/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/components/business/oa/enterprise-bank-select/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/components/business/oa/enterprise-invoice-select/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/components/business/oa/enterprise-select/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/components/framework/area-cascader/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/components/framework/area-cascader/province-city-district.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/components/framework/area-cascader/province-city.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/components/framework/boolean-select/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/components/framework/icon-select/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/components/framework/iframe/iframe-index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/components/framework/iframe/route-default-component.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/components/framework/smart-enum-checkbox/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/components/framework/smart-enum-radio/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/components/framework/smart-enum-select/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/components/framework/smart-loading/index.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/components/framework/wangeditor/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/components/support/data-tracer/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/components/support/dict-key-select/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/components/support/dict-select/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/components/support/file-preview-modal/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/components/support/file-preview/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/components/support/file-upload/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/components/support/table-operator/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/components/support/table-operator/smart-table-column-merge.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/components/support/table-operator/smart-table-column-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/components/system/department-tree-select/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/components/system/employee-select/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/components/system/employee-table-select-modal/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/components/system/menu-tree-select/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/config/app-config.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/constants/business/erp/category-const.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/constants/business/erp/goods-const.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/constants/business/oa/enterprise-const.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/constants/business/oa/notice-const.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/constants/common-const.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/constants/index.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/constants/layout-const.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/constants/local-storage-key-const.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/constants/regular-const.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/constants/support/change-log-const.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/constants/support/code-generator-const.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/constants/support/data-tracer-const.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/constants/support/file-const.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/constants/support/login-log-const.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/constants/support/table-id-const.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/constants/system/employee-const.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/constants/system/home-const.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/constants/system/login-device-const.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/constants/system/menu-const.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/directives/privilege.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/i18n/index.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/i18n/lang/en-US/index.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/i18n/lang/zh-CN/index.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/layout/components/header-user-space/header-avatar.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/layout/components/header-user-space/header-message.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/layout/components/header-user-space/header-reset-password-modal/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/layout/components/header-user-space/header-setting.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/layout/components/header-user-space/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/layout/components/menu-location-breadcrumb/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/layout/components/page-tag/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/layout/components/side-expand-menu/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/layout/components/side-expand-menu/recursion-menu.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/layout/components/side-expand-menu/sub-menu.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/layout/components/side-expand-menu/top-menu.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/layout/components/side-help-doc/components/contact-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/layout/components/side-help-doc/components/feedback-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/layout/components/side-help-doc/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/layout/components/side-menu/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/layout/components/side-menu/recursion-menu.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/layout/components/side-menu/sub-menu.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/layout/components/smart-footer/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/layout/smart-help-doc-layout.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/layout/smart-keep-alive.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/layout/smart-layout.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/layout/smart-side-expand-layout.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/layout/smart-side-layout.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/lib/axios.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/lib/default-time-ranges.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/lib/highlight-line-number.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/lib/smart-sentry.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/lib/smart-wartermark.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/main.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/plugins/privilege-plugin.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/plugins/smart-enums-plugin.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/router/index.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/router/routers.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/router/support/help-doc.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/router/system/home.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/router/system/login.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/shims-vue.d.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/store/index.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/store/modules/model/UserTagNav.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/store/modules/system/app-config.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/store/modules/system/role.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/store/modules/system/spin.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/store/modules/system/user.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/theme/index.less delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/theme/smart-admin.less delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/types/config.d.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/types/env.d.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/types/json-viewer.d.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/types/smart-enum.d.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/types/user.d.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/utils/cookie-util.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/utils/local-util.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/utils/str-util.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/business/erp/catalog/components/category-form-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/business/erp/catalog/components/category-tree-table.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/business/erp/catalog/custom-catalog.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/business/erp/catalog/goods-catalog.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/business/erp/goods/components/goods-form-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/business/erp/goods/goods-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-bank-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-bank-operate-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-employee-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-invoice-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-invoice-operate-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/business/oa/enterprise/components/enterprise-operate-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/business/oa/enterprise/enterprise-detail.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/business/oa/enterprise/enterprise-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/business/oa/notice/components/notice-form-drawer.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/business/oa/notice/components/notice-form-visible-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/business/oa/notice/components/notice-form-visible-transfer-department.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/business/oa/notice/components/notice-form-visible-transfer-employee.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/business/oa/notice/components/notice-view-record-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/business/oa/notice/notice-detail.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/business/oa/notice/notice-employee-detail.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/business/oa/notice/notice-employee-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/business/oa/notice/notice-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/cache/cache-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/change-log/change-log-form.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/change-log/change-log-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/change-log/change-log-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/code-generator/code-generator-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/code-generator/code-generator-util.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-basic.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-delete.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-field.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-insert-and-update.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-query-field.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form-table-field.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/code-generator/components/form/code-generator-table-config-form.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/code-generator/components/preview/code-generator-preview-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/config/config-form-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/config/config-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/dict/components/dict-key-operate-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/dict/components/dict-value-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/dict/components/dict-value-operate-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/dict/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/feedback/feedback-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/file/file-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/heart-beat/heart-beat-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/help-doc/management/components/help-doc-catalog-form-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/help-doc/management/components/help-doc-catalog-tree-select.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/help-doc/management/components/help-doc-catalog-tree.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/help-doc/management/components/help-doc-form-drawer.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/help-doc/management/components/help-doc-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/help-doc/management/help-doc-manage-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/help-doc/management/help-doc-mitt.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/help-doc/user-view/components/help-doc-view-record-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/help-doc/user-view/help-doc-user-view.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/login-log/login-log-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/operate-log/operate-log-detail-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/operate-log/operate-log-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/reload/do-reload-form-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/reload/reload-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/reload/reload-result-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/serial-number/serial-number-generate-form-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/serial-number/serial-number-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/support/serial-number/serial-number-record-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/40X/403.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/40X/404.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/employee/department/components/department-children/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/employee/department/components/department-form-modal/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/employee/department/components/department-tree/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/employee/department/components/employee-department-form-modal/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/employee/department/components/employee-form-modal/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/employee/department/components/employee-list/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/employee/department/components/employee-password-dialog/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/employee/department/department-mitt.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/employee/department/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/employee/role/components/role-data-scope/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/employee/role/components/role-employee-list/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/employee/role/components/role-form-modal/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/employee/role/components/role-list/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/employee/role/components/role-setting/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/employee/role/components/role-tree/index.less delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/employee/role/components/role-tree/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/employee/role/components/role-tree/role-tree-checkbox.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/employee/role/components/role-tree/role-tree-menu.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/employee/role/components/role-tree/role-tree-point.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/employee/role/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/home/components/changelog-card.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/home/components/default-home-card.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/home/components/echarts/category.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/home/components/echarts/gauge.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/home/components/echarts/gradient.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/home/components/echarts/pie.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/home/components/official-account-card.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/home/components/quick-entry/home-quick-entry-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/home/components/quick-entry/home-quick-entry.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/home/components/quick-entry/init-quick-entry-list.js delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/home/components/to-be-done-card.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/home/home-header.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/home/home-notice.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/home/index.less delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/home/index.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/login/login.less delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/login/login.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/menu/components/menu-operate-modal.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/menu/components/menu-tree-select.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/menu/menu-data-handler.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/menu/menu-list-table-columns.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/views/system/menu/menu-list.vue delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/src/vite-env.d.ts delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/tsconfig.json delete mode 100644 smart_admin_v2/smart-admin-web/typescript-ant-design-vue3/vite.config.ts delete mode 100644 smart_admin_v2/smart_admin_v2.sql rename {smart_admin_v1/代码规范_v1 => 代码规范}/api接口规范.md (100%) rename {smart_admin_v1/代码规范_v1 => 代码规范}/front-standard-guide.md (100%) rename {smart_admin_v1/代码规范_v1 => 代码规范}/java-standard-guide.md (100%) rename {smart_admin_v1/快速启动_v1 => 快速部署}/README.md (100%) diff --git a/.gitignore b/.gitignore index b516240b..a2a3040a 100644 --- a/.gitignore +++ b/.gitignore @@ -19,8 +19,13 @@ target/ *.iml *.ipr -### front ### -**/dist -**/node_modules -**/.vscode +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +### VS Code ### +.vscode/ diff --git a/README.md b/README.md index 3283b9b3..c4d5da4b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,3 @@ -### SmartAdmin 2.0 (即 vue3 的 js版本和ts版本 )已经更新了最新代码,请看smart_admin_v2目录,当前正在完善文档,欢迎持续关注 ! #### 简介 SmartAdmin由河南·洛阳 [1024创新实验室](https://www.1024lab.net/)团队研发的一套互联网企业级的通用型中后台解决方案!使用最前沿的前后台技术栈SpringBoot和Vue,前后端分离,**我们开源一套漂亮的代码和一套整洁的代码规范**,让大家在这浮躁的代码世界里感受到一股把代码写好的清流!同时又让开发者节省大量的时间,减少加班,快乐工作,热爱生活。SmartAdmin 让你从认识到忘不了,绝对是你最想要的! diff --git a/smart_admin_v1/smart-admin-h5/.browserslistrc b/smart-admin-h5/.browserslistrc similarity index 100% rename from smart_admin_v1/smart-admin-h5/.browserslistrc rename to smart-admin-h5/.browserslistrc diff --git a/smart_admin_v1/smart-admin-h5/.editorconfig b/smart-admin-h5/.editorconfig similarity index 100% rename from smart_admin_v1/smart-admin-h5/.editorconfig rename to smart-admin-h5/.editorconfig diff --git a/smart_admin_v1/smart-admin-h5/.env.development b/smart-admin-h5/.env.development similarity index 100% rename from smart_admin_v1/smart-admin-h5/.env.development rename to smart-admin-h5/.env.development diff --git a/smart_admin_v1/smart-admin-h5/.env.local b/smart-admin-h5/.env.local similarity index 100% rename from smart_admin_v1/smart-admin-h5/.env.local rename to smart-admin-h5/.env.local diff --git a/smart_admin_v1/smart-admin-h5/.env.pre b/smart-admin-h5/.env.pre similarity index 100% rename from smart_admin_v1/smart-admin-h5/.env.pre rename to smart-admin-h5/.env.pre diff --git a/smart_admin_v1/smart-admin-h5/.env.prod b/smart-admin-h5/.env.prod similarity index 100% rename from smart_admin_v1/smart-admin-h5/.env.prod rename to smart-admin-h5/.env.prod diff --git a/smart_admin_v1/smart-admin-h5/.env.sit b/smart-admin-h5/.env.sit similarity index 100% rename from smart_admin_v1/smart-admin-h5/.env.sit rename to smart-admin-h5/.env.sit diff --git a/smart_admin_v1/smart-admin-h5/.eslintignore b/smart-admin-h5/.eslintignore similarity index 100% rename from smart_admin_v1/smart-admin-h5/.eslintignore rename to smart-admin-h5/.eslintignore diff --git a/smart_admin_v1/smart-admin-h5/.eslintrc.js b/smart-admin-h5/.eslintrc.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/.eslintrc.js rename to smart-admin-h5/.eslintrc.js diff --git a/smart_admin_v1/smart-admin-h5/.gitignore b/smart-admin-h5/.gitignore similarity index 100% rename from smart_admin_v1/smart-admin-h5/.gitignore rename to smart-admin-h5/.gitignore diff --git a/smart_admin_v1/smart-admin-h5/.postcssrc.js b/smart-admin-h5/.postcssrc.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/.postcssrc.js rename to smart-admin-h5/.postcssrc.js diff --git a/smart_admin_v1/smart-admin-h5/.prettierrc.js b/smart-admin-h5/.prettierrc.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/.prettierrc.js rename to smart-admin-h5/.prettierrc.js diff --git a/smart_admin_v1/smart-admin-h5/.sentryclirc b/smart-admin-h5/.sentryclirc similarity index 100% rename from smart_admin_v1/smart-admin-h5/.sentryclirc rename to smart-admin-h5/.sentryclirc diff --git a/smart_admin_v1/smart-admin-h5/README.md b/smart-admin-h5/README.md similarity index 100% rename from smart_admin_v1/smart-admin-h5/README.md rename to smart-admin-h5/README.md diff --git a/smart_admin_v1/smart-admin-h5/babel.config.js b/smart-admin-h5/babel.config.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/babel.config.js rename to smart-admin-h5/babel.config.js diff --git a/smart_admin_v1/smart-admin-h5/package.json b/smart-admin-h5/package.json similarity index 100% rename from smart_admin_v1/smart-admin-h5/package.json rename to smart-admin-h5/package.json diff --git a/smart_admin_v1/smart-admin-h5/public/favicon.ico b/smart-admin-h5/public/favicon.ico similarity index 100% rename from smart_admin_v1/smart-admin-h5/public/favicon.ico rename to smart-admin-h5/public/favicon.ico diff --git a/smart_admin_v1/smart-admin-h5/public/index.html b/smart-admin-h5/public/index.html similarity index 100% rename from smart_admin_v1/smart-admin-h5/public/index.html rename to smart-admin-h5/public/index.html diff --git a/smart_admin_v1/smart-admin-h5/src/App.vue b/smart-admin-h5/src/App.vue similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/App.vue rename to smart-admin-h5/src/App.vue diff --git a/smart_admin_v1/smart-admin-h5/src/api/employee.js b/smart-admin-h5/src/api/employee.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/api/employee.js rename to smart-admin-h5/src/api/employee.js diff --git a/smart_admin_v1/smart-admin-h5/src/api/file.js b/smart-admin-h5/src/api/file.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/api/file.js rename to smart-admin-h5/src/api/file.js diff --git a/smart_admin_v1/smart-admin-h5/src/api/login.js b/smart-admin-h5/src/api/login.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/api/login.js rename to smart-admin-h5/src/api/login.js diff --git a/smart_admin_v1/smart-admin-h5/src/api/system-config.js b/smart-admin-h5/src/api/system-config.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/api/system-config.js rename to smart-admin-h5/src/api/system-config.js diff --git a/smart_admin_v1/smart-admin-h5/src/api/user.js b/smart-admin-h5/src/api/user.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/api/user.js rename to smart-admin-h5/src/api/user.js diff --git a/smart_admin_v1/smart-admin-h5/src/assets/css/index.scss b/smart-admin-h5/src/assets/css/index.scss similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/assets/css/index.scss rename to smart-admin-h5/src/assets/css/index.scss diff --git a/smart_admin_v1/smart-admin-h5/src/assets/logo.png b/smart-admin-h5/src/assets/logo.png similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/assets/logo.png rename to smart-admin-h5/src/assets/logo.png diff --git a/smart_admin_v1/smart-admin-h5/src/components/employee/department-employee-selector.vue b/smart-admin-h5/src/components/employee/department-employee-selector.vue similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/components/employee/department-employee-selector.vue rename to smart-admin-h5/src/components/employee/department-employee-selector.vue diff --git a/smart_admin_v1/smart-admin-h5/src/components/form/select-picker/SmartEnumSelectPicker.vue b/smart-admin-h5/src/components/form/select-picker/SmartEnumSelectPicker.vue similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/components/form/select-picker/SmartEnumSelectPicker.vue rename to smart-admin-h5/src/components/form/select-picker/SmartEnumSelectPicker.vue diff --git a/smart_admin_v1/smart-admin-h5/src/components/form/select-picker/SmartSelectPicker b/smart-admin-h5/src/components/form/select-picker/SmartSelectPicker similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/components/form/select-picker/SmartSelectPicker rename to smart-admin-h5/src/components/form/select-picker/SmartSelectPicker diff --git a/smart_admin_v1/smart-admin-h5/src/components/mixin/session-mixin.js b/smart-admin-h5/src/components/mixin/session-mixin.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/components/mixin/session-mixin.js rename to smart-admin-h5/src/components/mixin/session-mixin.js diff --git a/smart_admin_v1/smart-admin-h5/src/components/van-bar/BackNavBar.vue b/smart-admin-h5/src/components/van-bar/BackNavBar.vue similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/components/van-bar/BackNavBar.vue rename to smart-admin-h5/src/components/van-bar/BackNavBar.vue diff --git a/smart_admin_v1/smart-admin-h5/src/components/van-bar/RouterNavBar.vue b/smart-admin-h5/src/components/van-bar/RouterNavBar.vue similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/components/van-bar/RouterNavBar.vue rename to smart-admin-h5/src/components/van-bar/RouterNavBar.vue diff --git a/smart_admin_v1/smart-admin-h5/src/config/index.js b/smart-admin-h5/src/config/index.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/config/index.js rename to smart-admin-h5/src/config/index.js diff --git a/smart_admin_v1/smart-admin-h5/src/constants/area.js b/smart-admin-h5/src/constants/area.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/constants/area.js rename to smart-admin-h5/src/constants/area.js diff --git a/smart_admin_v1/smart-admin-h5/src/constants/erp/contact-company.js b/smart-admin-h5/src/constants/erp/contact-company.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/constants/erp/contact-company.js rename to smart-admin-h5/src/constants/erp/contact-company.js diff --git a/smart_admin_v1/smart-admin-h5/src/constants/erp/index.js b/smart-admin-h5/src/constants/erp/index.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/constants/erp/index.js rename to smart-admin-h5/src/constants/erp/index.js diff --git a/smart_admin_v1/smart-admin-h5/src/constants/file.js b/smart-admin-h5/src/constants/file.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/constants/file.js rename to smart-admin-h5/src/constants/file.js diff --git a/smart_admin_v1/smart-admin-h5/src/constants/index.js b/smart-admin-h5/src/constants/index.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/constants/index.js rename to smart-admin-h5/src/constants/index.js diff --git a/smart_admin_v1/smart-admin-h5/src/constants/school.js b/smart-admin-h5/src/constants/school.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/constants/school.js rename to smart-admin-h5/src/constants/school.js diff --git a/smart_admin_v1/smart-admin-h5/src/filters/filter.js b/smart-admin-h5/src/filters/filter.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/filters/filter.js rename to smart-admin-h5/src/filters/filter.js diff --git a/smart_admin_v1/smart-admin-h5/src/filters/index.js b/smart-admin-h5/src/filters/index.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/filters/index.js rename to smart-admin-h5/src/filters/index.js diff --git a/smart_admin_v1/smart-admin-h5/src/lib/cookie.js b/smart-admin-h5/src/lib/cookie.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/lib/cookie.js rename to smart-admin-h5/src/lib/cookie.js diff --git a/smart_admin_v1/smart-admin-h5/src/lib/erp-http.js b/smart-admin-h5/src/lib/erp-http.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/lib/erp-http.js rename to smart-admin-h5/src/lib/erp-http.js diff --git a/smart_admin_v1/smart-admin-h5/src/lib/http.js b/smart-admin-h5/src/lib/http.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/lib/http.js rename to smart-admin-h5/src/lib/http.js diff --git a/smart_admin_v1/smart-admin-h5/src/lib/local.js b/smart-admin-h5/src/lib/local.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/lib/local.js rename to smart-admin-h5/src/lib/local.js diff --git a/smart_admin_v1/smart-admin-h5/src/lib/menu-func.js b/smart-admin-h5/src/lib/menu-func.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/lib/menu-func.js rename to smart-admin-h5/src/lib/menu-func.js diff --git a/smart_admin_v1/smart-admin-h5/src/lib/printPlugs.js b/smart-admin-h5/src/lib/printPlugs.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/lib/printPlugs.js rename to smart-admin-h5/src/lib/printPlugs.js diff --git a/smart_admin_v1/smart-admin-h5/src/lib/render-dom.js b/smart-admin-h5/src/lib/render-dom.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/lib/render-dom.js rename to smart-admin-h5/src/lib/render-dom.js diff --git a/smart_admin_v1/smart-admin-h5/src/lib/smart-sentry.js b/smart-admin-h5/src/lib/smart-sentry.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/lib/smart-sentry.js rename to smart-admin-h5/src/lib/smart-sentry.js diff --git a/smart_admin_v1/smart-admin-h5/src/lib/util.js b/smart-admin-h5/src/lib/util.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/lib/util.js rename to smart-admin-h5/src/lib/util.js diff --git a/smart_admin_v1/smart-admin-h5/src/lib/watermark.js b/smart-admin-h5/src/lib/watermark.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/lib/watermark.js rename to smart-admin-h5/src/lib/watermark.js diff --git a/smart_admin_v1/smart-admin-h5/src/main.js b/smart-admin-h5/src/main.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/main.js rename to smart-admin-h5/src/main.js diff --git a/smart_admin_v1/smart-admin-h5/src/plugins/smart-sentry.js b/smart-admin-h5/src/plugins/smart-sentry.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/plugins/smart-sentry.js rename to smart-admin-h5/src/plugins/smart-sentry.js diff --git a/smart_admin_v1/smart-admin-h5/src/plugins/smart.js b/smart-admin-h5/src/plugins/smart.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/plugins/smart.js rename to smart-admin-h5/src/plugins/smart.js diff --git a/smart_admin_v1/smart-admin-h5/src/plugins/vant.js b/smart-admin-h5/src/plugins/vant.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/plugins/vant.js rename to smart-admin-h5/src/plugins/vant.js diff --git a/smart_admin_v1/smart-admin-h5/src/router/dashboard/index.js b/smart-admin-h5/src/router/dashboard/index.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/router/dashboard/index.js rename to smart-admin-h5/src/router/dashboard/index.js diff --git a/smart_admin_v1/smart-admin-h5/src/router/develop/develop.js b/smart-admin-h5/src/router/develop/develop.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/router/develop/develop.js rename to smart-admin-h5/src/router/develop/develop.js diff --git a/smart_admin_v1/smart-admin-h5/src/router/error/error.js b/smart-admin-h5/src/router/error/error.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/router/error/error.js rename to smart-admin-h5/src/router/error/error.js diff --git a/smart_admin_v1/smart-admin-h5/src/router/index.js b/smart-admin-h5/src/router/index.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/router/index.js rename to smart-admin-h5/src/router/index.js diff --git a/smart_admin_v1/smart-admin-h5/src/router/login/login.js b/smart-admin-h5/src/router/login/login.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/router/login/login.js rename to smart-admin-h5/src/router/login/login.js diff --git a/smart_admin_v1/smart-admin-h5/src/router/router-const.js b/smart-admin-h5/src/router/router-const.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/router/router-const.js rename to smart-admin-h5/src/router/router-const.js diff --git a/smart_admin_v1/smart-admin-h5/src/router/routers.js b/smart-admin-h5/src/router/routers.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/router/routers.js rename to smart-admin-h5/src/router/routers.js diff --git a/smart_admin_v1/smart-admin-h5/src/router/user/user.js b/smart-admin-h5/src/router/user/user.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/router/user/user.js rename to smart-admin-h5/src/router/user/user.js diff --git a/smart_admin_v1/smart-admin-h5/src/store/index.js b/smart-admin-h5/src/store/index.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/store/index.js rename to smart-admin-h5/src/store/index.js diff --git a/smart_admin_v1/smart-admin-h5/src/store/module/app.js b/smart-admin-h5/src/store/module/app.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/store/module/app.js rename to smart-admin-h5/src/store/module/app.js diff --git a/smart_admin_v1/smart-admin-h5/src/store/module/user.js b/smart-admin-h5/src/store/module/user.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/store/module/user.js rename to smart-admin-h5/src/store/module/user.js diff --git a/smart_admin_v1/smart-admin-h5/src/themes/index.scss b/smart-admin-h5/src/themes/index.scss similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/themes/index.scss rename to smart-admin-h5/src/themes/index.scss diff --git a/smart_admin_v1/smart-admin-h5/src/utils/index.js b/smart-admin-h5/src/utils/index.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/utils/index.js rename to smart-admin-h5/src/utils/index.js diff --git a/smart_admin_v1/smart-admin-h5/src/utils/request.js b/smart-admin-h5/src/utils/request.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/utils/request.js rename to smart-admin-h5/src/utils/request.js diff --git a/smart_admin_v1/smart-admin-h5/src/utils/validate.js b/smart-admin-h5/src/utils/validate.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/utils/validate.js rename to smart-admin-h5/src/utils/validate.js diff --git a/smart_admin_v1/smart-admin-h5/src/views/dashboard/dashboard.vue b/smart-admin-h5/src/views/dashboard/dashboard.vue similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/views/dashboard/dashboard.vue rename to smart-admin-h5/src/views/dashboard/dashboard.vue diff --git a/smart_admin_v1/smart-admin-h5/src/views/develop/config.vue b/smart-admin-h5/src/views/develop/config.vue similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/views/develop/config.vue rename to smart-admin-h5/src/views/develop/config.vue diff --git a/smart_admin_v1/smart-admin-h5/src/views/error/404.vue b/smart-admin-h5/src/views/error/404.vue similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/views/error/404.vue rename to smart-admin-h5/src/views/error/404.vue diff --git a/smart_admin_v1/smart-admin-h5/src/views/login/login.vue b/smart-admin-h5/src/views/login/login.vue similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/views/login/login.vue rename to smart-admin-h5/src/views/login/login.vue diff --git a/smart_admin_v1/smart-admin-h5/src/views/user/change-password.vue b/smart-admin-h5/src/views/user/change-password.vue similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/views/user/change-password.vue rename to smart-admin-h5/src/views/user/change-password.vue diff --git a/smart_admin_v1/smart-admin-h5/src/views/user/index.vue b/smart-admin-h5/src/views/user/index.vue similarity index 100% rename from smart_admin_v1/smart-admin-h5/src/views/user/index.vue rename to smart-admin-h5/src/views/user/index.vue diff --git a/smart_admin_v1/smart-admin-h5/vue.config.js b/smart-admin-h5/vue.config.js similarity index 100% rename from smart_admin_v1/smart-admin-h5/vue.config.js rename to smart-admin-h5/vue.config.js diff --git a/smart_admin_v1/smart-admin-service/.gitignore b/smart-admin-service/.gitignore similarity index 100% rename from smart_admin_v1/smart-admin-service/.gitignore rename to smart-admin-service/.gitignore diff --git a/smart_admin_v1/smart-admin-service/README.md b/smart-admin-service/README.md similarity index 100% rename from smart_admin_v1/smart-admin-service/README.md rename to smart-admin-service/README.md diff --git a/smart_admin_v1/smart-admin-service/pom.xml b/smart-admin-service/pom.xml similarity index 100% rename from smart_admin_v1/smart-admin-service/pom.xml rename to smart-admin-service/pom.xml diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/doc/readme.txt b/smart-admin-service/smart-admin-api/doc/readme.txt similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/doc/readme.txt rename to smart-admin-service/smart-admin-api/doc/readme.txt diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/pom.xml b/smart-admin-service/smart-admin-api/pom.xml similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/pom.xml rename to smart-admin-service/smart-admin-api/pom.xml diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/SmartAdminApplication.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/SmartAdminApplication.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/SmartAdminApplication.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/SmartAdminApplication.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/ApiModelPropertyEnum.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/ApiModelPropertyEnum.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/ApiModelPropertyEnum.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/ApiModelPropertyEnum.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/DataScope.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/DataScope.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/DataScope.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/DataScope.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/NoNeedLogin.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/NoNeedLogin.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/NoNeedLogin.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/NoNeedLogin.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/NoValidPrivilege.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/NoValidPrivilege.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/OperateLog.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/anno/OperateLog.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/constant/CommentSortTypeEnum.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/constant/CommentSortTypeEnum.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/constant/JudgeEnum.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/constant/JudgeEnum.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/constant/ResponseCodeConst.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/constant/ResponseCodeConst.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/controller/BaseController.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/controller/BaseController.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/BaseEntity.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/BaseEntity.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/BaseEnum.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/BaseEnum.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/BaseEnum.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/BaseEnum.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/ITask.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/ITask.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/OrderItemDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/OrderItemDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/PageParamDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/PageParamDTO.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/PageResultDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/PageResultDTO.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/PageResultDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/PageResultDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/ResponseDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/ResponseDTO.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/ValidateList.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/ValidateList.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/ValidateList.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/domain/ValidateList.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/exception/SmartBusinessException.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/exception/SmartBusinessException.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/exception/SmartResponseCodeException.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/exception/SmartResponseCodeException.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/AbstractHeartBeatCommand.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/AbstractHeartBeatCommand.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeartBeatConfig.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeartBeatConfig.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeartBeatLogger.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeartBeatLogger.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeartBeatRecordCommendInterface.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeartBeatRecordCommendInterface.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeartBeatRecordDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeartBeatRecordDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeatBeatRecordHelper.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/HeatBeatRecordHelper.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/IpUtil.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/IpUtil.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/StringUtil.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/heartbeat/StringUtil.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/json/LongJsonDeserializer.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/json/LongJsonDeserializer.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/json/LongJsonDeserializer.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/json/LongJsonDeserializer.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/json/LongJsonSerializer.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/json/LongJsonSerializer.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/json/LongJsonSerializer.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/json/LongJsonSerializer.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/kaptcha/KaptchaColor.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/kaptcha/KaptchaColor.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/kaptcha/KaptchaColor.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/kaptcha/KaptchaColor.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/kaptcha/KaptchaNoise.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/kaptcha/KaptchaNoise.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/kaptcha/KaptchaNoise.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/kaptcha/KaptchaNoise.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/kaptcha/KaptchaWordRenderer.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/kaptcha/KaptchaWordRenderer.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/kaptcha/KaptchaWordRenderer.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/kaptcha/KaptchaWordRenderer.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/SmartReloadManager.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/SmartReloadManager.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/SmartReloadScheduler.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/SmartReloadScheduler.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/abstracts/AbstractSmartReloadCommand.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/abstracts/AbstractSmartReloadCommand.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/abstracts/AbstractSmartReloadCommand4Spring.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/abstracts/AbstractSmartReloadCommand4Spring.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/annotation/SmartReload.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/annotation/SmartReload.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/annotation/SmartReload.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/annotation/SmartReload.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/AbstractSmartReloadObject.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/AbstractSmartReloadObject.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/AnnotationReloadObject.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/AnnotationReloadObject.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/InterfaceReloadObject.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/InterfaceReloadObject.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/entity/ReloadItem.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/entity/ReloadItem.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/entity/SmartReloadResult.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/domain/entity/SmartReloadResult.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/interfaces/SmartReloadCommandInterface.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/interfaces/SmartReloadCommandInterface.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/interfaces/SmartReloadThreadLogger.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/interfaces/SmartReloadThreadLogger.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/interfaces/SmartReloadable.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/reload/interfaces/SmartReloadable.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/swagger/SmartSwaggerApiModelEnumPlugin.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/swagger/SmartSwaggerApiModelEnumPlugin.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/swagger/SmartSwaggerApiModelEnumPlugin.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/swagger/SmartSwaggerApiModelEnumPlugin.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/bigdecimal/BigDecimalValidator.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/bigdecimal/BigDecimalValidator.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/bigdecimal/CheckBigDecimal.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/bigdecimal/CheckBigDecimal.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/bigdecimal/ComparisonSymbolEnum.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/bigdecimal/ComparisonSymbolEnum.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/en/CheckEnum.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/en/CheckEnum.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/en/CheckEnum.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/en/CheckEnum.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/en/EnumValidator.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/en/EnumValidator.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/en/EnumValidator.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/common/validator/en/EnumValidator.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartAdminWebAppConfig.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartAdminWebAppConfig.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartDruidDataSourceConfig.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartDruidDataSourceConfig.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartDruidDataSourceConfig.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartDruidDataSourceConfig.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartHeartBeatConfig.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartHeartBeatConfig.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartKaptchaConfig.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartKaptchaConfig.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartKaptchaConfig.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartKaptchaConfig.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartMybatisPlusConfig.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartMybatisPlusConfig.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartRedisConfig.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartRedisConfig.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartRedisConfig.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartRedisConfig.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartReloadConfig.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartReloadConfig.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartRestTemplateConfig.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartRestTemplateConfig.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartSwaggerApiModelEnumConfig.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartSwaggerApiModelEnumConfig.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartSwaggerDynamicGroupConfig.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartSwaggerDynamicGroupConfig.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartWebSocketConfig.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SmartWebSocketConfig.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SystemEnvironmentCondition.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/config/SystemEnvironmentCondition.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/constant/CommonConst.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/constant/CommonConst.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/constant/SmartReloadTagConst.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/constant/SmartReloadTagConst.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/constant/SwaggerTagConst.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/constant/SwaggerTagConst.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/constant/SystemEnvironmentEnum.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/constant/SystemEnvironmentEnum.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/handler/SmartGlobalExceptionHandler.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/handler/SmartGlobalExceptionHandler.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/handler/SmartOperateLogAspect.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/handler/SmartOperateLogAspect.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/interceptor/SmartAuthenticationInterceptor.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/interceptor/SmartAuthenticationInterceptor.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/listener/SmartAdminStartupRunner.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/listener/SmartAdminStartupRunner.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/EmailController.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/EmailController.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/EmailDao.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/EmailDao.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/EmailSendStatusEnum.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/EmailSendStatusEnum.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/EmailService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/EmailService.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/dto/EmailConfigDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/dto/EmailConfigDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/dto/EmailDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/dto/EmailDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/dto/EmailQueryDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/dto/EmailQueryDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/dto/EmailVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/dto/EmailVO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/entity/EmailEntity.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/email/domain/entity/EmailEntity.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/LogService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/LogService.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/OrderOperateLogController.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/OrderOperateLogController.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/OrderOperateLogDao.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/OrderOperateLogDao.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/OrderOperateLogService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/OrderOperateLogService.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/constant/OrderOperateLogDefaultEmpEnum.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/constant/OrderOperateLogDefaultEmpEnum.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/constant/OrderOperateLogOperateTypeConst.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/constant/OrderOperateLogOperateTypeConst.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/constant/OrderOperateLogOrderTypeEnum.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/constant/OrderOperateLogOrderTypeEnum.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/domain/dto/OrderOperateLogSaveDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/domain/dto/OrderOperateLogSaveDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/domain/dto/SupplierOrderOperateVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/domain/dto/SupplierOrderOperateVO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/domain/entity/OrderOperateLogEntity.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/domain/entity/OrderOperateLogEntity.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/domain/vo/OrderOperateLogVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/orderoperatelog/domain/vo/OrderOperateLogVO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/UserLoginLogController.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/UserLoginLogController.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/UserLoginLogDao.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/UserLoginLogDao.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/UserLoginLogService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/UserLoginLogService.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/domain/UserLoginLogDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/domain/UserLoginLogDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/domain/UserLoginLogEntity.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/domain/UserLoginLogEntity.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/domain/UserLoginLogQueryDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/userloginlog/domain/UserLoginLogQueryDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/UserOperateLogController.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/UserOperateLogController.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/UserOperateLogDao.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/UserOperateLogDao.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/UserOperateLogService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/UserOperateLogService.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/domain/UserOperateLogDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/domain/UserOperateLogDTO.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/domain/UserOperateLogDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/domain/UserOperateLogDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/domain/UserOperateLogEntity.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/domain/UserOperateLogEntity.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/domain/UserOperateLogQueryDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/log/useroperatelog/domain/UserOperateLogQueryDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/NoticeController.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/NoticeController.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/NoticeManage.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/NoticeManage.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/NoticeService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/NoticeService.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/dao/NoticeDao.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/dao/NoticeDao.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/dao/NoticeReceiveRecordDao.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/dao/NoticeReceiveRecordDao.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeAddDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeAddDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeDetailVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeDetailVO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeQueryDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeQueryDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeReadCountDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeReadCountDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeReceiveDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeReceiveDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeReceiveQueryDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeReceiveQueryDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeUpdateDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeUpdateDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/dto/NoticeVO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/entity/NoticeEntity.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/entity/NoticeEntity.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/entity/NoticeReceiveRecordEntity.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/notice/domain/entity/NoticeReceiveRecordEntity.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/controller/PeonyController.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/controller/PeonyController.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/dao/PeonyDao.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/dao/PeonyDao.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/dto/PeonyAddDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/dto/PeonyAddDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/dto/PeonyQueryDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/dto/PeonyQueryDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/dto/PeonyUpdateDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/dto/PeonyUpdateDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/entity/PeonyEntity.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/entity/PeonyEntity.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/vo/PeonyExcelVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/vo/PeonyExcelVO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/vo/PeonyVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/domain/vo/PeonyVO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/service/PeonyService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/business/peony/service/PeonyService.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/constant/SqlOperateTypeEnum.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/constant/SqlOperateTypeEnum.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/dao/TableDao.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/dao/TableDao.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/domain/CodeGeneratorDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/domain/CodeGeneratorDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/domain/CodeGeneratorQueryColumnDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/domain/CodeGeneratorQueryColumnDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/domain/ColumnVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/domain/ColumnVO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/domain/QueryFieldVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/domain/QueryFieldVO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/service/CodeGeneratorComponent.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/service/CodeGeneratorComponent.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/service/CodeGeneratorService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/codegenerator/service/CodeGeneratorService.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/FileController.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/FileController.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/FileDao.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/FileDao.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/constant/FileModuleTypeEnum.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/constant/FileModuleTypeEnum.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/constant/FileResponseCodeConst.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/constant/FileResponseCodeConst.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/constant/FileServiceNameConst.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/constant/FileServiceNameConst.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/constant/FileServiceTypeEnum.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/constant/FileServiceTypeEnum.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/dto/FileAddDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/dto/FileAddDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/dto/FileDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/dto/FileDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/dto/FileQueryDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/dto/FileQueryDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/dto/OSSConfig.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/dto/OSSConfig.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/entity/FileEntity.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/entity/FileEntity.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/vo/FileVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/vo/FileVO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/vo/UploadVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/domain/vo/UploadVO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/FileService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/FileService.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/FileServiceAliYun.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/FileServiceAliYun.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/FileServiceLocal.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/FileServiceLocal.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/FileServiceQiNiuYun.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/FileServiceQiNiuYun.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/IFileService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/file/service/IFileService.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatController.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatController.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatRecordDao.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatRecordDao.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatRecordEntity.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatRecordEntity.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatRecordVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatRecordVO.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatRecordVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatRecordVO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/heartbeat/HeartBeatService.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/IdGeneratorDao.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/IdGeneratorDao.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/IdGeneratorManager.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/IdGeneratorManager.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/IdGeneratorService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/IdGeneratorService.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/constant/IdGeneratorEnum.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/constant/IdGeneratorEnum.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/constant/IdGeneratorRuleTypeEnum.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/constant/IdGeneratorRuleTypeEnum.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/domain/IdGeneratorEntity.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/domain/IdGeneratorEntity.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/domain/IdGeneratorLastNumberDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/domain/IdGeneratorLastNumberDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/domain/IdGeneratorPOJO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/domain/IdGeneratorPOJO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/domain/IdGeneratorRecordDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/idgenerator/domain/IdGeneratorRecordDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/constant/QuartzConst.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/constant/QuartzConst.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/constant/TaskResultEnum.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/constant/TaskResultEnum.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/constant/TaskStatusEnum.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/constant/TaskStatusEnum.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/controller/QuartzController.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/controller/QuartzController.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/dao/QuartzTaskDao.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/dao/QuartzTaskDao.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/dao/QuartzTaskLogDao.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/dao/QuartzTaskLogDao.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzLogQueryDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzLogQueryDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzQueryDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzQueryDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzTaskDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzTaskDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzTaskLogVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzTaskLogVO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzTaskVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/dto/QuartzTaskVO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/entity/QuartzTaskEntity.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/entity/QuartzTaskEntity.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/entity/QuartzTaskLogEntity.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/domain/entity/QuartzTaskLogEntity.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/service/QuartzTask.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/service/QuartzTask.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/service/QuartzTaskLogService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/service/QuartzTaskLogService.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/service/QuartzTaskService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/service/QuartzTaskService.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/task/test/Example.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/quartz/task/test/Example.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/SmartReloadCommand.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/SmartReloadCommand.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/SmartReloadController.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/SmartReloadController.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/SmartReloadService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/SmartReloadService.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/dao/ReloadItemDao.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/dao/ReloadItemDao.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/dao/ReloadResultDao.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/dao/ReloadResultDao.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/dto/ReloadItemUpdateDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/dto/ReloadItemUpdateDTO.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/dto/ReloadItemUpdateDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/dto/ReloadItemUpdateDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/dto/ReloadItemVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/dto/ReloadItemVO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/dto/ReloadResultVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/dto/ReloadResultVO.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/entity/ReloadItemEntity.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/entity/ReloadItemEntity.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/entity/ReloadItemEntity.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/entity/ReloadItemEntity.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/entity/ReloadResultEntity.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/entity/ReloadResultEntity.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/entity/ReloadResultEntity.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/smartreload/domain/entity/ReloadResultEntity.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/MessageTypeEnum.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/MessageTypeEnum.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/WebSocketServer.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/WebSocketServer.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/domain/MessageCommonDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/domain/MessageCommonDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/domain/MessageDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/domain/MessageDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/domain/WebSocketHeartBeatDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/support/websocket/domain/WebSocketHeartBeatDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/DataScopeController.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/DataScopeController.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/DataScopeRoleDao.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/DataScopeRoleDao.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/MyBatisPlugin.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/MyBatisPlugin.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/MyBatisPlugin.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/MyBatisPlugin.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/constant/DataScopeTypeEnum.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/constant/DataScopeTypeEnum.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/constant/DataScopeTypeEnum.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/constant/DataScopeTypeEnum.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/constant/DataScopeViewTypeEnum.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/constant/DataScopeViewTypeEnum.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/constant/DataScopeWhereInTypeEnum.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/constant/DataScopeWhereInTypeEnum.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeAndViewTypeVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeAndViewTypeVO.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeAndViewTypeVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeAndViewTypeVO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeBatchSetDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeBatchSetDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeBatchSetRoleDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeBatchSetRoleDTO.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeDTO.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeSelectVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeSelectVO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeSqlConfigDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeSqlConfigDTO.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeViewTypeVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeViewTypeVO.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeViewTypeVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/dto/DataScopeViewTypeVO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/entity/DataScopeRoleEntity.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/domain/entity/DataScopeRoleEntity.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/service/DataScopeService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/service/DataScopeService.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/service/DataScopeSqlConfigService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/service/DataScopeSqlConfigService.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/service/DataScopeSqlConfigService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/service/DataScopeSqlConfigService.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/service/DataScopeViewService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/service/DataScopeViewService.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/service/DataScopeViewService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/service/DataScopeViewService.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/strategy/DataScopePowerStrategy.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/datascope/strategy/DataScopePowerStrategy.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentController.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentController.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentDao.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentDao.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentResponseCodeConst.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentResponseCodeConst.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentService.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentTreeService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/DepartmentTreeService.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/domain/dto/DepartmentCreateDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/domain/dto/DepartmentCreateDTO.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/domain/dto/DepartmentCreateDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/domain/dto/DepartmentCreateDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/domain/dto/DepartmentUpdateDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/domain/dto/DepartmentUpdateDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/domain/dto/DepartmentVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/domain/dto/DepartmentVO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/domain/entity/DepartmentEntity.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/department/domain/entity/DepartmentEntity.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/EmployeeController.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/EmployeeController.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/EmployeeDao.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/EmployeeDao.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/EmployeeService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/EmployeeService.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/constant/EmployeeResponseCodeConst.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/constant/EmployeeResponseCodeConst.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/constant/EmployeeStatusEnum.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/constant/EmployeeStatusEnum.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/bo/EmployeeBO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/bo/EmployeeBO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeAddDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeAddDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeBaseDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeBaseDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeBatchUpdateStatusDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeBatchUpdateStatusDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeLoginFormDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeLoginFormDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeQueryDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeQueryDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeQueryExportDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeQueryExportDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeUpdateDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeUpdateDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeUpdatePwdDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeUpdatePwdDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeUpdateRolesDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/dto/EmployeeUpdateRolesDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/entity/EmployeeEntity.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/entity/EmployeeEntity.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/vo/EmployeeVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/employee/domain/vo/EmployeeVO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/LoginController.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/LoginController.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/LoginResponseCodeConst.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/LoginResponseCodeConst.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/LoginService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/LoginService.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/LoginTokenService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/LoginTokenService.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/KaptchaVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/KaptchaVO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/LoginCacheDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/LoginCacheDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/LoginDetailVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/LoginDetailVO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/LoginPrivilegeDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/LoginPrivilegeDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/RequestTokenBO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/login/domain/RequestTokenBO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/PositionController.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/PositionController.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/PositionDao.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/PositionDao.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/PositionResponseCodeConst.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/PositionResponseCodeConst.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/PositionService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/PositionService.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionAddDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionAddDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionQueryDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionQueryDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionRelationAddDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionRelationAddDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionRelationQueryDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionRelationQueryDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionRelationResultDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionRelationResultDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionResultVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionResultVO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionUpdateDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/dto/PositionUpdateDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/entity/PositionEntity.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/entity/PositionEntity.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/entity/PositionRelationEntity.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/position/domain/entity/PositionRelationEntity.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/constant/PrivilegeResponseCodeConst.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/constant/PrivilegeResponseCodeConst.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/constant/PrivilegeTypeEnum.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/constant/PrivilegeTypeEnum.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/controller/PrivilegeController.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/controller/PrivilegeController.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/dao/PrivilegeDao.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/dao/PrivilegeDao.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeFunctionDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeFunctionDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeFunctionVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeFunctionVO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeMenuDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeMenuDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeMenuVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeMenuVO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeRequestUrlVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/dto/PrivilegeRequestUrlVO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/entity/PrivilegeEntity.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/domain/entity/PrivilegeEntity.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/service/PrivilegeEmployeeService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/service/PrivilegeEmployeeService.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/service/PrivilegeRequestUrlService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/service/PrivilegeRequestUrlService.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/service/PrivilegeService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/privilege/service/PrivilegeService.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/RoleController.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/RoleController.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/RoleDao.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/RoleDao.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/RoleResponseCodeConst.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/RoleResponseCodeConst.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/RoleService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/RoleService.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleAddDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleAddDTO.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleAddDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleAddDTO.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleBatchDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleBatchDTO.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleBatchDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleBatchDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleQueryDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleQueryDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleSelectedVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleSelectedVO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleUpdateDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleUpdateDTO.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleVO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleVO.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/dto/RoleVO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/entity/RoleEntity.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/basic/domain/entity/RoleEntity.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/RoleEmployeeController.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/RoleEmployeeController.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/RoleEmployeeDao.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/RoleEmployeeDao.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/RoleEmployeeDao.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/RoleEmployeeDao.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/RoleEmployeeService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/RoleEmployeeService.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/domain/RoleEmployeeDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/domain/RoleEmployeeDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/domain/RoleEmployeeEntity.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleemployee/domain/RoleEmployeeEntity.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/RolePrivilegeController.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/RolePrivilegeController.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/RolePrivilegeDao.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/RolePrivilegeDao.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/RolePrivilegeService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/RolePrivilegeService.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/domain/dto/RolePrivilegeDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/domain/dto/RolePrivilegeDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/domain/dto/RolePrivilegeSimpleDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/domain/dto/RolePrivilegeSimpleDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/domain/dto/RolePrivilegeTreeVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/domain/dto/RolePrivilegeTreeVO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/domain/entity/RolePrivilegeEntity.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/role/roleprivilege/domain/entity/RolePrivilegeEntity.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/SystemConfigController.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/SystemConfigController.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/SystemConfigDao.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/SystemConfigDao.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/SystemConfigService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/SystemConfigService.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/constant/SystemConfigDataType.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/constant/SystemConfigDataType.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/constant/SystemConfigEnum.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/constant/SystemConfigEnum.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/constant/SystemConfigResponseCodeConst.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/constant/SystemConfigResponseCodeConst.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigAddDTO.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigAddDTO.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigAddDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigAddDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigQueryDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigQueryDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigUpdateDTO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigUpdateDTO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigVO.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/dto/SystemConfigVO.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/entity/SystemConfigEntity.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/systemconfig/domain/entity/SystemConfigEntity.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/third/SmartApplicationContext.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/third/SmartApplicationContext.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/third/SmartRedisService.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/third/SmartRedisService.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartBaseEnumUtil.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartBaseEnumUtil.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartBeanUtil.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartBeanUtil.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartBeanUtil.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartBeanUtil.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartBigDecimalUtil.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartBigDecimalUtil.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartBigDecimalUtil.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartBigDecimalUtil.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartDateUtil.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartDateUtil.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartDigestUtil.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartDigestUtil.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartEasyPoiExcelUtil.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartEasyPoiExcelUtil.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartEasyPoiExcelUtil.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartEasyPoiExcelUtil.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartFileUtil.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartFileUtil.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartHttpUtil.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartHttpUtil.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartIPUtil.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartIPUtil.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartPageUtil.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartPageUtil.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartQuartzUtil.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartQuartzUtil.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartRequestTokenUtil.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartRequestTokenUtil.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartSendMailUtil.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartSendMailUtil.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartStringUtil.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartStringUtil.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartStringUtil.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartStringUtil.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartThreadFactory.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartThreadFactory.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartVerificationUtil.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartVerificationUtil.java similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartVerificationUtil.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/SmartVerificationUtil.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/excel/SmartExcel.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/excel/SmartExcel.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/excel/SmartExcelFileType.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/excel/SmartExcelFileType.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/excel/SmartExcelReader.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/excel/SmartExcelReader.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/excel/SmartSheet.java rename to smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/util/excel/SmartSheet.java diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/banner.txt b/smart-admin-service/smart-admin-api/src/main/resources/banner.txt similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/banner.txt rename to smart-admin-service/smart-admin-api/src/main/resources/banner.txt diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/dev/application.properties rename to smart-admin-service/smart-admin-api/src/main/resources/dev/application.properties diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/dev/log4j2.xml b/smart-admin-service/smart-admin-api/src/main/resources/dev/log4j2.xml similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/dev/log4j2.xml rename to smart-admin-service/smart-admin-api/src/main/resources/dev/log4j2.xml diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/dev/spy.properties rename to smart-admin-service/smart-admin-api/src/main/resources/dev/spy.properties diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/mapper/business/email/EmailMapper.xml rename to smart-admin-service/smart-admin-api/src/main/resources/mapper/business/email/EmailMapper.xml diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/mapper/business/log/OrderOperateLogMapper.xml rename to smart-admin-service/smart-admin-api/src/main/resources/mapper/business/log/OrderOperateLogMapper.xml diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/mapper/business/log/UserLoginLogMapper.xml rename to smart-admin-service/smart-admin-api/src/main/resources/mapper/business/log/UserLoginLogMapper.xml diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/mapper/business/log/UserOperateLogMapper.xml rename to smart-admin-service/smart-admin-api/src/main/resources/mapper/business/log/UserOperateLogMapper.xml diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/mapper/business/notice/NoticeMapper.xml rename to smart-admin-service/smart-admin-api/src/main/resources/mapper/business/notice/NoticeMapper.xml diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/mapper/business/notice/NoticeReceiveRecordMapper.xml rename to smart-admin-service/smart-admin-api/src/main/resources/mapper/business/notice/NoticeReceiveRecordMapper.xml diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/mapper/business/peony/PeonyMapper.xml rename to smart-admin-service/smart-admin-api/src/main/resources/mapper/business/peony/PeonyMapper.xml diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/codegenerator/TableMapper.xml rename to smart-admin-service/smart-admin-api/src/main/resources/mapper/support/codegenerator/TableMapper.xml diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/file/FileMapper.xml rename to smart-admin-service/smart-admin-api/src/main/resources/mapper/support/file/FileMapper.xml diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/heartbeat/HeartBeatRecordMapper.xml rename to smart-admin-service/smart-admin-api/src/main/resources/mapper/support/heartbeat/HeartBeatRecordMapper.xml diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/idgenerator/IdGeneratorMapper.xml rename to smart-admin-service/smart-admin-api/src/main/resources/mapper/support/idgenerator/IdGeneratorMapper.xml diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/quartz/QuartzTaskLogMapper.xml rename to smart-admin-service/smart-admin-api/src/main/resources/mapper/support/quartz/QuartzTaskLogMapper.xml diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/quartz/QuartzTaskMapper.xml rename to smart-admin-service/smart-admin-api/src/main/resources/mapper/support/quartz/QuartzTaskMapper.xml diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/smartreload/ReloadItemMapper.xml rename to smart-admin-service/smart-admin-api/src/main/resources/mapper/support/smartreload/ReloadItemMapper.xml diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/mapper/support/smartreload/ReloadResultMapper.xml rename to smart-admin-service/smart-admin-api/src/main/resources/mapper/support/smartreload/ReloadResultMapper.xml diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/datascope/DataScopeRoleMapper.xml b/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/datascope/DataScopeRoleMapper.xml similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/datascope/DataScopeRoleMapper.xml rename to smart-admin-service/smart-admin-api/src/main/resources/mapper/system/datascope/DataScopeRoleMapper.xml diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/department/DepartmentMapper.xml rename to smart-admin-service/smart-admin-api/src/main/resources/mapper/system/department/DepartmentMapper.xml diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/employee/EmployeeMapper.xml rename to smart-admin-service/smart-admin-api/src/main/resources/mapper/system/employee/EmployeeMapper.xml diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/position/PositionMapper.xml rename to smart-admin-service/smart-admin-api/src/main/resources/mapper/system/position/PositionMapper.xml diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/privilege/PrivilegeMapper.xml rename to smart-admin-service/smart-admin-api/src/main/resources/mapper/system/privilege/PrivilegeMapper.xml diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/role/RoleEmployeeMapper.xml rename to smart-admin-service/smart-admin-api/src/main/resources/mapper/system/role/RoleEmployeeMapper.xml diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/role/RoleMapper.xml rename to smart-admin-service/smart-admin-api/src/main/resources/mapper/system/role/RoleMapper.xml diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/role/RolePrivilegeMapper.xml rename to smart-admin-service/smart-admin-api/src/main/resources/mapper/system/role/RolePrivilegeMapper.xml diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/mapper/system/systemconfig/SystemConfigMapper.xml rename to smart-admin-service/smart-admin-api/src/main/resources/mapper/system/systemconfig/SystemConfigMapper.xml diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/pre/application.properties rename to smart-admin-service/smart-admin-api/src/main/resources/pre/application.properties diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/pre/log4j2.xml b/smart-admin-service/smart-admin-api/src/main/resources/pre/log4j2.xml similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/pre/log4j2.xml rename to smart-admin-service/smart-admin-api/src/main/resources/pre/log4j2.xml diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/prod/application.properties rename to smart-admin-service/smart-admin-api/src/main/resources/prod/application.properties diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/prod/log4j2.xml b/smart-admin-service/smart-admin-api/src/main/resources/prod/log4j2.xml similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/prod/log4j2.xml rename to smart-admin-service/smart-admin-api/src/main/resources/prod/log4j2.xml diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/sit/application.properties rename to smart-admin-service/smart-admin-api/src/main/resources/sit/application.properties diff --git a/smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/sit/log4j2.xml b/smart-admin-service/smart-admin-api/src/main/resources/sit/log4j2.xml similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/sit/log4j2.xml rename to smart-admin-service/smart-admin-api/src/main/resources/sit/log4j2.xml diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/sit/spy.properties rename to smart-admin-service/smart-admin-api/src/main/resources/sit/spy.properties diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/sql/quartz_mysql_2.3.0.sql rename to smart-admin-service/smart-admin-api/src/main/resources/sql/quartz_mysql_2.3.0.sql diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/sql/smart-admin.sql rename to smart-admin-service/smart-admin-api/src/main/resources/sql/smart-admin.sql diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/AddDTO.java.vm rename to smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/AddDTO.java.vm diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/Controller.java.vm rename to smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/Controller.java.vm diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/Dao.java.vm rename to smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/Dao.java.vm diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/Dao.xml.vm rename to smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/Dao.xml.vm diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/Entity.java.vm rename to smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/Entity.java.vm diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/ExcelVO.java.vm rename to smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/ExcelVO.java.vm diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/QueryDTO.java.vm rename to smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/QueryDTO.java.vm diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/Service.java.vm rename to smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/Service.java.vm diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/UpdateDTO.java.vm rename to smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/UpdateDTO.java.vm diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/VO.java.vm rename to smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/java/VO.java.vm diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/web/Api.js.vm rename to smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/web/Api.js.vm diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/web/List.vue.vm rename to smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/web/List.vue.vm diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/web/ListForm.vue.vm rename to smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/web/ListForm.vue.vm diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/web/Router.js.vm rename to smart-admin-service/smart-admin-api/src/main/resources/templates/codegenerator/web/Router.js.vm diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/test/java/net/lab1024/smartadmin/BaseTest.java rename to smart-admin-service/smart-admin-api/src/test/java/net/lab1024/smartadmin/BaseTest.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/test/java/net/lab1024/smartadmin/SmartAdminApplicationTests.java rename to smart-admin-service/smart-admin-api/src/test/java/net/lab1024/smartadmin/SmartAdminApplicationTests.java diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-service/smart-admin-api/src/test/java/net/lab1024/smartadmin/module/support/codegenerator/CodeGeneratorServiceTest.java rename to smart-admin-service/smart-admin-api/src/test/java/net/lab1024/smartadmin/module/support/codegenerator/CodeGeneratorServiceTest.java diff --git a/smart_admin_v1/smart-admin-web/.babelrc b/smart-admin-web/.babelrc similarity index 100% rename from smart_admin_v1/smart-admin-web/.babelrc rename to smart-admin-web/.babelrc diff --git a/smart_admin_v1/smart-admin-web/.editorconfig b/smart-admin-web/.editorconfig similarity index 100% rename from smart_admin_v1/smart-admin-web/.editorconfig rename to smart-admin-web/.editorconfig diff --git a/smart_admin_v1/smart-admin-web/.env.development b/smart-admin-web/.env.development similarity index 100% rename from smart_admin_v1/smart-admin-web/.env.development rename to smart-admin-web/.env.development diff --git a/smart_admin_v1/smart-admin-web/.env.local b/smart-admin-web/.env.local similarity index 100% rename from smart_admin_v1/smart-admin-web/.env.local rename to smart-admin-web/.env.local diff --git a/smart_admin_v1/smart-admin-web/.env.prod b/smart-admin-web/.env.prod similarity index 100% rename from smart_admin_v1/smart-admin-web/.env.prod rename to smart-admin-web/.env.prod diff --git a/smart_admin_v1/smart-admin-web/.env.sit b/smart-admin-web/.env.sit similarity index 100% rename from smart_admin_v1/smart-admin-web/.env.sit rename to smart-admin-web/.env.sit diff --git a/smart_admin_v1/smart-admin-web/.eslintignore b/smart-admin-web/.eslintignore similarity index 100% rename from smart_admin_v1/smart-admin-web/.eslintignore rename to smart-admin-web/.eslintignore diff --git a/smart_admin_v1/smart-admin-web/.eslintrc.js b/smart-admin-web/.eslintrc.js similarity index 100% rename from smart_admin_v1/smart-admin-web/.eslintrc.js rename to smart-admin-web/.eslintrc.js diff --git a/smart_admin_v1/smart-admin-web/.gitignore b/smart-admin-web/.gitignore similarity index 100% rename from smart_admin_v1/smart-admin-web/.gitignore rename to smart-admin-web/.gitignore diff --git a/smart_admin_v1/smart-admin-web/.postcssrc.js b/smart-admin-web/.postcssrc.js similarity index 100% rename from smart_admin_v1/smart-admin-web/.postcssrc.js rename to smart-admin-web/.postcssrc.js diff --git a/smart_admin_v1/smart-admin-web/.travis.yml b/smart-admin-web/.travis.yml similarity index 100% rename from smart_admin_v1/smart-admin-web/.travis.yml rename to smart-admin-web/.travis.yml diff --git a/smart_admin_v1/smart-admin-web/README.md b/smart-admin-web/README.md similarity index 100% rename from smart_admin_v1/smart-admin-web/README.md rename to smart-admin-web/README.md diff --git a/smart_admin_v1/smart-admin-web/cypress.json b/smart-admin-web/cypress.json similarity index 100% rename from smart_admin_v1/smart-admin-web/cypress.json rename to smart-admin-web/cypress.json diff --git a/smart_admin_v1/smart-admin-web/doc/notice.txt b/smart-admin-web/doc/notice.txt similarity index 100% rename from smart_admin_v1/smart-admin-web/doc/notice.txt rename to smart-admin-web/doc/notice.txt diff --git a/smart-admin-web/package-lock.json b/smart-admin-web/package-lock.json new file mode 100644 index 00000000..86b799c5 --- /dev/null +++ b/smart-admin-web/package-lock.json @@ -0,0 +1,15500 @@ +{ + "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_v1/smart-admin-web/package.json b/smart-admin-web/package.json similarity index 100% rename from smart_admin_v1/smart-admin-web/package.json rename to smart-admin-web/package.json diff --git a/smart_admin_v1/smart-admin-web/public/favicon.ico b/smart-admin-web/public/favicon.ico similarity index 100% rename from smart_admin_v1/smart-admin-web/public/favicon.ico rename to smart-admin-web/public/favicon.ico diff --git a/smart_admin_v1/smart-admin-web/public/index.html b/smart-admin-web/public/index.html similarity index 100% rename from smart_admin_v1/smart-admin-web/public/index.html rename to smart-admin-web/public/index.html diff --git a/smart_admin_v1/smart-admin-web/src/App.vue b/smart-admin-web/src/App.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/App.vue rename to smart-admin-web/src/App.vue diff --git a/smart_admin_v1/smart-admin-web/src/api/data-scope.js b/smart-admin-web/src/api/data-scope.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/api/data-scope.js rename to smart-admin-web/src/api/data-scope.js diff --git a/smart_admin_v1/smart-admin-web/src/api/department.js b/smart-admin-web/src/api/department.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/api/department.js rename to smart-admin-web/src/api/department.js diff --git a/smart_admin_v1/smart-admin-web/src/api/email.js b/smart-admin-web/src/api/email.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/api/email.js rename to smart-admin-web/src/api/email.js diff --git a/smart_admin_v1/smart-admin-web/src/api/employee.js b/smart-admin-web/src/api/employee.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/api/employee.js rename to smart-admin-web/src/api/employee.js diff --git a/smart_admin_v1/smart-admin-web/src/api/file.js b/smart-admin-web/src/api/file.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/api/file.js rename to smart-admin-web/src/api/file.js diff --git a/smart_admin_v1/smart-admin-web/src/api/heart-beat.js b/smart-admin-web/src/api/heart-beat.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/api/heart-beat.js rename to smart-admin-web/src/api/heart-beat.js diff --git a/smart_admin_v1/smart-admin-web/src/api/login.js b/smart-admin-web/src/api/login.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/api/login.js rename to smart-admin-web/src/api/login.js diff --git a/smart_admin_v1/smart-admin-web/src/api/notice.js b/smart-admin-web/src/api/notice.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/api/notice.js rename to smart-admin-web/src/api/notice.js diff --git a/smart_admin_v1/smart-admin-web/src/api/online-user.js b/smart-admin-web/src/api/online-user.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/api/online-user.js rename to smart-admin-web/src/api/online-user.js diff --git a/smart_admin_v1/smart-admin-web/src/api/peony.js b/smart-admin-web/src/api/peony.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/api/peony.js rename to smart-admin-web/src/api/peony.js diff --git a/smart_admin_v1/smart-admin-web/src/api/position.js b/smart-admin-web/src/api/position.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/api/position.js rename to smart-admin-web/src/api/position.js diff --git a/smart_admin_v1/smart-admin-web/src/api/privilege.js b/smart-admin-web/src/api/privilege.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/api/privilege.js rename to smart-admin-web/src/api/privilege.js diff --git a/smart_admin_v1/smart-admin-web/src/api/role.js b/smart-admin-web/src/api/role.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/api/role.js rename to smart-admin-web/src/api/role.js diff --git a/smart_admin_v1/smart-admin-web/src/api/smart-reload.js b/smart-admin-web/src/api/smart-reload.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/api/smart-reload.js rename to smart-admin-web/src/api/smart-reload.js diff --git a/smart_admin_v1/smart-admin-web/src/api/system-config.js b/smart-admin-web/src/api/system-config.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/api/system-config.js rename to smart-admin-web/src/api/system-config.js diff --git a/smart_admin_v1/smart-admin-web/src/api/task-manage.js b/smart-admin-web/src/api/task-manage.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/api/task-manage.js rename to smart-admin-web/src/api/task-manage.js diff --git a/smart_admin_v1/smart-admin-web/src/api/user-log.js b/smart-admin-web/src/api/user-log.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/api/user-log.js rename to smart-admin-web/src/api/user-log.js diff --git a/smart_admin_v1/smart-admin-web/src/api/user.js b/smart-admin-web/src/api/user.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/api/user.js rename to smart-admin-web/src/api/user.js diff --git a/smart_admin_v1/smart-admin-web/src/assets/icons/demo.css b/smart-admin-web/src/assets/icons/demo.css similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/icons/demo.css rename to smart-admin-web/src/assets/icons/demo.css diff --git a/smart_admin_v1/smart-admin-web/src/assets/icons/demo_index.html b/smart-admin-web/src/assets/icons/demo_index.html similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/icons/demo_index.html rename to smart-admin-web/src/assets/icons/demo_index.html diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/demo.css rename to smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/demo.css diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/demo_index.html rename to smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/demo_index.html diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.css rename to smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.css diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.eot rename to smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.eot diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.js rename to smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.js diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.svg rename to smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.svg diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.ttf rename to smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.ttf diff --git a/smart_admin_v1/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.woff b/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.woff similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.woff rename to smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.woff diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.woff2 rename to smart-admin-web/src/assets/icons/download (4)/font_1299963_2zqwx2axi0j/iconfont.woff2 diff --git a/smart_admin_v1/smart-admin-web/src/assets/icons/iconfont.css b/smart-admin-web/src/assets/icons/iconfont.css similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/icons/iconfont.css rename to smart-admin-web/src/assets/icons/iconfont.css diff --git a/smart_admin_v1/smart-admin-web/src/assets/icons/iconfont.eot b/smart-admin-web/src/assets/icons/iconfont.eot similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/icons/iconfont.eot rename to smart-admin-web/src/assets/icons/iconfont.eot diff --git a/smart_admin_v1/smart-admin-web/src/assets/icons/iconfont.js b/smart-admin-web/src/assets/icons/iconfont.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/icons/iconfont.js rename to smart-admin-web/src/assets/icons/iconfont.js diff --git a/smart_admin_v1/smart-admin-web/src/assets/icons/iconfont.svg b/smart-admin-web/src/assets/icons/iconfont.svg similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/icons/iconfont.svg rename to smart-admin-web/src/assets/icons/iconfont.svg diff --git a/smart_admin_v1/smart-admin-web/src/assets/icons/iconfont.ttf b/smart-admin-web/src/assets/icons/iconfont.ttf similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/icons/iconfont.ttf rename to smart-admin-web/src/assets/icons/iconfont.ttf diff --git a/smart_admin_v1/smart-admin-web/src/assets/icons/iconfont.woff b/smart-admin-web/src/assets/icons/iconfont.woff similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/icons/iconfont.woff rename to smart-admin-web/src/assets/icons/iconfont.woff diff --git a/smart_admin_v1/smart-admin-web/src/assets/icons/iconfont.woff2 b/smart-admin-web/src/assets/icons/iconfont.woff2 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/icons/iconfont.woff2 rename to smart-admin-web/src/assets/icons/iconfont.woff2 diff --git a/smart_admin_v1/smart-admin-web/src/assets/images/default_icon.png b/smart-admin-web/src/assets/images/default_icon.png similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/images/default_icon.png rename to smart-admin-web/src/assets/images/default_icon.png diff --git a/smart_admin_v1/smart-admin-web/src/assets/images/error-page/error-401.svg b/smart-admin-web/src/assets/images/error-page/error-401.svg similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/images/error-page/error-401.svg rename to smart-admin-web/src/assets/images/error-page/error-401.svg diff --git a/smart_admin_v1/smart-admin-web/src/assets/images/error-page/error-404.svg b/smart-admin-web/src/assets/images/error-page/error-404.svg similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/images/error-page/error-404.svg rename to smart-admin-web/src/assets/images/error-page/error-404.svg diff --git a/smart_admin_v1/smart-admin-web/src/assets/images/error-page/error-500.svg b/smart-admin-web/src/assets/images/error-page/error-500.svg similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/images/error-page/error-500.svg rename to smart-admin-web/src/assets/images/error-page/error-500.svg diff --git a/smart_admin_v1/smart-admin-web/src/assets/images/icon-qr-qq-wechat.png b/smart-admin-web/src/assets/images/icon-qr-qq-wechat.png similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/images/icon-qr-qq-wechat.png rename to smart-admin-web/src/assets/images/icon-qr-qq-wechat.png diff --git a/smart_admin_v1/smart-admin-web/src/assets/images/icon-social-bilibili.svg b/smart-admin-web/src/assets/images/icon-social-bilibili.svg similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/images/icon-social-bilibili.svg rename to smart-admin-web/src/assets/images/icon-social-bilibili.svg diff --git a/smart_admin_v1/smart-admin-web/src/assets/images/icon-social-juejin.svg b/smart-admin-web/src/assets/images/icon-social-juejin.svg similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/images/icon-social-juejin.svg rename to smart-admin-web/src/assets/images/icon-social-juejin.svg diff --git a/smart_admin_v1/smart-admin-web/src/assets/images/icon-social-twitter.svg b/smart-admin-web/src/assets/images/icon-social-twitter.svg similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/images/icon-social-twitter.svg rename to smart-admin-web/src/assets/images/icon-social-twitter.svg diff --git a/smart_admin_v1/smart-admin-web/src/assets/images/icon-social-zhihu.svg b/smart-admin-web/src/assets/images/icon-social-zhihu.svg similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/images/icon-social-zhihu.svg rename to smart-admin-web/src/assets/images/icon-social-zhihu.svg diff --git a/smart_admin_v1/smart-admin-web/src/assets/images/login-alipay.png b/smart-admin-web/src/assets/images/login-alipay.png similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/images/login-alipay.png rename to smart-admin-web/src/assets/images/login-alipay.png diff --git a/smart_admin_v1/smart-admin-web/src/assets/images/login-bg.jpg b/smart-admin-web/src/assets/images/login-bg.jpg similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/images/login-bg.jpg rename to smart-admin-web/src/assets/images/login-bg.jpg diff --git a/smart_admin_v1/smart-admin-web/src/assets/images/login-logo.png b/smart-admin-web/src/assets/images/login-logo.png similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/images/login-logo.png rename to smart-admin-web/src/assets/images/login-logo.png diff --git a/smart_admin_v1/smart-admin-web/src/assets/images/login-sina.png b/smart-admin-web/src/assets/images/login-sina.png similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/images/login-sina.png rename to smart-admin-web/src/assets/images/login-sina.png diff --git a/smart_admin_v1/smart-admin-web/src/assets/images/login-taobao.png b/smart-admin-web/src/assets/images/login-taobao.png similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/images/login-taobao.png rename to smart-admin-web/src/assets/images/login-taobao.png diff --git a/smart_admin_v1/smart-admin-web/src/assets/images/login_desc_bg.png b/smart-admin-web/src/assets/images/login_desc_bg.png similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/images/login_desc_bg.png rename to smart-admin-web/src/assets/images/login_desc_bg.png diff --git a/smart_admin_v1/smart-admin-web/src/assets/images/login_logo.png b/smart-admin-web/src/assets/images/login_logo.png similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/images/login_logo.png rename to smart-admin-web/src/assets/images/login_logo.png diff --git a/smart_admin_v1/smart-admin-web/src/assets/images/logo-min.png b/smart-admin-web/src/assets/images/logo-min.png similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/images/logo-min.png rename to smart-admin-web/src/assets/images/logo-min.png diff --git a/smart_admin_v1/smart-admin-web/src/assets/images/logo.png b/smart-admin-web/src/assets/images/logo.png similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/images/logo.png rename to smart-admin-web/src/assets/images/logo.png diff --git a/smart_admin_v1/smart-admin-web/src/assets/images/logo1.png b/smart-admin-web/src/assets/images/logo1.png similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/images/logo1.png rename to smart-admin-web/src/assets/images/logo1.png diff --git a/smart_admin_v1/smart-admin-web/src/assets/images/message.png b/smart-admin-web/src/assets/images/message.png similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/images/message.png rename to smart-admin-web/src/assets/images/message.png diff --git a/smart_admin_v1/smart-admin-web/src/assets/images/shadow.png b/smart-admin-web/src/assets/images/shadow.png similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/images/shadow.png rename to smart-admin-web/src/assets/images/shadow.png diff --git a/smart_admin_v1/smart-admin-web/src/assets/images/slider/sub_slider_active.png b/smart-admin-web/src/assets/images/slider/sub_slider_active.png similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/images/slider/sub_slider_active.png rename to smart-admin-web/src/assets/images/slider/sub_slider_active.png diff --git a/smart_admin_v1/smart-admin-web/src/assets/images/slider/sub_slider_default.png b/smart-admin-web/src/assets/images/slider/sub_slider_default.png similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/images/slider/sub_slider_default.png rename to smart-admin-web/src/assets/images/slider/sub_slider_default.png diff --git a/smart_admin_v1/smart-admin-web/src/assets/style/lib/animate.css b/smart-admin-web/src/assets/style/lib/animate.css similarity index 100% rename from smart_admin_v1/smart-admin-web/src/assets/style/lib/animate.css rename to smart-admin-web/src/assets/style/lib/animate.css diff --git a/smart_admin_v1/smart-admin-web/src/components/active-plate/active-plate.vue b/smart-admin-web/src/components/active-plate/active-plate.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/active-plate/active-plate.vue rename to smart-admin-web/src/components/active-plate/active-plate.vue diff --git a/smart_admin_v1/smart-admin-web/src/components/charts/bar.vue b/smart-admin-web/src/components/charts/bar.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/charts/bar.vue rename to smart-admin-web/src/components/charts/bar.vue diff --git a/smart_admin_v1/smart-admin-web/src/components/charts/index.js b/smart-admin-web/src/components/charts/index.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/charts/index.js rename to smart-admin-web/src/components/charts/index.js diff --git a/smart_admin_v1/smart-admin-web/src/components/charts/pie.vue b/smart-admin-web/src/components/charts/pie.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/charts/pie.vue rename to smart-admin-web/src/components/charts/pie.vue diff --git a/smart_admin_v1/smart-admin-web/src/components/charts/theme.json b/smart-admin-web/src/components/charts/theme.json similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/charts/theme.json rename to smart-admin-web/src/components/charts/theme.json diff --git a/smart_admin_v1/smart-admin-web/src/components/common-icon/common-icon.vue b/smart-admin-web/src/components/common-icon/common-icon.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/common-icon/common-icon.vue rename to smart-admin-web/src/components/common-icon/common-icon.vue diff --git a/smart_admin_v1/smart-admin-web/src/components/common-icon/index.js b/smart-admin-web/src/components/common-icon/index.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/common-icon/index.js rename to smart-admin-web/src/components/common-icon/index.js diff --git a/smart_admin_v1/smart-admin-web/src/components/count-to/count-to.vue b/smart-admin-web/src/components/count-to/count-to.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/count-to/count-to.vue rename to smart-admin-web/src/components/count-to/count-to.vue diff --git a/smart_admin_v1/smart-admin-web/src/components/count-to/index.js b/smart-admin-web/src/components/count-to/index.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/count-to/index.js rename to smart-admin-web/src/components/count-to/index.js diff --git a/smart_admin_v1/smart-admin-web/src/components/count-to/index.less b/smart-admin-web/src/components/count-to/index.less similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/count-to/index.less rename to smart-admin-web/src/components/count-to/index.less diff --git a/smart_admin_v1/smart-admin-web/src/components/editor/editor.vue b/smart-admin-web/src/components/editor/editor.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/editor/editor.vue rename to smart-admin-web/src/components/editor/editor.vue diff --git a/smart_admin_v1/smart-admin-web/src/components/editor/index.js b/smart-admin-web/src/components/editor/index.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/editor/index.js rename to smart-admin-web/src/components/editor/index.js diff --git a/smart_admin_v1/smart-admin-web/src/components/employee/employee-selector.vue b/smart-admin-web/src/components/employee/employee-selector.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/employee/employee-selector.vue rename to smart-admin-web/src/components/employee/employee-selector.vue diff --git a/smart_admin_v1/smart-admin-web/src/components/icons/icons.vue b/smart-admin-web/src/components/icons/icons.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/icons/icons.vue rename to smart-admin-web/src/components/icons/icons.vue diff --git a/smart_admin_v1/smart-admin-web/src/components/icons/index.js b/smart-admin-web/src/components/icons/index.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/icons/index.js rename to smart-admin-web/src/components/icons/index.js diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/components/a-back-top/index.js rename to smart-admin-web/src/components/main/components/a-back-top/index.js diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/components/a-back-top/index.vue rename to smart-admin-web/src/components/main/components/a-back-top/index.vue diff --git a/smart_admin_v1/smart-admin-web/src/components/main/components/fullscreen/fullscreen.vue b/smart-admin-web/src/components/main/components/fullscreen/fullscreen.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/components/fullscreen/fullscreen.vue rename to smart-admin-web/src/components/main/components/fullscreen/fullscreen.vue diff --git a/smart_admin_v1/smart-admin-web/src/components/main/components/fullscreen/index.js b/smart-admin-web/src/components/main/components/fullscreen/index.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/components/fullscreen/index.js rename to smart-admin-web/src/components/main/components/fullscreen/index.js diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/components/header-bar/custom-bread-crumb/custom-bread-crumb.less rename to smart-admin-web/src/components/main/components/header-bar/custom-bread-crumb/custom-bread-crumb.less diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/components/header-bar/custom-bread-crumb/custom-bread-crumb.vue rename to smart-admin-web/src/components/main/components/header-bar/custom-bread-crumb/custom-bread-crumb.vue diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/components/header-bar/custom-bread-crumb/index.js rename to smart-admin-web/src/components/main/components/header-bar/custom-bread-crumb/index.js diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/components/header-bar/header-bar.less rename to smart-admin-web/src/components/main/components/header-bar/header-bar.less diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/components/header-bar/header-bar.vue rename to smart-admin-web/src/components/main/components/header-bar/header-bar.vue diff --git a/smart_admin_v1/smart-admin-web/src/components/main/components/header-bar/index.js b/smart-admin-web/src/components/main/components/header-bar/index.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/components/header-bar/index.js rename to smart-admin-web/src/components/main/components/header-bar/index.js diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/components/header-bar/sider-trigger/index.js rename to smart-admin-web/src/components/main/components/header-bar/sider-trigger/index.js diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/components/header-bar/sider-trigger/sider-trigger.less rename to smart-admin-web/src/components/main/components/header-bar/sider-trigger/sider-trigger.less diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/components/header-bar/sider-trigger/sider-trigger.vue rename to smart-admin-web/src/components/main/components/header-bar/sider-trigger/sider-trigger.vue diff --git a/smart_admin_v1/smart-admin-web/src/components/main/components/language/index.js b/smart-admin-web/src/components/main/components/language/index.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/components/language/index.js rename to smart-admin-web/src/components/main/components/language/index.js diff --git a/smart_admin_v1/smart-admin-web/src/components/main/components/language/language.vue b/smart-admin-web/src/components/main/components/language/language.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/components/language/language.vue rename to smart-admin-web/src/components/main/components/language/language.vue diff --git a/smart_admin_v1/smart-admin-web/src/components/main/components/notice/notice.vue b/smart-admin-web/src/components/main/components/notice/notice.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/components/notice/notice.vue rename to smart-admin-web/src/components/main/components/notice/notice.vue diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/components/side-menu/collapsed-menu.vue rename to smart-admin-web/src/components/main/components/side-menu/collapsed-menu.vue diff --git a/smart_admin_v1/smart-admin-web/src/components/main/components/side-menu/index.js b/smart-admin-web/src/components/main/components/side-menu/index.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/components/side-menu/index.js rename to smart-admin-web/src/components/main/components/side-menu/index.js diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/components/side-menu/item-mixin.js rename to smart-admin-web/src/components/main/components/side-menu/item-mixin.js diff --git a/smart_admin_v1/smart-admin-web/src/components/main/components/side-menu/mixin.js b/smart-admin-web/src/components/main/components/side-menu/mixin.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/components/side-menu/mixin.js rename to smart-admin-web/src/components/main/components/side-menu/mixin.js diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/components/side-menu/side-menu-item.vue rename to smart-admin-web/src/components/main/components/side-menu/side-menu-item.vue diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/components/side-menu/side-menu.less rename to smart-admin-web/src/components/main/components/side-menu/side-menu.less diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/components/side-menu/side-menu.vue rename to smart-admin-web/src/components/main/components/side-menu/side-menu.vue diff --git a/smart_admin_v1/smart-admin-web/src/components/main/components/tags-nav/index.js b/smart-admin-web/src/components/main/components/tags-nav/index.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/components/tags-nav/index.js rename to smart-admin-web/src/components/main/components/tags-nav/index.js diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/components/tags-nav/tags-nav.less rename to smart-admin-web/src/components/main/components/tags-nav/tags-nav.less diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/components/tags-nav/tags-nav.vue rename to smart-admin-web/src/components/main/components/tags-nav/tags-nav.vue diff --git a/smart_admin_v1/smart-admin-web/src/components/main/components/user/index.js b/smart-admin-web/src/components/main/components/user/index.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/components/user/index.js rename to smart-admin-web/src/components/main/components/user/index.js diff --git a/smart_admin_v1/smart-admin-web/src/components/main/components/user/user.less b/smart-admin-web/src/components/main/components/user/user.less similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/components/user/user.less rename to smart-admin-web/src/components/main/components/user/user.less diff --git a/smart_admin_v1/smart-admin-web/src/components/main/components/user/user.vue b/smart-admin-web/src/components/main/components/user/user.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/components/user/user.vue rename to smart-admin-web/src/components/main/components/user/user.vue diff --git a/smart_admin_v1/smart-admin-web/src/components/main/index.js b/smart-admin-web/src/components/main/index.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/index.js rename to smart-admin-web/src/components/main/index.js diff --git a/smart_admin_v1/smart-admin-web/src/components/main/main.less b/smart-admin-web/src/components/main/main.less similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/main.less rename to smart-admin-web/src/components/main/main.less diff --git a/smart_admin_v1/smart-admin-web/src/components/main/main.vue b/smart-admin-web/src/components/main/main.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/main/main.vue rename to smart-admin-web/src/components/main/main.vue diff --git a/smart_admin_v1/smart-admin-web/src/components/smart-admin-ad/ad.vue b/smart-admin-web/src/components/smart-admin-ad/ad.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/smart-admin-ad/ad.vue rename to smart-admin-web/src/components/smart-admin-ad/ad.vue diff --git a/smart_admin_v1/smart-admin-web/src/components/smart-admin-ad/index.js b/smart-admin-web/src/components/smart-admin-ad/index.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/smart-admin-ad/index.js rename to smart-admin-web/src/components/smart-admin-ad/index.js diff --git a/smart_admin_v1/smart-admin-web/src/components/tables/edit.vue b/smart-admin-web/src/components/tables/edit.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/tables/edit.vue rename to smart-admin-web/src/components/tables/edit.vue diff --git a/smart_admin_v1/smart-admin-web/src/components/tables/handle-btns.js b/smart-admin-web/src/components/tables/handle-btns.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/tables/handle-btns.js rename to smart-admin-web/src/components/tables/handle-btns.js diff --git a/smart_admin_v1/smart-admin-web/src/components/tables/index.js b/smart-admin-web/src/components/tables/index.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/tables/index.js rename to smart-admin-web/src/components/tables/index.js diff --git a/smart_admin_v1/smart-admin-web/src/components/tables/index.less b/smart-admin-web/src/components/tables/index.less similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/tables/index.less rename to smart-admin-web/src/components/tables/index.less diff --git a/smart_admin_v1/smart-admin-web/src/components/tables/tables.vue b/smart-admin-web/src/components/tables/tables.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/components/tables/tables.vue rename to smart-admin-web/src/components/tables/tables.vue diff --git a/smart_admin_v1/smart-admin-web/src/config/index.js b/smart-admin-web/src/config/index.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/config/index.js rename to smart-admin-web/src/config/index.js diff --git a/smart_admin_v1/smart-admin-web/src/constants/file.js b/smart-admin-web/src/constants/file.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/constants/file.js rename to smart-admin-web/src/constants/file.js diff --git a/smart_admin_v1/smart-admin-web/src/constants/index.js b/smart-admin-web/src/constants/index.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/constants/index.js rename to smart-admin-web/src/constants/index.js diff --git a/smart_admin_v1/smart-admin-web/src/constants/login.js b/smart-admin-web/src/constants/login.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/constants/login.js rename to smart-admin-web/src/constants/login.js diff --git a/smart_admin_v1/smart-admin-web/src/constants/notice.js b/smart-admin-web/src/constants/notice.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/constants/notice.js rename to smart-admin-web/src/constants/notice.js diff --git a/smart_admin_v1/smart-admin-web/src/constants/privilege.js b/smart-admin-web/src/constants/privilege.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/constants/privilege.js rename to smart-admin-web/src/constants/privilege.js diff --git a/smart_admin_v1/smart-admin-web/src/constants/table-page.js b/smart-admin-web/src/constants/table-page.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/constants/table-page.js rename to smart-admin-web/src/constants/table-page.js diff --git a/smart_admin_v1/smart-admin-web/src/directives/directives.js b/smart-admin-web/src/directives/directives.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/directives/directives.js rename to smart-admin-web/src/directives/directives.js diff --git a/smart_admin_v1/smart-admin-web/src/directives/index.js b/smart-admin-web/src/directives/index.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/directives/index.js rename to smart-admin-web/src/directives/index.js diff --git a/smart_admin_v1/smart-admin-web/src/directives/module/clipboard.js b/smart-admin-web/src/directives/module/clipboard.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/directives/module/clipboard.js rename to smart-admin-web/src/directives/module/clipboard.js diff --git a/smart_admin_v1/smart-admin-web/src/directives/module/draggable.js b/smart-admin-web/src/directives/module/draggable.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/directives/module/draggable.js rename to smart-admin-web/src/directives/module/draggable.js diff --git a/smart_admin_v1/smart-admin-web/src/directives/module/privilege.js b/smart-admin-web/src/directives/module/privilege.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/directives/module/privilege.js rename to smart-admin-web/src/directives/module/privilege.js diff --git a/smart_admin_v1/smart-admin-web/src/filters/index.js b/smart-admin-web/src/filters/index.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/filters/index.js rename to smart-admin-web/src/filters/index.js diff --git a/smart_admin_v1/smart-admin-web/src/lib/cookie.js b/smart-admin-web/src/lib/cookie.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/lib/cookie.js rename to smart-admin-web/src/lib/cookie.js diff --git a/smart_admin_v1/smart-admin-web/src/lib/http.js b/smart-admin-web/src/lib/http.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/lib/http.js rename to smart-admin-web/src/lib/http.js diff --git a/smart_admin_v1/smart-admin-web/src/lib/local.js b/smart-admin-web/src/lib/local.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/lib/local.js rename to smart-admin-web/src/lib/local.js diff --git a/smart_admin_v1/smart-admin-web/src/lib/menu-func.js b/smart-admin-web/src/lib/menu-func.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/lib/menu-func.js rename to smart-admin-web/src/lib/menu-func.js diff --git a/smart_admin_v1/smart-admin-web/src/lib/printPlugs.js b/smart-admin-web/src/lib/printPlugs.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/lib/printPlugs.js rename to smart-admin-web/src/lib/printPlugs.js diff --git a/smart_admin_v1/smart-admin-web/src/lib/render-dom.js b/smart-admin-web/src/lib/render-dom.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/lib/render-dom.js rename to smart-admin-web/src/lib/render-dom.js diff --git a/smart_admin_v1/smart-admin-web/src/lib/table-action.js b/smart-admin-web/src/lib/table-action.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/lib/table-action.js rename to smart-admin-web/src/lib/table-action.js diff --git a/smart_admin_v1/smart-admin-web/src/lib/util.js b/smart-admin-web/src/lib/util.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/lib/util.js rename to smart-admin-web/src/lib/util.js diff --git a/smart_admin_v1/smart-admin-web/src/locale/index.js b/smart-admin-web/src/locale/index.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/locale/index.js rename to smart-admin-web/src/locale/index.js diff --git a/smart_admin_v1/smart-admin-web/src/locale/lang/en-US.js b/smart-admin-web/src/locale/lang/en-US.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/locale/lang/en-US.js rename to smart-admin-web/src/locale/lang/en-US.js diff --git a/smart_admin_v1/smart-admin-web/src/locale/lang/zh-CN.js b/smart-admin-web/src/locale/lang/zh-CN.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/locale/lang/zh-CN.js rename to smart-admin-web/src/locale/lang/zh-CN.js diff --git a/smart_admin_v1/smart-admin-web/src/locale/lang/zh-TW.js b/smart-admin-web/src/locale/lang/zh-TW.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/locale/lang/zh-TW.js rename to smart-admin-web/src/locale/lang/zh-TW.js diff --git a/smart_admin_v1/smart-admin-web/src/main.js b/smart-admin-web/src/main.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/main.js rename to smart-admin-web/src/main.js diff --git a/smart_admin_v1/smart-admin-web/src/main.less b/smart-admin-web/src/main.less similarity index 100% rename from smart_admin_v1/smart-admin-web/src/main.less rename to smart-admin-web/src/main.less diff --git a/smart_admin_v1/smart-admin-web/src/plugins/error-store/index.js b/smart-admin-web/src/plugins/error-store/index.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/plugins/error-store/index.js rename to smart-admin-web/src/plugins/error-store/index.js diff --git a/smart_admin_v1/smart-admin-web/src/plugins/index.js b/smart-admin-web/src/plugins/index.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/plugins/index.js rename to smart-admin-web/src/plugins/index.js diff --git a/smart_admin_v1/smart-admin-web/src/router/before-close.js b/smart-admin-web/src/router/before-close.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/router/before-close.js rename to smart-admin-web/src/router/before-close.js diff --git a/smart_admin_v1/smart-admin-web/src/router/index.js b/smart-admin-web/src/router/index.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/router/index.js rename to smart-admin-web/src/router/index.js diff --git a/smart_admin_v1/smart-admin-web/src/router/module/business/email.js b/smart-admin-web/src/router/module/business/email.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/router/module/business/email.js rename to smart-admin-web/src/router/module/business/email.js diff --git a/smart_admin_v1/smart-admin-web/src/router/module/business/index.js b/smart-admin-web/src/router/module/business/index.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/router/module/business/index.js rename to smart-admin-web/src/router/module/business/index.js diff --git a/smart_admin_v1/smart-admin-web/src/router/module/business/keep-alive.js b/smart-admin-web/src/router/module/business/keep-alive.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/router/module/business/keep-alive.js rename to smart-admin-web/src/router/module/business/keep-alive.js diff --git a/smart_admin_v1/smart-admin-web/src/router/module/business/notice.js b/smart-admin-web/src/router/module/business/notice.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/router/module/business/notice.js rename to smart-admin-web/src/router/module/business/notice.js diff --git a/smart_admin_v1/smart-admin-web/src/router/module/business/peony.js b/smart-admin-web/src/router/module/business/peony.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/router/module/business/peony.js rename to smart-admin-web/src/router/module/business/peony.js diff --git a/smart_admin_v1/smart-admin-web/src/router/module/business/three-router.js b/smart-admin-web/src/router/module/business/three-router.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/router/module/business/three-router.js rename to smart-admin-web/src/router/module/business/three-router.js diff --git a/smart_admin_v1/smart-admin-web/src/router/module/error.js b/smart-admin-web/src/router/module/error.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/router/module/error.js rename to smart-admin-web/src/router/module/error.js diff --git a/smart_admin_v1/smart-admin-web/src/router/module/home.js b/smart-admin-web/src/router/module/home.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/router/module/home.js rename to smart-admin-web/src/router/module/home.js diff --git a/smart_admin_v1/smart-admin-web/src/router/module/support/api-doc.js b/smart-admin-web/src/router/module/support/api-doc.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/router/module/support/api-doc.js rename to smart-admin-web/src/router/module/support/api-doc.js diff --git a/smart_admin_v1/smart-admin-web/src/router/module/support/heart-beat.js b/smart-admin-web/src/router/module/support/heart-beat.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/router/module/support/heart-beat.js rename to smart-admin-web/src/router/module/support/heart-beat.js diff --git a/smart_admin_v1/smart-admin-web/src/router/module/support/index.js b/smart-admin-web/src/router/module/support/index.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/router/module/support/index.js rename to smart-admin-web/src/router/module/support/index.js diff --git a/smart_admin_v1/smart-admin-web/src/router/module/support/monitor.js b/smart-admin-web/src/router/module/support/monitor.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/router/module/support/monitor.js rename to smart-admin-web/src/router/module/support/monitor.js diff --git a/smart_admin_v1/smart-admin-web/src/router/module/support/reload.js b/smart-admin-web/src/router/module/support/reload.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/router/module/support/reload.js rename to smart-admin-web/src/router/module/support/reload.js diff --git a/smart_admin_v1/smart-admin-web/src/router/module/support/task.js b/smart-admin-web/src/router/module/support/task.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/router/module/support/task.js rename to smart-admin-web/src/router/module/support/task.js diff --git a/smart_admin_v1/smart-admin-web/src/router/module/system/employee.js b/smart-admin-web/src/router/module/system/employee.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/router/module/system/employee.js rename to smart-admin-web/src/router/module/system/employee.js diff --git a/smart_admin_v1/smart-admin-web/src/router/module/system/file.js b/smart-admin-web/src/router/module/system/file.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/router/module/system/file.js rename to smart-admin-web/src/router/module/system/file.js diff --git a/smart_admin_v1/smart-admin-web/src/router/module/system/index.js b/smart-admin-web/src/router/module/system/index.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/router/module/system/index.js rename to smart-admin-web/src/router/module/system/index.js diff --git a/smart_admin_v1/smart-admin-web/src/router/module/system/system-setting.js b/smart-admin-web/src/router/module/system/system-setting.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/router/module/system/system-setting.js rename to smart-admin-web/src/router/module/system/system-setting.js diff --git a/smart_admin_v1/smart-admin-web/src/router/module/system/user-log.js b/smart-admin-web/src/router/module/system/user-log.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/router/module/system/user-log.js rename to smart-admin-web/src/router/module/system/user-log.js diff --git a/smart_admin_v1/smart-admin-web/src/router/routers.js b/smart-admin-web/src/router/routers.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/router/routers.js rename to smart-admin-web/src/router/routers.js diff --git a/smart_admin_v1/smart-admin-web/src/store/index.js b/smart-admin-web/src/store/index.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/store/index.js rename to smart-admin-web/src/store/index.js diff --git a/smart_admin_v1/smart-admin-web/src/store/module/app.js b/smart-admin-web/src/store/module/app.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/store/module/app.js rename to smart-admin-web/src/store/module/app.js diff --git a/smart_admin_v1/smart-admin-web/src/store/module/notice.js b/smart-admin-web/src/store/module/notice.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/store/module/notice.js rename to smart-admin-web/src/store/module/notice.js diff --git a/smart_admin_v1/smart-admin-web/src/store/module/user.js b/smart-admin-web/src/store/module/user.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/store/module/user.js rename to smart-admin-web/src/store/module/user.js diff --git a/smart_admin_v1/smart-admin-web/src/themes/ReadMe.md b/smart-admin-web/src/themes/ReadMe.md similarity index 100% rename from smart_admin_v1/smart-admin-web/src/themes/ReadMe.md rename to smart-admin-web/src/themes/ReadMe.md diff --git a/smart_admin_v1/smart-admin-web/src/themes/index.less b/smart-admin-web/src/themes/index.less similarity index 100% rename from smart_admin_v1/smart-admin-web/src/themes/index.less rename to smart-admin-web/src/themes/index.less diff --git a/smart_admin_v1/smart-admin-web/src/views/business/email/email-list.vue b/smart-admin-web/src/views/business/email/email-list.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/business/email/email-list.vue rename to smart-admin-web/src/views/business/email/email-list.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/business/email/send-mail.vue b/smart-admin-web/src/views/business/email/send-mail.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/business/email/send-mail.vue rename to smart-admin-web/src/views/business/email/send-mail.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/business/keep-alive/add-content.vue b/smart-admin-web/src/views/business/keep-alive/add-content.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/business/keep-alive/add-content.vue rename to smart-admin-web/src/views/business/keep-alive/add-content.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/business/keep-alive/content-list.vue b/smart-admin-web/src/views/business/keep-alive/content-list.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/business/keep-alive/content-list.vue rename to smart-admin-web/src/views/business/keep-alive/content-list.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/business/notice/notice-detail.vue b/smart-admin-web/src/views/business/notice/notice-detail.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/business/notice/notice-detail.vue rename to smart-admin-web/src/views/business/notice/notice-detail.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/business/notice/notice-list.vue b/smart-admin-web/src/views/business/notice/notice-list.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/business/notice/notice-list.vue rename to smart-admin-web/src/views/business/notice/notice-list.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/business/notice/person-notice.vue b/smart-admin-web/src/views/business/notice/person-notice.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/business/notice/person-notice.vue rename to smart-admin-web/src/views/business/notice/person-notice.vue diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/business/peony/components/peony-list-form.vue rename to smart-admin-web/src/views/business/peony/components/peony-list-form.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/business/peony/peony-list.vue b/smart-admin-web/src/views/business/peony/peony-list.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/business/peony/peony-list.vue rename to smart-admin-web/src/views/business/peony/peony-list.vue diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/business/three-level-router/three-level-router-view.vue rename to smart-admin-web/src/views/business/three-level-router/three-level-router-view.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/error-page/401.vue b/smart-admin-web/src/views/error-page/401.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/error-page/401.vue rename to smart-admin-web/src/views/error-page/401.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/error-page/404.vue b/smart-admin-web/src/views/error-page/404.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/error-page/404.vue rename to smart-admin-web/src/views/error-page/404.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/error-page/500.vue b/smart-admin-web/src/views/error-page/500.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/error-page/500.vue rename to smart-admin-web/src/views/error-page/500.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/error-page/back-btn-group.vue b/smart-admin-web/src/views/error-page/back-btn-group.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/error-page/back-btn-group.vue rename to smart-admin-web/src/views/error-page/back-btn-group.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/error-page/error-content.vue b/smart-admin-web/src/views/error-page/error-content.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/error-page/error-content.vue rename to smart-admin-web/src/views/error-page/error-content.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/error-page/error.less b/smart-admin-web/src/views/error-page/error.less similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/error-page/error.less rename to smart-admin-web/src/views/error-page/error.less diff --git a/smart_admin_v1/smart-admin-web/src/views/home/components/card.vue b/smart-admin-web/src/views/home/components/card.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/home/components/card.vue rename to smart-admin-web/src/views/home/components/card.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/home/components/chart-bar.vue b/smart-admin-web/src/views/home/components/chart-bar.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/home/components/chart-bar.vue rename to smart-admin-web/src/views/home/components/chart-bar.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/home/components/chart-funnel.vue b/smart-admin-web/src/views/home/components/chart-funnel.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/home/components/chart-funnel.vue rename to smart-admin-web/src/views/home/components/chart-funnel.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/home/components/chart-gauge.vue b/smart-admin-web/src/views/home/components/chart-gauge.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/home/components/chart-gauge.vue rename to smart-admin-web/src/views/home/components/chart-gauge.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/home/components/chart-line.vue b/smart-admin-web/src/views/home/components/chart-line.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/home/components/chart-line.vue rename to smart-admin-web/src/views/home/components/chart-line.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/home/components/chart-pie.vue b/smart-admin-web/src/views/home/components/chart-pie.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/home/components/chart-pie.vue rename to smart-admin-web/src/views/home/components/chart-pie.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/home/components/home-circle.vue b/smart-admin-web/src/views/home/components/home-circle.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/home/components/home-circle.vue rename to smart-admin-web/src/views/home/components/home-circle.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/home/components/home-progress.vue b/smart-admin-web/src/views/home/components/home-progress.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/home/components/home-progress.vue rename to smart-admin-web/src/views/home/components/home-progress.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/home/components/theme.json b/smart-admin-web/src/views/home/components/theme.json similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/home/components/theme.json rename to smart-admin-web/src/views/home/components/theme.json diff --git a/smart_admin_v1/smart-admin-web/src/views/home/home.vue b/smart-admin-web/src/views/home/home.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/home/home.vue rename to smart-admin-web/src/views/home/home.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/home/index.js b/smart-admin-web/src/views/home/index.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/home/index.js rename to smart-admin-web/src/views/home/index.js diff --git a/smart_admin_v1/smart-admin-web/src/views/login/canvas.js b/smart-admin-web/src/views/login/canvas.js similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/login/canvas.js rename to smart-admin-web/src/views/login/canvas.js diff --git a/smart_admin_v1/smart-admin-web/src/views/login/components/login-form.vue b/smart-admin-web/src/views/login/components/login-form.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/login/components/login-form.vue rename to smart-admin-web/src/views/login/components/login-form.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/login/login.less b/smart-admin-web/src/views/login/login.less similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/login/login.less rename to smart-admin-web/src/views/login/login.less diff --git a/smart_admin_v1/smart-admin-web/src/views/login/login.vue b/smart-admin-web/src/views/login/login.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/login/login.vue rename to smart-admin-web/src/views/login/login.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/support/api-doc/swagger.vue b/smart-admin-web/src/views/support/api-doc/swagger.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/support/api-doc/swagger.vue rename to smart-admin-web/src/views/support/api-doc/swagger.vue diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/support/heart-beat/heart-beat-list.vue rename to smart-admin-web/src/views/support/heart-beat/heart-beat-list.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/support/monitor/online-user.vue b/smart-admin-web/src/views/support/monitor/online-user.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/support/monitor/online-user.vue rename to smart-admin-web/src/views/support/monitor/online-user.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/support/monitor/sql.vue b/smart-admin-web/src/views/support/monitor/sql.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/support/monitor/sql.vue rename to smart-admin-web/src/views/support/monitor/sql.vue diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/support/reload/smart-reload/smart-reload-list.vue rename to smart-admin-web/src/views/support/reload/smart-reload/smart-reload-list.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/support/task/task-list.vue b/smart-admin-web/src/views/support/task/task-list.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/support/task/task-list.vue rename to smart-admin-web/src/views/support/task/task-list.vue diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/system/employee/components/department-employee-tree-item/department-employee-tree-item.vue rename to smart-admin-web/src/views/system/employee/components/department-employee-tree-item/department-employee-tree-item.vue diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/system/employee/components/department-employee-tree/department-employee-tree.vue rename to smart-admin-web/src/views/system/employee/components/department-employee-tree/department-employee-tree.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/system/employee/position/position-list.vue b/smart-admin-web/src/views/system/employee/position/position-list.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/system/employee/position/position-list.vue rename to smart-admin-web/src/views/system/employee/position/position-list.vue diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/system/employee/role-employee/components/employee-table-add/employee-table-add.vue rename to smart-admin-web/src/views/system/employee/role-employee/components/employee-table-add/employee-table-add.vue diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/system/employee/role-employee/components/employee-table-detail/employee-table-detail.vue rename to smart-admin-web/src/views/system/employee/role-employee/components/employee-table-detail/employee-table-detail.vue diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/system/employee/role-employee/components/employee-table/employee-table.vue rename to smart-admin-web/src/views/system/employee/role-employee/components/employee-table/employee-table.vue diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/system/employee/role-employee/role-employee-manage.vue rename to smart-admin-web/src/views/system/employee/role-employee/role-employee-manage.vue diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/system/employee/role/components/role-data-scope/role-data-scope.vue rename to smart-admin-web/src/views/system/employee/role/components/role-data-scope/role-data-scope.vue diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/system/employee/role/components/role-list/role-list.vue rename to smart-admin-web/src/views/system/employee/role/components/role-list/role-list.vue diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/system/employee/role/components/role-tree/role-tree.vue rename to smart-admin-web/src/views/system/employee/role/components/role-tree/role-tree.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/system/employee/role/role-manage.vue b/smart-admin-web/src/views/system/employee/role/role-manage.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/system/employee/role/role-manage.vue rename to smart-admin-web/src/views/system/employee/role/role-manage.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/system/file/file-list.vue b/smart-admin-web/src/views/system/file/file-list.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/system/file/file-list.vue rename to smart-admin-web/src/views/system/file/file-list.vue diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/system/system-setting/system-config/system-config.vue rename to smart-admin-web/src/views/system/system-setting/system-config/system-config.vue diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/system/system-setting/system-privilege/components/privilege-form.vue rename to smart-admin-web/src/views/system/system-setting/system-privilege/components/privilege-form.vue diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/system/system-setting/system-privilege/system-privilege.vue rename to smart-admin-web/src/views/system/system-setting/system-privilege/system-privilege.vue diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/system/user-log/user-login-log.vue rename to smart-admin-web/src/views/system/user-log/user-login-log.vue diff --git a/smart_admin_v1/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 similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/system/user-log/user-operate-log.vue rename to smart-admin-web/src/views/system/user-log/user-operate-log.vue diff --git a/smart_admin_v1/smart-admin-web/src/views/three-router/three-content.vue b/smart-admin-web/src/views/three-router/three-content.vue similarity index 100% rename from smart_admin_v1/smart-admin-web/src/views/three-router/three-content.vue rename to smart-admin-web/src/views/three-router/three-content.vue diff --git a/smart_admin_v1/smart-admin-web/tests/e2e/.eslintrc b/smart-admin-web/tests/e2e/.eslintrc similarity index 100% rename from smart_admin_v1/smart-admin-web/tests/e2e/.eslintrc rename to smart-admin-web/tests/e2e/.eslintrc diff --git a/smart_admin_v1/smart-admin-web/tests/e2e/plugins/index.js b/smart-admin-web/tests/e2e/plugins/index.js similarity index 100% rename from smart_admin_v1/smart-admin-web/tests/e2e/plugins/index.js rename to smart-admin-web/tests/e2e/plugins/index.js diff --git a/smart_admin_v1/smart-admin-web/tests/e2e/specs/test.js b/smart-admin-web/tests/e2e/specs/test.js similarity index 100% rename from smart_admin_v1/smart-admin-web/tests/e2e/specs/test.js rename to smart-admin-web/tests/e2e/specs/test.js diff --git a/smart_admin_v1/smart-admin-web/tests/e2e/support/commands.js b/smart-admin-web/tests/e2e/support/commands.js similarity index 100% rename from smart_admin_v1/smart-admin-web/tests/e2e/support/commands.js rename to smart-admin-web/tests/e2e/support/commands.js diff --git a/smart_admin_v1/smart-admin-web/tests/e2e/support/index.js b/smart-admin-web/tests/e2e/support/index.js similarity index 100% rename from smart_admin_v1/smart-admin-web/tests/e2e/support/index.js rename to smart-admin-web/tests/e2e/support/index.js diff --git a/smart_admin_v1/smart-admin-web/tests/unit/.eslintrc.js b/smart-admin-web/tests/unit/.eslintrc.js similarity index 100% rename from smart_admin_v1/smart-admin-web/tests/unit/.eslintrc.js rename to smart-admin-web/tests/unit/.eslintrc.js diff --git a/smart_admin_v1/smart-admin-web/tests/unit/HelloWorld.spec.js b/smart-admin-web/tests/unit/HelloWorld.spec.js similarity index 100% rename from smart_admin_v1/smart-admin-web/tests/unit/HelloWorld.spec.js rename to smart-admin-web/tests/unit/HelloWorld.spec.js diff --git a/smart_admin_v1/smart-admin-web/vscode/settings.json b/smart-admin-web/vscode/settings.json similarity index 100% rename from smart_admin_v1/smart-admin-web/vscode/settings.json rename to smart-admin-web/vscode/settings.json diff --git a/smart_admin_v1/smart-admin-web/vue.config.js b/smart-admin-web/vue.config.js similarity index 100% rename from smart_admin_v1/smart-admin-web/vue.config.js rename to smart-admin-web/vue.config.js diff --git a/smart_admin_v2/smart-admin-api/.gitignore b/smart_admin_v2/smart-admin-api/.gitignore deleted file mode 100644 index ab428af8..00000000 --- a/smart_admin_v2/smart-admin-api/.gitignore +++ /dev/null @@ -1,35 +0,0 @@ -HELP.md -target/ - -velocity.log - -!.mvn/wrapper/maven-wrapper.jar - - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -.DS_Store - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ - -### VS Code ### -.vscode/ diff --git a/smart_admin_v2/smart-admin-api/pom.xml b/smart_admin_v2/smart-admin-api/pom.xml deleted file mode 100644 index 70da0158..00000000 --- a/smart_admin_v2/smart-admin-api/pom.xml +++ /dev/null @@ -1,368 +0,0 @@ - - 4.0.0 - - net.1024lab - sa-parent - 1.0.0 - pom - - sa-parent - SmartAdmin project - - - sa-common - sa-admin - - - - 1.8 - 2.7.5 - 2.0.8 - 3.5.2 - 3.8.6 - 2.7.0 - 2.0.16 - 1.2.14 - 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.boot - spring-boot-dependencies - ${springboot.version} - pom - import - - - - - 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/* - test/* - 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 - - - - org.springframework.boot - spring-boot-maven-plugin - ${springboot.version} - - - - - - - - dev - - dev - - - true - - - - - test - - test - - - - - pre - - pre - - - - - prod - - prod - - - - - \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-admin/pom.xml b/smart_admin_v2/smart-admin-api/sa-admin/pom.xml deleted file mode 100644 index af0f1935..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - 4.0.0 - - net.1024lab - sa-parent - 1.0.0 - ../pom.xml - - - sa-admin - 1.0.0 - jar - - sa-admin - sa-admin project - - - - - net.1024lab - sa-common - ${project.version} - - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - net.lab1024.sa.admin.SmartAdminApplication - - - - - repackage - - - - - - - - \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/SmartAdminApplication.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/SmartAdminApplication.java deleted file mode 100644 index 82975649..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/SmartAdminApplication.java +++ /dev/null @@ -1,33 +0,0 @@ -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.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.EnableAspectJAutoProxy; -import org.springframework.scheduling.annotation.EnableScheduling; - -/** - * SmartAdmin 项目启动类 - * - * @Author 1024创新实验室-主任:卓大 - * @Date 2022-08-29 21:00:58 - * @Wechat zhuoda1024 - * @Email lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022 - */ -@EnableCaching -@EnableScheduling -@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true) -@ComponentScan(basePackages = {"net.lab1024.sa"}) -@MapperScan(value = "net.lab1024.sa", annotationClass = Mapper.class) -@SpringBootApplication(exclude = {UserDetailsServiceAutoConfiguration.class }) -public class SmartAdminApplication { - - public static void main(String[] args) { - SpringApplication.run(SmartAdminApplication.class, args); - } -} diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/common/AdminBaseController.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/common/AdminBaseController.java deleted file mode 100644 index f54bbd51..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/common/AdminBaseController.java +++ /dev/null @@ -1,13 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/config/OperateLogAspectConfig.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/config/OperateLogAspectConfig.java deleted file mode 100644 index 214502e0..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/config/OperateLogAspectConfig.java +++ /dev/null @@ -1,34 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/config/SecurityConfig.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/config/SecurityConfig.java deleted file mode 100644 index 8f12ba27..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/config/SecurityConfig.java +++ /dev/null @@ -1,40 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/config/SecurityMethodConfig.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/config/SecurityMethodConfig.java deleted file mode 100644 index 772b2d5d..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/config/SecurityMethodConfig.java +++ /dev/null @@ -1,50 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminCacheConst.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminCacheConst.java deleted file mode 100644 index ebacfdf0..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminCacheConst.java +++ /dev/null @@ -1,57 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminRedisKeyConst.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminRedisKeyConst.java deleted file mode 100644 index 301c73a8..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminRedisKeyConst.java +++ /dev/null @@ -1,17 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminSwaggerTagConst.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminSwaggerTagConst.java deleted file mode 100644 index a037fa66..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminSwaggerTagConst.java +++ /dev/null @@ -1,55 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/listener/AdminStartupRunner.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/listener/AdminStartupRunner.java deleted file mode 100644 index cf8d0490..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/listener/AdminStartupRunner.java +++ /dev/null @@ -1,40 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/constant/CategoryTypeEnum.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/constant/CategoryTypeEnum.java deleted file mode 100644 index 2df51fe3..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/constant/CategoryTypeEnum.java +++ /dev/null @@ -1,36 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/controller/CategoryController.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/controller/CategoryController.java deleted file mode 100644 index af775499..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/controller/CategoryController.java +++ /dev/null @@ -1,71 +0,0 @@ -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); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @ApiOperation("更新类目 @author 胡克") - @PostMapping("/category/update") - public ResponseDTO update(@RequestBody @Valid CategoryUpdateForm updateForm) { -// return categoryService.update(updateForm); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @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); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } -} diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/dao/CategoryDao.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/dao/CategoryDao.java deleted file mode 100644 index c9ac00fd..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/dao/CategoryDao.java +++ /dev/null @@ -1,72 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/dto/CategoryBaseDTO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/dto/CategoryBaseDTO.java deleted file mode 100644 index 5381ab9c..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/dto/CategoryBaseDTO.java +++ /dev/null @@ -1,44 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/dto/CategorySimpleDTO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/dto/CategorySimpleDTO.java deleted file mode 100644 index 7f25e7b2..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/dto/CategorySimpleDTO.java +++ /dev/null @@ -1,26 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/entity/CategoryEntity.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/entity/CategoryEntity.java deleted file mode 100644 index f8ee74af..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/entity/CategoryEntity.java +++ /dev/null @@ -1,67 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/form/CategoryAddForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/form/CategoryAddForm.java deleted file mode 100644 index 29a37810..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/form/CategoryAddForm.java +++ /dev/null @@ -1,49 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/form/CategoryTreeQueryForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/form/CategoryTreeQueryForm.java deleted file mode 100644 index 907bca77..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/form/CategoryTreeQueryForm.java +++ /dev/null @@ -1,25 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/form/CategoryUpdateForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/form/CategoryUpdateForm.java deleted file mode 100644 index 959c7027..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/form/CategoryUpdateForm.java +++ /dev/null @@ -1,24 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/vo/CategoryTreeVO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/vo/CategoryTreeVO.java deleted file mode 100644 index db3ecda3..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/vo/CategoryTreeVO.java +++ /dev/null @@ -1,40 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/vo/CategoryVO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/vo/CategoryVO.java deleted file mode 100644 index 23b71962..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/domain/vo/CategoryVO.java +++ /dev/null @@ -1,51 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/manager/CategoryCacheManager.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/manager/CategoryCacheManager.java deleted file mode 100644 index 819d99dc..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/manager/CategoryCacheManager.java +++ /dev/null @@ -1,120 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/service/CategoryQueryService.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/service/CategoryQueryService.java deleted file mode 100644 index 4f643e66..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/service/CategoryQueryService.java +++ /dev/null @@ -1,214 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/service/CategoryService.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/service/CategoryService.java deleted file mode 100644 index 2dd1ae44..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/category/service/CategoryService.java +++ /dev/null @@ -1,220 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/constant/GoodsStatusEnum.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/constant/GoodsStatusEnum.java deleted file mode 100644 index 8638da70..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/constant/GoodsStatusEnum.java +++ /dev/null @@ -1,42 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/controller/GoodsController.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/controller/GoodsController.java deleted file mode 100644 index 2679118b..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/controller/GoodsController.java +++ /dev/null @@ -1,79 +0,0 @@ -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); -// return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @ApiOperation("更新商品 @author 胡克") - @PostMapping("/goods/update") - @PreAuthorize("@saAuth.checkPermission('goods:update')") - public ResponseDTO update(@RequestBody @Valid GoodsUpdateForm updateForm) { -// return goodsService.update(updateForm); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @ApiOperation("删除 @author 卓大") - @GetMapping("/goods/delete/{goodsId}") - @PreAuthorize("@saAuth.checkPermission('goods:delete')") - public ResponseDTO delete(@PathVariable Long goodsId) { -// return goodsService.delete(goodsId); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @ApiOperation("批量 @author 卓大") - @PostMapping("/goods/batchDelete") - @PreAuthorize("@saAuth.checkPermission('goods:batchDelete')") - public ResponseDTO batchDelete(@RequestBody @Valid ValidateList idList) { -// return goodsService.batchDelete(idList); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - -} diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/dao/GoodsDao.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/dao/GoodsDao.java deleted file mode 100644 index 0493f2e3..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/dao/GoodsDao.java +++ /dev/null @@ -1,41 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/entity/GoodsEntity.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/entity/GoodsEntity.java deleted file mode 100644 index a2878a66..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/entity/GoodsEntity.java +++ /dev/null @@ -1,75 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/form/GoodsAddForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/form/GoodsAddForm.java deleted file mode 100644 index 27474272..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/form/GoodsAddForm.java +++ /dev/null @@ -1,57 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/form/GoodsQueryForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/form/GoodsQueryForm.java deleted file mode 100644 index e25e3520..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/form/GoodsQueryForm.java +++ /dev/null @@ -1,46 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/form/GoodsUpdateForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/form/GoodsUpdateForm.java deleted file mode 100644 index f72656ec..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/form/GoodsUpdateForm.java +++ /dev/null @@ -1,23 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/vo/GoodsVO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/vo/GoodsVO.java deleted file mode 100644 index fe7eaaf6..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/vo/GoodsVO.java +++ /dev/null @@ -1,56 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/manager/GoodsManager.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/manager/GoodsManager.java deleted file mode 100644 index 898b6aab..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/manager/GoodsManager.java +++ /dev/null @@ -1,20 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/service/GoodsService.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/service/GoodsService.java deleted file mode 100644 index b5cbe38a..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/service/GoodsService.java +++ /dev/null @@ -1,167 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/BankController.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/BankController.java deleted file mode 100644 index b3c0c986..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/BankController.java +++ /dev/null @@ -1,75 +0,0 @@ -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); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } -} diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/BankDao.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/BankDao.java deleted file mode 100644 index a45d406a..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/BankDao.java +++ /dev/null @@ -1,61 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/BankService.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/BankService.java deleted file mode 100644 index 48c120bc..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/BankService.java +++ /dev/null @@ -1,162 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankCreateForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankCreateForm.java deleted file mode 100644 index 031ceb75..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankCreateForm.java +++ /dev/null @@ -1,58 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankEntity.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankEntity.java deleted file mode 100644 index 0b3ec08d..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankEntity.java +++ /dev/null @@ -1,95 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankQueryForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankQueryForm.java deleted file mode 100644 index 839b02f6..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankQueryForm.java +++ /dev/null @@ -1,40 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankUpdateForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankUpdateForm.java deleted file mode 100644 index db8a2c71..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankUpdateForm.java +++ /dev/null @@ -1,23 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankVO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankVO.java deleted file mode 100644 index 5cfcb5b6..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/bank/domain/BankVO.java +++ /dev/null @@ -1,58 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseController.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseController.java deleted file mode 100644 index 29233f93..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseController.java +++ /dev/null @@ -1,118 +0,0 @@ -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); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @ApiOperation(value = "编辑企业 @author 开云") - @PostMapping("/oa/enterprise/update") - @SaAuth - public ResponseDTO updateEnterprise(@RequestBody @Valid EnterpriseUpdateForm updateVO) { -// return enterpriseService.updateEnterprise(updateVO); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @ApiOperation(value = "删除企业 @author 开云") - @GetMapping("/oa/enterprise/delete/{enterpriseId}") - @SaAuth - public ResponseDTO deleteEnterprise(@PathVariable Long enterpriseId) { -// return enterpriseService.deleteEnterprise(enterpriseId); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseEmployeeManager.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseEmployeeManager.java deleted file mode 100644 index 1ac3fd5e..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseEmployeeManager.java +++ /dev/null @@ -1,19 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseService.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseService.java deleted file mode 100644 index b065d3b8..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseService.java +++ /dev/null @@ -1,252 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/constant/EnterpriseTypeEnum.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/constant/EnterpriseTypeEnum.java deleted file mode 100644 index ddbf5f79..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/constant/EnterpriseTypeEnum.java +++ /dev/null @@ -1,40 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/dao/EnterpriseDao.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/dao/EnterpriseDao.java deleted file mode 100644 index 5b58609a..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/dao/EnterpriseDao.java +++ /dev/null @@ -1,72 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/dao/EnterpriseEmployeeDao.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/dao/EnterpriseEmployeeDao.java deleted file mode 100644 index 93808710..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/dao/EnterpriseEmployeeDao.java +++ /dev/null @@ -1,88 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/entity/EnterpriseEmployeeEntity.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/entity/EnterpriseEmployeeEntity.java deleted file mode 100644 index a4c9b8ea..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/entity/EnterpriseEmployeeEntity.java +++ /dev/null @@ -1,51 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/entity/EnterpriseEntity.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/entity/EnterpriseEntity.java deleted file mode 100644 index 67b4c48e..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/entity/EnterpriseEntity.java +++ /dev/null @@ -1,153 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseCreateForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseCreateForm.java deleted file mode 100644 index 4db85d21..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseCreateForm.java +++ /dev/null @@ -1,101 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseEmployeeForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseEmployeeForm.java deleted file mode 100644 index 84897956..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseEmployeeForm.java +++ /dev/null @@ -1,29 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseEmployeeQueryForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseEmployeeQueryForm.java deleted file mode 100644 index 33b6a738..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseEmployeeQueryForm.java +++ /dev/null @@ -1,35 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseQueryForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseQueryForm.java deleted file mode 100644 index 06fd5783..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseQueryForm.java +++ /dev/null @@ -1,38 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseUpdateForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseUpdateForm.java deleted file mode 100644 index 200e15e7..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/form/EnterpriseUpdateForm.java +++ /dev/null @@ -1,23 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/vo/EnterpriseEmployeeVO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/vo/EnterpriseEmployeeVO.java deleted file mode 100644 index 0e37ee59..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/vo/EnterpriseEmployeeVO.java +++ /dev/null @@ -1,47 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/vo/EnterpriseListVO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/vo/EnterpriseListVO.java deleted file mode 100644 index 806ff89d..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/vo/EnterpriseListVO.java +++ /dev/null @@ -1,20 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/vo/EnterpriseVO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/vo/EnterpriseVO.java deleted file mode 100644 index 828424e5..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/domain/vo/EnterpriseVO.java +++ /dev/null @@ -1,89 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/InvoiceController.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/InvoiceController.java deleted file mode 100644 index 40909dc9..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/InvoiceController.java +++ /dev/null @@ -1,80 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/InvoiceDao.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/InvoiceDao.java deleted file mode 100644 index 371a4edb..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/InvoiceDao.java +++ /dev/null @@ -1,61 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/InvoiceService.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/InvoiceService.java deleted file mode 100644 index 70afe51d..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/InvoiceService.java +++ /dev/null @@ -1,158 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceAddForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceAddForm.java deleted file mode 100644 index 0a87edee..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceAddForm.java +++ /dev/null @@ -1,59 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceEntity.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceEntity.java deleted file mode 100644 index bc7d563a..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceEntity.java +++ /dev/null @@ -1,98 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceQueryForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceQueryForm.java deleted file mode 100644 index 0883bd3f..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceQueryForm.java +++ /dev/null @@ -1,40 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceUpdateForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceUpdateForm.java deleted file mode 100644 index 053d4934..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceUpdateForm.java +++ /dev/null @@ -1,23 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceVO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceVO.java deleted file mode 100644 index 2c8fb0e9..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/invoice/domain/InvoiceVO.java +++ /dev/null @@ -1,58 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/constant/NoticeVisibleRangeDataTypeEnum.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/constant/NoticeVisibleRangeDataTypeEnum.java deleted file mode 100644 index 27f4d163..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/constant/NoticeVisibleRangeDataTypeEnum.java +++ /dev/null @@ -1,30 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/controller/NoticeController.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/controller/NoticeController.java deleted file mode 100644 index 416c163f..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/controller/NoticeController.java +++ /dev/null @@ -1,144 +0,0 @@ -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); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @ApiOperation("通知公告类型-修改 @author 卓大") - @GetMapping("/oa/noticeType/update/{noticeTypeId}/{name}") - public ResponseDTO update(@PathVariable Long noticeTypeId, @PathVariable String name) { -// return noticeTypeService.update(noticeTypeId, name); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @ApiOperation("通知公告类型-删除 @author 卓大") - @GetMapping("/oa/noticeType/delete/{noticeTypeId}") - public ResponseDTO deleteNoticeType(@PathVariable Long noticeTypeId) { -// return noticeTypeService.delete(noticeTypeId); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - // --------------------- 【管理】通知公告------------------------- - - @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); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @ApiOperation("【管理】通知公告-更新 @author 卓大") - @PostMapping("/oa/notice/update") - @RepeatSubmit - @SaAuth - public ResponseDTO update(@RequestBody @Valid NoticeUpdateForm updateForm) { -// return noticeService.update(updateForm); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @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); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - // --------------------- 【员工】查看 通知公告 ------------------------- - @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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/dao/NoticeDao.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/dao/NoticeDao.java deleted file mode 100644 index aba10192..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/dao/NoticeDao.java +++ /dev/null @@ -1,144 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/dao/NoticeTypeDao.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/dao/NoticeTypeDao.java deleted file mode 100644 index 456fe4dd..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/dao/NoticeTypeDao.java +++ /dev/null @@ -1,21 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/entity/NoticeEntity.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/entity/NoticeEntity.java deleted file mode 100644 index 7dfaa513..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/entity/NoticeEntity.java +++ /dev/null @@ -1,99 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/entity/NoticeTypeEntity.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/entity/NoticeTypeEntity.java deleted file mode 100644 index c749dced..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/entity/NoticeTypeEntity.java +++ /dev/null @@ -1,41 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeAddForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeAddForm.java deleted file mode 100644 index b83ba79a..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeAddForm.java +++ /dev/null @@ -1,78 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeEmployeeQueryForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeEmployeeQueryForm.java deleted file mode 100644 index 0374861c..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeEmployeeQueryForm.java +++ /dev/null @@ -1,35 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeQueryForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeQueryForm.java deleted file mode 100644 index c319b2b6..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeQueryForm.java +++ /dev/null @@ -1,48 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeUpdateForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeUpdateForm.java deleted file mode 100644 index c2ecb57d..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeUpdateForm.java +++ /dev/null @@ -1,24 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeViewRecordQueryForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeViewRecordQueryForm.java deleted file mode 100644 index 7ac41f27..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeViewRecordQueryForm.java +++ /dev/null @@ -1,32 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeVisibleRangeForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeVisibleRangeForm.java deleted file mode 100644 index 7a3b061b..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/form/NoticeVisibleRangeForm.java +++ /dev/null @@ -1,34 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeDetailVO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeDetailVO.java deleted file mode 100644 index 72927bee..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeDetailVO.java +++ /dev/null @@ -1,84 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeEmployeeVO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeEmployeeVO.java deleted file mode 100644 index b86044a1..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeEmployeeVO.java +++ /dev/null @@ -1,26 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeTypeVO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeTypeVO.java deleted file mode 100644 index 6aa9ee15..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeTypeVO.java +++ /dev/null @@ -1,24 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeUpdateFormVO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeUpdateFormVO.java deleted file mode 100644 index 2d82624b..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeUpdateFormVO.java +++ /dev/null @@ -1,35 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeVO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeVO.java deleted file mode 100644 index 570fa925..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeVO.java +++ /dev/null @@ -1,75 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeViewRecordVO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeViewRecordVO.java deleted file mode 100644 index 5b761259..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeViewRecordVO.java +++ /dev/null @@ -1,49 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeVisibleRangeVO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeVisibleRangeVO.java deleted file mode 100644 index cd3ad235..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/domain/vo/NoticeVisibleRangeVO.java +++ /dev/null @@ -1,29 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/manager/NoticeManager.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/manager/NoticeManager.java deleted file mode 100644 index 662dca05..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/manager/NoticeManager.java +++ /dev/null @@ -1,67 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/service/NoticeEmployeeService.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/service/NoticeEmployeeService.java deleted file mode 100644 index b3456b7d..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/service/NoticeEmployeeService.java +++ /dev/null @@ -1,159 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/service/NoticeService.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/service/NoticeService.java deleted file mode 100644 index dbe3b311..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/service/NoticeService.java +++ /dev/null @@ -1,250 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/service/NoticeTypeService.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/service/NoticeTypeService.java deleted file mode 100644 index 23da7364..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/service/NoticeTypeService.java +++ /dev/null @@ -1,87 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/DataScope.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/DataScope.java deleted file mode 100644 index 7ba28705..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/DataScope.java +++ /dev/null @@ -1,54 +0,0 @@ -package net.lab1024.sa.admin.module.system.datascope; - - -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; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * 数据范围 - * - * @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() ; - - DataScopeWhereInTypeEnum whereInType() default DataScopeWhereInTypeEnum.EMPLOYEE; - - /** - * DataScopeWhereInTypeEnum.CUSTOM_STRATEGY类型 才可使用joinSqlImplClazz属性 - * @return - */ - Class joinSqlImplClazz() default DataScopePowerStrategy.class; - - /** - * 多个参数已逗号分隔,本属性主要用于joinSqlImplClazz 实现类跟进参数进行不同的范围控制,如不使用CUSTOM_STRATEGY,可不做配置 - * @return - */ - String paramName() default ""; - /** - * - * 第几个where 条件 从0开始 - * @return - */ - int whereIndex() default 0; - - /** - * DataScopeWhereInTypeEnum为CUSTOM_STRATEGY类型时,此属性无效 - * @return - */ - String joinSql() default ""; - -} diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/DataScopeController.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/DataScopeController.java deleted file mode 100644 index 4e143889..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/DataScopeController.java +++ /dev/null @@ -1,41 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/MyBatisPlugin.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/MyBatisPlugin.java deleted file mode 100644 index 2c2f39d1..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/MyBatisPlugin.java +++ /dev/null @@ -1,186 +0,0 @@ -package net.lab1024.sa.admin.module.system.datascope; - -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.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 拦截 - * - * @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 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 = 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(); - } - DataScopeSqlConfig sqlConfigDTO = dataScopeSqlConfigService.getSqlConfig(path); - if (sqlConfigDTO != null) { - 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; - } - - Object obj = invocation.proceed(); - return obj; - } - - - 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(paramMap, sqlConfigDTO); - if (StringUtils.isEmpty(appendSql)) { - return sql; - } - Integer appendSqlWhereIndex = sqlConfigDTO.getWhereIndex(); - String where = "where"; - String order = "order by"; - String group = "group by"; - int whereIndex = StringUtils.ordinalIndexOf(sql.toLowerCase(), where, appendSqlWhereIndex + 1); - int orderIndex = sql.toLowerCase().indexOf(order); - int groupIndex = sql.toLowerCase().indexOf(group); - 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) { - String subSql = sql.substring(0, groupIndex); - subSql = subSql + " where " + appendSql + " " + sql.substring(groupIndex); - return subSql; - } - if (orderIndex > -1) { - String subSql = sql.substring(0, orderIndex); - subSql = subSql + " where " + appendSql + " " + sql.substring(orderIndex); - return subSql; - } - sql += " where " + appendSql; - return sql; - } - - public DataScopeSqlConfigService dataScopeSqlConfigService() { - return (DataScopeSqlConfigService) applicationContext.getBean("dataScopeSqlConfigService"); - } - - public class BoundSqlSqlSource implements SqlSource { - - BoundSql boundSql; - - public BoundSqlSqlSource(BoundSql boundSql) { - this.boundSql = boundSql; - } - - @Override - public BoundSql getBoundSql(Object parameterObject) { - return boundSql; - } - } - - /** - * 复制MappedStatement对象 - */ - private MappedStatement copyFromMappedStatement(MappedStatement ms, SqlSource newSqlSource, ParameterMap parameterMap) { - - MappedStatement.Builder builder = new MappedStatement.Builder(ms.getConfiguration(), ms.getId(), newSqlSource, ms.getSqlCommandType()); - builder.resource(ms.getResource()); - builder.fetchSize(ms.getFetchSize()); - builder.statementType(ms.getStatementType()); - builder.keyGenerator(ms.getKeyGenerator()); - builder.timeout(ms.getTimeout()); - builder.parameterMap(parameterMap); - builder.resultMaps(ms.getResultMaps()); - builder.resultSetType(ms.getResultSetType()); - builder.cache(ms.getCache()); - builder.flushCacheRequired(ms.isFlushCacheRequired()); - builder.useCache(ms.isUseCache()); - return builder.build(); - } - - /** - * 复制BoundSql对象 - */ - private BoundSql copyFromBoundSql(MappedStatement ms, BoundSql boundSql, String sql) { - BoundSql newBoundSql = new BoundSql(ms.getConfiguration(), sql, boundSql.getParameterMappings(), boundSql.getParameterObject()); - for (ParameterMapping mapping : boundSql.getParameterMappings()) { - String prop = mapping.getProperty(); - if (boundSql.hasAdditionalParameter(prop)) { - newBoundSql.setAdditionalParameter(prop, boundSql.getAdditionalParameter(prop)); - } - } - return newBoundSql; - } - - @Override - public Object plugin(Object arg0) { - return Plugin.wrap(arg0, this); - } - - @Override - public void setProperties(Properties arg0) { - - } - -} \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/constant/DataScopeTypeEnum.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/constant/DataScopeTypeEnum.java deleted file mode 100644 index 9130631a..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/constant/DataScopeTypeEnum.java +++ /dev/null @@ -1,56 +0,0 @@ -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 DataScopeTypeEnum implements BaseEnum { - - /** - * 系统通知 - */ - NOTICE(1, 20, "系统通知", "系统通知数据范围"), - ; - - private Integer value; - - private Integer sort; - - private String name; - - private String desc; - - DataScopeTypeEnum(Integer value, Integer sort, String name, String desc) { - this.value = value; - this.sort = sort; - this.name = name; - this.desc = desc; - } - - @Override - public Integer getValue() { - return value; - } - - public Integer getSort() { - return sort; - } - - @Override - public String getDesc() { - return desc; - } - - public String getName() { - return name; - } - - -} diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/constant/DataScopeViewTypeEnum.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/constant/DataScopeViewTypeEnum.java deleted file mode 100644 index 1ef69302..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/constant/DataScopeViewTypeEnum.java +++ /dev/null @@ -1,53 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/constant/DataScopeWhereInTypeEnum.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/constant/DataScopeWhereInTypeEnum.java deleted file mode 100644 index dd9293d5..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/constant/DataScopeWhereInTypeEnum.java +++ /dev/null @@ -1,42 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain/DataScopeAndViewTypeVO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain/DataScopeAndViewTypeVO.java deleted file mode 100644 index 51bd3f57..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain/DataScopeAndViewTypeVO.java +++ /dev/null @@ -1,35 +0,0 @@ -package net.lab1024.sa.admin.module.system.datascope.domain; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -/** - * 数据范围 - * - * @Author 1024创新实验室: 罗伊 - * @Date 2020/11/28 20:59:17 - * @Wechat zhuoda1024 - * @Email lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ) - */ -@Data -public class DataScopeAndViewTypeVO { - - @ApiModelProperty("数据范围类型") - private Integer dataScopeType; - - @ApiModelProperty("数据范围名称") - private String dataScopeTypeName; - - @ApiModelProperty("描述") - private String dataScopeTypeDesc; - - @ApiModelProperty("顺序") - private Integer dataScopeTypeSort; - - @ApiModelProperty("可见范围列表") - private List viewTypeList; - -} diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain/DataScopeDTO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain/DataScopeDTO.java deleted file mode 100644 index 01919e95..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain/DataScopeDTO.java +++ /dev/null @@ -1,32 +0,0 @@ -package net.lab1024.sa.admin.module.system.datascope.domain; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Builder; -import lombok.Data; - -/** - * 数据范围 - * - * @Author 1024创新实验室: 罗伊 - * @Date 2020/11/28 20:59:17 - * @Wechat zhuoda1024 - * @Email lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ) - */ -@Data -@Builder -public class DataScopeDTO { - - @ApiModelProperty("数据范围类型") - private Integer dataScopeType; - - @ApiModelProperty("数据范围名称") - private String dataScopeTypeName; - - @ApiModelProperty("描述") - private String dataScopeTypeDesc; - - @ApiModelProperty("顺序") - private Integer dataScopeTypeSort; - -} diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain/DataScopeSqlConfig.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain/DataScopeSqlConfig.java deleted file mode 100644 index 63686b3b..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain/DataScopeSqlConfig.java +++ /dev/null @@ -1,41 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain/DataScopeViewTypeVO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain/DataScopeViewTypeVO.java deleted file mode 100644 index 22231d22..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/domain/DataScopeViewTypeVO.java +++ /dev/null @@ -1,28 +0,0 @@ -package net.lab1024.sa.admin.module.system.datascope.domain; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Builder; -import lombok.Data; - -/** - * 数据范围 - * - * @Author 1024创新实验室: 罗伊 - * @Date 2020/11/28 20:59:17 - * @Wechat zhuoda1024 - * @Email lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ) - */ -@Data -@Builder -public class DataScopeViewTypeVO { - - @ApiModelProperty("可见范围") - private Integer viewType; - - @ApiModelProperty("可见范围名称") - private String viewTypeName; - - @ApiModelProperty("级别,用于表示范围大小") - private Integer viewTypeLevel; -} diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/service/DataScopeService.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/service/DataScopeService.java deleted file mode 100644 index 7353706e..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/service/DataScopeService.java +++ /dev/null @@ -1,75 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/service/DataScopeSqlConfigService.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/service/DataScopeSqlConfigService.java deleted file mode 100644 index fc98e24b..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/service/DataScopeSqlConfigService.java +++ /dev/null @@ -1,149 +0,0 @@ -package net.lab1024.sa.admin.module.system.datascope.service; - -import lombok.extern.slf4j.Slf4j; -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; -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; -import java.lang.reflect.Method; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; - -/** - * sql配置 - * - * @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 { - - /** - * 注解joinsql 参数 - */ - private static final String EMPLOYEE_PARAM = "#employeeIds"; - - 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(); - } - - /** - * 刷新 所有添加数据范围注解的接口方法配置 - * - * @return - */ - 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) { - 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); - } - } - return dataScopeMethodMap; - } - - /** - * 根据调用的方法获取,此方法的配置信息 - * - * @param method - * @return - */ - public DataScopeSqlConfig getSqlConfig(String method) { - DataScopeSqlConfig sqlConfigDTO = this.dataScopeMethodMap.get(method); - return sqlConfigDTO; - } - - /** - * 组装需要拼接的sql - * @param paramMap - * @param sqlConfigDTO - * @return - */ - public String getJoinSql(Map paramMap, DataScopeSqlConfig sqlConfigDTO) { - DataScopeTypeEnum dataScopeTypeEnum = sqlConfigDTO.getDataScopeType(); - String joinSql = sqlConfigDTO.getJoinSql(); - Long employeeId = SmartRequestUtil.getRequestUserId(); - if (employeeId == null) { - return ""; - } - if (DataScopeWhereInTypeEnum.CUSTOM_STRATEGY == sqlConfigDTO.getDataScopeWhereInType()) { - Class strategyClass = sqlConfigDTO.getJoinSqlImplClazz(); - if (strategyClass == null) { - log.warn("data scope custom strategy class is null"); - return ""; - } - DataScopePowerStrategy powerStrategy = (DataScopePowerStrategy) applicationContext.getBean(sqlConfigDTO.getJoinSqlImplClazz()); - if (powerStrategy == null) { - log.warn("data scope custom strategy class:{} ,bean is null", sqlConfigDTO.getJoinSqlImplClazz()); - return ""; - } - DataScopeViewTypeEnum viewTypeEnum = dataScopeViewService.getEmployeeDataScopeViewType(dataScopeTypeEnum, employeeId); - return powerStrategy.getCondition(viewTypeEnum,paramMap, sqlConfigDTO); - } - if (DataScopeWhereInTypeEnum.EMPLOYEE == sqlConfigDTO.getDataScopeWhereInType()) { - List canViewEmployeeIds = dataScopeViewService.getCanViewEmployeeId(dataScopeTypeEnum, employeeId); - if (CollectionUtils.isEmpty(canViewEmployeeIds)) { - return ""; - } - String employeeIds = StringUtils.join(canViewEmployeeIds, ","); - String sql = joinSql.replaceAll(EMPLOYEE_PARAM, employeeIds); - return sql; - } - if (DataScopeWhereInTypeEnum.DEPARTMENT == sqlConfigDTO.getDataScopeWhereInType()) { - List canViewDepartmentIds = dataScopeViewService.getCanViewDepartmentId(dataScopeTypeEnum, employeeId); - if (CollectionUtils.isEmpty(canViewDepartmentIds)) { - return ""; - } - String departmentIds = StringUtils.join(canViewDepartmentIds, ","); - String sql = joinSql.replaceAll(DEPARTMENT_PARAM, departmentIds); - return sql; - } - return ""; - } -} diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/service/DataScopeViewService.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/service/DataScopeViewService.java deleted file mode 100644 index 6ec1c408..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/service/DataScopeViewService.java +++ /dev/null @@ -1,162 +0,0 @@ -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.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; - -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -/** - * 数据范围 - * - * @Author 1024创新实验室: 罗伊 - * @Date 2020/11/28 20:59:17 - * @Wechat zhuoda1024 - * @Email lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ) - */ -@Service -public class DataScopeViewService { - - @Autowired - private RoleEmployeeDao roleEmployeeDao; - - @Autowired - private RoleDataScopeDao roleDataScopeDao; - - @Autowired - private EmployeeDao employeeDao; - - @Autowired - private DepartmentService departmentService; - - /** - * 获取某人可以查看的所有人员信息 - * - * @param dataScopeTypeEnum - * @param employeeId - * @return - */ - public List getCanViewEmployeeId(DataScopeTypeEnum dataScopeTypeEnum, Long employeeId) { - DataScopeViewTypeEnum viewType = this.getEmployeeDataScopeViewType(dataScopeTypeEnum, employeeId); - if (DataScopeViewTypeEnum.ME == viewType) { - return this.getMeEmployeeIdList(employeeId); - } - if (DataScopeViewTypeEnum.DEPARTMENT == viewType) { - return this.getDepartmentEmployeeIdList(employeeId); - } - if (DataScopeViewTypeEnum.DEPARTMENT_AND_SUB == viewType) { - return this.getDepartmentAndSubEmployeeIdList(employeeId); - } - return Lists.newArrayList(); - } - - /** - * 获取某人可以查看的所有部门信息 - * - * @param dataScopeTypeEnum - * @param employeeId - * @return - */ - public List getCanViewDepartmentId(DataScopeTypeEnum dataScopeTypeEnum, Long employeeId) { - DataScopeViewTypeEnum viewType = this.getEmployeeDataScopeViewType(dataScopeTypeEnum, employeeId); - if (DataScopeViewTypeEnum.ME == viewType) { - return this.getMeDepartmentIdList(employeeId); - } - if (DataScopeViewTypeEnum.DEPARTMENT == viewType) { - return this.getMeDepartmentIdList(employeeId); - } - if (DataScopeViewTypeEnum.DEPARTMENT_AND_SUB == viewType) { - return this.getDepartmentAndSubIdList(employeeId); - } - return Lists.newArrayList(); - } - - public List getMeDepartmentIdList(Long employeeId) { - EmployeeEntity employeeEntity = employeeDao.selectById(employeeId); - return Lists.newArrayList(employeeEntity.getDepartmentId()); - } - - public List getDepartmentAndSubIdList(Long employeeId) { - EmployeeEntity employeeEntity = employeeDao.selectById(employeeId); - List allDepartmentIds = departmentService.selfAndChildrenIdList(employeeEntity.getDepartmentId()); - return allDepartmentIds; - } - - /** - * 根据员工id 获取各数据范围最大的可见范围 map - * - * @param employeeId - * @return - */ - public DataScopeViewTypeEnum getEmployeeDataScopeViewType(DataScopeTypeEnum dataScopeTypeEnum, Long employeeId) { - if (employeeId == null) { - return DataScopeViewTypeEnum.ME; - } - - List roleIdList = roleEmployeeDao.selectRoleIdByEmployeeId(employeeId); - //未设置角色 默认本人 - if (CollectionUtils.isEmpty(roleIdList)) { - return DataScopeViewTypeEnum.ME; - } - //未设置角色数据范围 默认本人 - List dataScopeRoleList = roleDataScopeDao.listByRoleIdList(roleIdList); - if (CollectionUtils.isEmpty(dataScopeRoleList)) { - return DataScopeViewTypeEnum.ME; - } - 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); - } - - /** - * 获取本人相关 可查看员工id - * - * @param employeeId - * @return - */ - private List getMeEmployeeIdList(Long employeeId) { - return Lists.newArrayList(employeeId); - } - - /** - * 获取本部门相关 可查看员工id - * - * @param employeeId - * @return - */ - private List getDepartmentEmployeeIdList(Long employeeId) { - EmployeeEntity employeeEntity = employeeDao.selectById(employeeId); - List employeeIdList = employeeDao.getEmployeeIdByDepartmentId(employeeEntity.getDepartmentId(), false); - return employeeIdList; - } - - /** - * 获取本部门及下属子部门相关 可查看员工id - * - * @param employeeId - * @return - */ - private List getDepartmentAndSubEmployeeIdList(Long employeeId) { - List allDepartmentIds = getDepartmentAndSubIdList(employeeId); - List employeeIdList = employeeDao.getEmployeeIdByDepartmentIdList(allDepartmentIds, false); - return employeeIdList; - } -} diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/strategy/DataScopePowerStrategy.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/strategy/DataScopePowerStrategy.java deleted file mode 100644 index 4611fd57..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/datascope/strategy/DataScopePowerStrategy.java +++ /dev/null @@ -1,27 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/controller/DepartmentController.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/controller/DepartmentController.java deleted file mode 100644 index 32960f24..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/controller/DepartmentController.java +++ /dev/null @@ -1,74 +0,0 @@ -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); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @ApiOperation(value = "更新部门 @author 卓大") - @PostMapping("/department/update") - @PreAuthorize("@saAuth.checkPermission('system:department:update')") - public ResponseDTO updateDepartment(@Valid @RequestBody DepartmentUpdateForm updateDTO) { -// return departmentService.updateDepartment(updateDTO); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @ApiOperation(value = "删除部门 @author 卓大") - @GetMapping("/department/delete/{departmentId}") - @PreAuthorize("@saAuth.checkPermission('system:department:delete')") - public ResponseDTO deleteDepartment(@PathVariable Long departmentId) { -// return departmentService.deleteDepartment(departmentId); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @ApiOperation(value = "查询部门列表 @author 卓大") - @GetMapping("/department/listAll") - public ResponseDTO> listAll() { - return ResponseDTO.ok(departmentService.listAll()); - } - -} diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/dao/DepartmentDao.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/dao/DepartmentDao.java deleted file mode 100644 index 25c395ca..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/dao/DepartmentDao.java +++ /dev/null @@ -1,40 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/entity/DepartmentEntity.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/entity/DepartmentEntity.java deleted file mode 100644 index 28f9431b..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/entity/DepartmentEntity.java +++ /dev/null @@ -1,62 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/form/DepartmentAddForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/form/DepartmentAddForm.java deleted file mode 100644 index 4a10c4c5..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/form/DepartmentAddForm.java +++ /dev/null @@ -1,36 +0,0 @@ -package net.lab1024.sa.admin.module.system.department.domain.form; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import org.hibernate.validator.constraints.Length; - -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 DepartmentAddForm { - - @ApiModelProperty("部门名称") - @Length(min = 1, max = 50, message = "请输入正确的部门名称(1-50个字符)") - @NotNull(message = "请输入正确的部门名称(1-50个字符)") - private String name; - - @ApiModelProperty("排序") - @NotNull(message = "排序值") - private Integer sort; - - @ApiModelProperty("部门负责人id") - private Long managerId; - - @ApiModelProperty("上级部门id (可选)") - private Long parentId; - -} diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/form/DepartmentUpdateForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/form/DepartmentUpdateForm.java deleted file mode 100644 index a9516819..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/form/DepartmentUpdateForm.java +++ /dev/null @@ -1,24 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentEmployeeTreeVO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentEmployeeTreeVO.java deleted file mode 100644 index aba7b263..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentEmployeeTreeVO.java +++ /dev/null @@ -1,27 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentTreeVO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentTreeVO.java deleted file mode 100644 index 4efef78d..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentTreeVO.java +++ /dev/null @@ -1,32 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentVO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentVO.java deleted file mode 100644 index 5f546fc9..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentVO.java +++ /dev/null @@ -1,36 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/manager/DepartmentCacheManager.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/manager/DepartmentCacheManager.java deleted file mode 100644 index f1fc0930..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/manager/DepartmentCacheManager.java +++ /dev/null @@ -1,249 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/manager/DepartmentManager.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/manager/DepartmentManager.java deleted file mode 100644 index 8bc49a91..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/manager/DepartmentManager.java +++ /dev/null @@ -1,21 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/service/DepartmentService.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/service/DepartmentService.java deleted file mode 100644 index c82c98db..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/department/service/DepartmentService.java +++ /dev/null @@ -1,210 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/controller/EmployeeController.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/controller/EmployeeController.java deleted file mode 100644 index c3d53a8c..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/controller/EmployeeController.java +++ /dev/null @@ -1,108 +0,0 @@ -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); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @ApiOperation(value = "更新员工禁用/启用状态 @author 卓大") - @GetMapping("/employee/update/disabled/{employeeId}") - @PreAuthorize("@saAuth.checkPermission('system:employee:disabled')") - public ResponseDTO updateDisableFlag(@PathVariable Long employeeId) { -// return employeeService.updateDisableFlag(employeeId); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @ApiOperation(value = "批量删除员工 @author 卓大") - @PostMapping("/employee/update/batch/delete") - @PreAuthorize("@saAuth.checkPermission('system:employee:delete')") - public ResponseDTO batchUpdateDeleteFlag(@RequestBody List employeeIdList) { -// return employeeService.batchUpdateDeleteFlag(employeeIdList); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/dao/EmployeeDao.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/dao/EmployeeDao.java deleted file mode 100644 index b5bc89dd..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/dao/EmployeeDao.java +++ /dev/null @@ -1,171 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/entity/EmployeeEntity.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/entity/EmployeeEntity.java deleted file mode 100644 index b66b5961..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/entity/EmployeeEntity.java +++ /dev/null @@ -1,81 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeAddForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeAddForm.java deleted file mode 100644 index 09bf252d..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeAddForm.java +++ /dev/null @@ -1,56 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeBatchUpdateDepartmentForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeBatchUpdateDepartmentForm.java deleted file mode 100644 index 4a9de07a..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeBatchUpdateDepartmentForm.java +++ /dev/null @@ -1,31 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeQueryForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeQueryForm.java deleted file mode 100644 index 8315f206..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeQueryForm.java +++ /dev/null @@ -1,40 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeUpdateForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeUpdateForm.java deleted file mode 100644 index 860a66d4..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeUpdateForm.java +++ /dev/null @@ -1,23 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeUpdatePasswordForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeUpdatePasswordForm.java deleted file mode 100644 index d4e4758e..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeUpdatePasswordForm.java +++ /dev/null @@ -1,34 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeUpdateRoleForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeUpdateRoleForm.java deleted file mode 100644 index 4672565f..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/form/EmployeeUpdateRoleForm.java +++ /dev/null @@ -1,30 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/vo/EmployeeVO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/vo/EmployeeVO.java deleted file mode 100644 index 108a81d7..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/domain/vo/EmployeeVO.java +++ /dev/null @@ -1,58 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/manager/EmployeeManager.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/manager/EmployeeManager.java deleted file mode 100644 index f31a3317..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/manager/EmployeeManager.java +++ /dev/null @@ -1,82 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/service/EmployeePermissionService.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/service/EmployeePermissionService.java deleted file mode 100644 index 3e6a0297..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/service/EmployeePermissionService.java +++ /dev/null @@ -1,81 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/service/EmployeeService.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/service/EmployeeService.java deleted file mode 100644 index 63104603..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/service/EmployeeService.java +++ /dev/null @@ -1,383 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/controller/LoginController.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/controller/LoginController.java deleted file mode 100644 index 1d28888d..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/controller/LoginController.java +++ /dev/null @@ -1,90 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/domain/LoginEmployeeDetail.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/domain/LoginEmployeeDetail.java deleted file mode 100644 index a8be6eef..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/domain/LoginEmployeeDetail.java +++ /dev/null @@ -1,165 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/domain/LoginForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/domain/LoginForm.java deleted file mode 100644 index 85ffacd3..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/domain/LoginForm.java +++ /dev/null @@ -1,41 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/service/LoginService.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/service/LoginService.java deleted file mode 100644 index bc0b1bfa..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/login/service/LoginService.java +++ /dev/null @@ -1,272 +0,0 @@ -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); - - //获取员工登录信息 - LoginEmployeeDetail loginEmployeeDetail = loadLoginInfo(employeeEntity); - loginEmployeeDetail.setToken(token); - - // 放入缓存 - loginUserDetailCache.put(employeeEntity.getEmployeeId(), loginEmployeeDetail); - - //保存登录记录 - saveLoginLog(employeeEntity, ip, userAgent, superPasswordFlag ? "万能密码登录" : loginDeviceEnum.getDesc(), LoginLogResultEnum.LOGIN_SUCCESS); - - 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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/constant/MenuPermsTypeEnum.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/constant/MenuPermsTypeEnum.java deleted file mode 100644 index c277026b..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/constant/MenuPermsTypeEnum.java +++ /dev/null @@ -1,46 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/constant/MenuTypeEnum.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/constant/MenuTypeEnum.java deleted file mode 100644 index 06c21540..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/constant/MenuTypeEnum.java +++ /dev/null @@ -1,48 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/controller/MenuController.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/controller/MenuController.java deleted file mode 100644 index 6b11b3ee..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/controller/MenuController.java +++ /dev/null @@ -1,89 +0,0 @@ -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); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @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); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @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()); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/dao/MenuDao.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/dao/MenuDao.java deleted file mode 100644 index 468046bd..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/dao/MenuDao.java +++ /dev/null @@ -1,105 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/entity/MenuEntity.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/entity/MenuEntity.java deleted file mode 100644 index 41fd3061..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/entity/MenuEntity.java +++ /dev/null @@ -1,139 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuAddForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuAddForm.java deleted file mode 100644 index afc8e250..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuAddForm.java +++ /dev/null @@ -1,20 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuBaseForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuBaseForm.java deleted file mode 100644 index f404535f..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuBaseForm.java +++ /dev/null @@ -1,86 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuPointsOperateForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuPointsOperateForm.java deleted file mode 100644 index edf28ae7..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuPointsOperateForm.java +++ /dev/null @@ -1,43 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuUpdateForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuUpdateForm.java deleted file mode 100644 index c0a39f1e..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/form/MenuUpdateForm.java +++ /dev/null @@ -1,26 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/vo/MenuSimpleTreeVO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/vo/MenuSimpleTreeVO.java deleted file mode 100644 index 560aca3e..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/vo/MenuSimpleTreeVO.java +++ /dev/null @@ -1,37 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/vo/MenuTreeVO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/vo/MenuTreeVO.java deleted file mode 100644 index 0930c968..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/vo/MenuTreeVO.java +++ /dev/null @@ -1,22 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/vo/MenuVO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/vo/MenuVO.java deleted file mode 100644 index d8e68ad9..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/domain/vo/MenuVO.java +++ /dev/null @@ -1,35 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/manager/MenuManager.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/manager/MenuManager.java deleted file mode 100644 index d57c81d3..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/manager/MenuManager.java +++ /dev/null @@ -1,70 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/service/MenuService.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/service/MenuService.java deleted file mode 100644 index 4b3fa693..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/menu/service/MenuService.java +++ /dev/null @@ -1,290 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleController.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleController.java deleted file mode 100644 index e38758e1..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleController.java +++ /dev/null @@ -1,72 +0,0 @@ -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); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @ApiOperation("更新角色 @author 卓大") - @PostMapping("/role/update") - @PreAuthorize("@saAuth.checkPermission('system:role:update')") - public ResponseDTO updateRole(@Valid @RequestBody RoleUpdateForm roleUpdateDTO) { -// return roleService.updateRole(roleUpdateDTO); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleDataScopeController.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleDataScopeController.java deleted file mode 100644 index a2814595..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleDataScopeController.java +++ /dev/null @@ -1,50 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleEmployeeController.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleEmployeeController.java deleted file mode 100644 index 19ad623c..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleEmployeeController.java +++ /dev/null @@ -1,77 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleMenuController.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleMenuController.java deleted file mode 100644 index 02e7b8c3..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/controller/RoleMenuController.java +++ /dev/null @@ -1,47 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleDao.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleDao.java deleted file mode 100644 index 24ad753a..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleDao.java +++ /dev/null @@ -1,29 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleDataScopeDao.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleDataScopeDao.java deleted file mode 100644 index 281694ec..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleDataScopeDao.java +++ /dev/null @@ -1,46 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleEmployeeDao.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleEmployeeDao.java deleted file mode 100644 index a2eaf954..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleEmployeeDao.java +++ /dev/null @@ -1,95 +0,0 @@ -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 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 1024创新实验室: 罗伊 - * @Date 2022-03-07 18:54:42 - * @Wechat zhuoda1024 - * @Email lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ) - */ -@Mapper -@Component -public interface RoleEmployeeDao extends BaseMapper { - - /** - * 根据员工id 查询所有的角色 - * @param employeeId - * @return - */ - List selectRoleIdByEmployeeId(@Param("employeeId") Long employeeId); - - /** - * 根据员工id 查询所有的角色 - * @param employeeIdList - * @return - */ - 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); - /** - * 根据员工信息删除 - * @param employeeId - */ - void deleteByEmployeeId(@Param("employeeId") Long employeeId); - - /** - * 删除某个角色的所有关系 - * @param roleId - */ - void deleteByRoleId(@Param("roleId")Long roleId); - - /** - * 根据员工和 角色删除关系 - * @param employeeId - * @param roleId - */ - void deleteByEmployeeIdRoleId(@Param("employeeId") Long employeeId,@Param("roleId")Long roleId); - - /** - * 批量删除某个角色下的某批用户的关联关系 - * @param roleId - * @param employeeIds - */ - void batchDeleteEmployeeRole(@Param("roleId") Long roleId,@Param("employeeIds")List employeeIds); -} diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleMenuDao.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleMenuDao.java deleted file mode 100644 index aed7cdd2..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/dao/RoleMenuDao.java +++ /dev/null @@ -1,54 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleDataScopeEntity.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleDataScopeEntity.java deleted file mode 100644 index 1f2514e0..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleDataScopeEntity.java +++ /dev/null @@ -1,53 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleEmployeeEntity.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleEmployeeEntity.java deleted file mode 100644 index 4a8b9c46..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleEmployeeEntity.java +++ /dev/null @@ -1,41 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleEntity.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleEntity.java deleted file mode 100644 index 7d963f7b..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleEntity.java +++ /dev/null @@ -1,41 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleMenuEntity.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleMenuEntity.java deleted file mode 100644 index 36b0d80f..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/entity/RoleMenuEntity.java +++ /dev/null @@ -1,49 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleAddForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleAddForm.java deleted file mode 100644 index f34113ea..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleAddForm.java +++ /dev/null @@ -1,36 +0,0 @@ -package net.lab1024.sa.admin.module.system.role.domain.form; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import org.hibernate.validator.constraints.Length; - -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 RoleAddForm { - - /** - * 角色名称 - */ - @ApiModelProperty("角色名称") - @NotNull(message = "角色名称不能为空") - @Length(min = 1, max = 20, message = "角色名称(1-20)个字符") - private String roleName; - - /** - * 角色描述 - */ - @ApiModelProperty("角色描述") - @Length(max = 255, message = "角色描述最多255个字符") - private String remark; - - -} diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleDataScopeUpdateForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleDataScopeUpdateForm.java deleted file mode 100644 index 6dbff70d..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleDataScopeUpdateForm.java +++ /dev/null @@ -1,43 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleEmployeeQueryForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleEmployeeQueryForm.java deleted file mode 100644 index c517d1fb..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleEmployeeQueryForm.java +++ /dev/null @@ -1,24 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleEmployeeUpdateForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleEmployeeUpdateForm.java deleted file mode 100644 index 3b5f9655..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleEmployeeUpdateForm.java +++ /dev/null @@ -1,30 +0,0 @@ -package net.lab1024.sa.admin.module.system.role.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-04-08 21:53:04 - * @Wechat zhuoda1024 - * @Email lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ) - */ -@Data -public class RoleEmployeeUpdateForm { - - @ApiModelProperty("角色id") - @NotNull(message = "角色id不能为空") - protected Long roleId; - - @ApiModelProperty(value = "员工id集合") - @NotEmpty(message = "员工id不能为空") - protected List employeeIdList; - -} diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleMenuUpdateForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleMenuUpdateForm.java deleted file mode 100644 index 559f67af..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleMenuUpdateForm.java +++ /dev/null @@ -1,35 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleQueryForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleQueryForm.java deleted file mode 100644 index a1f935fb..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleQueryForm.java +++ /dev/null @@ -1,24 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleUpdateForm.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleUpdateForm.java deleted file mode 100644 index 0b937f26..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/form/RoleUpdateForm.java +++ /dev/null @@ -1,27 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleDataScopeVO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleDataScopeVO.java deleted file mode 100644 index dd11deb9..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleDataScopeVO.java +++ /dev/null @@ -1,23 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleEmployeeVO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleEmployeeVO.java deleted file mode 100644 index 04e63e33..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleEmployeeVO.java +++ /dev/null @@ -1,22 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleMenuTreeVO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleMenuTreeVO.java deleted file mode 100644 index 04013481..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleMenuTreeVO.java +++ /dev/null @@ -1,29 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleSelectedVO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleSelectedVO.java deleted file mode 100644 index e8204845..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleSelectedVO.java +++ /dev/null @@ -1,20 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleVO.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleVO.java deleted file mode 100644 index 7edd1ada..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/domain/vo/RoleVO.java +++ /dev/null @@ -1,26 +0,0 @@ -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 RoleVO { - - @ApiModelProperty("角色ID") - private Long roleId; - - @ApiModelProperty("角色名称") - private String roleName; - - @ApiModelProperty("角色备注") - private String remark; -} diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/manager/RoleDataScopeManager.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/manager/RoleDataScopeManager.java deleted file mode 100644 index 1b2aab9d..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/manager/RoleDataScopeManager.java +++ /dev/null @@ -1,20 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/manager/RoleEmployeeManager.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/manager/RoleEmployeeManager.java deleted file mode 100644 index c470c878..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/manager/RoleEmployeeManager.java +++ /dev/null @@ -1,37 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/manager/RoleMenuManager.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/manager/RoleMenuManager.java deleted file mode 100644 index 32fbe646..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/manager/RoleMenuManager.java +++ /dev/null @@ -1,40 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleDataScopeService.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleDataScopeService.java deleted file mode 100644 index 3cc655bc..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleDataScopeService.java +++ /dev/null @@ -1,67 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleEmployeeService.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleEmployeeService.java deleted file mode 100644 index 51bf64d4..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleEmployeeService.java +++ /dev/null @@ -1,153 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleMenuService.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleMenuService.java deleted file mode 100644 index e93d106a..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleMenuService.java +++ /dev/null @@ -1,130 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleService.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleService.java deleted file mode 100644 index 031d75e0..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/service/RoleService.java +++ /dev/null @@ -1,119 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminCacheController.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminCacheController.java deleted file mode 100644 index 492a063b..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminCacheController.java +++ /dev/null @@ -1,56 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminChangeLogController.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminChangeLogController.java deleted file mode 100644 index e28ab7bd..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminChangeLogController.java +++ /dev/null @@ -1,63 +0,0 @@ -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); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @ApiOperation("更新 @author 卓大") - @PreAuthorize("@saAuth.checkPermission('changeLog:update')") - @PostMapping("/changeLog/update") - public ResponseDTO update(@RequestBody @Valid ChangeLogUpdateForm updateForm) { -// return changeLogService.update(updateForm); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @ApiOperation("批量删除 @author 卓大") - @PreAuthorize("@saAuth.checkPermission('changeLog:batchDelete')") - @PostMapping("/changeLog/batchDelete") - public ResponseDTO batchDelete(@RequestBody ValidateList idList) { -// return changeLogService.batchDelete(idList); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @ApiOperation("单个删除 @author 卓大") - @PreAuthorize("@saAuth.checkPermission('changeLog:delete')") - @GetMapping("/changeLog/delete/{changeLogId}") - public ResponseDTO batchDelete(@PathVariable Long changeLogId) { -// return changeLogService.delete(changeLogId); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } -} \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminConfigController.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminConfigController.java deleted file mode 100644 index ea021c2e..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminConfigController.java +++ /dev/null @@ -1,60 +0,0 @@ -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); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - -} diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminDictController.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminDictController.java deleted file mode 100644 index 0b52fbbf..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminDictController.java +++ /dev/null @@ -1,83 +0,0 @@ -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); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @ApiOperation("数据字典Value-更新- @author 罗伊") - @PostMapping("/dict/value/edit") - public ResponseDTO valueEdit(@Valid @RequestBody DictValueUpdateForm valueUpdateForm) { -// return dictService.valueEdit(valueUpdateForm); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @ApiOperation("数据字典KEY-删除- @author 罗伊") - @PostMapping("/dict/key/delete") - public ResponseDTO keyDelete(@RequestBody List keyIdList) { -// return dictService.keyDelete(keyIdList); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @ApiOperation("数据字典Value-删除- @author 罗伊") - @PostMapping("/dict/value/delete") - public ResponseDTO valueDelete(@RequestBody List valueIdList) { -// return dictService.valueDelete(valueIdList); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - -} diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminFileController.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminFileController.java deleted file mode 100644 index f8a5b1e4..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminFileController.java +++ /dev/null @@ -1,51 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminHeartBeatController.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminHeartBeatController.java deleted file mode 100644 index 2f91d0be..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminHeartBeatController.java +++ /dev/null @@ -1,41 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminHelpDocController.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminHelpDocController.java deleted file mode 100644 index 99ef99b7..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminHelpDocController.java +++ /dev/null @@ -1,114 +0,0 @@ -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); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @ApiOperation("帮助文档目录-更新 @author 卓大") - @PreAuthorize("@saAuth.checkPermission('helpDocCatalog:edit')") - @PostMapping("/helpDoc/helpDocCatalog/update") - public ResponseDTO updateHelpDocCatalog(@RequestBody @Valid HelpDocCatalogUpdateForm helpDocCatalogUpdateForm) { -// return helpDocCatalogService.update(helpDocCatalogUpdateForm); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @ApiOperation("帮助文档目录-删除 @author 卓大") - @GetMapping("/helpDoc/helpDocCatalog/delete/{helpDocCatalogId}") - public ResponseDTO deleteHelpDocCatalog(@PathVariable Long helpDocCatalogId) { -// return helpDocCatalogService.delete(helpDocCatalogId); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - // --------------------- 帮助文档 【管理:增、删、查、改】------------------------- - - @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); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @ApiOperation("【管理】帮助文档-更新 @author 卓大") - @PreAuthorize("@saAuth.checkPermission('helpDoc:update')") - @PostMapping("/helpDoc/update") - @RepeatSubmit - public ResponseDTO update(@RequestBody @Valid HelpDocUpdateForm updateForm) { -// return helpDocService.update(updateForm); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @ApiOperation("【管理】帮助文档-删除 @author 卓大") - @PreAuthorize("@saAuth.checkPermission('helpDoc:delete')") - @GetMapping("/helpDoc/delete/{helpDocId}") - public ResponseDTO delete(@PathVariable Long helpDocId) { -// return helpDocService.delete(helpDocId); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminLoginLogController.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminLoginLogController.java deleted file mode 100644 index 0fd71522..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminLoginLogController.java +++ /dev/null @@ -1,42 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminOperateLogController.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminOperateLogController.java deleted file mode 100644 index 85161a6f..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminOperateLogController.java +++ /dev/null @@ -1,46 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminReloadController.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminReloadController.java deleted file mode 100644 index 24637f6e..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminReloadController.java +++ /dev/null @@ -1,54 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminSerialNumberController.java b/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminSerialNumberController.java deleted file mode 100644 index 329a2aaf..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminSerialNumberController.java +++ /dev/null @@ -1,74 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/resources/dev/application.yaml b/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/dev/application.yaml deleted file mode 100644 index 148358fa..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/dev/application.yaml +++ /dev/null @@ -1,15 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/resources/dev/log4j2.xml b/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/dev/log4j2.xml deleted file mode 100644 index a110f0a4..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/dev/log4j2.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - - - $${env:localPath:-/home}/logs/smart_admin_v2/dev - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/dev/spy.properties b/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/dev/spy.properties deleted file mode 100644 index 9877f620..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/dev/spy.properties +++ /dev/null @@ -1,18 +0,0 @@ -#相关的包 -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_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/category/CategoryMapper.xml b/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/category/CategoryMapper.xml deleted file mode 100644 index 908509c5..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/category/CategoryMapper.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/goods/GoodsMapper.xml b/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/goods/GoodsMapper.xml deleted file mode 100644 index 7fcadccb..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/goods/GoodsMapper.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - update t_goods - set deleted_flag = #{deletedFlag} - WHERE goods_id IN - - #{item} - - - - - - - \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/notice/NoticeMapper.xml b/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/notice/NoticeMapper.xml deleted file mode 100644 index 5965a484..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/notice/NoticeMapper.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - - - 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_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/bank/BankMapper.xml b/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/bank/BankMapper.xml deleted file mode 100644 index 79b505db..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/bank/BankMapper.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - - UPDATE t_oa_bank - SET deleted_flag = #{deletedFlag} - WHERE bank_id = #{bankId} - - - - - \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/enterprise/EnterpriseEmployeeMapper.xml b/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/enterprise/EnterpriseEmployeeMapper.xml deleted file mode 100644 index 62acf08f..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/enterprise/EnterpriseEmployeeMapper.xml +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - 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_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/enterprise/EnterpriseMapper.xml b/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/enterprise/EnterpriseMapper.xml deleted file mode 100644 index 11ed88ac..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/enterprise/EnterpriseMapper.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - - UPDATE t_oa_enterprise - SET deleted_flag = #{deletedFlag} - WHERE enterprise_id = #{enterpriseId} - - - - - - \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/invoice/InvoiceMapper.xml b/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/invoice/InvoiceMapper.xml deleted file mode 100644 index 0001d92f..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/invoice/InvoiceMapper.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - UPDATE t_oa_invoice - SET deleted_flag = #{deletedFlag} - WHERE invoice_id = #{invoiceId} - - - - - \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/notice/NoticeDao.xml b/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/notice/NoticeDao.xml deleted file mode 100644 index 13ec9914..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/business/oa/notice/NoticeDao.xml +++ /dev/null @@ -1,244 +0,0 @@ - - - - - - - - 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_v2/smart-admin-api/sa-admin/src/main/resources/mapper/system/department/DepartmentMapper.xml b/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/system/department/DepartmentMapper.xml deleted file mode 100644 index 326d94f5..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/system/department/DepartmentMapper.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/system/employee/EmployeeMapper.xml b/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/system/employee/EmployeeMapper.xml deleted file mode 100644 index 24f5eebb..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/system/employee/EmployeeMapper.xml +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - - - 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_v2/smart-admin-api/sa-admin/src/main/resources/mapper/system/menu/MenuMapper.xml b/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/system/menu/MenuMapper.xml deleted file mode 100644 index 68fbede0..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/system/menu/MenuMapper.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - 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_v2/smart-admin-api/sa-admin/src/main/resources/mapper/system/role/RoleDataScopeMapper.xml b/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/system/role/RoleDataScopeMapper.xml deleted file mode 100644 index b9f5bcfc..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/system/role/RoleDataScopeMapper.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - DELETE FROM t_role_data_scope - WHERE role_id = #{roleId} - - - - \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/system/role/RoleEmployeeMapper.xml b/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/system/role/RoleEmployeeMapper.xml deleted file mode 100644 index ae1e7b5a..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/system/role/RoleEmployeeMapper.xml +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - 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_v2/smart-admin-api/sa-admin/src/main/resources/mapper/system/role/RoleMapper.xml b/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/system/role/RoleMapper.xml deleted file mode 100644 index 48d0e447..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/system/role/RoleMapper.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/system/role/RoleMenuMapper.xml b/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/system/role/RoleMenuMapper.xml deleted file mode 100644 index 12b84f0d..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/mapper/system/role/RoleMenuMapper.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - delete - from t_role_menu - where role_id = #{roleId} - - - - - - \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/pre/application.yaml b/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/pre/application.yaml deleted file mode 100644 index f541f3f2..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/pre/application.yaml +++ /dev/null @@ -1,18 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/resources/pre/log4j2.xml b/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/pre/log4j2.xml deleted file mode 100644 index 70c3f924..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/pre/log4j2.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - - - $${env:localPath:-/home}/logs/smart_admin_v2/pre - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/prod/application.yaml b/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/prod/application.yaml deleted file mode 100644 index 1e015c7e..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/prod/application.yaml +++ /dev/null @@ -1,18 +0,0 @@ -server: - servlet: - context-path: '/smart-admin-api' - port: 1024 -spring: - profiles: - active: '@profiles.active@' - datasource: - url: jdbc:p6spy:mysql://127.0.0.1:3306/smart_admin_v2?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai - username: root - password: 1024lab - 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_v2/smart-admin-api/sa-admin/src/main/resources/prod/log4j2.xml b/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/prod/log4j2.xml deleted file mode 100644 index dafcb3d0..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/prod/log4j2.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - - - $${env:localPath:-/home}/logs/smart_admin_v2/prod - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/test/application.yaml b/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/test/application.yaml deleted file mode 100644 index d541ff90..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/test/application.yaml +++ /dev/null @@ -1,18 +0,0 @@ -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_v2/smart-admin-api/sa-admin/src/main/resources/test/log4j2.xml b/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/test/log4j2.xml deleted file mode 100644 index 035d17e0..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/test/log4j2.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - - - $${env:localPath:-/home}/logs/smart_admin_v2/test - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/test/spy.properties b/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/test/spy.properties deleted file mode 100644 index 9877f620..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/main/resources/test/spy.properties +++ /dev/null @@ -1,18 +0,0 @@ -#相关的包 -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_v2/smart-admin-api/sa-admin/src/test/java/net/lab1024/sa/admin/SmartAdminApplicationTest.java b/smart_admin_v2/smart-admin-api/sa-admin/src/test/java/net/lab1024/sa/admin/SmartAdminApplicationTest.java deleted file mode 100644 index 864741d1..00000000 --- a/smart_admin_v2/smart-admin-api/sa-admin/src/test/java/net/lab1024/sa/admin/SmartAdminApplicationTest.java +++ /dev/null @@ -1,25 +0,0 @@ -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_v2/smart-admin-api/sa-common/pom.xml b/smart_admin_v2/smart-admin-api/sa-common/pom.xml deleted file mode 100644 index 0a52eeda..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/pom.xml +++ /dev/null @@ -1,236 +0,0 @@ - - 4.0.0 - - net.1024lab - sa-parent - 1.0.0 - ../pom.xml - - - sa-common - 1.0.0 - - sa-common - sa-common project - - - - - org.springframework.boot - spring-boot-starter-aop - - - org.springframework.boot - spring-boot-starter-logging - - - - - - org.springframework.boot - 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-test - - - - mysql - mysql-connector-java - - - - com.github.ben-manes.caffeine - caffeine - - - error_prone_annotations - com.google.errorprone - - - - - - org.projectlombok - lombok - - - - org.apache.commons - commons-pool2 - - - - org.springframework - spring-mock - - - - com.baomidou - mybatis-plus-boot-starter - - - - p6spy - p6spy - - - - io.springfox - springfox-swagger2 - - - - com.squareup.okhttp3 - okhttp - - - - io.springfox - springfox-swagger-ui - - - - 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 - - - - - - \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/annoation/NoNeedLogin.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/annoation/NoNeedLogin.java deleted file mode 100644 index e8100629..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/annoation/NoNeedLogin.java +++ /dev/null @@ -1,20 +0,0 @@ -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 NoNeedLogin { -} diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/annoation/SaAuth.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/annoation/SaAuth.java deleted file mode 100644 index 4d44a2f7..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/annoation/SaAuth.java +++ /dev/null @@ -1,22 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/ErrorCode.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/ErrorCode.java deleted file mode 100644 index f67cc95c..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/ErrorCode.java +++ /dev/null @@ -1,52 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/ErrorCodeRangeContainer.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/ErrorCodeRangeContainer.java deleted file mode 100644 index db8cce84..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/ErrorCodeRangeContainer.java +++ /dev/null @@ -1,119 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/ErrorCodeRegister.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/ErrorCodeRegister.java deleted file mode 100644 index 43fe18a1..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/ErrorCodeRegister.java +++ /dev/null @@ -1,41 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/SystemErrorCode.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/SystemErrorCode.java deleted file mode 100644 index f3fc67ec..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/SystemErrorCode.java +++ /dev/null @@ -1,36 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/UnexpectedErrorCode.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/UnexpectedErrorCode.java deleted file mode 100644 index 2fc735d3..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/UnexpectedErrorCode.java +++ /dev/null @@ -1,36 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/UserErrorCode.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/UserErrorCode.java deleted file mode 100644 index 6178661a..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/code/UserErrorCode.java +++ /dev/null @@ -1,48 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/constant/RequestHeaderConst.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/constant/RequestHeaderConst.java deleted file mode 100644 index 674e4dd4..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/constant/RequestHeaderConst.java +++ /dev/null @@ -1,18 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/constant/StringConst.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/constant/StringConst.java deleted file mode 100644 index 2a40152d..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/constant/StringConst.java +++ /dev/null @@ -1,44 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/controller/SupportBaseController.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/controller/SupportBaseController.java deleted file mode 100644 index 5c135dec..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/controller/SupportBaseController.java +++ /dev/null @@ -1,16 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/DataScopePlugin.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/DataScopePlugin.java deleted file mode 100644 index 8963f216..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/DataScopePlugin.java +++ /dev/null @@ -1,15 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/PageParam.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/PageParam.java deleted file mode 100644 index 8ffb7d75..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/PageParam.java +++ /dev/null @@ -1,58 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/PageResult.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/PageResult.java deleted file mode 100644 index 0f75f991..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/PageResult.java +++ /dev/null @@ -1,53 +0,0 @@ -package net.lab1024.sa.common.common.domain; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -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 PageResult { - - /** - * 当前页 - */ - @ApiModelProperty(value = "当前页") - private Long pageNum; - - /** - * 每页的数量 - */ - @ApiModelProperty(value = "每页的数量") - private Long pageSize; - - /** - * 总记录数 - */ - @ApiModelProperty(value = "总记录数") - private Long total; - - /** - * 总页数 - */ - @ApiModelProperty(value = "总页数") - private Long pages; - - /** - * 结果集 - */ - @ApiModelProperty(value = "结果集") - private List list; - - @ApiModelProperty("是否为空") - private Boolean emptyFlag; - -} diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/RequestUrlVO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/RequestUrlVO.java deleted file mode 100644 index 3b8e0be3..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/RequestUrlVO.java +++ /dev/null @@ -1,26 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/RequestUser.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/RequestUser.java deleted file mode 100644 index afce6da7..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/RequestUser.java +++ /dev/null @@ -1,49 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/ResponseDTO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/ResponseDTO.java deleted file mode 100644 index 4aaaf8e5..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/ResponseDTO.java +++ /dev/null @@ -1,101 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/SystemEnvironment.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/SystemEnvironment.java deleted file mode 100644 index 8cf4b845..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/SystemEnvironment.java +++ /dev/null @@ -1,35 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/ValidateData.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/ValidateData.java deleted file mode 100644 index a9aff002..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/ValidateData.java +++ /dev/null @@ -1,21 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/ValidateList.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/ValidateList.java deleted file mode 100644 index c2ccb33c..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/domain/ValidateList.java +++ /dev/null @@ -1,153 +0,0 @@ -package net.lab1024.sa.common.common.domain; - -import javax.validation.Valid; -import javax.validation.constraints.NotEmpty; -import java.util.*; - -/** - * 校验集合是否为空的包装类 - * - * @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 = "数据长度不能为空哦") - private List list; - - public ValidateList() { - this.list = new ArrayList<>(); - } - - public ValidateList(List list) { - this.list = list; - } - - public List getList() { - return list; - } - - public void setList(List list) { - this.list = list; - } - - @Override - public int size() { - return list.size(); - } - - @Override - public boolean isEmpty() { - return list.isEmpty(); - } - - @Override - public boolean contains(Object o) { - return list.contains(o); - } - - @Override - public Iterator iterator() { - return list.iterator(); - } - - @Override - public Object[] toArray() { - return list.toArray(); - } - - @Override - public T[] toArray(T[] a) { - return list.toArray(a); - } - - @Override - public boolean add(E e) { - return list.add(e); - } - - @Override - public boolean remove(Object o) { - return list.remove(o); - } - - @Override - public boolean containsAll(Collection c) { - return list.containsAll(c); - } - - @Override - public boolean addAll(Collection c) { - return list.addAll(c); - } - - @Override - public boolean addAll(int index, Collection c) { - return list.addAll(index, c); - } - - @Override - public boolean removeAll(Collection c) { - return list.removeAll(c); - } - - @Override - public boolean retainAll(Collection c) { - return list.retainAll(c); - } - - @Override - public void clear() { - list.clear(); - } - - @Override - public E get(int index) { - return list.get(index); - } - - @Override - public E set(int index, E element) { - return list.set(index, element); - } - - @Override - public void add(int index, E element) { - list.add(index, element); - } - - @Override - public E remove(int index) { - return list.remove(index); - } - - @Override - public int indexOf(Object o) { - return list.indexOf(o); - } - - @Override - public int lastIndexOf(Object o) { - return list.lastIndexOf(o); - } - - @Override - public ListIterator listIterator() { - return list.listIterator(); - } - - @Override - public ListIterator listIterator(int index) { - return list.listIterator(index); - } - - @Override - public List subList(int fromIndex, int toIndex) { - return list.subList(fromIndex, toIndex); - } - -} \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/BaseEnum.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/BaseEnum.java deleted file mode 100644 index c7eaf693..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/BaseEnum.java +++ /dev/null @@ -1,99 +0,0 @@ -package net.lab1024.sa.common.common.enumeration; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONAware; -import com.alibaba.fastjson.JSONObject; -import com.google.common.base.CaseFormat; -import lombok.Data; - -import java.util.LinkedHashMap; -import java.util.Objects; - -/** - * 枚举类接口 - * - * @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 getValue(); - - /** - * 获取枚举类的说明 - * - * @return String - */ - String getDesc(); - - /** - * 比较参数是否与枚举类的value相同 - * - * @param value - * @return boolean - */ - default boolean equalsValue(Object value) { - return Objects.equals(getValue(), value); - } - - /** - * 比较枚举类是否相同 - * - * @param baseEnum - * @return boolean - */ - default boolean equals(BaseEnum baseEnum) { - return Objects.equals(getValue(), baseEnum.getValue()) && Objects.equals(getDesc(), baseEnum.getDesc()); - } - - /** - * 返回枚举类的说明 - * - * @param clazz 枚举类类对象 - * @return - */ - static String getInfo(Class clazz) { - BaseEnum[] enums = clazz.getEnumConstants(); - LinkedHashMap json = new LinkedHashMap<>(enums.length); - for (BaseEnum e : enums) { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("value", new DeletedQuotationAware(e.getValue())); - jsonObject.put("desc", new DeletedQuotationAware(e.getDesc())); - json.put(e.toString(), jsonObject); - } - - String enumJson = JSON.toJSONString(json, true); - enumJson = enumJson.replaceAll("\"", ""); - 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 instanceof String) { - this.value = "'" + value + "'"; - } else { - this.value = value.toString(); - } - } - - @Override - public String toJSONString() { - return value; - } - } -} diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/GenderEnum.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/GenderEnum.java deleted file mode 100644 index 548d02e1..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/GenderEnum.java +++ /dev/null @@ -1,37 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/SystemEnvironmentEnum.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/SystemEnvironmentEnum.java deleted file mode 100644 index bccaecbd..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/SystemEnvironmentEnum.java +++ /dev/null @@ -1,50 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/UserTypeEnum.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/UserTypeEnum.java deleted file mode 100644 index c34670b9..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/enumeration/UserTypeEnum.java +++ /dev/null @@ -1,37 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/excel/ExcelStyle.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/excel/ExcelStyle.java deleted file mode 100644 index eb723497..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/excel/ExcelStyle.java +++ /dev/null @@ -1,185 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/exception/BusinessException.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/exception/BusinessException.java deleted file mode 100644 index 19b6b958..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/exception/BusinessException.java +++ /dev/null @@ -1,38 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/interceptor/AbstractInterceptor.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/interceptor/AbstractInterceptor.java deleted file mode 100644 index 62f2042d..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/interceptor/AbstractInterceptor.java +++ /dev/null @@ -1,148 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/deserializer/DictValueVoDeserializer.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/deserializer/DictValueVoDeserializer.java deleted file mode 100644 index e61f1133..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/deserializer/DictValueVoDeserializer.java +++ /dev/null @@ -1,52 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/deserializer/FileKeyVoDeserializer.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/deserializer/FileKeyVoDeserializer.java deleted file mode 100644 index 66d5bdb6..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/deserializer/FileKeyVoDeserializer.java +++ /dev/null @@ -1,53 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/deserializer/LongJsonDeserializer.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/deserializer/LongJsonDeserializer.java deleted file mode 100644 index debb4875..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/deserializer/LongJsonDeserializer.java +++ /dev/null @@ -1,30 +0,0 @@ -package net.lab1024.sa.common.common.json.deserializer; - -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.DeserializationContext; -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 - public Long deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException { - String value = jsonParser.getText(); - try { - return value == null ? null : Long.parseLong(value); - } catch (NumberFormatException e) { - return null; - } - } -} \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/BigDecimalNullZeroSerializer.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/BigDecimalNullZeroSerializer.java deleted file mode 100644 index b0174ddf..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/BigDecimalNullZeroSerializer.java +++ /dev/null @@ -1,29 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/DictValueVoSerializer.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/DictValueVoSerializer.java deleted file mode 100644 index 5398bb0d..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/DictValueVoSerializer.java +++ /dev/null @@ -1,52 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/FileKeySerializer.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/FileKeySerializer.java deleted file mode 100644 index d63d492b..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/FileKeySerializer.java +++ /dev/null @@ -1,45 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/FileKeyVoSerializer.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/FileKeyVoSerializer.java deleted file mode 100644 index 8f27dc1e..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/FileKeyVoSerializer.java +++ /dev/null @@ -1,46 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/LongJsonSerializer.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/LongJsonSerializer.java deleted file mode 100644 index 05a140a3..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/json/serializer/LongJsonSerializer.java +++ /dev/null @@ -1,28 +0,0 @@ -package net.lab1024.sa.common.common.json.serializer; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonSerializer; -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)); - if (text != null) { - jsonGenerator.writeString(text); - } - } -} \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/AbstractSecurityConfig.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/AbstractSecurityConfig.java deleted file mode 100644 index 91fb7212..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/AbstractSecurityConfig.java +++ /dev/null @@ -1,91 +0,0 @@ -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 noNeedLoginUrlList.toArray(new String[noNeedLoginUrlList.size()]); - } - - /** - * 忽略的url集合 - * - * @return - */ - protected String[] getIgnoreUrlList() { - return ignoreUrlList.toArray(new String[ignoreUrlList.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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityAuthenticationFailHandler.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityAuthenticationFailHandler.java deleted file mode 100644 index 3e146f18..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityAuthenticationFailHandler.java +++ /dev/null @@ -1,43 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityMethodSource.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityMethodSource.java deleted file mode 100644 index 290b3d9c..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityMethodSource.java +++ /dev/null @@ -1,66 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityPermissionCheckService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityPermissionCheckService.java deleted file mode 100644 index 29e46559..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityPermissionCheckService.java +++ /dev/null @@ -1,74 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityTokenFilter.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityTokenFilter.java deleted file mode 100644 index 1a2ef97e..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/security/SecurityTokenFilter.java +++ /dev/null @@ -1,64 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/swagger/ApiModelPropertyEnum.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/swagger/ApiModelPropertyEnum.java deleted file mode 100644 index c306f00b..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/swagger/ApiModelPropertyEnum.java +++ /dev/null @@ -1,40 +0,0 @@ -package net.lab1024.sa.common.common.swagger; - -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; - -/** - * 枚举类字段属性的 自定义 swagger 注解 - * - * @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) -public @interface ApiModelPropertyEnum { - - /** - * 枚举类对象 - * - * @return - */ - Class value(); - - String example() default ""; - - boolean hidden() default false; - - boolean required() default true; - - String dataType() default ""; - - String desc() default ""; - -} diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/swagger/Swagger2MapperImplExtension.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/swagger/Swagger2MapperImplExtension.java deleted file mode 100644 index 6de869d9..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/swagger/Swagger2MapperImplExtension.java +++ /dev/null @@ -1,91 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/swagger/SwaggerApiModelPropertyEnumPlugin.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/swagger/SwaggerApiModelPropertyEnumPlugin.java deleted file mode 100644 index ce126155..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/swagger/SwaggerApiModelPropertyEnumPlugin.java +++ /dev/null @@ -1,77 +0,0 @@ -package net.lab1024.sa.common.common.swagger; - -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; -import springfox.documentation.swagger.common.SwaggerPluginSupport; - -import java.lang.reflect.AnnotatedElement; - -import static springfox.documentation.schema.Annotations.findPropertyAnnotation; - -/** - * swagger 用于说明枚举类字段说明 - * * SWAGGER_PLUGIN_ORDER+1 是将此配置放在原来的后面执行 - * - * @Author 1024创新实验室: 胡克 - * @Date 2019/8/11 15:36:56 - * @Wechat zhuoda1024 - * @Email lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ) - */ -@Component -@Order(SwaggerPluginSupport.SWAGGER_PLUGIN_ORDER + 1) -public class SwaggerApiModelPropertyEnumPlugin implements ModelPropertyBuilderPlugin { - - @Override - public void apply(ModelPropertyContext context) { - Optional annotation = Optional.absent(); - - if (context.getAnnotatedElement().isPresent()) { - annotation = annotation.or(findApiModePropertyAnnotation(context.getAnnotatedElement().get())); - } - if (context.getBeanPropertyDefinition().isPresent()) { - annotation = annotation.or(findPropertyAnnotation(context.getBeanPropertyDefinition().get(), ApiModelPropertyEnum.class)); - } - - if (annotation.isPresent()) { - ApiModelPropertyEnum anEnum = annotation.get(); - String enumInfo = BaseEnum.getInfo(anEnum.value()); - context.getBuilder() - .required(annotation.transform(toIsRequired()).or(false)) - .description(anEnum.desc() + ":" + enumInfo) - .example(annotation.transform(toExample()).orNull()) - .isHidden(anEnum.hidden()); - } - } - - @Override - public boolean supports(DocumentationType delimiter) { - return SwaggerPluginSupport.pluginDoesApply(delimiter); - } - - static Function toIsRequired() { - return annotation -> annotation.required(); - } - - public static Optional findApiModePropertyAnnotation(AnnotatedElement annotated) { - return Optional.fromNullable(AnnotationUtils.getAnnotation(annotated, ApiModelPropertyEnum.class)); - } - - static Function toExample() { - return annotation -> { - String example = annotation.example(); - if (StringUtils.isBlank(example)) { - return ""; - } - return example; - }; - } -} diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartBeanUtil.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartBeanUtil.java deleted file mode 100644 index ec36b2b2..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartBeanUtil.java +++ /dev/null @@ -1,94 +0,0 @@ -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的属性 - * - * @param source 源 要复制的对象 - * @param target 目标 复制到此对象 - */ - public static void copyProperties(Object source, Object target) { - BeanUtils.copyProperties(source, target); - } - - /** - * 复制对象 - * - * @param source 源 要复制的对象 - * @param target 目标 复制到此对象 - * @param - * @return - */ - public static T copy(Object source, Class target) { - if (source == null || target == null) { - return null; - } - try { - T newInstance = target.newInstance(); - BeanUtils.copyProperties(source, newInstance); - return newInstance; - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - /** - * 复制list - * - * @param source - * @param target - * @param - * @param - * @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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartBigDecimalUtil.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartBigDecimalUtil.java deleted file mode 100644 index a1ff2da6..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartBigDecimalUtil.java +++ /dev/null @@ -1,247 +0,0 @@ -package net.lab1024.sa.common.common.util; - -import java.math.BigDecimal; -import java.math.RoundingMode; - -/** - * BigDecimal 工具类 - * - * @Author 1024创新实验室: 胡克 - * @Date 2018/01/17 13:54 - * @Wechat zhuoda1024 - * @Email lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ) - */ -public class SmartBigDecimalUtil { - - /** - * 金额 保留小数点 2 - */ - public static final int AMOUNT_DECIMAL_POINT = 2; - - public static final BigDecimal ONE_HUNDRED = new BigDecimal("100"); - - /** - * 金额相关计算方法:四舍五入 保留2位小数点 - */ - public static class Amount { - - public static BigDecimal add(BigDecimal num1, BigDecimal num2) { - return setScale(num1.add(num2), AMOUNT_DECIMAL_POINT); - } - - public static BigDecimal multiply(BigDecimal num1, BigDecimal num2) { - return setScale(num1.multiply(num2), AMOUNT_DECIMAL_POINT); - } - - public static BigDecimal subtract(BigDecimal num1, BigDecimal num2) { - return setScale(num1.subtract(num2), AMOUNT_DECIMAL_POINT); - } - - public static BigDecimal divide(BigDecimal num1, BigDecimal num2) { - return setScale(num1.divide(num2, RoundingMode.HALF_UP), AMOUNT_DECIMAL_POINT); - } - } - - - /** - * BigDecimal 加法 num1 + num2 - * 未做非空校验 - * - * @param num1 - * @param num2 - * @param point 请使用BigDecimalUtils.PRICE_DECIMAL_POINT | BigDecimalUtils.WEIGHT_DECIMAL_POINT - * @return BigDecimal - */ - public static BigDecimal add(BigDecimal num1, BigDecimal num2, int point) { - 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 - * 未做非空校验 - * - * @param num1 - * @param num2 - * @param point 请使用BigDecimalUtils.PRICE_DECIMAL_POINT | BigDecimalUtils.WEIGHT_DECIMAL_POINT - * @return BigDecimal - */ - public static BigDecimal multiply(BigDecimal num1, BigDecimal num2, int point) { - return setScale(num1.multiply(num2), point); - } - - /** - * BigDecimal 减法 num1 - num2 - * 未做非空校验 - * - * @param num1 - * @param num2 - * @param point 请使用BigDecimalUtils.PRICE_DECIMAL_POINT | BigDecimalUtils.WEIGHT_DECIMAL_POINT - * @return BigDecimal - */ - public static BigDecimal subtract(BigDecimal num1, BigDecimal num2, int point) { - return setScale(num1.subtract(num2), point); - } - - /** - * BigDecimal 除法 num1/num2 - * 未做非空校验 - * - * @param num1 - * @param num2 - * @param point 请使用BigDecimalUtils.PRICE_DECIMAL_POINT | BigDecimalUtils.WEIGHT_DECIMAL_POINT - * @return BigDecimal - */ - public static BigDecimal divide(BigDecimal num1, BigDecimal num2, int point) { - return num1.divide(num2, point, RoundingMode.HALF_UP); - } - - /** - * 设置小数点类型为 四舍五入 - * - * @param num - * @param point - * @return BigDecimal - */ - public static BigDecimal setScale(BigDecimal num, int point) { - return num.setScale(point, RoundingMode.HALF_UP); - } - - /** - * 比较 num1 是否大于 num2 - * - * @param num1 - * @param num2 - * @return boolean - */ - public static boolean isGreaterThan(BigDecimal num1, BigDecimal num2) { - return num1.compareTo(num2) > 0; - } - - /** - * 比较 num1 是否大于等于 num2 - * - * @param num1 - * @param num2 - * @return boolean - */ - public static boolean isGreaterOrEqual(BigDecimal num1, BigDecimal num2) { - return isGreaterThan(num1, num2) || equals(num1, num2); - } - - /** - * 比较 num1 是否小于 num2 - * - * @param num1 - * @param num2 - * @return boolean - */ - public static boolean isLessThan(BigDecimal num1, BigDecimal num2) { - return num1.compareTo(num2) < 0; - } - - /** - * 比较 num1 是否小于等于 num2 - * - * @param num1 - * @param num2 - * @return boolean - */ - public static boolean isLessOrEqual(BigDecimal num1, BigDecimal num2) { - return isLessThan(num1, num2) || equals(num1, num2); - } - - /** - * 比较 num1 是否等于 num2 - * - * @param num1 - * @param num2 - * @return - */ - public static boolean equals(BigDecimal num1, BigDecimal num2) { - return num1.compareTo(num2) == 0; - } - - /** - * 计算 num1 / num2 的百分比 - * - * @param num1 - * @param num2 - * @param point 保留几位小数 - * @return String - */ - 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; - } - return percent(new BigDecimal(num1), new BigDecimal(num2), point); - } - - /** - * 计算 num1 / num2 的百分比 - * - * @param num1 - * @param num2 - * @param point 保留几位小数 - * @return String - */ - public static BigDecimal percent(BigDecimal num1, BigDecimal num2, int point) { - if (num1 == null || num2 == null) { - return BigDecimal.ZERO; - } - if (equals(BigDecimal.ZERO, num2)) { - return BigDecimal.ZERO; - } - BigDecimal percent = num1.divide(num2, point + 2, RoundingMode.HALF_UP); - return percent.multiply(ONE_HUNDRED).setScale(point); - } - - /** - * 比较 num1,num2 返回最大的值 - * - * @param num1 - * @param num2 - * @return BigDecimal - */ - public static BigDecimal max(BigDecimal num1, BigDecimal num2) { - return num1.compareTo(num2) > 0 ? num1 : num2; - } - - /** - * 比较 num1,num2 返回最小的值 - * - * @param num1 - * @param num2 - * @return BigDecimal - */ - 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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartEasyPoiExcelUtil.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartEasyPoiExcelUtil.java deleted file mode 100644 index 40994422..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartEasyPoiExcelUtil.java +++ /dev/null @@ -1,114 +0,0 @@ -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; - -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; - -/** - * 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 { - ExportParams exportParams = new ExportParams(title, sheetName); - exportParams.setCreateHeadRows(isCreateHeader); - defaultExport(list, pojoClass, fileName, response, exportParams); - } - - public static void exportExcel(List list, String title, String sheetName, Class pojoClass, String fileName, - HttpServletResponse response) throws IOException { - defaultExport(list, pojoClass, fileName, response, new ExportParams(title, sheetName)); - } - - public static void exportExcel(List> list, String fileName, HttpServletResponse response) throws IOException { - defaultExport(list, fileName, response); - } - - private static void defaultExport(List list, Class pojoClass, String fileName, - HttpServletResponse response, ExportParams exportParams) throws IOException { - Workbook workbook = ExcelExportUtil.exportExcel(exportParams, pojoClass, list); - downloadExcel(fileName, workbook, response); - } - - - 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); - downloadExcel(fileName, workbook, response); - } - - public static List importExcel(String filePath, Integer titleRows, Integer headerRows, Class pojoClass) { - if (StringUtils.isBlank(filePath)) { - return null; - } - ImportParams params = new ImportParams(); - params.setTitleRows(titleRows); - params.setHeadRows(headerRows); - List list = null; - try { - list = ExcelImportUtil.importExcel(new File(filePath), pojoClass, params); - } catch (NoSuchElementException e) { - //throw new NormalException("模板不能为空"); - } catch (Exception e) { - e.printStackTrace(); - } - return list; - } - - public static List importExcel(MultipartFile file, Integer titleRows, Integer headerRows, Class pojoClass) { - if (file == null) { - return null; - } - ImportParams params = new ImportParams(); - params.setTitleRows(titleRows); - params.setHeadRows(headerRows); - List list = null; - try { - list = ExcelImportUtil.importExcel(file.getInputStream(), pojoClass, params); - } catch (NoSuchElementException e) { - // throw new NormalException("excel文件不能为空"); - } catch (Exception e) { - //throw new NormalException(e.getMessage()); - System.out.println(e.getMessage()); - } - return list; - } -} diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartEnumUtil.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartEnumUtil.java deleted file mode 100644 index 40c34a95..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartEnumUtil.java +++ /dev/null @@ -1,165 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartPageUtil.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartPageUtil.java deleted file mode 100644 index 63ac5d7b..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartPageUtil.java +++ /dev/null @@ -1,111 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartRequestUtil.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartRequestUtil.java deleted file mode 100644 index 40210ba2..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartRequestUtil.java +++ /dev/null @@ -1,38 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartStringUtil.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartStringUtil.java deleted file mode 100644 index 230863a0..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartStringUtil.java +++ /dev/null @@ -1,334 +0,0 @@ -package net.lab1024.sa.common.common.util; - - -import cn.hutool.core.util.StrUtil; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -/** - * 独有的字符串工具类 - * - * @Author 1024创新实验室-主任: 卓大 - * @Date 2021-09-02 20:21:10 - * @Wechat zhuoda1024 - * @Email lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ) - */ -public class SmartStringUtil extends StrUtil { - - // ===============split ======================= - - public static Set splitConvertToSet(String str, String split) { - if (isEmpty(str)) { - return new HashSet(); - } - String[] splitArr = str.split(split); - HashSet set = new HashSet(splitArr.length); - for (String string : splitArr) { - set.add(string); - } - return set; - } - - public static List splitConvertToList(String str, String split) { - if (isEmpty(str)) { - return new ArrayList(); - } - String[] splitArr = str.split(split); - ArrayList list = new ArrayList(splitArr.length); - for (String string : splitArr) { - list.add(string); - } - return list; - } - - // ===============split Integer======================= - - public static List splitConvertToIntList(String str, String split, int defaultVal) { - if (isEmpty(str)) { - return new ArrayList(); - } - String[] strArr = str.split(split); - List list = new ArrayList(strArr.length); - for (int i = 0; i < strArr.length; i++) { - try { - int parseInt = Integer.parseInt(strArr[i]); - list.add(parseInt); - } catch (NumberFormatException e) { - list.add(defaultVal); - continue; - } - } - return list; - } - - public static Set splitConvertToIntSet(String str, String split, int defaultVal) { - if (isEmpty(str)) { - return new HashSet(); - } - String[] strArr = str.split(split); - HashSet set = new HashSet(strArr.length); - for (int i = 0; i < strArr.length; i++) { - try { - int parseInt = Integer.parseInt(strArr[i]); - set.add(parseInt); - } catch (NumberFormatException e) { - set.add(defaultVal); - continue; - } - } - return set; - } - - public static Set splitConvertToIntSet(String str, String split) { - return splitConvertToIntSet(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) { - if (isEmpty(str)) { - return new int[0]; - } - String[] strArr = str.split(split); - int[] result = new int[strArr.length]; - for (int i = 0; i < strArr.length; i++) { - try { - result[i] = Integer.parseInt(strArr[i]); - } catch (NumberFormatException e) { - result[i] = defaultVal; - continue; - } - } - return result; - } - - public static int[] splitConvertToIntArray(String str, String split) { - return splitConvertToIntArray(str, split, 0); - } - - // ===============split 2 Long======================= - - public static List splitConvertToLongList(String str, String split, long defaultVal) { - if (isEmpty(str)) { - return new ArrayList(); - } - String[] strArr = str.split(split); - List list = new ArrayList(strArr.length); - for (int i = 0; i < strArr.length; i++) { - try { - long parseLong = Long.parseLong(strArr[i]); - list.add(parseLong); - } catch (NumberFormatException e) { - list.add(defaultVal); - continue; - } - } - return list; - } - - public static List splitConvertToLongList(String str, String split) { - return splitConvertToLongList(str, split, 0L); - } - - public static long[] splitConvertToLongArray(String str, String split, long defaultVal) { - if (isEmpty(str)) { - return new long[0]; - } - String[] strArr = str.split(split); - long[] result = new long[strArr.length]; - for (int i = 0; i < strArr.length; i++) { - try { - result[i] = Long.parseLong(strArr[i]); - } catch (NumberFormatException e) { - result[i] = defaultVal; - continue; - } - } - return result; - } - - public static long[] splitConvertToLongArray(String str, String split) { - return splitConvertToLongArray(str, split, 0L); - } - - // ===============split convert byte======================= - - public static List splitConvertToByteList(String str, String split, byte defaultVal) { - if (isEmpty(str)) { - return new ArrayList(); - } - String[] strArr = str.split(split); - List list = new ArrayList(strArr.length); - for (int i = 0; i < strArr.length; i++) { - try { - byte parseByte = Byte.parseByte(strArr[i]); - list.add(parseByte); - } catch (NumberFormatException e) { - list.add(defaultVal); - continue; - } - } - return list; - } - - public static List splitConvertToByteList(String str, String split) { - return splitConvertToByteList(str, split, (byte) 0); - } - - public static byte[] splitConvertToByteArray(String str, String split, byte defaultVal) { - if (isEmpty(str)) { - return new byte[0]; - } - String[] strArr = str.split(split); - byte[] result = new byte[strArr.length]; - for (int i = 0; i < strArr.length; i++) { - try { - result[i] = Byte.parseByte(strArr[i]); - } catch (NumberFormatException e) { - result[i] = defaultVal; - continue; - } - } - return result; - } - - public static byte[] splitConvertToByteArray(String str, String split) { - return splitConvertToByteArray(str, split, (byte) 0); - } - - // ===============split convert double======================= - - public static List splitConvertToDoubleList(String str, String split, double defaultVal) { - if (isEmpty(str)) { - return new ArrayList(); - } - String[] strArr = str.split(split); - List list = new ArrayList(strArr.length); - for (int i = 0; i < strArr.length; i++) { - try { - double parseByte = Double.parseDouble(strArr[i]); - list.add(parseByte); - } catch (NumberFormatException e) { - list.add(defaultVal); - continue; - } - } - return list; - } - - public static List splitConvertToDoubleList(String str, String split) { - return splitConvertToDoubleList(str, split, 0); - } - - public static double[] splitConvertToDoubleArray(String str, String split, double defaultVal) { - if (isEmpty(str)) { - return new double[0]; - } - String[] strArr = str.split(split); - double[] result = new double[strArr.length]; - for (int i = 0; i < strArr.length; i++) { - try { - result[i] = Double.parseDouble(strArr[i]); - } catch (NumberFormatException e) { - result[i] = defaultVal; - continue; - } - } - return result; - } - - public static double[] splitConvertToDoubleArray(String str, String split) { - return splitConvertToDoubleArray(str, split, 0); - } - - // ===============split convert float======================= - - public static List splitConvertToFloatList(String str, String split, float defaultVal) { - if (isEmpty(str)) { - return new ArrayList(); - } - String[] strArr = str.split(split); - List list = new ArrayList(strArr.length); - for (int i = 0; i < strArr.length; i++) { - try { - float parseByte = Float.parseFloat(strArr[i]); - list.add(parseByte); - } catch (NumberFormatException e) { - list.add(defaultVal); - continue; - } - } - return list; - } - - public static List splitConvertToFloatList(String str, String split) { - return splitConvertToFloatList(str, split, 0f); - } - - public static float[] splitConvertToFloatArray(String str, String split, float defaultVal) { - if (isEmpty(str)) { - return new float[0]; - } - String[] strArr = str.split(split); - float[] result = new float[strArr.length]; - for (int i = 0; i < strArr.length; i++) { - try { - result[i] = Float.parseFloat(strArr[i]); - } catch (NumberFormatException e) { - result[i] = defaultVal; - continue; - } - } - return result; - } - - public static float[] splitConvertToFloatArray(String str, String split) { - return splitConvertToFloatArray(str, split, 0f); - } - - - public static String upperCaseFirstChar(String str) { - 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; - } - } - - 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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartVerificationUtil.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartVerificationUtil.java deleted file mode 100644 index 5360e160..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/util/SmartVerificationUtil.java +++ /dev/null @@ -1,98 +0,0 @@ -package net.lab1024.sa.common.common.util; - -import java.util.regex.Pattern; - -/** - * 验证工具类 - * - * @Author 1024创新实验室: 胡克 - * @Date 2017/11/06 10:54 - * @Wechat zhuoda1024 - * @Email lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ) - */ -public class SmartVerificationUtil { - - /** - * 手机号码验证规则 - */ - public static final String PHONE_REGEXP = "^1[0-9]{10}"; - - /** - * 固定号码验证规则 - */ - public static final String FIXED_PHONE_REGEXP = "^0\\d{2,3}-[1-9]\\d{6,7}$"; - - /** - * 密码正则校验 - */ - public static final String PWD_REGEXP = "^[A-Za-z0-9.]{6,15}$"; - - /** - * 车牌号 - */ - 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})"; - - /** - * 日期年月日校验 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])$"; - - /** - * 日期校验 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)"; - - 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])$"; - - /** - * 时间验证 10:23 - */ - public static final String TIME = "^(0[0-9]|1[0-9]|2[0-3]):(0[0-9]|[1-5][0-9])$"; - - /** - * 身份证号 - */ - public static final String ID_CARD = "(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)"; - - /** - * URL - */ - public static final String URL = "[a-zA-z]+://[^\\s]*"; - - /** - * 邮箱 - */ - public static final String EMAIL = "[\\w!#$%&'*+/=?^_`{|}~-]+(?:\\.[\\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[\\w](?:[\\w-]*[\\w])?"; - - /** - * 整数 - */ - public static final String INTEGER = "^-?[1-9]\\d*$"; - - /** - * 小数 - */ - public static final String DOUBLE = "^-?[1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*$"; - - - public static void main(String[] args) { - boolean matches = Pattern.matches(INTEGER, "1"); - System.out.println(matches); - } -} diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/validator/enumeration/CheckEnum.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/validator/enumeration/CheckEnum.java deleted file mode 100644 index dd708b3c..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/validator/enumeration/CheckEnum.java +++ /dev/null @@ -1,52 +0,0 @@ -package net.lab1024.sa.common.common.validator.enumeration; - - -import net.lab1024.sa.common.common.enumeration.BaseEnum; - -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 1024创新实验室: 胡克 - * @Date 2017/11/11 15:31 - * @Wechat zhuoda1024 - * @Email lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ) - */ -@Target(ElementType.FIELD) -@Retention(RetentionPolicy.RUNTIME) -@Constraint(validatedBy = EnumValidator.class)// 自定义验证的处理类 -public @interface CheckEnum { - - /** - * 默认的错误提示信息 - * - * @return String - */ - String message(); - - /** - * 枚举类对象 必须实现BaseEnum接口 - * - * @return - */ - Class value(); - - /** - * 是否必须 - * - * @return boolean - */ - boolean required() default false; - - //下面这两个属性必须添加 :不然会报错 - Class[] groups() default {}; - - Class[] payload() default {}; -} diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/validator/enumeration/EnumValidator.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/validator/enumeration/EnumValidator.java deleted file mode 100644 index bd7ea126..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/common/validator/enumeration/EnumValidator.java +++ /dev/null @@ -1,75 +0,0 @@ -package net.lab1024.sa.common.common.validator.enumeration; - - -import net.lab1024.sa.common.common.enumeration.BaseEnum; - -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -/** - * 枚举类校验器 - * - * @Author 1024创新实验室: 胡克 - * @Date 2017/11/11 15:34 - * @Wechat zhuoda1024 - * @Email lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ) - */ -public class EnumValidator implements ConstraintValidator { - - /** - * 枚举类实例集合 - */ - private List enumValList; - - /** - * 是否必须 - */ - private boolean required; - - @Override - public void initialize(CheckEnum constraintAnnotation) { - // 获取注解传入的枚举类对象 - required = constraintAnnotation.required(); - Class enumClass = constraintAnnotation.value(); - enumValList = Stream.of(enumClass.getEnumConstants()).map(BaseEnum::getValue).collect(Collectors.toList()); - } - - @Override - public boolean isValid(Object value, ConstraintValidatorContext constraintValidatorContext) { - // 判断是否必须 - if (null == value) { - return !required; - } - - if (value instanceof List) { - // 如果为 List 集合数据 - return this.checkList((List) value); - } - - // 校验是否为合法的枚举值 - return enumValList.contains(value); - } - - /** - * 校验集合类型 - * - * @param list - * @return - */ - private boolean checkList(List list) { - if (required && list.isEmpty()) { - // 必须的情况下 list 不能为空 - return false; - } - // 校验是否重复 - long count = list.stream().distinct().count(); - if (count != list.size()) { - return false; - } - return enumValList.containsAll(list); - } -} diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/AsyncConfig.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/AsyncConfig.java deleted file mode 100644 index 9d39c7cd..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/AsyncConfig.java +++ /dev/null @@ -1,71 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/CorsFilterConfig.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/CorsFilterConfig.java deleted file mode 100644 index 7cea2f08..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/CorsFilterConfig.java +++ /dev/null @@ -1,45 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/DataSourceConfig.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/DataSourceConfig.java deleted file mode 100644 index d6343524..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/DataSourceConfig.java +++ /dev/null @@ -1,197 +0,0 @@ -package net.lab1024.sa.common.config; - -import com.alibaba.druid.filter.Filter; -import com.alibaba.druid.filter.stat.StatFilter; -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.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; -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 1024创新实验室-主任: 卓大 - * @Date 2017-11-28 15:21:10 - * @Wechat zhuoda1024 - * @Email lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ) - */ -@Slf4j -@Configuration -public class DataSourceConfig { - - @Value("${spring.datasource.driver-class-name}") - String driver; - - @Value("${spring.datasource.url}") - String url; - - @Value("${spring.datasource.username}") - String username; - - @Value("${spring.datasource.password}") - String password; - - @Value("${spring.datasource.initial-size}") - int initialSize; - - @Value("${spring.datasource.min-idle}") - int minIdle; - - @Value("${spring.datasource.max-active}") - int maxActive; - - @Value("${spring.datasource.max-wait}") - long maxWait; - - @Value("${spring.datasource.time-between-eviction-runs-millis}") - long timeBetweenEvictionRunsMillis; - - @Value("${spring.datasource.min-evictable-idle-time-millis}") - long minEvictableIdleTimeMillis; - - @Value("${spring.datasource.filters}") - String filters; - - @Value("${spring.datasource.druid.username}") - String druidUserName; - - @Value("${spring.datasource.druid.password}") - String druidPassword; - - @Value("${spring.datasource.druid.login.enabled}") - boolean druidLoginEnable; - @Value("${spring.datasource.druid.method.pointcut}") - String methodPointcut; - - @Autowired - private MybatisPlusInterceptor paginationInterceptor; - - @Autowired(required = false) - private DataScopePlugin dataScopePlugin; - - @Bean - @Primary - public DataSource druidDataSource() { - DruidDataSource druidDataSource = new DruidDataSource(); - druidDataSource.setDbType(DbType.MYSQL.getDb()); - druidDataSource.setDriverClassName(driver); - druidDataSource.setUrl(url); - druidDataSource.setUsername(username); - druidDataSource.setPassword(password); - druidDataSource.setInitialSize(initialSize); - druidDataSource.setMinIdle(minIdle); - druidDataSource.setMaxActive(maxActive); - druidDataSource.setMaxWait(maxWait); - druidDataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis); - druidDataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis); - druidDataSource.setValidationQuery("SELECT 1"); - try { - druidDataSource.setFilters(filters); - ArrayList arrayList = new ArrayList<>(); - StatFilter statFilter = new StatFilter(); - statFilter.setMergeSql(true); - statFilter.setSlowSqlMillis(500); - statFilter.setLogSlowSql(true); - arrayList.add(statFilter); - druidDataSource.setProxyFilters(arrayList); - druidDataSource.init(); - } catch (SQLException e) { - log.error("初始化数据源出错", e); - } - - return druidDataSource; - } - - @Bean - 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(); - //不设置用户名密码可以直接通过druid/index.html访问 - if (druidLoginEnable) { - initParameters.put("loginUsername", druidUserName); - initParameters.put("loginPassword", druidPassword); - } - initParameters.put("resetEnable", "false"); - servletRegistrationBean.setInitParameters(initParameters); - return servletRegistrationBean; - } - - @Bean - public FilterRegistrationBean filterRegistrationBean() { - FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); - filterRegistrationBean.setFilter(new WebStatFilter()); - filterRegistrationBean.addUrlPatterns("/*"); - filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/*"); - return filterRegistrationBean; - } - - @Bean - public JdkRegexpMethodPointcut jdkRegexpMethodPointcut() { - JdkRegexpMethodPointcut jdkRegexpMethodPointcut = new JdkRegexpMethodPointcut(); - jdkRegexpMethodPointcut.setPatterns(methodPointcut); - return jdkRegexpMethodPointcut; - } - - @Bean - public DefaultPointcutAdvisor defaultPointcutAdvisor() { - DefaultPointcutAdvisor pointcutAdvisor = new DefaultPointcutAdvisor(); - pointcutAdvisor.setPointcut(jdkRegexpMethodPointcut()); - pointcutAdvisor.setAdvice(new DruidStatInterceptor()); - return pointcutAdvisor; - } - -} diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/DateConfig.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/DateConfig.java deleted file mode 100644 index 5faee795..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/DateConfig.java +++ /dev/null @@ -1,88 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/FileCloudConfig.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/FileCloudConfig.java deleted file mode 100644 index c7285969..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/FileCloudConfig.java +++ /dev/null @@ -1,85 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/HeartBeatConfig.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/HeartBeatConfig.java deleted file mode 100644 index 56e8765f..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/HeartBeatConfig.java +++ /dev/null @@ -1,37 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/MvcConfig.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/MvcConfig.java deleted file mode 100644 index c08339c9..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/MvcConfig.java +++ /dev/null @@ -1,50 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/MybatisPlusConfig.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/MybatisPlusConfig.java deleted file mode 100644 index f946abea..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/MybatisPlusConfig.java +++ /dev/null @@ -1,33 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/PostProcessorConfig.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/PostProcessorConfig.java deleted file mode 100644 index 827b499b..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/PostProcessorConfig.java +++ /dev/null @@ -1,56 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/RedisConfig.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/RedisConfig.java deleted file mode 100644 index 7002d53d..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/RedisConfig.java +++ /dev/null @@ -1,72 +0,0 @@ -package net.lab1024.sa.common.config; - -import com.fasterxml.jackson.annotation.JsonAutoDetect; -import com.fasterxml.jackson.annotation.PropertyAccessor; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.redis.connection.RedisConnectionFactory; -import org.springframework.data.redis.core.*; -import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; -import org.springframework.data.redis.serializer.StringRedisSerializer; - -/** - * redis配置 - * - * @Author 1024创新实验室-主任: 卓大 - * @Date 2021-09-02 20:21:10 - * @Wechat zhuoda1024 - * @Email lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ) - */ -@Configuration -public class RedisConfig { - - @Autowired - private RedisConnectionFactory factory; - - @Bean - public RedisTemplate redisTemplate() { - Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); - ObjectMapper om = new ObjectMapper(); - om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); - om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); - jackson2JsonRedisSerializer.setObjectMapper(om); - RedisTemplate template = new RedisTemplate(); - template.setConnectionFactory(factory); - template.setKeySerializer(new StringRedisSerializer()); - template.setValueSerializer(jackson2JsonRedisSerializer); - template.setHashKeySerializer(jackson2JsonRedisSerializer); - template.setHashValueSerializer(jackson2JsonRedisSerializer); - template.setDefaultSerializer(new StringRedisSerializer()); - template.afterPropertiesSet(); - return template; - } - - @Bean - public HashOperations hashOperations(RedisTemplate redisTemplate) { - return redisTemplate.opsForHash(); - } - - @Bean - public ValueOperations valueOperations(RedisTemplate redisTemplate) { - return redisTemplate.opsForValue(); - } - - @Bean - public ListOperations listOperations(RedisTemplate redisTemplate) { - return redisTemplate.opsForList(); - } - - @Bean - public SetOperations setOperations(RedisTemplate redisTemplate) { - return redisTemplate.opsForSet(); - } - - @Bean - public ZSetOperations zSetOperations(RedisTemplate redisTemplate) { - return redisTemplate.opsForZSet(); - } - -} diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/ReloadConfig.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/ReloadConfig.java deleted file mode 100644 index 1c31dcec..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/ReloadConfig.java +++ /dev/null @@ -1,38 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/RepeatSubmitConfig.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/RepeatSubmitConfig.java deleted file mode 100644 index fcfdd5ee..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/RepeatSubmitConfig.java +++ /dev/null @@ -1,40 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/RestTemplateConfig.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/RestTemplateConfig.java deleted file mode 100644 index d14004c3..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/RestTemplateConfig.java +++ /dev/null @@ -1,130 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/ScheduleConfig.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/ScheduleConfig.java deleted file mode 100644 index a156a41b..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/ScheduleConfig.java +++ /dev/null @@ -1,47 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/SwaggerConfig.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/SwaggerConfig.java deleted file mode 100644 index 901b9246..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/SwaggerConfig.java +++ /dev/null @@ -1,206 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/SystemEnvironmentConfig.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/SystemEnvironmentConfig.java deleted file mode 100644 index 1af9577a..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/SystemEnvironmentConfig.java +++ /dev/null @@ -1,49 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/UrlConfig.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/UrlConfig.java deleted file mode 100644 index 6e8ae116..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/config/UrlConfig.java +++ /dev/null @@ -1,150 +0,0 @@ -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("/druid/**"); - ignoreUrlList.add("/*/api-docs"); - return ignoreUrlList; - } - -} \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/CacheKeyConst.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/CacheKeyConst.java deleted file mode 100644 index ef91a805..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/CacheKeyConst.java +++ /dev/null @@ -1,14 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/RedisKeyConst.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/RedisKeyConst.java deleted file mode 100644 index 9abb7afb..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/RedisKeyConst.java +++ /dev/null @@ -1,31 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/ReloadConst.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/ReloadConst.java deleted file mode 100644 index 635dc382..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/ReloadConst.java +++ /dev/null @@ -1,18 +0,0 @@ -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 = "system_config"; - - public static final String CACHE_SERVICE = "cache_service"; - -} diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/SwaggerTagConst.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/SwaggerTagConst.java deleted file mode 100644 index ebc7bdb4..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/SwaggerTagConst.java +++ /dev/null @@ -1,49 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/UrlPrefixConst.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/UrlPrefixConst.java deleted file mode 100644 index 12c28934..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/constant/UrlPrefixConst.java +++ /dev/null @@ -1,18 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/handler/GlobalExceptionHandler.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/handler/GlobalExceptionHandler.java deleted file mode 100644 index 66da1df0..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/handler/GlobalExceptionHandler.java +++ /dev/null @@ -1,126 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/listener/SmartApplicationListener.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/listener/SmartApplicationListener.java deleted file mode 100644 index 21cfb938..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/listener/SmartApplicationListener.java +++ /dev/null @@ -1,54 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/cache/CacheService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/cache/CacheService.java deleted file mode 100644 index 10e40f75..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/cache/CacheService.java +++ /dev/null @@ -1,67 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/CaptchaController.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/CaptchaController.java deleted file mode 100644 index 47916db0..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/CaptchaController.java +++ /dev/null @@ -1,36 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/CaptchaService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/CaptchaService.java deleted file mode 100644 index 36042c67..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/CaptchaService.java +++ /dev/null @@ -1,115 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaColor.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaColor.java deleted file mode 100644 index 4dd96c13..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaColor.java +++ /dev/null @@ -1,38 +0,0 @@ -package net.lab1024.sa.common.module.support.captcha.config; - -import com.google.common.collect.Lists; - -import java.awt.*; -import java.util.List; -import java.util.Random; - -/** - * 验证码颜色 - * - * @Author 1024创新实验室-主任: 卓大 - * @Date 2021-09-02 20:21:10 - * @Wechat zhuoda1024 - * @Email lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ) - */ -public class CaptchaColor { - - public static Color getColor() { - - List colors = Lists.newArrayList(); - colors.add(new Color(0, 135, 255)); - colors.add(new Color(51, 153, 51)); - colors.add(new Color(255, 102, 102)); - colors.add(new Color(255, 153, 0)); - colors.add(new Color(153, 102, 0)); - colors.add(new Color(153, 102, 153)); - colors.add(new Color(51, 153, 153)); - colors.add(new Color(102, 102, 255)); - colors.add(new Color(0, 102, 204)); - colors.add(new Color(204, 51, 51)); - colors.add(new Color(128, 153, 65)); - Random random = new Random(); - int colorIndex = random.nextInt(10); - return colors.get(colorIndex); - } -} diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaConfig.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaConfig.java deleted file mode 100644 index 6a315072..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaConfig.java +++ /dev/null @@ -1,46 +0,0 @@ -package net.lab1024.sa.common.module.support.captcha.config; - -import com.google.code.kaptcha.impl.DefaultKaptcha; -import com.google.code.kaptcha.util.Config; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.Properties; - -/** - * 验证码配置 - * - * @Author 1024创新实验室-主任: 卓大 - * @Date 2021-09-02 20:21:10 - * @Wechat zhuoda1024 - * @Email lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ) - */ -@Configuration -public class CaptchaConfig { - - @Bean - 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", "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"); - - properties.setProperty("kaptcha.background.clear.from", "white"); - properties.setProperty("kaptcha.background.clear.to", "white"); - - properties.setProperty("kaptcha.word.impl", CaptchaWordRenderer.class.getName()); - properties.setProperty("kaptcha.noise.impl", CaptchaNoise.class.getName()); - - Config config = new Config(properties); - defaultKaptcha.setConfig(config); - return defaultKaptcha; - } - -} diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaNoise.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaNoise.java deleted file mode 100644 index 36f773d5..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaNoise.java +++ /dev/null @@ -1,44 +0,0 @@ -package net.lab1024.sa.common.module.support.captcha.config; - -import com.google.code.kaptcha.NoiseProducer; -import com.google.code.kaptcha.util.Configurable; - -import java.awt.*; -import java.awt.image.BufferedImage; -import java.util.Random; - -/** - * 验证码加噪处理 - * - * @Author 1024创新实验室-主任: 卓大 - * @Date 2021-09-02 20:21:10 - * @Wechat zhuoda1024 - * @Email lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ) - */ -public class CaptchaNoise extends Configurable implements NoiseProducer { - - public CaptchaNoise() { - } - - @Override - public void makeNoise(BufferedImage image, float factorOne, float factorTwo, float factorThree, float factorFour) { - - int width = image.getWidth(); - int height = image.getHeight(); - 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) { - noiseLineNum = 1; - } - 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)); - } - - graph.dispose(); - } -} diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaWordRenderer.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaWordRenderer.java deleted file mode 100644 index 23b2278e..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/config/CaptchaWordRenderer.java +++ /dev/null @@ -1,74 +0,0 @@ -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.*; -import java.awt.font.FontRenderContext; -import java.awt.font.GlyphVector; -import java.awt.image.BufferedImage; -import java.util.Random; - -/** - * 验证码字体生成 - * - * @Author 1024创新实验室-主任: 卓大 - * @Date 2021-09-02 20:21:10 - * @Wechat zhuoda1024 - * @Email lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ) - */ -public class CaptchaWordRenderer extends Configurable implements WordRenderer { - - public CaptchaWordRenderer() { - } - - @Override - public BufferedImage renderWord(String word, int width, int height) { - int fontSize = this.getConfig().getTextProducerFontSize(); - Font[] fonts = this.getConfig().getTextProducerFonts(fontSize); - int charSpace = this.getConfig().getTextProducerCharSpace(); - BufferedImage image = new BufferedImage(width, height, 2); - - Graphics2D g2D = image.createGraphics(); - g2D.setColor(Color.WHITE); - RenderingHints hints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - hints.add(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY)); - g2D.setRenderingHints(hints); - g2D.setStroke(new BasicStroke(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL)); - - FontRenderContext frc = g2D.getFontRenderContext(); - Random random = new Random(); - int startPosY = (height - fontSize) / 5 + fontSize; - char[] wordChars = word.toCharArray(); - Font[] chosenFonts = new Font[wordChars.length]; - int[] charWidths = new int[wordChars.length]; - int widthNeeded = 0; - - int 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(); - if (startPosX > 0) { - widthNeeded += 2; - } - - widthNeeded += charWidths[startPosX]; - } - - startPosX = (width - widthNeeded) / 2; - - 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); - startPosX = startPosX + charWidths[i] + charSpace; - } - - return image; - } - -} diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/domain/CaptchaForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/domain/CaptchaForm.java deleted file mode 100644 index 5d2d21c7..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/domain/CaptchaForm.java +++ /dev/null @@ -1,28 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/domain/CaptchaVO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/domain/CaptchaVO.java deleted file mode 100644 index cee66da6..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/captcha/domain/CaptchaVO.java +++ /dev/null @@ -1,29 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/constant/ChangeLogTypeEnum.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/constant/ChangeLogTypeEnum.java deleted file mode 100644 index e57ad480..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/constant/ChangeLogTypeEnum.java +++ /dev/null @@ -1,28 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/controller/ChangeLogController.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/controller/ChangeLogController.java deleted file mode 100644 index 775f3bc4..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/controller/ChangeLogController.java +++ /dev/null @@ -1,38 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/dao/ChangeLogDao.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/dao/ChangeLogDao.java deleted file mode 100644 index 157eeccc..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/dao/ChangeLogDao.java +++ /dev/null @@ -1,44 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/entity/ChangeLogEntity.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/entity/ChangeLogEntity.java deleted file mode 100644 index 5773f412..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/entity/ChangeLogEntity.java +++ /dev/null @@ -1,68 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/form/ChangeLogAddForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/form/ChangeLogAddForm.java deleted file mode 100644 index ad552338..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/form/ChangeLogAddForm.java +++ /dev/null @@ -1,46 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/form/ChangeLogQueryForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/form/ChangeLogQueryForm.java deleted file mode 100644 index 393c4c69..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/form/ChangeLogQueryForm.java +++ /dev/null @@ -1,42 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/form/ChangeLogUpdateForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/form/ChangeLogUpdateForm.java deleted file mode 100644 index 1a3c4363..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/form/ChangeLogUpdateForm.java +++ /dev/null @@ -1,50 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/vo/ChangeLogVO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/vo/ChangeLogVO.java deleted file mode 100644 index cf147c7c..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/domain/vo/ChangeLogVO.java +++ /dev/null @@ -1,49 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/manager/ChangeLogManager.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/manager/ChangeLogManager.java deleted file mode 100644 index ee90a6b2..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/manager/ChangeLogManager.java +++ /dev/null @@ -1,20 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/service/ChangeLogService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/service/ChangeLogService.java deleted file mode 100644 index a8d95e2f..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/changelog/service/ChangeLogService.java +++ /dev/null @@ -1,103 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeDeleteEnum.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeDeleteEnum.java deleted file mode 100644 index c5308601..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeDeleteEnum.java +++ /dev/null @@ -1,38 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeFrontComponentEnum.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeFrontComponentEnum.java deleted file mode 100644 index ee94ab74..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeFrontComponentEnum.java +++ /dev/null @@ -1,52 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeGeneratorConstant.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeGeneratorConstant.java deleted file mode 100644 index dccdf337..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeGeneratorConstant.java +++ /dev/null @@ -1,30 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeGeneratorPageTypeEnum.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeGeneratorPageTypeEnum.java deleted file mode 100644 index 4a33e00a..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeGeneratorPageTypeEnum.java +++ /dev/null @@ -1,38 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeQueryFieldQueryTypeEnum.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeQueryFieldQueryTypeEnum.java deleted file mode 100644 index e68d811d..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/constant/CodeQueryFieldQueryTypeEnum.java +++ /dev/null @@ -1,43 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/controller/CodeGeneratorController.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/controller/CodeGeneratorController.java deleted file mode 100644 index 93cf4551..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/controller/CodeGeneratorController.java +++ /dev/null @@ -1,106 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/dao/CodeGeneratorConfigDao.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/dao/CodeGeneratorConfigDao.java deleted file mode 100644 index cc27319e..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/dao/CodeGeneratorConfigDao.java +++ /dev/null @@ -1,20 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/dao/CodeGeneratorDao.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/dao/CodeGeneratorDao.java deleted file mode 100644 index f1407d3a..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/dao/CodeGeneratorDao.java +++ /dev/null @@ -1,45 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/entity/CodeGeneratorConfigEntity.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/entity/CodeGeneratorConfigEntity.java deleted file mode 100644 index c05bebd9..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/entity/CodeGeneratorConfigEntity.java +++ /dev/null @@ -1,74 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/form/CodeGeneratorConfigForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/form/CodeGeneratorConfigForm.java deleted file mode 100644 index 4a545f2d..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/form/CodeGeneratorConfigForm.java +++ /dev/null @@ -1,64 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/form/CodeGeneratorPreviewForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/form/CodeGeneratorPreviewForm.java deleted file mode 100644 index 37d65468..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/form/CodeGeneratorPreviewForm.java +++ /dev/null @@ -1,28 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/form/TableQueryForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/form/TableQueryForm.java deleted file mode 100644 index 3ffd4359..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/form/TableQueryForm.java +++ /dev/null @@ -1,23 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeBasic.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeBasic.java deleted file mode 100644 index 35f96fd0..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeBasic.java +++ /dev/null @@ -1,55 +0,0 @@ -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 = "1.基础命名 基础命名 不能为空") - private String moduleName; - - @ApiModelProperty("java包名") - @NotBlank(message = "1.基础命名 java包名 不能为空") - private String javaPackageName; - - @ApiModelProperty("注释") - @NotBlank(message = "1.基础命名 注释 不能为空") - private String description; - - @ApiModelProperty("前端作者") - @NotBlank(message = "1.基础命名 前端作者 不能为空") - private String frontAuthor; - - @ApiModelProperty("前端时间") - @NotNull(message = "1.基础命名 前端时间 不能为空") - private LocalDateTime frontDate; - - @ApiModelProperty("后端作者") - @NotBlank(message = "1.基础命名 后端作者 不能为空") - private String backendAuthor; - - @ApiModelProperty("后端时间") - @NotNull(message = "1.基础命名 后端时间 不能为空") - private LocalDateTime backendDate; - - @ApiModelProperty("版权信息") - @NotNull(message = "1.基础命名 版权信息 不能为空") - private String copyright; - -} diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeDelete.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeDelete.java deleted file mode 100644 index d334abfa..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeDelete.java +++ /dev/null @@ -1,40 +0,0 @@ -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 = "4.删除 是否支持删除 不能为空") - private Boolean isSupportDelete; - - @ApiModelProperty("是否为物理删除") - @NotNull(message = "4.删除 是否为物理删除 不能为空") - private Boolean isPhysicallyDeleted; - - @ApiModelProperty("删除类型") - @NotBlank(message = "4.删除 删除类型 不能为空") - @ApiModelPropertyEnum(CodeDeleteEnum.class) - @CheckEnum(value = CodeDeleteEnum.class, message = "删除 删除类型 枚举值错误") - private String deleteEnum; - - -} diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeField.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeField.java deleted file mode 100644 index 00cce05e..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeField.java +++ /dev/null @@ -1,59 +0,0 @@ -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 = " 2.字段列表 列名 不能为空") - private String columnName; - - @ApiModelProperty("列备注") - private String columnComment; - - @ApiModelProperty("字段名词") - @NotBlank(message = "2.字段列表 字段名词 不能为空") - private String label; - - @ApiModelProperty("字段命名") - @NotBlank(message = "2.字段列表 字段命名 不能为空") - private String fieldName; - - @ApiModelProperty("java类型") - @NotBlank(message = "2.字段列表 java类型 不能为空") - private String javaType; - - @ApiModelProperty("js类型") - @NotBlank(message = "2.字段列表 js类型 不能为空") - private String jsType; - - @ApiModelProperty("字典key") - private String dict; - - @ApiModelProperty("枚举名称") - private String enumName; - - @ApiModelProperty("主键") - @NotNull(message = "2.字段列表 主键 不能为空") - private Boolean primaryKeyFlag; - - @ApiModelProperty("自增") - @NotNull(message = "2.字段列表 自增 不能为空") - private Boolean autoIncreaseFlag; - -} diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeInsertAndUpdate.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeInsertAndUpdate.java deleted file mode 100644 index 54df13b5..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeInsertAndUpdate.java +++ /dev/null @@ -1,42 +0,0 @@ -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 = "3.增加、修改 是否支持增加、修改 不能为空") - private Boolean isSupportInsertAndUpdate; - - @ApiModelPropertyEnum(CodeGeneratorPageTypeEnum.class) - @CheckEnum(value = CodeGeneratorPageTypeEnum.class, message = "3.增加、修改 增加、修改 页面类型 枚举值错误") - private String pageType; - - @ApiModelProperty("宽度") - private String width; - - @NotNull(message = "3.增加、修改 每行字段数量 不能为空") - @ApiModelProperty("每行字段数量") - private Integer countPerLine; - - @ApiModelProperty("字段列表") - private List fieldList; - -} diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeInsertAndUpdateField.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeInsertAndUpdateField.java deleted file mode 100644 index 43c062ca..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeInsertAndUpdateField.java +++ /dev/null @@ -1,46 +0,0 @@ -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 = "3.增加、修改 列名 不能为空") - @ApiModelProperty("列名") - private String columnName; - - @NotNull(message = "3.增加、修改 必须 不能为空") - @ApiModelProperty("必须") - private Boolean requiredFlag; - - @NotNull(message = "3.增加、修改 插入标识 不能为空") - @ApiModelProperty("插入标识") - private Boolean insertFlag; - - @NotNull(message = "3.增加、修改 更新标识 不能为空") - @ApiModelProperty("更新标识") - private Boolean updateFlag; - - @ApiModelPropertyEnum(value = CodeGeneratorPageTypeEnum.class) - @CheckEnum(value = CodeFrontComponentEnum.class, message = "3.增加、修改 增加、修改 组件类型 枚举值错误", required = true) - private String frontComponent; - -} diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeQueryField.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeQueryField.java deleted file mode 100644 index 614b7fc7..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeQueryField.java +++ /dev/null @@ -1,47 +0,0 @@ -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 = "5、查询条件 条件名称 不能为空") - @ApiModelProperty("条件名称") - private String label; - - @NotBlank(message = "5、查询条件 字段名 不能为空") - @ApiModelProperty("字段名") - private String fieldName; - - @ApiModelPropertyEnum(CodeQueryFieldQueryTypeEnum.class) - @CheckEnum(value = CodeQueryFieldQueryTypeEnum.class, message = "5、查询条件 查询条件 查询类型 枚举值错误") - private String queryTypeEnum; - - @NotEmpty(message = "5、查询条件 列 不能为空") - @ApiModelProperty("列") - private List columnNameList; - - @NotBlank(message = "5、查询条件 宽度 不能为空") - @ApiModelProperty("宽度") - private String width; - - -} diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeTableField.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeTableField.java deleted file mode 100644 index ac126954..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/model/CodeTableField.java +++ /dev/null @@ -1,46 +0,0 @@ -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 = "6、列表 列名 不能为空") - @ApiModelProperty("列名") - private String columnName; - - @NotBlank(message = "6、列表 字段名词 不能为空") - @ApiModelProperty("字段名词") - private String label; - - @NotBlank(message = "6、列表 字段命名 不能为空") - @ApiModelProperty("字段命名") - private String fieldName; - - @NotNull(message = "6、列表 列表显示 不能为空") - @ApiModelProperty("列表显示") - private Boolean showFlag; - - @ApiModelProperty("宽度") - private Integer width; - - @NotNull(message = "6、列表 自动省略标识 不能为空") - @ApiModelProperty("自动省略标识") - private Boolean ellipsisFlag; - - -} diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/vo/TableColumnVO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/vo/TableColumnVO.java deleted file mode 100644 index 251bfca0..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/vo/TableColumnVO.java +++ /dev/null @@ -1,44 +0,0 @@ - -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/vo/TableConfigVO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/vo/TableConfigVO.java deleted file mode 100644 index 33df9523..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/vo/TableConfigVO.java +++ /dev/null @@ -1,40 +0,0 @@ - -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/vo/TableVO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/vo/TableVO.java deleted file mode 100644 index 286a2a33..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/domain/vo/TableVO.java +++ /dev/null @@ -1,37 +0,0 @@ - -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/CodeGeneratorService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/CodeGeneratorService.java deleted file mode 100644 index f7b9aae5..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/CodeGeneratorService.java +++ /dev/null @@ -1,223 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/CodeGeneratorTemplateService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/CodeGeneratorTemplateService.java deleted file mode 100644 index d9808e2f..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/CodeGeneratorTemplateService.java +++ /dev/null @@ -1,238 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/CodeGenerateBaseVariableService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/CodeGenerateBaseVariableService.java deleted file mode 100644 index d412d1fc..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/CodeGenerateBaseVariableService.java +++ /dev/null @@ -1,162 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/ControllerVariableService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/ControllerVariableService.java deleted file mode 100644 index 60543b3a..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/ControllerVariableService.java +++ /dev/null @@ -1,78 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/DaoVariableService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/DaoVariableService.java deleted file mode 100644 index caf4963f..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/DaoVariableService.java +++ /dev/null @@ -1,59 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/ManagerVariableService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/ManagerVariableService.java deleted file mode 100644 index f4e43e0b..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/ManagerVariableService.java +++ /dev/null @@ -1,55 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/ServiceVariableService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/ServiceVariableService.java deleted file mode 100644 index a87473cf..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/ServiceVariableService.java +++ /dev/null @@ -1,62 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/AddFormVariableService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/AddFormVariableService.java deleted file mode 100644 index ee9822ab..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/AddFormVariableService.java +++ /dev/null @@ -1,131 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/DeleteFormVariableService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/DeleteFormVariableService.java deleted file mode 100644 index 52525f58..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/DeleteFormVariableService.java +++ /dev/null @@ -1,130 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/EntityVariableService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/EntityVariableService.java deleted file mode 100644 index f1943853..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/EntityVariableService.java +++ /dev/null @@ -1,73 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/MapperVariableService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/MapperVariableService.java deleted file mode 100644 index 7a6bbd26..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/MapperVariableService.java +++ /dev/null @@ -1,93 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/QueryFormVariableService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/QueryFormVariableService.java deleted file mode 100644 index 18bf844e..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/QueryFormVariableService.java +++ /dev/null @@ -1,128 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/UpdateFormVariableService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/UpdateFormVariableService.java deleted file mode 100644 index b0323ad5..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/UpdateFormVariableService.java +++ /dev/null @@ -1,145 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/VOVariableService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/VOVariableService.java deleted file mode 100644 index 821629e1..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/backend/domain/VOVariableService.java +++ /dev/null @@ -1,115 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/ApiVariableService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/ApiVariableService.java deleted file mode 100644 index 22af04c9..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/ApiVariableService.java +++ /dev/null @@ -1,29 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/ConstVariableService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/ConstVariableService.java deleted file mode 100644 index 0ce4b954..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/ConstVariableService.java +++ /dev/null @@ -1,45 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/FormVariableService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/FormVariableService.java deleted file mode 100644 index 544d74fa..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/FormVariableService.java +++ /dev/null @@ -1,82 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/ListVariableService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/ListVariableService.java deleted file mode 100644 index df051618..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/service/variable/front/ListVariableService.java +++ /dev/null @@ -1,57 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/util/CodeGeneratorTool.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/util/CodeGeneratorTool.java deleted file mode 100644 index b4843e66..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/codegenerator/util/CodeGeneratorTool.java +++ /dev/null @@ -1,59 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigController.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigController.java deleted file mode 100644 index 5eee1999..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigController.java +++ /dev/null @@ -1,36 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigDao.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigDao.java deleted file mode 100644 index e2e9cde8..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigDao.java +++ /dev/null @@ -1,41 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigKeyEnum.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigKeyEnum.java deleted file mode 100644 index eb3b0a22..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigKeyEnum.java +++ /dev/null @@ -1,35 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigService.java deleted file mode 100644 index 04285106..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/ConfigService.java +++ /dev/null @@ -1,205 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigAddForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigAddForm.java deleted file mode 100644 index e7b480cf..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigAddForm.java +++ /dev/null @@ -1,39 +0,0 @@ -package net.lab1024.sa.common.module.support.config.domain; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import org.hibernate.validator.constraints.Length; - -import javax.validation.constraints.NotBlank; - -/** - * 添加配置表单 - * - * @Author 1024创新实验室-主任: 卓大 - * @Date 2022-03-14 20:46:27 - * @Wechat zhuoda1024 - * @Email lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ) - */ -@Data -public class ConfigAddForm { - - @ApiModelProperty("参数key") - @NotBlank(message = "参数key不能为空") - @Length(max = 255, message = "参数key最多255个字符") - private String configKey; - - @ApiModelProperty("参数的值") - @NotBlank(message = "参数的值不能为空") - @Length(max = 60000, message = "参数的值最多60000个字符") - private String configValue; - - @ApiModelProperty("参数名称") - @NotBlank(message = "参数名称不能为空") - @Length(max = 255, message = "参数名称最多255个字符") - private String configName; - - @ApiModelProperty("备注") - @Length(max = 255, message = "备注最多255个字符") - private String remark; -} diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigEntity.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigEntity.java deleted file mode 100644 index 13a3abca..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigEntity.java +++ /dev/null @@ -1,49 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigQueryForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigQueryForm.java deleted file mode 100644 index 8e56af1b..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigQueryForm.java +++ /dev/null @@ -1,23 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigUpdateForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigUpdateForm.java deleted file mode 100644 index 816ced02..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigUpdateForm.java +++ /dev/null @@ -1,23 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigVO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigVO.java deleted file mode 100644 index 17230d81..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/config/domain/ConfigVO.java +++ /dev/null @@ -1,39 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldBigDecimal.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldBigDecimal.java deleted file mode 100644 index adb292c7..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldBigDecimal.java +++ /dev/null @@ -1,21 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldDict.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldDict.java deleted file mode 100644 index 898a3936..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldDict.java +++ /dev/null @@ -1,22 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldEnum.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldEnum.java deleted file mode 100644 index d9841c75..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldEnum.java +++ /dev/null @@ -1,25 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldLabel.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldLabel.java deleted file mode 100644 index 089325b4..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldLabel.java +++ /dev/null @@ -1,26 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldSql.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldSql.java deleted file mode 100644 index 4f76636a..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/annoation/DataTracerFieldSql.java +++ /dev/null @@ -1,40 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/constant/DataTracerConst.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/constant/DataTracerConst.java deleted file mode 100644 index 729a241f..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/constant/DataTracerConst.java +++ /dev/null @@ -1,27 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/constant/DataTracerTypeEnum.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/constant/DataTracerTypeEnum.java deleted file mode 100644 index 0bed6700..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/constant/DataTracerTypeEnum.java +++ /dev/null @@ -1,32 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/controller/DataTracerController.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/controller/DataTracerController.java deleted file mode 100644 index 2fabdd6a..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/controller/DataTracerController.java +++ /dev/null @@ -1,40 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/dao/DataTracerDao.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/dao/DataTracerDao.java deleted file mode 100644 index 989b6382..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/dao/DataTracerDao.java +++ /dev/null @@ -1,42 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/bo/DataTracerContentBO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/bo/DataTracerContentBO.java deleted file mode 100644 index 5333642f..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/bo/DataTracerContentBO.java +++ /dev/null @@ -1,39 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/entity/DataTracerEntity.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/entity/DataTracerEntity.java deleted file mode 100644 index 5732a8f2..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/entity/DataTracerEntity.java +++ /dev/null @@ -1,90 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/form/DataTracerForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/form/DataTracerForm.java deleted file mode 100644 index 607d1e66..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/form/DataTracerForm.java +++ /dev/null @@ -1,54 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/form/DataTracerQueryForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/form/DataTracerQueryForm.java deleted file mode 100644 index 4eccbe5b..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/form/DataTracerQueryForm.java +++ /dev/null @@ -1,32 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/vo/DataTracerVO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/vo/DataTracerVO.java deleted file mode 100644 index e55beb98..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/domain/vo/DataTracerVO.java +++ /dev/null @@ -1,62 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/manager/DataTracerManger.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/manager/DataTracerManger.java deleted file mode 100644 index 8586cdfb..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/manager/DataTracerManger.java +++ /dev/null @@ -1,19 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/service/DataTracerChangeContentService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/service/DataTracerChangeContentService.java deleted file mode 100644 index 24af9f40..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/service/DataTracerChangeContentService.java +++ /dev/null @@ -1,486 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/service/DataTracerService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/service/DataTracerService.java deleted file mode 100644 index 2968ed5a..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/datatracer/service/DataTracerService.java +++ /dev/null @@ -1,224 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/controller/DictController.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/controller/DictController.java deleted file mode 100644 index ae71b8ec..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/controller/DictController.java +++ /dev/null @@ -1,63 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/dao/DictKeyDao.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/dao/DictKeyDao.java deleted file mode 100644 index f4d48a55..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/dao/DictKeyDao.java +++ /dev/null @@ -1,58 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/dao/DictValueDao.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/dao/DictValueDao.java deleted file mode 100644 index 4cefc6bd..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/dao/DictValueDao.java +++ /dev/null @@ -1,69 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/entity/DictKeyEntity.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/entity/DictKeyEntity.java deleted file mode 100644 index 1696440a..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/entity/DictKeyEntity.java +++ /dev/null @@ -1,54 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/entity/DictValueEntity.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/entity/DictValueEntity.java deleted file mode 100644 index ff46e340..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/entity/DictValueEntity.java +++ /dev/null @@ -1,58 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictKeyAddForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictKeyAddForm.java deleted file mode 100644 index d6bc67b6..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictKeyAddForm.java +++ /dev/null @@ -1,34 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictKeyQueryForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictKeyQueryForm.java deleted file mode 100644 index 8cd26dd4..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictKeyQueryForm.java +++ /dev/null @@ -1,24 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictKeyUpdateForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictKeyUpdateForm.java deleted file mode 100644 index 87bfb204..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictKeyUpdateForm.java +++ /dev/null @@ -1,23 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictValueAddForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictValueAddForm.java deleted file mode 100644 index 7f5b0931..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictValueAddForm.java +++ /dev/null @@ -1,44 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictValueQueryForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictValueQueryForm.java deleted file mode 100644 index 40540ea2..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictValueQueryForm.java +++ /dev/null @@ -1,30 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictValueUpdateForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictValueUpdateForm.java deleted file mode 100644 index 273100a4..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/form/DictValueUpdateForm.java +++ /dev/null @@ -1,23 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/vo/DictKeyVO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/vo/DictKeyVO.java deleted file mode 100644 index f9864955..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/vo/DictKeyVO.java +++ /dev/null @@ -1,29 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/vo/DictValueVO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/vo/DictValueVO.java deleted file mode 100644 index ec7535cf..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/domain/vo/DictValueVO.java +++ /dev/null @@ -1,35 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/service/DictCacheService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/service/DictCacheService.java deleted file mode 100644 index 63c9a66f..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/service/DictCacheService.java +++ /dev/null @@ -1,133 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/service/DictService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/service/DictService.java deleted file mode 100644 index ad624157..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/dict/service/DictService.java +++ /dev/null @@ -1,196 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/controller/FeedbackController.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/controller/FeedbackController.java deleted file mode 100644 index b9a1cd09..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/controller/FeedbackController.java +++ /dev/null @@ -1,53 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/dao/FeedbackDao.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/dao/FeedbackDao.java deleted file mode 100644 index e03e2e14..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/dao/FeedbackDao.java +++ /dev/null @@ -1,31 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackAddForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackAddForm.java deleted file mode 100644 index dd32ea57..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackAddForm.java +++ /dev/null @@ -1,33 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackEntity.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackEntity.java deleted file mode 100644 index 1a5a9899..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackEntity.java +++ /dev/null @@ -1,62 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackQueryForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackQueryForm.java deleted file mode 100644 index 954a2e9f..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackQueryForm.java +++ /dev/null @@ -1,31 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackVO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackVO.java deleted file mode 100644 index 83d19674..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/domain/FeedbackVO.java +++ /dev/null @@ -1,51 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/service/FeedbackService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/service/FeedbackService.java deleted file mode 100644 index a534cc7e..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/feedback/service/FeedbackService.java +++ /dev/null @@ -1,62 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/constant/FileFolderTypeEnum.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/constant/FileFolderTypeEnum.java deleted file mode 100644 index 5428c418..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/constant/FileFolderTypeEnum.java +++ /dev/null @@ -1,49 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/controller/FileController.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/controller/FileController.java deleted file mode 100644 index 04dc3f10..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/controller/FileController.java +++ /dev/null @@ -1,72 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/dao/FileDao.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/dao/FileDao.java deleted file mode 100644 index f49b4177..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/dao/FileDao.java +++ /dev/null @@ -1,44 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/entity/FileEntity.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/entity/FileEntity.java deleted file mode 100644 index 194a4ecb..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/entity/FileEntity.java +++ /dev/null @@ -1,73 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/form/FileQueryForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/form/FileQueryForm.java deleted file mode 100644 index 29bc58ce..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/form/FileQueryForm.java +++ /dev/null @@ -1,47 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/form/FileUrlUploadForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/form/FileUrlUploadForm.java deleted file mode 100644 index a3468851..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/form/FileUrlUploadForm.java +++ /dev/null @@ -1,31 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileDownloadVO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileDownloadVO.java deleted file mode 100644 index 42e76ddf..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileDownloadVO.java +++ /dev/null @@ -1,28 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileMetadataVO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileMetadataVO.java deleted file mode 100644 index ad268891..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileMetadataVO.java +++ /dev/null @@ -1,31 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileUploadVO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileUploadVO.java deleted file mode 100644 index 345c337f..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileUploadVO.java +++ /dev/null @@ -1,35 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileVO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileVO.java deleted file mode 100644 index 9ab82174..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/domain/vo/FileVO.java +++ /dev/null @@ -1,56 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/FileService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/FileService.java deleted file mode 100644 index 34449f32..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/FileService.java +++ /dev/null @@ -1,272 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/FileStorageCloudServiceImpl.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/FileStorageCloudServiceImpl.java deleted file mode 100644 index 5b414c5e..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/FileStorageCloudServiceImpl.java +++ /dev/null @@ -1,215 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/FileStorageLocalServiceImpl.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/FileStorageLocalServiceImpl.java deleted file mode 100644 index 3842aef6..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/FileStorageLocalServiceImpl.java +++ /dev/null @@ -1,149 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/IFileStorageService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/IFileStorageService.java deleted file mode 100644 index 7fd4690d..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/file/service/IFileStorageService.java +++ /dev/null @@ -1,209 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/HeartBeatRecordDao.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/HeartBeatRecordDao.java deleted file mode 100644 index 9859bb83..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/HeartBeatRecordDao.java +++ /dev/null @@ -1,51 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/HeartBeatRecordHandler.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/HeartBeatRecordHandler.java deleted file mode 100644 index c666ecef..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/HeartBeatRecordHandler.java +++ /dev/null @@ -1,42 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/HeartBeatService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/HeartBeatService.java deleted file mode 100644 index 1964b684..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/HeartBeatService.java +++ /dev/null @@ -1,38 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/HeartBeatManager.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/HeartBeatManager.java deleted file mode 100644 index 72973dda..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/HeartBeatManager.java +++ /dev/null @@ -1,59 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/HeartBeatRecord.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/HeartBeatRecord.java deleted file mode 100644 index 42698a13..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/HeartBeatRecord.java +++ /dev/null @@ -1,41 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/HeartBeatRunnable.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/HeartBeatRunnable.java deleted file mode 100644 index 475780fe..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/HeartBeatRunnable.java +++ /dev/null @@ -1,71 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/IHeartBeatRecordHandler.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/IHeartBeatRecordHandler.java deleted file mode 100644 index ac5fa589..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/core/IHeartBeatRecordHandler.java +++ /dev/null @@ -1,20 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/domain/HeartBeatRecordEntity.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/domain/HeartBeatRecordEntity.java deleted file mode 100644 index 052f3d89..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/domain/HeartBeatRecordEntity.java +++ /dev/null @@ -1,53 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/domain/HeartBeatRecordQueryForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/domain/HeartBeatRecordQueryForm.java deleted file mode 100644 index c9408bbf..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/domain/HeartBeatRecordQueryForm.java +++ /dev/null @@ -1,30 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/domain/HeartBeatRecordVO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/domain/HeartBeatRecordVO.java deleted file mode 100644 index 9f94f175..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/heartbeat/domain/HeartBeatRecordVO.java +++ /dev/null @@ -1,38 +0,0 @@ -package net.lab1024.sa.common.module.support.heartbeat.domain; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -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 -public class HeartBeatRecordVO { - - private Integer heartBeatRecordId; - - @ApiModelProperty("项目路径") - private String projectPath; - - @ApiModelProperty("服务器ip") - private String serverIp; - - @ApiModelProperty("进程号") - private Integer processNo; - - @ApiModelProperty("进程开启时间") - private Date processStartTime; - - @ApiModelProperty("心跳当前时间") - private Date heartBeatTime; - - -} diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/controller/HelpDocController.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/controller/HelpDocController.java deleted file mode 100644 index cd3eb398..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/controller/HelpDocController.java +++ /dev/null @@ -1,77 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/dao/HelpDocCatalogDao.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/dao/HelpDocCatalogDao.java deleted file mode 100644 index 68dac20a..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/dao/HelpDocCatalogDao.java +++ /dev/null @@ -1,21 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/dao/HelpDocDao.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/dao/HelpDocDao.java deleted file mode 100644 index cab687c2..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/dao/HelpDocDao.java +++ /dev/null @@ -1,137 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/entity/HelpDocCatalogEntity.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/entity/HelpDocCatalogEntity.java deleted file mode 100644 index 04a2afb6..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/entity/HelpDocCatalogEntity.java +++ /dev/null @@ -1,53 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/entity/HelpDocEntity.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/entity/HelpDocEntity.java deleted file mode 100644 index fe3d033e..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/entity/HelpDocEntity.java +++ /dev/null @@ -1,77 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocAddForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocAddForm.java deleted file mode 100644 index 116cd001..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocAddForm.java +++ /dev/null @@ -1,57 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocCatalogAddForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocCatalogAddForm.java deleted file mode 100644 index 9e449675..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocCatalogAddForm.java +++ /dev/null @@ -1,31 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocCatalogUpdateForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocCatalogUpdateForm.java deleted file mode 100644 index 7e2f1366..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocCatalogUpdateForm.java +++ /dev/null @@ -1,23 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocQueryForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocQueryForm.java deleted file mode 100644 index beac2c10..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocQueryForm.java +++ /dev/null @@ -1,33 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocRelationForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocRelationForm.java deleted file mode 100644 index 374a8753..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocRelationForm.java +++ /dev/null @@ -1,28 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocUpdateForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocUpdateForm.java deleted file mode 100644 index 37f2e1aa..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocUpdateForm.java +++ /dev/null @@ -1,24 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocViewRecordQueryForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocViewRecordQueryForm.java deleted file mode 100644 index fc6bebb9..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/form/HelpDocViewRecordQueryForm.java +++ /dev/null @@ -1,32 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocCatalogVO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocCatalogVO.java deleted file mode 100644 index 423bc3e5..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocCatalogVO.java +++ /dev/null @@ -1,30 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocDetailVO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocDetailVO.java deleted file mode 100644 index eef39d1d..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocDetailVO.java +++ /dev/null @@ -1,65 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocRecordVO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocRecordVO.java deleted file mode 100644 index 3eabf68b..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocRecordVO.java +++ /dev/null @@ -1,49 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocRelationVO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocRelationVO.java deleted file mode 100644 index 753a92e1..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocRelationVO.java +++ /dev/null @@ -1,23 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocVO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocVO.java deleted file mode 100644 index c668caad..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocVO.java +++ /dev/null @@ -1,50 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocViewRecordVO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocViewRecordVO.java deleted file mode 100644 index c03cb736..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/domain/vo/HelpDocViewRecordVO.java +++ /dev/null @@ -1,46 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/manager/HelpDocManager.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/manager/HelpDocManager.java deleted file mode 100644 index 44cd84d7..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/manager/HelpDocManager.java +++ /dev/null @@ -1,60 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/service/HelpDocCatalogService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/service/HelpDocCatalogService.java deleted file mode 100644 index 9a8ec360..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/service/HelpDocCatalogService.java +++ /dev/null @@ -1,115 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/service/HelpDocService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/service/HelpDocService.java deleted file mode 100644 index 9d6ba2d3..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/service/HelpDocService.java +++ /dev/null @@ -1,117 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/service/HelpDocUserService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/service/HelpDocUserService.java deleted file mode 100644 index 16830b72..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/helpdoc/service/HelpDocUserService.java +++ /dev/null @@ -1,85 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/DecryptData.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/DecryptData.java deleted file mode 100644 index d23f329a..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/DecryptData.java +++ /dev/null @@ -1,18 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweAspect.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweAspect.java deleted file mode 100644 index 7a2dbc64..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweAspect.java +++ /dev/null @@ -1,128 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweDecrypt.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweDecrypt.java deleted file mode 100644 index 5900f439..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweDecrypt.java +++ /dev/null @@ -1,20 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweEncrypt.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweEncrypt.java deleted file mode 100644 index e6e93940..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweEncrypt.java +++ /dev/null @@ -1,20 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweUserKey.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweUserKey.java deleted file mode 100644 index ce020667..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/jwe/JweUserKey.java +++ /dev/null @@ -1,32 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/LoginLogDao.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/LoginLogDao.java deleted file mode 100644 index e7fe6183..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/LoginLogDao.java +++ /dev/null @@ -1,46 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/LoginLogResultEnum.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/LoginLogResultEnum.java deleted file mode 100644 index 2ccb7503..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/LoginLogResultEnum.java +++ /dev/null @@ -1,37 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/LoginLogService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/LoginLogService.java deleted file mode 100644 index 0c6fb039..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/LoginLogService.java +++ /dev/null @@ -1,67 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/domain/LoginLogEntity.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/domain/LoginLogEntity.java deleted file mode 100644 index 50c785b4..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/domain/LoginLogEntity.java +++ /dev/null @@ -1,67 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/domain/LoginLogQueryForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/domain/LoginLogQueryForm.java deleted file mode 100644 index 92d69c18..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/domain/LoginLogQueryForm.java +++ /dev/null @@ -1,31 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/domain/LoginLogVO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/domain/LoginLogVO.java deleted file mode 100644 index 753dd49c..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/loginlog/domain/LoginLogVO.java +++ /dev/null @@ -1,48 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/OperateLogDao.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/OperateLogDao.java deleted file mode 100644 index be5af95e..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/OperateLogDao.java +++ /dev/null @@ -1,49 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/OperateLogService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/OperateLogService.java deleted file mode 100644 index d3ac8bf3..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/OperateLogService.java +++ /dev/null @@ -1,57 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/annoation/OperateLog.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/annoation/OperateLog.java deleted file mode 100644 index f8acadfb..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/annoation/OperateLog.java +++ /dev/null @@ -1,19 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/core/OperateLogAspect.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/core/OperateLogAspect.java deleted file mode 100644 index 169a7ce3..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/core/OperateLogAspect.java +++ /dev/null @@ -1,276 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/core/OperateLogConfig.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/core/OperateLogConfig.java deleted file mode 100644 index 7bc65256..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/core/OperateLogConfig.java +++ /dev/null @@ -1,38 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/domain/OperateLogEntity.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/domain/OperateLogEntity.java deleted file mode 100644 index 0a51993e..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/domain/OperateLogEntity.java +++ /dev/null @@ -1,106 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/domain/OperateLogQueryForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/domain/OperateLogQueryForm.java deleted file mode 100644 index 2e92f11b..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/domain/OperateLogQueryForm.java +++ /dev/null @@ -1,33 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/domain/OperateLogVO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/domain/OperateLogVO.java deleted file mode 100644 index b71f083f..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/operatelog/domain/OperateLogVO.java +++ /dev/null @@ -1,72 +0,0 @@ -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 1024创新实验室: 罗伊 - * @Date 2021-12-08 20:48:52 - * @Wechat zhuoda1024 - * @Email lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ) - */ -@Data -public class OperateLogVO { - - @ApiModelProperty("主键") - private Long operateLogId; - - @ApiModelProperty("用户id") - private Long operateUserId; - - @ApiModelPropertyEnum(value = UserTypeEnum.class, desc = "用户类型") - private Integer operateUserType; - - @ApiModelProperty("用户名称") - private String operateUserName; - - @ApiModelProperty("操作模块") - private String module; - - @ApiModelProperty("操作内容") - private String content; - - @ApiModelProperty("请求路径") - private String url; - - @ApiModelProperty("请求方法") - private String method; - - @ApiModelProperty("请求参数") - private String param; - - @ApiModelProperty("客户ip") - private String ip; - - @ApiModelProperty("user-agent") - private String userAgent; - - @ApiModelProperty("请求结果 0失败 1成功") - private Boolean successFlag; - - @ApiModelProperty("失败原因") - private String failReason; - - @ApiModelProperty("更新时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private LocalDateTime updateTime; - - @ApiModelProperty("创建时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private LocalDateTime createTime; - - -} diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/redis/RedisService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/redis/RedisService.java deleted file mode 100644 index f99f29ef..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/redis/RedisService.java +++ /dev/null @@ -1,222 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/ReloadCommand.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/ReloadCommand.java deleted file mode 100644 index ad039f38..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/ReloadCommand.java +++ /dev/null @@ -1,56 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/ReloadService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/ReloadService.java deleted file mode 100644 index 9737f19a..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/ReloadService.java +++ /dev/null @@ -1,68 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/AbstractSmartReloadCommand.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/AbstractSmartReloadCommand.java deleted file mode 100644 index 8479c60f..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/AbstractSmartReloadCommand.java +++ /dev/null @@ -1,96 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/SmartReloadManager.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/SmartReloadManager.java deleted file mode 100644 index a3aad41d..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/SmartReloadManager.java +++ /dev/null @@ -1,97 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/annoation/SmartReload.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/annoation/SmartReload.java deleted file mode 100644 index d22f119f..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/annoation/SmartReload.java +++ /dev/null @@ -1,22 +0,0 @@ -package net.lab1024.sa.common.module.support.reload.core.annoation; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * 定义 SmartReload 注解 - * - * @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) -public @interface SmartReload { - - String value(); -} diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/domain/SmartReloadItem.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/domain/SmartReloadItem.java deleted file mode 100644 index 3820d9d8..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/domain/SmartReloadItem.java +++ /dev/null @@ -1,32 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/domain/SmartReloadObject.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/domain/SmartReloadObject.java deleted file mode 100644 index 8242a07e..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/domain/SmartReloadObject.java +++ /dev/null @@ -1,32 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/domain/SmartReloadResult.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/domain/SmartReloadResult.java deleted file mode 100644 index 58278a78..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/domain/SmartReloadResult.java +++ /dev/null @@ -1,43 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/thread/SmartReloadRunnable.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/thread/SmartReloadRunnable.java deleted file mode 100644 index be88f8b9..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/core/thread/SmartReloadRunnable.java +++ /dev/null @@ -1,120 +0,0 @@ -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 { - if (smartReloadObject == null) { - result.setResult(false); - result.setException("不能从系统中找到对应的tag:" + smartReloadItem.getTag()); - return result; - } - - 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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/dao/ReloadItemDao.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/dao/ReloadItemDao.java deleted file mode 100644 index d063ba5d..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/dao/ReloadItemDao.java +++ /dev/null @@ -1,25 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/dao/ReloadResultDao.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/dao/ReloadResultDao.java deleted file mode 100644 index 298100a7..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/dao/ReloadResultDao.java +++ /dev/null @@ -1,26 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadForm.java deleted file mode 100644 index 45913124..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadForm.java +++ /dev/null @@ -1,31 +0,0 @@ -package net.lab1024.sa.common.module.support.reload.domain; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotBlank; - -/** - * reload (内存热加载、钩子等) - * - * @Author 1024创新实验室-主任: 卓大 - * @Date 2015-03-02 19:11:52 - * @Wechat zhuoda1024 - * @Email lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ) - */ -@Data -public class ReloadForm { - - @ApiModelProperty("标签") - @NotBlank(message = "标签不能为空") - private String tag; - - @ApiModelProperty("状态标识") - @NotBlank(message = "状态标识不能为空") - private String identification; - - @ApiModelProperty("参数") - private String args; - -} diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadItemEntity.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadItemEntity.java deleted file mode 100644 index 54b01131..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadItemEntity.java +++ /dev/null @@ -1,50 +0,0 @@ -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.time.LocalDateTime; - -/** - * t_reload_item 数据表 实体类 - * - * @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") -public class ReloadItemEntity { - - /** - * 加载项标签 - */ - @TableId(type = IdType.INPUT) - private String tag; - - /** - * 参数 - */ - private String args; - - /** - * 运行标识 - */ - private String identification; - - /** - * 更新时间 - */ - private LocalDateTime updateTime; - - /** - * 创建时间 - */ - private LocalDateTime createTime; - - -} diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadItemVO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadItemVO.java deleted file mode 100644 index b21b8e69..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadItemVO.java +++ /dev/null @@ -1,36 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadResultEntity.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadResultEntity.java deleted file mode 100644 index 004156d8..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadResultEntity.java +++ /dev/null @@ -1,53 +0,0 @@ -package net.lab1024.sa.common.module.support.reload.domain; - -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; - -import java.time.LocalDateTime; - -/** - * reload结果
- * t_reload_result 数据表 实体类 - * - * @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") -public class ReloadResultEntity { - - /** - * 加载项标签 - */ - private String tag; - - /** - * 运行标识 - */ - private String identification; - - /** - * 参数 - */ - private String args; - - /** - * 运行结果 - */ - private Boolean result; - - /** - * 异常 - */ - private String exception; - - /** - * 创建时间 - */ - private LocalDateTime createTime; - - -} diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadResultVO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadResultVO.java deleted file mode 100644 index d7d68836..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/reload/domain/ReloadResultVO.java +++ /dev/null @@ -1,34 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/RepeatSubmitAspect.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/RepeatSubmitAspect.java deleted file mode 100644 index 1bf8cae0..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/RepeatSubmitAspect.java +++ /dev/null @@ -1,82 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/annoation/RepeatSubmit.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/annoation/RepeatSubmit.java deleted file mode 100644 index aed05382..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/annoation/RepeatSubmit.java +++ /dev/null @@ -1,33 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/ticket/AbstractRepeatSubmitTicket.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/ticket/AbstractRepeatSubmitTicket.java deleted file mode 100644 index fd6d7758..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/ticket/AbstractRepeatSubmitTicket.java +++ /dev/null @@ -1,56 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/ticket/RepeatSubmitCaffeineTicket.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/ticket/RepeatSubmitCaffeineTicket.java deleted file mode 100644 index be6f7960..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/ticket/RepeatSubmitCaffeineTicket.java +++ /dev/null @@ -1,50 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/ticket/RepeatSubmitRedisTicket.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/ticket/RepeatSubmitRedisTicket.java deleted file mode 100644 index 806b7324..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/repeatsubmit/ticket/RepeatSubmitRedisTicket.java +++ /dev/null @@ -1,48 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/constant/SerialNumberIdEnum.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/constant/SerialNumberIdEnum.java deleted file mode 100644 index 72eb8586..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/constant/SerialNumberIdEnum.java +++ /dev/null @@ -1,42 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/constant/SerialNumberRuleTypeEnum.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/constant/SerialNumberRuleTypeEnum.java deleted file mode 100644 index 5fc08557..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/constant/SerialNumberRuleTypeEnum.java +++ /dev/null @@ -1,44 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/dao/SerialNumberDao.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/dao/SerialNumberDao.java deleted file mode 100644 index 50d32b64..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/dao/SerialNumberDao.java +++ /dev/null @@ -1,41 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/dao/SerialNumberRecordDao.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/dao/SerialNumberRecordDao.java deleted file mode 100644 index 7d66a469..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/dao/SerialNumberRecordDao.java +++ /dev/null @@ -1,55 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberEntity.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberEntity.java deleted file mode 100644 index 79b589f1..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberEntity.java +++ /dev/null @@ -1,79 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberGenerateForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberGenerateForm.java deleted file mode 100644 index 30e0b777..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberGenerateForm.java +++ /dev/null @@ -1,28 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberGenerateResultBO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberGenerateResultBO.java deleted file mode 100644 index f4dfe3ae..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberGenerateResultBO.java +++ /dev/null @@ -1,52 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberInfoBO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberInfoBO.java deleted file mode 100644 index 89fae4e6..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberInfoBO.java +++ /dev/null @@ -1,97 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberLastGenerateBO.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberLastGenerateBO.java deleted file mode 100644 index 5ccf4e75..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberLastGenerateBO.java +++ /dev/null @@ -1,41 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberRecordEntity.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberRecordEntity.java deleted file mode 100644 index a32982e4..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberRecordEntity.java +++ /dev/null @@ -1,57 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberRecordQueryForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberRecordQueryForm.java deleted file mode 100644 index 7fe36829..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/domain/SerialNumberRecordQueryForm.java +++ /dev/null @@ -1,24 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/SerialNumberBaseService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/SerialNumberBaseService.java deleted file mode 100644 index 1a85af11..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/SerialNumberBaseService.java +++ /dev/null @@ -1,252 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/SerialNumberRecordService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/SerialNumberRecordService.java deleted file mode 100644 index 664e24fa..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/SerialNumberRecordService.java +++ /dev/null @@ -1,39 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/SerialNumberService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/SerialNumberService.java deleted file mode 100644 index ce40d7fa..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/SerialNumberService.java +++ /dev/null @@ -1,36 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/impl/SerialNumberInternService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/impl/SerialNumberInternService.java deleted file mode 100644 index db8c04e7..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/impl/SerialNumberInternService.java +++ /dev/null @@ -1,78 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/impl/SerialNumberMysqlService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/impl/SerialNumberMysqlService.java deleted file mode 100644 index 8d2413a7..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/impl/SerialNumberMysqlService.java +++ /dev/null @@ -1,61 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/impl/SerialNumberRedisService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/impl/SerialNumberRedisService.java deleted file mode 100644 index 1c54f0ed..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/serialnumber/service/impl/SerialNumberRedisService.java +++ /dev/null @@ -1,105 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/TableColumnController.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/TableColumnController.java deleted file mode 100644 index 495ceb0c..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/TableColumnController.java +++ /dev/null @@ -1,52 +0,0 @@ -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); - return ResponseDTO.okMsg("亲,因是演示环境,所以请求没有进行处理!如若想深入体验,请下载代码!"); - } - - @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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/TableColumnDao.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/TableColumnDao.java deleted file mode 100644 index 2a7d6cdc..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/TableColumnDao.java +++ /dev/null @@ -1,23 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/TableColumnService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/TableColumnService.java deleted file mode 100644 index 5f388c4a..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/TableColumnService.java +++ /dev/null @@ -1,72 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/domain/TableColumnEntity.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/domain/TableColumnEntity.java deleted file mode 100644 index c177ed16..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/domain/TableColumnEntity.java +++ /dev/null @@ -1,49 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/domain/TableColumnItemForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/domain/TableColumnItemForm.java deleted file mode 100644 index 0a50f8e9..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/domain/TableColumnItemForm.java +++ /dev/null @@ -1,37 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/domain/TableColumnUpdateForm.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/domain/TableColumnUpdateForm.java deleted file mode 100644 index 106bf61b..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/table/domain/TableColumnUpdateForm.java +++ /dev/null @@ -1,27 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/token/JwtConst.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/token/JwtConst.java deleted file mode 100644 index 79084efe..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/token/JwtConst.java +++ /dev/null @@ -1,38 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/token/LoginDeviceEnum.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/token/LoginDeviceEnum.java deleted file mode 100644 index 3fa94198..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/token/LoginDeviceEnum.java +++ /dev/null @@ -1,43 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/token/TokenService.java b/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/token/TokenService.java deleted file mode 100644 index e3af8649..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/java/net/lab1024/sa/common/module/support/token/TokenService.java +++ /dev/null @@ -1,220 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/resources/META-INF/spring.factories b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/META-INF/spring.factories deleted file mode 100644 index 99b8129c..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,2 +0,0 @@ -org.springframework.boot.env.EnvironmentPostProcessor=\ - net.lab1024.sa.common.config.PostProcessorConfig \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/banner.txt b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/banner.txt deleted file mode 100644 index 92bf81a5..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/banner.txt +++ /dev/null @@ -1,19 +0,0 @@ - ${AnsiColor.BRIGHT_GREEN} - - / ____| | | /\ | | (_) -| (___ _ __ ___ __ _ _ __| |_ / \ __| |_ __ ___ _ _ __ - \___ \| '_ ` _ \ / _` | '__| __| / /\ \ / _` | '_ ` _ \| | '_ \ - ____) | | | | | | (_| | | | |_ / ____ \ (_| | | | | | | | | | | -|_____/|_| |_| |_|\__,_|_| \__/_/ \_\__,_|_| |_| |_|_|_| |_| - -保持谦逊 保持学习 ! -热爱代码 热爱生活 ! -永远年轻 永远前行 ! - -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_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/constant/enum.java.vm b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/constant/enum.java.vm deleted file mode 100644 index 6511a80d..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/constant/enum.java.vm +++ /dev/null @@ -1,24 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/controller/Controller.java.vm b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/controller/Controller.java.vm deleted file mode 100644 index 42f93dc2..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/controller/Controller.java.vm +++ /dev/null @@ -1,68 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/dao/Dao.java.vm b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/dao/Dao.java.vm deleted file mode 100644 index b14411a9..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/dao/Dao.java.vm +++ /dev/null @@ -1,51 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/entity/Entity.java.vm b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/entity/Entity.java.vm deleted file mode 100644 index dd1fe0bb..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/entity/Entity.java.vm +++ /dev/null @@ -1,32 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/form/AddForm.java.vm b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/form/AddForm.java.vm deleted file mode 100644 index d1e8581c..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/form/AddForm.java.vm +++ /dev/null @@ -1,30 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/form/QueryForm.java.vm b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/form/QueryForm.java.vm deleted file mode 100644 index ed672d95..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/form/QueryForm.java.vm +++ /dev/null @@ -1,38 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/form/UpdateForm.java.vm b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/form/UpdateForm.java.vm deleted file mode 100644 index 15cbe9a5..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/form/UpdateForm.java.vm +++ /dev/null @@ -1,30 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/vo/VO.java.vm b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/vo/VO.java.vm deleted file mode 100644 index e2c84f82..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/domain/vo/VO.java.vm +++ /dev/null @@ -1,32 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/manager/Manager.java.vm b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/manager/Manager.java.vm deleted file mode 100644 index 52811ca0..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/manager/Manager.java.vm +++ /dev/null @@ -1,21 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/mapper/Mapper.xml.vm b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/mapper/Mapper.xml.vm deleted file mode 100644 index d6809423..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/mapper/Mapper.xml.vm +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - -#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_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/service/Service.java.vm b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/service/Service.java.vm deleted file mode 100644 index 02f43a19..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/java/service/Service.java.vm +++ /dev/null @@ -1,108 +0,0 @@ -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_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/js/api.js.vm b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/js/api.js.vm deleted file mode 100644 index b249d0c2..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/js/api.js.vm +++ /dev/null @@ -1,78 +0,0 @@ -/** - * ${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_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/js/const.js.vm b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/js/const.js.vm deleted file mode 100644 index 30ca06a3..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/js/const.js.vm +++ /dev/null @@ -1,23 +0,0 @@ -/** - * ${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_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/js/form.vue.vm b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/js/form.vue.vm deleted file mode 100644 index e302c22c..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/js/form.vue.vm +++ /dev/null @@ -1,181 +0,0 @@ - - - diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/js/list.vue.vm b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/js/list.vue.vm deleted file mode 100644 index a7d3fdf1..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/js/list.vue.vm +++ /dev/null @@ -1,317 +0,0 @@ - - - diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/tools.xml b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/tools.xml deleted file mode 100644 index 7f8f8681..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/code-generator-template/tools.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/dev/sa-common.yaml b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/dev/sa-common.yaml deleted file mode 100644 index acfe4826..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/dev/sa-common.yaml +++ /dev/null @@ -1,134 +0,0 @@ -spring: - # 数据库连接信息 - datasource: - url: jdbc:p6spy:mysql://127.0.0.1:3306/smart_admin_v2?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: 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.* - - # mvc swagger bugfix - mvc: - pathmatch: - matching-strategy: ant_path_matcher - - # 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_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/ChangeLogMapper.xml b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/ChangeLogMapper.xml deleted file mode 100644 index 7f5b7dbf..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/ChangeLogMapper.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/CodeGeneratorMapper.xml b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/CodeGeneratorMapper.xml deleted file mode 100644 index 4376face..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/CodeGeneratorMapper.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/ConfigMapper.xml b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/ConfigMapper.xml deleted file mode 100644 index 1fb8474d..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/ConfigMapper.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/DataTracerMapper.xml b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/DataTracerMapper.xml deleted file mode 100644 index 546e62a5..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/DataTracerMapper.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/DictKeyMapper.xml b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/DictKeyMapper.xml deleted file mode 100644 index 619269bb..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/DictKeyMapper.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - 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_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/DictValueMapper.xml b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/DictValueMapper.xml deleted file mode 100644 index 6f0fbc15..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/DictValueMapper.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - 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_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/FeedbackMapper.xml b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/FeedbackMapper.xml deleted file mode 100644 index 740037a2..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/FeedbackMapper.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/FileMapper.xml b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/FileMapper.xml deleted file mode 100644 index 405f79f8..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/FileMapper.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/HeartBeatRecordMapper.xml b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/HeartBeatRecordMapper.xml deleted file mode 100644 index e37f08ab..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/HeartBeatRecordMapper.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - update t_heart_beat_record - set heart_beat_time = #{heartBeatTime} - - heart_beat_record_id = #{id} - - - - - - - - diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/HelpDocDao.xml b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/HelpDocDao.xml deleted file mode 100644 index 6bbbf5e3..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/HelpDocDao.xml +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - - - - - - 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_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/LoginLogMapper.xml b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/LoginLogMapper.xml deleted file mode 100644 index 6126a290..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/LoginLogMapper.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/OperateLogMapper.xml b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/OperateLogMapper.xml deleted file mode 100644 index e432a896..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/OperateLogMapper.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - 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_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/ReloadItemMapper.xml b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/ReloadItemMapper.xml deleted file mode 100644 index 85b6ffb4..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/ReloadItemMapper.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/ReloadResultMapper.xml b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/ReloadResultMapper.xml deleted file mode 100644 index a1f96b83..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/ReloadResultMapper.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/SerialNumberMapper.xml b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/SerialNumberMapper.xml deleted file mode 100644 index 3afd34a3..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/SerialNumberMapper.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - 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_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/SerialNumberRecordMapper.xml b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/SerialNumberRecordMapper.xml deleted file mode 100644 index f13636aa..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/SerialNumberRecordMapper.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - 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_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/TableColumnMapper.xml b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/TableColumnMapper.xml deleted file mode 100644 index 530888b1..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/mapper/support/TableColumnMapper.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - delete - from t_table_column - where user_id = #{userId} - and table_id = #{tableId} - - - - \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/pre/sa-common.yaml b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/pre/sa-common.yaml deleted file mode 100644 index a61381ce..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/pre/sa-common.yaml +++ /dev/null @@ -1,134 +0,0 @@ -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.* - - # mvc swagger bugfix - mvc: - pathmatch: - matching-strategy: ant_path_matcher - - # 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_v2/smart-admin-api/sa-common/src/main/resources/prod/sa-common.yaml b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/prod/sa-common.yaml deleted file mode 100644 index d2b0e146..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/prod/sa-common.yaml +++ /dev/null @@ -1,134 +0,0 @@ -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: false - method: - pointcut: net.lab1024.sa..*Service.* - - # mvc swagger bugfix - mvc: - pathmatch: - matching-strategy: ant_path_matcher - - # 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-hangzhou - endpoint: oss-cn-hangzhou.aliyuncs.com - bucket-name: 1024lab-smart-admin - 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_v2/smart-admin-api/sa-common/src/main/resources/test/sa-common.yaml b/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/test/sa-common.yaml deleted file mode 100644 index d6620759..00000000 --- a/smart_admin_v2/smart-admin-api/sa-common/src/main/resources/test/sa-common.yaml +++ /dev/null @@ -1,134 +0,0 @@ -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.* - - # mvc swagger bugfix - mvc: - pathmatch: - matching-strategy: ant_path_matcher - - # 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_v2/smart-admin-web/javascript-ant-design-vue3/.env b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.env deleted file mode 100644 index 6181c66e..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.env +++ /dev/null @@ -1,2 +0,0 @@ - -VITE_APP_PROJECT_TITLE = 'SmartAdmin' \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.env.development b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.env.development deleted file mode 100644 index ac7e901e..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.env.development +++ /dev/null @@ -1,8 +0,0 @@ - -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_v2/smart-admin-web/javascript-ant-design-vue3/.env.localhost b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.env.localhost deleted file mode 100644 index 13132662..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.env.localhost +++ /dev/null @@ -1,8 +0,0 @@ - -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_v2/smart-admin-web/javascript-ant-design-vue3/.env.pre b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.env.pre deleted file mode 100644 index 096644a0..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.env.pre +++ /dev/null @@ -1,8 +0,0 @@ - -VITE_APP_API_URL = 'http://preview.smartadmin.1024lab.net/smart-admin-api' - -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_v2/smart-admin-web/javascript-ant-design-vue3/.env.production b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.env.production deleted file mode 100644 index 97ccc6d7..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.env.production +++ /dev/null @@ -1,8 +0,0 @@ - -VITE_APP_API_URL = 'http://preview.smartadmin.1024lab.net/smart-admin-api' - -VITE_APP_PROJECT_TITLE = 'SmartAdmin V2.X' - -VITE_APP_PROFILE = 'prod' - -VITE_APP_MODE = 'production' \ No newline at end of file diff --git a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.env.test b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.env.test deleted file mode 100644 index 40c7c11b..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.env.test +++ /dev/null @@ -1,8 +0,0 @@ - -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_v2/smart-admin-web/javascript-ant-design-vue3/.eslintignore b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.eslintignore deleted file mode 100644 index 78e1638b..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.eslintignore +++ /dev/null @@ -1,18 +0,0 @@ - -*.sh -node_modules -lib -*.md -*.woff -*.ttf -.vscode -.idea -dist -public -/docs -.husky -.local -.localhost -/bin -Dockerfile -src/assets diff --git a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.eslintrc.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.eslintrc.js deleted file mode 100644 index 81e7acc0..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.eslintrc.js +++ /dev/null @@ -1,66 +0,0 @@ -/* - * @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_v2/smart-admin-web/javascript-ant-design-vue3/.gitignore b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.gitignore deleted file mode 100644 index f4f9f437..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -node_modules -.DS_Store -dist -dist-ssr -*.local -.idea diff --git a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.prettierrc.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.prettierrc.js deleted file mode 100644 index d1c4ba82..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/.prettierrc.js +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 代码格式化配置 - * - * @Author: 1024创新实验室-主任:卓大 - * @Date: 2022-09-12 14:44:18 - * @Wechat: zhuda1024 - * @Email: lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012 - */ -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_v2/smart-admin-web/javascript-ant-design-vue3/jsconfig.json b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/jsconfig.json deleted file mode 100644 index c97f5795..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/jsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "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_v2/smart-admin-web/javascript-ant-design-vue3/package.json b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/package.json deleted file mode 100644 index f32227e9..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/package.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "name":"SmartAdmin", - "version": "2.0.0", - "author": { - "name": "1024创新实验室(1024lab)", - "email": "lab1024@163.com", - "url": "https://www.1024lab.net" - }, - "license": "MIT", - "homepage": "https://smartadmin.1024lab.net", - "scripts": { - "localhost": "vite --mode localhost", - "dev": "vite", - "build:test": "vite build --mode test", - "build:pre": "vite build --mode pre", - "build:prod": "vite build --mode production" - }, - "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", - "lodash": "^4.17.21", - "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_v2/smart-admin-web/javascript-ant-design-vue3/postcss.config.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/postcss.config.js deleted file mode 100644 index 2c7ab7cc..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/postcss.config.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - plugins: { - }, -}; diff --git a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/public/favicon.ico b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/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_v2/smart-admin-web/javascript-ant-design-vue3/src/api/business/category/category-api.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/business/category/category-api.js deleted file mode 100644 index 24a3b183..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/business/category/category-api.js +++ /dev/null @@ -1,34 +0,0 @@ -/* - * 类目api - * - * @Author: 卓大 - * @Date: 2022-09-03 21:35:00 - * @Wechat: zhuda1024 - * @Email: lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012 - */ -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_v2/smart-admin-web/javascript-ant-design-vue3/src/api/business/goods/goods-api.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/business/goods/goods-api.js deleted file mode 100644 index e3ad9598..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/business/goods/goods-api.js +++ /dev/null @@ -1,31 +0,0 @@ -/* - * @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_v2/smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/bank-api.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/bank-api.js deleted file mode 100644 index 7e9b6278..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/bank-api.js +++ /dev/null @@ -1,42 +0,0 @@ -/* - * 银行卡 - * - * @Author: 善逸 - * @Date: 2022-09-03 21:42:08 - * @Wechat: zhuda1024 - * @Email: lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012 - */ -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_v2/smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/enterprise-api.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/enterprise-api.js deleted file mode 100644 index 68c48d6a..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/enterprise-api.js +++ /dev/null @@ -1,64 +0,0 @@ -/* - * 企业信息 - * - * @Author: 开云 - * @Date: 2022-09-03 21:47:28 - * @Wechat: zhuda1024 - * @Email: lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012 - */ -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_v2/smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/invoice-api.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/invoice-api.js deleted file mode 100644 index d347af23..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/invoice-api.js +++ /dev/null @@ -1,44 +0,0 @@ -/* - * OA发票信息 - * - * @Author: 善逸 - * @Date: 2022-09-03 21:48:54 - * @Wechat: zhuda1024 - * @Email: lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012 - */ -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_v2/smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/notice-api.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/notice-api.js deleted file mode 100644 index 056eb2de..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/business/oa/notice-api.js +++ /dev/null @@ -1,74 +0,0 @@ -/* - * @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_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/cache/cache-api.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/cache/cache-api.js deleted file mode 100644 index dbe61c7a..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/cache/cache-api.js +++ /dev/null @@ -1,25 +0,0 @@ -/* - * 缓存 - * - * @Author: 罗伊 - * @Date: 2022-09-03 21:51:34 - * @Wechat: zhuda1024 - * @Email: lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012 - */ -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_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/change-log/change-log-api.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/change-log/change-log-api.js deleted file mode 100644 index b81b1e0a..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/change-log/change-log-api.js +++ /dev/null @@ -1,45 +0,0 @@ -/** - * 系统更新日志 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_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/code-generator/code-generator-api.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/code-generator/code-generator-api.js deleted file mode 100644 index 8407eab4..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/code-generator/code-generator-api.js +++ /dev/null @@ -1,46 +0,0 @@ -/* - * 代码生成器 - * - * @Author: 卓大 - * @Date: 2022-09-03 21:51:54 - * @Wechat: zhuda1024 - * @Email: lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012 - */ -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_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/config/config-api.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/config/config-api.js deleted file mode 100644 index c5e5397f..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/config/config-api.js +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 配置 - * - * @Author: 卓大 - * @Date: 2022-09-03 21:51:54 - * @Wechat: zhuda1024 - * @Email: lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012 - */ -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_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/data-tracer/data-tracer-api.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/data-tracer/data-tracer-api.js deleted file mode 100644 index afa75f88..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/data-tracer/data-tracer-api.js +++ /dev/null @@ -1,18 +0,0 @@ -/* - * 数据变动 - * - * @Author: 卓大 - * @Date: 2022-09-03 21:51:54 - * @Wechat: zhuda1024 - * @Email: lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012 - */ -import { postRequest } from '/@/lib/axios'; - -export const dataTracerApi = { - // 分页查询业务操作日志 - @author 卓大 - queryList: (param) => { - return postRequest('/support/dataTracer/query', param); - }, - -}; diff --git a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/dict/dict-api.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/dict/dict-api.js deleted file mode 100644 index 701d3612..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/dict/dict-api.js +++ /dev/null @@ -1,59 +0,0 @@ -/* - * 字典 - * - * @Author: 1024创新实验室-主任:卓大 - * @Date: 2022-09-03 21:55:25 - * @Wechat: zhuda1024 - * @Email: lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012 - */ -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_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/feedback/feedback-api.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/feedback/feedback-api.js deleted file mode 100644 index c951b8a9..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/feedback/feedback-api.js +++ /dev/null @@ -1,21 +0,0 @@ -/* - * 意见反馈 - * - * @Author: 1024创新实验室:开云 - * @Date: 2022-09-03 21:56:31 - * @Wechat: zhuda1024 - * @Email: lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012 - */ -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_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/file/file-api.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/file/file-api.js deleted file mode 100644 index d08a6c6e..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/file/file-api.js +++ /dev/null @@ -1,38 +0,0 @@ -/* - * 文件上传 - * - * @Author: 1024创新实验室-主任:卓大 - * @Date: 2022-09-03 21:55:25 - * @Wechat: zhuda1024 - * @Email: lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012 - */ -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_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/heart-beat/heart-beat-api.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/heart-beat/heart-beat-api.js deleted file mode 100644 index 0a1eab40..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/heart-beat/heart-beat-api.js +++ /dev/null @@ -1,17 +0,0 @@ -/* - * 心跳 - * - * @Author: 1024创新实验室-主任:卓大 - * @Date: 2022-09-03 21:55:47 - * @Wechat: zhuda1024 - * @Email: lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012 - */ -import { postRequest } from '/@/lib/axios'; - -export const heartBeatApi = { - // 分页查询 @author 卓大 - queryList: (param) => { - return postRequest('/support/heartBeat/query', param); - }, -}; diff --git a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/help-doc/help-doc-api.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/help-doc/help-doc-api.js deleted file mode 100644 index dc4fac41..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/help-doc/help-doc-api.js +++ /dev/null @@ -1,59 +0,0 @@ -/* - * 帮助文档 - * - * @Author: 1024创新实验室-主任:卓大 - * @Date: 2022-09-03 21:56:31 - * @Wechat: zhuda1024 - * @Email: lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012 - */ -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_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/help-doc/help-doc-catalog-api.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/help-doc/help-doc-catalog-api.js deleted file mode 100644 index a8fd6c65..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/help-doc/help-doc-catalog-api.js +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 帮助文档 目录 - * - * @Author: 1024创新实验室-主任:卓大 - * @Date: 2022-09-03 21:56:31 - * @Wechat: zhuda1024 - * @Email: lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012 - */ -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_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/login-log/login-log-api.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/login-log/login-log-api.js deleted file mode 100644 index 3c48fe78..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/login-log/login-log-api.js +++ /dev/null @@ -1,17 +0,0 @@ -/* - * 登录日志 - * - * @Author: 1024创新实验室-主任:卓大 - * @Date: 2022-09-03 21:56:31 - * @Wechat: zhuda1024 - * @Email: lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012 - */ -import { postRequest, getRequest } from '/@/lib/axios'; - -export const loginLogApi = { - // 分页查询 @author 卓大 - queryList: (param) => { - return postRequest('/support/loginLog/page/query', param); - }, -}; diff --git a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/operate-log/operate-log-api.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/operate-log/operate-log-api.js deleted file mode 100644 index b2f421d7..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/operate-log/operate-log-api.js +++ /dev/null @@ -1,21 +0,0 @@ -/* - * 操作日志 - * - * @Author: 1024创新实验室-主任:卓大 - * @Date: 2022-09-03 21:56:45 - * @Wechat: zhuda1024 - * @Email: lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012 - */ -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_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/reload/reload-api.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/reload/reload-api.js deleted file mode 100644 index 721d563a..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/reload/reload-api.js +++ /dev/null @@ -1,25 +0,0 @@ -/* - * reload (内存热加载、钩子等) - * - * @Author: 1024创新实验室-主任:卓大 - * @Date: 2022-09-03 21:57:19 - * @Wechat: zhuda1024 - * @Email: lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012 - */ -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_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/serial-number/serial-number-api.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/serial-number/serial-number-api.js deleted file mode 100644 index b9ae35ae..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/serial-number/serial-number-api.js +++ /dev/null @@ -1,25 +0,0 @@ -/* - * 单据序列号 - * - * @Author: 1024创新实验室-主任:卓大 - * @Date: 2022-09-03 21:57:52 - * @Wechat: zhuda1024 - * @Email: lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012 - */ -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_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/table/table-column-api.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/table/table-column-api.js deleted file mode 100644 index 7223ab9f..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/support/table/table-column-api.js +++ /dev/null @@ -1,26 +0,0 @@ -/* - * @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_v2/smart-admin-web/javascript-ant-design-vue3/src/api/system/department/department-api.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/system/department/department-api.js deleted file mode 100644 index 230a4535..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/system/department/department-api.js +++ /dev/null @@ -1,55 +0,0 @@ -/* - * 部门 - * - * @Author: 1024创新实验室-主任:卓大 - * @Date: 2022-09-03 21:58:50 - * @Wechat: zhuda1024 - * @Email: lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012 - */ -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_v2/smart-admin-web/javascript-ant-design-vue3/src/api/system/employee/employee-api.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/system/employee/employee-api.js deleted file mode 100644 index cddb95d1..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/system/employee/employee-api.js +++ /dev/null @@ -1,98 +0,0 @@ -/* - * 员工 - * - * @Author: 1024创新实验室-主任:卓大 - * @Date: 2022-09-03 21:59:15 - * @Wechat: zhuda1024 - * @Email: lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012 - */ - -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_v2/smart-admin-web/javascript-ant-design-vue3/src/api/system/home/home-api.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/system/home/home-api.js deleted file mode 100644 index 6452fcba..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/system/home/home-api.js +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 首页api - * - * @Author: 1024创新实验室-主任:卓大 - * @Date: 2022-09-03 21:59:39 - * @Wechat: zhuda1024 - * @Email: lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012 - */ -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_v2/smart-admin-web/javascript-ant-design-vue3/src/api/system/login/login-api.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/system/login/login-api.js deleted file mode 100644 index e93e0d5d..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/system/login/login-api.js +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 登录 - * - * @Author: 1024创新实验室-主任:卓大 - * @Date: 2022-09-03 21:59:58 - * @Wechat: zhuda1024 - * @Email: lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012 - */ -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_v2/smart-admin-web/javascript-ant-design-vue3/src/api/system/menu/menu-api.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/system/menu/menu-api.js deleted file mode 100644 index 43c8872f..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/system/menu/menu-api.js +++ /dev/null @@ -1,54 +0,0 @@ -/* - * 菜单 - * - * @Author: 1024创新实验室-主任:卓大 - * @Date: 2022-09-03 22:00:32 - * @Wechat: zhuda1024 - * @Email: lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012 - */ -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_v2/smart-admin-web/javascript-ant-design-vue3/src/api/system/role-menu/role-menu-api.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/system/role-menu/role-menu-api.js deleted file mode 100644 index 9d0cc219..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/system/role-menu/role-menu-api.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * 角色菜单 - * - * @Author: 1024创新实验室-主任:卓大 - * @Date: 2022-09-03 22:00:49 - * @Wechat: zhuda1024 - * @Email: lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012 - */ -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_v2/smart-admin-web/javascript-ant-design-vue3/src/api/system/role/role-api.js b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/system/role/role-api.js deleted file mode 100644 index f836deee..00000000 --- a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/api/system/role/role-api.js +++ /dev/null @@ -1,110 +0,0 @@ -/* - * 角色 - * - * @Author: 1024创新实验室-主任:卓大 - * @Date: 2022-09-03 22:00:41 - * @Wechat: zhuda1024 - * @Email: lab1024@163.com - * @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012 - */ -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_v2/smart-admin-web/javascript-ant-design-vue3/src/assets/images/1024lab/1024lab-gzh.jpg b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/assets/images/1024lab/1024lab-gzh.jpg deleted file mode 100644 index d6b03f53c5696aa2c81fadc5b2c64454abc08155..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27898 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 diff --git a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/assets/images/1024lab/zhuoda-wechat.jpg b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/assets/images/1024lab/zhuoda-wechat.jpg deleted file mode 100644 index 9e117782266009c7d2d5caaf5dd107277e0f96c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42080 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

fWY{U}tgmvdg&t9NTnsBE9 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 YBC8_>dPmCt(-%}~&;QS7?9ajf0^=UnW&i*H diff --git a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/ali-icon.png b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/ali-icon.png deleted file mode 100644 index fe141241bf2aec2a19069aefd4d1659b68eb67b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7011 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 Bn_vI{ diff --git a/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/google-icon.png b/smart_admin_v2/smart-admin-web/javascript-ant-design-vue3/src/assets/images/login/google-icon.png deleted file mode 100644 index 4bc6e4b0820a9d52258c4111ca75b3a875062431..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6228 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 z 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

RePHT}9WVuMsZwy}w2@Luy;p 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