From 510d46b122d6d5f547a0aef61d41593821a8ee43 Mon Sep 17 00:00:00 2001 From: horsepower Date: Sun, 28 Jul 2024 11:01:33 +0800 Subject: [PATCH] init --- README.md | 0 template/.devcontainer/devcontainer.json | 44 + template/.env | 12 + template/.gitignore | 33 + template/.gitlab-ci.yml | 4 + template/.idea/dataSources.xml | 16 + template/.mvn/jvm.config | 1 + template/.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 62547 bytes .../.mvn/wrapper/maven-wrapper.properties | 20 + template/.values.yml | 1 + template/Dockerfile | 21 + template/devfile.yaml | 34 + template/environment.yml | 42 + template/insiis-web/pom.xml | 444 ++ .../com/insigma/InsiisWebApplication.java | 29 + .../controller/CommonSearchController.java | 46 + .../business/demo/blo/DemoPersonBLO.java | 26 + .../demo/blo/impl/DemoPersonBLOImpl.java | 148 + .../business/demo/bpo/DemoPersonBPO.java | 27 + .../demo/bpo/impl/DemoPersonBPOImpl.java | 56 + .../demo/controller/DemoPersonController.java | 138 + .../business/demo/dao/DemoPersonDAO.java | 20 + .../business/demo/dto/DemoPersonDTO.java | 36 + .../insigma/business/demo/dto/TestDTO.java | 18 + .../business/demo/entity/DemoPerson.java | 54 + .../insigma/config/RestTemplateConfig.java | 38 + .../insigma/sys/common/CommonValidator.java | 137 + .../sys/common/CurrentUserService.java | 15 + .../insigma/sys/common/OdinClientAuth.java | 64 + .../common/OdinClientAuthExtendFilter.java | 55 + .../insigma/sys/common/SysEntityListener.java | 47 + .../com/insigma/sys/common/SysManageMode.java | 49 + .../common/impl/CurrentUserServiceImpl.java | 57 + .../MyLogoutOrFailedExceptionHandler.java | 28 + .../sys/common/impl/MySysLoginHandler.java | 56 + .../sys/common/impl/MySysLogoutHandler.java | 36 + .../com/insigma/sys/config/JdbcConfig.java | 19 + .../com/insigma/sys/config/JpaConfig.java | 17 + .../com/insigma/sys/config/SSOConfig.java | 59 + .../sys/config/SSOConfigProperties.java | 24 + .../sys/controller/AuthController.java | 51 + .../sys/controller/HolidayController.java | 56 + .../sys/controller/HomeController.java | 147 + .../controller/ImportConfigController.java | 94 + .../sys/controller/MenuController.java | 244 + .../controller/MonitorCentersController.java | 133 + .../sys/controller/MonitorDataController.java | 169 + .../sys/controller/OpLogController.java | 98 + .../insigma/sys/controller/OrgController.java | 199 + .../sys/controller/ParamConfigController.java | 49 + .../sys/controller/RoleController.java | 308 ++ .../insigma/sys/controller/SSOController.java | 42 + .../controller/SafetyFilterLogController.java | 31 + .../controller/ScmMyFavoritesController.java | 93 + .../sys/controller/SysAppController.java | 200 + .../controller/SysAuditConfigController.java | 55 + .../sys/controller/SysAuditController.java | 76 + .../sys/controller/SysCodeController.java | 50 + .../SysDownloadCenterController.java | 351 ++ .../sys/controller/SysErrorController.java | 161 + .../sys/controller/SysFeedbackController.java | 134 + .../controller/SysFunctionDocController.java | 222 + .../sys/controller/SysGrantController.java | 343 ++ .../sys/controller/SysGuideController.java | 213 + .../sys/controller/SysMessageController.java | 119 + .../SysMessageManageController.java | 130 + .../sys/controller/SysOpLogController.java | 61 + .../sys/controller/SysUserController.java | 476 ++ .../sys/controller/SysUsertmsController.java | 350 ++ .../sys/controller/SyslogonLogController.java | 60 + .../controller/SystemConfigController.java | 27 + .../sys/controller/UserMenuController.java | 49 + .../java/com/insigma/sys/dto/CodeDTO.java | 19 + .../insigma/sys/dto/FeedbackAnswerDTO.java | 31 + .../java/com/insigma/sys/dto/FeedbackDTO.java | 38 + .../insigma/sys/dto/ImportConfigReDTO.java | 21 + .../com/insigma/sys/dto/LazyTreeNode.java | 24 + .../java/com/insigma/sys/dto/MenuDTO.java | 19 + .../java/com/insigma/sys/dto/MessageDTO.java | 37 + .../insigma/sys/dto/MonitorCentersDTO.java | 31 + .../main/java/com/insigma/sys/dto/OrgDTO.java | 22 + .../java/com/insigma/sys/dto/RoleDTO.java | 18 + .../insigma/sys/dto/ScmMyFavoritesDTO.java | 36 + .../com/insigma/sys/dto/SysAppAddressDTO.java | 19 + .../java/com/insigma/sys/dto/SysAppDTO.java | 25 + .../insigma/sys/dto/SysDownloadCenterDTO.java | 32 + .../java/com/insigma/sys/dto/SysErrorDTO.java | 14 + .../insigma/sys/dto/SysFunctionDocDTO.java | 16 + .../java/com/insigma/sys/dto/SysGuideDTO.java | 30 + .../com/insigma/sys/dto/SysLogonLogDTO.java | 23 + .../com/insigma/sys/dto/SysOperateLogDTO.java | 23 + .../java/com/insigma/sys/dto/SysRoleDTO.java | 30 + .../java/com/insigma/sys/dto/TreeNode.java | 21 + .../java/com/insigma/sys/dto/UserDTO.java | 39 + .../java/com/insigma/sys/entity/Aa10.java | 52 + .../java/com/insigma/sys/entity/Aa26.java | 26 + .../insigma/sys/entity/ScmMyFavorites.java | 46 + .../java/com/insigma/sys/entity/SysApp.java | 71 + .../com/insigma/sys/entity/SysAppAddress.java | 47 + .../insigma/sys/entity/SysDownloadCenter.java | 42 + .../insigma/sys/entity/SysDownloadLog.java | 31 + .../java/com/insigma/sys/entity/SysError.java | 26 + .../com/insigma/sys/entity/SysFeedback.java | 35 + .../insigma/sys/entity/SysFeedbackAnswer.java | 37 + .../insigma/sys/entity/SysFunctionDoc.java | 23 + .../java/com/insigma/sys/entity/SysGuide.java | 55 + .../com/insigma/sys/entity/SysGuideHot.java | 29 + .../com/insigma/sys/entity/SysGuideType.java | 43 + .../com/insigma/sys/entity/SysHoliday.java | 30 + .../com/insigma/sys/entity/SysIdMapping.java | 21 + .../java/com/insigma/sys/entity/SysMenu.java | 50 + .../java/com/insigma/sys/entity/SysOrg.java | 54 + .../java/com/insigma/sys/entity/SysRole.java | 34 + .../insigma/sys/entity/SysRoleFunction.java | 23 + .../java/com/insigma/sys/entity/SysUser.java | 73 + .../com/insigma/sys/entity/SysUserArea.java | 23 + .../com/insigma/sys/entity/SysUserAreaPK.java | 22 + .../com/insigma/sys/entity/SysUserRole.java | 24 + .../com/insigma/sys/entity/SysUserRolePK.java | 20 + .../com/insigma/sys/entity/SysWarningLog.java | 32 + .../sys/repository/Aa26Repository.java | 26 + .../sys/repository/MenuRepository.java | 59 + .../sys/repository/RoleRepository.java | 76 + .../repository/SysAppAddressRepository.java | 31 + .../sys/repository/SysAppRepository.java | 20 + .../sys/repository/SysCodeRepository.java | 31 + .../SysDownloadCenterRepository.java | 16 + .../repository/SysDownloadLogRepository.java | 13 + .../sys/repository/SysErrorRepository.java | 16 + .../SysFeedbackAnswerRepository.java | 16 + .../sys/repository/SysFeedbackRepository.java | 13 + .../repository/SysFunctionDocRepository.java | 18 + .../sys/repository/SysGuideHotRepository.java | 10 + .../sys/repository/SysGuideRepository.java | 21 + .../repository/SysGuideTypeRepository.java | 24 + .../sys/repository/SysHolidayRepository.java | 20 + .../repository/SysIdMappingRespository.java | 12 + .../sys/repository/SysOrgRepository.java | 40 + .../repository/SysRoleFunctionRepository.java | 29 + .../sys/repository/SysUserAreaRepository.java | 26 + .../sys/repository/SysUserRepository.java | 114 + .../sys/repository/SysUserRoleRepository.java | 32 + .../repository/SysWarningLogRepository.java | 13 + .../com/insigma/sys/service/Aa26Service.java | 18 + .../insigma/sys/service/HolidayService.java | 17 + .../com/insigma/sys/service/MenuService.java | 63 + .../sys/service/MonitorCentersService.java | 97 + .../com/insigma/sys/service/OpLogService.java | 23 + .../sys/service/ParamConfigService.java | 17 + .../com/insigma/sys/service/RoleService.java | 54 + .../sys/service/ScmMyFavoritesService.java | 46 + .../insigma/sys/service/SysAppService.java | 39 + .../insigma/sys/service/SysCodeService.java | 20 + .../sys/service/SysDownloadCenterService.java | 23 + .../insigma/sys/service/SysErrorService.java | 17 + .../sys/service/SysFeedbackService.java | 21 + .../sys/service/SysFunctionDocService.java | 10 + .../insigma/sys/service/SysGuideService.java | 29 + .../insigma/sys/service/SysHashService.java | 15 + .../sys/service/SysIdMappingService.java | 12 + .../sys/service/SysMessageService.java | 33 + .../sys/service/SysOperateLogService.java | 22 + .../insigma/sys/service/SysOrgService.java | 52 + .../sys/service/SysUserAreaService.java | 13 + .../insigma/sys/service/SysUserService.java | 206 + .../sys/service/SysWarningLogService.java | 11 + .../sys/service/SyslogonLogService.java | 29 + .../com/insigma/sys/service/UService.java | 887 ++++ .../sys/service/impl/Aa26ServiceImpl.java | 39 + .../sys/service/impl/HolidayServiceImpl.java | 70 + .../sys/service/impl/MenuServiceImpl.java | 555 +++ .../impl/MonitorCentersServiceImpl.java | 259 + .../service/impl/ParamConfigServiceImpl.java | 74 + .../sys/service/impl/RoleServiceImpl.java | 547 ++ .../impl/ScmMyFavoritesServiceImpl.java | 131 + .../sys/service/impl/SysAppServiceImpl.java | 243 + .../sys/service/impl/SysCodeServiceImpl.java | 112 + .../impl/SysDownloadCenterServiceImpl.java | 105 + .../sys/service/impl/SysErrorServiceImpl.java | 151 + .../service/impl/SysFeedbackServiceImpl.java | 138 + .../impl/SysFunctionDocServiceImpl.java | 69 + .../sys/service/impl/SysGuideServiceImpl.java | 340 ++ .../sys/service/impl/SysHashServiceImpl.java | 129 + .../sys/service/impl/SysIdMappingImpl.java | 36 + .../service/impl/SysMessageServiceImpl.java | 325 ++ .../impl/SysOperateLogServiceImpl.java | 105 + .../sys/service/impl/SysOrgServiceImpl.java | 223 + .../sys/service/impl/SysUserAreaImpl.java | 25 + .../sys/service/impl/SysUserServiceImpl.java | 787 +++ .../impl/SysWarningLogServiceImpl.java | 46 + .../service/impl/SyslogonLogServiceImpl.java | 151 + .../sys/util/MybatisCodeGenerator.java | 85 + .../com/insigma/sys/util/SysHashUtil.java | 37 + .../com/insigma/sys/util/SysSessionUtil.java | 42 + .../java/com/insigma/sys/util/WordUtil.java | 71 + .../src/main/java/com/vs/FailData.java | 43 + .../com/vs/ResponseJsonExceptionResolver.java | 108 + .../ResponseJsonMethodReturnValueHandler.java | 48 + .../src/main/java/com/vs/SuccessData.java | 30 + .../java/com/vs/VSResponseHandlerConfig.java | 48 + .../spring-autoconfigure-metadata.properties | 2 + .../resources/application-async.properties | 10 + .../application-datasource.properties | 40 + .../main/resources/application-eps.properties | 12 + .../resources/application-eureka.properties | 11 + .../resources/application-mybatis.properties | 11 + .../resources/application-quartz.properties | 19 + .../resources/application-redis.properties | 36 + .../resources/application-security.properties | 37 + .../src/main/resources/application.properties | 124 + .../src/main/resources/batchFile.txt | 15 + .../src/main/resources/bootstrap.properties | 9 + .../insiis-web/src/main/resources/logback.xml | 92 + .../insigma/business/demo/DemoPersonDAO.xml | 7 + .../src/main/resources/static/odin-base.jar | Bin 0 -> 1154 bytes .../src/main/resources/static/prd.desc | 5 + .../src/main/resources/templates/blo.java.ftl | 15 + .../main/resources/templates/bloImpl.java.ftl | 23 + .../src/main/resources/templates/bpo.java.ftl | 15 + .../main/resources/templates/bpoImpl.java.ftl | 24 + .../resources/templates/controller.java.ftl | 79 + .../main/resources/templates/mapper.java.ftl | 18 + .../resources/templates/monReportTemplate.ftl | 4381 +++++++++++++++++ .../main/resources/templates/service.java.ftl | 14 + .../resources/templates/serviceImpl.java.ftl | 22 + .../insigma/InsiisWebApplicationTests.java | 16 + template/modules/.gitkeep | 1 + template/mvnw | 308 ++ template/mvnw.cmd | 205 + template/pom.xml | 213 + template/project | 3 + values.yml | 45 + 232 files changed, 21733 insertions(+) delete mode 100644 README.md create mode 100644 template/.devcontainer/devcontainer.json create mode 100644 template/.env create mode 100644 template/.gitignore create mode 100644 template/.gitlab-ci.yml create mode 100644 template/.idea/dataSources.xml create mode 100644 template/.mvn/jvm.config create mode 100644 template/.mvn/wrapper/maven-wrapper.jar create mode 100644 template/.mvn/wrapper/maven-wrapper.properties create mode 100644 template/.values.yml create mode 100644 template/Dockerfile create mode 100644 template/devfile.yaml create mode 100644 template/environment.yml create mode 100644 template/insiis-web/pom.xml create mode 100644 template/insiis-web/src/main/java/com/insigma/InsiisWebApplication.java create mode 100644 template/insiis-web/src/main/java/com/insigma/business/common/controller/CommonSearchController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/business/demo/blo/DemoPersonBLO.java create mode 100644 template/insiis-web/src/main/java/com/insigma/business/demo/blo/impl/DemoPersonBLOImpl.java create mode 100644 template/insiis-web/src/main/java/com/insigma/business/demo/bpo/DemoPersonBPO.java create mode 100644 template/insiis-web/src/main/java/com/insigma/business/demo/bpo/impl/DemoPersonBPOImpl.java create mode 100644 template/insiis-web/src/main/java/com/insigma/business/demo/controller/DemoPersonController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/business/demo/dao/DemoPersonDAO.java create mode 100644 template/insiis-web/src/main/java/com/insigma/business/demo/dto/DemoPersonDTO.java create mode 100644 template/insiis-web/src/main/java/com/insigma/business/demo/dto/TestDTO.java create mode 100644 template/insiis-web/src/main/java/com/insigma/business/demo/entity/DemoPerson.java create mode 100644 template/insiis-web/src/main/java/com/insigma/config/RestTemplateConfig.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/common/CommonValidator.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/common/CurrentUserService.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/common/OdinClientAuth.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/common/OdinClientAuthExtendFilter.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/common/SysEntityListener.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/common/SysManageMode.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/common/impl/CurrentUserServiceImpl.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/common/impl/MyLogoutOrFailedExceptionHandler.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/common/impl/MySysLoginHandler.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/common/impl/MySysLogoutHandler.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/config/JdbcConfig.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/config/JpaConfig.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/config/SSOConfig.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/config/SSOConfigProperties.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/AuthController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/HolidayController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/HomeController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/ImportConfigController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/MenuController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/MonitorCentersController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/MonitorDataController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/OpLogController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/OrgController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/ParamConfigController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/RoleController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/SSOController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/SafetyFilterLogController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/ScmMyFavoritesController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/SysAppController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/SysAuditConfigController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/SysAuditController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/SysCodeController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/SysDownloadCenterController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/SysErrorController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/SysFeedbackController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/SysFunctionDocController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/SysGrantController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/SysGuideController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/SysMessageController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/SysMessageManageController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/SysOpLogController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/SysUserController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/SysUsertmsController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/SyslogonLogController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/SystemConfigController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/controller/UserMenuController.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/dto/CodeDTO.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/dto/FeedbackAnswerDTO.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/dto/FeedbackDTO.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/dto/ImportConfigReDTO.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/dto/LazyTreeNode.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/dto/MenuDTO.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/dto/MessageDTO.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/dto/MonitorCentersDTO.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/dto/OrgDTO.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/dto/RoleDTO.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/dto/ScmMyFavoritesDTO.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/dto/SysAppAddressDTO.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/dto/SysAppDTO.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/dto/SysDownloadCenterDTO.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/dto/SysErrorDTO.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/dto/SysFunctionDocDTO.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/dto/SysGuideDTO.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/dto/SysLogonLogDTO.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/dto/SysOperateLogDTO.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/dto/SysRoleDTO.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/dto/TreeNode.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/dto/UserDTO.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/entity/Aa10.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/entity/Aa26.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/entity/ScmMyFavorites.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/entity/SysApp.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/entity/SysAppAddress.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/entity/SysDownloadCenter.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/entity/SysDownloadLog.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/entity/SysError.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/entity/SysFeedback.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/entity/SysFeedbackAnswer.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/entity/SysFunctionDoc.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/entity/SysGuide.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/entity/SysGuideHot.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/entity/SysGuideType.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/entity/SysHoliday.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/entity/SysIdMapping.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/entity/SysMenu.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/entity/SysOrg.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/entity/SysRole.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/entity/SysRoleFunction.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/entity/SysUser.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/entity/SysUserArea.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/entity/SysUserAreaPK.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/entity/SysUserRole.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/entity/SysUserRolePK.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/entity/SysWarningLog.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/repository/Aa26Repository.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/repository/MenuRepository.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/repository/RoleRepository.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/repository/SysAppAddressRepository.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/repository/SysAppRepository.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/repository/SysCodeRepository.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/repository/SysDownloadCenterRepository.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/repository/SysDownloadLogRepository.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/repository/SysErrorRepository.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/repository/SysFeedbackAnswerRepository.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/repository/SysFeedbackRepository.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/repository/SysFunctionDocRepository.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/repository/SysGuideHotRepository.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/repository/SysGuideRepository.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/repository/SysGuideTypeRepository.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/repository/SysHolidayRepository.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/repository/SysIdMappingRespository.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/repository/SysOrgRepository.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/repository/SysRoleFunctionRepository.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/repository/SysUserAreaRepository.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/repository/SysUserRepository.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/repository/SysUserRoleRepository.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/repository/SysWarningLogRepository.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/Aa26Service.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/HolidayService.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/MenuService.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/MonitorCentersService.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/OpLogService.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/ParamConfigService.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/RoleService.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/ScmMyFavoritesService.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/SysAppService.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/SysCodeService.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/SysDownloadCenterService.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/SysErrorService.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/SysFeedbackService.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/SysFunctionDocService.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/SysGuideService.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/SysHashService.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/SysIdMappingService.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/SysMessageService.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/SysOperateLogService.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/SysOrgService.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/SysUserAreaService.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/SysUserService.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/SysWarningLogService.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/SyslogonLogService.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/UService.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/impl/Aa26ServiceImpl.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/impl/HolidayServiceImpl.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/impl/MenuServiceImpl.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/impl/MonitorCentersServiceImpl.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/impl/ParamConfigServiceImpl.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/impl/RoleServiceImpl.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/impl/ScmMyFavoritesServiceImpl.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysAppServiceImpl.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysCodeServiceImpl.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysDownloadCenterServiceImpl.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysErrorServiceImpl.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysFeedbackServiceImpl.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysFunctionDocServiceImpl.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysGuideServiceImpl.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysHashServiceImpl.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysIdMappingImpl.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysMessageServiceImpl.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysOperateLogServiceImpl.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysOrgServiceImpl.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysUserAreaImpl.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysUserServiceImpl.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysWarningLogServiceImpl.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/service/impl/SyslogonLogServiceImpl.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/util/MybatisCodeGenerator.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/util/SysHashUtil.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/util/SysSessionUtil.java create mode 100644 template/insiis-web/src/main/java/com/insigma/sys/util/WordUtil.java create mode 100644 template/insiis-web/src/main/java/com/vs/FailData.java create mode 100644 template/insiis-web/src/main/java/com/vs/ResponseJsonExceptionResolver.java create mode 100644 template/insiis-web/src/main/java/com/vs/ResponseJsonMethodReturnValueHandler.java create mode 100644 template/insiis-web/src/main/java/com/vs/SuccessData.java create mode 100644 template/insiis-web/src/main/java/com/vs/VSResponseHandlerConfig.java create mode 100644 template/insiis-web/src/main/resources/META-INF/spring-autoconfigure-metadata.properties create mode 100644 template/insiis-web/src/main/resources/application-async.properties create mode 100644 template/insiis-web/src/main/resources/application-datasource.properties create mode 100644 template/insiis-web/src/main/resources/application-eps.properties create mode 100644 template/insiis-web/src/main/resources/application-eureka.properties create mode 100644 template/insiis-web/src/main/resources/application-mybatis.properties create mode 100644 template/insiis-web/src/main/resources/application-quartz.properties create mode 100644 template/insiis-web/src/main/resources/application-redis.properties create mode 100644 template/insiis-web/src/main/resources/application-security.properties create mode 100644 template/insiis-web/src/main/resources/application.properties create mode 100644 template/insiis-web/src/main/resources/batchFile.txt create mode 100644 template/insiis-web/src/main/resources/bootstrap.properties create mode 100644 template/insiis-web/src/main/resources/logback.xml create mode 100644 template/insiis-web/src/main/resources/mapper/com/insigma/business/demo/DemoPersonDAO.xml create mode 100644 template/insiis-web/src/main/resources/static/odin-base.jar create mode 100644 template/insiis-web/src/main/resources/static/prd.desc create mode 100644 template/insiis-web/src/main/resources/templates/blo.java.ftl create mode 100644 template/insiis-web/src/main/resources/templates/bloImpl.java.ftl create mode 100644 template/insiis-web/src/main/resources/templates/bpo.java.ftl create mode 100644 template/insiis-web/src/main/resources/templates/bpoImpl.java.ftl create mode 100644 template/insiis-web/src/main/resources/templates/controller.java.ftl create mode 100644 template/insiis-web/src/main/resources/templates/mapper.java.ftl create mode 100644 template/insiis-web/src/main/resources/templates/monReportTemplate.ftl create mode 100644 template/insiis-web/src/main/resources/templates/service.java.ftl create mode 100644 template/insiis-web/src/main/resources/templates/serviceImpl.java.ftl create mode 100644 template/insiis-web/src/test/java/com/insigma/InsiisWebApplicationTests.java create mode 100644 template/modules/.gitkeep create mode 100755 template/mvnw create mode 100755 template/mvnw.cmd create mode 100644 template/pom.xml create mode 100644 template/project create mode 100644 values.yml diff --git a/README.md b/README.md deleted file mode 100644 index e69de29..0000000 diff --git a/template/.devcontainer/devcontainer.json b/template/.devcontainer/devcontainer.json new file mode 100644 index 0000000..10f1066 --- /dev/null +++ b/template/.devcontainer/devcontainer.json @@ -0,0 +1,44 @@ +{ + "name": "devcontainer", + "image": "registry.cn-hangzhou.aliyuncs.com/zeroware/devcontainer:latest", + "runArgs": ["--name", "${localWorkspaceFolderBasename}_devcontainer", "--env-file",".env"], + "forwardPorts": [ + 8080 + ], + "postStartCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}", + "containerUser": "ubuntu", + "remoteUser": "ubuntu", + "containerEnv": { + "HOME": "/home/ubuntu" + }, + "remoteEnv": { + "HOME": "/home/ubuntu" + }, + "updateRemoteUserUID": true, + "mounts": [ + { + "source": "${localEnv:HOME}${localEnv:USERPROFILE}/.m2/repository", + "target": "/home/ubuntu/.m2/repository", + "type": "bind" + }, + { + "source": "${localEnv:HOME}${localEnv:USERPROFILE}/.ssh", + "target": "/home/ubuntu/.ssh", + "type": "bind" + } + ], + "customizations": { + // Configure properties specific to VS Code. + "vscode": { + // Set *default* container specific settings.json values on container create. + "extensions": [ + "vscjava.vscode-java-dependency", + "vscjava.vscode-maven", + "vscjava.vscode-java-test", + "vscjava.vscode-java-debug", + "vscjava.vscode-java-pack", + "esbenp.prettier-vscode" + ] + } + } + } diff --git a/template/.env b/template/.env new file mode 100644 index 0000000..7aa7206 --- /dev/null +++ b/template/.env @@ -0,0 +1,12 @@ +DB_HOST=116.63.207.117:13306 + +ROCKETMQ_HOST=116.63.207.117:19876 + +OPENSEARCH_HOST=116.63.207.117:19200 +OPENSEARCH_PASSWORD=UW15/xI9CRFfAexPJWWZ6g + +XXL_JOB_ADMIN_ADDRESS=https://xxljob.byteawake.com/xxl-job-admin +XXL_JOB_ADMIN_PASSWORD=7t/IbuxDLIU + +REDIS_HOST=116.63.207.117:16379 +REDIS_PASSWORD=9P7Alc4bicS/rC992aO45Q diff --git a/template/.gitignore b/template/.gitignore new file mode 100644 index 0000000..a300369 --- /dev/null +++ b/template/.gitignore @@ -0,0 +1,33 @@ +## java +bin/ +classes/ + + +## eclipse +.settings/ +.classpath +.project + +## idea +*.iml +.idea/** +HELP.md +!.idea/dataSources.xml + +## vscode +.vscode/ +.factorypath + +## maven: +target/ +test-output/ + +## system +.DS_Store +logs/ +*.log + +## vs +.vs +modules/** +!modules/.gitkeep diff --git a/template/.gitlab-ci.yml b/template/.gitlab-ci.yml new file mode 100644 index 0000000..e3eedf3 --- /dev/null +++ b/template/.gitlab-ci.yml @@ -0,0 +1,4 @@ +include: + - project: 'internal/gitlab-ci-template' + ref: master + file: '/vs-server-generate-ci.yml' diff --git a/template/.idea/dataSources.xml b/template/.idea/dataSources.xml new file mode 100644 index 0000000..5791137 --- /dev/null +++ b/template/.idea/dataSources.xml @@ -0,0 +1,16 @@ + + + + + mysql.8 + true +{{- if eq .dbType "mysql" }} + com.mysql.cj.jdbc.Driver +{{- else if eq .dbType "postgresql" }} + org.postgresql.Driver +{{- end }} + jdbc:{{ .dbType }}://{{ .db_address }}/{{ .db_database }} + $ProjectFileDir$ + + + diff --git a/template/.mvn/jvm.config b/template/.mvn/jvm.config new file mode 100644 index 0000000..f432c96 --- /dev/null +++ b/template/.mvn/jvm.config @@ -0,0 +1 @@ +-Xmx1536m \ No newline at end of file diff --git a/template/.mvn/wrapper/maven-wrapper.jar b/template/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..cb28b0e37c7d206feb564310fdeec0927af4123a GIT binary patch literal 62547 zcmb5V1CS=sk~Z9!wr$(CZEL#U=Co~N+O}=mwr$(Cds^S@-Tij=#=rmlVk@E|Dyp8$ z$UKz?`Q$l@GN3=8fq)=^fVx`E)Pern1@-q?PE1vZPD);!LGdpP^)C$aAFx&{CzjH` zpQV9;fd0PyFPNN=yp*_@iYmRFcvOrKbU!1a*o)t$0ex(~3z5?bw11HQYW_uDngyer za60w&wz^`W&Z!0XSH^cLNR&k>%)Vr|$}(wfBzmSbuK^)dy#xr@_NZVszJASn12dw; z-KbI5yz=2awY0>OUF)&crfPu&tVl|!>g*#ur@K=$@8N05<_Mldg}X`N6O<~3|Dpk3 zRWb!e7z<{Mr96 z^C{%ROigEIapRGbFA5g4XoQAe_Y1ii3Ci!KV`?$ zZ2Hy1VP#hVp>OOqe~m|lo@^276Ik<~*6eRSOe;$wn_0@St#cJy}qI#RP= zHVMXyFYYX%T_k3MNbtOX{<*_6Htq*o|7~MkS|A|A|8AqKl!%zTirAJGz;R<3&F7_N z)uC9$9K1M-)g0#}tnM(lO2k~W&4xT7gshgZ1-y2Yo-q9Li7%zguh7W#kGfnjo7Cl6 z!^wTtP392HU0aVB!$cPHjdK}yi7xNMp+KVZy3_u}+lBCloJ&C?#NE@y$_{Uv83*iV zhDOcv`=|CiyQ5)C4fghUmxmwBP0fvuR>aV`bZ3{Q4&6-(M@5sHt0M(}WetqItGB1C zCU-)_n-VD;(6T1%0(@6%U`UgUwgJCCdXvI#f%79Elbg4^yucgfW1^ zNF!|C39SaXsqU9kIimX0vZ`U29)>O|Kfs*hXBXC;Cs9_Zos3%8lu)JGm~c19+j8Va z)~kFfHouwMbfRHJ``%9mLj_bCx!<)O9XNq&uH(>(Q0V7-gom7$kxSpjpPiYGG{IT8 zKdjoDkkMTL9-|vXDuUL=B-K)nVaSFd5TsX0v1C$ETE1Ajnhe9ept?d;xVCWMc$MbR zL{-oP*vjp_3%f0b8h!Qija6rzq~E!#7X~8^ZUb#@rnF~sG0hx^Ok?G9dwmit494OT z_WQzm_sR_#%|I`jx5(6aJYTLv;3U#e@*^jms9#~U`eHOZZEB~yn=4UA(=_U#pYn5e zeeaDmq-$-)&)5Y}h1zDbftv>|?GjQ=)qUw*^CkcAG#o%I8i186AbS@;qrezPCQYWHe=q-5zF>xO*Kk|VTZD;t={XqrKfR|{itr~k71VS?cBc=9zgeFbpeQf*Wad-tAW7(o ze6RbNeu31Uebi}b0>|=7ZjH*J+zSj8fy|+T)+X{N8Vv^d+USG3arWZ?pz)WD)VW}P z0!D>}01W#e@VWTL8w1m|h`D(EnHc*C5#1WK4G|C5ViXO$YzKfJkda# z2c2*qXI-StLW*7_c-%Dws+D#Kkv^gL!_=GMn?Y^0J7*3le!!fTzSux%=1T$O8oy8j z%)PQ9!O+>+y+Dw*r`*}y4SpUa21pWJ$gEDXCZg8L+B!pYWd8X;jRBQkN_b=#tb6Nx zVodM4k?gF&R&P=s`B3d@M5Qvr;1;i_w1AI=*rH(G1kVRMC`_nohm~Ie5^YWYqZMV2<`J* z`i)p799U_mcUjKYn!^T&hu7`Lw$PkddV&W(ni)y|9f}rGr|i-7nnfH6nyB$Q{(*Nv zZz@~rzWM#V@sjT3ewv9c`pP@xM6D!StnV@qCdO${loe(4Gy00NDF5&@Ku;h2P+Vh7 z(X6De$cX5@V}DHXG?K^6mV>XiT768Ee^ye&Cs=2yefVcFn|G zBz$~J(ld&1j@%`sBK^^0Gs$I$q9{R}!HhVu|B@Bhb29PF(%U6#P|T|{ughrfjB@s- zZ)nWbT=6f6aVyk86h(0{NqFg#_d-&q^A@E2l0Iu0(C1@^s6Y-G0r32qll>aW3cHP# zyH`KWu&2?XrIGVB6LOgb+$1zrsW>c2!a(2Y!TnGSAg(|akb#ROpk$~$h}jiY&nWEz zmMxk4&H$8yk(6GKOLQCx$Ji-5H%$Oo4l7~@gbHzNj;iC%_g-+`hCf=YA>Z&F)I1sI z%?Mm27>#i5b5x*U%#QE0wgsN|L73Qf%Mq)QW@O+)a;#mQN?b8e#X%wHbZyA_F+`P%-1SZVnTPPMermk1Rpm#(;z^tMJqwt zDMHw=^c9%?#BcjyPGZFlGOC12RN(i`QAez>VM4#BK&Tm~MZ_!#U8PR->|l+38rIqk zap{3_ei_txm=KL<4p_ukI`9GAEZ+--)Z%)I+9LYO!c|rF=Da5DE@8%g-Zb*O-z8Tv zzbvTzeUcYFgy{b)8Q6+BPl*C}p~DiX%RHMlZf;NmCH;xy=D6Ii;tGU~ zM?k;9X_E?)-wP|VRChb4LrAL*?XD6R2L(MxRFolr6GJ$C>Ihr*nv#lBU>Yklt`-bQ zr;5c(o}R!m4PRz=CnYcQv}m?O=CA(PWBW0?)UY)5d4Kf;8-HU@=xMnA#uw{g`hK{U zB-EQG%T-7FMuUQ;r2xgBi1w69b-Jk8Kujr>`C#&kw-kx_R_GLRC}oum#c{je^h&x9 zoEe)8uUX|SahpME4SEog-5X^wQE0^I!YEHlwawJ|l^^0kD)z{o4^I$Eha$5tzD*A8 zR<*lss4U5N*JCYl;sxBaQkB3M8VT|gXibxFR-NH4Hsmw|{={*Xk)%!$IeqpW&($DQ zuf$~fL+;QIaK?EUfKSX;Gpbm8{<=v#$SrH~P-it--v1kL>3SbJS@>hAE2x_k1-iK# zRN~My-v@dGN3E#c!V1(nOH>vJ{rcOVCx$5s7B?7EKe%B`bbx(8}km#t2a z1A~COG(S4C7~h~k+3;NkxdA4gbB7bRVbm%$DXK0TSBI=Ph6f+PA@$t){_NrRLb`jp zn1u=O0C8%&`rdQgO3kEi#QqiBQcBcbG3wqPrJ8+0r<`L0Co-n8y-NbWbx;}DTq@FD z1b)B$b>Nwx^2;+oIcgW(4I`5DeLE$mWYYc7#tishbd;Y!oQLxI>?6_zq7Ej)92xAZ z!D0mfl|v4EC<3(06V8m+BS)Vx90b=xBSTwTznptIbt5u5KD54$vwl|kp#RpZuJ*k) z>jw52JS&x)9&g3RDXGV zElux37>A=`#5(UuRx&d4qxrV<38_w?#plbw03l9>Nz$Y zZS;fNq6>cGvoASa2y(D&qR9_{@tVrnvduek+riBR#VCG|4Ne^w@mf2Y;-k90%V zpA6dVw|naH;pM~VAwLcQZ|pyTEr;_S2GpkB?7)+?cW{0yE$G43`viTn+^}IPNlDo3 zmE`*)*tFe^=p+a{a5xR;H0r=&!u9y)kYUv@;NUKZ)`u-KFTv0S&FTEQc;D3d|KEKSxirI9TtAWe#hvOXV z>807~TWI~^rL?)WMmi!T!j-vjsw@f11?#jNTu^cmjp!+A1f__Dw!7oqF>&r$V7gc< z?6D92h~Y?faUD+I8V!w~8Z%ws5S{20(AkaTZc>=z`ZK=>ik1td7Op#vAnD;8S zh<>2tmEZiSm-nEjuaWVE)aUXp$BumSS;qw#Xy7-yeq)(<{2G#ap8z)+lTi( ziMb-iig6!==yk zb6{;1hs`#qO5OJQlcJ|62g!?fbI^6v-(`tAQ%Drjcm!`-$%Q#@yw3pf`mXjN>=BSH z(Nftnf50zUUTK;htPt0ONKJq1_d0!a^g>DeNCNpoyZhsnch+s|jXg1!NnEv%li2yw zL}Y=P3u`S%Fj)lhWv0vF4}R;rh4&}2YB8B!|7^}a{#Oac|%oFdMToRrWxEIEN<0CG@_j#R4%R4i0$*6xzzr}^`rI!#y9Xkr{+Rt9G$*@ zQ}XJ+_dl^9@(QYdlXLIMI_Q2uSl>N9g*YXMjddFvVouadTFwyNOT0uG$p!rGF5*`1 z&xsKPj&;t10m&pdPv+LpZd$pyI_v1IJnMD%kWn{vY=O3k1sJRYwPoDV1S4OfVz4FB z$^ygjgHCW=ySKSsoSA&wSlq83JB+O-)s>>e@a{_FjB{@=AlrX7wq>JE=n@}@fba(;n4EG| zge1i)?NE@M@DC5eEv4; z#R~0aNssmFHANL@-eDq2_jFn=MXE9y>1FZH4&v<}vEdB6Kz^l)X%%X@E#4)ahB(KY zx8RH+1*6b|o1$_lRqi^)qoLs;eV5zkKSN;HDwJIx#ceKS!A$ZJ-BpJSc*zl+D~EM2 zm@Kpq2M*kX`;gES_Dd1Y#UH`i!#1HdehqP^{DA-AW^dV(UPu|O@Hvr>?X3^~=1iaRa~AVXbj z-yGL<(5}*)su2Tj#oIt+c6Gh}$0|sUYGGDzNMX+$Oi$e&UJt3&kwu)HX+XP{es(S3 z%9C9y({_fu>^BKjI7k;mZ4DKrdqxw`IM#8{Sh?X(6WE4S6-9M}U0&e32fV$2w{`19 zd=9JfCaYm@J$;nSG3(|byYDqh>c%`JW)W*Y0&K~g6)W?AvVP&DsF_6!fG3i%j^Q>R zR_j5@NguaZB{&XjXF+~6m|utO*pxq$8?0GjW0J-e6Lnf0c@}hvom8KOnirhjOM7!n zP#Iv^0_BqJI?hR5+Dl}p!7X}^NvFOCGvh9y*hgik<&X)3UcEBCdUr$Dt8?0f&LSur ze*n!(V(7umZ%UCS>Hf(g=}39OcvGbf2+D;OZ089m_nUbdCE0PXJfnyrIlLXGh2D!m zK=C#{JmoHY1ws47L0zeWkxxV=A%V8a&E^w%;fBp`PN_ndicD@oN?p?Bu~20>;h;W` ztV=hI*Ts$6JXOwOY?sOk_1xjzNYA#40dD}|js#3V{SLhPEkn5>Ma+cGQi*#`g-*g56Q&@!dg)|1YpLai3Bu8a;l2fnD6&)MZ~hS%&J}k z2p-wG=S|5YGy*Rcnm<9VIVq%~`Q{g(Vq4V)CP257v06=M2W|8AgZO0CC_}HVQ>`VU zy;2LDlG1iwIeMj?l40_`21Qsm?d=1~6f4@_&`lp~pIeXnR)wF0z7FH&wu~L~mfmMr zY4_w6tc{ZP&sa&Ui@UxZ*!UovRT})(p!GtQh~+AMZ6wcqMXM*4r@EaUdt>;Qs2Nt8 zDCJi#^Rwx|T|j_kZi6K!X>Ir%%UxaH>m6I9Yp;Sr;DKJ@{)dz4hpG>jX?>iiXzVQ0 zR$IzL8q11KPvIWIT{hU`TrFyI0YQh`#>J4XE*3;v^07C004~FC7TlRVVC}<}LC4h_ zZjZ)2*#)JyXPHcwte!}{y%i_!{^KwF9qzIRst@oUu~4m;1J_qR;Pz1KSI{rXY5_I_ z%gWC*%bNsb;v?>+TbM$qT`_U8{-g@egY=7+SN#(?RE<2nfrWrOn2OXK!ek7v`aDrH zxCoFHyA&@^@m+#Y(*cohQ4B76me;)(t}{#7?E$_u#1fv)vUE5K;jmlgYI0$Mo!*EA zf?dx$4L(?nyFbv|AF1kB!$P_q)wk1*@L0>mSC(A8f4Rgmv1HG;QDWFj<(1oz)JHr+cP|EPET zSD~QW&W(W?1PF-iZ()b|UrnB(#wG^NR!*X}t~OS-21dpXq)h)YcdA(1A`2nzVFax9rx~WuN=SVt`OIR=eE@$^9&Gx_HCfN= zI(V`)Jn+tJPF~mS?ED7#InwS&6OfH;qDzI_8@t>In6nl zo}q{Ds*cTG*w3CH{Mw9*Zs|iDH^KqmhlLp_+wfwIS24G z{c@fdgqy^Y)RNpI7va^nYr9;18t|j=AYDMpj)j1oNE;8+QQ)ap8O??lv%jbrb*a;} z?OvnGXbtE9zt;TOyWc|$9BeSGQbfNZR`o_C!kMr|mzFvN+5;g2TgFo8DzgS2kkuw@ z=`Gq?xbAPzyf3MQ^ZXp>Gx4GwPD))qv<1EreWT!S@H-IpO{TPP1se8Yv8f@Xw>B}Y z@#;egDL_+0WDA)AuP5@5Dyefuu&0g;P>ro9Qr>@2-VDrb(-whYxmWgkRGE(KC2LwS z;ya>ASBlDMtcZCCD8h+Awq1%A|Hbx)rpn`REck#(J^SbjiHXe-jBp!?>~DC7Wb?mC z_AN+^nOt;3tPnaRZBEpB6s|hCcFouWlA{3QJHP!EPBq1``CIsgMCYD#80(bsKpvwO)0#)1{ zos6v&9c=%W0G-T@9sfSLxeGZvnHk$SnHw57+5X4!u1dvH0YwOvuZ7M^2YOKra0dqR zD`K@MTs(k@h>VeI5UYI%n7#3L_WXVnpu$Vr-g}gEE>Y8ZQQsj_wbl&t6nj{;ga4q8SN#Z6cBZepMoyv7MF-tnnZp*(8jq848yZ zsG_fP$Y-rtCAPPI7QC^nzQjlk;p3tk88!1dJuEFZ!BoB;c!T>L>xSD<#+4X%*;_IB z0bZ%-SLOi5DV7uo{z}YLKHsOHfFIYlu8h(?gRs9@bbzk&dkvw*CWnV;GTAKOZfbY9 z(nKOTQ?fRRs(pr@KsUDq@*P`YUk4j=m?FIoIr)pHUCSE84|Qcf6GucZBRt;6oq_8Z zP^R{LRMo?8>5oaye)Jgg9?H}q?%m@2bBI!XOOP1B0s$%htwA&XuR`=chDc2)ebgna zFWvevD|V882V)@vt|>eeB+@<-L0^6NN%B5BREi8K=GwHVh6X>kCN+R3l{%oJw5g>F zrj$rp$9 zhepggNYDlBLM;Q*CB&%w zW+aY{Mj{=;Rc0dkUw~k)SwgT$RVEn+1QV;%<*FZg!1OcfOcLiF@~k$`IG|E8J0?R2 zk?iDGLR*b|9#WhNLtavx0&=Nx2NII{!@1T78VEA*I#65C`b5)8cGclxKQoVFM$P({ zLwJKo9!9xN4Q8a2F`xL&_>KZfN zOK?5jP%CT{^m4_jZahnn4DrqgTr%(e_({|z2`C2NrR6=v9 z*|55wrjpExm3M&wQ^P?rQPmkI9Z9jlcB~4IfYuLaBV95OGm#E|YwBvj5Z}L~f`&wc zrFo!zLX*C{d2}OGE{YCxyPDNV(%RZ7;;6oM*5a>5LmLy~_NIuhXTy-*>*^oo1L;`o zlY#igc#sXmsfGHA{Vu$lCq$&Ok|9~pSl5Q3csNqZc-!a;O@R$G28a@Sg#&gnrYFsk z&OjZtfIdsr%RV)bh>{>f883aoWuYCPDP{_)%yQhVdYh;6(EOO=;ztX1>n-LcOvCIr zKPLkb`WG2;>r)LTp!~AlXjf-Oe3k`Chvw$l7SB2bA=x3s$;;VTFL0QcHliysKd^*n zg-SNbtPnMAIBX7uiwi&vS)`dunX$}x)f=iwHH;OS6jZ9dYJ^wQ=F#j9U{wJ9eGH^#vzm$HIm->xSO>WQ~nwLYQ8FS|?l!vWL<%j1~P<+07ZMKkTqE0F*Oy1FchM z2(Nx-db%$WC~|loN~e!U`A4)V4@A|gPZh`TA18`yO1{ z(?VA_M6SYp-A#%JEppNHsV~kgW+*Ez=?H?GV!<$F^nOd+SZX(f0IoC#@A=TDv4B2M z%G-laS}yqR0f+qnYW_e7E;5$Q!eO-%XWZML++hz$Xaq@c%2&ognqB2%k;Cs!WA6vl z{6s3fwj*0Q_odHNXd(8234^=Asmc0#8ChzaSyIeCkO(wxqC=R`cZY1|TSK)EYx{W9 z!YXa8GER#Hx<^$eY>{d;u8*+0ocvY0f#D-}KO!`zyDD$%z1*2KI>T+Xmp)%%7c$P< zvTF;ea#Zfzz51>&s<=tS74(t=Hm0dIncn~&zaxiohmQn>6x`R+%vT%~Dhc%RQ=Cj^ z&%gxxQo!zAsu6Z+Ud#P!%3is<%*dJXe!*wZ-yidw|zw|C`cR z`fiF^(yZt?p{ZX|8Ita)UC$=fg6wOve?w+8ww|^7OQ0d zN(3dmJ@mV8>74I$kQl8NM%aC+2l?ZQ2pqkMs{&q(|4hwNM z^xYnjj)q6uAK@m|H$g2ARS2($e9aqGYlEED9sT?~{isH3Sk}kjmZ05Atkgh^M6VNP zX7@!i@k$yRsDK8RA1iqi0}#Phs7y(bKYAQbO9y=~10?8cXtIC4@gF#xZS;y3mAI`h zZ^VmqwJ%W>kisQ!J6R?Zjcgar;Il%$jI*@y)B+fn^53jQd0`)=C~w%Lo?qw!q3fVi{~2arObUM{s=q)hgBn64~)W0tyi?(vlFb z>tCE=B1cbfyY=V38fUGN(#vmn1aY!@v_c70}pa(Lrle-(-SH8Nd!emQF zf3kz0cE~KzB%37B24|e=l4)L}g1AF@v%J*A;5F7li!>I0`lfO9TR+ak`xyqWnj5iwJ$>t_vp(bet2p(jRD;5Q9x2*`|FA4#5cfo8SF@cW zeO{H7C0_YJ*P@_BEvm2dB}pUDYXq@G1^Ee#NY9Q`l`$BUXb01#lmQk^{g3?aaP~(* zD;INgi#8TDZ&*@ZKhx$jA^H-H1Lp`%`O{Y{@_o!+7ST}{Ng^P;X>~Bci{|Qdf1{}p z_kK+zL;>D30r6~R?|h!5NKYOi6X&I5)|ME+NG>d9^`hxKpU^)KBOpZiU^ z;|SzGWtbaclC-%9(zR-|q}kB8H&($nsB1LPAkgcm+Qs@cAov{IXxo5PHrH(8DuEMb z3_R#>7^jjGeS7$!`}m8!8$z|)I~{dhd)SvoH9oR9#LjO{{8O&r7w{d9V1z^syn&E6 z{DG0vlQF_Yb3*|>RzVop^{$mWp|%NDYj@4{d*-@O^<(=L=DMFIQHEp-dtz@1Rumd; zadt^4B#(uUyM6aeUJkGl0GfaULpR!2Ql&q$nEV^+SiDptdPbuJ=VJ)`czZ@&HPUuj zc5dSRB&xk)dI~;6N?wkzI}}4K3i%I=EnlKGpPJ9hu?mNzH7|H0j(mN3(ubdaps3GM z1i+9gk=!$mH=L#LRDf4!mXw0;uxSUIXhl|#h*uK+fQPilJc8RCK9GNPt=X^8`*;3$ zBBo77gkGB5F8a8)*OR10nK&~8CEMPVQyhY>i`PS{L^-*WAz$ljtU%zlG1lm%%U4Zw zms0oZR8b|`>4U1X*9JLQQ>m9MF5%ppoafz^;`7DbmmIENrc$hucekkE4I83WhT%(9 zMaE;f7`g4B#vl(#tNP8$3q{$&oY*oa0HLX6D?xTW3M6f<^{%CK4OE1Pmfue`M6Dh= z&Z-zrq$^xhP%|hU&)(+2KSSpeHgX^0?gRZ5wA8@%%9~@|*Ylux1M{WQ4ekG(T+_b` zb6I)QRGp%fRF)^T?i^j&JDBhfNU9?>Sl6WVMM%S?7< ze|4gaDbPooB=F4Y=>~_+y~Q1{Ox@%q>v+_ZIOfnz5y+qy zhi+^!CE*Lv-}>g^%G=bGLqD(aTN;yHDBH#tOC=X02}QU~Xdme``Wn>N>6{VwgU~Z>g+0 zxv0`>>iSfu$baHMw8(^FL6QWe;}(U>@;8j)t)yHAOj?SdeH;evFx-kpU@nT>lsrUt zqhV}2pD^5bC4786guG1`5|fK@pE6xcT#ns)vR|^?A08G62teHaE&p`ZrCBj_Swt*~dVt=5*RK6Y{% zABqK$X59BnrK3r3u=wxklRnA1uh+q`?T0kE1YhvDWF4OY#<(+V|R@R%tdkq2huF(!Ip+EpZF3zr*|9pmKHPo)Cu z;H+^s&`Ql}u=Jt~ZWj`bAw|i-3#7(2WuRU3DU{BW8`?!O?YO1M$*MMTsaEM!5Jyp~ z!gp6yR4$O%wQ8%dyz43ZPeoJwy;o;yg=S0^Y}%|)to>=N^`!3VMf1~}OZ`Dl$q&|w z9$!i3!i1uAgPTuKSWdBrDr*N$g=E#mdqfj*h;Z}OG`{n245+g;IKfdn!&gF2OtHaD zyGDzj@@d2!P(_Ux)3v;1ABTj__{w*kaRF-1YVU`})Acgk?(T*1YqEve3=5)8bkZK* z!Tus*e$h@^u z>#zV0771Bix~r&h2FJ9)%N{>s>?2tk1$bId)1#G;OKgn-U8jUo^AK;Hu)hQEi}swD(264kAS-SBCD$R(Ro0rh8~Le zzRwxbz_JHDbD+hTX15AWmVw!#rC)-zeZahQQmo6FG1)ah3uuyIuTMof}RO!`Y3^Fxn_-G$23RDOh(@NU?r6`*S?#E50)w zpcsgDZ-iO{;EesgDQq9;p*C#QH(sp~2w^zAJWaUL%@yo)iIL6y8;e_}=dwQc%k%;H zFt5lenH*`}LWd+fPqi;exJeRZgl&nLR%|a!%1x0RQ54cgyWBYrL>sskcAtPxi&8c( zw_K?sI*3n%S;lKiYpveBN08{rgV&-B1NN5Jiu07~%n#%&f!(R(z1)xsxtRBkg#+Lv zh21zX?aYDd_f}qdA`Os*j!eC<5)iUJ&Twj7?*p%vEOGElGhpRZsccM!<k}DeC;TY;rULQs3e}lZyP#UVb=6 zB$Dkm2FaHWUXr7<{R&46sfZ)&(HXxB_=e`%LZci`s7L6c-L7iF&wdmTJz`*^=jD~* zpOZ@jcq8LezVkE^M6D9^QgZqnX&x*mr1_Cf#R9R3&{i3%v#}V$UZzGC;Or*=Dw5SXBC6NV|sGZp^#%RTimyaj@!ZuyJ z6C+r}O1TsAzV9PAa*Gd!9#FQMl)ZLHzTr99biAqA(dz-m9LeIeKny3YB=*+|#-Gq# zaErUR5Z*Wh^e<+wcm70eW;f-g=YTbMiDX)AznDM6B73)T4r%nq+*hKcKF?)#vbv?K zPMe=sFCuC*ZqsBPh-?g!m*O`}6<}Pfj}Y1n9|Y@cUdD5GX_)6Sx9pPfS7 zxkt?g6ZwJ+50C7qrh6dMFmr7qah`FskT_H=GC92vkVh$WfZa2%5L99_DxyM{$#6HQ zx$VR-Wwt!q9JL2{ybEGJr$^?!V4m_BqDqt!mbs=QjHf340+^a{)waVvP0+98(BA$M ztWr&sM=juyYgvf`(SC}+y@QtYgU>0ghJ6VbU}|kEraR&&W%#;!#KI?le%g`e>ZVPiDrneh#&1(Y?uiMo^f5qo@{JEr(p9>8GhDa+PC9yG;lX+D?hQ^fZB&Sdox219zUj_5;+n<0@Wi3@DK`MU8FM!OFJ z8*_mTA-u!Ab#95FRVWTIqAL#BVQGxE_s?>Ql|@0o9vos&r<_4d!+Q6(_270)6#lu$ zV!j$a?_V0I<(3Z=J7C-K0a^Kc1Go9p&T6yQeAD+)dG-$a&%Fo0AOte~_Z&_m2@ue~ z9cKFf-A41Dz31Ooj9FSR`l?H5UtdP?JS=UU$jF#znE1k@0g%K?KQuwZkfDI3Ai)(q z#x_Yo6WR_Y@#6I_02S&NpcP<%sw!!M_3#*8qa+*4rS@x=i{-2K#*Qr)*Q$-{<_(<| z0730e+rubnT38*m;|$-4!1r6u&Ua2kO_s-(7*NGgDTe##%I>_9uW;X__b_k)xlv$; zW%K2hsmr>5e^Z~`tS-eUgWmSF9}Yg8E}qydSVX0nYZMX_x94QK?tw2>^;raVTqstR zIrNAX2`X~|h->dTOb9IrA!i5INpLV}99ES|i0ldzC`;R$FBY5&7+TIy8%GO8SZ37_ zw=^Swk?z+j-&0-cTE|LU0q@IKRa&C6ZlXbSa2vN5r-)*f<3{wLV*uJUw980AFkWN7 zKh{?97GmVu-0rs9FB6ludy|n`gN5p~?y51aJzBg6#+-=0pWdZ2n4xTiQ=&3As-!-6 zFlb|ssAJEJL#s8(=odfz8^9b#@RrvNE4gjuEITzAd7R4+rq$yEJKXP?6D@yM7xZ&^ z@%jnE3}bteJo{p(l`hu`Yvzg9I#~>(T;>c;ufeLfc!m3D&RaQS=gAtEO-WbI+f_#| zaVpq-<%~=27U8*qlVCuI6z9@j)#R!z3{jc>&I(qT-8IBW57_$z5Qm3gVC1TcWJNc% zDk?H3%QHno@fu9nT%L^K)=#sRiRNg|=%M zR;8BE)QA4#Dsg^EakzttRg9pkfIrF3iVYVM#*_+#3X+~qeZc^WQJvEyVlO@9=0pl!ayNOh|{j0j^a z+zi_$_0QKhwArW)sJ$wji;A`?$ecbr?(4x5%2pLgh#wggbt)#T^2R3a9m+>GcrUxU z*u-WTgHAN*e!0;Wa%1k)J_P(Vdp>vwrROTVae@6Wn04q4JL-)g&bWO6PWGuN2Q*s9 zn47Q2bIn4=!P1k0jN_U#+`Ah59zRD??jY?s;U;k@%q87=dM*_yvLN0->qswJWb zImaj{Ah&`)C$u#E0mfZh;iyyWNyEg;w0v%QS5 zGXqad{`>!XZJ%+nT+DiVm;lahOGmZyeqJ-;D&!S3d%CQS4ZFM zkzq5U^O|vIsU_erz_^^$|D0E3(i*&fF-fN}8!k3ugsUmW1{&dgnk!|>z2At?h^^T@ zWN_|`?#UM!FwqmSAgD6Hw%VM|fEAlhIA~^S@d@o<`-sxtE(|<><#76_5^l)Xr|l}Q zd@7Fa8Bj1ICqcy2fKl1rD4TYd84)PG5Ee2W4Nt@NNmpJWvc3q@@*c;~%^Vasf2H`y z+~U-19wtFT?@yIFc4SE_ab?s@wEUfSkOED}+qVjjy>=eac2^S^+|_3%cjH%EUTJ&r znp9q?RbStJcT*Vi{3KDa^jr4>{5x+?!1)8c2SqiCEzE$TQ+`3KPQQnG8_Qk<^)y_o zt1Q^f{#yCUt!1e(3;E6y?>p+7sGAYLp`lA3c~Y`re9q&`c6>0?c0E2Ap5seFv92#X z1Vldj!7A8@8tWr&?%;EBQ_Fwd)8A3!wIx`V!~~h(!$pCy7=&*+*uIzG@*d%*{qG#4 zX0^}}sRN^N=p{w(+yjv%xwb!%lnVTE7l1l6gJwQmq_G83J&Y98$S!r*L8}IiIa2E= zE!0tbOuEDb*No0-KB{zjo1k#_4FHtr{!)>o+Y@bll}Sa6D^xktI0H&l{jKAK)A(iz zB-N00F?~Z}Y7tG+vp)-q*v71(C}65$-=uXx^|R$xx9zZip-V>Hqeyfd(wteM)+!!H z$s+>g4I@+`h2>C|J;PhvtOq)`xm4;CyF}R<)!ma3T{Vf_5|zo;D4YI4ZDBkE(vMeE zb#ZV;n}CgA0w8x!UC2&5Z(K)9bibj#?~>R(72lFx_Am~jS?;7mo~p+05~XGD+(wV4 zEVYnf0N5+-7O+Gc1L!sPGUHv<6=cV8}*m$m`kBs@z zy;goR(?J^JrB7uXXpD00+SD0luk!vK3wwp(N%|X!HmO{xC#OMYQ&a7Yqv-54iEUK4 zVH;)rY6)pUX~ESvQK^w|&}>J{I?YlvOhpMgt-JB}m5Br`Q9X+^8+Xa%S81hO<1t#h zbS+MljFP1J0GGNR1}KwE=cfey%;@n&@Kli+Z5d>daJjbvuO3dW{r$1FT0j zR$c9$t~P50P+NhG^krLH%k}wsQ%mm+@#c;-c9>rYy;8#(jZ|KA8RrmnN2~>w0ciU7 zGiLC?Q^{^Ox-9F()RE^>Xq(MAbGaT0^6jc>M5^*&uc@YGt5Iw4i{6_z5}H$oO`arY z4BT(POK%DnxbH>P$A;OWPb@gYS96F7`jTn6JO@hdM za>_p!1mf?ULJZb1w-+HamqN__2CtI%VK`k^(++Ga0%z*z@k0wYJDqT^)~%|4O299; zh1_iRtc7you(kOK8?Q$R7v-@Qk4+i=8GD2_zI0%{Ra`_prF{+UPW^m5MCA&4ZUpZb z2*!)KA8b--Upp~U%f+rsmCmV~!Y>Gzl#yVvZER2h;f&rkdx{r#9mc8DZMJaQXs?SL zCg3#>xR6ve8&YkP*`Z=lng|Ow+h@t*!Ial*XQg3P;VS8@E1C)VS`?L9N+rxlD7bxC z3@Ag)Vu?#ykY`ND+GvRYTUP&-KDMiqly$Z~uFXt^)4Jjk9RIs*&$?-UPM*d7&m${m zm12kaN3mV1J|c6f$>V+{lvHp~XVW3DU0;cBR>7|)4bo{xa1-ts-lYU-Q-b)_fVVl`EP5X}+J9EzT20x8XIv=m7witdu7!3Lh=KE#OyKpT1GWk{YAo^ny|fvZt<+jmsFs=l*%e& zmRkBt5ccv4O7!HAyv2~rsq*(FmMTm?@TX3&1`nu|7C^F{ad%GLuoX}Rl}6`)uHF_xlx^gVca+mGH4T8u8;q{S*x3=j;kelz^atO~)v!Q_BT z4H6%IA}bvfuk0_vweELeEl8N5w-Q1GF!@f{VKnbyYB2?}d&QvI-j}~RI_+9t9$tC2 z94m=3eLi=sQb^S5;fqP?3aaXc&`}`lq z&M8dOXvxx9Y1^u_ZQHhO+qP}nwkvJhwoz$Mp6Qcq^7M#eWm}!3U@s07hop` zW24|J{t$aB`W>uBTssEvYMyi$hkaOqWh+^(RV_1MYnE0XPgW?7sBDk=Cqs(;$qrPEflqa0ZE?A3cBfW%0RPA235Wb6@=R_d>Sez; z`spwa50bq?-zh+id~Q!T`AYn`$GHzs;jxIw(A1_Ql&f|qP}|bon#H;sjKmSDM!nyn z>bU8l%3DB3F+$}|J^da!!pN|DO!Ndc2J)wMk!+Rr1hes#V}5o(?(yQSphn|9_aU<- zn|nsDS{^x&tweP;Ft`2ur>Koo2IdXJDsr6IN)7vB41Yy-^Wbo9*2th2QA@C zE0-0Gk12YOO?d_Guu6b3&(PIL`d zh4{`k54hu9o%v1K3PGuccez-wdC<&2fp)>`qIIaf)R{5un7-vwm=>LD7ibnJ$|KyE zzw`X*tM0S|V(I3vf454PY{yA5lbE+36_<1kd=&0Xy4jfvUKZ0$Jq!AG4KS7DrE9rph;dK^6*#CIU9qu7 z?)6O`TN&MCWGmUVd1@E2ow2`vZ1A#nGo8_n!dmX77DCgAP1va*ILU+!a&$zdm6Pa6 z4#|*&3dM+r_RJb%!0}7X!An&T4a4@ejqNJ;=1YVQ{J6|oURuj8MBZ8i7l=zz%S4-; zL}=M^wU43lZVwNJgN|#xIfo$aZfY#odZ6~z?aNn=oR1@zDb=a(o3w`IGu&j>6lYxL z&MtqINe4Z>bdsHNkVIu$Dbq0wc#X-xev221e~L zbm8kJ(Xzij$gF4Ij0(yuR?H1hShSy@{WXsHyKtAedk4O!IdpR{E32Oqp{1TD{usJi zGG@{3A$x%R*pp8b$RQo4w&eDhN`&b~iZ2m3U>@9p1o5kXoEVmHX7I6Uw4dn((mFw` zilWrqFd=F5sH$&*(eJB52zaLwRe zz`sruIc=Ck75>v5P5kd>B2u=drvGPg6s&k5^W!%CDxtRO)V6_Y_QP{%7B>E~vyMLG zhrfn8kijyK&bX+rZsnSJ26!j$1x+V!Pyn|ph%sXWr9^f&lf|C;+I^Fi_4;`-LJI&F zr;5O@#4jZX=Yaw0`pUyfF4J8A9wE#7_9!X|_s8~YUzWu&#E^%4NxUA3*jK-F5R3LP2|msHBLmiMIzVpPAEX)2 zLKYjm3VI4r#7|nP^}-}rL+Q4?LqlmBnbL+R8P%8VmV{`wP0=~2)LptW_i682*sUR# z+EifOk_cWVKg-iWr^Qf4cs^3&@BFRC6n0vu{HqZzNqW1{m)3K@gi$i}O(hT`f#bT- z8PqCdSj~FncPNmMKl9i9QPH1OMhvd42zLL~qWVup#nIJRg_?7KQ-g3jGTt5ywN;Qx zwmz4dddJYIOsC8VqC2R%NQ>zm=PJH70kS|EsEB>2Otmtf-18`jUGA6kMZL3vEASDN zNX%?0+=vgsUz!dxZ@~)eU17m4pN3xGC0T;#a@b9Iu0g_v*a3|ck^s_DVA^%yH-wt= zm1)7&q6&Rq#)nc9PQ6DKD{NU=&ul10rTiIe!)x^PS~=K(wX9|?k&{Mv&S$iL9@H7= zG0w~UxKXLF003zJ-H%fGA4Db9{~#p&Bl7ki^SWwv2sfoAlrLMvza)uh;7Aa_@FL4b z4G>`j5Mn9e5JrrN#R$wiB(!6@lU@49(tawM&oma6lB$-^!Pmmo;&j57CDmKi)yesg~P;lJPy9D(!;n;^1ql)$5uYf~f z&GywSWx=ABov_%8pCx=g-gww_u26?5st=rdeExu?5dvj^C?ZZxDv@Si^nX~2qA&K= z2jr;{=L(x~9GLXrIGXs>dehU^D}_NMCMegdtNVWyx)8xHT6Qu!R>?%@RvADs9er;NMkweUBFNrBm1F5e0_>^%CwM6ui}K_MpRqLS0*@lAcj zB6TTCBv>w2qh)qU3*kN+6tPmMQx|5Z0A4n67U-nss90Ec_rDF}r)IR4PE{$8;BSt= zT%6|jyD^(w6a*A5>_|TkMqx~e$n@8{`q?|)Q&Y4UWcI!yP-8AwBQ#P`%M&ib;}pli z9KAPU_9txQ3zOM#(x}*lN8q$2(Tq1yT4RN0!t~|&RdQMXfm!81d0ZuyD}aG3r4+g` z8Aevs3E_ssRAMR+&*Q30M!J5&o%^(3$ZJ=PLZ9<@x^0nb>dm17;8EQJE>hLgR(Wc% zn_LXw|5=b$6%X zS~ClDAZ?wdQrtKcV9>_v1_IXqy)?<@cGGq#!H`DNOE1hb4*P_@tGbMy6r@iCN=NiA zL1jLwuMw&N-e9H(v7>HGwqegSgD{GSzZ@sZ?g5Y`fuZ^X2hL=qeFO(;u|QZl1|HmW zYv+kq#fq_Kzr_LaezT zqIkG6R+ve#k6!xy*}@Kz@jcRaG9g|~j5fAYegGOE0k8+qtF?EgI99h*W}Cw z7TP&T0tz4QxiW!r zF4?|!WiNo=$ZCyrom-ep7y}(MVWOWxL+9?AlhX<>p||=VzvX`lUX(EdR^e5m%Rp_q zim6JL6{>S%OKoX(0FS>c1zY|;&!%i-sSE>ybYX3&^>zb`NPj7?N^ydh=s=0fpyyz% zraFILQ17_9<ettJJt~I+sl=&CPHwz zC9dEb#QFQcY?bk11Y=tEl{t+2IG`QFmYS>ECl;kv=N6&_xJLQt>}ZQiFSf+!D*4Ar zGJ~LFB7e_2AQaxg*h{$!eJ6=smO(d2ZNmwzcy3OG@)kNymCWS44|>fP^7QkJHkE9JmLryhcxFASKb4GYkJ|u^Fj=VdF0%6kgKllkt zC|_ov2R4cJ2QjjYjT6jE#J1J<xaNC>Xm;0SX<`LuW*}*{yQ3c9{Zl=<9NP z^2g5rAdO!-b4XfeBrXa4f{M0&VDrq+ps&2C8FYl@S59?edhp~7ee>GR$zQI4r8ONi zP^OA+8zrTAxOMx5ZBS03RS@J_V`3{QsOxznx6Yt*$IuEd3%R|Ki&zZkjNvrxlPD$m z%K+rwM!`E&Z46ogXCu!3 z8use`FJJ?g_xi?~?MxZYXEu=F=XTC8P3{W*CbG3Wk)^31nD~W>*cJ@W4xg%Qqo7rq z`pUu8wL!6Cm~@niI*YmQ+NbldAlQRh?L!)upVZ)|1{2;0gh38FD&8h#V{7tR&&J}I zX1?;dBqK}5XVyv;l(%?@IVMYj3lL4r)Wx9$<99}{B92UthUfHW3DvGth^Q0-=kcJ1 z!*I9xYAc$5N$~rXV>_VzPVv`6CeX(A_j3*ZkeB~lor#8O-k+0OOYzTkri@PVRRpOP zmBV|NKlJT?y4Q82er)@lK&P%CeLbRw8f+ZC9R)twg5ayJ-Va!hbpPlhs?>297lC8 zvD*WtsmSS{t{}hMPS;JjNf)`_WzqoEt~Pd0T;+_0g*?p=dEQ0#Aemzg_czxPUspzI z^H5oelpi$Z{#zG$emQJ#$q#|K%a0_x5`|;7XGMuQ7lQB9zsnh6b75B9@>ZatHR_6c z0(k}`kfHic{V|@;ghTu>UOZ_jFClp>UT#piDniL(5ZNYXWeW0VRfBerxamg4su5<; z(}Ct2AhR@I-ro0}DdZLRtgI@dm+V`cRZjgV-H+aXm5|Mgz`aZX63i<|oHk-E)cABn z0$NR?(>fla7)Ong28FZSi9Yk0LtYl5lZw5wT!K5=fYT$avgkMKJWx~V#i@7~6_{dM zxDDPIW2l{O2Elv#i^cjYg~lGHRj(W*9gD`(FILKY$R`tL2qo&rtU*c;li!V`O$aV{ z!m|n!FAB2>MR_FVN*Ktv5+2dW4rr3YmfEheyD+48%USM#q6)w%#2}~=5yZE1LLcth zF%VtefH&#AcMx7)JNC$P>~OFuG6sK}F7V$D7m!{ixz&inpAVpFXiu^QruAw@Sc7Y2 z_A^V(2W_+KTGRp2aQSMAgyV#b3@{?5q@hPEP6oF3^}|@8GuD6iKbX;!LI!L=P#Za zL$Zuv#=x3fseRMZ()#SQcXv->xW`C|6quwqL1M&KByBj z2V`}(uL4JB-hUs6304@%QL~S6VF^6ZI=e-Nm9Tc^7gWLd*HM-^S&0d1NuObw-Y3e> zqSXR3>u^~aDQx>tHzn9x?XRk}+__h_LvS~3Fa`#+m*MB9qG(g(GY-^;wO|i#x^?CR zVsOitW{)5m7YV{kb&Z!eXmI}pxP_^kI{}#_ zgjaG)(y7RO*u`io)9E{kXo@kDHrbP;mO`v2Hei32u~HxyuS)acL!R(MUiOKsKCRtv z#H4&dEtrDz|MLy<&(dV!`Pr-J2RVuX1OUME@1%*GzLOchqoc94!9QF$QnrTrRzl`K zYz}h+XD4&p|5Pg33fh+ch;6#w*H5`@6xA;;S5)H>i$}ii2d*l_1qHxY`L3g=t? z!-H0J5>kDt$4DQ{@V3$htxCI;N+$d^K^ad8q~&)NCV6wa5(D${P!Y2w(XF!8d0GpJ zRa=xLRQ;=8`J2+A334};LOIhU`HQ*0v4Upn?w|sciL|{AJSrG_(%-(W9EZb%>EAGG zpDY?z1rQLps`nbCtzqJ#@wxU4}(j!ZQ{`g`g*SXlLah*W9 zyuh)UWoRCknQtd~Lk#BT_qjwj&Kw8U)w=owaJ;A5ae}3)y>{neYNS`|VHJdcSEBF# zBJ6a;T)u;^i#L~LVF-X7!E$SggILXMlsEy~v}K*DM2)f@U~g|Q6I-Pss@)`>fgFWx zsq&7pe!|VA-h;@=fBF{(mR1^{1>ukTYUdyF^#A+(|I_&nm{_xaKn3h4&yMyym2k-wMFg(s@ez=DPmuB%`| z6;e@HQKB(|!PU1sW)W6~x|=8m6rL~4dQ9LTk|RzL-_(_77B4I~ZG=q7K%qHiv!FD8 zmt;Vnhb{ymaydv2V;X-5p zTt2ln?kaB9&(dH_X70^@rrCfz)nwfa9LYTHXO(IPcTEf$QiEhTpl??L+`Eetyqof8 zzl=q)?KdYni!C_9b8Z3xm7r5<5ZG-0uA`u^7Dm7k4mAsQ(rkoWy*^DZJa~#y6+hNG zh?7{D9$a9LS`a@SvZ5?C{JUHovWU9KI}z8YV4pWftx21v*Q;MpU{+b@>Or(}pwO^fu0qA3_k_Bo2}lIxvmMhucG-o>O=+R6YxZ zjs!o%K1AA*q#&bs@~%YA@C;}?!7yIml1`%lT3Cvq4)%A)U0o1)7HM;mm4-ZZK2`Lj zLo?!Kq1G1y1lk>$U~_tOW=%XFoyIui^Cdk511&V}x#n4JeB7>bpQkYIkpGQRHxH$L z%tS=WHC~upIXSem>=TTv?BLsQ37AO88(X+L1bI<;Bt>eY!}wjYoBn#2RGEP49&ZH-Z_}R_JK_ z>o*_y!pOI6?Vf*{x-XT;^(_0}2twfk`*)_lLl0H-g|}BC?dm7CU|^-gNJ~rx z($>97WTKf71$?2|V$Ybpf~Aj@ZZOcb3#uRq51%4^ts-#RMrJhgm|K3QpCsPGW=2dZ zAr5-HYX!D*o#Q&2;jL%X?0{}yH}j*(JC4ck;u%=a_D6CrXyBIM&O#7QWgc?@7MCsY zfH6&xgQmG$U6Miu$iF(*6d8Mq3Z+en_Fi`6VFF=i6L8+;Hr6J zmT=k0A2T{9Ghh9@)|G5R-<3A|qe_a#ipsFs6Yd!}Lcdl8k)I22-)F^4O&GP&1ljl~ z!REpRoer@}YTSWM&mueNci|^H?GbJcfC_Y@?Y+e4Yw?Qoy@VLy_8u2d#0W~C6j(pe zyO6SqpGhB-;)%3lwMGseMkWH0EgErnd9a_pLaxbWJug8$meJoY@o-5kNv&A$MJZ=U z^fXPLqV6m3#x%4V*OYD zUPS&WHikdN<{#Yj|EFQ`UojD4`Zh*CZO4Cv`w^&*FfqBi`iXsWg%%a< zk@*c%j1+xib(4q^nHHO^y5d8iNkvczbqZ5;^ZVu%*PJ!O?X-CoNP*&tOU!5%bwUEw zQN?P*a=KKlu{`7GoA}DE=#nDibRgecw>-*da~7&wgow}|DyCJq!-Lp8a~(zR@tO1 zgu(4s4HptPGn(HmN2ayYs@g+yx1n`nU3KM{tQHhMHBw7f#gwru$=C()`aKZAl^dYc ze7fC)8EZEXOryk6AD&-4L+4cJ&M@3;;{R)mi4=`ti7IZByr^|_HNsjcNFu?mIE)jD za2j)FPwRY!R_YR-P?URm0Pti*e#5jmfK)6EvaKCT{h)kbJl{AGr1Ekt}pG?^e z*botRf-RsB8q10BTroj{ZP**)2zkXTF+{9<4@$aNDreO7%tttKkR3z`3ljd?heAJEe<0%4zYK?};Ur*!a>PbGYFFi(OF-%wyzbKeBdbkjv^i9mn@UocSS z4;J%-Q$l`zb&r*Pb`U;3@qkc=8QaPE9KwmlVwAf01sa*uI2*N`9U^3*1lLsM9dJ(4 zZBkU}os|5YT#Z;PD8xVv!yo$-n{-n4JM5ukjnTciniiT`(cZ6sD6~67e5_?8am%!w zeCLUxq~7x-!Xg#PgKV&caC@7mu<86am{WaXo(lAemt4~I$utSp(URWpYNo$RvU*$N z#%iiA+h`(E;BUg;=I!#EaxO89bUK3*v5Nc3GPmURC5TqzC|))DsFNtJICH6oBW6#q z+B(N{ey+^mk_{!@ z)VhAWXG=_0j|0f9iJ;c404PiIFqK)(AD05Xh`Fk`r$^b`v+>*g+_+h@r)e+ELJ45) z?20~u<}HQyQ5AsBz(teF9!!_GLXnm{5Z0e{Ki*@!=&3x4-RcjBn##DDzHJ|KSZ5(E z9=tFZ)p~-}x%9sCY27)2i>(E-^OiYT?_)a;yXAGR$y+E`myMd;xDA#_Q49t*E}&ql#H~|x z2J2R1_#2lt91NnF!uqW%_=HlbF?A{B{n>}9$g5QF!bh_a7LTU~Jyz}7>W5{_LAov{ zy2_dmGy)d)&7^bJyUjEw%3xj{cuG0Eo zwL*XQB*Oi=r&HIIecC1%lbE;Y-*5|cL955S+2@uR18JDL<0;;Uc2Q9JEyo1R!!sz_ z#BqnkGfbLP#oQJk3y}nwMd(3Tt^PVA#zXnYF7D0W1)#+`i?@cm}fBkKD z+Mpcuim53|v7;8Tv(KraEyOK`HvJq^;rlNzOjIbW&HJDFqW>doN&j7)`RDv#v|PQ+ z03WnB4Y4X@Fe-@%3;He*FjY1MFmkyv0>64Cp~FIDKQTwmFP~_CxZOf{8gPy}I<=JC zo%_bmue&$UU0|GG%%99eI!m#5Y1MD3AsJqG#gt3u{%sj5&tQ&xZpP%fcKdYPtr<3$ zAeqgZ=vdjA;Xi##r%!J+yhK)TDP3%C7Y#J|&N^))dRk&qJSU*b;1W%t1;j#2{l~#{ zo8QYEny2AY>N{z4S6|uBzYp>7nP_tqX#!DfgQfeY6CO7ZRJ10&$5Rc+BEPb{ns!Bi z`y;v{>LQheel`}&OniUiNtQv@;EQP5iR&MitbPCYvoZgL76Tqu#lruAI`#g9F#j!= z^FLRVg0?m$=BCaL`u{ZnNKV>N`O$SuDvY`AoyfIzL9~ zo|bs1ADoXMr{tRGL% zA#cLu%kuMrYQXJq8(&qS|UYUxdCla(;SJLYIdQp)1luCxniVg~duy zUTPo9%ev2~W}Vbm-*=!DKv$%TktO$2rF~7-W-{ODp{sL%yQY_tcupR@HlA0f#^1l8 zbi>MV~o zz)zl1a?sGv)E}kP$4v3CQgTjpSJo?s>_$e>s2i+M^D5EfrwjFAo(8E%(^ROV0vz0o z-cg0jIk24n!wxZainfH)+?MGu@kg$XgaMY-^H}z^vG~XC7z2;p2Kv`b^3S#b5ssMOJ7724v>S36dD zeypxJ<=E~sD4f5wX060RIF-AR0#{Z z=&y$r8A-e6q18lIF{@O9Mi%dYSYT6erw!@zrl=uj>o(3=M*Bg4E$#bLhNUPO+Mn}>+IVN-`>5gM7tT7jre|&*_t;Tpk%PJL z%$qScr*q7OJ6?p&;VjEZ&*A;wHv2GdJ+fE;d(Qj#pmf2WL5#s^ZrXYC8x7)>5vq_7 zMCL}T{jNMA5`}6P5#PaMJDB2~TVt;!yEP)WEDAoi9PUt89S2Cj?+E0V(=_sv4Vn6b z_kS6~X!G;PKK>vZF@gWpg8Zuh%YX^2UYPdCg7?EH#^gkdOWpy(%RnXyyrhmJT~UJw zAR;%Zgb6z(mS+o9MT|Sc6O({!i0pzk;s9?Dq)%tTW3*XdM3zhPn*`z45$Bg!P4xfy zD*{>30*JsSk?bQ-DgG62v>Vw-w`SA}{*Za7%N(d-mr@~xq5&OvPa*F2Q3Mqzzf%Oe z4N$`+<=;f5_$9nBd=PhPRU>9_2N8M`tT<-fcvc&!qkoAo4J{e3&;6(YoF8Wd&A+>; z|MSKXb~83~{=byCWHm57tRs{!AI<5papN(zKssb_p_WT@0kL0T0Z5#KLbz%zfk?f7 zR!vXBs36XaNcq5usS7<>skM_*P$e*^8y1ksiuokbsGFQ_{-8BAMfu!Z6G=88;>Fxt z|F-RU{=9i6obkTa0k~L#g;9ot8GCSxjAsyeN~1;^E=o5`m%u7dO1C*nn1gklHCBUw z;R(LgZ}sHld`c%&=S+Vx%;_I1*36P`WYx%&AboA1W@P;BvuFW+ng*wh?^aH4-b7So zG?9kFs_6ma85@wo!Z`L)B#zQAZz{Mc7S%d<*_4cKYaKRSY`#<{w?}4*Z>f2gvK`P1 zfT~v?LkvzaxnV|3^^P5UZa1I@u*4>TdXADYkent$d1q;jzE~%v?@rFYC~jB;IM5n_U0;r>5Xmdu{;2%zCwa&n>vnRC^&+dUZKy zt=@Lfsb$dsMP}Bn;3sb+u76jBKX(|0P-^P!&CUJ!;M?R?z7)$0DXkMG*ccBLj+xI) zYP=jIl88MY5Jyf@wKN--x@We~_^#kM2#Xg$0yD+2Tu^MZ1w%AIpCToT-qQbctHpc_ z>Z97ECB%ak;R<4hEt6bVqgYm(!~^Yx9?6_FUDqQQVk=HETyWpi!O^`EZ_5AoSv@VbUzsqusIZ;yX!4CsMiznO}S{4e>^0`c<)c~mC#*{90@+T@%EQ~>bovc8n_$bvqkOU7CrYe8uI5~{3O7EijeX`js z-$LNz4pJA7_V5~JA_Wl*uSrQYSh9Wm($%@jowv^fSPW<~kK&M*hAleywHd?7v{`;Y zBhL2+-O+7QK_)7XOJAbdTV-S`!I)t~GE8z+fV7y;wp#!wj75drv;R*UdSh(}u$%{VSd0gLeFp;h6FkiVz%g=EY3G#>RU;alRy;vQmk*| z@x-ba0XKE%IyL4OYw6IXzMiS(q^UDk=t(#XgkuF`{P?=k8k3r)rmhkv`vg@kiWd34 z-~t+1aV3SabTbG=nQYs>3~E<}{5@0g**LAWi*~SfRZhGcgP{e5T!0M7CU}`f@r8xI z0bx%sI!?5);-wG+Mx&S=NRfIi>V-wP(n&$X0Bhd)qI^ch%96s6&u7qpiK8ijA=X_R zk&|9f$GXf-;VgnrxV83Cp-Q!!sHH`5O^o~qZu!xny1t?(Au(EAn)D??v<1Uo;#m7-M@ovk|()C(`o>QMTp}F?> zakm3bHBKUjH-MHXDow7#Z|@wea1X9ePH;%YA)fCZ9-MD)p^(p!2E`aU9nmJlm;CXQ zkx~$WQ`Yq{1h5k>E>Ex{Z=P=)N*0b8_O({IeKg?vqQ)hk=JHe z5iqUKm!~mLP0fnRwkCO(xxTV@&p+o8wdSP$jZofYP}yEkvSc z5yD-^>04{zTP7X44q9Af&-wgt7k|XtncO&L@y-wFFR44RsPu57FRvIBaI^Pqy_*DV z@i13CsaR5@X@xH=NT3}T`_vsy!a02n80eQqya=-p7#YW`Jc0z!QglGg`1zeg6uXwI zsB~hlNMo)kFL(V3Q1<%8yoI6X7ncn-&&Uh3rL@S(6@wKAXt6Wr=a2ObI7}8$D-FoI z>AJA>WsBEMi5ba6JhJ%9EAi&ocd(ZsD|MsXwu@X;2h#|(bSWu@2{+c7soC`%uo{sMYq&Vyufb)?OI59ds)O+kyE8@G z@tlpNr0UO~}qd0HQve6njJ zda2+l$gdX7AvvGhxM6OToCuQ|Zw|9!g1)O+7>~{KNvASjp9#Cqce-or+y5xdzWL3gLWt2oa+T(I+{j(&bF1laUsJB{fOgE-B}qslaS>C z)TjzG8XecbS%a+?yT!0QmTex?E478;D|sL*oS4C-g0Tq(YoH|eyxJ#1j088C|U-w5id`%Sz7X_w#l+U9+)$|2no<}5J zRb_9@0esSr?n}HvVGbD5@$p$8k4?qOe-GNOk3-K^Mw>Xg+drCKi5@$GTeijpI;;IG ziD<&go`ptLC&^<0jw^l0aY?_pUUK+xp#0Bk66iQ29vpR)VBE{JOJ&OL^gKsN<&t<| zCMLTYMSDG5Ie9O>6Dl#T{@cscz%)}?tC#?rj>iwQ0!YUk~R z$rB-k=fa9x&631Z9Mfqj_GRoS1MzqSMEdaZ2!isP19Sr>qG8!yL(WWF)_&{F)r>KnJGSciSp!P0fqHr+G=fGO02Q#9gHK zpwz+yhpC4w*<9JO@#(MdkZcWbdCO5B!H`Z|nV?UtcBo96$BgX+7VYMwp@b-%;BrJu zMd*K!{1txv{kHKPDs9?WZrz_^o1Tq2P=+=|E=Oy4#WE{>9}*9(apqhmE`&AeBzQgQ zELFLCmb~q|6y0FCt|B}*uI*ayZ#6=$BpGtF{Jfye#Q>FZ?BPnk)*Qmd?rNG^tvFUU z_b&antYsZnUR6Q9tQUy81r$&ovT#fy;(Db4F&M*C=KxQgHDrRcVR#d+ z0(D|*9#u`w_%2o3faI{?dNd9$#5nj1PROHNq z7HJ(;7B1ThyM>a@Fo^lJb2ls2lD`}ocREH|5pKN;$>gFyM6k)kZG;lA;@kSJIqUhf zX%dhcN(Jtomz4(rNng&1br3Xx33EvCWz%o8s;SpRiKEUFd+KJ+u|gn|J85dZ)Exc&=V|Ns8Xs#P>qv6PX&VAJXJ(ILZO!WJd0 z`+|f5HrEj~isRN7?dBHotcPI7;6W48*%J(9 zftl1Tr`bKH*WNdFx+h;BZ+`p!qKl~|Zt5izh}#pU9FQKE97#$@*pf38Hr8A+`N+50U3$6h%^!4fBN zjh^cl#8qW5OZbvxCfYzKHuyeKLF4z^@~+oqlz9(Hx8vypIiUlt!(vs}_t#4@nh$s; z>FYERg*KD#Xs+W4q-V-IBQK!)M1)Aa+h+V+is)z!_=gEn&^ci7<DEEmYcoSh?WdXUsP7O4)&lQXA(BVM5jI8s6;mO}94AC0gG(`>|T)yuV1l~i-ejCCt zoejDhX0nrZDP|x9u4zp%S2UeDzV`o#pBGu1tZ-$<9TIbN=ALwhQ0=9S{8#}Uu8n-~ z5~xIvUhLSz@c@0|me$CdZCpZl(vQw@a0Y4^{T0w_>pOkwI^x4KkBf3qGmm)nG|Ps5 z_XTY~^b^mL&_*yjl~RRIi&eS(>y?y}O4-)nWyTEPpQAb#Xz8SnnfIL+nAcNL9nqV9 zRL|eyF)RKI5-kJO6}>Q89XmgY@b1&!JI>g3ryZ@jN2v3vm7O`AL!BTWNouJzV+$+Y zYY}u%i>K6=IYU2O$2TAyVjGt?wgF9xCj;?EK(8fWu!!~48`3u^W$eUlCh*91PLxu1 zRY(F7Q3s7h$Q-p&L$ucN}it*-9KR z_<wHu?!dav0$P+PI3{J8?{+l|n&2YMLV2 z+hRta$A5WpCXl1RNbYBsX8IGX{2v>U|8_I-JD56K|GexW>}F_e_g_1r?08v8Kz{V$ zT=6aGMk>ibvRO@Yrc@ezaD0%ydHkXGHrR{7>q~~tO7ChJflwa4-xL|@#YIJejC5VT zInU4CjQ9V0+lClQY=vh^s4MadwQmk7li{54Y;Ht}gkZOIh9(vfK?3kXLoD72!lHD# zwI-Jg|IhT=Y#s|tso1PWp;|aJ2}M?Y{ETyYG<86woO_b+WVRh<9eJu#i5jxKu(s~3 z4mz+@3=aNl^xt{E2_xewFIsHJfCzEkqQ0<7e|{vT>{;WlICA|DW4c@^A*osWudRAP zJut4A^wh@}XW4*&iFq|rOUqg*x%1F+hu3U6Am;CLXMF&({;q0uEWG2w2lZtg)prt` z=5@!oRH~lpncz1yO4+)?>NkO4NEgP4U~VPmfw~CEWo`!#AeTySp3qOE#{oUW>FwHkZ3rBaFeISHfiVSB7%}M) z=10EZ1Ec&l;4 zG98m5sU!pVqojGEFh8P{2|!ReQ&hfDEH2dmTVkrS;$dN~G2v-qnxn^A2VeHqY@;P} zudZD5vHtVvB*loIDF1M7AEEvS&h0;X`u}!1vj6S-NmdbeL=r{*T2J6^VA7F`S`CDd zY|=AA6|9Tu8>ND6fQhfK4;L3vAdJPBA}d6YOyKP&ZVi%z6{lbkE|VyB*p1_julR^k zqBwjkqmFK=u&e8MfArjW-(Ei8{rWso1vt5NhUdN|zpXqK{ylJ8@}wq-nV~L4bIjtt zt$&(1FTIs+aw}{&0SO4*sa0H2h&7g}VN5uYjfed5h7eGp$2Wu*@m9WIr0kxOc}fX9eOWh zFKfV>+SD$@kESKYm{F*J90XQjr$!<~v(J%&RMuQM+6CkmnYZDGlOUdq}%)VA& zl#acS%XE2KuX~7IamK`og@C`21~*cEEc#PZM6HT*Veb_l&Ej~j0zL7p0Eo`mMu(=X zJ$v;&Lya75I4C^saKROgfi(fdP0C$GM3WyZn%mm3yEI>|S&O(u{{S<}ihUp#`X&_z zmQBma;82#`C;dR5Sx09e07FvtJLhZ{9R~|$FCdU6TDNUwTc9kNct?8e@o2MpQDrkg zN?G+aYtTjiUPA=RX5o{4RYu}6;)ET>TcgL^VpfIpluJ|lQR(_)>6k%L^FZmoK-Wm- zR5qy0P)hm8yvqOL>>Z;k4U}!s?%1~7v7K~m+gh=0c9Ip_9UC3nwr$%^I>yU6`;2kV z-uJ%y-afzA7;BC7jc-=XnpHK+Kf*tcOS>f5ab2&J&5hIOfXzs=&cz|Qmrpu6Z);`R z0%3^dioK5x?o7t~SK7u5m{dyUZ#QUPqBHYn@jETeG>VU=ieZuJ;mm^j>dZM7))cw?a`w8R z%3M0R=kdOt^W^$Kq5Z%aJ(a$(*qFpy^W}Ij$h+Jnmc9eaP(vB@{@8t zz=RQ$x4XYC#enS$fxh@;cSZ|D%7ug;0z{C8I8h{KocN-cyv3UG_nk99UNS4ki^OFkYea`q`rs zG@qdMI;4ogcd5Tr`di1JBg4I*6CFvCID_2SN5&)DZG&wXW{|c+BdQ4)G9_{YGA@A* zaf}o^hQFJCFtzt&*ua~%3NylCjLtqWTfmA-@zw;@*?d&RE3O8G&d;AVC|rZrU}jx# zC-9SF`9;CbQ(?07o8Q9E12vi)EP@tOIYKEKnO@-o!ggkC)^#L-c40iZtb4Y-cS>$I zTn~+>rn*Ts>*y*z^b3-fAlne+M-*%ecrI^rmKAVv23cB`aWD?JDJ5NIafRvRr*~~C z)99Afs`BPK!5BFT)b_^8GyH*{22}yDq;be`GnPl=vW+ITnaqzl(uYOHhXi}S!P+QZ z4SwfEPuu&z4t#?6Zaw}bvN{;|80DfxCTuOdz-}iY%AO}SBj1nx1(*F%3A-zdxU0aj z`zzw9-l?C(2H7rtBA*_)*rea>G?SnBgv#L)17oe57KFyDgzE36&tlDunHKKW$?}ta ztJc>6h<^^#x1@iTYrc}__pe0yf1OnQmoTjWaCG`#Cbdb?g5kXaXd-7;tfx?>Y-gI| zt7_K}yT5WM-2?bD-}ym*?~sZ{FgkQ9tXFSF zls=QGy?fZ=+(@M>P3Y>@O{f44yU^fP>zNzIQ0(&O$JCd_!p?2;} zI6E1j@`DxzgJvqcE@zgapQ?tophO14`=14DUZ*#@%rRi``pi0lkNgidSsHGjXK8gO{drQoNqR&tRjM4>^DtW`)fiRFO4LE=Z+nCBS~|B3gZsh`Y?-$g z@8@Z$D7C!L9l=SWoE;(+*YirPLWvBd$5Ztn3J3EaGM+#pW#@{3%yksGqy(2Bt5PVE zf*fICtPp77%}5j#0G8<=v=)LR>-a3dxja8cy3m$=MZ2#$8mbLvxE%NptMd+L?mG`v zF1cANFv17DqP^P5)AYHDQWHk*s~HFq6OaJ3h#BUqUOMkh)~!(ptZ2WP!_$TBV}!@>Ta#eQS_{ffgpfiRbyw1f)X4S z_iU`lNuTy86;%!sF3yh?$5zjW4F?6E9Ts-TnA zDyx5p1h$Z3IsHv7b*Q{5(bkPc{f`2Wfxg*Z#IvQ;W_q9|GqXGj<@abo)FyPtzI~i25&o zC!cJR%0!}lLf^L2eAfZg7Z69wp{J?D6UhXr%vvAn?%)7Ngct4Hrs@LZqD9qFHYAWy z4l=2LI?ER&$He2n`RiG&nsfLv?8$Cl)&d8a-~-N`I|&EPa@Y=v@>0Gl?jlt>AUY;H z`**5bpS#VGhdp4pKbf3iEF*>-eXg_$bqt5Dc%q0+)R50>zd^l7sN5R5Z)Ut+oz-8_ zJ`Z9HE9(=wRTD)T=%GZTEi9K5naPzlfE$|3GYGLRCLsnqLi8Sc6y&iskqA&Z$#7Ng z7Q@C0)6k;J$TlQ+VKZ5)-Ff_BNoIMm+~!@Cv1yAUI-U!R)LHc@+nSUzo$GlRb+8W< zYPG%NFfr;!(RlnvBbN~~EpT6Xj5*^Z&73tdIQ$LZu`vkfzdTKa5|JJtQ_rm4g$9LO zKtgYVdW=b<2WGM3I_j|Rd8gZ3j;)S#AT(aP^d>9wrtQS_+K>pZDX^?mN!Z>f^jP@1 zlJ;i79_MgOAJa`%S9EdVn>ip{d!k6c5%zizdIoB9Nr!n`*X#%6xP1?vHKc6*6+vKx zmEt|f^02)S_u_wlW_<`7uLQU%{wdH0iojOf_=}2=(krE<*!~kn%==#0Zz`?8v@4gP zPB=-O-W=OO3tD19%eX>PZj3YfrCt0sEjgTd#b$buAgBri#)wW14x7QcHf2Cneuizz z368r7`zpf`YltXY9|2V{stf8VCHgKXVGjv$m!hdDf0gi`(Q!(Pyg~FO28Vr#!BYP| zI)qG2?Ho=1Us9dTml}-ZOR?g5Vk)f+r=dbCN*N1=qNfG>UCLeA8pd3Ub-pRx1b3FA zEn`CIMf`2Mt3>>#3RkE19o}aMzi^C`+Z>8iIPHSdTdmjCdJBtNmd9o0^LrJc9|U9c zD~=FUnSyghk7jScMWT|SHkP(&DK$Z=n&lGm+FDTpGxfoIyKV)H6^nY~INQ#=OtIT! zyB*J=(#oHf=S)MNOncW->!c0r0H#=2QzobO&f@x&Y8sYi-)Ld;83zO$9@nPPhD}yt z{P`*fT@Z(?YAmF{1)C;o?G@dfd2$c+=Av*|;P@Yz1KnclB-Z-fJQ-=+T*g>0B7!g# zQH{dHt_%wj=wlmT&m59)TQ~xK)gB6f^EY$=1zcbGf~Q>p_PzDCHR6lndGmqPY2)&w z$Th^K%1v@KeY-5DpLr4zeJcHqB`HqX0A$e)AIm(Y(hNQk5uqovcuch0v=`DU5YC3y z-5i&?5@i$icVgS3@YrU<+aBw+WUaTr5Ya9$)S>!<@Q?5PsQIz560=q4wGE3Ycs*vK z8@ys>cpbG8Ff74#oVzfy)S@LK27V5-0h|;_~=j1TTZ9_1LrbBUHb?)F4fc)&F7hX1v160!vJc!aRI>vp*bYK=CB(Qbtw7 zDr2O^J%%#zHa7M5hGBh#8(2IBAk}zdhAk$`=QYe^0P6Bb+j5X)Grmi$ z6YH?*kx9hX>KCI04iaM_wzSVD+%EWS)@DR&nWsSBc2VIZ>C(jX((ZiV0=cp}rtTO&|GMvbmE4FpBF5Rd z6ZG=>X&>N3?ZN2^11pXEP4L?XUo`qrwxgQm4X~RCttXmZAhnhu4KDK=VkKq?@@Q_Z za`*xyHrsAEsR zV(7)2+|h)%EHHLD3>Qg{>G|ns_%5g5aSzA#z91R zMDKNuIt@|t?PkPsjCxUy&fu^At*yUYdBV!R_KOyVb?DO&z$GLJh9~b|3ELsysL7U6 zp24`RH+;%C(!bWHtX&*bF!l-jEXsR_|K~XL+9c+$`<11IzZ4>se?JZh1Ds60y#7sW zoh+O!Tuqd}w)1VxzL>W?;A=$xf1Os={m;|NbvBxm+JC@H^Fj$J=?t2XqL|2KWl$3+ zz$K+#_-KW(t)MEg6zBSF8XqU$IUhHj+&VwsZqd7) ztjz$#CZrccfmFdi_1$#&wl~A*RisBaBy~)w|txu1QrvR1?)2mb&m2N$C(5MS%hSX)VJnb@ZGXB5^%(<#1L@ zL^>fBd+dEe`&hxXM<0A9tviIs^BDkByJdc~mtTYr!%F7Q1XnK2$%h$Ob30*hSP$Bt zDd#w{2Z%x^Wpv8!)hm>6u01mY!xmPgwZ#Q0148)SxJc3Udt!-&}eRO^LN ze26pQB!Jhg&Z>#FD>`C`sU44><=v>O>tJdLs!HPpV#AM32^J@Za-9J(CQjKxpzXao zQfRkWP%g9P8XV21MmoHfx{DICLSc*t4qVeQL9t}&Pz0rM}YTba@XsD=XMW@FxFM{QYQJHvM(JsUSa3mcTUl9^qcVA zBveO--fqw%{#QGR1vy;x88+qMcgzmcYc#8U`CPPt6bl?uj%w_`b~9JliftnOa|ziW z|6(q&STs_*0{KNa(Z79@{`X&JY1^+;Xa69b|Dd7D&H!hVf6&hh4NZ5v0pt&DEsMpo zMr0ak4U%PP5+e(ja@sKj)2IONU+B`cVR&53WbXAm5=K>~>@0Qh7kK*=iU^KaC~-ir zYFQA7@!SSrZyYEp95i%GCj*1WgtDId*icG=rKu~O#ZtEB2^+&4+s_Tv1;2OIjh~pG zcfHczxNp>;OeocnVoL-HyKU!i!v0vWF_jJs&O1zm%4%40S7_FVNX1;R4h^c1u9V@f z`YzP6l>w>%a#*jk(Y82xQ@`@L(*zD&H>NY`iH(iyEU5R$qwTKC5jm4>BikQGHp^)u z-RQ`UCa70hJaYQeA=HtU1;fyxkcB2oY&q&->r-G9pis)t$`508$?eDDueFdW=n5hJ z08lH$dKN$y#OEE@k{#|<%GYY=_c~fHfC@pD54KSP9{Ek@T47ez$;m$}iwR}3?)hbkwS$@p2iVH0IM$lB*XYA+#}-re|UNzCE)SOYwy z=Y!fkG4&I%3J(_H#UsV#SjHulRIVcpJ`utDTY{k&6?#fzt~@Om=L(vs6cxAJxkIWI z@H7)f2h%9!jl@C!lm+X4uu;TT6o0pd7 zteFQ(ND@djf#o2kTkjcgT=dHs7ukmP0&l8{f;o3JuHGd2Op*?p7?Ct=jA*tIg{MZk z$2Lsc0e8Tdcwrjx|_Ok?9uB3Il|^2FF%X#ck}WoIvrzQXN%kT$9NI{79Wm~gZ3`8I+O`)`n30feZ( zDO-fl6IG3c^8S;Y_M-)+^CmM0tT^g0?H#>H8!oC8W%oU!~3|DJ?)~LT9*&GAQG13zOGq6gs*={cu|(V7{R$y@{-iV*9q@AD(#Ktb}J&3&k|5Djs$)9WM7!6#EaJ_ilvbfUvyh8c?-{n zfuFrC0u6}UJZ7aj@(cNG_(CKgjQQTA-UK@-MVmick zot}6F%@jhq(*}!rVFp5d6?dg|G}M*moyLriI!PQDI;E1L1eOa6>F9E6&mdLD>^0jJ z09l?1PptuV65gm=)VYiv<5?*<+MH~*G|$~9Z3XEy@B1-M(}o&*Fr9Sv6NYAP#`h{p zbwbUE3xeJ;vD}QMqECN)!yvDHRwb7c1s6IRmW!094`?Fm!l~45w)0X`Hg+6Y0-xf# zSMemBdE)Q=e^58HR{kWrL5-H0X6pDu%o{0=#!KxGp0A;6{N5kI+EoY_eTE%2q|rwm zekNeLY-R?htk!YP2|@dbd8TWG4#G)=bXlE{^ZTb^Q$}Er zz)Fp)ul24tBtQFIegdI37`K$VR3tVdi<(fIsu{#QMx=$&CK9M8oN%3Mk;>ZPd-;Q- zn|sSKSnc-S0yrw#TlA$+p{J~u=u98s>IoL@cNLOxH=+1m?;t1bR$vR=M$US&Z8DO3 z_&zhQuId1$wVNsS=X?&s(ecIi#00o{kuPs6kpYkL$jMyGW8U7mlCVaZeEL=HsIxqm zFRLxWin8B>!Dc#9Z#t0RNQiR-@5J+=;tC7|1D*~rxcwHa5iIVD@99cCFE@BukUC-S z^iJdt?dwU)kH2VY9?|zVShMbZctzFRz5Q4tiXa^>@U%jDYq}$rSyc#p2wXr}mc0qq z^lT>$y)N(Qg0dwmEwTopneoU(y)>Mj+f{iHM0o|>ZtCg-itPj4addYz??aE)Rp&hk z_SI)%XeSf=SjZq18h!Cc>Xy&EynnxdHQ){(x@g|ZA%`3LU^KzX02c5N;F#tEk1)7v z(|V9tO3>?^X|kQ*rRBf4>mWW2$-Lx})|M7z125&VHcxsCqB!<$l1F$zCrJ+nm0f3Z z%Hq^=SKpHyV2@Y*Cu2x>fXC0SscnR*($zEB{KOniJcpn@e`PMH*_Q6*0Z^8RNCEvZ z+UU9!927p9YZ&g=bnUvQUZcdisyn;-4;ACXOe-Xor9K8Qbp{ldE17+G@VQT+9ZJQ*9dZoXfU2ue|mMhrrZk2R7&~YjFW4`BTq45UwVc6JORKU)wBCTanITh0GD}s$`C5pb(9{b9 znwee6j%?-UV)_7opOioCf5@C?@w^@g& z&68+oMmV;5JW@TT63&CSDrfYL2$L)pVseDtAwPwleEM3F^-Ufn3PpfxFmx6o zQ`Wq9x#d$e`VKn5LOXNsrqhGao7~|s(u~drPrZ+;aP!C%z4NskZstCbAibD}O%8Ij zb~C(taxco~WzJLxhL1T}3ctXMbV6}_z=IZN9L0|SxLSe`$X`<)BhM`$1&&)e_}fCh z=idVL<+u6Vn{&ksP*ZLlMo$fC`dtzF_?~L?4Rril2G4%v5^7sUa^&8aMtMX&mtapl zD(dW|cisM3fqMaB`8?QbkyiUl2g>hMB5EoS&IB8TdoC~)b$nT=`%GgU`k-)+8}`)F*~I~DXMaTP%kZftx11~?iALs5J+&Rom#p%Y z>dH}-euH4u=_V3hc6^*2WMtL!9%yRTJ93p}@aV0zdY*?xchFI>m+UivV=;aMFp0P~ zwB8P)wvV6D-GL?6hJ#g7Hy7=2i^&Od#S=j!;Rc_yjO!*4aN7{vqzg2t-R|Dav%_NDk z`H_FVlSi==(~f-#65VmQ{EE92x<03lwo5p)s=ZJ^L7PlS>132Whr zR6v~t(#I+(`usYLCoO;Rt8j&b^5g_xgs*98Gp|N}b>-`HtVm)MscD)71y?(K6DRCZV26RsHPHKk)EKKZA%C99t3$t^B0-k5@?E>A-YMbFe?>ms?J?_guHHNU(;id*>xH zTrtam+Aq?n@-y@uY@A?hy?1qX^eLu_RaH4Ave?A8NapgQF=C%XI7wlcCf4<6BRo_% zBXxxc*A6-3CruF?3i8HOdbc%>N=-iiOF+9HX|ht6SCkz;A^am&qi_I&qk1B(x<=(m z>QG)nswCOLl_1{SZ@_eE#m^qb6#6DoMsB*)`17ui+XvF%(}|J4G$z2G*;E!1ERnAH z@q%=#uV6kBddqy4=g>!VTV)9*1=i{wJ}Ep!I*?)uJdA(LwE?(!?;}_u=^M2NShWC_ z*7l4aBJ=!QVU2-iehgb`$vOI8zkm{W%QO~?xOD;NgI;Iqa3#^$^U5D&McReLe&qs# zR<^@QpR4#W~Laz+QBsPt@3L#KF`Yr8}jgHe;5(cfpQ=;Zjtbt;c%y^#-m=hqOT z;KAYakW+$w0&F}>K10&SiPcD9SrDOuczj@U#W})5jGU-_htU`U6Q%wdy((%?J}y+$ z=$4jw1N nJo)qTxG{D(`3*#8tY|67hJRF;)r6F|#I`Ar6I0aafRa=kr-Z0I^}9xf^u;G5iEQCbpv3b#S#%H|HYHsQaHK$! zU#3Fpz8*^pK%RRmX<_09eIVziB0jOgPgFnI-*QcwEBtBiO#v!>{W1cLNXyw3D9M|A z*oGy(u8BkDA1c;MsXmpK^-~pl=We^RYnhZ4bz*)Q)C2G+E3tgx9PzU0T>c|1ilS!T zyE=bz`=wskDiOi!@!l?Y))#%{FM`}7r~X)i1)1*c6_2Q!_1{)fp%cS|YF+Q-CB%d< z=zYus`Vt@Mx*a7V)=mpLS$-5viaKgNB=+zN657qy0qR94!cTtX-Z%KBCg4OKw7b=t zr=`7q5Ox=lJ%!G5WIyNQC1xpqYU0{!I$hyrk!6%De$gp<_*Gc?ES(OwY8U^)Kjgc{ zSlhpXDb|;{+y9`u{EuMz54rlky2~p6xX2>MV6BZ&k`$q%q7v(xYps2wr9e8^4<;CB zc)eAT~B^rjzO6<4BDDH;il6 zFsM8jL+agQ;zazW(uiQjM%fPf2N~_p{cy29XP11_lQFpt`t#9nlk}>fv((FZt-dBa zuMIc4HmPHW04n0TTG9ug9;&OV9euL$Ib|+M7}}L~z4e%%%b|r~6OQj(S2d7XfYn#xp8;KQ55UYu#gY*De5j6Cc z#R%?rqwpy7I1(kpU7B*Pq=etXeYUn04jg%ZPjYqQNa$==yTG=6KX+=;i2Xg+kjV2T*Gc!(ef z`Q4fR*TA=M5-}z+s%YO+!K{k}S**ic&>o4_Tmv$EQTOp7F6TXPCj-UTXy?OQ=%*y62Qajk{rXbR%jMCOFMiVE3KekQa4xR}B%=iPtd8BXo~q$OX_ zSp910{Ew;m|GATsq_XiJ3w@s(jrj^NDtr(Dp!`Ve!Oq?|EJ9=vY2>IfrV{rT%(jiY zi}W@jA2iqd=?q>s;3%?@oi7~Ndo3Ge-2!zX58j(w&zVlPuXm3rcHb7O0RsM|!Ys(b zh(=*&Aywo3vuJoWZnU!u2_4bNkDTc&&bCYc%T zM~~xYxS#3KXFzQ@OXdc%9QDOxqiTd_> zT;(DX9{5dIuC4pO_xy+3{Ov)1I7j!Z)6&nHUvTRP>VU5dm#849icG)cvl0QOPkCIzG^lOp4#UcNr`VhBp(Ha%8@KPlvT*5u!v_$b#b~%sn3K{mu zaxeD%Q~{;Lw03ZAq(Pc-IVj>n*h3l2{sqioCMGatQY0kx zi`1(WWDQ=;gmLSGptEQ%UFC)th@|71<8eiRtX&Mx@#1q#nMF_BMfQdS>!!Qkx2o}= zuqRi?`UOX5P3fP%M+71Q$ctH4Av}bXED#fQ`KR4!b~60nsAv^*M7c-x`|~B}XIuq% zlqIJOf>WvlhQ@Uw$du|14)tZ?; zPNZ|xZSwp1y+d4sut8E4*l2JWR|~o0A9vD-?zC-w zDc@=wE1YKb*OMSi_Kx}&w;#h3>sHp|8^hnA3w?-WK)X?@Z2dgV7`9Cupf-B2RE4x^ zwlw+~!V9C^tyb`J;m2}ksD`w}G9`yu(^--{SQ+wt^Fu4Li~Fft!3QO`upSkAU?o;# z(1Q%GUVWbbkTK-M=T+ULkk3s6Dc9`G4CO6|=&-S&D+rbJQ$`Y-xL~ol;kc(l)VbU>{&>bV+*?ua;$bnDc29RW+Ig16)Vf6=L|fMR_P2b7>6}0 zdlB#-gj|j*C~M=F^2=K*k~=tl6YM3SXXi&K-`EvEXnWz&4D-^hQRBJI3gKKDj^6|> z*WhHSim1qAffNt60Mve9lfw^+&0bx-AM0%j>QP3%W=S@(l=(nrJ678mRQ(#+sI@d{ zdb#5fo#T;hK7xJ=M58wZf|?DHwD%!OZ3JrTGV5#{cfQwuiMvz%!CQ}CubJ7`z?@rSF<+KHNV2goc)a6hP0oHB@3LLKSH2w{um&J*z1Ka2 zLIR>lvOvh>Oxe%?3A@v<_T|}${zf_&@C~^FCo#jB(W9VLO?DX{)n(BQ0(V0`mI|9Y z#U3WwxixJkU_NTvA>5q(A@r2dnEXJp#6B=pww$XGU}~1~c``UKqQb=^*2P|4Dq*_! zhY^i61Sy%T5$Td0O6^C>h(xVvT!}Y##WeT8+s+Uuz=7)~V$>!zU;%d>H)rm*6^IrsCma%|cifwDLk_ z!^W2voQ)D;I$=v2E>iSaBw!d7aD+|LWl2iD!cBw`Q5p1~fk_xGiPi8e^mY&#viTAk zmaKL8m;JQ4bY(n6uBZt02z#noMMxTfF-RzjKre-c+@B)#J3pN-Zv7F}JtAwNk3j?OkpVCL6W1)Q$FLAj zGI!tX;g`O{%pt=0|q54Jyj##w*4e*|_;Us2Tn?!#^R(>u}|FAw1G_ z#wQsagnj9$TAC`2B_XgB$wNq~Sxgl?#0+QWWcB{G`c6~&SosbtRt}Tukw`TQ!oG1= zYyL(y<;Wh+H24>=E}Gs=Hs2%fg;&Qdvr74{E!R?Bd zIRQ?{{xkLJ_44P@y3^#(Be%(pk%$liKbUUo76wSoVfJmt9iTKL3z{uW6L&?jYg>EY zsx{kRiW@q%<$VZvbS(TKKTO4{Ad6l^IeY(F^3}=mX9|FZmQ`~RErNxlBPl3ast}W$T4V?SW=6kIGn@-^`qJv| zZXwhK4Kl1a4E}nLI`rdOi?^pd6;LZ-|8G&INHgOeC5q{_#s+SXb0r(;5ryHFsoTJD zx$VtNDh=-Tx3t!NTlk=hgAaSM)#U}e>_-Ex(|JoX*hWmBPPdTIa-2(BIOUJ|Iddy| zwY*J%z%W$}*;uSoB!BIJB6N6UhQUIQE_yz_qzI>J^KBi}BY>=s6i!&Tc@qiz!=i?7 zxiX$U`wY+pL|g$eMs`>($`tgd_(wYg79#sL4Fo+aAXig?OQz2#X0Qak(8U8^&8==C z#-0^IygzQfJG4SWwS5vko2aaOJn*kM+f1-)aG{T43VJAgxdP(fJ4&U{XR90*#a)G8+clOwdF?hJ?D) zmxu>0>M|g_QRHe_7G|q6o`C>9x4xd$Gl7lAuR~+FtNid=%DRsnf}YI*yOToWO%xnP zY*1G5yDnTGv{{xg5FhWU65q3-|-(+-rJ2WCeSJn(7Az>ej4Jp9+l-GyZ_| zJ8}>iA4g|}q1AhEEv#uWR&$g&Uyht?fVU(qk(j?^D`))s>oG08pow!f>P1u71P%oL2)UC4GeS87&G?{)NE;D=my1Q9{~;y zJULE=bG6jXE28Y11YmoZoo945`MM*`v%5b=_02*0cwzDve#3(4M}NPt`)?SCa|7*q z-94ks(R6WH-l9fE4m4}10WSu&O`|;ZCIT%vL$_pbABY!}s33@~gIvZ0H4co|=_-T$ zF#lC7r`89_+RL9wYN=E3YwR?2{$^ki(KKd>smX(Wh*^VmQh|Ob5$n_%N{!{9xP~LJO0^=V?BK8AbCEFBhDd$^yih$>U z(o{RReCU{#zHSEavFNdc8Yt<%N9pd1flD{ZVSWQu*ea1t#$J5f6*6;tCx=&;EIN^S}*3s%=M#)`~=nz!&Q0&{EP|9nzWyS<#!QxP;!E8&3D}?QKh^ zqGum|+;xu9QE=F#fe2ws5+y1Igr&l`fLyLKry=1}(W+2W`waeOR`ZXlW1B{|;4sE3 zn^ZVlR11hiV~p<~TaSen8I~ay#7Ql=-_|U@$8yjZsZ=Vi+^`JV2+kn+oiSUi%omO_+7}saXnJ9 z5ETilbag(g#jZPopCgJu+n@(i7g}3EK2@N zd64$77H5a`i%b%a^iRjMaprwzWz(`=7E6QY)o)gek7H)yZ-BLw^6FAoHwTj9nJtWc ztKaytMlWGLg29W{?gr|rx&snb@XyvR_}x3fmC>d=-nQp5ab3*whTw}DfUcKlMDDx` z-%?ek^*|Kqooy#>2lfklZ|jN4X$&n6f)RNNPl(+0S>t(8xSeOGj~X0CGRrWmm(WXT z))DDW_t&y$D#2`9<-+JT0x1==26*gpWPV~IF=rePVF%e-I&y$@5eo~A+>yZ&z6&7> z*INESfBHGNegTWga&d@;n;FSCGyW?}e_Qw#GTLHo*fWxuuG@I~5VA!A1pOdRTiPA~ z^AGe(yo=9bwLJD}@oDf$d+34~=(vIuPtOKiP}obDc|?@hY}J*@V|UynBeAkYa?S{@ z_f$U=K+>deTAi&=a*xv>Ruyw$UsTWY=Yn=xjf;s)6NQu>_niQ_idmzIwuL`Scf)f= zyzK?D5a5)^D@H&qN%F6Zd0JeXX*Knbe~VLe^gi|?JK67&mB4jrapV-$`hCQT;C{%T z*pjxB+Y|~LD9bmMN%Iq}S$F$x1yWU7@GcR91V8h;!O2I5MN_rq*gRx(k8T!1WSDTp zr9eJO4$~H94aG^6k5p8k=kFJ>4lnY0q_Bsa$@vTRW6uY?slH|Qt)Yu6Yun&pfJ zBi!h;6x?FDs&79#PT*HSCEUsKws#s%TFy*=2PAfb`>gEPBn+D-WdfXA?MkB=<8kb_ z1+4D11mdHG0EcAyg4dneLtfJ8)RyHQl@6hWJNe(d_EjyCHf7%Xsd)S4A-4COz{G@% z5xQ!P>AS@H@;4Ws)N91)3A6PleMe2<& z!(zv#%Uc?N`(Xmm)OJPYt)BM`nRjoWA&P0Yxl@c9Y02zlPH1J5l$nhPrMwu=atkz4 z)a-1+OEL;d@ctx=s<<+3Sv1VYy0RYmiji|#hy$66#`5;u~BkH4^$EGZ-Y4xyZ=%3KuaeLYKAUr$xMtIh_5mga> zPz<#G0mQ7IxEw-yO}BueN}RaFlg$RwCDB)vLF$wDu%qZyLYsPKdcbHD23$qn9i#JFqIo#OK?u7db2-$GatzO!On87%}Br};~#}n zziVB;qf_4(K$u>Qyz$ln_kBGS!CD-t4Y}9oxL@7@Sx*?NOAzdeINUD>Hl#*V%pfA; zSA`==YatS*G*crJ3`3ll4)vKss&)UtY#7ZxiVoG%9(4<%`WWcjX2jV(^g7Yhj+h5J z$5=?S=tuCyEt74^6jo@6y|@~N>&cVfFNtaRl=)Gm!vR;Bc$3-;ySCI$%kdmjQ|si` z{$q_YCe6vjy6re9jGN|`43D``)1PODtz0)vhV4XV36nVpOnMx2uM%qZ<3TtcI%>BQ zf0(J`{JqPPJxw>k#&nIvoZ5e9Sno)B2r+E0G} z@&M|zf4E0Q$O*NBR2I;?i7N} z@2^Su#`%qeX}m3cbSojiLk#84kvW1fICNPS`OyT0SpUoA0(s^2m~J<^eKE!dhJx_N zG_T}0&(<*an>oF=@?6?55g&IxSgY3?7|@pmDRE6gJyJNPH6un~%0hZ@?h=hI6O$b^ z)29#<4$E)cE-5IFbRpk9JVrw$$966UDyw;Iym4OY4Fc!&s1ZH4BJ1-$9<)Zt1c)N- zU^&9hsk6z?3%<9kGKHW|6~k;&cghtWz`oz`_YjVuvy;B;T67=L2c6=8`7WyTBv*QH zNv*bo1#KOk{O&)@&pkd*?v+kcJ8tM>AGx$~WMhH{L40_N=bkrVg+^p!H)IqXCQf2_ z0fPig=8CEo>p4vE(nc^DKbZ|9_Xo}$i4zJ`jVh95; z5%aNP3@``=EJ=Vt9U`y+$YtX;%OPzgZ_3+;+mh{p#W&y4-%%Bf`LhOy-*kB0qnB^m z_nBTz_b?-`F$*ymByshU>D)za2g`0j^ioo;A#QeL@x3@|+_!=YXA5f6Xg(Ack&WOg zJ<2i|Fd6OmyH!@YSMVxb;=M)ZDhBt)4`5T*>cUXWPG#%@$&*>K&u3#|`fm2mj*FKVf?du{xZ}WKWETTFhq6_fO$PS5(ItF=3~pFp~*j z!ys1<4EL1)#{`mz@gW|t-FpPkd%pK)n_Rb)F;z7cQ6dym_>YI3&e!=!m006oS3Mjq{q ze%hNzW=G0jpfl2K(x`CDuZCsJV*hm9T~%5n7R_g}VFpk`G((D^MWVMAmRp--T{`P; zwMgD<;e`fm`g3|fPns|6qnd{|FCHY*YAguXH(?%sx%4+Gu|Y)_8mk4EljxmP+MP`* z`SUbI{TCIN2OV+$y#g->Jqv#$wL;}4xJmah#$0`v^ughM_XjTA$B}ux)JZuY5-GW4 zKy440I+w=ZtE-_i+0xImq}vyzD68?8;94-5L~_O6Ty>X3itdA-x?6P(c4jkr+f!H( zUDeqiG>3bn^Sf8(`_YwqPeJ9&-@OCQZm4X{FfRMeBtN4E9Ca@;GVpU*L>lVb;@=PH zTQvTr?^jKyCKh&ZVOI*<y%T*Aw(XCPrFC=39*y$A`FSzxBiQ#W+uW10d8&gYp4{teh;^p@anft+z$5!Hv&@h0X-@xJG>hbTCxjDwMiWK@1b%8wYL6BrV zT41m}tX8g-`P@vj4T!Mlk8F0S!MA`^J=SCy9-jdwDe^hVDa`WwyI^H@ryt=F5y6>b zT8&iI6&j8edAfX^ycgWbnMZQ26Q~`LmdEScKC8|~$Jgyw(>18NAQ$9AwCRmri!96L zp^)b0P2CR-9S%cG$#rU}MXnx21T#031o>2VrDs@sa-FpjfvgLPW>Q&LHUoNOtmkt# zoDZ=5OGp{^vO~=p29^`aXd8K?(+f-bW`N$U;-o;%f?RcR!k02Nod2h^^8ly%Z67#E zC3|IOuj~^YBO=Fklo@3mvd6I{Z*&FZ>iq* zxh|JuJoo2$p8MJ3zO@dQ;%1#~Mrm48 zB0053{1bDi_a@jo<4!@!`w4}B(&Qb`~IeSBh zu+_yIYl2Wgk+?x4pCmAM>x_SqBPUj#c`C`k>_fp@qPlAAwD$!zOxRkL7;=|nu(#ut zyF^;&hm-D_;ji{d6rOloACu5*NkF4IC3@rifMG(|^Skv$H&^YnYL*rpw=UCi;JOuz zN*NX(7wZXS4tF@6PIWAs%*j!$RoL*3sh)}iry%thDvN5AUM888q_(>|Tzt|Yea3AyMYBgm$H_`F^v2%)bux)3s znFIEBDK;-JS5SH|;1?afJb<*=c5puu=w%tv#ihn*R!^Hd$KWAp4$#`joJ*)$kNtZ z2Al6h>Z>(u?3tmzA4^d+jLKx{97!Pb4;CX&u;M||**7zXI7hO6nrdMx*Xa=|-`#1^ zBQ?Ha&7cd7hN=%y4yUp?zl8~Lo;%mQrDe8!ce-W_K94FFMN*g(w8q-_K5S+c0{o29X&PzpV;UJE^!xnFc%b@>kvW4m#xiOj-L*DadC&2N#0Us z;<-(m1WB7$=j6hjcPC6JB)D3T2#IC`ibu#yi!uK7W2!j|Z>~RaJ*&XXy#ytIk2DIp z5?Qd^s90_?ILjU#>ZWk5HXts}grg_!Gmgm!d?eLGR7xEP zvTCrslV~94ym5_i<5oqy(@@?wN}lIdtiY8=?|Ng!XeYnly`@9wCGx2S$3x|0x8T2h zz7A85Vb2>s44rKpI_4Y7_Pnd2^mYj2%^jM|Du>u4`^Psda^JIP%*DK6bo`Vf&f{!% zDTYCwF5Nhi=)QhU2$@eQv&ZzxsX+Hl+gP6kW|e!n9IU2>Vh~cioI{>4WvR}t*4Hpz z%5z?HjLGoka}Q3AbX9AkY|Yjf^M(>@tBAI9JO5pDCQu0R3Nns>)LC#vB2p96C*?K? zvX$un$sBDx$1=+NNj*@Oa@u*b@O*XBr_sg@8sCUq-|LK!MUmC)epklrv}5O_^<{NP zX16|c$9Wtbks3y7geI^tF5oRZJu;v zwkW8j+8Ccxo9stEDOT_Go&j%$KCgVO7pm+^%PKEPBZqbMw%s@732XS{cX+wCSjH1s z5)bc=g**<^NNsroY` z?}fHHlgu^B?2r{^^gQ&j zbF~T((>|Yg&C5WKL8DCnl1}Z3!YHFW2S1|;Xr0`Uz-;=FxEwYc4QpeAtnm7^f~uzX zl;xA!?>MLR?tL80Iudm;mi{!ewL91KhG7Hsa-XepKi<2mc6%zf0GwtbfJ1Zf-<@Xu z#|XWDzv|04t)&9Id!UxAAkN{t5qC%%8-WV3i;3duS19%m2||Y{!3pR1=g|zQYAMqc zff)_2nj-O4wfxy;UNM?|Uieo!^J$A*uDe>@V(NKH;KS;Y_dtE8${p>RdcrW;=2*fj4~d?OG0l-(g?ik}vz} z)5-wDppVts>K-=|@{=!53?=8)Jw#RGpS_FWpbwtn}{v!JEJ$q-sr7F6&OPBuI# zuVNFMPte79XgEu!P&qRq8u4J>r%$l-IQ00Lin90(_KtC)aR_de zxN=pY2<1b29_^AG2WJIGmmX4rv3$!`l15{e(H!1^+x9voZ6;882YAE12q7+lgy+>) zj|s0CyzI9=Mo!R}&LXB`&DYpZ7c?0r(&KNV+~TULd0y^e;G{KVR4nL0KvU9mr8&$^ zxrM-9P8zE`J?aZ(iB~Rz<{vvnk2HaZU#K$aVFfYnbAXVUOLU#As5JvS%+26 zi$sNuPY}dLGUS$0g&;oBqhzv2dY`l3@6Na403M!Sh${B|7(y|_cONa;6BrtUe@ZzV z7SThtHT8k?Rwc)(Z}@BP#H@JJHz&GR&M=E@P9KJ89yQKmRh&I~%vbL1L-K3E>7>CH z)Y!=jXVb1iPrAoAZZ3}3wU*5~nrV!ZjL5zqJ<@NwjHCZC>68Cc<{&E_#S;E*jOdjtg?uKN|l`P8sjz&Qf7a^z9 z;{3-8T+H4y99_zc;JYIvs!sk$G}` z??mt*Mm9Z@glCZb!X?!xXD-21sFDPEpZOK{sbQseQ$%6~b;n+*z0hRoR}0Pe>B|#t z$XrVcXv8M|q*Z8MY&r9J0A=d^1bHpjrUXu)qEj~$%%=gZp`^~%O*lzxUquG^p6;n; z^(3HL+hx4gRP?4N*b2p9!^|2~rcw3!9nQj$vmZusbXYz_x^AVc`3qBFm(jS9ueU5h z^AnNnbswfQ2Jq=W=T+p-V|nQco@bOAH$pLQZ+BKH8E$iM>IDz z3|wc?QP`yI=X5YTlp8h}%p6{Deq?S0QD$Ug>ih1SdPZg237Rl{S~=Ha4~-ckMoIWMn+X@@`V6 z#HHZj>MQbt$Qqp*9T(cjc^lxZ7UO(>PwzF-qEr(wo`vaulxdall|KP`7p4gd`23&Jy=#sAes*0diLB(U$Nx46VQvP)8idSs8^zaV91xw*O-JMH=)FoJshRob|_)O)ojtfP))WHCr(;*2;VMQ75^ zfN@a^f#o<|*9X;3IcGodLUz-3i~FAu+zI4c5h+nW^h_!^)b*B_xw-l4O$TB(ixaqW ziMoa%i=BeS<-F45kMO;Tw|FWa`G2c!SuOA3CbowPhF6csf1|&qqugUrj;UgGHm| z;j^yoH?MZhR;AYOW_XW2Lg2j%%ejL)B@*bUMD`g<#Z${1+fa57r7X82 zcqY-cfPnK%Y^3@szRner zt)bBToYCph6Jv*W+&t?&9FG4(Iu2w46 z4B#AcFy_^J@f*6<{>CN}Sj969*DYV*e7<61U>GoN{tz!Do90+jApFueVY_IW(MQF; zl?4yA_(MvMwN&pWKVyg{3uU_+y6RMdot2vu%mC?st=N0pf-~JZXE?3JFf)j<{1xsU z`2ephz)#HzsWEP!inHm2hI(V(~@W zY7gGU-lO52cHD&SY)>QHgy$=>^X%u0TQZfCizro!*weMyvZC=;MWOawdAx~`3C*W` z%^#^$uRP;gyqEE0<(i8xcQY$oc+6mY#z{-XFxsO1(cN8Y)>p;^q9|5bk`Z*p|c!?(rErw#y;yT(%@c7trQBv6cj)$3>pI z>tz+;IB?D=aQV=s(n)o63*yn8dX1m7#Z4G{%fF@K2o5n3jxR~mU?nzMi#;}8e#(>{ zy{Z4!AI)jZ8TY;nq1aq}tq;~=zzoTv)er06oeX3;9{uP{LWR*2%9cmE%S^`~!BW>X zn3PZFTf3g*dG68~^1*q@#^Ge(_8puPEFLD8OS|0b2a{5e=N4S%;~f3tC>F6UxK#v9 z)N-#Mv8=ePCh1KsUKD1A8jF_%$MPf|_yCN9oy%*@um6D{w*2|4GY zb}gafrSC+f=b*W{)!a!fqwZ9)K>fk=i4qf!4M?0v{CMNTo2A9}mQzV=%3UT&i{3{W z>ulG#M!K7%jPf6Mjff9BMslgQq3zIogY);Cv3v;&b#;^=sh#(Bn%W)H*bHNaLwdpq z85%fUTUJJNjYO_426T2TBj0D{6t zw&S_HZ|C?pI_2q(9Fas&@uJs6nVX;P*5K#6p|#)_(8PM-{L(;2wl`ma{ZAd5gA)?y z>0GSLoK<*FwW+G8@-M3vcffg7I(qm7lzF)n`Q9iCvp*mn7=|CjlpG{x z&r0n}XLWZ!>=lynUr7D`6n`7a_ZgT< zm!i;&?Fb0Q2QmqmCHfZ7ex=_tU~(7b)L?RIvPyEAU=gLIZ-VTAA~WR00yKyTXg^(G zqWLZJs!FnQYMOH3*fN&Tn(IKMLf{Ki?pRo8zZJ6YVyj)y0^)-sR}2-)%mI(Aw2AgT zbbp1T{qB(OSNJd0cVBH^tI>HR(q+#*lmi@LWe*rZz&M2h1L_=50uZ1e*n#E*`6?aw zj`ka&JpceRGe@}Ey1)Q~O}0qHRg4K_u>4e1arvJ7Q9!=t5AuzG`n=a-f0}{+lnCE#zu$`oVn44eS&T?N*wz~t~E&oQDBrB_MSg z_yVrQehWbD0xHX|v-hpselAu;O7s;P*!uAT`dr~}Lie=tknaGoiU?;*8Cwgala-65 zosOB4mATbdXJFujzgA4?UkCKE093A1KM?W&Pw>A?IACqg1z~IZYkdP70EeCfjii(n z3k%ax?4|rY(87N&_vhsyVK1zp@uils|B%`(V4e3%sj5f|i(eIhiSg-fHK1Pb0-mS^ zeh?WA7#{hhNci5e;?n*iVy|)iJiR>|8{TN3!=VBC2dN)~^ISSW_(g<^rHr$)nVrdA z39BMa5wl5q+5F@)4b%5-> zA^-P20l_e^S2PTa&HE2wf3jf)#)2ITVXzndeuMpPo8}kphQKhegB%QO+yBpDpgkcl z1nlPp14#+^bIA7__h16pMFECzKJ3p4`;Rf$gnr%{!5#oG42AH&X8hV8061%4W91ku z`OW_hyI+uBOqYXkVC&BqoKWmv;|{O|4d#Nay<)gkxBr^^N48(VDF7Sj#H1i3>9138 zkhxAU7;M)I18&d!Yw!V9zQA0tp(G4<8U5GX{YoYCQ?p56FxcD-2FwO5fqyx@__=$L zeK6Sg3>XQv)qz1?zW-k$_j`-)tf+yRU_%fXrenc>$^70d1Q-W?T#vy;6#Y-Q-<2)+ z5iTl6MA7j9m&oBhRXTKr*$3gec z3E;zX457RGZwUvD$l&8e42Qb^cbq>zYy@ive8`2N9vk=#6+AQlZZ7qk=?(ap1q0n0 z{B9Fte-{Gi-Tvax1)M+d1}Fyg@9X~sh1m|hsDcZuYOnxriBPN;z)q3<=-yBN2iM6V A?*IS* literal 0 HcmV?d00001 diff --git a/template/.mvn/wrapper/maven-wrapper.properties b/template/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..95d441b --- /dev/null +++ b/template/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,20 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +distributionUrl=https://maven.aliyun.com/repository/public/org/apache/maven/apache-maven/3.9.5/apache-maven-3.9.5-bin.zip +distributionSha256Sum=7822eb593d29558d8edf87845a2c47e36e2a89d17a84cd2390824633214ed423 +wrapperUrl=https://maven.aliyun.com/repository/public/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar +wrapperUrlSha256Sum=e63a53cfb9c4d291ebe3c2b0edacb7622bbc480326beaa5a0456e412f52f066a diff --git a/template/.values.yml b/template/.values.yml new file mode 100644 index 0000000..106909e --- /dev/null +++ b/template/.values.yml @@ -0,0 +1 @@ +{{ toYaml . }} diff --git a/template/Dockerfile b/template/Dockerfile new file mode 100644 index 0000000..dde693a --- /dev/null +++ b/template/Dockerfile @@ -0,0 +1,21 @@ +# syntax=registry.cn-hangzhou.aliyuncs.com/imageacc/dockerfile:experimental +FROM registry.cn-hangzhou.aliyuncs.com/zeroware/javaapp-builder:latest as builder +WORKDIR source +COPY ./ ./ +ARG JAR_FILE=entrance/web/target/*.jar +RUN --mount=type=cache,target=/root/.m2/repository,rw --mount=type=tmpfs,target=/root/.m2/repository/{{ .groupId | replace "." "/" }} mvnd clean package -Dmaven.test.skip=true +RUN cp ${JAR_FILE} app.jar +RUN java -Djarmode=layertools -jar ./app.jar extract + +FROM registry.cn-hangzhou.aliyuncs.com/zeroware/openjdk-17:latest +WORKDIR /application +RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime +RUN echo 'Asia/Shanghai' >/etc/timezone +RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list +COPY --from=builder source/dependencies/ ./ +COPY --from=builder source/snapshot-dependencies/ ./ +COPY --from=builder source/spring-boot-loader/ ./ +COPY --from=builder source/application/ ./ +ENV JAVA_OPTS="-Xms512m -Xmx512m" +ENV MAIN_CLASS="org.springframework.boot.loader.JarLauncher" +ENTRYPOINT ["sh", "-c", "exec java ${JAVA_OPTS} -Djava.security.egd=file:dev/./urandom ${MAIN_CLASS}"] diff --git a/template/devfile.yaml b/template/devfile.yaml new file mode 100644 index 0000000..2f266a3 --- /dev/null +++ b/template/devfile.yaml @@ -0,0 +1,34 @@ +schemaVersion: 2.2.0 + +metadata: + name: {{ .projectName }} + +components: + - name: tools + container: + image: registry.cn-hangzhou.aliyuncs.com/zeroware/devcontainer:latest + memoryLimit: 4Gi + + endpoints: + - name: http + exposure: public + protocol: http + targetPort: 8080 + + - name: ssh-service + kubernetes: + deployByDefault: true + inlined: | + apiVersion: v1 + kind: Service + metadata: + name: {{ .projectName }}-ssh + spec: + ports: + - name: ssh + port: 22222 + protocol: TCP + targetPort: 22222 + selector: + controller.devfile.io/devworkspace_name: {{ .projectName }} + type: NodePort diff --git a/template/environment.yml b/template/environment.yml new file mode 100644 index 0000000..2153344 --- /dev/null +++ b/template/environment.yml @@ -0,0 +1,42 @@ +groupId: {{ .groupId }} +artifactId: {{ .artifactId }} +projectName: {{ .projectName }} +applicationName: {{ .applicationName }} +branchName: {{ .branchName }} +clusterName: {{ .clusterName }} +version: {{ .version }} +dbType: {{ .dbType }} +__package: {{ .package }} +__packagePath: {{ .packagePath }} +__resources: + db: + address: {{ .db_address }} + database: {{ .db_database }} + username: {{ .db_username }} + password: {{ .db_password }} + rocketmq: + address: {{ .rocketmq_address }} + topic: {{ .rocketmq_topic }} + consumerGroup: {{ .rocketmq_consumerGroup }} + producerGroup: {{ .rocketmq_producerGroup }} + elasticsearch: + host: {{ .elasticsearch_host }} + port: {{ .elasticsearch_port }} + scheme: {{ .elasticsearch_scheme }} + username: {{ .elasticsearch_username }} + password: {{ .elasticsearch_password }} + xxljob: + address: {{ .xxljob_address }} + username: {{ .xxljob_username }} + password: {{ .xxljob_password }} + accessToken: {{ .xxljob_accessToken }} + redis: + address: {{ .redis_address }} + password: {{ .redis_password }} + maxTotal: {{ .redis_maxTotal }} + maxIdle: {{ .redis_maxIdle }} + minIdle: {{ .redis_minIdle }} +__platforms: + git_url: {{ .git_url }} + git_ssh_url: {{ .git_ssh_url }} + freeway_url: {{ .freeway_url }} diff --git a/template/insiis-web/pom.xml b/template/insiis-web/pom.xml new file mode 100644 index 0000000..94e4fc6 --- /dev/null +++ b/template/insiis-web/pom.xml @@ -0,0 +1,444 @@ + + + 4.0.0 + + insiis-web + com.insigma + 1.1.1-SNAPSHOT + jar + + insiis-web + Web project for Insiis7 + + + com.insigma + insiis7 + ${revision} + + + 7.0.0-SNAPSHOT + 1.2 + 1.0.8 + 12.2.0.1 + 8.0.31 + 8.6.0 + 2.4.0 + 42.5.6 + UTF-8 + 11 + 11 + 4.12 + 1.2.2 + 1.2.0 + 1.0-SNAPSHOT + 1.18.20 + 1.3.2 + 1.2.3 + 1.0-SNAPSHOT + 5.2.4 + 1.3.0-SNAPSHOT + 1.0.0-SNAPSHOT + 1.0.0-SNAPSHOT + 1.0.0-SNAPSHOT + 5.5.7.Final + 1.0-SNAPSHOT + 5.7.4 + 1.0.0-SNAPSHOT + 2.2 + 7.3.1 + 1.2.2 + + + + + cn.hutool + hutool-all + ${cn.hutool.all} + + + javax.persistence + javax.persistence-api + ${javax.persistence-api} + + + org.hibernate + hibernate-core + ${org.hibernate.core} + + + com.vs + ox-bo-common + ${vs.bo.common} + + + org.springframework.boot + spring-boot-dependencies + 2.6.2 + pom + import + + + junit + junit + ${junit.version} + test + + + com.vs + dist + ${dist.version} + + + org.projectlombok + lombok + ${lombok.version} + + + javax.annotation + javax.annotation-api + ${javax.annotation.api.version} + + + ch.qos.logback + logback-classic + ${logback.classic.version} + + + com.vs + ox-basidc-common + ${ox.basidc.common} + + + org.flywaydb + flyway-core + ${flyway.version} + + + com.vs + common-rpc + ${vs.common.rpc.version} + + + com.vs + vs-sqlmapper-spring + ${vs.sqlmapper.spring} + + + com.vs + vs-elasticsearch + ${vs.elasticsearch.version} + + + com.vs + vs-mock-web + ${vs.mock.spring} + + + com.vs + vs-debug-agent + ${vs.debug.version} + + + com.vs + vs-debug-plugin + ${vs.debug.version} + + + com.vs + vs.common.util + ${vs.common.util.version} + + + + + + org.springframework.boot + spring-boot-starter-test + + + com.vs + ox-bo-common + ${vs.bo.common} + + + com.vs + common-rpc + ${vs.common.rpc.version} + + + com.insigma + insiis-encryptor + 1.2.0-SNAPSHOT + + + com.insigma + insiis-core + ${revision} + + + com.insigma + insiis-commons + ${revision} + + + com.insigma + insiis-securities + ${revision} + + + com.insigma + insiis-web-support + ${revision} + + + com.insigma + insiis-scheduler + ${revision} + + + com.insigma + insiis-dfs + ${revision} + + + cn.ctyun + oos-sdk + + + + + com.insigma + insiis-export-queue + ${revision} + + + com.insigma + ucenter-sdk + ${ucenter-sdk.version} + + + com.vs + common-rpc + 1.3.0-SNAPSHOT + + + com.vs + vs-sqlmapper-spring + + + + com.epsoft.isp + isp-assist-client + 5.0.5 + + + com.github.danielwegener + logback-kafka-appender + + + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + + + + org.springframework.cloud + spring-cloud-sleuth-zipkin + + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + + com.alibaba + druid-spring-boot-starter + ${druid.version} + + + + com.oracle.jdbc + ojdbc8 + ${oracle.version} + + + mysql + mysql-connector-java + ${mysql.version} + + + com.oceanbase + oceanbase-client + ${oceanbase.version} + + + com.google.guava + guava + + + + + cn.com.kingbase + kingbase8 + ${kingbase8.version} + + + + org.postgresql + postgresql + ${postgresql.version} + + + + + org.apache.commons + commons-lang3 + + + org.mohrss.leaf + leaf-core-framework + ${leaf-framework.version} + + + mybatis-plus-annotation + com.baomidou + + + org.codehaus.jackson + jackson-mapper-asl + + + + + org.mohrss.leaf + leaf-uni-common + ${leaf-framework.version} + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi + + + com.alibaba + fastjson + + + + + com.insigma + odin-est + ${odin-est.version} + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + com.baomidou + mybatis-plus-generator + ${mybaits-plus.version} + provided + + + + + org.yaml + snakeyaml + 2.2 + + + com.google.guava + guava + 32.1.3-jre + + + + commons-fileupload + commons-fileupload + 1.5 + + + org.codehaus.jettison + jettison + 1.5.4 + + + com.thoughtworks.xstream + xstream + 1.4.20 + + + com.fasterxml.woodstox + woodstox-core + 6.5.1 + + + + com.insigma + insiis-data-firewall + 1.0.0-SNAPSHOT + + + + com.demoyjh + demo_person-entrance-web + 3.0-SNAPSHOT + + + com.demoyjh + demo_person-entrance-rpc + 3.0-SNAPSHOT + + + org.springframework + spring-web + + + + + + insiis7 + + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + true + + + + + + + diff --git a/template/insiis-web/src/main/java/com/insigma/InsiisWebApplication.java b/template/insiis-web/src/main/java/com/insigma/InsiisWebApplication.java new file mode 100644 index 0000000..b983b09 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/InsiisWebApplication.java @@ -0,0 +1,29 @@ +package com.insigma; + +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.vs.sqlmapper.spring.scan.VSDaoBeanScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.Import; + +@EnableDiscoveryClient +@EnableFeignClients +@SpringBootApplication(scanBasePackages = {"{{.groupId}}", "com.vs","com.insigma"}) +@VSDaoBeanScan(basePackages = {"com.vs","{{.groupId}}"}) +@Import({DataSourceConfig.class,com.vs.sqlmapper.spring.DataSourceConfig.class}) +public class InsiisWebApplication extends SpringBootServletInitializer { + + public static void main(String[] args) { + SpringApplication.run(InsiisWebApplication.class, args); + } + + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { + return builder.sources(InsiisWebApplication.class); + } + +} diff --git a/template/insiis-web/src/main/java/com/insigma/business/common/controller/CommonSearchController.java b/template/insiis-web/src/main/java/com/insigma/business/common/controller/CommonSearchController.java new file mode 100644 index 0000000..e173a4e --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/business/common/controller/CommonSearchController.java @@ -0,0 +1,46 @@ +package com.insigma.business.common.controller; + +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.ResponseMessage; +import com.insigma.framework.db.PageInfo; +import com.insigma.sys.entity.SysUser; +import com.insigma.sys.repository.SysUserRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.*; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author yinjh + * @version 2022/6/15 + * @since 2.6.5 + */ +@RestController +@RequestMapping("/common/search") +public class CommonSearchController { + + @Autowired + private SysUserRepository sysUserRepository; + + @PostMapping("/person") + public ResponseMessage personSearch(@RequestBody JSONObject jsonObject) { + String keyWord = jsonObject.getString("keyWord"); + Integer page = jsonObject.getInteger("page"); + Integer size = jsonObject.getInteger("size"); + SysUser params = new SysUser(); + params.setLogonName(keyWord); + page = page < 0 ? 0 : page; + Pageable pageable = PageRequest.of(page, size, Sort.by(Sort.Order.asc("logonName"))); + + ExampleMatcher matcher = ExampleMatcher.matching() + .withMatcher("logonName", ExampleMatcher.GenericPropertyMatchers.contains()); + Page p = sysUserRepository.findAll(Example.of(params, matcher), pageable); + PageInfo pageInfo = new PageInfo<>(); + pageInfo.setTotal(p.getTotalElements()); + pageInfo.setData(p.getContent()); + return ResponseMessage.ok(pageInfo); + } + +} diff --git a/template/insiis-web/src/main/java/com/insigma/business/demo/blo/DemoPersonBLO.java b/template/insiis-web/src/main/java/com/insigma/business/demo/blo/DemoPersonBLO.java new file mode 100644 index 0000000..bd7549b --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/business/demo/blo/DemoPersonBLO.java @@ -0,0 +1,26 @@ +package com.insigma.business.demo.blo; + +import com.insigma.business.demo.dto.DemoPersonDTO; +import com.insigma.framework.db.PageInfo; +import org.mohrss.leaf.core.framework.domain.blo.IBLO; + +import java.util.List; + +/** + * @author yinjh + * @version 2021/3/12 + */ +public interface DemoPersonBLO extends IBLO { + + DemoPersonDTO queryPerson(String id); + + void deletePersons(List ids); + + void savePerson(DemoPersonDTO demoPersonDTO); + + PageInfo queryPersonList(DemoPersonDTO queryDTO, Integer page, Integer size); + + DemoPersonDTO selectOne(DemoPersonDTO demoPersonDTO); + + PageInfo queryPersonListByExport(DemoPersonDTO queryDTO, Integer page, Integer size); +} diff --git a/template/insiis-web/src/main/java/com/insigma/business/demo/blo/impl/DemoPersonBLOImpl.java b/template/insiis-web/src/main/java/com/insigma/business/demo/blo/impl/DemoPersonBLOImpl.java new file mode 100644 index 0000000..5fcc4c1 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/business/demo/blo/impl/DemoPersonBLOImpl.java @@ -0,0 +1,148 @@ +package com.insigma.business.demo.blo.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.insigma.business.demo.blo.DemoPersonBLO; +import com.insigma.business.demo.dao.DemoPersonDAO; +import com.insigma.business.demo.dto.DemoPersonDTO; +import com.insigma.business.demo.entity.DemoPerson; +import com.insigma.framework.db.JdbcPageHelper; +import com.insigma.framework.db.PageInfo; +import com.insigma.framework.util.DtoEntityUtil; +import com.insigma.framework.util.IDUtil; +import com.insigma.web.support.util.SysFunctionManager; +import lombok.SneakyThrows; +import org.mohrss.leaf.uni.common.domain.blo.impl.BLOImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author yinjh + * @version 2021/3/12 + */ +@Service +public class DemoPersonBLOImpl extends BLOImpl implements DemoPersonBLO { + + @Autowired + private DemoPersonDAO demoPersonDAO; + + @Autowired + private JdbcTemplate jdbcTemplate; + + @Override + public DemoPersonDTO queryPerson(String id) { + DemoPerson dp = demoPersonDAO.selectDemoPersonById(id); +// DemoPerson dp = demoPersonDAO.sqlSession().selectOne("selectDemoPersonById", id); +// DemoPerson dp = demoPersonDAO.getById(id); + DemoPersonDTO dto = DtoEntityUtil.trans(dp, DemoPersonDTO.class); + return dto; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deletePersons(List ids) { + demoPersonDAO.deleteBatchIds(ids); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void savePerson(DemoPersonDTO demoPersonDTO) { + DemoPerson dp = DtoEntityUtil.trans(demoPersonDTO, DemoPerson.class); + String id = null; + if (ObjectUtils.isEmpty(demoPersonDTO.getId())) { // 新增 + + id = IDUtil.generateUUID(); + } else { + id = demoPersonDTO.getId(); + } + dp.setId(id); + dp.setCreate_time(new Date()); +// HList hList = new HList(JSON.parseObject(JSON.toJSONString(dp))); +// hList.setNVarchar2Columns("address"); +// hList.save("demo_person", "address;name", "id", HList.SAVEMODE_INSERT_OR_UPDATE); + demoPersonDAO.insertOrUpdate(dp); + } + + @SneakyThrows + @Override + public PageInfo queryPersonList(DemoPersonDTO queryDTO, Integer page, Integer size) { + //查询条件为时间段选项 + SimpleDateFormat st = new SimpleDateFormat("yyyy-MM-dd"); + Date oTime = null; + Date pTime = null; + if (!ObjectUtils.isEmpty(queryDTO.getStartTime())) { + oTime = st.parse(queryDTO.getStartTime().split(",")[0]); + pTime = st.parse(queryDTO.getStartTime().split(",")[1]); + } + + LambdaQueryWrapper wrapper = new QueryWrapper().lambda(); + wrapper.like(!ObjectUtils.isEmpty(queryDTO.getName()), DemoPerson::getName, "%" + queryDTO.getName() + "%") + .eq(!ObjectUtils.isEmpty(queryDTO.getSex()), DemoPerson::getSex, queryDTO.getSex()) + .ge(!ObjectUtils.isEmpty(queryDTO.getStartTime()), DemoPerson::getBirthday, oTime) + .le(!ObjectUtils.isEmpty(queryDTO.getStartTime()), DemoPerson::getBirthday, pTime) + .orderByDesc(DemoPerson::getCreate_time); + + Page dpPage = new Page<>(page, size); + + IPage mapIPage = demoPersonDAO.page(dpPage, wrapper); + List records = mapIPage.getRecords(); + List list = DtoEntityUtil.trans(records, DemoPersonDTO.class); + + PageInfo pageInfo = new PageInfo<>(); + pageInfo.setTotal(mapIPage.getTotal()); + pageInfo.setData(list); + return pageInfo; + } + + @Override + public DemoPersonDTO selectOne(DemoPersonDTO demoPersonDTO) { + LambdaQueryWrapper wrapper = new QueryWrapper().lambda(); + wrapper.eq(!ObjectUtils.isEmpty(demoPersonDTO.getName()), DemoPerson::getName, demoPersonDTO.getName()) + .eq(!ObjectUtils.isEmpty(demoPersonDTO.getSex()), DemoPerson::getSex, demoPersonDTO.getSex()) + .eq(!ObjectUtils.isEmpty(demoPersonDTO.getBirthday()), DemoPerson::getBirthday, demoPersonDTO.getBirthday()) + .eq(!ObjectUtils.isEmpty(demoPersonDTO.getMobile()), DemoPerson::getMobile, demoPersonDTO.getAddress()) + .eq(!ObjectUtils.isEmpty(demoPersonDTO.getAddress()), DemoPerson::getAddress, demoPersonDTO.getAddress()); + //查询有没有相同的数据 + DemoPerson demoPerson = demoPersonDAO.selectOne(wrapper); + DemoPersonDTO personDTO = DtoEntityUtil.trans(demoPerson, DemoPersonDTO.class); + return personDTO; + } + + @SneakyThrows + @Override + public PageInfo queryPersonListByExport(DemoPersonDTO queryDTO, Integer page, Integer size) { + Map params = new HashMap<>(); + StringBuffer sql = new StringBuffer("select * from demo_person where 1=1 "); + if (!ObjectUtils.isEmpty(queryDTO.getName())) { + sql.append(" and name like :name"); + params.put("name", "%" + queryDTO.getName() + "%"); + } + if (!ObjectUtils.isEmpty(queryDTO.getSex())) { + sql.append(" and sex = :sex"); + params.put("sex", queryDTO.getSex()); + } + if (!ObjectUtils.isEmpty(queryDTO.getStartTime())) { + //查询条件为时间段选项 + SimpleDateFormat st = new SimpleDateFormat("yyyy-MM-dd"); + Date oTime = st.parse(queryDTO.getStartTime().split(",")[0]); + Date pTime = st.parse(queryDTO.getStartTime().split(",")[1]); + sql.append(" and birthday > :startTime and birthday < :endTime"); + params.put("startTime", oTime); + params.put("endTime", pTime); + } + JdbcPageHelper jdbcPageHelper = new JdbcPageHelper(jdbcTemplate, page, size, "grid", SysFunctionManager.getFunctionId()); + return jdbcPageHelper.queryPagination(sql.toString(), params, DemoPersonDTO.class); + } + +} diff --git a/template/insiis-web/src/main/java/com/insigma/business/demo/bpo/DemoPersonBPO.java b/template/insiis-web/src/main/java/com/insigma/business/demo/bpo/DemoPersonBPO.java new file mode 100644 index 0000000..82008bc --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/business/demo/bpo/DemoPersonBPO.java @@ -0,0 +1,27 @@ +package com.insigma.business.demo.bpo; + +import com.insigma.business.demo.dto.DemoPersonDTO; +import com.insigma.framework.db.PageInfo; +import org.mohrss.leaf.core.framework.domain.bpo.IBPO; + +import java.util.List; + +/** + * @author yinjh + * @version 2021/3/12 + */ +public interface DemoPersonBPO extends IBPO { + + DemoPersonDTO queryPerson(String id); + + void deletePersons(List ids); + + void savePerson(DemoPersonDTO demoPersonDTO); + + PageInfo queryPersonList(DemoPersonDTO queryDTO, Integer page, Integer size); + + + DemoPersonDTO selectOne(DemoPersonDTO demoPersonDTO); + + PageInfo queryPersonListByExport(DemoPersonDTO queryDTO, Integer page, Integer size); +} diff --git a/template/insiis-web/src/main/java/com/insigma/business/demo/bpo/impl/DemoPersonBPOImpl.java b/template/insiis-web/src/main/java/com/insigma/business/demo/bpo/impl/DemoPersonBPOImpl.java new file mode 100644 index 0000000..4637aad --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/business/demo/bpo/impl/DemoPersonBPOImpl.java @@ -0,0 +1,56 @@ +package com.insigma.business.demo.bpo.impl; + +import com.insigma.business.demo.blo.DemoPersonBLO; +import com.insigma.business.demo.bpo.DemoPersonBPO; +import com.insigma.business.demo.dto.DemoPersonDTO; +import com.insigma.framework.db.PageInfo; +import org.mohrss.leaf.uni.common.domain.bpo.impl.BPOImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * @author yinjh + * @version 2021/3/12 + */ +@Service +public class DemoPersonBPOImpl extends BPOImpl implements DemoPersonBPO { + + @Autowired + private DemoPersonBLO demoPersonBLO; + + @Override + public DemoPersonDTO queryPerson(String id) { + DemoPersonDTO demoPersonDTO = demoPersonBLO.queryPerson(id); + return demoPersonDTO; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deletePersons(List ids) { + demoPersonBLO.deletePersons(ids); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void savePerson(DemoPersonDTO demoPersonDTO) { + demoPersonBLO.savePerson(demoPersonDTO); + } + + @Override + public PageInfo queryPersonList(DemoPersonDTO queryDTO, Integer page, Integer size) { + return demoPersonBLO.queryPersonList(queryDTO, page, size); + } + + @Override + public DemoPersonDTO selectOne(DemoPersonDTO demoPersonDTO) { + return demoPersonBLO.selectOne(demoPersonDTO); + } + + @Override + public PageInfo queryPersonListByExport(DemoPersonDTO queryDTO, Integer page, Integer size) { + return demoPersonBLO.queryPersonListByExport(queryDTO, page, size); + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/business/demo/controller/DemoPersonController.java b/template/insiis-web/src/main/java/com/insigma/business/demo/controller/DemoPersonController.java new file mode 100644 index 0000000..9900f18 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/business/demo/controller/DemoPersonController.java @@ -0,0 +1,138 @@ +package com.insigma.business.demo.controller; + +import com.insigma.business.demo.bpo.DemoPersonBPO; +import com.insigma.business.demo.dto.DemoPersonDTO; +import com.insigma.framework.ResponseMessage; +import com.insigma.web.support.annotation.OdinRequest; +import com.insigma.web.support.annotation.OdinRequestParam; +import com.insigma.web.support.controller.BaseController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.ObjectUtils; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 人员增删改查demo + *

+ * 实体类传参开发方式,需继承BaseController,并且需要实体类传参的方法上加上@OdinRequest + * 在doInit方法上需要加上注解@OdinRequest(init = true),init = true为初始化字典数据和模块信息,其他方法上只需加@OdinRequest即可,不需要参数 + * 方法参数如果不指定@OdinRequestParam注解,则按照参数名去取前端传过来的数据,并将其转化成实体类 + * 如果指定了@OdinRequestParam注解,并且设定了value值,则根据value值去取前端传过来的数据 + * 其中@OdinRequestParam参数required默认为true,即如果找不到对应的数据,则返回错误,当设置成false,则不会 + * 如果需要接收前端传过来的表格数据,则可以通过定义PageInfo来接收数据 + * + * @author yinjh + * @since 2020-05-28 + */ +@RestController +@RequestMapping("/business/demo/DemoPerson") +public class DemoPersonController extends BaseController { + + @Autowired + private DemoPersonBPO demoPersonBPO; + + @OdinRequest(init = true) + @PostMapping("/doInit") + public ResponseMessage doInit(DemoPersonDTO f_form, Integer t_tableData_size) { + tableDataQuery(f_form, 1, t_tableData_size); + return this.ok(); + } + + @OdinRequest + @PostMapping("/query") + public ResponseMessage query(@OdinRequestParam("f_form") DemoPersonDTO queryDTO, + //@OdinRequestParam("t_tableData") PageInfo pageInfo, // 没用到,只作如何取表格数据的演示 + Integer t_tableData_size) { + tableDataQuery(queryDTO, 1, t_tableData_size); +// this.set("page", 1); // 需要将前端表格中:currentPage定义的值设置成1 + return this.ok(); + } + + @OdinRequest + @PostMapping("/doGridQuery/{name}") + public ResponseMessage doGridQuery(@OdinRequestParam("f_form") DemoPersonDTO queryDTO, + @OdinRequestParam("t_tableData_page") Integer page, + @OdinRequestParam("t_tableData_size") Integer size, + @PathVariable String name) { + tableDataQuery(queryDTO, page, size); +// this.set("page", page); // 需要将t_tableData_page的值赋值到前端表格:currentPage的值中 + return this.ok(); + } + + @OdinRequest + @PostMapping("/add") + public ResponseMessage add() { + this.clearForm("f_personForm"); + this.set("dialogFormVisible", true); + this.set("dialogFormTitle", "新增人员"); + return this.ok(); + } + + @OdinRequest + @PostMapping("/update") + public ResponseMessage update(String id) { + DemoPersonDTO dto = demoPersonBPO.queryPerson(id); + this.toForm("f_personForm", dto); + this.set("dialogFormVisible", true); + this.set("dialogFormTitle", "修改人员"); + return this.ok(); + } + + @OdinRequest(refresh = true) + @PostMapping("/batchDelete") + public ResponseMessage batchDelete() { + List list = this.getCheckedTableData("t_tableData", DemoPersonDTO.class); + if (list.size() == 0) { + return this.error("请勾选需要删除的人员!"); + } + List ids = list.stream().map(o -> o.getId()).collect(Collectors.toList()); + demoPersonBPO.deletePersons(ids); +// this.refresh(); + return this.ok("删除成功!"); + } + + @OdinRequest(refresh = true) // refresh = true 请求结束后刷新页面 + @PostMapping("/delete") + public ResponseMessage delete(String id) { + List ids = Arrays.asList(id); + demoPersonBPO.deletePersons(ids); +// this.refresh(); + return this.ok("删除成功!"); + } + + @OdinRequest(refresh = true) + @PostMapping("/doSave/{name}") + public ResponseMessage doSave(@OdinRequestParam("f_personForm") DemoPersonDTO demoPersonDTO, @PathVariable String name) { + + if (ObjectUtils.isEmpty(demoPersonDTO.getId())) { + DemoPersonDTO dto = demoPersonBPO.selectOne(demoPersonDTO); + if (dto != null) { + return this.error("不可添加重复数据!!"); + } + } + demoPersonBPO.savePerson(demoPersonDTO); + this.set("dialogFormVisible", false); + //this.refresh(); + return this.ok("保存成功!"); + } + + public void tableDataQuery(DemoPersonDTO queryDTO, Integer t_tableData_page, Integer t_tableData_size) { + this.pageQuery("t_tableData", () -> { + this.set("page", t_tableData_page); // 需要将前端表格中:currentPage定义的值设置成page的值 + return demoPersonBPO.queryPersonListByExport(queryDTO, t_tableData_page, t_tableData_size); + }, (demoPersonDTO, checkbox) -> { + if ("1".equals(demoPersonDTO.getSex())) { +// checkbox.setDisabled(true); // 设置行复选框不可编辑 + } else { +// checkbox.setChecked(true); // 设置行复选框已选中 + } + }); + } + +} diff --git a/template/insiis-web/src/main/java/com/insigma/business/demo/dao/DemoPersonDAO.java b/template/insiis-web/src/main/java/com/insigma/business/demo/dao/DemoPersonDAO.java new file mode 100644 index 0000000..1ade262 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/business/demo/dao/DemoPersonDAO.java @@ -0,0 +1,20 @@ +package com.insigma.business.demo.dao; + +import com.insigma.business.demo.entity.DemoPerson; +import com.insigma.framework.mybatis.BaseDAO; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author yinjh + * @since 2020-05-28 + */ +@Mapper +public interface DemoPersonDAO extends BaseDAO { + + DemoPerson selectDemoPersonById(String id); + +} diff --git a/template/insiis-web/src/main/java/com/insigma/business/demo/dto/DemoPersonDTO.java b/template/insiis-web/src/main/java/com/insigma/business/demo/dto/DemoPersonDTO.java new file mode 100644 index 0000000..526c77f --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/business/demo/dto/DemoPersonDTO.java @@ -0,0 +1,36 @@ +package com.insigma.business.demo.dto; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * Created by yinjh on 2020/5/28. + */ +@Data +public class DemoPersonDTO implements Serializable { + private Boolean checked;//用于设置复选框是否选中 + + private Boolean disabled;//用于设置复选框是否可编辑 + + private String id; + + private String name; + + private String sex; + + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private Date birthday; + + private String mobile; + + private String address; + + private String startTime; + + private Date create_time; + +} diff --git a/template/insiis-web/src/main/java/com/insigma/business/demo/dto/TestDTO.java b/template/insiis-web/src/main/java/com/insigma/business/demo/dto/TestDTO.java new file mode 100644 index 0000000..a1c26f0 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/business/demo/dto/TestDTO.java @@ -0,0 +1,18 @@ +package com.insigma.business.demo.dto; + +import com.insigma.framework.data.firewall.desensitization.annotation.NameDesensitization; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author yinjh + * @since 2024/5/22 + */ +@Data +public class TestDTO implements Serializable { + + @NameDesensitization + private String name; + +} diff --git a/template/insiis-web/src/main/java/com/insigma/business/demo/entity/DemoPerson.java b/template/insiis-web/src/main/java/com/insigma/business/demo/entity/DemoPerson.java new file mode 100644 index 0000000..9560261 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/business/demo/entity/DemoPerson.java @@ -0,0 +1,54 @@ +package com.insigma.business.demo.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * + *

+ * + * @author yinjh + * @since 2020-05-28 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("DEMO_PERSON") +public class DemoPerson implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId("ID") + private String id; + + @TableField("NAME") + private String name; + + @TableField("SEX") + private String sex; + + @TableField("BIRTHDAY") + private Date birthday; + + @TableField("MOBILE") + private String mobile; + + @TableField("ADDRESS") + private String address; + + @TableField("PRSENO") + private Long prseno; + + @TableField("CREATE_TIME") + private Date create_time; + + +} diff --git a/template/insiis-web/src/main/java/com/insigma/config/RestTemplateConfig.java b/template/insiis-web/src/main/java/com/insigma/config/RestTemplateConfig.java new file mode 100644 index 0000000..9c426a9 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/config/RestTemplateConfig.java @@ -0,0 +1,38 @@ +package com.insigma.config; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.http.client.ClientHttpRequestFactory; +import org.springframework.http.client.SimpleClientHttpRequestFactory; +import org.springframework.web.client.RestTemplate; + +/** + * @author Linwj + * @version 2019/6/12 10:26 + */ +@Configuration +public class RestTemplateConfig { + + @Value("${sys.rest-template.connect-timeout:30000}") + private int connectTimeout; + + @Value("${sys.rest-template.read-timeout:30000}") + private int readTimeout; + + @Bean + @Primary + public RestTemplate restTemplate(ClientHttpRequestFactory factory){ + return new RestTemplate(factory); + } + + @Bean + public ClientHttpRequestFactory simpleClientHttpRequestFactory(){ + SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); + factory.setConnectTimeout(connectTimeout); + factory.setReadTimeout(readTimeout); + return factory; + } + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/common/CommonValidator.java b/template/insiis-web/src/main/java/com/insigma/sys/common/CommonValidator.java new file mode 100644 index 0000000..7104037 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/common/CommonValidator.java @@ -0,0 +1,137 @@ +package com.insigma.sys.common; + +import com.insigma.framework.exception.AppException; +import com.insigma.sys.entity.Aa26; +import com.insigma.sys.entity.SysOrg; +import com.insigma.sys.entity.SysRole; +import com.insigma.sys.entity.SysUser; +import com.insigma.sys.repository.Aa26Repository; +import com.insigma.sys.repository.RoleRepository; +import com.insigma.sys.repository.SysOrgRepository; +import com.insigma.sys.repository.SysUserRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author yinjh + * @version 2021/12/8 + */ +@Component +public class CommonValidator { + + @Autowired + private CurrentUserService currentUserService; + + @Autowired + private RoleRepository roleRepository; + + @Autowired + private SysOrgRepository sysOrgRepository; + + @Autowired + private Aa26Repository aa26Repository; + + @Autowired + private SysUserRepository sysUserRepository; + + /** + * 校验当前登录用户是否有相应角色的操作权限 + * @param roleId 角色ID + * @return + */ + public boolean validateRole(String roleId) { + SysUser sysUser = currentUserService.getCurrentUser(); + SysRole sysRole = roleRepository.findById(roleId).orElseThrow(() -> new AppException("角色不存在!")); + if ("1".equals(sysUser.getUserType())) { + return true; + } else if ("2".equals(sysUser.getUserType())) { + if (sysUser.getAreaId() != null && sysUser.getAreaId().equals(sysRole.getAreaid())) { + return true; + } + } else if ("3".equals(sysUser.getUserType())) { + if (sysUser.getOrgId() != null && sysUser.getOrgId().equals(sysRole.getOrgid())) { + return true; + } + } + return false; + } + + /** + * 校验角色列表 + * @param roleIds + * @return + */ + public boolean validateRoleIds(List roleIds) { + for (int i = 0; i < roleIds.size(); i++) { + if (!validateRole(roleIds.get(i))) { + return false; + } + } + return true; + } + + /** + * 校验当前登录用户是否有相应行政区划的操作权限 + * @param areaId 区域ID + * @return + */ + public boolean validateArea(String areaId, String userType) { + SysUser sysUser = currentUserService.getCurrentUser(); + if ("1".equals(sysUser.getUserType()) && "1".equals(userType)) { + return true; + } + Aa26 aa26 = aa26Repository.findById(areaId).orElseThrow(() -> new AppException("行政区划不存在!")); + if ("1".equals(sysUser.getUserType())) { + return true; + } else if ("2".equals(sysUser.getUserType())) { + List list = aa26Repository.findByAab301AndIdPath(sysUser.getAreaId() + "", aa26.getIdpath()); + if (list.size() > 0) { + return true; + } + } else if ("3".equals(sysUser.getUserType())) { + if (aa26.getAab301().equals(sysUser.getAreaId() + "")) { + return true; + } + } + return false; + } + + /** + * 校验当前登录用户是否有相应机构的操作权限 + * @param orgId 机构ID + * @return + */ + public boolean validateOrg(Long orgId, String userType) { + SysUser sysUser = currentUserService.getCurrentUser(); + if ("1".equals(userType)) { + return "1".equals(sysUser.getUserType()); + } + SysOrg sysOrg = sysOrgRepository.findById(orgId).orElseThrow(() -> new AppException("机构不存在!")); + if ("1".equals(sysUser.getUserType())) { + return true; + } else if ("2".equals(sysUser.getUserType())) { + List list = sysOrgRepository.findByRegioncodeAndIdPath(sysUser.getAreaId() + "", sysOrg.getIdpath()); + if (list.size() > 0) { + return true; + } + } else if ("3".equals(sysUser.getUserType())) { + if (sysOrg.getOrgid().equals(orgId)) { + return true; + } + } + return false; + } + + /** + * 校验当前登录用户是否有相应用户的操作权限 + * @param userId + * @return + */ + public boolean validateUser(String userId) { + SysUser sysUser = sysUserRepository.findById(userId).orElseThrow(() -> new AppException("用户不存在!")); + return validateOrg(sysUser.getOrgId(), sysUser.getUserType()); + } + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/common/CurrentUserService.java b/template/insiis-web/src/main/java/com/insigma/sys/common/CurrentUserService.java new file mode 100644 index 0000000..1b3ae38 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/common/CurrentUserService.java @@ -0,0 +1,15 @@ +package com.insigma.sys.common; + +import com.insigma.sys.entity.SysUser; + +/** + * 获取当前用户信息服务类 + * @author jinw + * @version 2019/1/9 + *

epsoft - insiis7

+ */ + +public interface CurrentUserService { + + SysUser getCurrentUser(); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/common/OdinClientAuth.java b/template/insiis-web/src/main/java/com/insigma/sys/common/OdinClientAuth.java new file mode 100644 index 0000000..afb685d --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/common/OdinClientAuth.java @@ -0,0 +1,64 @@ +package com.insigma.sys.common; + +import com.insigma.framework.util.SysUtils; +import com.insigma.odin.framework.est.EstException; +import com.insigma.odin.framework.est.auth.ClientAuth; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.ApplicationContext; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.web.authentication.WebAuthenticationDetails; +import org.springframework.security.web.authentication.logout.LogoutHandler; +import org.springframework.web.context.support.WebApplicationContextUtils; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * @author jinw + * @version 2020/2/7 + *

epsoft - insiis7

+ */ +public class OdinClientAuth implements ClientAuth { + + private static final Logger log = LoggerFactory.getLogger(OdinClientAuth.class); + + @Override + public boolean syslogon(String loginName, HttpServletRequest request) throws EstException { + UserDetailsService userDetailsService; + ApplicationContext applicationContext = WebApplicationContextUtils.findWebApplicationContext(request.getServletContext()); + if (SysUtils.getAppContext() != null) { + userDetailsService = SysUtils.getBean(UserDetailsService.class); + } else { + userDetailsService = applicationContext.getBean(UserDetailsService.class); + } + UserDetails userDetails = userDetailsService.loadUserByUsername(loginName); + UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(userDetails, userDetails.getPassword(), userDetails.getAuthorities()); + token.setDetails(new WebAuthenticationDetails(request)); + SecurityContextHolder.getContext().setAuthentication(token); + request.getSession().setAttribute("SPRING_SECURITY_CONTEXT", SecurityContextHolder.getContext()); + request.getSession().setAttribute(OdinClientAuthExtendFilter.IS_SAVE_LOGONLOG_SESSION_KEY, Boolean.TRUE); + return true; + } + + @Override + public boolean syslogout(String loginName, HttpServletRequest request, HttpServletResponse response) throws EstException { + LogoutHandler logoutHandler; + if (SysUtils.getAppContext() != null) { + logoutHandler = SysUtils.getBean("myLogoutHandler", LogoutHandler.class);; + } else { + logoutHandler = WebApplicationContextUtils.findWebApplicationContext(request.getServletContext()).getBean("myLogoutHandler",LogoutHandler.class); + } + SecurityContext securityContext = (SecurityContext) request.getSession().getAttribute("SPRING_SECURITY_CONTEXT"); + if (securityContext != null) { + logoutHandler.logout(request, response, securityContext.getAuthentication()); + request.getSession().removeAttribute("SPRING_SECURITY_CONTEXT"); + } + request.getSession().invalidate(); + return true; + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/common/OdinClientAuthExtendFilter.java b/template/insiis-web/src/main/java/com/insigma/sys/common/OdinClientAuthExtendFilter.java new file mode 100644 index 0000000..953468d --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/common/OdinClientAuthExtendFilter.java @@ -0,0 +1,55 @@ +package com.insigma.sys.common; + +import com.insigma.framework.util.SysUtils; +import com.insigma.framework.util.UserAgentUtil; +import com.insigma.framework.web.securities.commons.SecurityUtils; +import com.insigma.framework.web.securities.entity.SysLogonLog; +import com.insigma.framework.web.securities.entity.SysUserDetails; +import com.insigma.framework.web.securities.service.SysLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Component; +import org.springframework.web.filter.OncePerRequestFilter; + +import javax.servlet.*; +import javax.servlet.annotation.WebFilter; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.IOException; + +/** + * @author jinw + * @version 2020/2/13 + *

epsoft - insiis7

+ */ +@Component +@WebFilter(filterName = "odinClientExtendFilter",urlPatterns = "/*") +@Slf4j +public class OdinClientAuthExtendFilter extends OncePerRequestFilter { + + public static final String IS_SAVE_LOGONLOG_SESSION_KEY = "save_logonlog_flag"; + + @Override + protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException { + HttpSession session = httpServletRequest.getSession(); + Boolean isSaveLogonlog = null; + try { + isSaveLogonlog = (Boolean) session.getAttribute(IS_SAVE_LOGONLOG_SESSION_KEY); + if (isSaveLogonlog != null && isSaveLogonlog.booleanValue()) { + SysLogonLog logonLog = SysUtils.getBean(SysLogService.class).saveLogonLog(SecurityUtils.getIpAddr(httpServletRequest), session.getId(), UserAgentUtil.getBrowser(httpServletRequest), UserAgentUtil.getSystem(httpServletRequest)); + SysUserDetails userDetails = (SysUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); + if (userDetails != null) { + userDetails.getOthers().put("logid", logonLog.getLogonlogid()); + } + } + } catch (Exception e) { + log.error("记录登录日志失败!", e); + } finally { + if (isSaveLogonlog != null) { + session.removeAttribute(IS_SAVE_LOGONLOG_SESSION_KEY); + } + } + filterChain.doFilter(httpServletRequest, httpServletResponse); + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/common/SysEntityListener.java b/template/insiis-web/src/main/java/com/insigma/sys/common/SysEntityListener.java new file mode 100644 index 0000000..dc48ad1 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/common/SysEntityListener.java @@ -0,0 +1,47 @@ +package com.insigma.sys.common; + +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.util.SysUtils; +import com.insigma.sys.service.SysHashService; +import lombok.extern.slf4j.Slf4j; + +import javax.persistence.PostPersist; +import javax.persistence.PostRemove; +import javax.persistence.PostUpdate; + +/** + * @author jinw + * @version 2021/8/16 + *

epsoft - insiis7

+ */ +@Slf4j +public class SysEntityListener { + + @PostPersist + public void postPersist(Object entity) { + saveEntityHashCode(entity, PostMode.SAVE); + } + + @PostUpdate + public void postUpdate(Object entity) { + saveEntityHashCode(entity, PostMode.UPDATE); + } + + @PostRemove + public void postRemove(Object entity) { + saveEntityHashCode(entity, PostMode.DELETE); + } + + public void saveEntityHashCode(Object entity, PostMode postMode) { + log.debug("Class: {}, Spe: {}", entity.getClass().getCanonicalName(), JSONObject.toJSONString(entity)); + SysHashService sysHashService = SysUtils.getBean(SysHashService.class); + sysHashService.saveHash(entity); + } + + private enum PostMode { + SAVE, + UPDATE, + DELETE + } + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/common/SysManageMode.java b/template/insiis-web/src/main/java/com/insigma/sys/common/SysManageMode.java new file mode 100644 index 0000000..064ec38 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/common/SysManageMode.java @@ -0,0 +1,49 @@ +package com.insigma.sys.common; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.util.function.Supplier; + +/** + * @author jinw + * @version 2020/5/19 + *

epsoft - insiis7

+ */ +@Component +public final class SysManageMode { + + @Value("${sys.mode.triple:false}") + private boolean tripleMode; + + private static boolean TRIPLE_MODE = false; + + @PostConstruct + public void init() { + TRIPLE_MODE = tripleMode; + } + + public static boolean isTripleMode() { + return TRIPLE_MODE; + } + + public static T doActionInTripleMode(Supplier tripleModeAction) { + if (TRIPLE_MODE) + return tripleModeAction.get(); + return null; + } + + public static void doActionInTripleMode(Runnable tripleModeRun) { + if (TRIPLE_MODE) + tripleModeRun.run(); + } + + public static void doAction(Runnable tripleModeRun, Runnable notTripleModeRun) { + if (TRIPLE_MODE) { + tripleModeRun.run(); + } else { + notTripleModeRun.run(); + } + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/common/impl/CurrentUserServiceImpl.java b/template/insiis-web/src/main/java/com/insigma/sys/common/impl/CurrentUserServiceImpl.java new file mode 100644 index 0000000..32118a8 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/common/impl/CurrentUserServiceImpl.java @@ -0,0 +1,57 @@ +package com.insigma.sys.common.impl; + +import com.insigma.framework.exception.UserNoLoginException; +import com.insigma.framework.web.securities.entity.SysUserDetails; +import com.insigma.sys.common.CurrentUserService; +import com.insigma.sys.entity.SysUser; +import com.insigma.sys.repository.SysUserRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Service; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import java.util.Objects; + +/** + * Created by Administrator on 2019/1/15. + */ +@Service +public class CurrentUserServiceImpl implements CurrentUserService { + @Autowired + private SysUserRepository sysUserRepository; + + @Override + public SysUser getCurrentUser() { + SysUser sysUser = currentUserFromSecurityContext(); + if (sysUser == null) { + throw new UserNoLoginException("获取不到当前登录用户信息!"); + } + return sysUser; + } + + /** + * 从SpringSecurity中获取当前用户信息 jinw + * + * @return + */ + private SysUser currentUserFromSecurityContext() { + SysUser sysUser = null; + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + if (authentication != null && authentication.getPrincipal() != null) { + if (authentication.getPrincipal() instanceof SysUserDetails) { + SysUserDetails userDetails = (SysUserDetails) authentication.getPrincipal(); + sysUser = (SysUser) userDetails.getOthers().get("sysUser"); + if (sysUser == null) { + sysUser = sysUserRepository.findByLogonName(userDetails.getUsername()).get(0); + userDetails.getOthers().put("sysUser", sysUser); + HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); + request.getSession().setAttribute("SPRING_SECURITY_CONTEXT", SecurityContextHolder.getContext()); + } + } + } + return sysUser; + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/common/impl/MyLogoutOrFailedExceptionHandler.java b/template/insiis-web/src/main/java/com/insigma/sys/common/impl/MyLogoutOrFailedExceptionHandler.java new file mode 100644 index 0000000..9684ce7 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/common/impl/MyLogoutOrFailedExceptionHandler.java @@ -0,0 +1,28 @@ +package com.insigma.sys.common.impl; + +import com.insigma.odin.framework.est.EstException; +import com.insigma.odin.framework.est.auth.LogoutOrFailedExceptionHandler; +import lombok.extern.slf4j.Slf4j; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * @author yinjh + * @version 2021/9/1 + */ +@Slf4j +public class MyLogoutOrFailedExceptionHandler extends LogoutOrFailedExceptionHandler { + + @Override + public void handle(EstException ex, HttpServletRequest request, HttpServletResponse response) { + try { + log.debug("异常处理:", ex); + response.sendError(401, "登录已失效,请重新登录!"); + } catch (IOException e) { + log.error("返回异常码时失败!", e); + } + } + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/common/impl/MySysLoginHandler.java b/template/insiis-web/src/main/java/com/insigma/sys/common/impl/MySysLoginHandler.java new file mode 100644 index 0000000..0871a19 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/common/impl/MySysLoginHandler.java @@ -0,0 +1,56 @@ +package com.insigma.sys.common.impl; + +import com.insigma.framework.data.firewall.permission.validate.ValidateKeyValueStore; +import com.insigma.framework.exception.AppException; +import com.insigma.framework.web.securities.auth.SysLoginHandler; +import com.insigma.sys.entity.SysUser; +import com.insigma.sys.service.SysHashService; +import com.insigma.sys.service.SysUserService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; + +@Slf4j +@Service +public class MySysLoginHandler implements SysLoginHandler { + + @Value("${sys.hash.enabled:false}") + private boolean hashEnabled; + + @Autowired + private SysHashService sysHashService; + + @Autowired + private SysUserService sysUserService; + + @Autowired + private ValidateKeyValueStore validateKeyValueStore; + + @Override + public void success(String username, HttpServletRequest request) { + request.getSession().setAttribute("auth_filter_ignored",Boolean.TRUE); + log.info("{} 登录成功!", username); + if (hashEnabled) { + SysUser sysUser = sysUserService.findUserByLogonName(username); + if (!sysHashService.checkHash(sysUser)) { + throw new AppException("用户数据不合法!"); + } + } + + + // 测试数据与安全 + SysUser sysUser = sysUserService.findUserByLogonName(username); + validateKeyValueStore.set("orgid", String.valueOf(sysUser.getOrgId())); + if ("admin".equals(sysUser.getLogonName())) { + validateKeyValueStore.skip(); + } + } + + @Override + public void failure(String username, HttpServletRequest request) { + log.info("{} 登录失败!", username); + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/common/impl/MySysLogoutHandler.java b/template/insiis-web/src/main/java/com/insigma/sys/common/impl/MySysLogoutHandler.java new file mode 100644 index 0000000..e207d8f --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/common/impl/MySysLogoutHandler.java @@ -0,0 +1,36 @@ +package com.insigma.sys.common.impl; + +import com.insigma.framework.web.securities.auth.ExtSysLogoutHandler; +import com.insigma.odin.framework.est.service.SSOServiceFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * @author yinjh + * @version 2022/5/10 + * @since 2.6.5 + */ +@Slf4j +@Component +@ConditionalOnProperty(prefix = "sso", name = "app-name", matchIfMissing = false) +public class MySysLogoutHandler implements ExtSysLogoutHandler { + + @Value("${sso.app-name:}") + private String appName; + + @Override + public void logout(HttpServletRequest request, HttpServletResponse response) { + String est = (String) request.getSession().getAttribute("est"); + if (est != null) { + log.info("存在est令牌,执行注销操作!est: {}, appName: {}", est, appName); + SSOServiceFactory.logoutService().logout(est, appName, request); + } else { + log.info("无est令牌,不执行注销操作!"); + } + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/config/JdbcConfig.java b/template/insiis-web/src/main/java/com/insigma/sys/config/JdbcConfig.java new file mode 100644 index 0000000..08ab576 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/config/JdbcConfig.java @@ -0,0 +1,19 @@ +package com.insigma.sys.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; + +/** + * Created by yinjh on 2019/6/28. + */ +@Configuration +public class JdbcConfig { + + @Bean + public NamedParameterJdbcTemplate namedParameterJdbcTemplate(JdbcTemplate jdbcTemplate) { + return new NamedParameterJdbcTemplate(jdbcTemplate); + } + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/config/JpaConfig.java b/template/insiis-web/src/main/java/com/insigma/sys/config/JpaConfig.java new file mode 100644 index 0000000..091e027 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/config/JpaConfig.java @@ -0,0 +1,17 @@ +package com.insigma.sys.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; + +/** + * @author jinw + * @version 2021/8/16 + *

epsoft - insiis7

+ */ +@Configuration +@EnableJpaAuditing +public class JpaConfig { + + + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/config/SSOConfig.java b/template/insiis-web/src/main/java/com/insigma/sys/config/SSOConfig.java new file mode 100644 index 0000000..b9cf547 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/config/SSOConfig.java @@ -0,0 +1,59 @@ +package com.insigma.sys.config; + +import com.insigma.framework.web.securities.config.SysSecurityConfig; +import com.insigma.framework.web.securities.config.SysSecurityNoopConfig; +import com.insigma.odin.framework.est.auth.GenericAuthFilter; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.util.ObjectUtils; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author jinw + * @version 2020/2/7 + *

epsoft - insiis7

+ */ +@Configuration +@EnableConfigurationProperties(SSOConfigProperties.class) +@AutoConfigureAfter({SysSecurityConfig.class, SysSecurityNoopConfig.class}) +@ConditionalOnProperty(prefix = "sso", name = "app-name", matchIfMissing = false) +public class SSOConfig { + + @Autowired + private SSOConfigProperties configProperties; + + @Bean + public FilterRegistrationBean genericAuth() { + FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean<>(); + filterRegistrationBean.setFilter(new GenericAuthFilter()); + Map initParameters = new HashMap<>(); + /*initParameters.put("app-name", "odin7c"); + initParameters.put("auth-service-root-url", "http://127.0.0.1:8080/"); + initParameters.put("client-auth-class", "com.insigma.sys.common.OdinClientAuth"); + initParameters.put("free-urls", "/login");*/ + initParameters.put("app-name", configProperties.getAppName()); + initParameters.put("auth-service-root-url", configProperties.getAuthServiceRootUrl()); + initParameters.put("auth-logon-page-root-url", configProperties.getAuthLogonPageRootUrl()); + initParameters.put("client-auth-class", configProperties.getClientAuthClass()); + initParameters.put("free-urls", configProperties.getFreeUrls()); + initParameters.put("auth-mode", configProperties.getAuthMode()); + if (!ObjectUtils.isEmpty(configProperties.getAuthServiceContextPath())) { + initParameters.put("auth-service-context-path", configProperties.getAuthServiceContextPath()); + } + if (!ObjectUtils.isEmpty(configProperties.getLogoutOrFailedExceptionHandler())) { + initParameters.put("logout-or-failed-exception-handler", configProperties.getLogoutOrFailedExceptionHandler()); + } + filterRegistrationBean.setInitParameters(initParameters); + filterRegistrationBean.addUrlPatterns("/*"); + filterRegistrationBean.setOrder(-100); + return filterRegistrationBean; + } + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/config/SSOConfigProperties.java b/template/insiis-web/src/main/java/com/insigma/sys/config/SSOConfigProperties.java new file mode 100644 index 0000000..3952ec8 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/config/SSOConfigProperties.java @@ -0,0 +1,24 @@ +package com.insigma.sys.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * @author jinw + * @version 2020/2/7 + *

epsoft - insiis7

+ */ +@ConfigurationProperties(prefix = "sso") +@Data +public class SSOConfigProperties { + + private String appName; + private String authServiceRootUrl; + private String authLogonPageRootUrl; + private String clientAuthClass = "com.insigma.sys.common.OdinClientAuth"; + private String freeUrls; + private String authMode; + private String authServiceContextPath; + private String logoutOrFailedExceptionHandler; + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/AuthController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/AuthController.java new file mode 100644 index 0000000..0713fd1 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/AuthController.java @@ -0,0 +1,51 @@ +package com.insigma.sys.controller; + +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.ResponseMessage; +import com.insigma.framework.encryption.util.SM3Utils; +import com.insigma.framework.util.IpUtil; +import com.insigma.sys.common.CurrentUserService; +import com.insigma.sys.entity.SysUser; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import java.util.Date; +import java.util.concurrent.TimeUnit; + +/** + * Created by yinjh on 2019/10/14. + */ +@RestController +@RequestMapping("/auth") +public class AuthController { + + @Autowired + private CurrentUserService currentUserService; + + @Autowired(required = false) + private RedisTemplate redisTemplate; + + @GetMapping("/getToken") + public ResponseMessage getToken(HttpServletRequest request) { + SysUser sysUser = currentUserService.getCurrentUser(); + Date date = new Date(); + long timetamp = date.getTime(); + String token = SM3Utils.digest(IpUtil.getClientIp(request) + ";" + sysUser.getLogonName() + ";" + timetamp); // 生成token + redisTemplate.opsForValue().set(token, sysUser); + redisTemplate.expire(token, 300, TimeUnit.SECONDS); + return ResponseMessage.ok("", token); + } + + @PostMapping("/getUserInfo") + public ResponseMessage getUserInfo(@RequestBody JSONObject jsonObject) { + String token = jsonObject.getString("token"); + SysUser sysUser = (SysUser) redisTemplate.opsForValue().get(token); + if(sysUser == null) { + return ResponseMessage.error("获取用户信息失败!"); + } + return ResponseMessage.ok(sysUser); + } + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/HolidayController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/HolidayController.java new file mode 100644 index 0000000..3ad7697 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/HolidayController.java @@ -0,0 +1,56 @@ +package com.insigma.sys.controller; + +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.ResponseMessage; +import com.insigma.sys.entity.SysHoliday; +import com.insigma.sys.service.HolidayService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author yinjh + * @version 2021/6/16 + */ +@RestController +@RequestMapping("/sys/holiday") +public class HolidayController { + + @Autowired + private HolidayService holidayService; + + @GetMapping("/query") + public ResponseMessage getHolidayList(int year){ + List holidayList = holidayService.queryHolidayList(year); + if (holidayList == null || holidayList.isEmpty()) { + holidayList = holidayService.getWeekdays(year); + holidayService.updateHolidays(year, holidayList); + } + List dates = holidayToDate(holidayList); + return ResponseMessage.ok(dates); + } + + @PostMapping("/{year}/update") + public ResponseMessage updateHolidays(@PathVariable int year, @RequestBody JSONObject jsonObject){ + List holidays = jsonObject.getJSONArray("holidays").toJavaList(String.class); + holidayService.updateHolidays(year, dateToHoliday(holidays)); + return ResponseMessage.ok("保存成功!"); + } + + private List holidayToDate(List holidays) { + return holidays.stream().map(s -> s.getYear() + "-" + (s.getMonth() < 10 ? "0" : "") + s.getMonth() + "-" + (s.getDay() < 10 ? "0" : "") + s.getDay()).collect(Collectors.toList()); + } + + private List dateToHoliday(List dates) { + return dates.stream().map(s -> { + String[] date = s.split("-"); + SysHoliday sysHoliday = new SysHoliday(); + sysHoliday.setYear(Integer.parseInt(date[0])); + sysHoliday.setMonth(Integer.parseInt(date[1])); + sysHoliday.setDay(Integer.parseInt(date[2])); + return sysHoliday; + }).collect(Collectors.toList()); + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/HomeController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/HomeController.java new file mode 100644 index 0000000..9a16c5e --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/HomeController.java @@ -0,0 +1,147 @@ +package com.insigma.sys.controller; + +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.ResponseMessage; +import com.insigma.framework.encryption.util.SM3Utils; +import com.insigma.framework.exception.AppException; +import com.insigma.framework.web.securities.commons.SM3PasswordEncoder; +import com.insigma.framework.web.securities.entity.SysLogonLog; +import com.insigma.sys.common.CurrentUserService; +import com.insigma.sys.entity.SysUser; +import com.insigma.sys.service.SysUserService; +import com.insigma.sys.service.SyslogonLogService; +import com.insigma.web.support.config.SysConfigProperties; +import com.insigma.web.support.repository.Aa01Repository; +import com.insigma.web.support.entity.Aa01; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.ObjectUtils; +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 java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +/** + * 首页面公共Controller,密码修改等在首页面的请求处理可统一放到这里来 + * @author jinw + * @version 2019/4/2 + *

epsoft - insiis7

+ */ +@RestController +@Slf4j +public class HomeController { + + @Autowired + private SysUserService sysUserService; + + @Autowired + private CurrentUserService currentUserService; + + @Autowired + private SysConfigProperties sysConfigProperties; + + @Autowired + private Aa01Repository aa01Repository; + + @Autowired + private SyslogonLogService syslogonLogService; + + @PostMapping("/sys/modifypd") + public ResponseMessage modifyPasswd(@RequestBody JSONObject data) { + SysUser currentUser = currentUserService.getCurrentUser(); + try { + String oldPass=data.getString("opasswd"); + String newPass=data.getString("npasswd"); + String confirmPass = data.getString("rpasswd"); + if (ObjectUtils.isEmpty(newPass) || !newPass.equals(confirmPass)){ + throw new AppException("新密码为空或两次输入不等!"); + } + String sm3LogonName = SM3Utils.digest(currentUser.getLogonName()); + String sm3ReverseLogonName = SM3Utils.digest(new StringBuffer(currentUser.getLogonName()).reverse().toString()); + if (sm3LogonName.equals(newPass) || sm3ReverseLogonName.equals(newPass)) { + throw new AppException("新密码不能与登录名(包含逆序)相同!"); + } + sysUserService.updataPassWD(oldPass,newPass); + return ResponseMessage.ok("修改密码成功"); + } catch (Exception e) { + log.error(e.getMessage(),e); + return ResponseMessage.error("修改密码失败,失败原因:" + e.getMessage()); + } + } + + @PostMapping("/sys/checkDefaultPasswd") + public ResponseMessage checkDefaultPasswd() { + SysUser sysUser = currentUserService.getCurrentUser(); + sysUser = sysUserService.findUserByLogonName(sysUser.getLogonName()); + Date date = sysUser.getPwEditDate(); + if(date==null){ + return ResponseMessage.ok(true); + } + String passwd = sysUser.getPassWD(); + String defaultPasswd = sysConfigProperties.getDefaultPassword(); + if(ObjectUtils.isEmpty(defaultPasswd)) { + return ResponseMessage.ok(false); + } + return ResponseMessage.ok(new SM3PasswordEncoder().matches(SM3Utils.digest(defaultPasswd), passwd)); + } + + @PostMapping("/sys/checkPasswordDisabled") + public ResponseMessage checkPasswordDisabled() { + SysUser sysUser = currentUserService.getCurrentUser(); + sysUser = sysUserService.findUserByLogonName(sysUser.getLogonName()); + if ("1".equals(sysUser.getPwExpireType())) { + // 密码周期过期 + Aa01 aa01 = aa01Repository.findByAaa001("PASSWORD_EXPIRED_PERIOD"); + if (aa01 != null) { + Long period = Long.valueOf(aa01.getAaa005()); + if (sysUser.getPwEditDate() != null) { + // 密码修改过,以修改之后的周期计算 + if (sysUser.getPwEditDate().getTime() + period * 24 * 60 * 60 * 1000 <= System.currentTimeMillis()) { + return ResponseMessage.ok(true); + } + } else { + // 密码没有修改过,以新建用户之后的周期计算 + if (sysUser.getCreateTime().getTime() + period * 24 * 60 * 60 * 1000 <= System.currentTimeMillis()) { + return ResponseMessage.ok(true); + } + } + } + } else if ("3".equals(sysUser.getPwExpireType())) { + // 指定日期过期 + if (sysUser.getPwExpireDate() != null && sysUser.getPwExpireDate().getTime() <= System.currentTimeMillis()) { + return ResponseMessage.ok(true); + } + } + return ResponseMessage.ok(false); + } + + @GetMapping("/sys/getLastLoginTime") + public ResponseMessage getLastLoginTime() { + SysUser sysUser = currentUserService.getCurrentUser(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + List list = syslogonLogService.getLastLoginTime(sysUser.getUserId()); + String lastLoginTime = "首次登录"; + if(list != null&& list.size() > 1){ + lastLoginTime = sdf.format(list.get(1).getLogontime()); + } + return ResponseMessage.ok("", lastLoginTime); + } + + @GetMapping("/sys/getUserInfo") + public ResponseMessage getUserInfo(){ + SysUser sysUser = currentUserService.getCurrentUser(); +// SysUser sysUser = sysUserService.queryOneUser(currentUserService.getCurrentUser().getUserId()); + return ResponseMessage.ok(sysUser); + } + + @PostMapping("/sys/updateUserInfo") + public ResponseMessage updateUserInfo(@RequestBody SysUser sysUser){ + sysUserService.updateUser(sysUser); + return ResponseMessage.ok("修改成功"); + + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/ImportConfigController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/ImportConfigController.java new file mode 100644 index 0000000..cc76671 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/ImportConfigController.java @@ -0,0 +1,94 @@ +package com.insigma.sys.controller; + +import com.alibaba.fastjson.JSONArray; +import com.insigma.framework.ResponseMessage; +import com.insigma.framework.exception.AppException; +import com.insigma.framework.util.TreeUtil; +import com.insigma.sys.common.CurrentUserService; +import com.insigma.sys.dto.ImportConfigReDTO; +import com.insigma.sys.dto.MenuDTO; +import com.insigma.sys.service.MenuService; +import com.insigma.web.support.dto.ImportConfigDTO; +import com.insigma.web.support.dto.ImportConfigDetailDTO; +import com.insigma.web.support.fileaccess.excel.ExcelFactory; +import com.insigma.web.support.service.ImportConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author yinjh + * @version 2023/7/18 + * @since 2.7.0 + */ +@RestController +@RequestMapping("/sys/import/config") +public class ImportConfigController { + + @Autowired + private ImportConfigService importConfigService; + + @Autowired + private MenuService menuService; + + @Autowired + private CurrentUserService currentUserService; + + @GetMapping("/queryMenuList") + public ResponseMessage queryMenuList() { + List menuDTOS = menuService.getMenuList(currentUserService.getCurrentUser()); + JSONArray jsonArray = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(menuDTOS)), "functionid", "parentid", "children", "0"); + return ResponseMessage.ok("查询成功", jsonArray); + } + + @GetMapping("/query") + public ResponseMessage query(String configCode, String configName) { + List list = importConfigService.queryConfigList(configCode, configName); + return ResponseMessage.ok(list); + } + + @GetMapping("/queryConfig") + public ResponseMessage queryConfig(String configId) { + ImportConfigDTO config = importConfigService.queryConfig(configId); + List details = importConfigService.queryConfigDetails(configId); + ImportConfigReDTO reDTO = new ImportConfigReDTO(); + reDTO.setConfig(config); + reDTO.setDetails(details); + return ResponseMessage.ok(reDTO); + } + + @PostMapping("/importExcelTemplate") + public ResponseMessage importExcelTemplate(MultipartFile file, String sheetNameOrIndex, Integer headerRowIndex) { + try { + List list = new ArrayList<>(); + ExcelFactory.readSax(file.getInputStream(), sheetNameOrIndex, (sheetIndexOrName, rowIndex, rowList) -> { + if (rowIndex == headerRowIndex) { + for (Object field : rowList) { + ImportConfigDetailDTO detailDTO = new ImportConfigDetailDTO(); + detailDTO.setOriginFieldName(String.valueOf(field)); + detailDTO.setFieldType("0"); + list.add(detailDTO); + } + } + }); + return ResponseMessage.ok(list); + } catch (Exception e) { + throw new AppException("读取模板失败:" + e.getMessage()); + } + } + + @PostMapping("/save") + public ResponseMessage save(@RequestBody ImportConfigReDTO reqDTO) { + importConfigService.saveConfig(reqDTO.getConfig(), reqDTO.getDetails()); + return ResponseMessage.ok("保存成功"); + } + + @PostMapping("/delete/{configId}") + public ResponseMessage delete(@PathVariable String configId) { + importConfigService.deleteConfig(configId); + return ResponseMessage.ok("删除成功"); + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/MenuController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/MenuController.java new file mode 100644 index 0000000..d122bbc --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/MenuController.java @@ -0,0 +1,244 @@ +package com.insigma.sys.controller; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.ResponseMessage; +import com.insigma.framework.util.TreeUtil; +import com.insigma.sys.common.CurrentUserService; +import com.insigma.sys.dto.MenuDTO; +import com.insigma.sys.dto.SysAppDTO; +import com.insigma.sys.entity.SysMenu; +import com.insigma.sys.service.MenuService; +import com.insigma.sys.service.SysAppService; +import com.insigma.sys.service.SysCodeService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * 菜单管理 + */ +@Slf4j +@RestController +@RequestMapping("/sys/menu") +public class MenuController { + @Autowired + private MenuService menuService; + @Autowired + private SysCodeService sysCodeService; + @Autowired + private CurrentUserService currentUserService; + @Autowired + private SysAppService sysAppService; + /** + * 初始化页面数据 + * @return + */ + @PostMapping("/initCodeTypes") + public ResponseMessage initCodeTypes(@RequestBody JSONObject jsonObject) { + try { + JSONObject codeTypes = sysCodeService.getCodeTypes(jsonObject); + List list = sysAppService.querySysAppDTO(); + JSONArray jsonArray = new JSONArray(); + for (SysAppDTO sysAppDTO : list) { + JSONObject j = new JSONObject(); + j.put("value",sysAppDTO.getAppName()); + j.put("key",sysAppDTO.getAppId()); + jsonArray.add(j); + } + codeTypes.put("APPID",jsonArray); + return ResponseMessage.ok(codeTypes); + } catch (Exception e) { + return ResponseMessage.error(e.getMessage()); + } + } + @GetMapping("/queryTree") + public ResponseMessage queryTable(){ + List menuDTOS = menuService.queryAllMenu(); + JSONArray jsonArray = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(menuDTOS)), "functionid", "parentid", "children"); + return ResponseMessage.ok("查询成功", jsonArray); + } + + /** + * 拖拽成功完成时触发 + * @param jsonObject + * @return + */ + @PostMapping("/nodeDrop") + public ResponseMessage nodeDrop(@RequestBody JSONObject jsonObject){ + System.out.println(jsonObject); + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject oneMenu = jsonArray.getJSONObject(i); + SysMenu sysMenu = new SysMenu(); + sysMenu.setFunctionid(oneMenu.getLong("functionid")); + sysMenu.setFunorder(oneMenu.getInteger("funorder")); + sysMenu.setParentid(oneMenu.getLong("parentid")); + sysMenu.setTitle(oneMenu.getString("title")); + menuService.update(sysMenu); + System.out.println(sysMenu); + } + return ResponseMessage.ok(); + } + /** + * 点击左侧菜单后 + */ + @PostMapping("/nodeClick") + public ResponseMessage nodeClick(@RequestBody() JSONObject jsonObject) { + SysMenu sysMenu; + String a=jsonObject.get("functionid").toString(); + if (a!=null){ + long functionid =(long)Integer.parseInt(a); + sysMenu =menuService.findMenuById(functionid); + List menulist=menuService.findTreesByPId(sysMenu.getFunctionid()); + if (menulist.size()>0){ + //有子类 + return ResponseMessage.ok(sysMenu); + }else { + //没有子类 + return ResponseMessage.ok("重复",sysMenu); + } + }else { + return ResponseMessage.error(); + } + } + + /** + * 根据id查找对象 + * @param jsonObject + * @return + */ + @PostMapping("/queryById") + public ResponseMessage queryById(@RequestBody JSONObject jsonObject) { + try { + String id=jsonObject.get("functionid").toString(); + String funtype=jsonObject.get("funtype").toString(); + List menuDTOS=menuService.queryMenuByFuntypeAndActive(funtype); + JSONArray jsonArray = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(menuDTOS)), "functionid", "parentid", "children"); + jsonObject.put("treedata",jsonArray); + long fId=Integer.parseInt(id); + SysMenu menu=menuService.findMenuById(fId); + List list=new ArrayList(); + if(menu!=null){ + String [] ms=menu.getIdpath().split("/"); + if (ms.length>0){ + for (String s:ms){ + if(s.equals("0")){ + continue; + } + list.add(Long.valueOf(s)); + } + }} + jsonObject.put("pname",list); + return ResponseMessage.ok(jsonObject); + }catch (Exception e){ + return ResponseMessage.error(e.getMessage()); + } + } + /** + * 查询是否多于三层 + * @param jsonObject + * @return + */ + @PostMapping("/querySumIsThree") + public ResponseMessage querySumIsThree(@RequestBody JSONObject jsonObject) { + try { + String id=jsonObject.get("functionid").toString(); + Map list= (Map) jsonObject.get("pname"); + long fId=Integer.parseInt(id); + SysMenu sysMenu=menuService.findMenuById(fId); + List menu=menuService.findNodes(sysMenu.getIdpath());//查询当前子节点 + for(int i=0;i map= (Map) pageData.get("form"); + SysMenu sysMenu = menuService.getSysMenuBean(map); + boolean flag = menuService.isManyLocations(sysMenu); + if (flag) { + return ResponseMessage.error("路径重复"); + } + try { + menuService.save(sysMenu); + return ResponseMessage.ok("保存成功", sysMenu); + } catch (Exception e) { + log.error(e.getMessage(), e); + return ResponseMessage.error("保存失败,失败原因:" +e.getMessage()); + } + } + @PostMapping("/deleteMenu") + public ResponseMessage deleteMenu(@RequestBody JSONObject pageData){ + if (!"1".equals(currentUserService.getCurrentUser().getUserType())) { + return ResponseMessage.error("无权操作!"); + } + Long node=Long.valueOf(pageData.get("node").toString()); + boolean withRole= (boolean) pageData.get("withRole"); + List m=menuService.findNodes(menuService.findMenuById(node).getIdpath()); + //当withRole为false时,和角色没有关系,如果是1就和角色有关系 + try { + if (m!=null){ + menuService.delete(m,withRole); + return ResponseMessage.ok("删除成功"); + }else{ + return ResponseMessage.error("删除失败"); + } + }catch (Exception e){ + log.error(e.getMessage(), e); + return ResponseMessage.error("删除失败,失败原因:" +e.getMessage()); + } + } + /** + * 查找是否有角色关系 + */ + @PostMapping("/queryRoleBy") + public ResponseMessage queryRoleBy(@RequestBody JSONObject pageData){ + Map map= (Map) pageData.get("form"); + SysMenu sysMenu=menuService.getSysMenuBean(map); + boolean f=menuService.findFunctionRoles(sysMenu); + if (f==true){ + return ResponseMessage.error("有权限"); + }else if (f==false){ + return ResponseMessage.ok("没有权限"); + }else { + return ResponseMessage.error(); + } + } + //判断是否三级 + @PostMapping("queryMenuByPid") + public ResponseMessage queryMenuByPid(@RequestBody JSONObject pageData) { + ResponseMessage rm=new ResponseMessage(); + String a=pageData.get("parentid").toString(); + if (a!=null){ + int parentid =Integer.parseInt(a); + SysMenu menu=menuService.queryByFuncID(parentid); + if (menu!=null){ + SysMenu menu1=menuService.queryByFuncID(menu.getParentid()); + if (menu1!=null){ + rm= ResponseMessage.error("最多添加三级"); + } + } + }else { + rm= ResponseMessage.error("没取到父节点"); + } + return rm; + } + + + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/MonitorCentersController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/MonitorCentersController.java new file mode 100644 index 0000000..a8b2333 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/MonitorCentersController.java @@ -0,0 +1,133 @@ +package com.insigma.sys.controller; + +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.ResponseMessage; +import com.insigma.sys.common.CurrentUserService; +import com.insigma.sys.dto.MonitorCentersDTO; +import com.insigma.sys.entity.SysMenu; +import com.insigma.sys.entity.SysUser; +import com.insigma.sys.service.MonitorCentersService; +import com.insigma.web.support.controller.BaseController; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * @author GH + * @ClassName: MonitorCentersController + * @Description: 监控中心 + * @version 2021/12/7 14:53 + */ +@Slf4j +@RestController +@RequestMapping("/sys/monitoringcenter/MonitoringDetails") +public class MonitorCentersController extends BaseController { + @Autowired + MonitorCentersService monitorCentersService; + @Autowired + private CurrentUserService currentUserService; + /** + * 查询应用数据源信息 + * + * @return + */ + @PostMapping("/querServiceDataSouce") + public JSONObject querServiceDataSouce(@RequestBody MonitorCentersDTO monitorCentersDTO) { + return monitorCentersService.querServiceDataSouce(monitorCentersDTO); + } + + /** + * 查询应用SQL监控列表 + * + * @return + */ + @PostMapping("/querServiceDataSqlList") + public JSONObject querServiceDataSqlList(@RequestBody MonitorCentersDTO MonitorCentersDTO) { + return monitorCentersService.querServiceDataSqlList(MonitorCentersDTO); + } + + /** + * 查询WBEAPP监控信息 + * + * @return + */ + @PostMapping("/querServiceWebApp") + public JSONObject querServiceWebApp(@RequestBody MonitorCentersDTO monitorCentersDTO) { + return monitorCentersService.querServiceWebApp(monitorCentersDTO); + } + + /** + * 查询应用URI监控列表 + * + * @return + */ + @PostMapping("/querServiceDataUriList") + public JSONObject querServiceDataUriList(@RequestBody MonitorCentersDTO monitorCentersDTO) { + return monitorCentersService.querServiceDataUriList(monitorCentersDTO); + } + + /** + * 查询应用Session监控列表 + * + * @return + */ + @PostMapping("/querServiceDataSessionList") + public JSONObject querServiceDataSessionList(@RequestBody MonitorCentersDTO monitorCentersDTO) { + return monitorCentersService.querServiceDataSessionList(monitorCentersDTO); + + } + + /** + * 查询每个应用下对应的实例IP + * + * @return + */ + @PostMapping("/querServiceIp") + public JSONObject querServiceIp(@RequestBody MonitorCentersDTO monitorCentersDTO) { + return monitorCentersService.querServiceIp(monitorCentersDTO); + } + + //获取菜单名称和id实体 + @PostMapping("/queryEntity") + public ResponseMessage queryEntity(@RequestBody JSONObject jsonObject) { + String url = jsonObject.getString("url"); + SysMenu sysMenu = monitorCentersService.queryEntity(url); + return ResponseMessage.ok(sysMenu); + } + + /** + * 清理全部监控数据 + * + * @return + */ + @PostMapping("/clearAllMonitorData") + public JSONObject clearAllMonitorData() { + return monitorCentersService.clearAllMonitorData(); + } + + /** + * 清理对应的监控数据 + * + * @return + */ + @PostMapping("/clearOneServiceData") + public JSONObject clearOneServiceData(@RequestBody MonitorCentersDTO monitorCentersDTO) { + return monitorCentersService.clearOneServiceData(monitorCentersDTO); + } + + + + //查询用户是否为超级管理员 + @GetMapping("/queryUser") + public ResponseMessage queryUser() { + SysUser sysUser = currentUserService.getCurrentUser(); + //超级管理员 + if ("1".equals(sysUser.getUserType())) { + return ResponseMessage.ok(true); + } else { + return ResponseMessage.ok(false); + } + } +} + + diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/MonitorDataController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/MonitorDataController.java new file mode 100644 index 0000000..3b6552e --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/MonitorDataController.java @@ -0,0 +1,169 @@ +package com.insigma.sys.controller; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.insigma.sys.dto.MonitorCentersDTO; +import com.insigma.sys.service.MonitorCentersService; +import com.insigma.sys.util.WordUtil; +import com.insigma.web.support.fileaccess.excel.ExcelFactory; +import com.insigma.web.support.fileaccess.excel.ExcelWriter; +import com.insigma.web.support.fileaccess.excel.config.ExcelColConfig; +import com.insigma.web.support.fileaccess.excel.config.ExcelConfig; +import com.insigma.web.support.fileaccess.excel.enums.ExcelTypeEnum; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.RowCallbackHandler; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.io.IOException; +import java.net.URLEncoder; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author GH + * @version 2022/3/8 16:46 + * @ClassName: MonitorDataController + * @Description: + */ +@Slf4j +@RestController +@RequestMapping("/sys/monitoringcenter/index") +public class MonitorDataController { + + @Autowired + MonitorCentersService monitorCentersService; + @Autowired + private JdbcTemplate jdbcTemplate; + @Value("${spring.application.name}") + private String appName; + + /** + * 获取报告数据 + * + * @return + */ + @PostMapping("/getReportData") + public JSONObject getReportData(@RequestBody MonitorCentersDTO monitorCentersDTO) { + return monitorCentersService.getReportData(monitorCentersDTO); + } + + + //导出监控大屏数据 + @GetMapping("/dataExport") + public void dataExport(@RequestParam("excelName") String excelName, HttpServletRequest request, HttpServletResponse response) throws IOException { + response.setContentType("application/octet-stream; charset=UTF-8"); + response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(excelName, "utf-8")); + + ExcelTypeEnum excelType = excelName.endsWith(".xls") ? ExcelTypeEnum.XLS : ExcelTypeEnum.XLSX; + ExcelWriter writer = ExcelFactory.getWriter(response.getOutputStream(), new ExcelConfig(excelType, true, + ExcelColConfig.of("CREATE_TIME", "创建时间"), + ExcelColConfig.of("START_TIME", "统计开始时间"), + ExcelColConfig.of("END_TIME", "统计结束时间"), + ExcelColConfig.of("SQL_EXECUTE_COUNT", "SQL执行总数"), + ExcelColConfig.of("SQL_TOTAL_TIME", "SQL耗时总数"), + ExcelColConfig.of("SQL_AVG_TIME", "SQL执行平均耗时"), + ExcelColConfig.of("SQL_SLOWEST_TIME", "SQL执行最慢耗时"), + ExcelColConfig.of("SQL_AVG_READ_ROWS", "SQL单次平均读取行数"), + ExcelColConfig.of("URL_EXECUTE_COUNT", "URL执行总数"), + ExcelColConfig.of("URL_TOTAL_TIME", "URL耗时总数"), + ExcelColConfig.of("URL_AVG_TIME", "URL执行平均耗时"), + ExcelColConfig.of("URL_SLOWEST_TIME", "URL执行最慢耗时"), + ExcelColConfig.of("URL_AVG_JDBC_COUNT", "URL单次平均JDBC执行数"), + ExcelColConfig.of("SLOW_SQL_ONE", "慢SQL最慢第一段个数"), + ExcelColConfig.of("SLOW_SQL_TWO", "慢SQL最慢第二段个数"), + ExcelColConfig.of("SLOW_SQL_THREE", "慢SQL最慢第三段个数"), + ExcelColConfig.of("SLOW_SQL_AVG_ONE", "慢SQL平均第一段个数"), + ExcelColConfig.of("SLOW_SQL_AVG_TWO", "慢SQL平均第二段个数"), + ExcelColConfig.of("SLOW_SQL_AVG_THREE", "慢SQL平均第三段个数"), + ExcelColConfig.of("SQL_ERROR_COUNT", "SQL执行错误数"), + ExcelColConfig.of("URL_JDBC_ERROR_COUNT", "URLJDBC执行错误数"), + ExcelColConfig.of("SCORE", "得分"), + ExcelColConfig.of("SCORE_SLOW_SQL", "慢SQL影响分"), + ExcelColConfig.of("SCORE_ERROR_SQL", "错误SQL影响分"), + ExcelColConfig.of("SCORE_SLOW_URL", "慢URL影响分"), + ExcelColConfig.of("SCORE_JDBC_ERROR_URL", "JDBC错误URL影响分"), + ExcelColConfig.of("INSTANCE_COUNT", "集群实例数"), + ExcelColConfig.of("DS_MAX_ACTIVE", "数据库最大连接数") + )); + final int[] index = {0}; + List mapList = monitorCentersService.getDataExport(appName); + for (Map map : mapList) { + writer.writeRow(map, ++index[0]); + } + writer.finish(); + } + + + //获取word文档数据 + @PostMapping("/getWrodData") + public Map getWrodData(@RequestBody MonitorCentersDTO monitorCentersDTO) { + return monitorCentersService.getReportDetailedData(monitorCentersDTO); + } + + //导出word文档 + @GetMapping("/word") + public void generateWord(HttpServletRequest request, HttpServletResponse response) throws IOException { + MonitorCentersDTO dto = new MonitorCentersDTO(); + dto.setAppName(appName); + // 要填入模本的数据文件 + Map dataMap = monitorCentersService.getReportDetailedData(dto); + + //提示:在调用工具类生成Word文档之前应当检查所有字段是否完整 + //否则Freemarker的模板殷勤在处理时可能会因为找不到值而报错,这里暂时忽略这个步骤 + File file = null; + InputStream in = null; + OutputStream out = null; + + try { + //调用工具类WordGenerator的createDoc方法生成Word文档 + file = WordUtil.createDoc(dataMap, "monReportTemplet"); + in = new FileInputStream(file); + response.setCharacterEncoding("UTF-8"); + response.setContentType("application/msword"); + out = response.getOutputStream(); + //缓冲区 + byte[] bytes = new byte[2048]; + int len; + // 通过循环将读入的Word文件的内容输出到浏览器中 + while ((len = in.read(bytes)) > 0) { + out.write(bytes, 0, len); + } + out.flush(); + } catch (Exception ex) { + ex.printStackTrace(); + log.error("报告导出异常", ex); + } finally { + //释放资源 + if (out != null) { + try { + out.close(); + } catch (IOException e) { + log.error("IO close error!", e); + } + } + if (in != null) { + try { + in.close(); + } catch (IOException e) { + log.error("IO close error!", e); + } + } + if (file != null) { + // 删除临时文件 + file.delete(); + } + } + + } + +} \ No newline at end of file diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/OpLogController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/OpLogController.java new file mode 100644 index 0000000..2c7a608 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/OpLogController.java @@ -0,0 +1,98 @@ +package com.insigma.sys.controller; + +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.ResponseMessage; +import com.insigma.framework.db.PageInfo; +import com.insigma.framework.oplog.dto.UserLogDTO; +import com.insigma.framework.oplog.entity.SbdsUserLog; +import com.insigma.framework.oplog.service.OpLogService; +import com.insigma.sys.common.CurrentUserService; +import com.insigma.sys.entity.SysMenu; +import com.insigma.sys.service.MenuService; +import com.insigma.web.support.service.PageInitService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.sql.SQLException; +import java.text.SimpleDateFormat; + +/** + * Created by yinjh on 2019/1/29. + */ +@Slf4j +@RestController +@RequestMapping("/sys/oplog") +public class OpLogController { + + @Autowired + private OpLogService opLogService; + + @Autowired + private CurrentUserService currentUserService; + + @Autowired + private PageInitService pageInitService; + + @Autowired + private MenuService menuService; + + @PostMapping("/initSysFunctions") + public ResponseMessage initSysFuntions(@RequestBody JSONObject jsonObject) { + jsonObject = pageInitService.loadCustomCodeType(jsonObject, "sysfunction", "functionid", "title", "nodetype='2'", "SYSFUNCTIONS"); + return ResponseMessage.ok(jsonObject.getJSONObject("codeTypes")); + } + + @PostMapping("/query") + public ResponseMessage query(@RequestBody JSONObject jsonObject) throws SQLException { + Integer page = jsonObject.getInteger("page"); + Integer size = jsonObject.getInteger("size"); + UserLogDTO queryParam = jsonObject.toJavaObject(UserLogDTO.class); + Boolean more = jsonObject.getBoolean("more"); + if (more != null && !more) { + if (queryParam.getAae036() != null) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + String aae036 = sdf.format(queryParam.getAae036()); + queryParam.setStartTime(aae036 + " 00:00:00"); + queryParam.setEndTime(aae036 + " 23:59:59"); + } + } + PageInfo pageInfo = opLogService.queryUserLogList(queryParam, page, size); + return ResponseMessage.ok(pageInfo); + } + + @GetMapping("/location") + public ResponseMessage getLocation(Long opseno) { + SbdsUserLog log = opLogService.getOpLog(opseno); + if (log != null) { + Long functionId = log.getFunctionid(); + SysMenu sysMenu = menuService.findMenuById(functionId); + return ResponseMessage.ok("", sysMenu.getLocation()); + } + return ResponseMessage.ok(); + } + + @GetMapping("/orisource") + public ResponseMessage getOriSource(Long opseno) { + String oriSource = opLogService.getOriSource(opseno); + return ResponseMessage.ok("", oriSource); + } + + @GetMapping("/oridata") + public ResponseMessage getOriData(Long opseno) { + String oriData = opLogService.getOriData(opseno); + return ResponseMessage.ok("", oriData); + } + + @GetMapping("/rollback") + public ResponseMessage rollback(Long opseno) { + try { + String logonName = currentUserService.getCurrentUser().getLogonName(); + opLogService.rollBack(opseno, logonName); + } catch (Exception e) { + log.error("回退失败!", e); + return ResponseMessage.error("回退失败:" + e.getMessage()); + } + return ResponseMessage.ok("回退成功!"); + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/OrgController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/OrgController.java new file mode 100644 index 0000000..bed077e --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/OrgController.java @@ -0,0 +1,199 @@ +package com.insigma.sys.controller; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.ResponseMessage; +import com.insigma.framework.util.TreeUtil; +import com.insigma.sys.entity.Aa26; +import com.insigma.sys.entity.SysOrg; +import com.insigma.sys.service.SysCodeService; +import com.insigma.sys.service.SysOrgService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; + +/** + * 菜单管理 + */ +@Slf4j +@RestController +@RequestMapping("/sys/org") +public class OrgController { + @Autowired + private SysOrgService sysOrgService; + @Autowired + private SysCodeService sysCodeService; + /** + * 初始化页面数据 + * @return + */ + @PostMapping("/doInit") + public ResponseMessage doInit(@RequestBody JSONObject jsonObject) { + List orgs=sysOrgService.queryAllOrg(); + JSONArray jsonArray = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(orgs)), "orgid", "parentid", "children"); + return ResponseMessage.ok("查询成功", jsonArray); + } + /** + * 根据id查找org对象 + * @return + */ + @PostMapping("/findOrgById") + public ResponseMessage findOrgById(@RequestBody JSONObject jsonObject) { + ResponseMessage rm; + String a=jsonObject.get("orgid").toString(); + SysOrg sysOrg; + if (a!=null){ + int orgid= Integer.parseInt(a) ; + sysOrg=sysOrgService.findByOrgid((long) orgid); + rm= ResponseMessage.ok(sysOrg); + }else { + rm= ResponseMessage.error(); + } + return rm; + } + /** + * 根据id查找险种 + * @return + */ +// @PostMapping("/findInsTypeById") +// public ResponseMessage findInTypeById(@RequestBody JSONObject jsonObject) { +// ResponseMessage rm; +// String a=jsonObject.get("regioncode").toString(); +// List list=new ArrayList(); +// if (a!=null){ +// long regioncode=Long.valueOf(a); +// List ins=sysOrgService.queryInsTypeById(regioncode); +// for (SysOrgInsType s:ins){ +// list.add(s.getInstype()); +// } +// rm=ResponseMessage.ok(list); +// }else { +// rm=ResponseMessage.error(); +// } +// return rm; +// } + /** + * 保存机构 + * @return + */ + @PostMapping("/saveOrg") + public ResponseMessage saveOrg(@RequestBody JSONObject jsonObject) { + ResponseMessage rm=null; + //List checkedCities= (List) jsonObject.get("checkedCities"); + Map map= (Map) jsonObject.get("form"); + SysOrg sysOrg=sysOrgService.getSysOrgBean(map); + Boolean flag=sysOrgService.isMany(sysOrg); + try { + if (flag==false){ + //没有重复 + if (sysOrg!=null){ + sysOrgService.saveOrg(sysOrg); + rm= ResponseMessage.ok("保存成功"); + } + }else { + //重复 + rm= ResponseMessage.error("重复"); + } + }catch (Exception e){ + log.error(e.getMessage(), e); + rm = ResponseMessage.error(e.getMessage()); + } + return rm; + } + /** + * 初始化页面aa26 + * @return + */ + @PostMapping("/initAA26") + public ResponseMessage initAA26() { + ResponseMessage rm; + try { + List aa26s = sysOrgService.getAA26(); + JSONArray orgNodes = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(aa26s)), "aab301", "aaa148", "children"); + rm= ResponseMessage.ok(orgNodes); + } catch (Exception e) { + log.error(e.getMessage(), e); + rm = ResponseMessage.error(e.getMessage()); + } + return rm; + } + /** + 根据id查找aa26 + */ + @PostMapping("/queryAa26By301/{id}") + public ResponseMessage queryAa26By301(@PathVariable("id") String aab301) { + ResponseMessage rm; + try { + Aa26 aa26s = sysOrgService.queryAa26By301(aab301); + rm= ResponseMessage.ok(aa26s); + } catch (Exception e) { + log.error(e.getMessage(), e); + rm = ResponseMessage.error(e.getMessage()); + } + return rm; + } + /** + * 初始化页面数据 + * @return + */ + @PostMapping("/initCodeTypes") + public ResponseMessage initCodeTypes(@RequestBody JSONObject jsonObject) { + ResponseMessage rm; + try { + JSONObject codeTypes = sysCodeService.getCodeTypes(jsonObject); + rm = ResponseMessage.ok(codeTypes); + } catch (Exception e) { + log.error(e.getMessage(), e); + rm = ResponseMessage.error(e.getMessage()); + } + return rm; + } + /** + * + * @return + */ + @PostMapping("/queryUserOrg") + public ResponseMessage queryUserOrg(@RequestBody JSONObject jsonObject) { + ResponseMessage rm; + String regioncode=""; + long node=Long.valueOf(jsonObject.get("node").toString()); + Map form= (Map) jsonObject.get("form"); + // JSONArray orgTreeData=jsonObject.getJSONArray("orgTreeData"); // 首先转成 JSONArray 对象 + // String trees=orgTreeData.toJSONString(); + List list=sysOrgService.findNodes(node); + boolean s =sysOrgService.findByArea(list); + if (s==true){ + rm= ResponseMessage.ok("有联系"); + }else { + rm= ResponseMessage.error("没联系"); + } + return rm; + } + /** + * 删除机构 + */ + @PostMapping("/deleteOrg") + public ResponseMessage deleteMenu(@RequestBody JSONObject pageData){ + ResponseMessage rm; + long node=Long.valueOf(pageData.get("node").toString()); + boolean withUser= (boolean) pageData.get("withUser"); + List list=sysOrgService.findNodes(node); + try { + if (list.size()>0){ + //withUser为true则和用户有关 + sysOrgService.delOrg(list,withUser); + rm= ResponseMessage.ok("删除成功"); + }else { + rm= ResponseMessage.error("数据不存在"); + } + }catch (Exception e){ + log.error(e.getMessage(), e); + rm = ResponseMessage.error(e.getMessage()); + } + + return rm; + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/ParamConfigController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/ParamConfigController.java new file mode 100644 index 0000000..fc7eeae --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/ParamConfigController.java @@ -0,0 +1,49 @@ +package com.insigma.sys.controller; + +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.ResponseMessage; +import com.insigma.framework.db.PageInfo; +import com.insigma.framework.exception.AppException; +import com.insigma.sys.service.ParamConfigService; +import com.insigma.web.support.entity.Aa01; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * @author yinjh + * @version 2022/10/17 + * @since 2.7.0 + */ +@RestController +@RequestMapping("/sys/param/config") +public class ParamConfigController { + + @Autowired + private ParamConfigService paramConfigService; + + @GetMapping("/query") + public ResponseMessage query(String aaa001, String aaa002, Integer page, Integer size) { + PageInfo pageInfo = paramConfigService.query(aaa001, aaa002, page, size); + return ResponseMessage.ok(null, pageInfo); + } + + @PostMapping("/insert") + public ResponseMessage insert(@RequestBody Aa01 aa01) { + paramConfigService.save(aa01, false); + return ResponseMessage.ok("保存成功"); + } + + @PostMapping("/update") + public ResponseMessage update(@RequestBody Aa01 aa01) { + paramConfigService.save(aa01, true); + return ResponseMessage.ok("修改成功"); + } + + @PostMapping("/delete") + public ResponseMessage delete(@RequestBody JSONObject jsonObject) throws AppException { + String aaa001 = jsonObject.getString("aaa001"); + paramConfigService.delete(aaa001); + return ResponseMessage.ok("删除成功"); + } + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/RoleController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/RoleController.java new file mode 100644 index 0000000..f5d609f --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/RoleController.java @@ -0,0 +1,308 @@ +package com.insigma.sys.controller; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.PageResponseMessage; +import com.insigma.framework.ResponseMessage; +import com.insigma.framework.commons.syslog.Syslog; +import com.insigma.framework.db.PageInfo; +import com.insigma.framework.util.TreeUtil; +import com.insigma.sys.common.CurrentUserService; +import com.insigma.sys.common.SysManageMode; +import com.insigma.sys.dto.MenuDTO; +import com.insigma.sys.dto.SysRoleDTO; +import com.insigma.sys.dto.UserDTO; +import com.insigma.sys.entity.SysRole; +import com.insigma.sys.entity.SysUser; +import com.insigma.sys.service.MenuService; +import com.insigma.sys.service.RoleService; +import com.insigma.sys.service.SysCodeService; +import com.insigma.web.support.service.CodeTypeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + +/** + * Created by zhangxy on 2019/1/4. + */ +@RestController +@RequestMapping("/sys/role") +public class RoleController { + @Autowired + private CodeTypeService codeService; + @Autowired + private SysCodeService sysCodeService; + @Autowired + private RoleService roleService; + @Autowired + private MenuService menuService; + @Autowired + private CurrentUserService currentUserService; + + /** + * 初始化页面数据 + * + * @return + */ + @PostMapping("/doInit") + public ResponseMessage initPageDate(@RequestBody JSONObject jsonObject) { + JSONObject codeTypes = jsonObject.getJSONObject("codeTypes"); + JSONObject codeTypesRes = codeService.getCodeTypes(codeTypes); + jsonObject.put("codeTypes", codeTypesRes); + return ResponseMessage.ok(jsonObject); + + } + + + @PostMapping("/initCodeTypes") + public ResponseMessage initCodeTypes(@RequestBody JSONObject jsonObject) { + ResponseMessage rm; + try { + JSONObject codeTypes = roleService.getCodeTypes(jsonObject); + rm = ResponseMessage.ok(codeTypes); + } catch (Exception e) { + rm = ResponseMessage.error(e.getMessage()); + } + return rm; + + } + + + @Syslog("${sysRole.rolename}") + @PostMapping("/save") + public ResponseMessage saveRole(@RequestBody SysRole sysRole) { + PageResponseMessage rm = null; + String roleid = sysRole.getRoleid(); + String rolename = sysRole.getRolename(); + boolean flag = false; //true代表有重复 + /*if(!"".equals(roleid) && roleid!=null){ + //flag=false; + flag=roleService.checkRoleByRolename(rolename); + if(flag){ + flag=false; + }else{ + rm = ResponseMessage.error("该角色名称已被其他行政区或机构占用!"); + return rm; + } + }else{ + flag=roleService.checkRoleByRolename(rolename); + }*/ + + flag = roleService.checkRoleByRolename(rolename); + if (!"".equals(roleid) && roleid != null) {//说明是更新 + flag = roleService.checkRoleByRolenameAndRoleid(rolename, roleid); + } + if (flag) { + try { + /*List listUser= currentUserService.getCurrentUserByLoginname("admin"); + long areaid=listUser.get(0).getAreaId(); + long orgid=listUser.get(0).getOrgId(); + String userid=listUser.get(0).getUserId();*/ + SysUser sysUser = currentUserService.getCurrentUser(); + /* long areaid = listUser.get(0).getAreaId(); + long orgid = listUser.get(0).getOrgId(); + String userid = listUser.get(0).getUserId(); + String usertype = listUser.get(0).getUserType();*/ + Long areaid = sysUser.getAreaId(); + Long orgid = sysUser.getOrgId(); + String userid = sysUser.getUserId(); + String usertype = sysUser.getUserType(); + sysRole.setAreaid(areaid); + sysRole.setOrgid(orgid); + sysRole.setCreatorid(userid); + roleService.save(sysRole); + rm = PageResponseMessage.ok("保存成功"); + } catch (Exception e) { + rm = PageResponseMessage.error(e.getMessage()); + } + } else { + rm = PageResponseMessage.error("该角色名称已被其他行政区或机构占用!"); + } + return rm; + } + + + /* @PostMapping("/queryRole") + public ResponseMessage queryRole(@RequestBody JSONObject pageData){ + ResponseMessage rm; + try { + List sysRoles=roleService.queryRole(pageData); + rm=ResponseMessage.ok("",sysRoles); + }catch (Exception e){ + rm = ResponseMessage.error(e.getMessage()); + } + return rm; + }*/ + + /*@PostMapping("/queryRole") + public ResponseMessage queryRole(@RequestParam(name="rolename")String rolename,@RequestParam(name="roledesc") + String roledesc, + @RequestParam(name="roletype")String roletype,@RequestParam(name="page")Integer + page, + @RequestParam(name="size") Integer size){ + ResponseMessage rm; + try { + SysRoleDTO sysRoleDTO=roleService.query(rolename, roledesc, roletype, page, size); + rm=ResponseMessage.ok("",sysRoleDTO); + }catch (Exception e){ + rm = ResponseMessage.error(e.getMessage()); + } + return rm; + }*/ + + @GetMapping("/queryRole") + public ResponseMessage queryRole(@RequestParam(name = "rolename") String rolename, @RequestParam(name = "roledesc" + ) String roledesc, + @RequestParam(name = "roletype") String roletype, + @RequestParam(name = "page") Integer page, + @RequestParam(name = "size") Integer size) { + ResponseMessage rm; + //查询当前登录用户信息 + //List listUser = currentUserService.getCurrentUserByLoginname("admin"); + SysUser sysUser = currentUserService.getCurrentUser(); + /* long areaid = listUser.get(0).getAreaId(); + long orgid = listUser.get(0).getOrgId(); + String userid = listUser.get(0).getUserId(); + String usertype = listUser.get(0).getUserType();*/ + Long areaid = sysUser.getAreaId(); + Long orgid = sysUser.getOrgId(); + String userid = sysUser.getUserId(); + String usertype = sysUser.getUserType(); + + if (SysManageMode.isTripleMode()) {//三员制 + if ("5".equals(usertype)) {//安全管理员 + usertype = "1";//按照超级管理员处理,可以查询所有的角色 + } + } + SysRoleDTO sysRoleDTO = null; + if (!"".equals(usertype) && usertype != null) { + //查询当前用户拥有的角色 + //List listRole=roleService.queryRoleByUserId(userid); + try { + sysRoleDTO = roleService.query(rolename, roledesc, roletype, page, size, areaid, orgid, usertype); + rm = ResponseMessage.ok("", sysRoleDTO); + } catch (Exception e) { + rm = ResponseMessage.error(e.getMessage()); + } + } else {//非管理员角色,不能看到任何角色 + rm = ResponseMessage.ok(); + } + + return rm; + } + + @PostMapping("/delete") + public ResponseMessage delete(@RequestBody SysRole sysRole) { + SysRole role = roleService.getRoleById(sysRole.getRoleid()); + if (role == null) { + return ResponseMessage.error("角色不存在"); + } + SysUser sysUser = currentUserService.getCurrentUser(); + if (!roleService.roleCanOperate(sysUser, role)) { + return ResponseMessage.error("无权操作"); + } + roleService.deleteRoleRef(sysRole); + return ResponseMessage.ok("删除成功"); + } + + @GetMapping("/queryTree") + public ResponseMessage queryTable(String roletype) { + String funtype = ""; + if (roletype != null && !"".equals(roletype)) { + if ("1".equals(roletype)) {//管理员角色 + funtype = "1"; + } else if ("2".equals(roletype)) { + funtype = "2"; + } else if ("3".equals(roletype)) { + funtype = "3"; + } else if ("4".equals(roletype)) { + funtype = "4"; + } + } + List menuDTOS = menuService.queryMenuByFuntypeAndActive(funtype); + /*SysUser sysUser = currentUserService.getCurrentUser(); + List menuDTOS = new ArrayList<>(); + if ("1".equals(sysUser.getUserType())) { + // 超级管理员,查询所有 + menuDTOS = menuService.queryMenuByFuntypeAndActive(funtype); + } else if ("2".equals(sysUser.getUserType()) || "3".equals(sysUser.getUserType())) { + // 行政区管理员和机构管理员查询自己拥有的角色 + menuDTOS = menuService.queryMenusByUserId(sysUser.getUserId()); + } else { + // 其他无权限查询 + throw new AppException("无权查询!"); + }*/ + JSONArray jsonArray = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(menuDTOS)), "functionid" + , "parentid", "children", "0"); + return ResponseMessage.ok("查询成功", jsonArray); + } + + @GetMapping("/getCheckedTree") + public ResponseMessage getCheckedTree(String roleId) { + List list = roleService.queryFuncitonidByRoleid(roleId); + return ResponseMessage.ok("查询成功", list); + } + + @PostMapping("/addRoleRef") + public ResponseMessage addRoleRef(@RequestBody JSONObject jsonObject) { + String roleid = (String) jsonObject.get("roleId"); + SysRole role = roleService.getRoleById(roleid); + if (role == null) { + return ResponseMessage.error("角色不存在"); + } + SysUser sysUser = currentUserService.getCurrentUser(); + if (!roleService.roleCanOperate(sysUser, role)) { + return ResponseMessage.error("无权操作"); + } + roleService.saveGrant(currentUserService.getCurrentUser(), role, jsonObject); + return ResponseMessage.ok("授权成功"); + } + + + @GetMapping("getRoleTypeCode") + public ResponseMessage getUserTypeCode() { + List> list = roleService.findRoleTypesCode(); + return ResponseMessage.ok(list); + } + + @GetMapping("/queryToGrantUser") + public ResponseMessage queryToGrantUser( + @RequestParam(name = "roleId") String roleId, + @RequestParam(name = "roleType") String roleType, + @RequestParam(name = "logonname") String logonname, + @RequestParam(name = "displayname") String displayname, + @RequestParam(name = "page") Integer page, + @RequestParam(name = "size") Integer size) throws SQLException { + SysUser sysUser = currentUserService.getCurrentUser(); + PageInfo list = roleService.queryToGrantUser(roleId, roleType, logonname, displayname, page, size); + return ResponseMessage.ok("查询成功", list); + } + + @GetMapping("/queryGrantedUser") + public ResponseMessage queryGrantedUser(@RequestParam(name = "roleId") String roleId) throws SQLException { + SysUser sysUser = currentUserService.getCurrentUser(); + SysRole sysRole = roleService.getRoleById(roleId); + if (!roleService.roleCanOperate(sysUser, sysRole)) { + return ResponseMessage.error("无权访问"); + } + List list = roleService.queryGrantedUser(roleId); + return ResponseMessage.ok("查询成功", list); + } + + @GetMapping("/removeGrantUserRole") + public ResponseMessage removeGrantUserRole(@RequestParam(name = "roleId") String roleId, + @RequestParam(name = "userId") String userId) throws SQLException { + roleService.removeGrantUserRole(roleId, userId); + return ResponseMessage.ok(); + } + + @PostMapping("/saveGrantUser") + public ResponseMessage saveGrantUser(@RequestBody JSONObject jsonObject) throws SQLException { + roleService.saveGrantUser(jsonObject); + return ResponseMessage.ok("保存成功"); + } + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/SSOController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/SSOController.java new file mode 100644 index 0000000..aeec6d7 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/SSOController.java @@ -0,0 +1,42 @@ +package com.insigma.sys.controller; + +import com.insigma.framework.ResponseMessage; +import com.insigma.framework.web.securities.auth.SysLoginHandler; +import com.insigma.framework.web.securities.dto.BaseUserInfo; +import com.insigma.sys.common.CurrentUserService; +import com.insigma.sys.entity.SysUser; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +/** + * 获取当前登录人 + * Created by yinjh on 2020/2/21. + */ +@RestController +@RequestMapping({"/sso", "/check"}) +public class SSOController { + + @Autowired + private CurrentUserService currentUserService; + + @Autowired + private SysLoginHandler sysLoginHandler; + + @PostMapping("/login") + public ResponseMessage login(HttpServletRequest request) { + SysUser sysUser = currentUserService.getCurrentUser(); + BaseUserInfo userInfo = new BaseUserInfo(); + userInfo.setUserid(sysUser.getUserId()); + userInfo.setUsername(sysUser.getLogonName()); + userInfo.setNickname(sysUser.getDisplayName()); + + sysLoginHandler.success(userInfo.getUsername(), request); + + return ResponseMessage.ok(userInfo); + } + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/SafetyFilterLogController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/SafetyFilterLogController.java new file mode 100644 index 0000000..cadf801 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/SafetyFilterLogController.java @@ -0,0 +1,31 @@ +package com.insigma.sys.controller; + +import com.insigma.framework.ResponseMessage; +import com.insigma.framework.db.PageInfo; +import com.insigma.framework.system.safety.log.dto.SafetyFilterLogDTO; +import com.insigma.framework.system.safety.log.service.SafetyFilterLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author yinjh + * @version 2022/9/15 + * @since 2.7.0 + */ +@RestController +@RequestMapping("/safety/filter/log") +public class SafetyFilterLogController { + + @Autowired + private SafetyFilterLogService safetyFilterLogService; + + @PostMapping("/query") + public ResponseMessage query(@RequestBody SafetyFilterLogDTO safetyFilterLogDTO) { + PageInfo pageInfo = safetyFilterLogService.query(safetyFilterLogDTO); + return ResponseMessage.ok(pageInfo); + } + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/ScmMyFavoritesController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/ScmMyFavoritesController.java new file mode 100644 index 0000000..8f8c92f --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/ScmMyFavoritesController.java @@ -0,0 +1,93 @@ +package com.insigma.sys.controller; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.ResponseMessage; +import com.insigma.sys.common.CurrentUserService; +import com.insigma.sys.dto.ScmMyFavoritesDTO; +import com.insigma.sys.entity.SysUser; +import com.insigma.sys.service.ScmMyFavoritesService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + + + +/** + * @Author tanyj + * @Version 2022/8/23 11:27 + * @since 2.7.0 + **/ +@RestController +@RequestMapping("/scmMyFavorites") +public class ScmMyFavoritesController { + + @Autowired + private ScmMyFavoritesService scmMyFavoritesService; + + @Autowired + private CurrentUserService currentUserService; + + /** + * 新增我的收藏 + * + * @param jsonObject jsonObject + */ + @PostMapping("/addScmMyFavorites") + public ResponseMessage addScmMyFavorites(@RequestBody JSONObject jsonObject) { + ScmMyFavoritesDTO scmMyFavoritesDTO = new ScmMyFavoritesDTO(); + scmMyFavoritesDTO.setTitle(jsonObject.getString("title")); + scmMyFavoritesDTO.setFunctionRoutePath(jsonObject.getString("path")); + SysUser currentUser = currentUserService.getCurrentUser(); + return scmMyFavoritesService.addScmMyFavorites(currentUser.getUserId(), scmMyFavoritesDTO); + } + + /** + * 根据用户id查询我的收藏 + * + * @return + */ + @RequestMapping("/getScmMyFavorites") + public ResponseMessage getScmMyFavorites() { + SysUser currentUser = currentUserService.getCurrentUser(); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("data", scmMyFavoritesService.getScmMyFavorites(currentUser.getUserId())); + jsonObject.put("total", scmMyFavoritesService.getScmMyFavorites(currentUser.getUserId()).size()); + return ResponseMessage.ok("查询成功", jsonObject); + } + + /** + * 根据用户id删除我的收藏 + * + * @param jsonObject jsonObject + */ + @RequestMapping("/deleteScmMyFavorites") + public ResponseMessage deleteScmMyFavorites(@RequestBody JSONObject jsonObject) { + ScmMyFavoritesDTO scmMyFavoritesDTO = new ScmMyFavoritesDTO(); + scmMyFavoritesDTO.setTitle(jsonObject.getString("title")); + scmMyFavoritesDTO.setFunctionRoutePath(jsonObject.getString("functionRoutePath")); + SysUser currentUser = currentUserService.getCurrentUser(); + scmMyFavoritesService.deleteScmMyFavorites(currentUser.getUserId(), scmMyFavoritesDTO); + return ResponseMessage.ok(); + } + + /** + * 根据用户id更新我的收藏 + * + * @param jsonObject jsonObject + */ + @RequestMapping("/orderScmMyFavorites") + public ResponseMessage orderScmMyFavorites(@RequestBody JSONObject jsonObject){ + System.out.println(jsonObject); + SysUser currentUser = currentUserService.getCurrentUser(); + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject oneSmf = jsonArray.getJSONObject(i); + ScmMyFavoritesDTO scmMyFavoritesDTO = new ScmMyFavoritesDTO(); + scmMyFavoritesDTO.setTitle(oneSmf.getString("title")); + scmMyFavoritesDTO.setFunctionRoutePath(oneSmf.getString("functionRoutePath")); + scmMyFavoritesDTO.setOrderNo(i); + scmMyFavoritesService.orderScmMyFavorites(currentUser.getUserId(), scmMyFavoritesDTO); + } + return ResponseMessage.ok(); + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/SysAppController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/SysAppController.java new file mode 100644 index 0000000..4f8c9b4 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/SysAppController.java @@ -0,0 +1,200 @@ +package com.insigma.sys.controller; + +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.ResponseMessage; +import com.insigma.framework.encryption.util.SM3Utils; +import com.insigma.framework.util.StringUtil; +import com.insigma.framework.web.securities.commons.SM3PasswordEncoder; +import com.insigma.sys.common.CurrentUserService; +import com.insigma.sys.dto.SysAppAddressDTO; +import com.insigma.sys.dto.SysAppDTO; +import com.insigma.sys.entity.SysUser; +import com.insigma.sys.service.SysAppService; +import com.insigma.web.support.annotation.OdinRequest; +import com.insigma.web.support.annotation.OdinRequestParam; +import com.insigma.web.support.controller.BaseController; +import com.insigma.web.support.service.token.AppTokenService; +import com.insigma.web.support.util.pe.PageTable; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.ObjectUtils; +import org.springframework.web.bind.annotation.*; + +import java.sql.SQLException; +import java.util.*; + +/** + * 应用系统管理接口 + * + * @author GH + * @version 2022/3/28 + * @since 2.6.5 + */ +@Slf4j +@RestController +@RequestMapping("/sys/sysapp/sysApp") +public class SysAppController extends BaseController { + + @Autowired + private CurrentUserService currentUserService; + @Autowired + private SysAppService sysAppService; + @Autowired + private AppTokenService appTokenService; + + + @OdinRequest(init = true) + @PostMapping("/doInit") + public ResponseMessage doInit(@OdinRequestParam("f_form") SysAppDTO queryDTO, Integer size) throws SQLException { + tableDataQuery(queryDTO, 1, size); + return this.ok(); + } + + @OdinRequest + @PostMapping("/query") + public ResponseMessage doGridQuery(@OdinRequestParam("f_form") SysAppDTO queryDTO, + Integer size) { + tableDataQuery(queryDTO, 1, size); + return this.ok(); + } + + @OdinRequest + @PostMapping("/doGridQuery/{name}") + public ResponseMessage doGridQuery(@OdinRequestParam("f_form") SysAppDTO queryDTO, + @OdinRequestParam("t_tableData_page") Integer page, + @OdinRequestParam("t_tableData_size") Integer size, + @PathVariable String name) { + tableDataQuery(queryDTO, page, size); + this.set("page", page); + return this.ok(); + } + + public void tableDataQuery(SysAppDTO queryDTO, Integer page, Integer size) { + this.pageQuery("t_tableData", () -> { + this.set("page", page); // 需要将前端表格中:currentPage定义的值设置成page的值 + return sysAppService.pageQuery(queryDTO, page, size); + }); + } + + + @OdinRequest + @PostMapping("/add") + public ResponseMessage add() { + this.set("dialogFormVisible", true); + this.set("dialogFormTitle", "新增应用"); + this.clearForm("f_sysAppForm"); + this.getTable("t_tableData1").setData(new ArrayList<>()); + this.getTable("t_tableData1").setTotal(0L); + return this.ok(); + } + + + @OdinRequest + @PostMapping("/doSave/{name}") + public ResponseMessage doSave(@OdinRequestParam("f_sysAppForm") SysAppDTO queryDTO) { + PageTable t_tableData1 = this.getTable("t_tableData1"); + List listsysAppAddressDTO = t_tableData1.getData(SysAppAddressDTO.class); + String portalurl = null; + String appurl = null; + for (int i = 0; i < listsysAppAddressDTO.size(); i++) { + portalurl = listsysAppAddressDTO.get(i).getPortalUrl(); + if (portalurl == null || "".equals(portalurl)) { + return this.error("门户名称不能为空"); + } + appurl = listsysAppAddressDTO.get(i).getAppUrl(); + if (appurl == null || "".equals(appurl)) { + return this.error("应用地址不能为空"); + } else { + if (appurl.indexOf("http://") == 0 || appurl.indexOf("https://") == 0) { + + } else { + return this.error("门户名称为" + portalurl + "的应用地址不合法,请检查!"); + } + } + } + if (ObjectUtils.isEmpty(queryDTO.getAppId())) { + boolean flag = sysAppService.selectAppCode(queryDTO.getAppCode()); + if (flag) { + return ResponseMessage.error("异常应用编码重复!"); + } + } + String secretKey = null; + if (StringUtil.isEmpty(queryDTO.getAppId())) { + secretKey = appTokenService.generateSecretKey(); + } + String appId = sysAppService.saveSysAppDTO(queryDTO, secretKey); + if ("".equals(appId) && appId == null) { + return ResponseMessage.error("保存失败!"); + }else { + sysAppService.saveSysAppAddressDTO(listsysAppAddressDTO, appId); + } + this.set("dialogFormVisible", false); + this.clearForm("f_sysAppForm"); + this.getTable("t_tableData1").setData(new ArrayList<>()); + this.getTable("t_tableData1").setTotal(0L); + this.refresh(); + return this.ok("保存成功!"); + } + + @OdinRequest + @PostMapping("/update") + public ResponseMessage update(String appId) { + SysAppDTO sysAppDTO = sysAppService.querySysApp(appId); + this.toForm("f_sysAppForm", sysAppDTO); + List list = sysAppService.querySysAddressDTO(appId); + this.getTable("t_tableData1").setData(list); + this.set("dialogFormVisible", true); + this.set("dialogFormTitle", "修改应用"); + return this.ok(); + } + + @OdinRequest(refresh = true) // refresh = true 请求结束后刷新页面 + @PostMapping("/delete") + public ResponseMessage delete(String appId) { + sysAppService.deleteSysApp(appId); + sysAppService.deleteSysAppAddressByAppId(appId); + return this.ok("删除成功!"); + } + + @PostMapping("/deleteSysAppAddress") + public ResponseMessage deleteSysAppAddress(@RequestBody SysAppAddressDTO sysAppAddressDTO) { + if (sysAppAddressDTO.getAddressId() == null || "".equals(sysAppAddressDTO.getAddressId())) { + return this.ok("删除成功!"); + } + sysAppService.deleteSysAppAddress(sysAppAddressDTO.getAddressId()); + return this.ok("删除成功!"); + } + + @GetMapping("/toActiveSysApp") + public ResponseMessage toActiveSysApp(@RequestParam(name = "appId") String appId) { + sysAppService.toActiveSysApp(appId); + return this.ok("启用成功!"); + } + + @GetMapping("/toNotActiveSysApp") + public ResponseMessage toNotActiveSysApp(@RequestParam(name = "appId") String appId) { + sysAppService.toNotActiveSysApp(appId); + return this.ok("禁用成功!"); + } + + @PostMapping("/verify") + public ResponseMessage verify(@RequestBody JSONObject jsonObject) { + //获取当前登录人去验证密码是否正确 + SysUser sysUser = currentUserService.getCurrentUser(); + String password = jsonObject.getString("password"); + String id = jsonObject.getString("id"); + SM3PasswordEncoder sm3PasswordEncoder = new SM3PasswordEncoder(); + boolean b = sm3PasswordEncoder.matches(SM3Utils.digest(password), sysUser.getPassWD()); + HashMap map = new HashMap<>(); + if(b){ + //查询安全key + SysAppDTO sysAppDTO = sysAppService.querySysApp(id); + map.put("appId",sysAppDTO.getAppId()); + map.put("secretKey",sysAppDTO.getSecretKey()); + map.put("verify",b); + } + map.put("verify",b); + return ResponseMessage.ok(map); + } + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/SysAuditConfigController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/SysAuditConfigController.java new file mode 100644 index 0000000..e80ff2d --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/SysAuditConfigController.java @@ -0,0 +1,55 @@ +package com.insigma.sys.controller; + +import com.insigma.framework.ResponseMessage; +import com.insigma.framework.audit.dto.AuditConfig; +import com.insigma.framework.audit.service.SysAuditConfigService; +import com.insigma.framework.db.PageInfo; +import com.insigma.framework.exception.AppException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.ObjectUtils; +import org.springframework.web.bind.annotation.*; + +import java.sql.SQLException; + +/** + * @author yinjh + * @version 2022/11/15 + * @since 2.7.0 + */ +@RestController +@RequestMapping("/sys/audit/config") +public class SysAuditConfigController { + + @Autowired + private SysAuditConfigService sysAuditConfigService; + + @GetMapping("/query") + public ResponseMessage query(String functionName, Integer page, Integer size) throws SQLException { + PageInfo pageInfo = sysAuditConfigService.query(functionName, page, size); + return ResponseMessage.ok(pageInfo); + } + + @PostMapping("/save") + public ResponseMessage save(@RequestBody AuditConfig auditConfig) { + if (auditConfig.getFunctionId() == null) { + return ResponseMessage.error("请选择功能模块"); + } + if (auditConfig.getAuditTotalLevel() == null) { + return ResponseMessage.error("请输入审核总级别"); + } + if (ObjectUtils.isEmpty(auditConfig.getServiceName())) { + return ResponseMessage.error("请输入服务名称"); + } + sysAuditConfigService.save(auditConfig); + return ResponseMessage.ok("保存成功"); + } + + @PostMapping("/delete") + public ResponseMessage delete(@RequestBody AuditConfig auditConfig) throws AppException { + if (ObjectUtils.isEmpty(auditConfig.getId())) { + return ResponseMessage.error("请选择需要删除的配置"); + } + sysAuditConfigService.delete(auditConfig.getId()); + return ResponseMessage.ok("删除成功"); + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/SysAuditController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/SysAuditController.java new file mode 100644 index 0000000..4dec330 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/SysAuditController.java @@ -0,0 +1,76 @@ +package com.insigma.sys.controller; + +import com.insigma.framework.ResponseMessage; +import com.insigma.framework.audit.dto.AuditHistory; +import com.insigma.framework.audit.dto.AuditInfo; +import com.insigma.framework.audit.dto.AuditResult; +import com.insigma.framework.audit.service.SysAuditService; +import com.insigma.framework.db.PageInfo; +import com.insigma.sys.common.CurrentUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.CollectionUtils; +import org.springframework.util.ObjectUtils; +import org.springframework.web.bind.annotation.*; + +import java.sql.SQLException; +import java.util.List; + +/** + * @author yinjh + * @version 2022/11/14 + * @since 2.7.0 + */ +@RestController +@RequestMapping("/sys/audit") +public class SysAuditController { + + @Autowired + private SysAuditService sysAuditService; + + @Autowired + private CurrentUserService currentUserService; + + /** + * 待审核列表 + * @param functionId 模块ID + * @param level 审核级别 + * @param page 分页 + * @param size 大小 + * @return 审核列表 + */ + @GetMapping("/{functionId}/{level}/list") + public ResponseMessage list(@PathVariable Long functionId, @PathVariable Integer level, Integer page, Integer size) throws SQLException { + PageInfo pageInfo = sysAuditService.query(functionId, level, page, size); + return ResponseMessage.ok(pageInfo); + } + + /** + * 审核 + * + * @param functionId 模块ID + * @param level 审核级别 + * @param auditResult 审核信息 + * @return 审核结果 + */ + @PostMapping("/{functionId}/{level}/post") + public ResponseMessage audit(@PathVariable Long functionId, @PathVariable Integer level, @RequestBody AuditResult auditResult) { + if (CollectionUtils.isEmpty(auditResult.getOpsenos())) { + return ResponseMessage.error("请选择需要审核的业务!"); + } + if (ObjectUtils.isEmpty(auditResult.getResult())) { + return ResponseMessage.error("审核结果不能为空!"); + } + if ("0".equals(auditResult.getResult()) && ObjectUtils.isEmpty(auditResult.getReason())) { + return ResponseMessage.error("审核不通过时,审核原因不能为空!"); + } + sysAuditService.audit(currentUserService.getCurrentUser().getLogonName(), functionId, level, auditResult); + return ResponseMessage.ok("审核成功!"); + } + + @GetMapping("/{functionId}/{level}/history") + public ResponseMessage history(@PathVariable Long functionId, @PathVariable Integer level, Long opseno) { + List histories = sysAuditService.queryHistories(opseno); + return ResponseMessage.ok(histories); + } + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/SysCodeController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/SysCodeController.java new file mode 100644 index 0000000..f39eec4 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/SysCodeController.java @@ -0,0 +1,50 @@ +package com.insigma.sys.controller; + +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.ResponseMessage; +import com.insigma.framework.exception.AppException; +import com.insigma.sys.dto.CodeDTO; +import com.insigma.sys.entity.Aa10; +import com.insigma.sys.service.SysCodeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * Created by yinjh on 2019/1/9. + */ +@RestController +@RequestMapping("/sys/code") +public class SysCodeController { + + @Autowired + private SysCodeService sysCodeService; + + @PostMapping("/initCodeTypes") + public ResponseMessage initCodeTypes(@RequestBody JSONObject jsonObject) { + JSONObject codeTypes = sysCodeService.getCodeTypes(jsonObject); + return ResponseMessage.ok(codeTypes); + } + + @GetMapping("/query") + public ResponseMessage query(String aaa100, String aaa103, Integer page, Integer size) { + CodeDTO codeDTO = sysCodeService.query(aaa100, aaa103, page, size); + return ResponseMessage.ok(null, codeDTO); + } + + @PostMapping("/save") + public ResponseMessage save(@RequestBody Aa10 aa10) { + sysCodeService.saveCode(aa10); + return ResponseMessage.ok("保存成功"); + } + + @PostMapping("/delete") + public ResponseMessage delete(@RequestBody JSONObject jsonObject) throws AppException { + try { + Long aaz093=Long.valueOf(jsonObject.get("aaz093").toString()); + sysCodeService.deleteCode(aaz093); + }catch (Exception e){ + throw new AppException("数据转换异常!"); + } + return ResponseMessage.ok("删除成功"); + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/SysDownloadCenterController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/SysDownloadCenterController.java new file mode 100644 index 0000000..c66e723 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/SysDownloadCenterController.java @@ -0,0 +1,351 @@ +package com.insigma.sys.controller; + + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.ResponseMessage; +import com.insigma.framework.dfs.FSObject; +import com.insigma.framework.dfs.FSService; +import com.insigma.framework.dfs.exception.DfsException; +import com.insigma.framework.exception.AppException; +import com.insigma.framework.util.StringUtil; +import com.insigma.sys.common.CurrentUserService; +import com.insigma.sys.dto.SysDownloadCenterDTO; +import com.insigma.sys.entity.SysUser; +import com.insigma.sys.service.SysDownloadCenterService; +import com.insigma.web.support.annotation.OdinRequest; +import com.insigma.web.support.annotation.OdinRequestParam; +import com.insigma.web.support.controller.BaseController; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.BufferedInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.text.DecimalFormat; +import java.util.Date; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +/** + * @author GH + * @ClassName: SysDownloadCenterController + * @Description: + * @version 2021/8/4 10:13 + */ +@Slf4j +@RestController +@RequestMapping("/sys/downloadcenter/DownloadCenter") +public class SysDownloadCenterController extends BaseController { + + @Autowired + private SysDownloadCenterService sysDownloadCenterService; + + @Autowired(required = false) + private FSService fsService; + + @Autowired + private CurrentUserService currentUserService; + + /** + * 初始化 + * + * @param f_form + * @param size + * @return + */ + @OdinRequest(init = true) + @PostMapping("/doInit") + public ResponseMessage doInit(SysDownloadCenterDTO f_form, Integer size) { + tableDataQuery(f_form, 1, size); + return this.ok(); + + } + + /** + * 查询 + * + * @param queryDTO + * @param size + * @return + */ + @OdinRequest + @PostMapping("/query") + public ResponseMessage query(@OdinRequestParam("f_form") SysDownloadCenterDTO queryDTO, + Integer size) { + tableDataQuery(queryDTO, 1, size); + return this.ok(); + } + + /** + * @return + * @Description: 分页查询 + * @author GH + * @version 2021/8/4 13:29 + */ + @OdinRequest + @PostMapping("/doGridQuery/{name}") + public ResponseMessage doGridQuery(@OdinRequestParam("f_form") SysDownloadCenterDTO queryDTO, + @OdinRequestParam("t_tableData_page") Integer page, + @OdinRequestParam("t_tableData_size") Integer size, + @PathVariable String name) { + tableDataQuery(queryDTO, page, size); + return this.ok(); + } + + + private void tableDataQuery(SysDownloadCenterDTO queryDTO, Integer page, Integer size) { + this.pageQuery("t_tableData", () -> { + this.set("page", page); // 需要将前端表格中:currentPage定义的值设置成page的值 + return sysDownloadCenterService.queryDownloadCenterList(queryDTO, page, size); + }); + } + + /** + * 新增 + * + * @return + */ + @OdinRequest + @PostMapping("/add") + public ResponseMessage add() { + this.clearForm("f_downloadCenterForm"); + this.set("sysDownloadCenterDTO", new Object[]{}); + this.set("fileList", new Object[]{}); + this.set("dialogFormVisible", true); + this.set("dialogFormTitle", "材料新增"); + return this.ok(); + } + + /** + * 保存 + * + * @param sysDownloadCenterDTO + * @return + */ + @OdinRequest(refresh = true) // refresh = true 请求结束后刷新页面 + @PostMapping("/doSave/{name}") + public ResponseMessage doSave(@OdinRequestParam("f_downloadCenterForm") SysDownloadCenterDTO sysDownloadCenterDTO, + @PathVariable String name, @RequestBody JSONObject jsonObjecte) throws DfsException { + if(sysDownloadCenterDTO.getMaterial_type()==null|| "".equals(sysDownloadCenterDTO.getMaterial_type())){ + return this.error("请选择文件类型!"); + } + //设置保留位数 + DecimalFormat df = new DecimalFormat("0.00"); + JSONArray array = jsonObjecte.getJSONArray("sysDownloadCenterDTO"); + List list = array.toJavaList(SysDownloadCenterDTO.class); + if (list.size() < 1) { + return ResponseMessage.error("请上传附件!"); + } else { + for (SysDownloadCenterDTO downloadCenterDTO : list) { + //录入数据库 + SysDownloadCenterDTO dto = new SysDownloadCenterDTO(); + dto.setId(downloadCenterDTO.getId()); + dto.setMaterial_name(downloadCenterDTO.getMaterial_name()); + String size; + //字节 + long baty = Long.parseLong(downloadCenterDTO.getMaterial_size()); + //小于M用kb + if (baty < 1048576 && baty > 0) { + String kb = df.format((double) baty / 1024); + size = kb + "KB"; + } else if (baty >= 1048576 && baty < 1073741824) { //用m表示 + String m = df.format((double) baty / 1048576); + size = m + "M"; + } else { //G表示 + String g = df.format((double) baty / 1073741824); + size = g + "G"; + } + dto.setMaterial_size(size); + dto.setMaterial_type(sysDownloadCenterDTO.getMaterial_type()); + dto.setUpload_time(new Date()); + sysDownloadCenterService.saveDownloadCenter(dto); + } + this.set("dialogFormVisible", false); + return this.ok("保存成功!!!"); + } + } + + + /** + * 删除 + * + * @param id + * @return + */ + @OdinRequest(refresh = true) // refresh = true 请求结束后刷新页面 + @PostMapping("/delete") + public ResponseMessage delete(String id) throws DfsException { + sysDownloadCenterService.delete(id); + fsService.deleteObject(id); + return this.ok("删除成功!"); + + } + + //移除文件 + @GetMapping("/del/{id}") + public ResponseMessage del(@PathVariable String id) throws DfsException { + fsService.deleteObject(id); + return this.ok("文件移除成功!"); + } + + //批量下载 + @GetMapping("/batchDownload/{ids}") + public void batchDownload(@PathVariable String ids, HttpServletResponse response) throws DfsException { + String[] s = ids.split(","); + String zipFileName = "batchDownload.zip"; +// response.reset(); + response.setCharacterEncoding("UTF-8"); + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); + response.setHeader("Content-Disposition", "attachment;filename=" + zipFileName); + ZipOutputStream zos = null; + try { + zos = new ZipOutputStream(response.getOutputStream()); + for (String fileId : s) { + FSObject fsObject; + try { + fsObject = fsService.getObject(fileId); + } catch (DfsException e) { + log.error("{}文件不存在!", fileId); + continue; + } + InputStream is = fsObject.getInputStream(); + BufferedInputStream bis = null; + try { + bis = new BufferedInputStream(is); + //将文件写入zip内,即将文件进行打包 + zos.putNextEntry(new ZipEntry(fsObject.getName())); + //写入文件的方法,同上 + int size = 0; + byte[] buffer = new byte[1024]; + //设置读取数据缓存大小 + while ((size = bis.read(buffer)) > 0) { + zos.write(buffer, 0, size); + } + //关闭输入输出流 + zos.closeEntry(); + } catch (Exception e) { + throw e; + } finally { + if (bis != null) { + bis.close(); + } + } + } + } catch (Exception e) { + throw new AppException("批量下载失败"); + } finally { + if (zos != null) { + try { + zos.close(); + } catch (IOException e) { + } + } + } + + } + + + /** + * 下载 + * + * @return + */ + @GetMapping("/download/{id}") + public void download(@PathVariable String id, HttpServletResponse response) throws IOException { + FSObject fsObject = null; + try { + fsObject = fsService.getObject(id); + } catch (Exception e) { + response.sendError(404, "文件不存在!"); + return; + } + sysDownloadCenterService.saveDownloadLog(id, currentUserService.getCurrentUser().getLogonName()); + OutputStream out = null; + InputStream in = fsObject.getInputStream(); + try { + response.addHeader("content-type", "application/octet-stream"); + response.setContentType("application/octet-stream"); + response.addHeader("Content-Disposition", "attachment;filename=" + new String(fsObject.getName().getBytes("UTF-8"), "ISO8859-1")); + out = response.getOutputStream(); + + byte[] bytes = new byte[2048]; + int len; + while ((len = in.read(bytes)) > 0) { + out.write(bytes, 0, len); + } + } catch (Exception e) { + log.error("文件下载异常", e); + } finally { + //释放资源 + if (out != null) { + try { + out.close(); + } catch (IOException e) { + log.error("IO close error!", e); + } + } + if (in != null) { + try { + in.close(); + } catch (IOException e) { + log.error("IO close error!", e); + } + } + } + } + + //上传 + @PostMapping("/upload") + public ResponseMessage upload(@RequestParam MultipartFile file, HttpServletRequest request) throws IOException, DfsException { + SysUser sysUser = currentUserService.getCurrentUser(); + if (!"1".equals(sysUser.getUserType())) { + return ResponseMessage.error("只允许超级管理员上传附件!"); + } + ResponseMessage rm; + String originalFilename = file.getOriginalFilename(); + String fileType = originalFilename.substring(originalFilename.lastIndexOf(".")); + /*if (!".zip".equals(fileType)) { + rm = ResponseMessage.ok("文件类型不对!!!"); + return rm; + }*/ + //创建文件存储对象 + FSObject fsObject = new FSObject(); + fsObject.setName(file.getOriginalFilename()); + fsObject.setContentType(file.getContentType()); + fsObject.setInputStream(file.getInputStream()); + fsObject.setSize(file.getSize()); + //该id在文件存入后由mongodb返回 + String id = fsService.pubObject(fsObject); + if (StringUtil.isNotEmpty(id)) { + SysDownloadCenterDTO dto = new SysDownloadCenterDTO(); + dto.setId(id); + dto.setMaterial_size(Long.toString(fsObject.getSize())); + dto.setMaterial_name(fsObject.getName()); + rm = ResponseMessage.ok("文件上传成功!!!", dto); + } else { + rm = ResponseMessage.ok("文件上传失败!!!"); + } + return rm; + } + + + //查询用户是否为超级管理员 + @GetMapping("/queryUser") + public ResponseMessage queryUser() { + SysUser sysUser = currentUserService.getCurrentUser(); + //超级管理员 + if ("1".equals(sysUser.getUserType())) { + return ResponseMessage.ok(true); + } else { + return ResponseMessage.ok(false); + } + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/SysErrorController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/SysErrorController.java new file mode 100644 index 0000000..432704a --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/SysErrorController.java @@ -0,0 +1,161 @@ +package com.insigma.sys.controller; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.ResponseMessage; +import com.insigma.framework.db.JdbcPageHelper; +import com.insigma.framework.db.PageInfo; +import com.insigma.sys.entity.SysError; +import com.insigma.sys.service.SysErrorService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.web.bind.annotation.*; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 异常信息维护 + */ +@RestController +@RequestMapping("/sys/error") +public class SysErrorController { + @Autowired + private JdbcTemplate jdbcTemplate; + @Autowired + private SysErrorService sysErrorService; + @PostMapping("/doInit") + public ResponseMessage doInit(@RequestBody JSONObject pageData) throws SQLException { + + Integer size = pageData.getInteger("size"); + HashMap tableData = tableDataQuery(pageData, 1, size); + pageData.put("t_tableData", tableData); + + /* List errors=sysErrorService.queryAllErrors(); + // JSONArray array1=new JSONArray(); + JSONArray array=JSONArray.parseArray(JSONArray.toJSONString(errors)); + JSONObject tableData = new JSONObject(); + + tableData.put("Data",array); + tableData.put("total",errors.size());*/ + pageData.put("t_tableData", tableData); + return ResponseMessage.ok(pageData); + } + @PostMapping("/doQuery/goIt") + public ResponseMessage queryBySome(@RequestBody JSONObject pageData){ + Map> map= (Map>) pageData.get("f_form1_n"); + String serviceName=map.get("serviceName").get("value"); + String functionName=map.get("functionName").get("value"); + String errorCode= map.get("errorCode").get("value"); + List errors=sysErrorService.findAllBySome(serviceName,functionName,errorCode); + JSONArray array=JSONArray.parseArray(JSONArray.toJSONString(errors)); + JSONObject tableData = new JSONObject(); + tableData.put("Data",array); + tableData.put("total",errors.size()); + pageData.put("t_tableData", tableData); + return ResponseMessage.ok(pageData); + } + @PostMapping("/doGridQuery/{id}") + public ResponseMessage doGridQuery(@RequestBody JSONObject jsonObject, @PathVariable String id) throws SQLException { + Integer page = jsonObject.getInteger("t_tableData_page"); + Integer size = jsonObject.getInteger("t_tableData_size"); + HashMap tableData = tableDataQuery(jsonObject, page, size); + jsonObject.put("t_tableData", tableData); + return ResponseMessage.ok(jsonObject); + } + @PostMapping("/delete") + public ResponseMessage deleteError(@RequestBody JSONObject pageData){ + Map map= (Map) pageData.get("data"); + try { + SysError sysError=sysErrorService.getSysErrorBean2(map); + sysErrorService.deleteError(sysError); + List errors=sysErrorService.queryAllErrors(); + JSONArray array=JSONArray.parseArray(JSONArray.toJSONString(errors)); + JSONObject tableData = new JSONObject(); + tableData.put("Data",array); + tableData.put("total",errors.size()); + return ResponseMessage.ok("删除成功",tableData); + }catch (Exception e){ + return ResponseMessage.error("删除失败"); + } + } + @PostMapping("/doSave/addError") + public ResponseMessage addError(@RequestBody JSONObject pageData){ + try { + Map> map= (Map>) pageData.get("f_errorForm_n"); + SysError sysError=sysErrorService.getSysErrorBean1(map); + sysErrorService.save(sysError); + List errors=sysErrorService.queryAllErrors(); + JSONArray array=JSONArray.parseArray(JSONArray.toJSONString(errors)); + JSONObject tableData = new JSONObject(); + tableData.put("Data",array); + tableData.put("total",errors.size()); + //将table装载到pageData + pageData.put("t_tableData", tableData); + pageData.put("dialogFormVisible",false); + return ResponseMessage.ok("增加成功",pageData); + }catch (Exception e){ + pageData.put("dialogFormVisible",false); + return ResponseMessage.error("异常编码重复"); + } + } + @PostMapping("/doCheck/{checkname}") + public ResponseMessage updateError(@RequestBody JSONObject pageData){ + try { + int index=Integer.parseInt(pageData.get("index").toString()); + HashMap maps= (HashMap) pageData.get("t_tableData_n"); + // String datas=maps.get("Data").toString(); + String datas=JSONObject.toJSONString(maps.get("Data")); + JSONArray jsonArray = JSON.parseArray(datas); + SysError sysError=JSON.toJavaObject(jsonArray.getJSONObject(index),SysError.class); + sysErrorService.save(sysError); + List errors=sysErrorService.queryAllErrors(); + JSONArray array=JSONArray.parseArray(JSONArray.toJSONString(errors)); + JSONObject tableData = new JSONObject(); + tableData.put("Data",array); + tableData.put("total",errors.size()); + //将table装载到pageData + pageData.put("t_tableData_n", tableData); + return ResponseMessage.ok("修改成功",pageData); + }catch (Exception e){ + return ResponseMessage.error(e.getMessage()); + } + } + + @PostMapping("/queryIsMany") + public ResponseMessage queryIsMany(@RequestBody JSONObject pageData){ + Map> map= (Map>) pageData.get("f_errorForm_n"); + String errCode=map.get("errorCode1").get("value"); + boolean flag=sysErrorService.queryByErrCode(errCode); + if (flag==true){ + map.get("errorCode1").put("value",""); + pageData.put("f_errorForm",map); + return ResponseMessage.error("异常编码重复"); + } + return ResponseMessage.ok(pageData); + } + public HashMap tableDataQuery(JSONObject jsonObject, Integer page, Integer size) throws SQLException { + StringBuffer querySQL = new StringBuffer("select * from syserror where 1=1 "); + + JdbcPageHelper helper = new JdbcPageHelper(jdbcTemplate, page, size); + PageInfo> data = helper.queryPagination(querySQL.toString(), new ArrayList<>(), rs -> { + Map map = new HashMap<>(); + map.put("id", rs.getString("id")); + map.put("serviceName", rs.getString("servicename")); + map.put("functionName", rs.getString("functionname")); + map.put("errorCode", rs.getString("errorcode")); + map.put("message", rs.getString("message")); + map.put("createTime", rs.getDate("createtime")); + return map; + }); + + HashMap gridData = new HashMap<>(); + gridData.put("total", data.getTotal()); + gridData.put("Data", data.getData()); + return gridData; + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/SysFeedbackController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/SysFeedbackController.java new file mode 100644 index 0000000..c346cb1 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/SysFeedbackController.java @@ -0,0 +1,134 @@ +package com.insigma.sys.controller; + +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.ResponseMessage; +import com.insigma.framework.db.PageInfo; +import com.insigma.framework.dfs.FSObject; +import com.insigma.framework.dfs.FSService; +import com.insigma.sys.dto.FeedbackAnswerDTO; +import com.insigma.sys.dto.FeedbackDTO; +import com.insigma.sys.service.SysFeedbackService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.InputStreamResource; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.util.ObjectUtils; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.sql.SQLException; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +/** + * @author yinjh + * @version 2022/2/23 + */ +@RestController +@RequestMapping("/sys/feedback") +public class SysFeedbackController { + + @Autowired + private SysFeedbackService sysFeedbackService; + + @Autowired(required = false) + private FSService fsService; + + @PostMapping("/query") + public ResponseMessage query(@RequestBody JSONObject jsonObject) throws SQLException { + FeedbackDTO queryDTO = jsonObject.toJavaObject(FeedbackDTO.class); + Integer page = jsonObject.getInteger("page"); + Integer size = jsonObject.getInteger("size"); + PageInfo pageInfo = sysFeedbackService.page(queryDTO, page, size); + return ResponseMessage.ok(pageInfo); + } + + @PostMapping("/save") + public ResponseMessage save(@RequestBody FeedbackDTO feedbackDTO) { + if (ObjectUtils.isEmpty(feedbackDTO.getTitle())) { + return ResponseMessage.error("意见标题不能为空!"); + } + if (ObjectUtils.isEmpty(feedbackDTO.getContent())) { + return ResponseMessage.error("意见内容不能为空!"); + } + sysFeedbackService.save(feedbackDTO); + return ResponseMessage.ok("提交成功!"); + } + + @PostMapping("/get/{id}") + public ResponseMessage get(@PathVariable String id) { + if (ObjectUtils.isEmpty(id)) { + return ResponseMessage.error("意见ID不能为空!"); + } + FeedbackDTO feedbackDTO = sysFeedbackService.get(id); + return ResponseMessage.ok(feedbackDTO); + } + + @PostMapping("/saveAnswer") + public ResponseMessage saveAnswer(@RequestBody FeedbackAnswerDTO feedbackAnswerDTO) { + if (ObjectUtils.isEmpty(feedbackAnswerDTO.getFeedbackId())) { + return ResponseMessage.error("意见ID不能为空!"); + } + if (ObjectUtils.isEmpty(feedbackAnswerDTO.getContent())) { + return ResponseMessage.error("回复内容不能为空!"); + } + sysFeedbackService.saveAnswer(feedbackAnswerDTO); + return ResponseMessage.ok("提交成功!"); + } + + @PostMapping("/images") + public ResponseMessage upload(MultipartFile file) { + try { + if (fsService == null) { + return ResponseMessage.error("未启用FS"); + } + if (ObjectUtils.isEmpty(file.getContentType())) { + return ResponseMessage.error("content-type不能为空"); + } + if (!file.getContentType().toLowerCase().contains("image")) { + return ResponseMessage.error("图片格式不正确"); + } + FSObject fsObject = new FSObject(); + fsObject.setName(file.getOriginalFilename()); + fsObject.setUploadDate(new Date()); + fsObject.setInputStream(file.getInputStream()); + fsObject.setContentType(file.getContentType()); + fsObject.setSize(file.getSize()); + + Map result = new HashMap<>(); + result.put("location", "/sys/feedback/static/images/" + fsService.pubObject(fsObject) + file.getContentType().substring(file.getContentType().lastIndexOf("/")).toLowerCase().replace("/", ".")); + return ResponseMessage.ok(result); + } catch (Exception e) { + return ResponseMessage.error(e.getMessage()); + } + } + + @GetMapping("/static/images/{prefix}.{suffix}") + public ResponseEntity view(@PathVariable String prefix, @PathVariable String suffix) { + try { + if (fsService == null) { + return ResponseEntity.notFound().build(); + } + FSObject fsObject; + try { + fsObject = fsService.getObject(prefix); + } catch (Exception e) { + fsObject = null; + } + if (fsObject == null || !fsObject.getContentType().toLowerCase().contains(suffix.toLowerCase())) { + return ResponseEntity.notFound().build(); + } + return ResponseEntity.ok() + .header("Pragma", "no-cache") + .header("Cache-Control", "no-cache") + .header("Expires", "0") + .header("Content-Type", fsObject.getContentType()) + .header("Content-Length", String.valueOf(fsObject.getSize())) + .body(new InputStreamResource(fsObject.getInputStream())); + } catch (Exception e) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage()); + } + } + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/SysFunctionDocController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/SysFunctionDocController.java new file mode 100644 index 0000000..6b9b7db --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/SysFunctionDocController.java @@ -0,0 +1,222 @@ +package com.insigma.sys.controller; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.ResponseMessage; +import com.insigma.framework.dfs.FSObject; +import com.insigma.framework.dfs.FSService; +import com.insigma.framework.util.TreeUtil; +import com.insigma.sys.common.CurrentUserService; +import com.insigma.sys.dto.MenuDTO; +import com.insigma.sys.dto.SysFunctionDocDTO; +import com.insigma.sys.entity.SysMenu; +import com.insigma.sys.entity.SysUser; +import com.insigma.sys.service.MenuService; +import com.insigma.sys.service.SysFunctionDocService; +import com.insigma.web.support.annotation.OdinRequest; +import com.insigma.web.support.controller.BaseController; +import com.insigma.web.support.repository.MdParamRepository; +import com.insigma.web.support.entity.MdParam; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.InputStreamResource; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.util.ObjectUtils; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.util.*; + +@Slf4j +@RestController +@RequestMapping("/sys/sysFunctionDoc") +public class SysFunctionDocController extends BaseController { + + @Autowired + private SysFunctionDocService sysFunctionDocService; + + @Autowired + private MdParamRepository mdParamRepository; + + @Autowired(required = false) + private FSService fsService; + + @Autowired + private CurrentUserService currentUserService; + + @Autowired + private MenuService menuService; + + @GetMapping("/queryTree") + public ResponseMessage queryTable(){ + List menuDTOS = menuService.queryAllMenu(); + JSONArray jsonArray = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(menuDTOS)), "functionid", "parentid", "children"); + return ResponseMessage.ok("查询成功", jsonArray); + } + + @PostMapping("/nodeClick") + public ResponseMessage nodeClick(@RequestBody JSONObject jsonObject) { + SysMenu sysMenu; + String a=jsonObject.get("functionid").toString(); + if (a!=null){ + long functionid =(long)Integer.parseInt(a); + sysMenu =menuService.findMenuById(functionid); + List menulist=menuService.findTreesByPId(sysMenu.getFunctionid()); + if (menulist.size()>0){ + //有子类 + return ResponseMessage.ok(sysMenu); + }else { + //没有子类 + return ResponseMessage.ok("重复",sysMenu); + } + }else { + return ResponseMessage.error(); + } + } + + /** + * 根据id查找对象 + * @param jsonObject + * @return + */ + @PostMapping("/queryById") + public ResponseMessage queryById(@RequestBody JSONObject jsonObject) { + try { + String id=jsonObject.get("functionid").toString(); + String funtype=jsonObject.get("funtype").toString(); + List menuDTOS=menuService.queryMenuByFuntypeAndActive(funtype); + JSONArray jsonArray = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(menuDTOS)), "functionid", "parentid", "children"); + jsonObject.put("treedata",jsonArray); + long fId=Integer.parseInt(id); + SysMenu menu=menuService.findMenuById(fId); + List list=new ArrayList(); + if(menu!=null){ + String [] ms=menu.getIdpath().split("/"); + if (ms.length>0){ + for (String s:ms){ + if(s.equals("0")){ + continue; + } + list.add(Long.valueOf(s)); + } + }} + jsonObject.put("pname",list); + return ResponseMessage.ok(jsonObject); + }catch (Exception e){ + return ResponseMessage.error(e.getMessage()); + } + } + + @PostMapping("/doQuery") + public ResponseMessage doQuery(@RequestBody JSONObject jsonObject) { + String tmp = jsonObject.getString("functionid"); + Long functionid; + if (ObjectUtils.isEmpty(tmp)) { + String location = jsonObject.getString("location"); + if (ObjectUtils.isEmpty(location)) { + return ResponseMessage.error("传入菜单ID为空"); + } + MdParam mdParam = mdParamRepository.findByLocation(location); + if (mdParam == null) { + return ResponseMessage.error("模块不存在"); + } + functionid = mdParam.getFunctionid(); + } else { + functionid = Long.parseLong(tmp); + } + SysFunctionDocDTO aysFunctionDocDTO = sysFunctionDocService.queryByFunctionID(functionid); + if (aysFunctionDocDTO == null) { + return ResponseMessage.error("未配置该模块的功能介绍"); + } + return ResponseMessage.ok(aysFunctionDocDTO); + } + + @PostMapping("/doSave") + public ResponseMessage doSave(@RequestBody SysFunctionDocDTO sysFunctionDocDTO ) { + try { + sysFunctionDocService.saveDoc(sysFunctionDocDTO); + return ResponseMessage.ok(); + } catch (Exception e) { + return ResponseMessage.error(e.getMessage()); + } + } + + + @OdinRequest + @PostMapping("/deleteMenu") + public ResponseMessage delete(@RequestBody JSONObject jsonObject) { + try { + String tmp = jsonObject.get("functionid").toString(); + Long functionid = Long.parseLong(tmp); + if(functionid==0){ + return ResponseMessage.error("传入菜单ID为空"); + } + sysFunctionDocService.deleteByFunctionid(functionid); + return ResponseMessage.ok(); + } catch (Exception e) { + return ResponseMessage.error(e.getMessage()); + } + } + + @PostMapping("/images") + public ResponseMessage upload(MultipartFile file, String messageId) { + try { + if (fsService == null) { + return ResponseMessage.error("未启用FS"); + } + if (ObjectUtils.isEmpty(file.getContentType())) { + return ResponseMessage.error("content-type不能为空"); + } + if (!file.getContentType().toLowerCase().contains("image")) { + return ResponseMessage.error("图片格式不正确"); + } + FSObject fsObject = new FSObject(); + fsObject.setName(file.getOriginalFilename()); + fsObject.setUploadDate(new Date()); + fsObject.setInputStream(file.getInputStream()); + fsObject.setContentType(file.getContentType()); + fsObject.setSize(file.getSize()); + + Map result = new HashMap<>(); + result.put("location", "/sys/sysFunctionDoc/static/images/" + fsService.pubObject(fsObject) + file.getContentType().substring(file.getContentType().lastIndexOf("/")).toLowerCase().replace("/", ".") + "?messageId=" + messageId); + return ResponseMessage.ok(result); + } catch (Exception e) { + return ResponseMessage.error(e.getMessage()); + } + } + @GetMapping("/static/images/{prefix}.{suffix}") + public ResponseEntity view(@PathVariable String prefix, @PathVariable String suffix, String messageId) { + try { + SysUser sysUser = currentUserService.getCurrentUser(); + SysFunctionDocDTO sysFunctionDocDTO = sysFunctionDocService.queryByFunctionID(Long.parseLong(messageId)); + if (sysFunctionDocDTO != null ) { + if (sysFunctionDocDTO == null) { + return ResponseEntity.status(403).build(); + } + } + if (fsService == null) { + return ResponseEntity.notFound().build(); + } + FSObject fsObject; + try { + fsObject = fsService.getObject(prefix); + } catch (Exception e) { + fsObject = null; + } + if (fsObject == null || !fsObject.getContentType().toLowerCase().contains(suffix.toLowerCase())) { + return ResponseEntity.notFound().build(); + } + return ResponseEntity.ok() + .header("Pragma", "no-cache") + .header("Cache-Control", "no-cache") + .header("Expires", "0") + .header("Content-Type", fsObject.getContentType()) + .header("Content-Length", String.valueOf(fsObject.getSize())) + .body(new InputStreamResource(fsObject.getInputStream())); + } catch (Exception e) { + log.error(e.getMessage(), e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage()); + } + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/SysGrantController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/SysGrantController.java new file mode 100644 index 0000000..ad0b32d --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/SysGrantController.java @@ -0,0 +1,343 @@ +package com.insigma.sys.controller; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.ResponseMessage; +import com.insigma.framework.exception.AppException; +import com.insigma.framework.util.TreeUtil; +import com.insigma.sys.common.CommonValidator; +import com.insigma.sys.common.CurrentUserService; +import com.insigma.sys.dto.UserDTO; +import com.insigma.sys.entity.*; +import com.insigma.sys.service.Aa26Service; +import com.insigma.sys.service.SysOrgService; +import com.insigma.sys.service.SysUserService; +import com.insigma.web.support.service.CodeTypeService; +import com.insigma.web.support.util.JavaBeanUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + + +@RestController +@RequestMapping("/sys/grant") +@Slf4j +public class SysGrantController { + @Autowired + private CodeTypeService codeTypeService; + + @Autowired + private SysUserService sysUserService; + + @Autowired + private CurrentUserService currentUserService; + + @Autowired + private SysOrgService sysOrgService; + + @Autowired + private Aa26Service aa26Service; + + @Autowired + private CommonValidator validator; + + /** + * 初始化页面数据 + * + * @return + */ + @PostMapping("/doInit") + public ResponseMessage initPageDate(@RequestBody JSONObject jsonObject) { + String userType = currentUserService.getCurrentUser().getUserType();//获取当前登录用户类型 + JSONObject codeTypes = jsonObject.getJSONObject("codeTypes"); + JSONObject codeTypesRes = codeTypeService.getCodeTypes(codeTypes); + jsonObject.put("codeTypes", codeTypesRes); + jsonObject.put("currentUserType", userType);//设置当前登录用户类型 + return ResponseMessage.ok(jsonObject); + } + + /** + * 保存用户 + * + * @param pageData + * @return + */ + @PostMapping("/doSave") + public ResponseMessage save(@RequestBody JSONObject pageData) { + try { + SysUser sysUser = JavaBeanUtils.pageElementToBean(pageData,SysUser.class); + JSONArray roleIds = pageData.getJSONObject("roleIds").getJSONArray("value"); + List list = new ArrayList<>(); + for (Object roleId : roleIds) { + if (roleId != null) { + SysUserRole sysUserRole = new SysUserRole(); + sysUserRole.setRoleId(roleId.toString()); + list.add(sysUserRole); + } + } + if (!validator.validateRoleIds(roleIds.toJavaList(String.class))) { + throw new AppException("无权操作"); + } + sysUser.setSysUserRoleList(list); + sysUserService.saveUserRole(sysUser); + ResponseMessage rm = ResponseMessage.ok("保存成功"); + + return rm; + } catch (Exception e) { + log.error(e.getMessage(), e); + return ResponseMessage.error("保存失败,失败原因:" + e.getMessage()); + } + + } + + @GetMapping("/queryOneUser/{userId}") + public ResponseMessage queryOneUser(@PathVariable String userId) throws AppException { + SysUser sysUser = sysUserService.queryOneUser(userId); + //sysUser.setPassWD(null); + List roleList = sysUserService.queryUserRole(userId); + List areaList = sysUserService.queryUserArea(userId); + SysOrg sysOrg = sysOrgService.findByOrgid(sysUser.getOrgId()); + Aa26 aa26 = aa26Service.findByAab301(sysUser.getAreaId() + ""); + Map map = new ConcurrentHashMap<>(); + map.put("sysUser", sysUser); + map.put("roleList", roleList); + map.put("areaList", areaList); + + if (sysOrg != null) { + map.put("orgId", sysUser.getOrgId()); + map.put("sysOrgs",sysOrg); + //sysOrgService.findByRegioncode(sysUser.getAreaId()+"") + } + if (aa26 != null) + map.put("aa26", aa26); + return ResponseMessage.ok(map); + } + + @GetMapping("/queryTable") + public ResponseMessage queryTable(@RequestParam(name = "logonName") String logonName, + @RequestParam(name = "displayName") String displayName, + @RequestParam(name = "orgId") String orgId, + @RequestParam(name = "userState") String userState, + @RequestParam(name = "userType") String userType, + @RequestParam(name = "aa26") String aa26, + @RequestParam(name = "cardId") String cardId, + @RequestParam(name = "page") Integer page, + @RequestParam(name = "size") Integer size) { + Page list = sysUserService.findAll(logonName, displayName, orgId, userState,userType,aa26,cardId, page, size,"3"); + return ResponseMessage.ok(list); + } + + /** + * 注销用户 + * + * @param data + * @return + */ + @PostMapping(value = "/logoutUser") + public ResponseMessage logoutUser(@RequestBody(required = true) JSONObject data) { + try { + String userId = data.getString("userId"); + if (!validator.validateUser(userId)) { + throw new AppException("无权操作"); + } + sysUserService.logoutUser(userId); + return ResponseMessage.ok("注销成功"); + } catch (Exception e) { + log.error(e.getMessage(), e); + return ResponseMessage.error("注销失败,失败原因:" + e.getMessage()); + } + } + + /** + * 解锁用户 + * + * @param data + * @return + */ + @PostMapping(value = "/unlockUser") + public ResponseMessage unlockUser(@RequestBody(required = true) JSONObject data) { + try { + String userId = data.getString("userId"); + if (!validator.validateUser(userId)) { + throw new AppException("无权操作"); + } + sysUserService.unlockUser(userId); + return ResponseMessage.ok("解锁成功"); + } catch (Exception e) { + log.error(e.getMessage(), e); + return ResponseMessage.error("解锁失败,失败原因:" + e.getMessage()); + } + } + + /** + * 锁定用户 + * + * @param data + * @return + */ + @PostMapping(value = "/lockUser") + public ResponseMessage lockUser(@RequestBody(required = true) JSONObject data) { + try { + String userId = data.getString("userId"); + if (!validator.validateUser(userId)) { + throw new AppException("无权操作"); + } + sysUserService.lockUser(userId); + return ResponseMessage.ok("锁定成功"); + } catch (Exception e) { + log.error(e.getMessage(), e); + return ResponseMessage.error("锁定失败,失败原因:" + e.getMessage()); + } + } + + /** + * 重置密码 + * + * @param data + * @return + */ + @PostMapping("/resetPassWD") + public ResponseMessage resetPassWD(@RequestBody(required = true) JSONObject data) { + try { + String userId = data.getString("userId"); + if (!validator.validateUser(userId)) { + throw new AppException("无权操作"); + } + sysUserService.resetPassWD(userId); + return ResponseMessage.ok("重置密码成功"); + } catch (Exception e) { + log.error(e.getMessage(), e); + return ResponseMessage.error("重置密码失败,失败原因:" + e.getMessage()); + } + } + + @PostMapping("/editPass") + public ResponseMessage editPassWD(@RequestBody(required = true) JSONObject data){ + try { + String oldPass=data.getString("oldPass"); + String newPass=data.getString("newPass"); + sysUserService.updataPassWD(oldPass,newPass); + return ResponseMessage.ok("修改密码成功"); + } catch (Exception e) { + log.error(e.getMessage(), e); + return ResponseMessage.error("修改密码失败,失败原因:" + e.getMessage()); + } + } + + @GetMapping("/getOrgTreeNodes/{areaId}") + public ResponseMessage getOrgTreeNodes(@PathVariable String areaId) { + JSONArray orgNodes = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(sysUserService.queryOrgNodes(areaId))), "orgid", "parentid", "children"); + return ResponseMessage.ok(orgNodes); + } + + @GetMapping("/getAa26TreeNodes/{userType}") + public ResponseMessage getAa26TreeNodes(@PathVariable String userType) { + JSONArray orgNodes = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(sysUserService.queryAa26Nodes())), "aab301", "aaa148", "children"); + //orgNodes= JSONArray.parseArray(JSONArray.toJSONString(orgNodes).replace("aab301","id")); + return ResponseMessage.ok(orgNodes); + } + @GetMapping("/getOrgTreeNodes1/{userType}") + public ResponseMessage getOrgTreeNodes1(@PathVariable String userType) { + JSONArray orgNodes = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(sysUserService.findAllOrg())), "orgid", "parentid", "children"); + //orgNodes= JSONArray.parseArray(JSONArray.toJSONString(orgNodes).replace("aab301","id")); + return ResponseMessage.ok(orgNodes); + } + @GetMapping("getUserTypeCode") + public ResponseMessage getUserTypeCode() { + List> list = sysUserService.findUsetTypeCode(); + return ResponseMessage.ok(list); + } + + @GetMapping("getSlevel") + public ResponseMessage getSlevel() { + List> list = sysUserService.findSlevel(); + return ResponseMessage.ok(list); + } + + @GetMapping("getUserStateCode") + public ResponseMessage getUserStateCode() { + return ResponseMessage.ok(sysUserService.getUserStateCode()); + } + + @GetMapping("/getRoleList/{userType}") + public ResponseMessage getRoleList(@PathVariable("userType") String userType) { + List list = sysUserService.findByRoleType(userType); + return ResponseMessage.ok(list); + } + + @PostMapping("/doCheck/{id}") + public ResponseMessage doCheck(@PathVariable("id") String id, @RequestBody JSONObject data) { + boolean bool = true;//校验是否通过 + if ("logonName".equals(id)) { + String logonName = data.getJSONObject("logonName").getString("value"); + String userId=data.getJSONObject("userId").getString("value"); + bool = sysUserService.checkLogonName(logonName,userId); + } + if (bool) { + ResponseMessage rm = ResponseMessage.error("存在相同登录名"); + return rm; + } else { + return ResponseMessage.ok(); + } + } + + /** + * 获取所有机构 + * @return + */ + @GetMapping("/findAllOrg") + private ResponseMessage findAllOrg() { + List list = sysUserService.findAllOrg(); + return ResponseMessage.ok(list); + } + + /** + * 获取所有区域 + * @return + */ + @GetMapping("/findAllAa26") + private ResponseMessage findAllAa26() { + List list = sysOrgService.getAA26(); + return ResponseMessage.ok(list); + } + + /** + * 获取所有机构,返回格式为树结构 + * @return + */ + @GetMapping("/findAllOrgTree") + private ResponseMessage findAllOrgTree() { + List list = sysUserService.findAllOrg(); + JSONArray orgNodes = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(list)), "orgid", "parentid", "children"); + + return ResponseMessage.ok(orgNodes); + } + + /** + * 通用获取下拉框选项 + * @param codeType + * @return + */ + @GetMapping("/getAa10Code/{codeType}") + public ResponseMessage getAa10Code(@PathVariable String codeType){ + List> list = sysUserService.getAa10Code(codeType); + return ResponseMessage.ok(list); + } + + /** + * 获取当前登录用户 + * @return + */ + @GetMapping("/getCurrentUser") + public ResponseMessage getCurrentUser(){ + return ResponseMessage.ok(currentUserService.getCurrentUser()); + } + +} + diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/SysGuideController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/SysGuideController.java new file mode 100644 index 0000000..c38e4fa --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/SysGuideController.java @@ -0,0 +1,213 @@ +package com.insigma.sys.controller; + +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.ResponseMessage; +import com.insigma.sys.dto.SysGuideDTO; +import com.insigma.sys.service.SysGuideService; +import com.insigma.web.support.annotation.OdinRequest; +import com.insigma.web.support.annotation.OdinRequestParam; +import com.insigma.web.support.controller.BaseController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.ObjectUtils; +import org.springframework.web.bind.annotation.*; + +import java.util.HashMap; +import java.util.List; + + +@RestController +@RequestMapping("/sys/guide/Guide") +public class SysGuideController extends BaseController { + + @Autowired + private SysGuideService sysGuideService; + + /** + * 初始化 + * + * @param f_form + * @param size + * @return + */ + @OdinRequest(init = true) + @PostMapping("/doInit") + public ResponseMessage doInit(SysGuideDTO f_form, Integer size) { + tableDataQuery(f_form, 1, size); + return this.ok(); + } + + /** + * 分页查询 + * + * @param queryDTO + * @param page + * @param size + * @param name + * @return + */ + @OdinRequest + @PostMapping("/doGridQuery/{name}") + public ResponseMessage doGridQuery(@OdinRequestParam("f_form") SysGuideDTO queryDTO, + @OdinRequestParam("t_tableData_page") Integer page, + @OdinRequestParam("t_tableData_size") Integer size, + @PathVariable String name) { + tableDataQuery(queryDTO, page, size); + return this.ok(); + } + + /** + * 查询 + * + * @param queryDTO + * @param size + * @return + */ + @OdinRequest + @PostMapping("/query") + public ResponseMessage query(@OdinRequestParam("f_form") SysGuideDTO queryDTO, + Integer size) { + tableDataQuery(queryDTO, 1, size); + return this.ok(); + } + + private void tableDataQuery(SysGuideDTO queryDTO, Integer page, Integer size) { + this.pageQuery("t_tableData", () -> { + this.set("page", page); // 需要将前端表格中:currentPage定义的值设置成page的值 + return sysGuideService.queryGuideList(queryDTO, page, size); + }); + } + + /** + * 新增 + * + * @return + */ + @OdinRequest + @PostMapping("/add") + public ResponseMessage add() { + this.clearForm("f_guideForm"); + this.set("dialogFormVisible", true); + this.set("dialogFormTitle", "新增"); + return this.ok(); + } + + /** + * 修改 + * + * @param id + * @return + */ + @OdinRequest + @PostMapping("/update") + public ResponseMessage update(String id) { + SysGuideDTO dto = sysGuideService.queryGuide(id); + + if(!ObjectUtils.isEmpty(dto.getAnswer_content())){ + String s = dto.getAnswer_content().replaceAll("
", "\n"); + dto.setAnswer_content(s); + } + + this.toForm("f_guideForm", dto); + this.set("dialogFormVisible", true); + this.set("dialogFormTitle", "修改"); + return this.ok(); + } + + /** + * 批量删除 + * + * @return + */ + @OdinRequest(refresh = true) + @PostMapping("/batchDelete") + public ResponseMessage batchDelete() { + List list = this.getCheckedTableData("t_tableData", SysGuideDTO.class); + if (list.size() == 0) { + return this.error("请勾选需要删除的内容!"); + } + sysGuideService.deleteGuides(list); + return this.ok("删除成功!"); + } + + /** + * 删除 + * + * @param id + * @return + */ + @OdinRequest + @PostMapping("/delete") + public ResponseMessage delete(String id) { + sysGuideService.delete(id); + this.setBackFunType("rQuery"); + return this.ok("删除成功!"); + } + + /** + * 保存 + * + * @param sysGuideDTO + * @param name + * @return + */ + @OdinRequest + @PostMapping("/doSave/{name}") + public ResponseMessage doSave(@OdinRequestParam("f_guideForm") SysGuideDTO sysGuideDTO, @PathVariable String name) { + sysGuideService.saveGuide(sysGuideDTO); + this.set("dialogFormVisible", false); +// doInit(new SysGuideDTO(),size); + this.setBackFunType("rQuery"); + return this.ok("保存成功!"); + } + + /** + * 点击问题名称触发热度+1 + */ + @GetMapping("/hot/{id}") + public ResponseMessage hot(@PathVariable String id) { + sysGuideService.hot(id); + return this.ok(); + } + + /** + * @Description: 根据不同选择进行详细的查询数据 + * @author GH + * @version 2021/7/23 14:53 + * @return + */ + @PostMapping("/findByQuestion_type") + public ResponseMessage findByQuestion_type(@RequestBody JSONObject jsonObjecte) { + Integer page = jsonObjecte.getInteger("page"); + Integer size = jsonObjecte.getInteger("size"); + String question_type = jsonObjecte.getString("question_type"); + String sort = jsonObjecte.getString("sort"); + String str = jsonObjecte.getString("str"); + return ResponseMessage.ok(sysGuideService.findByQuestion_type(question_type,sort,str,page,size)); + } + + + /** + * @Description: 查询首页引导信息 + * @author GH + * @version 2021/7/30 13:09 + * @return + */ + @GetMapping("/findFrontPage") + public ResponseMessage findFrontPage() { + List> map = sysGuideService.findFrontPage(); + return ResponseMessage.ok(map); + } + + + /** + * @Description: 更多详情页面 + * @author GH + * @version 2021/7/30 13:09 + * @return + */ + @PostMapping("/findDetailsPage/{id}") + public ResponseMessage findDetailsPage(@PathVariable String id) { + sysGuideService.hot(id); + return ResponseMessage.ok(sysGuideService.findDetailsPage(id)); + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/SysMessageController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/SysMessageController.java new file mode 100644 index 0000000..1905677 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/SysMessageController.java @@ -0,0 +1,119 @@ +package com.insigma.sys.controller; + +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.ResponseMessage; +import com.insigma.framework.db.PageInfo; +import com.insigma.framework.dfs.FSObject; +import com.insigma.framework.dfs.FSService; +import com.insigma.sys.common.CurrentUserService; +import com.insigma.sys.dto.MessageDTO; +import com.insigma.sys.entity.SysUser; +import com.insigma.sys.service.SysMessageService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.InputStreamResource; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.util.ObjectUtils; +import org.springframework.web.bind.annotation.*; + +import java.sql.SQLException; + +/** + * Created by yinjh on 2020/6/16. + */ +@Slf4j +@RestController +@RequestMapping("/sys/message") +public class SysMessageController { + + @Autowired + private SysMessageService sysMessageService; + + @Autowired + private CurrentUserService currentUserService; + + @Autowired(required = false) + private FSService fsService; + + @PostMapping("/list") + public ResponseMessage list(@RequestBody JSONObject jsonObject) throws SQLException { + SysUser sysUser = currentUserService.getCurrentUser(); + MessageDTO queryDTO = jsonObject.toJavaObject(MessageDTO.class); + Integer page = jsonObject.getInteger("page"); + Integer size = jsonObject.getInteger("size"); + PageInfo pageInfo = sysMessageService.getSysMessageList(sysUser, queryDTO, page, size, false); + return ResponseMessage.ok(pageInfo); + } + + @PostMapping("/save") + public ResponseMessage save(@RequestBody MessageDTO messageDTO) { + String userId = currentUserService.getCurrentUser().getUserId(); + if (ObjectUtils.isEmpty(messageDTO.getTitle())) { + return ResponseMessage.error("消息标题不能为空!"); + } + if (ObjectUtils.isEmpty(messageDTO.getContent())) { + return ResponseMessage.error("消息内容不能为空!"); + } + if (ObjectUtils.isEmpty(messageDTO.getType())) { + return ResponseMessage.error("消息类型不能为空!"); + } + if ("1".equals(messageDTO.getType())) { + if (messageDTO.getUserIds() == null || messageDTO.getUserIds().size() == 0) { + return ResponseMessage.error("消息通知目标不能为空!"); + } + } + sysMessageService.save(userId, messageDTO); + return ResponseMessage.ok("保存成功!"); + } + + @GetMapping("/read") + public ResponseMessage read(String messageId) { + String userId = currentUserService.getCurrentUser().getUserId(); + MessageDTO messageDTO = sysMessageService.getSysMessage(userId, messageId); + if ("1".equals(messageDTO.getType()) && "-1".equals(messageDTO.getFlag())) { + return ResponseMessage.error("无权查看!"); + } + if (!"1".equals(messageDTO.getFlag())) { + sysMessageService.updateFlag(userId, messageId); + } + return ResponseMessage.ok(messageDTO); + } + + + @GetMapping("/static/images/{prefix}.{suffix}") + public ResponseEntity view(@PathVariable String prefix, @PathVariable String suffix, String messageId) { + try { + SysUser sysUser = currentUserService.getCurrentUser(); + MessageDTO messageDTO = sysMessageService.getSysMessage(messageId); + if (messageDTO != null && "1".equals(messageDTO.getType()) && !"1".equals(sysUser.getUserType())) { + messageDTO = sysMessageService.getSysUserMessage(sysUser.getUserId(), messageId); + if (messageDTO == null) { + return ResponseEntity.status(403).build(); + } + } + if (fsService == null) { + return ResponseEntity.notFound().build(); + } + FSObject fsObject; + try { + fsObject = fsService.getObject(prefix); + } catch (Exception e) { + fsObject = null; + } + if (fsObject == null || !fsObject.getContentType().toLowerCase().contains(suffix.toLowerCase())) { + return ResponseEntity.notFound().build(); + } + return ResponseEntity.ok() + .header("Pragma", "no-cache") + .header("Cache-Control", "no-cache") + .header("Expires", "0") + .header("Content-Type", fsObject.getContentType()) + .header("Content-Length", String.valueOf(fsObject.getSize())) + .body(new InputStreamResource(fsObject.getInputStream())); + } catch (Exception e) { + log.error(e.getMessage(), e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage()); + } + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/SysMessageManageController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/SysMessageManageController.java new file mode 100644 index 0000000..efb4e9c --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/SysMessageManageController.java @@ -0,0 +1,130 @@ +package com.insigma.sys.controller; + +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.ResponseMessage; +import com.insigma.framework.db.PageInfo; +import com.insigma.framework.dfs.FSObject; +import com.insigma.framework.dfs.FSService; +import com.insigma.framework.util.IDUtil; +import com.insigma.sys.common.CurrentUserService; +import com.insigma.sys.dto.LazyTreeNode; +import com.insigma.sys.dto.MessageDTO; +import com.insigma.sys.entity.SysUser; +import com.insigma.sys.service.SysMessageService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.ObjectUtils; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.sql.SQLException; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author yinjh + * @version 2021/8/23 + */ +@RestController +@RequestMapping("/sys/message/manage") +public class SysMessageManageController { + + @Autowired + private SysMessageService sysMessageService; + + @Autowired + private CurrentUserService currentUserService; + + @Autowired(required = false) + private FSService fsService; + + @PostMapping("/init") + public ResponseMessage init() { + return ResponseMessage.ok("", IDUtil.generateUUID()); + } + + @PostMapping("/list") + public ResponseMessage list(@RequestBody JSONObject jsonObject) throws SQLException { + SysUser sysUser = currentUserService.getCurrentUser(); + MessageDTO queryDTO = jsonObject.toJavaObject(MessageDTO.class); + Integer page = jsonObject.getInteger("page"); + Integer size = jsonObject.getInteger("size"); + PageInfo pageInfo = sysMessageService.getSysMessageList(sysUser, queryDTO, page, size, true); + return ResponseMessage.ok(pageInfo); + } + + @PostMapping("/save") + public ResponseMessage save(@RequestBody MessageDTO messageDTO) { + String userId = currentUserService.getCurrentUser().getUserId(); + if (ObjectUtils.isEmpty(messageDTO.getTitle())) { + return ResponseMessage.error("消息标题不能为空!"); + } + if (ObjectUtils.isEmpty(messageDTO.getContent())) { + return ResponseMessage.error("消息内容不能为空!"); + } + if (ObjectUtils.isEmpty(messageDTO.getType())) { + return ResponseMessage.error("消息类型不能为空!"); + } + if ("1".equals(messageDTO.getType())) { + if (messageDTO.getUserIds() == null || messageDTO.getUserIds().size() == 0) { + return ResponseMessage.error("消息通知目标不能为空!"); + } + } + MessageDTO message = sysMessageService.getSysMessage(messageDTO.getMessageId()); + if (message == null) { + sysMessageService.save(userId, messageDTO); + } else { + sysMessageService.update(userId, messageDTO); + } + return ResponseMessage.ok("保存成功!"); + } + + @GetMapping("/read") + public ResponseMessage read(String messageId) { + MessageDTO messageDTO = sysMessageService.getSysMessage(messageId); + return ResponseMessage.ok(messageDTO); + } + + @PostMapping("/delete") + public ResponseMessage delete(@RequestBody MessageDTO messageDTO) { + if (ObjectUtils.isEmpty(messageDTO.getMessageId())) { + return ResponseMessage.error("消息ID不能为空!"); + } + sysMessageService.deleteSysMessage(messageDTO.getMessageId()); + return ResponseMessage.ok("删除成功!"); + } + + @GetMapping("/userOrgTree") + public ResponseMessage getUserOrgTree(String parentId) { + List> list = sysMessageService.getUserOrgTree(parentId); + return ResponseMessage.ok(list); + } + + @PostMapping("/images") + public ResponseMessage upload(MultipartFile file, String messageId) { + try { + if (fsService == null) { + return ResponseMessage.error("未启用FS"); + } + if (ObjectUtils.isEmpty(file.getContentType())) { + return ResponseMessage.error("content-type不能为空"); + } + if (!file.getContentType().toLowerCase().contains("image")) { + return ResponseMessage.error("图片格式不正确"); + } + FSObject fsObject = new FSObject(); + fsObject.setName(file.getOriginalFilename()); + fsObject.setUploadDate(new Date()); + fsObject.setInputStream(file.getInputStream()); + fsObject.setContentType(file.getContentType()); + fsObject.setSize(file.getSize()); + + Map result = new HashMap<>(); + result.put("location", "/sys/message/static/images/" + fsService.pubObject(fsObject) + file.getContentType().substring(file.getContentType().lastIndexOf("/")).toLowerCase().replace("/", ".") + "?messageId=" + messageId); + return ResponseMessage.ok(result); + } catch (Exception e) { + return ResponseMessage.error(e.getMessage()); + } + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/SysOpLogController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/SysOpLogController.java new file mode 100644 index 0000000..49281b0 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/SysOpLogController.java @@ -0,0 +1,61 @@ +package com.insigma.sys.controller; + +import com.insigma.framework.ResponseMessage; +import com.insigma.framework.db.PageInfo; +import com.insigma.sys.dto.SysOperateLogDTO; +import com.insigma.sys.service.SysOperateLogService; +import com.insigma.web.support.annotation.OdinRequest; +import com.insigma.web.support.annotation.OdinRequestParam; +import com.insigma.web.support.controller.BaseController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + + +/** + * fukq 2020/6/1 + */ +@RestController +@RequestMapping("/sys/sysoplog") +public class SysOpLogController extends BaseController { + + @Autowired + SysOperateLogService sysOperateLogService; + + @OdinRequest(init = true) + @PostMapping("/doInit") + public ResponseMessage doInit(SysOperateLogDTO f_form, Integer page, Integer size) { + tableDataQuery(f_form, page, size); + return this.ok(); + } + + @OdinRequest + @PostMapping("/doGridQuery/{name}") + public ResponseMessage doGridQuery(@OdinRequestParam("f_form") SysOperateLogDTO queryDTO, + @OdinRequestParam("t_tableData_page") Integer page, + @OdinRequestParam("t_tableData_size") Integer size, + @PathVariable String name) { + tableDataQuery(queryDTO, page, size); + this.set("page", page); + return this.ok(); + } + + @OdinRequest + @PostMapping("/query") + public ResponseMessage query(@OdinRequestParam("f_form") SysOperateLogDTO queryDTO, + @OdinRequestParam("t_tableData") PageInfo pageInfo, + Integer size) { + tableDataQuery(queryDTO, 1, size); + this.set("page", 1); + return this.ok(); + } + + + public void tableDataQuery(SysOperateLogDTO queryDTO, Integer page, Integer size) { + this.pageQuery("t_tableData", () -> sysOperateLogService.querySysOperateLogList(queryDTO, page, size)); + + } + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/SysUserController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/SysUserController.java new file mode 100644 index 0000000..1e05862 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/SysUserController.java @@ -0,0 +1,476 @@ +package com.insigma.sys.controller; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.ResponseMessage; +import com.insigma.framework.encryption.util.SM3Utils; +import com.insigma.framework.exception.AppException; +import com.insigma.framework.util.IDCardUtil; +import com.insigma.framework.util.TreeUtil; +import com.insigma.sys.common.CommonValidator; +import com.insigma.sys.common.CurrentUserService; +import com.insigma.sys.dto.UserDTO; +import com.insigma.sys.entity.*; +import com.insigma.sys.service.Aa26Service; +import com.insigma.sys.service.SysOrgService; +import com.insigma.sys.service.SysUserService; +import com.insigma.web.support.service.CodeTypeService; +import com.insigma.web.support.util.JavaBeanUtils; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.util.ObjectUtils; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.regex.Pattern; + +/** + * @Author: caic + * @version: 10:40 2019/1/7 + * @Description: + */ +@Data +@RestController +@RequestMapping("/sys/user") +@Slf4j +public class SysUserController { + @Autowired + private CodeTypeService codeTypeService; + + @Autowired + private SysUserService sysUserService; + + @Autowired + private CurrentUserService currentUserService; + + @Autowired + private SysOrgService sysOrgService; + + @Autowired + private Aa26Service aa26Service; + + @Autowired + private CommonValidator validator; + + Pattern patternCn = Pattern.compile("^[\u4E00-\u9FA5]+$"); + Pattern patternEn = Pattern.compile("^[A-Za-z]+$"); + Pattern patternEnCn = Pattern.compile("^[0-9a-zA-Z]+$"); + + /** + * 初始化页面数据 + * + * @return + */ + @PostMapping("/doInit") + public ResponseMessage initPageDate(@RequestBody JSONObject jsonObject) { + String userType = currentUserService.getCurrentUser().getUserType();//获取当前登录用户类型 + JSONObject codeTypes = jsonObject.getJSONObject("codeTypes"); + JSONObject codeTypesRes = codeTypeService.getCodeTypes(codeTypes); + jsonObject.put("codeTypes", codeTypesRes); + jsonObject.put("currentUserType", userType);//设置当前登录用户类型 + return ResponseMessage.ok(jsonObject); + } + + /** + * 保存用户 + * + * @param pageData + * @return + */ + @PostMapping("/doSave") + public ResponseMessage save(@RequestBody JSONObject pageData) { + try { + SysUser sysUser = JavaBeanUtils.pageElementToBean(pageData,SysUser.class); + if (!patternEnCn.matcher(sysUser.getLogonName()).matches()) { + throw new AppException("登录名必须是英文或数字"); + } + if (!patternCn.matcher(sysUser.getDisplayName()).matches() && !patternEn.matcher(sysUser.getDisplayName()).matches()) { + throw new AppException("姓名必须是中文或英文"); + } + if ("1".equals(sysUser.getCardType()) && !IDCardUtil.verify(sysUser.getCardId())) { + throw new AppException("身份证号码格式不正确"); + } + if ("1".equals(sysUser.getUserType()) && !"1".equals(currentUserService.getCurrentUser().getUserType())) { + throw new AppException("非超级管理员不能创建超级管理员"); + } + String sm3LogonName = SM3Utils.digest(sysUser.getLogonName()); + String sm3ReverseLogonName = SM3Utils.digest(new StringBuffer(sysUser.getLogonName()).reverse().toString()); + if (sm3LogonName.equals(sysUser.getPassWD()) || sm3ReverseLogonName.equals(sysUser.getPassWD())) { + throw new AppException("新密码不能与登录名(包含逆序)相同!"); + } + sysUser.setUserState("1"); + JSONArray orgIds = pageData.getJSONObject("orgId").getJSONArray("value"); + if (orgIds.size() > 0) + sysUser.setOrgId(Long.parseLong(orgIds.get(orgIds.size() - 1) + "")); + + JSONArray aa26Ids = pageData.getJSONObject("aa26").getJSONArray("value"); + if (aa26Ids.size() > 0) + sysUser.setAreaId(Long.parseLong(aa26Ids.get(aa26Ids.size() - 1) + "")); + + JSONArray roleIds = pageData.getJSONObject("roleIds").getJSONArray("value"); + List list = new ArrayList<>(); + for (Object roleId : roleIds) { + if (roleId != null) { + SysUserRole sysUserRole = new SysUserRole(); + sysUserRole.setRoleId(roleId.toString()); + list.add(sysUserRole); + } + } + sysUser.setSysUserRoleList(list); + sysUser.setCreateTime(new Date()); + // 设定用户过期时间 + sysUser.setUserExpireDate(pageData.getJSONObject("userExpireDate").getDate("value")); + // 获取密码过期策略 + String pwExpireType = (String) pageData.getJSONObject("pwExpireType").get("value"); + if (!ObjectUtils.isEmpty(pwExpireType) && pwExpireType.equals("1")) { + // 系统配置周期 + long l = new Date().getTime() + 7 * 24 * 3600 * 1000; + sysUser.setPwExpireDate(new Date(l)); + } else if (ObjectUtils.isEmpty(pwExpireType) || pwExpireType.equals("2")) { + // 永不过期 + sysUser.setPwExpireDate(null); + } else if (!ObjectUtils.isEmpty(pwExpireType) && pwExpireType.equals("3")) { + // 指定日期 + sysUser.setPwExpireDate(pageData.getJSONObject("pwExpireDate").getDate("value")); + + } + + + JSONArray areaIds = pageData.getJSONObject("aa26Tree").getJSONArray("value"); + List addAreaIds = new ArrayList<>(); + List removeAreaIds = new ArrayList<>(); + for (int i = 0; i < areaIds.size(); i++) { + JSONObject obj = areaIds.getJSONObject(i); + if ((boolean) obj.get("value")) { + addAreaIds.add(obj.get("key").toString()); + } else { + removeAreaIds.add(obj.get("key").toString()); + } + } + Map> map = new ConcurrentHashMap<>(); + map.put("addAreaIds", addAreaIds); + map.put("removeAreaIds", removeAreaIds); + + if (!validator.validateArea(sysUser.getAreaId() + "", sysUser.getUserType()) + || !validator.validateOrg(sysUser.getOrgId(), sysUser.getUserType()) + || !validator.validateRoleIds(roleIds.toJavaList(String.class))) { + throw new AppException("无权操作"); + } + + sysUserService.saveUser(sysUser, map); + + return ResponseMessage.ok("保存成功"); + } catch (Exception e) { + log.error(e.getMessage(), e); + return ResponseMessage.error("保存失败,失败原因:" + e.getMessage()); + } + + } + + @GetMapping("/queryOneUser/{userId}") + public ResponseMessage queryOneUser(@PathVariable String userId) throws AppException { + SysUser sysUser = sysUserService.queryOneUser(userId); + if (!validator.validateUser(sysUser.getUserId())) { + throw new AppException("无权查看"); + } + //sysUser.setPassWD(null); + List roleList = sysUserService.queryUserRole(userId); + List areaList = sysUserService.queryUserArea(userId); + SysOrg sysOrg = sysOrgService.findByOrgid(sysUser.getOrgId()); + Aa26 aa26 = aa26Service.findByAab301(sysUser.getAreaId() + ""); + Map map = new ConcurrentHashMap<>(); + map.put("sysUser", sysUser); + map.put("roleList", roleList); + map.put("areaList", areaList); + + if (sysOrg != null) { + map.put("orgId", sysUser.getOrgId()); + map.put("sysOrgs",sysOrg); + //sysOrgService.findByRegioncode(sysUser.getAreaId()+"") + } + if (aa26 != null) + map.put("aa26", aa26); + return ResponseMessage.ok(map); + } + + @GetMapping("/queryTable") + public ResponseMessage queryTable(@RequestParam(name = "logonName") String logonName, + @RequestParam(name = "displayName") String displayName, + @RequestParam(name = "orgId") String orgId, + @RequestParam(name = "userState") String userState, + @RequestParam(name = "userType") String userType, + @RequestParam(name = "aa26") String aa26, + @RequestParam(name = "cardId") String cardId, + @RequestParam(name = "page") Integer page, + @RequestParam(name = "size") Integer size) { + Page list = sysUserService.findAll(logonName, displayName, orgId, userState,userType,aa26,cardId, page, size,"1"); + JSONObject jsonObject=new JSONObject(); + JSONArray jsonArray=JSONArray.parseArray(JSONArray.toJSONString(list.getContent())); + for(int i=0; i < jsonArray.size(); i++){ + if(jsonArray.getJSONObject(i).getString("orgId") != null) { + SysOrg sysOrg = sysOrgService.findByOrgid(Long.valueOf(jsonArray.getJSONObject(i).getString("orgId"))); + if(sysOrg != null){ + jsonArray.getJSONObject(i).put("orgId", sysOrg.getOrgname()); + }else{ + jsonArray.getJSONObject(i).put("orgId", ""); + } + } + if(jsonArray.getJSONObject(i).getString("areaId") != null) { + Aa26 a=aa26Service.findByAab301(jsonArray.getJSONObject(i).getString("areaId")); + if(a != null) { + jsonArray.getJSONObject(i).put("areaId", a.getAaa146()); + }else{ + jsonArray.getJSONObject(i).put("areaId", ""); + } + } + } + jsonObject.put("totalElements",list.getTotalElements()); + jsonObject.put("content",jsonArray); + return ResponseMessage.ok(jsonObject); + } + + /** + * 复制用户 + * @param data + * @return + */ + @PostMapping(value = "/copyUser") + public ResponseMessage copyUser(@RequestBody JSONObject data){ + try { + if (!validator.validateUser(currentUserService.getCurrentUser().getUserId())) { + throw new AppException("无权操作"); + } + sysUserService.copyUser(data); + return ResponseMessage.ok("复制成功"); + } catch (Exception e) { + log.error(e.getMessage(), e); + return ResponseMessage.error("复制失败原因:" + e.getMessage()); + } + } + /** + * 注销用户 + * + * @param data + * @return + */ + @PostMapping(value = "/logoutUser") + public ResponseMessage logoutUser(@RequestBody(required = true) JSONObject data) { + try { + String userId = data.getString("userId"); + if (!validator.validateUser(userId)) { + throw new AppException("无权操作"); + } + sysUserService.logoutUser(userId); + sysUserService.clearSessions(userId); + return ResponseMessage.ok("注销成功"); + } catch (Exception e) { + log.error(e.getMessage(), e); + return ResponseMessage.error("注销失败,失败原因:" + e.getMessage()); + } + } + + /** + * 解锁用户 + * + * @param data + * @return + */ + @PostMapping(value = "/unlockUser") + public ResponseMessage unlockUser(@RequestBody(required = true) JSONObject data) { + try { + String userId = data.getString("userId"); + if (!validator.validateUser(userId)) { + throw new AppException("无权操作"); + } + sysUserService.unlockUser(userId); + return ResponseMessage.ok("解锁成功"); + } catch (Exception e) { + log.error(e.getMessage(), e); + return ResponseMessage.error("解锁失败,失败原因:" + e.getMessage()); + } + } + + /** + * 锁定用户 + * + * @param data + * @return + */ + @PostMapping(value = "/lockUser") + public ResponseMessage lockUser(@RequestBody(required = true) JSONObject data) { + try { + String userId = data.getString("userId"); + if (!validator.validateUser(userId)) { + throw new AppException("无权操作"); + } + sysUserService.lockUser(userId); + sysUserService.clearSessions(userId); + return ResponseMessage.ok("锁定成功"); + } catch (Exception e) { + log.error(e.getMessage(), e); + return ResponseMessage.error("锁定失败,失败原因:" + e.getMessage()); + } + } + + /** + * 重置密码 + * + * @param data + * @return + */ + @PostMapping("/resetPassWD") + public ResponseMessage resetPassWD(@RequestBody(required = true) JSONObject data) { + try { + String userId = data.getString("userId"); + if (!validator.validateUser(userId)) { + throw new AppException("无权操作"); + } + sysUserService.resetPassWD(userId); +// return ResponseMessage.ok("重置密码成功,默认密码为:" + resetPassWD); + return ResponseMessage.ok("重置密码成功"); + } catch (Exception e) { + log.error(e.getMessage(), e); + return ResponseMessage.error("重置密码失败,失败原因:" + e.getMessage()); + } + } + + @PostMapping("/editPass") + public ResponseMessage editPassWD(@RequestBody(required = true) JSONObject data){ + try { + String oldPass=data.getString("oldPass"); + String newPass=data.getString("newPass"); + sysUserService.updataPassWD(oldPass,newPass); + return ResponseMessage.ok("修改密码成功"); + } catch (Exception e) { + log.error(e.getMessage(), e); + return ResponseMessage.error("修改密码失败,失败原因:" + e.getMessage()); + } + } + + @GetMapping("/getOrgTreeNodes/{areaId}") + public ResponseMessage getOrgTreeNodes(@PathVariable String areaId) { + JSONArray orgNodes = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(sysUserService.queryOrgNodes(areaId))), "orgid", "parentid", "children"); + return ResponseMessage.ok(orgNodes); + } + + @GetMapping("/getAa26TreeNodes/{userType}") + public ResponseMessage getAa26TreeNodes(@PathVariable String userType) { + JSONArray orgNodes = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(sysUserService.queryAa26Nodes())), "aab301", "aaa148", "children"); + //orgNodes= JSONArray.parseArray(JSONArray.toJSONString(orgNodes).replace("aab301","id")); + return ResponseMessage.ok(orgNodes); + } + @GetMapping("/getOrgTreeNodes1/{userType}") + public ResponseMessage getOrgTreeNodes1(@PathVariable String userType) { + JSONArray orgNodes = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(sysUserService.findAllOrg())), "orgid", "parentid", "children"); + //orgNodes= JSONArray.parseArray(JSONArray.toJSONString(orgNodes).replace("aab301","id")); + return ResponseMessage.ok(orgNodes); + } + @GetMapping("getUserTypeCode") + public ResponseMessage getUserTypeCode() { + List> list = sysUserService.findUsetTypeCode(); + return ResponseMessage.ok(list); + } + + @GetMapping("getUserStateCode") + public ResponseMessage getUserStateCode() { + return ResponseMessage.ok(sysUserService.getUserStateCode()); + } + + @GetMapping("/getRoleList/{userType}") + public ResponseMessage getRoleList(@PathVariable("userType") String userType) { + List list = sysUserService.findByRoleType(userType); + return ResponseMessage.ok(list); + } + + @PostMapping("/doCheck/{id}") + public ResponseMessage doCheck(@PathVariable("id") String id, @RequestBody JSONObject data) { + boolean bool = true;//校验是否通过 + if ("logonName".equals(id)) { + String logonName = data.getJSONObject("logonName").getString("value"); + String userId=data.getJSONObject("userId").getString("value"); + bool = sysUserService.checkLogonName(logonName,userId); + } + if (bool) { + ResponseMessage rm = ResponseMessage.error("存在相同登录名"); + return rm; + } else { + return ResponseMessage.ok(); + } + } + + /** + * 获取所有机构 + * @return + */ + @GetMapping("/findAllOrg") + private ResponseMessage findAllOrg() { + List list = sysUserService.findAllOrg(); + return ResponseMessage.ok(list); + } + + /** + * 获取所有区域 + * @return + */ + @GetMapping("/findAllAa26") + private ResponseMessage findAllAa26() { + List list = sysOrgService.getAA26(); + return ResponseMessage.ok(list); + } + + /** + * 获取所有机构,返回格式为树结构 + * @return + */ + @GetMapping("/findAllOrgTree") + private ResponseMessage findAllOrgTree() { + List list = sysUserService.findAllOrg(); + JSONArray orgNodes = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(list)), "orgid", "parentid", "children"); + + return ResponseMessage.ok(orgNodes); + } + + /** + * 通用获取下拉框选项 + * @param codeType + * @return + */ + @GetMapping("/getAa10Code/{codeType}") + public ResponseMessage getAa10Code(@PathVariable String codeType){ + List> list = sysUserService.getAa10Code(codeType); + return ResponseMessage.ok(list); + } + + /** + * 获取当前登录用户 + * @return + */ + @GetMapping("/getCurrentUser") + public ResponseMessage getCurrentUser(){ + return ResponseMessage.ok(currentUserService.getCurrentUser()); + } + + + /** + * 获取当前登录用户 + * @return + */ + @GetMapping("/getUserSlevel") + public ResponseMessage getUserSlevel(){ + + /*return ResponseMessage.ok(sysUserService.getUserSlevel());*/ + ResponseMessage t = new ResponseMessage(); + t.setStatus("0"); + t.setData(sysUserService.getUserSlevel()); + return t; + } + + +} + diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/SysUsertmsController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/SysUsertmsController.java new file mode 100644 index 0000000..bbe5b3f --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/SysUsertmsController.java @@ -0,0 +1,350 @@ +package com.insigma.sys.controller; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.ResponseMessage; +import com.insigma.framework.exception.AppException; +import com.insigma.framework.util.TreeUtil; +import com.insigma.sys.common.CurrentUserService; +import com.insigma.sys.common.SysManageMode; +import com.insigma.sys.dto.UserDTO; +import com.insigma.sys.entity.*; +import com.insigma.sys.service.Aa26Service; +import com.insigma.sys.service.SysOrgService; +import com.insigma.sys.service.SysUserService; +import com.insigma.web.support.service.CodeTypeService; +import com.insigma.web.support.util.JavaBeanUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +@RestController +@RequestMapping("/sys/usertms") +@Slf4j +public class SysUsertmsController { + @Autowired + private CodeTypeService codeTypeService; + + @Autowired + private SysUserService sysUserService; + + @Autowired + private CurrentUserService currentUserService; + + @Autowired + private SysOrgService sysOrgService; + + @Autowired + private Aa26Service aa26Service; + + /** + * 初始化页面数据 + * + * @return + */ + @PostMapping("/doInit") + public ResponseMessage initPageDate(@RequestBody JSONObject jsonObject) { + String userType = currentUserService.getCurrentUser().getUserType();//获取当前登录用户类型 + JSONObject codeTypes = jsonObject.getJSONObject("codeTypes"); + JSONObject codeTypesRes = codeTypeService.getCodeTypes(codeTypes); + jsonObject.put("codeTypes", codeTypesRes); + jsonObject.put("currentUserType", userType);//设置当前登录用户类型 + return ResponseMessage.ok(jsonObject); + } + + /** + * 保存用户 + * + * @param pageData + * @return + */ + @PostMapping("/doSave") + public ResponseMessage save(@RequestBody JSONObject pageData) { + try { + SysUser sysUser = JavaBeanUtils.pageElementToBean(pageData,SysUser.class); + sysUser.setUserState("1"); + JSONArray orgIds = pageData.getJSONObject("orgId").getJSONArray("value"); + if (orgIds.size() > 0) + sysUser.setOrgId(Long.parseLong(orgIds.get(orgIds.size() - 1) + "")); + + JSONArray aa26Ids = pageData.getJSONObject("aa26").getJSONArray("value"); + if (aa26Ids.size() > 0) + sysUser.setAreaId(Long.parseLong(aa26Ids.get(aa26Ids.size() - 1) + "")); + + if(!SysManageMode.isTripleMode()){//不是三员制 + JSONArray roleIds = pageData.getJSONObject("roleIds").getJSONArray("value"); + List list = new ArrayList<>(); + for (Object roleId : roleIds) { + if (roleId != null) { + SysUserRole sysUserRole = new SysUserRole(); + sysUserRole.setRoleId(roleId.toString()); + list.add(sysUserRole); + } + } + sysUser.setSysUserRoleList(list); + } + JSONArray areaIds = pageData.getJSONObject("aa26Tree").getJSONArray("value"); + List addAreaIds = new ArrayList<>(); + List removeAreaIds = new ArrayList<>(); + for (int i = 0; i < areaIds.size(); i++) { + JSONObject obj = (JSONObject) areaIds.get(i); + if ((boolean) obj.get("value")) { + addAreaIds.add(obj.get("key").toString()); + } else { + removeAreaIds.add(obj.get("key").toString()); + } + } + Map> map = new ConcurrentHashMap<>(); + map.put("addAreaIds", addAreaIds); + map.put("removeAreaIds", removeAreaIds); + + sysUserService.saveUser(sysUser, map); + ResponseMessage rm = ResponseMessage.ok("保存成功"); + + return rm; + } catch (Exception e) { + log.error(e.getMessage(), e); + return ResponseMessage.error("保存失败,失败原因:" + e.getMessage()); + } + + } + + @GetMapping("/queryOneUser/{userId}") + public ResponseMessage queryOneUser(@PathVariable String userId) throws AppException { + SysUser sysUser = sysUserService.queryOneUser(userId); + //sysUser.setPassWD(null); + List roleList = sysUserService.queryUserRole(userId); + List areaList = sysUserService.queryUserArea(userId); + SysOrg sysOrg = sysOrgService.findByOrgid(sysUser.getOrgId()); + Aa26 aa26 = aa26Service.findByAab301(sysUser.getAreaId() + ""); + Map map = new ConcurrentHashMap<>(); + map.put("sysUser", sysUser); + map.put("roleList", roleList); + map.put("areaList", areaList); + + if (sysOrg != null) { + map.put("orgId", sysUser.getOrgId()); + map.put("sysOrgs",sysOrg); + //sysOrgService.findByRegioncode(sysUser.getAreaId()+"") + } + if (aa26 != null) + map.put("aa26", aa26); + return ResponseMessage.ok(map); + } + + @GetMapping("/queryTable") + public ResponseMessage queryTable(@RequestParam(name = "logonName") String logonName, + @RequestParam(name = "displayName") String displayName, + @RequestParam(name = "orgId") String orgId, + @RequestParam(name = "userState") String userState, + @RequestParam(name = "userType") String userType, + @RequestParam(name = "aa26") String aa26, + @RequestParam(name = "cardId") String cardId, + @RequestParam(name = "page") Integer page, + @RequestParam(name = "size") Integer size) { + Page list = sysUserService.findAll(logonName, displayName, orgId, userState,userType,aa26,cardId, page, size,"2"); + return ResponseMessage.ok(list); + } + + /** + * 注销用户 + * + * @param data + * @return + */ + @PostMapping(value = "/logoutUser") + public ResponseMessage logoutUser(@RequestBody(required = true) JSONObject data) { + try { + String userId = data.getString("userId"); + sysUserService.logoutUser(userId); + return ResponseMessage.ok("注销成功"); + } catch (Exception e) { + log.error(e.getMessage(), e); + return ResponseMessage.error("注销失败,失败原因:" + e.getMessage()); + } + } + + /** + * 解锁用户 + * + * @param data + * @return + */ + @PostMapping(value = "/unlockUser") + public ResponseMessage unlockUser(@RequestBody(required = true) JSONObject data) { + try { + String userId = data.getString("userId"); + sysUserService.unlockUser(userId); + return ResponseMessage.ok("解锁成功"); + } catch (Exception e) { + log.error(e.getMessage(), e); + return ResponseMessage.error("解锁失败,失败原因:" + e.getMessage()); + } + } + + /** + * 锁定用户 + * + * @param data + * @return + */ + @PostMapping(value = "/lockUser") + public ResponseMessage lockUser(@RequestBody(required = true) JSONObject data) { + try { + String userId = data.getString("userId"); + sysUserService.lockUser(userId); + return ResponseMessage.ok("锁定成功"); + } catch (Exception e) { + log.error(e.getMessage(), e); + return ResponseMessage.error("锁定失败,失败原因:" + e.getMessage()); + } + } + + /** + * 重置密码 + * + * @param data + * @return + */ + @PostMapping("/resetPassWD") + public ResponseMessage resetPassWD(@RequestBody(required = true) JSONObject data) { + try { + String userId = data.getString("userId"); + sysUserService.resetPassWD(userId); + return ResponseMessage.ok("重置密码成功"); + } catch (Exception e) { + log.error(e.getMessage(), e); + return ResponseMessage.error("重置密码失败,失败原因:" + e.getMessage()); + } + } + + @PostMapping("/editPass") + public ResponseMessage editPassWD(@RequestBody(required = true) JSONObject data){ + try { + String oldPass=data.getString("oldPass"); + String newPass=data.getString("newPass"); + sysUserService.updataPassWD(oldPass,newPass); + return ResponseMessage.ok("修改密码成功"); + } catch (Exception e) { + log.error(e.getMessage(), e); + return ResponseMessage.error("修改密码失败,失败原因:" + e.getMessage()); + } + } + + @GetMapping("/getOrgTreeNodes/{areaId}") + public ResponseMessage getOrgTreeNodes(@PathVariable String areaId) { + JSONArray orgNodes = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(sysUserService.queryOrgNodes(areaId))), "orgid", "parentid", "children"); + return ResponseMessage.ok(orgNodes); + } + + @GetMapping("/getAa26TreeNodes/{userType}") + public ResponseMessage getAa26TreeNodes(@PathVariable String userType) { + JSONArray orgNodes = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(sysUserService.queryAa26Nodes())), "aab301", "aaa148", "children"); + //orgNodes= JSONArray.parseArray(JSONArray.toJSONString(orgNodes).replace("aab301","id")); + return ResponseMessage.ok(orgNodes); + } + @GetMapping("/getOrgTreeNodes1/{userType}") + public ResponseMessage getOrgTreeNodes1(@PathVariable String userType) { + JSONArray orgNodes = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(sysUserService.findAllOrg())), "orgid", "parentid", "children"); + //orgNodes= JSONArray.parseArray(JSONArray.toJSONString(orgNodes).replace("aab301","id")); + return ResponseMessage.ok(orgNodes); + } + @GetMapping("getUserTypeCode") + public ResponseMessage getUserTypeCode() { + List> list = sysUserService.findUsetTypeCode(); + return ResponseMessage.ok(list); + } + + @GetMapping("getSlevel") + public ResponseMessage getSlevel() { + List> list = sysUserService.findSlevel(); + return ResponseMessage.ok(list); + } + + @GetMapping("getUserStateCode") + public ResponseMessage getUserStateCode() { + return ResponseMessage.ok(sysUserService.getUserStateCode()); + } + + @GetMapping("/getRoleList/{userType}") + public ResponseMessage getRoleList(@PathVariable("userType") String userType) { + List list = sysUserService.findByRoleType(userType); + return ResponseMessage.ok(list); + } + + @PostMapping("/doCheck/{id}") + public ResponseMessage doCheck(@PathVariable("id") String id, @RequestBody JSONObject data) { + boolean bool = true;//校验是否通过 + if ("logonName".equals(id)) { + String logonName = data.getJSONObject("logonName").getString("value"); + String userId=data.getJSONObject("userId").getString("value"); + bool = sysUserService.checkLogonName(logonName,userId); + } + if (bool) { + ResponseMessage rm = ResponseMessage.error("存在相同登录名"); + return rm; + } else { + return ResponseMessage.ok(); + } + } + + /** + * 获取所有机构 + * @return + */ + @GetMapping("/findAllOrg") + private ResponseMessage findAllOrg() { + List list = sysUserService.findAllOrg(); + return ResponseMessage.ok(list); + } + + /** + * 获取所有区域 + * @return + */ + @GetMapping("/findAllAa26") + private ResponseMessage findAllAa26() { + List list = sysOrgService.getAA26(); + return ResponseMessage.ok(list); + } + + /** + * 获取所有机构,返回格式为树结构 + * @return + */ + @GetMapping("/findAllOrgTree") + private ResponseMessage findAllOrgTree() { + List list = sysUserService.findAllOrg(); + JSONArray orgNodes = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(list)), "orgid", "parentid", "children"); + + return ResponseMessage.ok(orgNodes); + } + + /** + * 通用获取下拉框选项 + * @param codeType + * @return + */ + @GetMapping("/getAa10Code/{codeType}") + public ResponseMessage getAa10Code(@PathVariable String codeType){ + List> list = sysUserService.getAa10Code(codeType); + return ResponseMessage.ok(list); + } + + /** + * 获取当前登录用户 + * @return + */ + @GetMapping("/getCurrentUser") + public ResponseMessage getCurrentUser(){ + return ResponseMessage.ok(currentUserService.getCurrentUser()); + } + +} + diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/SyslogonLogController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/SyslogonLogController.java new file mode 100644 index 0000000..28a0361 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/SyslogonLogController.java @@ -0,0 +1,60 @@ +package com.insigma.sys.controller; + +import com.insigma.framework.ResponseMessage; +import com.insigma.framework.db.PageInfo; +import com.insigma.sys.dto.SysLogonLogDTO; +import com.insigma.sys.service.SyslogonLogService; +import com.insigma.web.support.annotation.OdinRequest; +import com.insigma.web.support.annotation.OdinRequestParam; +import com.insigma.web.support.controller.BaseController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * fukq 2020/6/2 + */ +@RestController +@RequestMapping("/sys/syslogonlog") +public class SyslogonLogController extends BaseController { + + + @Autowired + SyslogonLogService syslogonLogService; + + @OdinRequest(init = true) + @PostMapping("/doInit") + public ResponseMessage doInit(SysLogonLogDTO f_form, Integer page, Integer size) { + tableDataQuery(f_form, page, size); + return this.ok(); + } + + @OdinRequest + @PostMapping("/doGridQuery/{name}") + public ResponseMessage doGridQuery(@OdinRequestParam("f_form") SysLogonLogDTO queryDTO, + @OdinRequestParam("t_tableData_page") Integer page, + @OdinRequestParam("t_tableData_size") Integer size, + @PathVariable String name) { + tableDataQuery(queryDTO, page, size); + this.set("page", page); + return this.ok(); + } + + @OdinRequest + @PostMapping("/query") + public ResponseMessage query(@OdinRequestParam("f_form") SysLogonLogDTO queryDTO, + @OdinRequestParam("t_tableData") PageInfo pageInfo, + Integer size) { + tableDataQuery(queryDTO, 1, size); + this.set("page", 1); + return this.ok(); + } + + + public void tableDataQuery(SysLogonLogDTO queryDTO, Integer page, Integer size) { + this.pageQuery("t_tableData", () -> syslogonLogService.querySysLogonList(queryDTO, page, size)); + + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/SystemConfigController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/SystemConfigController.java new file mode 100644 index 0000000..5d1bc6b --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/SystemConfigController.java @@ -0,0 +1,27 @@ +package com.insigma.sys.controller; + +import com.insigma.framework.ResponseMessage; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; +import java.util.Map; + +@RestController +public class SystemConfigController { + @Autowired + private JdbcTemplate jdbcTemplate; + @GetMapping("/getSystemPeiz") + public ResponseMessage getSystemPeiz() { + String sql="select aaa001,aaa005 from aa01 where aaa001 in('logo_url','sidebar_backgroundImage','home_image','sidebar_title','sidebar_color'\n" + + ",'home_title','login_title')"; + Map map = new HashMap<>(); + jdbcTemplate.query(sql, (rs, i) -> { + map.put(rs.getString("aaa001"), rs.getString("aaa005")); + return map; + }); + return ResponseMessage.ok(map); + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/UserMenuController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/UserMenuController.java new file mode 100644 index 0000000..eaded89 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/UserMenuController.java @@ -0,0 +1,49 @@ +package com.insigma.sys.controller; + +import com.alibaba.fastjson.JSONArray; +import com.insigma.framework.ResponseMessage; +import com.insigma.framework.util.TreeUtil; +import com.insigma.sys.common.CurrentUserService; +import com.insigma.sys.dto.MenuDTO; +import com.insigma.sys.entity.SysUser; +import com.insigma.sys.service.MenuService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.ObjectUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * Created by yinjh on 2019/3/15. + */ +@RestController +@RequestMapping("/sys/usermenu") +public class UserMenuController { + + @Autowired + private MenuService menuService; + + @Autowired + private CurrentUserService currentUserService; + + @GetMapping("/getMenuList") + public ResponseMessage getMenuList() { + SysUser sysUser = currentUserService.getCurrentUser(); + List menuDTOS = menuService.getMenuList(sysUser); + JSONArray jsonArray = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(menuDTOS)), "functionid", "parentid", "children", "0"); + return ResponseMessage.ok("查询成功", jsonArray); + } + + @GetMapping("/getButtonAuthList") + public ResponseMessage getButtonList(String location) { + if (ObjectUtils.isEmpty(location)) { + return ResponseMessage.error("location不能为空!"); + } + SysUser sysUser = currentUserService.getCurrentUser(); + List buttonAuthList = menuService.getButtonAuthList(sysUser, location); + return ResponseMessage.ok(buttonAuthList); + } + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/dto/CodeDTO.java b/template/insiis-web/src/main/java/com/insigma/sys/dto/CodeDTO.java new file mode 100644 index 0000000..b13cec8 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/dto/CodeDTO.java @@ -0,0 +1,19 @@ +package com.insigma.sys.dto; + +import com.insigma.sys.entity.Aa10; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * Created by yinjh on 2019/1/9. + */ +@Data +public class CodeDTO implements Serializable { + + private Long total; + + private List data; + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/dto/FeedbackAnswerDTO.java b/template/insiis-web/src/main/java/com/insigma/sys/dto/FeedbackAnswerDTO.java new file mode 100644 index 0000000..e137366 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/dto/FeedbackAnswerDTO.java @@ -0,0 +1,31 @@ +package com.insigma.sys.dto; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author yinjh + * @version 2022/2/23 + */ +@Data +public class FeedbackAnswerDTO implements Serializable { + + private String id; + + private String content; + + private String userId; + + private String displayName; + + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + private String type; + + private String feedbackId; + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/dto/FeedbackDTO.java b/template/insiis-web/src/main/java/com/insigma/sys/dto/FeedbackDTO.java new file mode 100644 index 0000000..de35def --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/dto/FeedbackDTO.java @@ -0,0 +1,38 @@ +package com.insigma.sys.dto; + +import com.alibaba.fastjson.annotation.JSONField; +import com.insigma.sys.entity.SysFeedbackAnswer; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * @author yinjh + * @version 2022/2/23 + */ +@Data +public class FeedbackDTO implements Serializable { + + private String id; + + private String title; + + private String content; + + private String userId; + + private String displayName; + + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + private String answered; + + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private List dateRange; + + List answerList; + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/dto/ImportConfigReDTO.java b/template/insiis-web/src/main/java/com/insigma/sys/dto/ImportConfigReDTO.java new file mode 100644 index 0000000..7c7312f --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/dto/ImportConfigReDTO.java @@ -0,0 +1,21 @@ +package com.insigma.sys.dto; + +import com.insigma.web.support.dto.ImportConfigDTO; +import com.insigma.web.support.dto.ImportConfigDetailDTO; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * @author yinjh + * @version 2023/7/18 + * @since 2.7.0 + */ +@Data +public class ImportConfigReDTO implements Serializable { + + private ImportConfigDTO config; + + private List details; +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/dto/LazyTreeNode.java b/template/insiis-web/src/main/java/com/insigma/sys/dto/LazyTreeNode.java new file mode 100644 index 0000000..88f0f00 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/dto/LazyTreeNode.java @@ -0,0 +1,24 @@ +package com.insigma.sys.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author yinjh + * @version 2021/8/23 + */ +@Data +public class LazyTreeNode implements Serializable { + + private T id; + + private String label; + + private T parent; + + private Boolean isLeaf; + + private Object extra; + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/dto/MenuDTO.java b/template/insiis-web/src/main/java/com/insigma/sys/dto/MenuDTO.java new file mode 100644 index 0000000..9ef901e --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/dto/MenuDTO.java @@ -0,0 +1,19 @@ +package com.insigma.sys.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class MenuDTO implements Serializable { + private long functionid; //功能ID + private String path;//链接 + private String title;//标题 + private long parentid;//父功能ID + private String icon;//节点图标 + private int funorder;//排序号 + private String nodetype;//节点类型:1-菜单节点,2-菜单叶子 + private String description; // 功能描述 + private String appid;//所属应用系统 + private String openmode;//打开模式:1-tab页打开,2-浏览器tab页打开 +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/dto/MessageDTO.java b/template/insiis-web/src/main/java/com/insigma/sys/dto/MessageDTO.java new file mode 100644 index 0000000..903c4a8 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/dto/MessageDTO.java @@ -0,0 +1,37 @@ +package com.insigma.sys.dto; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * Created by yinjh on 2020/6/15. + */ +@Data +public class MessageDTO implements Serializable { + + private String messageId; + + private String title; + + private String content; + + private String creator; + + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + private String flag; // 0:未读,1:已读 + + private List userIds; + + private Date startDate; + + private Date endDate; + + private String type; + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/dto/MonitorCentersDTO.java b/template/insiis-web/src/main/java/com/insigma/sys/dto/MonitorCentersDTO.java new file mode 100644 index 0000000..73017ca --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/dto/MonitorCentersDTO.java @@ -0,0 +1,31 @@ +package com.insigma.sys.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author GH + * @ClassName: MonitorCentersDTO + * @Description: + * @version 2021/12/7 15:49 + */ +@Data +public class MonitorCentersDTO implements Serializable { + private String ip; + private String appName; + private String timeStart; + private String timeEnd; + private String start; + private String rows; + private String uriFieldName; + private String sessionFieldName; + private String sqlFieldName; + private String sort; + + private String appId; + private String title; + private String company; + private Date ctime; +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/dto/OrgDTO.java b/template/insiis-web/src/main/java/com/insigma/sys/dto/OrgDTO.java new file mode 100644 index 0000000..fcfafc6 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/dto/OrgDTO.java @@ -0,0 +1,22 @@ +package com.insigma.sys.dto; + +import com.insigma.sys.entity.SysOrg; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * @author jinw + * @version 2019/1/4 + *

epsoft - insiis7

+ */ +@Data +public class OrgDTO extends SysOrg { + + /** + * 机构险种编码集合 + */ + private List instypes; + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/dto/RoleDTO.java b/template/insiis-web/src/main/java/com/insigma/sys/dto/RoleDTO.java new file mode 100644 index 0000000..0b00d6d --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/dto/RoleDTO.java @@ -0,0 +1,18 @@ +package com.insigma.sys.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * Created by zxy on 2019/1/7. + */ +@Data +public class RoleDTO implements Serializable { + private String rolename; + private String roledesc; + private String roletype; + private int orgid; + private int areaid; + private String creatorid; +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/dto/ScmMyFavoritesDTO.java b/template/insiis-web/src/main/java/com/insigma/sys/dto/ScmMyFavoritesDTO.java new file mode 100644 index 0000000..b05ca64 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/dto/ScmMyFavoritesDTO.java @@ -0,0 +1,36 @@ +package com.insigma.sys.dto; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import javax.persistence.Table; +import java.util.Date; + +/** + * @Author tanyj + * @Version 2022/8/22 17:13 + * @since 2.7.0 + **/ +@Data +public class ScmMyFavoritesDTO { + + private String id; + + private Integer functionId; + + private String functionRoutePath; + + private String userid; + + private Date favorTime; + + private Integer orderNo; + + private String title; + + private Boolean tableDelFlag; + + private String icon; +} + diff --git a/template/insiis-web/src/main/java/com/insigma/sys/dto/SysAppAddressDTO.java b/template/insiis-web/src/main/java/com/insigma/sys/dto/SysAppAddressDTO.java new file mode 100644 index 0000000..7bafb52 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/dto/SysAppAddressDTO.java @@ -0,0 +1,19 @@ +package com.insigma.sys.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author GH + * @version 2022/3/28 + * @since 2.6.5 + */ + +@Data +public class SysAppAddressDTO implements Serializable { + private String addressId; + private String portalUrl; + private String appUrl; + private String appId; +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/dto/SysAppDTO.java b/template/insiis-web/src/main/java/com/insigma/sys/dto/SysAppDTO.java new file mode 100644 index 0000000..8348df8 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/dto/SysAppDTO.java @@ -0,0 +1,25 @@ +package com.insigma.sys.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * @author GH + * @version 2022/3/28 + * @since 2.6.5 + */ + +@Data +public class SysAppDTO implements Serializable { + private String appId; + private String appCode; + private String appName; + private Long orderNo; + private Date createTime; + private Date updateTime; + private String active; + private String secretKey; +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/dto/SysDownloadCenterDTO.java b/template/insiis-web/src/main/java/com/insigma/sys/dto/SysDownloadCenterDTO.java new file mode 100644 index 0000000..9c7e0f5 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/dto/SysDownloadCenterDTO.java @@ -0,0 +1,32 @@ +package com.insigma.sys.dto; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Data; +import java.io.Serializable; +import java.util.Date; + +/** + * @author GH + * @ClassName: SysDownloadCenterDTO + * @Description: + * @version 2021/8/4 10:11 + */ +@Data +public class SysDownloadCenterDTO implements Serializable { + + private String id; + + //材料名称 + private String material_name; + + //材料类型 + private String material_type; + + //材料大小 + private String material_size; + + //上传时间 + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private Date upload_time; + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/dto/SysErrorDTO.java b/template/insiis-web/src/main/java/com/insigma/sys/dto/SysErrorDTO.java new file mode 100644 index 0000000..856fb53 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/dto/SysErrorDTO.java @@ -0,0 +1,14 @@ +package com.insigma.sys.dto; + +import lombok.Data; + +import java.util.Date; +@Data +public class SysErrorDTO { + private String id; + private String serviceName; + private String functionName; + private String errorCode; + private String message; + private Date createTime; +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/dto/SysFunctionDocDTO.java b/template/insiis-web/src/main/java/com/insigma/sys/dto/SysFunctionDocDTO.java new file mode 100644 index 0000000..03c4ded --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/dto/SysFunctionDocDTO.java @@ -0,0 +1,16 @@ +package com.insigma.sys.dto; + +import lombok.Data; + +import java.util.Date; + + +@Data +public class SysFunctionDocDTO { + + private long functionid; + private String overview; + private String detailed_view; + private Date update_time; + private String update_name; +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/dto/SysGuideDTO.java b/template/insiis-web/src/main/java/com/insigma/sys/dto/SysGuideDTO.java new file mode 100644 index 0000000..24a49b3 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/dto/SysGuideDTO.java @@ -0,0 +1,30 @@ +package com.insigma.sys.dto; + + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +@Data +public class SysGuideDTO implements Serializable { + + private String id; + + private String question_name; + + private String question_type; + + private String answer_type; + + private String answer_content; + + private String link_url; + + //@JSONField(format = "yyyy-MM-dd HH:mm:ss") + private Date create_time; + + //热度 + private long hot_count; + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/dto/SysLogonLogDTO.java b/template/insiis-web/src/main/java/com/insigma/sys/dto/SysLogonLogDTO.java new file mode 100644 index 0000000..0318a46 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/dto/SysLogonLogDTO.java @@ -0,0 +1,23 @@ +package com.insigma.sys.dto; + +import lombok.Data; + +import java.util.Date; +@Data +public class SysLogonLogDTO { + + private String logonlogid; + private String userid; + private String logonip; + private Date logontime; + private Date logofftime; + private String successflag = "1"; + private String failreason; + private String logoffreason; + private String sessionid; + private String logonname; + private String displayname; + private String opDate; + private String browser; + private String os; +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/dto/SysOperateLogDTO.java b/template/insiis-web/src/main/java/com/insigma/sys/dto/SysOperateLogDTO.java new file mode 100644 index 0000000..ded7d72 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/dto/SysOperateLogDTO.java @@ -0,0 +1,23 @@ +package com.insigma.sys.dto; + +import lombok.Data; + +import java.util.Date; + +@Data +public class SysOperateLogDTO { + private String operatelogid; + private String userid; + private String logonlogid; + private String logonip; + private String operate; + private String url; + private Date begintime; + private Date endtime; + private String functionid; + private String description; + private String logonname; + private String displayname; + private String title; + private String opDate; +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/dto/SysRoleDTO.java b/template/insiis-web/src/main/java/com/insigma/sys/dto/SysRoleDTO.java new file mode 100644 index 0000000..e15c3a8 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/dto/SysRoleDTO.java @@ -0,0 +1,30 @@ +package com.insigma.sys.dto; + + +import com.insigma.sys.entity.SysRole; + +import java.util.List; + +/** + * Created by Administrator on 2019/1/9. + */ +public class SysRoleDTO { + private Long total; + private List data; + + public Long getTotal() { + return total; + } + + public void setTotal(Long total) { + this.total = total; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/dto/TreeNode.java b/template/insiis-web/src/main/java/com/insigma/sys/dto/TreeNode.java new file mode 100644 index 0000000..48e46b6 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/dto/TreeNode.java @@ -0,0 +1,21 @@ +package com.insigma.sys.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * @author jinw + * @version 2019/1/7 + *

epsoft - insiis7

+ */ +@Data +public class TreeNode implements Serializable { + + private T id; + private String label; + private List> children; + private T parent; + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/dto/UserDTO.java b/template/insiis-web/src/main/java/com/insigma/sys/dto/UserDTO.java new file mode 100644 index 0000000..e50549d --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/dto/UserDTO.java @@ -0,0 +1,39 @@ +package com.insigma.sys.dto; + + +import lombok.Data; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +/** + * @Author: caic + * @version: 16:15 2019/1/11 + * @Description: + */ +@Entity +@Table(name="sysuser") +@Data +public class UserDTO { + @Id + private String userId; + private String logonName; + private String displayName; + private Long orgId; + private String userState; + private String userType; + private String areaId; + private String cardType; + private String cardId; + private String tel; + private String visible; + +// @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER) +// @JoinColumn(name = "userType",referencedColumnName="aaa102",insertable=false,updatable=false) +// private Aa10 userTypeCode; + +// @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER) +// @JoinColumn(name = "userState",referencedColumnName="aaa102") +// private Aa10 userStateCode; +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/entity/Aa10.java b/template/insiis-web/src/main/java/com/insigma/sys/entity/Aa10.java new file mode 100644 index 0000000..a944317 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/entity/Aa10.java @@ -0,0 +1,52 @@ +package com.insigma.sys.entity; + +import lombok.Data; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Parameter; + +import javax.persistence.*; +import java.io.Serializable; + +/** + * Created by yinjh on 2019/1/9. + */ +@Data +@Entity +@Table(name = "AA10") +public class Aa10 implements Serializable { + + @Id + //@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SQ_AAZ093") +// @SequenceGenerator(name = "sq_aaz093", sequenceName = "sq_aaz093", allocationSize = 1) + /*@TableGenerator(name = "sq_aaz093", + table = "sys_sequence", + pkColumnName = "sequence_name", + valueColumnName = "sequence_next_value", + pkColumnValue = "sq_aaz093", + allocationSize = 1) + @GeneratedValue(strategy = GenerationType.TABLE, generator = "sq_aaz093")*/ + @GenericGenerator( name="sq_aaz093", strategy="com.insigma.framework.db.generator.TableOrSequenceGenerator", + parameters = { + @Parameter( name = "table_name", value = "sys_sequence"), + @Parameter( name = "value_column_name", value = "sequence_next_value"), + @Parameter( name = "segment_column_name",value = "sequence_name"), + @Parameter( name = "segment_value", value = "sq_aaz093"), + @Parameter( name = "increment_size", value = "10"), + @Parameter( name = "optimizer",value = "pooled-lo") + }) + @GeneratedValue(generator="sq_aaz093") + private Long aaz093; + + private String aaa100; + + private String aaa102; + + private String aaa103; + + private String aaa105; + + private String aae100; + + private String aaa104; + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/entity/Aa26.java b/template/insiis-web/src/main/java/com/insigma/sys/entity/Aa26.java new file mode 100644 index 0000000..ecaedf4 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/entity/Aa26.java @@ -0,0 +1,26 @@ +package com.insigma.sys.entity; + +import lombok.Data; + +import javax.persistence.Entity; +import javax.persistence.Id; +import java.io.Serializable; + +/** + * @author jinw + * @version 2019/1/8 + *

epsoft - insiis7

+ */ +@Entity +@Data +public class Aa26 implements Serializable { + + @Id + private String aab301; + private String aaa146; + private String aaa147; + private String aaa148; + private String eae037; + private String idpath; + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/entity/ScmMyFavorites.java b/template/insiis-web/src/main/java/com/insigma/sys/entity/ScmMyFavorites.java new file mode 100644 index 0000000..4eda0e6 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/entity/ScmMyFavorites.java @@ -0,0 +1,46 @@ +package com.insigma.sys.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.io.Serializable; +import java.util.Date; + +/** + * @Author tanyj + * @Version 2022/8/22 17:13 + * @since 2.7.0 + **/ +@Entity +@Data +@Table(name = "SCM_MY_FAVORITES") +public class ScmMyFavorites implements Serializable { + + @Id + @Column(name = "ID") + private String id; + + @Column(name = "FUNCTIONID") + private int functionId; + + @Column(name = "FUNCTION_ROUTE_PATH") + private String functionRoutePath; + + @Column(name = "USERID") + private String userid; + + @Column(name = "FAVOR_TIME") + private Date favorTime; + + @Column(name = "ORDER_NO") + private int orderNo; + + @Column(name = "TITLE") + private String title; +} + diff --git a/template/insiis-web/src/main/java/com/insigma/sys/entity/SysApp.java b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysApp.java new file mode 100644 index 0000000..a5ed81b --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysApp.java @@ -0,0 +1,71 @@ +package com.insigma.sys.entity; + +import lombok.Data; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; +import java.util.Date; + +/** + * 应用表 + * + * @author yinjh + * @version 2022/3/28 + * @since 2.6.5 + */ +@Data +@Table(name = "SYSAPP") +@Entity +public class SysApp { + + /** + * 应用ID + */ + @Id + @GenericGenerator(name="idGenerator",strategy = "uuid") + @GeneratedValue(generator = "idGenerator") + @Column(name = "APP_ID") + private String appId; + + /** + * 应用编码 + */ + @Column(name = "APP_CODE") + private String appCode; + + /** + * 应用名称 + */ + @Column(name = "APP_NAME") + private String appName; + + /** + * 排序号 + */ + @Column(name = "ORDER_NO") + private Long orderNo; + + /** + * 创建时间 + */ + @Column(name = "CREATE_TIME") + private Date createTime; + + /** + * 修改时间 + */ + @Column(name = "UPDATE_TIME") + private Date updateTime; + + /** + * 是否有效,1:有效,0:无效 + */ + @Column(name = "ACTIVE") + private String active; + + /** + * 应用安全key + */ + @Column(name = "SECRET_KEY") + private String secretKey; +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/entity/SysAppAddress.java b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysAppAddress.java new file mode 100644 index 0000000..ebca9ff --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysAppAddress.java @@ -0,0 +1,47 @@ +package com.insigma.sys.entity; + +import lombok.Data; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; + +/** + * 应用地址配置表 + * + * @author yinjh + * @version 2022/3/28 + * @since 2.6.5 + */ +@Data +@Table(name = "SYSAPPADDRESS") +@Entity +public class SysAppAddress { + + /** + * 应用地址ID + */ + @Id + @GenericGenerator(name="idGenerator",strategy = "uuid") + @GeneratedValue(generator = "idGenerator") + @Column(name = "ADDRESS_ID") + private String addressId; + + /** + * 门户地址 + */ + @Column(name = "PORTAL_URL") + private String portalUrl; + + /** + * 应用地址 + */ + @Column(name = "APP_URL") + private String appUrl; + + /** + * 应用ID + */ + @Column(name = "APP_ID") + private String appId; + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/entity/SysDownloadCenter.java b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysDownloadCenter.java new file mode 100644 index 0000000..1bdd94a --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysDownloadCenter.java @@ -0,0 +1,42 @@ +package com.insigma.sys.entity; + +import lombok.Data; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import java.io.Serializable; +import java.util.Date; + +/** + * @author GH + * @ClassName: SysDownloadCenter + * @Description: 下载中心实体类 + * @version 2021/8/4 9:53 + */ + +@Entity +@Table(name="SYSDOWNLOADCENTER") +@Data +public class SysDownloadCenter implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + private String id; + + //材料名称 + private String material_name; + + //材料类型 + private String material_type; + + //材料大小 + private String material_size; + + //上传时间 + private Date upload_time; + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/entity/SysDownloadLog.java b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysDownloadLog.java new file mode 100644 index 0000000..54a2450 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysDownloadLog.java @@ -0,0 +1,31 @@ +package com.insigma.sys.entity; + +import lombok.Data; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; +import java.util.Date; + +/** + * @author yinjh + * @version 2021/12/9 + */ +@Entity +@Table(name = "SYSDOWNLOADLOG") +@Data +public class SysDownloadLog { + + @Id + @GenericGenerator(name="idGenerator",strategy = "uuid") + @GeneratedValue(generator = "idGenerator") + private String id; + + @Column(name = "FILE_ID") + private String fileId; + + private String downloader; + + @Column(name = "DOWNLOAD_TIME") + private Date downloadTime; + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/entity/SysError.java b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysError.java new file mode 100644 index 0000000..c51c7d1 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysError.java @@ -0,0 +1,26 @@ +package com.insigma.sys.entity; + +import lombok.Data; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import java.io.Serializable; +import java.util.Date; + +@Data +@Table(name = "SYSERROR") +@Entity +public class SysError implements Serializable { + @Id + @GenericGenerator(name="idGenerator",strategy = "uuid") + @GeneratedValue(generator = "idGenerator") + private String id; + private String serviceName; + private String functionName; + private String errorCode; + private String message; + private Date createTime; +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/entity/SysFeedback.java b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysFeedback.java new file mode 100644 index 0000000..b110094 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysFeedback.java @@ -0,0 +1,35 @@ +package com.insigma.sys.entity; + +import lombok.Data; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; +import java.util.Date; + +/** + * @author yinjh + * @version 2022/2/23 + */ +@Data +@Entity +@Table(name = "SYSFEEDBACK") +public class SysFeedback { + + @Id + @GenericGenerator(name="idGenerator",strategy = "uuid") + @GeneratedValue(generator = "idGenerator") + private String id; + + private String title; + + private String content; + + @Column(name = "USERID") + private String userId; + + @Column(name = "CREATE_TIME") + private Date createTime; + + private String answered; + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/entity/SysFeedbackAnswer.java b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysFeedbackAnswer.java new file mode 100644 index 0000000..b882b33 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysFeedbackAnswer.java @@ -0,0 +1,37 @@ +package com.insigma.sys.entity; + +import lombok.Data; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +/** + * @author yinjh + * @version 2022/2/23 + */ +@Data +@Entity +@Table(name = "SYSFEEDBACKANSWER") +public class SysFeedbackAnswer { + + @Id + @GenericGenerator(name="idGenerator",strategy = "uuid") + @GeneratedValue(generator = "idGenerator") + private String id; + + private String content; + + @Column(name = "USERID") + private String userId; + + @Column(name = "CREATE_TIME") + private Date createTime; + + @Column(name = "FEEDBACK_ID") + private String feedbackId; + + private String type; + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/entity/SysFunctionDoc.java b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysFunctionDoc.java new file mode 100644 index 0000000..236b20e --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysFunctionDoc.java @@ -0,0 +1,23 @@ +package com.insigma.sys.entity; + +import lombok.Data; +import oracle.sql.BLOB; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Arrays; +import java.util.Date; +import java.util.Objects; +@Data +@Entity +@Table(name = "SYSFUNCTIONDOC") +public class SysFunctionDoc { + @Id + private long functionid; + private String overview; + private String detailed_view; + private Date update_time; + private String update_name; + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/entity/SysGuide.java b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysGuide.java new file mode 100644 index 0000000..23ddeb6 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysGuide.java @@ -0,0 +1,55 @@ +package com.insigma.sys.entity; + +import lombok.Data; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + + +@Entity +@Table(name="SYSGUIDE") +@Data +public class SysGuide implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @Id + @GenericGenerator(name="idGenerator",strategy = "uuid") + @GeneratedValue(generator = "idGenerator") + private String id; + + /** + * 问题名称 + */ + private String question_name; + + /** + * 问题类型 + */ + private String question_type; + + /** + * 答案类型 + */ + private String answer_type; + + /** + * 答案内容 + */ + private String answer_content; + + /** + * 答案链接 + */ + private String link_url; + + /** + * 创建时间 + */ + private Date create_time; + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/entity/SysGuideHot.java b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysGuideHot.java new file mode 100644 index 0000000..af67716 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysGuideHot.java @@ -0,0 +1,29 @@ +package com.insigma.sys.entity; + + +import lombok.Data; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; +import java.io.Serializable; + + +@Entity +@Table(name="SYSGUIDEHOT") +@Data +public class SysGuideHot implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @Id + @Column(name="ID") + private String id; + + /** + * 热度 + */ + @Column(name="HOT_COUNT") + private long hot_count; +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/entity/SysGuideType.java b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysGuideType.java new file mode 100644 index 0000000..ac50590 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysGuideType.java @@ -0,0 +1,43 @@ +package com.insigma.sys.entity; + +import lombok.Data; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import java.io.Serializable; + +/** + * @author GH + * @ClassName: SysGuideType + * @Description: + * @version 2021/8/213:05 + */ + +@Entity +@Table(name="SYSGUIDETYPE") +@Data +public class SysGuideType implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GenericGenerator(name="idGenerator",strategy = "uuid") + @GeneratedValue(generator = "idGenerator") + private String id; + + //分类编码 + private String type_code; + + //分类名称 + private String type_name; + + //分类图标 + private String type_icon; + + //排序号 + private Integer order_no; + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/entity/SysHoliday.java b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysHoliday.java new file mode 100644 index 0000000..3efcbba --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysHoliday.java @@ -0,0 +1,30 @@ +package com.insigma.sys.entity; + +import lombok.Data; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; + +/** + * @author yinjh + * @version 2021/6/16 + */ +@Data +@Entity +@Table(name = "SYSHOLIDAY") +public class SysHoliday { + + @Id + @GenericGenerator(name="idGenerator",strategy = "uuid") + @GeneratedValue(generator = "idGenerator") + private String id; + + private int year; + + private int month; + + private int day; +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/entity/SysIdMapping.java b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysIdMapping.java new file mode 100644 index 0000000..e07de18 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysIdMapping.java @@ -0,0 +1,21 @@ +package com.insigma.sys.entity; + +import lombok.Data; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(name="SYSIDMAPPING") +@Data +public class SysIdMapping { + @Id + @GenericGenerator(name="idGenerator",strategy = "uuid") + @GeneratedValue(generator = "idGenerator") + private String MID; + private String TID; + private Integer SELFID; +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/entity/SysMenu.java b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysMenu.java new file mode 100644 index 0000000..3221357 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysMenu.java @@ -0,0 +1,50 @@ +package com.insigma.sys.entity; + +import lombok.Data; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Parameter; + +import javax.persistence.*; +import java.io.Serializable; + +@Entity +@Table(name="SYSFUNCTION") +@Data +public class SysMenu implements Serializable { + @Id + /*@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sq_function") + @SequenceGenerator(name = "sq_function", sequenceName = "sq_function", allocationSize = 1)*/ + @GenericGenerator( name="sq_function", strategy="com.insigma.framework.db.generator.TableOrSequenceGenerator", + parameters = { + @Parameter( name = "table_name", value = "sys_sequence"), + @Parameter( name = "value_column_name", value = "sequence_next_value"), + @Parameter( name = "segment_column_name",value = "sequence_name"), + @Parameter( name = "segment_value", value = "sq_function"), + @Parameter( name = "increment_size", value = "10"), + @Parameter( name = "optimizer",value = "pooled-lo") + }) + @GeneratedValue(generator="sq_function") + private Long functionid; //功能ID + private String location;//链接 + private String title;//标题 + private Long parentid;//父功能ID + private int funorder;//排序号 + private String nodetype;//节点类型:1-菜单节点,2-菜单叶子 + private String islog;//是否记录日志 1-记,0-不记 + private String developer;//开发人员 + private String icon;//节点图标 + private String description;//功能的中文描述 + private String funtype;//功能分类,0通用1系统管理2业务功能(扩展:个人、单位、机构) + private String active;//是否有效 + private String funcode;//功能编号 + // private String filename;//文件名 +// private String filepath;//文件路径 + private String auflag;//审核标志,0-不自动审核,1-自动审核 + private String rbflag;//操作日志回退标志,0-不可以,1-可以 + private String idpath; + private String digest; // 摘要字段 + private String slevel;//密级字段 0-普通,1-秘密,2-机密 + @Column(name="APPID") + private String appId;//所属应用系统 + private String openmode;//打开模式:1-tab页打开,2-浏览器tab页打开 +} \ No newline at end of file diff --git a/template/insiis-web/src/main/java/com/insigma/sys/entity/SysOrg.java b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysOrg.java new file mode 100644 index 0000000..d85f28c --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysOrg.java @@ -0,0 +1,54 @@ +package com.insigma.sys.entity; + +import lombok.Data; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Parameter; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import java.io.Serializable; + +/** + * @author jinw + * @version 2019/1/7 + *

epsoft - insiis7

+ */ +@Entity +@Data +@Table(name = "sysorg") +public class SysOrg implements Serializable { + @Id + /*@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "id_sq_orgid") + @SequenceGenerator(name = "id_sq_orgid",sequenceName = "sq_orgid",allocationSize = 1)*/ + @GenericGenerator( name="sq_orgid", strategy="com.insigma.framework.db.generator.TableOrSequenceGenerator", + parameters = { + @Parameter( name = "table_name", value = "sys_sequence"), + @Parameter( name = "value_column_name", value = "sequence_next_value"), + @Parameter( name = "segment_column_name",value = "sequence_name"), + @Parameter( name = "segment_value", value = "sq_orgid"), + @Parameter( name = "increment_size", value = "10"), + @Parameter( name = "optimizer",value = "pooled-lo") + }) + @GeneratedValue(generator="sq_orgid") + private Long orgid; + private String orgname; + private String orgentercode; + private Long parentid; + private String shortname; + private String regioncode; + private String leader; + private String linkman; + private String tel; + private String orgaddr; + private String orgdesc; + private Integer orgorder; + private String orgstate; + private String superdept; + private String orgautocode; + private String zip; + private String idpath; + private String rate; + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/entity/SysRole.java b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysRole.java new file mode 100644 index 0000000..9cf9c8f --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysRole.java @@ -0,0 +1,34 @@ +package com.insigma.sys.entity; + +import lombok.Data; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; + +/** + * Created by zxy on 2019/1/4. + */ +@Entity +@Table(name="SYSROLE") +@Data +public class SysRole { + @Id + @GenericGenerator(name="idGenerator",strategy = "uuid") + @GeneratedValue(generator = "idGenerator") + private String roleid; + @Column(name="rolename") + private String rolename; + @Column(name="roledesc") + private String roledesc; + @Column(name="rolecode") + private String rolecode; + @Column(name="roletype") + private String roletype; + @Column(name="orgid" ) + private Long orgid; + @Column(name="areaid" ) + private Long areaid; + @Column(name="creatorid") + private String creatorid; + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/entity/SysRoleFunction.java b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysRoleFunction.java new file mode 100644 index 0000000..8a395c4 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysRoleFunction.java @@ -0,0 +1,23 @@ +package com.insigma.sys.entity; + +import lombok.Data; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; + +/** + * Created by Administrator on 2019/1/15. + */ +@Entity +@Table(name="SYSROLEFUNCTION") +@Data +public class SysRoleFunction { + @Id + @GenericGenerator(name="idGenerator",strategy = "uuid") + @GeneratedValue(generator = "idGenerator") + private String relationid; + @Column(name="roleid") + private String roleid; + @Column(name="functionid") + private Long functionid; +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/entity/SysUser.java b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysUser.java new file mode 100644 index 0000000..3879ac6 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysUser.java @@ -0,0 +1,73 @@ +package com.insigma.sys.entity; + +import com.insigma.framework.data.firewall.desensitization.annotation.IdCardDesensitization; +import com.insigma.sys.common.SysEntityListener; +import lombok.Data; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * @Author: caic + * @version: 14:50 2019/1/7 + * @Description: + */ +@Data +@Table(name = "SYSUSER") +@Entity +@EntityListeners(SysEntityListener.class) +public class SysUser implements Serializable { + @Id + @GenericGenerator(name="idGenerator",strategy = "uuid") + @GeneratedValue(generator = "idGenerator") + private String userId; + @Column(name="logonName") + private String logonName; + private String passWD; + private String displayName; + private Long areaId; + private Long orgId; + @Column(name="userState") + private String userState; + private String userType; + private String cardType; + @IdCardDesensitization + private String cardId; + private String tel; + private String mobile; + private String eMail; + private String userAddr; + private String remark; + private String creatorId; + private Date createTime; + private Date lockTime; + private Date unlockTime; + private String lockReason; + private Date userExpireDate; + private Long failNO; + private String pwExpireType; + private Date pwExpireDate; + private Date pwEditDate; + private String signState; + private String department; + private String slevel; + + @Transient + List sysUserRoleList; + + public SysUser() { + } + + public SysUser(String userId, String logonName, String displayName, long orgId, String userState, String userType,String slevel){ + this.userId=userId; + this.logonName=logonName; + this.displayName=displayName; + this.orgId=orgId; + this.userState=userState; + this.userType=userType; + this.slevel=slevel; + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/entity/SysUserArea.java b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysUserArea.java new file mode 100644 index 0000000..f3f4ec2 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysUserArea.java @@ -0,0 +1,23 @@ +package com.insigma.sys.entity; + +import lombok.Data; + +import javax.persistence.*; +import java.io.Serializable; + +/** + * @Author: caic + * @version: 10:39 2019/1/14 + * @Description: + */ +@Entity +@Table(name="SYSUSERAREA") +@Data +@IdClass(SysUserAreaPK.class) +public class SysUserArea implements Serializable { + @Id + @Column(name="userId") + private String userId; + @Id + private String aab301; +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/entity/SysUserAreaPK.java b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysUserAreaPK.java new file mode 100644 index 0000000..ee6ad15 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysUserAreaPK.java @@ -0,0 +1,22 @@ +package com.insigma.sys.entity; + +import lombok.Data; + +import javax.persistence.Embeddable; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.io.Serializable; + +/** + *SysUserArea联合主键 + * @Author: caic + * @version: 10:39 2019/1/14 + * @Description: + */ +@Embeddable +@Data +public class SysUserAreaPK implements Serializable { + private String userId; + private String aab301; +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/entity/SysUserRole.java b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysUserRole.java new file mode 100644 index 0000000..d20ca5f --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysUserRole.java @@ -0,0 +1,24 @@ +package com.insigma.sys.entity; + +import lombok.Data; + +import javax.persistence.*; +import java.io.Serializable; + +/** + * @Author: caic + * @version: 15:44 2019/1/12 + * @Description: + */ +@Entity +@Table(name="SYSUSERROLE") +@Data +@IdClass(SysUserRolePK.class) +public class SysUserRole implements Serializable { + @Id + @Column(name="userId") + private String userId; + @Id + private String roleId; + private String dispatchAuth; +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/entity/SysUserRolePK.java b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysUserRolePK.java new file mode 100644 index 0000000..1bf496c --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysUserRolePK.java @@ -0,0 +1,20 @@ +package com.insigma.sys.entity; + +import lombok.Data; + +import javax.persistence.Embeddable; +import javax.persistence.Id; +import java.io.Serializable; + +/** + * @Author: caic + * @version: 15:42 2019/1/13 + * @Description: SysUserRole表的联合主键 + */ +@Embeddable +@Data +public class SysUserRolePK implements Serializable { + + private String userId; + private String roleId; +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/entity/SysWarningLog.java b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysWarningLog.java new file mode 100644 index 0000000..d506c47 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/entity/SysWarningLog.java @@ -0,0 +1,32 @@ +package com.insigma.sys.entity; + +import lombok.Data; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; +import java.util.Date; + +/** + * @author yinjh + * @version 2021/10/9 + */ +@Data +@Table(name = "SYSWARNINGLOG") +@Entity +public class SysWarningLog { + + @Id + @GenericGenerator(name="idGenerator",strategy = "uuid") + @GeneratedValue(generator = "idGenerator") + private String id; + + private String userid; + + private String sessionid; + + private String content; + + @Column(name="create_time") + private Date createTime; + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/repository/Aa26Repository.java b/template/insiis-web/src/main/java/com/insigma/sys/repository/Aa26Repository.java new file mode 100644 index 0000000..106dc86 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/repository/Aa26Repository.java @@ -0,0 +1,26 @@ +package com.insigma.sys.repository; + +import com.insigma.sys.entity.Aa26; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @Author: caic + * @version: 10:28 2019/1/14 + * @Description: + */ +@Repository +public interface Aa26Repository extends JpaRepository { + List findByidpathStartingWith(String aab301); + Aa26 findByAab301(String aab301); + + @Query(value = "select a from Aa26 a where a.aab301=?1 and ?2 like concat(a.idpath, '%')") + List findByAab301AndIdPath(String aab301, String idpath); + + List findAa26sByAaa148OrderByAab301(String aaa148); + + List findAa26sByAaa148IsNullOrderByAab301(); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/repository/MenuRepository.java b/template/insiis-web/src/main/java/com/insigma/sys/repository/MenuRepository.java new file mode 100644 index 0000000..835a09a --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/repository/MenuRepository.java @@ -0,0 +1,59 @@ +package com.insigma.sys.repository; + +import com.insigma.sys.entity.SysMenu; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +public interface MenuRepository extends JpaRepository { + @Query(value = "select s from SysMenu s order by s.funorder") + List findTrees(); + @Query(value = "select s from SysMenu s where s.parentid=?1 order by s.funorder") + List findTreesByPId(long id); + @Query(value = "select s from SysMenu s where s.location=?1") + List findLocation(String location); + @Query(value = "select s from SysMenu s where s.functionid=?1") + SysMenu findById(long id); + @Query(value = "select s from SysMenu s where funtype=?1 or funtype='0' order by s.funorder") + List findTreesByFuntype(String funtype); + @Query(value = "select s from SysMenu s where s.nodetype<>'3' and s.active='1' order by s.funorder") + List getMenuList(); + @Query(value = "select s from SysMenu s where (s.funtype=?1 or s.funtype='0') and s.active='1' and (s.auflag<>'1' or s.auflag is null) order by s.funorder") + List findTreesByFuntypeAndActive(String funtype); + @Query(value = "select distinct s from SysMenu s, SysRoleFunction sr where s.functionid=sr.functionid and s.nodetype<>'3' and s.active='1' and sr.roleid in (?1) order by s.funorder") + List getMenuList(List roleIds); + @Modifying + @Query(value = "select u.* from sysfunction u start with u.functionid=?1 connect by prior functionid=parentid",nativeQuery =true) + List findNodeByFuncid(Long id); + @Query(value = " select * from sysfunction o start with o.functionid =?1 connect by prior o.parentid = o.functionid order by functionid",nativeQuery =true) + List getIdpath(Long id); + @Query(value = " select * from sysfunction o where o.nodetype<>'3' start with o.functionid =?1 connect by prior functionid=parentid order by functionid",nativeQuery =true) + List findNodesNoAnNiu(Long id); + @Query(value = "SELECT level FROM sysfunction START WITH functionid = ?1 CONNECT BY prior functionid = parentid ORDER BY level",nativeQuery =true) + List findNodeslevel(Long id); + List findByIdpathStartingWith(String id); + @Query(value = "SELECT * FROM sysfunction where location = ?1",nativeQuery =true) + SysMenu queryEntity(String url); + + @Query(value = "select distinct sf.* from sysfunction sf, sysrolefunction srf, sysuserrole sur where sf.functionid=srf.functionid and srf.roleid=sur.roleid and sur.userid=?1 order by sf.funorder", nativeQuery =true) + List findTreesByUserId(String userId); + + @Query(value = "select distinct s.funcode from SysMenu s, SysRoleFunction sr where s.functionid=sr.functionid and s.nodetype='3' and s.active='1' and sr.roleid in (?1) and s.parentid=?2 and s.funcode is not null") + List getButtonAuthList(List roleIds, Long parentId); + + @Query(value = "select distinct s.funcode from SysMenu s where s.nodetype='3' and s.active='1' and s.parentid=?1 and s.funcode is not null") + List getAllButtonAuthList(Long parentId); + + @Transactional + @Modifying + @Query(value = "update SysMenu set funorder = ?2 where functionid = ?1") + int updateNodeOrder(Long functionId,int funOrder); + + @Transactional + @Modifying + @Query(value = "update SysMenu set parentid = ?3,funorder = ?2 where functionid = ?1") + int update(Long functionId,int funOrder,Long parentId); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/repository/RoleRepository.java b/template/insiis-web/src/main/java/com/insigma/sys/repository/RoleRepository.java new file mode 100644 index 0000000..ea6b7de --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/repository/RoleRepository.java @@ -0,0 +1,76 @@ +package com.insigma.sys.repository; + +import com.insigma.sys.entity.SysRole; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * Created by zxy on 2019/1/7. + */ +@Repository +public interface RoleRepository extends JpaRepository, JpaSpecificationExecutor { + List findAllByRoletype(String roletype); + + Page findAll(Specification queryParams, Pageable pageable); + + List findByRoletype(String roleType); + + List findByRoletypeAndOrgid(String roletype, Long orgid); + + List queryRoleByRoletypeAndAreaid(String roleType, Long areaId); + + /** + * 根据用户id,查询用户所属区域的管理角色 + * + * @param areaId + * @return + */ + @Query(value = "select t from SysRole t where (t.roletype='1' or roletype='3') and t.areaid=?1") + List queryRoleByArea(Long areaId); + + @Query(value = "select t from SysRole t where (t.roletype='1' or roletype='3') and t.orgid=?1") + List queryByOrgId(Long orgId); + + @Query(value = "select t from SysRole t where (t.roletype='1' or roletype='3')") + List queryByAdmin(); + + /** + * 根据角色名称查询角色 + * @param rolename + * @return + */ + List findByRolename(String rolename); + + /** + * 根据角色名称查询角色 + * @param rolename + * @return + */ + List findByRolenameAndRoleid(String rolename, String roleid); + + /** + * 根据用户id查询用户所拥有的角色信息 + * @param userid + * @return + */ + @Query(value = "select * from sysrole r where creatorid=?1 or exists (select 1 from sysuserrole sur where sur.roleid=r.roleid and sur.userid=?1)", nativeQuery = true) + List queryRoleByUserId(String userid); + + /** + * 根据角色id查询角色是否存在 + * @param roleid + * @return + */ + @Query(value = "select t from SysRole t where t.roleid=?1") + List checkRoleIfValidByRoleid(String roleid); + + @Query(value = "select r.* from sysrole r ,sysuserrole sur where r.roleid=sur.roleid and sur.userid=?1 and sur.roletype=?2", nativeQuery = true) + List queryRoleByUserIdAndRoleType(String userId, String roleType); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/repository/SysAppAddressRepository.java b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysAppAddressRepository.java new file mode 100644 index 0000000..dce9c7e --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysAppAddressRepository.java @@ -0,0 +1,31 @@ +package com.insigma.sys.repository; + +import com.insigma.sys.entity.SysAppAddress; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.List; +/** + * @author yinjh + * @version 2022/3/28 + * @since 2.6.5 + */ +@Repository +public interface SysAppAddressRepository extends JpaRepository { + + /** + * 根据门户地址和应用Id查询 + * @param portalUrl + * @param appId + * @return + */ + SysAppAddress findSysAppAddressByPortalUrlAndAppId(String portalUrl, String appId); + + @Modifying + @Query(value = "delete SYSAPPADDRESS where APP_ID=?1",nativeQuery = true) + int deleteSysAppAddressByAppId(String appid); + @Query(value = "select * from SYSAPPADDRESS where APP_ID=?1",nativeQuery = true) + List querySysAddressDTO(String appid); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/repository/SysAppRepository.java b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysAppRepository.java new file mode 100644 index 0000000..54eaefb --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysAppRepository.java @@ -0,0 +1,20 @@ +package com.insigma.sys.repository; + +import com.insigma.sys.entity.SysApp; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +/** + * @author yinjh + * @version 2022/3/28 + * @since 2.6.5 + */ +@Repository +public interface SysAppRepository extends JpaRepository { + + @Query(value="select max(ORDER_NO) from SYSAPP",nativeQuery =true) + Long selectMaxOrder(); + @Query(value="select * from SYSAPP where APP_CODE = ?1",nativeQuery =true) + SysApp selectAppCode(String appCode); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/repository/SysCodeRepository.java b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysCodeRepository.java new file mode 100644 index 0000000..f7dbec9 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysCodeRepository.java @@ -0,0 +1,31 @@ +package com.insigma.sys.repository; + +import com.insigma.sys.entity.Aa10; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * Created by yinjh on 2019/1/9. + */ +@Repository +public interface SysCodeRepository extends JpaRepository { + + Page findAll(Specification queryParams, Pageable pageable); + + /** + * 通用查询aa10的方法 + * @author caic + * @param aaa100 + * @return + */ + @Query(value = "select t from Aa10 t where t.aaa100=?1") + List findByAaa100(String aaa100); + + Aa10 findByAaa100AndAaa102(String aaa100,String aaa102); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/repository/SysDownloadCenterRepository.java b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysDownloadCenterRepository.java new file mode 100644 index 0000000..4cf536d --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysDownloadCenterRepository.java @@ -0,0 +1,16 @@ +package com.insigma.sys.repository; + +import com.insigma.sys.entity.SysDownloadCenter; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.stereotype.Repository; + +/** + * @author GH + * @ClassName: SysDownloadCenterRepository + * @Description: + * @version 2021/8/4 10:21 + */ +@Repository +public interface SysDownloadCenterRepository extends JpaRepository, JpaSpecificationExecutor { +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/repository/SysDownloadLogRepository.java b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysDownloadLogRepository.java new file mode 100644 index 0000000..ff873db --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysDownloadLogRepository.java @@ -0,0 +1,13 @@ +package com.insigma.sys.repository; + +import com.insigma.sys.entity.SysDownloadLog; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +/** + * @author yinjh + * @version 2021/12/9 + */ +@Repository +public interface SysDownloadLogRepository extends JpaRepository { +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/repository/SysErrorRepository.java b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysErrorRepository.java new file mode 100644 index 0000000..aa94c59 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysErrorRepository.java @@ -0,0 +1,16 @@ +package com.insigma.sys.repository; + +import com.insigma.sys.entity.SysError; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface SysErrorRepository extends JpaRepository { + List findAll(Specification spec); + @Query(value = "select s from SysError s where s.errorCode=?1") + SysError findByErrCode(String code); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/repository/SysFeedbackAnswerRepository.java b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysFeedbackAnswerRepository.java new file mode 100644 index 0000000..b786f90 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysFeedbackAnswerRepository.java @@ -0,0 +1,16 @@ +package com.insigma.sys.repository; + +import com.insigma.sys.entity.SysFeedbackAnswer; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @author yinjh + * @version 2022/2/23 + */ +@Repository +public interface SysFeedbackAnswerRepository extends JpaRepository { + List findAllByFeedbackIdOrderByCreateTimeAsc(String feedbackId); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/repository/SysFeedbackRepository.java b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysFeedbackRepository.java new file mode 100644 index 0000000..bfe7459 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysFeedbackRepository.java @@ -0,0 +1,13 @@ +package com.insigma.sys.repository; + +import com.insigma.sys.entity.SysFeedback; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +/** + * @author yinjh + * @version 2022/2/23 + */ +@Repository +public interface SysFeedbackRepository extends JpaRepository { +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/repository/SysFunctionDocRepository.java b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysFunctionDocRepository.java new file mode 100644 index 0000000..8d88957 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysFunctionDocRepository.java @@ -0,0 +1,18 @@ +package com.insigma.sys.repository; + +import com.insigma.sys.entity.SysFunctionDoc; +import com.insigma.sys.entity.SysGuide; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface SysFunctionDocRepository extends JpaRepository { + @Query(value = "select * from SYSFUNCTIONDOC t where t.functionid = ?1", nativeQuery = true) + List findByFunctionid(Long functionid); + + void deleteByFunctionid(Long functionid); + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/repository/SysGuideHotRepository.java b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysGuideHotRepository.java new file mode 100644 index 0000000..b4d9dcb --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysGuideHotRepository.java @@ -0,0 +1,10 @@ +package com.insigma.sys.repository; + +import com.insigma.sys.entity.SysGuideHot; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.stereotype.Repository; + +@Repository +public interface SysGuideHotRepository extends JpaSpecificationExecutor, JpaRepository { +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/repository/SysGuideRepository.java b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysGuideRepository.java new file mode 100644 index 0000000..385bdab --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysGuideRepository.java @@ -0,0 +1,21 @@ +package com.insigma.sys.repository; + +import com.insigma.sys.entity.SysGuide; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface SysGuideRepository extends JpaRepository, JpaSpecificationExecutor { + + @Query(value = "select sg.* from SYSGUIDE sg,SYSGUIDEHOT sgh where sg.ID=sgh.ID and sg.question_type=?1 ORDER BY sgh.HOT_COUNT DESC", nativeQuery = true) + List findByQuestion_type(String question_type); + + + @Query(value = "SELECT s.QUESTION_TYPE FROM SYSGUIDE s GROUP BY s.QUESTION_TYPE",nativeQuery = true) + List findQuestion_type(); +} + diff --git a/template/insiis-web/src/main/java/com/insigma/sys/repository/SysGuideTypeRepository.java b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysGuideTypeRepository.java new file mode 100644 index 0000000..2ac0664 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysGuideTypeRepository.java @@ -0,0 +1,24 @@ +package com.insigma.sys.repository; + +import com.insigma.sys.entity.SysGuideType; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @author GH + * @ClassName: SysGuideTypeRepository + * @Description: + * @version 2021/8/213:10 + */ + +@Repository +public interface SysGuideTypeRepository extends JpaRepository, JpaSpecificationExecutor { + + @Query(value = "SELECT s.* FROM SYSGUIDETYPE s ORDER BY s.ORDER_NO",nativeQuery = true) + List findType_name(); + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/repository/SysHolidayRepository.java b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysHolidayRepository.java new file mode 100644 index 0000000..42b9985 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysHolidayRepository.java @@ -0,0 +1,20 @@ +package com.insigma.sys.repository; + +import com.insigma.sys.entity.SysHoliday; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @author yinjh + * @version 2021/6/16 + */ +@Repository +public interface SysHolidayRepository extends JpaRepository { + + List findSysHolidaysByYear(int year); + + void deleteByYear(int year); + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/repository/SysIdMappingRespository.java b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysIdMappingRespository.java new file mode 100644 index 0000000..c3552b8 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysIdMappingRespository.java @@ -0,0 +1,12 @@ +package com.insigma.sys.repository; + +import com.insigma.sys.entity.SysIdMapping; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +@Repository +public interface SysIdMappingRespository extends JpaRepository { + @Query(value = "select s from SysIdMapping s where s.TID=?1") + SysIdMapping findByTID(String Tid); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/repository/SysOrgRepository.java b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysOrgRepository.java new file mode 100644 index 0000000..b6bb1d4 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysOrgRepository.java @@ -0,0 +1,40 @@ +package com.insigma.sys.repository; + +import com.insigma.sys.entity.SysOrg; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @Author: caic + * @version: 12:05 2019/1/12 + * @Description: + */ +@Repository +public interface SysOrgRepository extends JpaRepository{ + + @Query(value = "select s from SysOrg s order by s.orgorder") + List findAllOrg(); + List findByparentid(Long parentid); + + List findByRegioncode(String regionCode); + + @Query(value = "select t.* from sysorg t where t.orgid like ?1%",nativeQuery = true) + List findByOrgidStartingWith(Long orgId); + + List findByIdpathStartingWith(String orgId); + @Query(value = "select s from SysOrg s where s.orgid=?1") + SysOrg findByOrgid(Long orgId); + @Query(value = "select s from SysOrg s where s.orgname=?1") + SysOrg findByName(String name); + @Query(value = "select s from SysOrg s where s.orgname=?1 or s.orgentercode=?2") + List findByNameOrCode(String name, String code); + @Modifying + @Query(value = "select u.* from SysOrg u start with u.orgid=?1 connect by prior orgid=parentid",nativeQuery =true) + List findNodeByOrgid(Long id); + @Query(value = "select s from SysOrg s where s.regioncode=?1 and ?2 like concat(s.idpath, '%')") + List findByRegioncodeAndIdPath(String regioncode, String idpath); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/repository/SysRoleFunctionRepository.java b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysRoleFunctionRepository.java new file mode 100644 index 0000000..e42a428 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysRoleFunctionRepository.java @@ -0,0 +1,29 @@ +package com.insigma.sys.repository; + +import com.insigma.sys.entity.SysRoleFunction; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * Created by Administrator on 2019/1/15. + */ +@Repository +public interface SysRoleFunctionRepository extends JpaRepository,JpaSpecificationExecutor { + @Modifying + @Query(value="delete from sysrolefunction where roleid=?1",nativeQuery = true) + int deleteRoleFunction(String roleid); + + @Query(value="select srf.functionid from sysrolefunction srf,sysfunction sf where srf.functionid=sf.functionid and sf.active='1' and sf.nodetype<>'1' and srf.roleid=?1",nativeQuery = true) + List queryFuncitonidByRoleid(String roleid); + + @Query(value="select functionid from sysrolefunction where roleid=?1",nativeQuery = true) + List queryFuncitonidAllByRoleid(String roleid); + + @Query(value = "select s from SysRoleFunction s where s.functionid=?1") + List queryRoleBy(Long functionid); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/repository/SysUserAreaRepository.java b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysUserAreaRepository.java new file mode 100644 index 0000000..1d71073 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysUserAreaRepository.java @@ -0,0 +1,26 @@ +package com.insigma.sys.repository; + +import com.insigma.sys.entity.SysUserArea; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @Author: caic + * @version: 10:41 2019/1/14 + * @Description: + */ +@Repository +public interface SysUserAreaRepository extends JpaRepository { + + List findByUserId(String userId); + + @Modifying + @Query(value="delete sysuserarea where userid=?1",nativeQuery = true) + int deleteSysUserArea(String userId); + @Query(value="select s from SysUserArea s where s.aab301=?1") + List findByAreaId(String orgentercode); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/repository/SysUserRepository.java b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysUserRepository.java new file mode 100644 index 0000000..44ccc90 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysUserRepository.java @@ -0,0 +1,114 @@ +package com.insigma.sys.repository; + +import com.insigma.sys.dto.UserDTO; +import com.insigma.sys.entity.Aa10; +import com.insigma.sys.entity.SysUser; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.Date; +import java.util.List; + +/** + * @Author: caic + * @version: 14:50 2019/1/7 + * @Description: + */ +@Repository +public interface SysUserRepository extends JpaRepository { + /*** + * 查询用户信息 + * @return + */ + @Query(value="select new SysUser(t.userId,t.logonName,t.displayName, t.orgId, t.userState, t.userType,t.slevel) from SysUser t") + List queryAllUser(); + + /** + * 修改用户状态 + * @param userState + * @param userId + * @return + */ + @Modifying + @Query(value="update sysuser t set t.userstate=?1 where userid=?2",nativeQuery =true) + int updateUserState(String userState, String userId); + + /** + * 删除用户角色 + * @param userId + * @return + */ + @Modifying + @Query(value="delete sysuserrole where userid=?1",nativeQuery = true) + int deleteUserRole(String userId); + + /** + *解锁用户 + * @return + */ + @Modifying + @Query(value="update sysuser t set t.userstate='1',t.failno=0,t.unlocktime=?1 where userid=?2",nativeQuery =true) + int unlockUser(Date locaktTime, String userId); + + /** + *锁定用户 + * @return + */ + @Modifying + @Query(value="update sysuser t set t.userstate='2',t.failno='0',t.locktime=?1 where userid=?2",nativeQuery =true) + int lockUser(Date unlocaktTime, String userId); + + /** + * 修改用户密码 + * @param userId + * @param passWD + * @param pwEditDate + * @return + */ + @Modifying + @Query(value="update sysuser t set t.passwd=?1,t.pweditdate=?2 where userid=?3",nativeQuery =true) + int updatePassWD(String passWD, Date pwEditDate, String userId); + + @Query(value = "select t from Aa10 t where t.aaa100=?1") + List findByAaa100(String aaa100); + + /*** + * 分页查询用户列表 + * @param spec + * @param pageable + * @return + */ + Page findAll(Specification spec, Pageable pageable); + + /** + * 根据用户名查询用户 + * @param logonName + * @return + */ + List findByLogonName(String logonName); + + /** + * 根据用户名和用户Id查询用户 + * @param logonName + * @param userId + * @return + */ + List findByLogonNameAndUserIdNot(String logonName, String userId); + + /** + * 删除所有用户除去amdin + * @param + * @return + */ + @Modifying + @Query(value = "delete from SysUser t where t.logonName <> 'admin'") + int deleteAllUserExitsAdmin(); + + @Query(value = "select su from SysUser su where su.logonName=?1 and su.userState <> '3'") + SysUser findUsefulUserByLogonName(String logonName); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/repository/SysUserRoleRepository.java b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysUserRoleRepository.java new file mode 100644 index 0000000..6954c2a --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysUserRoleRepository.java @@ -0,0 +1,32 @@ +package com.insigma.sys.repository; + +import com.insigma.sys.entity.SysUserRole; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @Author: caic + * @version: 16:56 2019/1/12 + * @Description: + */ +@Repository +public interface SysUserRoleRepository extends JpaRepository { + List findByUserId(String userId); + + @Modifying + @Query(value="delete from sysuserrole where userid=?1",nativeQuery = true) + int deleteSysUserRole(String userId); + + + @Modifying + @Query(value="delete from sysuserrole where roleid=?1",nativeQuery = true) + int deleteUserRole(String roleid); + + @Modifying + @Query(value="delete from sysuserrole where roleid=?1 and userid=?2",nativeQuery = true) + void removeGrantUserRole(String roleid, String userid); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/repository/SysWarningLogRepository.java b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysWarningLogRepository.java new file mode 100644 index 0000000..58dcf43 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/repository/SysWarningLogRepository.java @@ -0,0 +1,13 @@ +package com.insigma.sys.repository; + +import com.insigma.sys.entity.SysWarningLog; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +/** + * @author yinjh + * @version 2021/10/9 + */ +@Repository +public interface SysWarningLogRepository extends JpaRepository { +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/Aa26Service.java b/template/insiis-web/src/main/java/com/insigma/sys/service/Aa26Service.java new file mode 100644 index 0000000..6decba4 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/Aa26Service.java @@ -0,0 +1,18 @@ +package com.insigma.sys.service; + +import com.insigma.sys.entity.Aa26; + +import java.util.List; + +/** + * @Author: caic + * @version: 14:37 2019/1/22 + * @Description: + */ +public interface Aa26Service { + Aa26 findByAab301(String aab301); + + List findByAa148(String aaa148); + + List findAll(); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/HolidayService.java b/template/insiis-web/src/main/java/com/insigma/sys/service/HolidayService.java new file mode 100644 index 0000000..5ea16c0 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/HolidayService.java @@ -0,0 +1,17 @@ +package com.insigma.sys.service; + +import com.insigma.sys.entity.SysHoliday; + +import java.util.List; + +/** + * @author yinjh + * @version 2021/6/16 + */ +public interface HolidayService { + List queryHolidayList(int year); + + void updateHolidays(int year, List holidays); + + List getWeekdays(int year); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/MenuService.java b/template/insiis-web/src/main/java/com/insigma/sys/service/MenuService.java new file mode 100644 index 0000000..86577b1 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/MenuService.java @@ -0,0 +1,63 @@ +package com.insigma.sys.service; + +import com.alibaba.fastjson.JSONObject; +import com.insigma.sys.dto.MenuDTO; +import com.insigma.sys.entity.SysMenu; +import com.insigma.sys.entity.SysUser; + +import java.util.List; +import java.util.Map; + + +public interface MenuService { + + //查询tree + List queryAllMenu(); + + //根据id查找menu对象 + SysMenu findMenuById(long id); + + void save(SysMenu sysMenu); + + void update(SysMenu sysMenu); + + void delete(List list, boolean isWithRole); + + List findTreesByPId(long id); + + SysMenu queryByFuncID(long parentid); + + JSONObject getCodeTypes(JSONObject jsonObject); + + boolean findFunctionRoles(SysMenu sysMenu); + + List getVirtualMenuList(SysUser user); + + List queryMenuByFuntype(String funtype); + + List getMenuList(SysUser user); + + //将pagedata转化为SysMenubean + SysMenu getSysMenuBean(Map map); + + //判断location是否存在 + boolean isManyLocations(SysMenu sysMenu); + + //找到子节点 + List findNodes(String idpath); + + //查询子节点不包括按钮 + List findNodesNoAnNiu(Long id); + + List queryMenuByFuntypeAndActive(String funtype); + + //查找等级 + List findNodeslevel(Long id); + + List queryMenusByUserId(String userId); + + List getButtonAuthList(SysUser sysUser, String location); + + //更新排序 + String updateNodeOrder(MenuDTO nodeBy,MenuDTO nodeTo); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/MonitorCentersService.java b/template/insiis-web/src/main/java/com/insigma/sys/service/MonitorCentersService.java new file mode 100644 index 0000000..c62f259 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/MonitorCentersService.java @@ -0,0 +1,97 @@ +package com.insigma.sys.service; + +import com.alibaba.fastjson.JSONObject; +import com.insigma.sys.dto.MonitorCentersDTO; +import com.insigma.sys.entity.SysMenu; + +import java.util.List; +import java.util.Map; + +/** + * @author GH + * @ClassName: MonitorCentersService + * @Description: + * @version 2021/12/7 15:28 + */ +public interface MonitorCentersService { + + /** + * 查询应用数据源信息 + * + * @return + */ + JSONObject querServiceDataSouce(MonitorCentersDTO monitorCentersDTO); + + /** + * 查询应用SQL监控列表 + * + * @return + */ + JSONObject querServiceDataSqlList(MonitorCentersDTO monitorCentersDTO); + + /** + * 查询WBEAPP监控信息 + * + * @return + */ + JSONObject querServiceWebApp(MonitorCentersDTO monitorCentersDTO); + + /** + * 查询应用URI监控列表 + * + * @return + */ + JSONObject querServiceDataUriList(MonitorCentersDTO monitorCentersDTO); + + /** + * 查询应用Session监控列表 + * + * @return + */ + JSONObject querServiceDataSessionList(MonitorCentersDTO monitorCentersDTO); + + /** + * 查询每个应用下对应的实例IP + * + * @return + */ + JSONObject querServiceIp(MonitorCentersDTO monitorCentersDTO); + + SysMenu queryEntity(String url); + + /** + * 清理全部监控数据 + * + * @return + */ + JSONObject clearAllMonitorData(); + + /** + * 清理对应的监控数据 + * + * @return + */ + JSONObject clearOneServiceData(MonitorCentersDTO monitorCentersDTO); + + /** + * 获取报告数据 + * + * @return + */ + JSONObject getReportData(MonitorCentersDTO monitorCentersDTO); + + /** + * 获取报告详细数据 + * + * @return + */ + Map getReportDetailedData(MonitorCentersDTO monitorCentersDTO); + + /** + * 下载历史数据 + * + * @return + */ + List getDataExport(String appName); + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/OpLogService.java b/template/insiis-web/src/main/java/com/insigma/sys/service/OpLogService.java new file mode 100644 index 0000000..1d3904a --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/OpLogService.java @@ -0,0 +1,23 @@ +package com.insigma.sys.service; + +import com.insigma.framework.ResponseMessage; +//import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * Created by yinjh on 2019/1/30. + */ +//@FeignClient(value = "insiis-service") +public interface OpLogService { + @PostMapping(value = "/oplog/list") + ResponseMessage queryOpLogList(@RequestParam("params") String params); + + @GetMapping("/oplog/orisource") + ResponseMessage queryOrisource(@RequestParam("opseno") Long opseno); + + @GetMapping("/oplog/rollback") + ResponseMessage rollback(@RequestParam("opseno") Long opseno, @RequestParam("who") String who); + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/ParamConfigService.java b/template/insiis-web/src/main/java/com/insigma/sys/service/ParamConfigService.java new file mode 100644 index 0000000..505cf33 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/ParamConfigService.java @@ -0,0 +1,17 @@ +package com.insigma.sys.service; + +import com.insigma.framework.db.PageInfo; +import com.insigma.web.support.entity.Aa01; + +/** + * @author yinjh + * @version 2022/10/17 + * @since 2.7.0 + */ +public interface ParamConfigService { + PageInfo query(String aaa001, String aaa002, Integer page, Integer size); + + void save(Aa01 aa01, boolean isUpdate); + + void delete(String aaa001); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/RoleService.java b/template/insiis-web/src/main/java/com/insigma/sys/service/RoleService.java new file mode 100644 index 0000000..759d57a --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/RoleService.java @@ -0,0 +1,54 @@ +package com.insigma.sys.service; + +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.db.PageInfo; +import com.insigma.sys.dto.SysRoleDTO; +import com.insigma.sys.dto.UserDTO; +import com.insigma.sys.entity.SysRole; +import com.insigma.sys.entity.SysUser; + +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + +/** + * Created by zxy on 2019/1/7. + */ +public interface RoleService { + void save(SysRole sysRole); + + SysRoleDTO query(String rolename, String roledesc, String roletype, Integer page, Integer size, Long areaid, Long orgid, String usertype); + + void deleteSysRole(SysRole sysRole); + + JSONObject getCodeTypes(JSONObject jsonObject); + + boolean checkRoleByRolename(String rolename); + + boolean checkRoleByRolenameAndRoleid(String rolename, String roleid); + + List queryRoleByUserId(String userid); + + void deleteRoleRef(SysRole sysRole); + + List queryFuncitonidByRoleid(String roleid); + + boolean checkRoleIfValidByRoleid(String roleid); + + SysRole getRoleById(String roleid); + + boolean roleCanOperate(SysUser sysUser, SysRole sysRole); + + void saveGrant(SysUser sysUser, SysRole role, JSONObject jsonObject); + + List> findRoleTypesCode(); + + PageInfo queryToGrantUser(String roleId, String roletype, String logonname, String displayname, + Integer page, Integer size) throws SQLException; + + List queryGrantedUser(String roleId); + + void removeGrantUserRole(String roleId, String userId); + + void saveGrantUser(JSONObject jsonObject); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/ScmMyFavoritesService.java b/template/insiis-web/src/main/java/com/insigma/sys/service/ScmMyFavoritesService.java new file mode 100644 index 0000000..cfcd9f9 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/ScmMyFavoritesService.java @@ -0,0 +1,46 @@ +package com.insigma.sys.service; + +import com.insigma.framework.ResponseMessage; +import com.insigma.sys.dto.ScmMyFavoritesDTO; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Author tanyj + * @Version 2022/8/23 09:53 + * @since 2.7.0 + **/ +@Service +public interface ScmMyFavoritesService { + + /** + * 新增我的收藏 + * + * @param currentUserId currentUserId + * @param scmMyFavoritesDTO scmMyFavoritesDTO + */ + ResponseMessage addScmMyFavorites(String currentUserId, ScmMyFavoritesDTO scmMyFavoritesDTO); + + /** + * 根据用户id查询我的收藏 + * + * @param userid userid + * @return + */ + List getScmMyFavorites(String userid); + + /** + * 根据用户id删除我的收藏 + * + * @param currentUserId currentUserId + * @param scmMyFavoritesDTO scmMyFavoritesDTO + */ + void deleteScmMyFavorites(String currentUserId, ScmMyFavoritesDTO scmMyFavoritesDTO); + + + /** + * 根据用户id更新我的收藏 + */ + void orderScmMyFavorites(String userId, ScmMyFavoritesDTO scmMyFavoritesDTO); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/SysAppService.java b/template/insiis-web/src/main/java/com/insigma/sys/service/SysAppService.java new file mode 100644 index 0000000..9ff070b --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/SysAppService.java @@ -0,0 +1,39 @@ +package com.insigma.sys.service; + +import com.insigma.framework.db.PageInfo; +import com.insigma.sys.dto.SysAppAddressDTO; +import com.insigma.sys.dto.SysAppDTO; + +import java.sql.SQLException; +import java.util.List; + +/** + * @author GH + * @version 2022/3/28 + * @since 2.6.5 + */ +public interface SysAppService { + PageInfo pageQuery(SysAppDTO queryDTO, Integer page, Integer size) throws SQLException; + + String saveSysAppDTO(SysAppDTO queryDTO,String secretKey); + + void saveSysAppAddressDTO(List listsysAppAddressDTO, String appid); + + SysAppDTO querySysApp(String appid); + + List querySysAddressDTO(String appid); + + void deleteSysApp(String appid); + + void deleteSysAppAddressByAppId(String appid); + + void deleteSysAppAddress(String addressId); + + void toActiveSysApp(String appid); + + void toNotActiveSysApp(String appid); + + List querySysAppDTO(); + + boolean selectAppCode(String appCode); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/SysCodeService.java b/template/insiis-web/src/main/java/com/insigma/sys/service/SysCodeService.java new file mode 100644 index 0000000..ec311bc --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/SysCodeService.java @@ -0,0 +1,20 @@ +package com.insigma.sys.service; + +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.exception.AppException; +import com.insigma.sys.dto.CodeDTO; +import com.insigma.sys.entity.Aa10; + +/** + * Created by yinjh on 2019/1/9. + */ +public interface SysCodeService { + + CodeDTO query(String aaa100, String aaa103, Integer page, Integer size); + + JSONObject getCodeTypes(JSONObject jsonObject); + + void saveCode(Aa10 aa10); + + void deleteCode(Long aaz093) throws AppException; +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/SysDownloadCenterService.java b/template/insiis-web/src/main/java/com/insigma/sys/service/SysDownloadCenterService.java new file mode 100644 index 0000000..e11032f --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/SysDownloadCenterService.java @@ -0,0 +1,23 @@ +package com.insigma.sys.service; + +import com.insigma.framework.db.PageInfo; +import com.insigma.sys.dto.SysDownloadCenterDTO; + +import java.sql.SQLException; + +/** + * @author GH + * @ClassName: SysDownloadCenterService + * @Description: + * @version 2021/8/4 10:15 + */ +public interface SysDownloadCenterService { + + PageInfo queryDownloadCenterList(SysDownloadCenterDTO queryDTO, Integer page, Integer size)throws SQLException; + + void saveDownloadCenter(SysDownloadCenterDTO sysDownloadCenterDTO); + + void delete(String id); + + void saveDownloadLog(String id, String logonName); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/SysErrorService.java b/template/insiis-web/src/main/java/com/insigma/sys/service/SysErrorService.java new file mode 100644 index 0000000..e857013 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/SysErrorService.java @@ -0,0 +1,17 @@ +package com.insigma.sys.service; +import com.insigma.sys.entity.SysError; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public interface SysErrorService { + List queryAllErrors(); + List findAllBySome(String serviceName, String functionName, String errorCode); + void save(SysError sysError); + void deleteError(SysError sysError); + SysError getSysErrorBean(Map> map); + SysError getSysErrorBean2(Map map); + SysError getSysErrorBean1(Map> map); + boolean queryByErrCode(String code); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/SysFeedbackService.java b/template/insiis-web/src/main/java/com/insigma/sys/service/SysFeedbackService.java new file mode 100644 index 0000000..53b3d1c --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/SysFeedbackService.java @@ -0,0 +1,21 @@ +package com.insigma.sys.service; + +import com.insigma.framework.db.PageInfo; +import com.insigma.sys.dto.FeedbackAnswerDTO; +import com.insigma.sys.dto.FeedbackDTO; + +import java.sql.SQLException; + +/** + * @author yinjh + * @version 2022/2/23 + */ +public interface SysFeedbackService { + PageInfo page(FeedbackDTO queryDTO, Integer page, Integer size) throws SQLException; + + void save(FeedbackDTO feedbackDTO); + + FeedbackDTO get(String id); + + void saveAnswer(FeedbackAnswerDTO feedbackAnswerDTO); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/SysFunctionDocService.java b/template/insiis-web/src/main/java/com/insigma/sys/service/SysFunctionDocService.java new file mode 100644 index 0000000..800642d --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/SysFunctionDocService.java @@ -0,0 +1,10 @@ +package com.insigma.sys.service; + +import com.insigma.sys.dto.SysFunctionDocDTO; + +public interface SysFunctionDocService { + + void saveDoc(SysFunctionDocDTO sysFunctionDocDTO); + SysFunctionDocDTO queryByFunctionID(Long functionid); + void deleteByFunctionid(Long functionid); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/SysGuideService.java b/template/insiis-web/src/main/java/com/insigma/sys/service/SysGuideService.java new file mode 100644 index 0000000..0fa682e --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/SysGuideService.java @@ -0,0 +1,29 @@ +package com.insigma.sys.service; + +import com.insigma.framework.db.PageInfo; +import com.insigma.sys.dto.SysGuideDTO; + +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; + +public interface SysGuideService { + + PageInfo queryGuideList(SysGuideDTO queryDTO, Integer page, Integer size)throws SQLException; + + SysGuideDTO queryGuide(String id); + + void delete(String id); + + void deleteGuides( List list); + + void saveGuide(SysGuideDTO sysGuideDTO); + + void hot(String id); + + PageInfo findByQuestion_type(String question_type, String sort, String str, Integer page, Integer size); + + List> findFrontPage(); + + SysGuideDTO findDetailsPage(String id); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/SysHashService.java b/template/insiis-web/src/main/java/com/insigma/sys/service/SysHashService.java new file mode 100644 index 0000000..95b6fae --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/SysHashService.java @@ -0,0 +1,15 @@ +package com.insigma.sys.service; + +import java.util.List; + +/** + * @author yinjh + * @version 2021/8/19 + */ +public interface SysHashService { + void saveHash(Object entity); + + void saveAllHash(List entities); + + boolean checkHash(Object entity); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/SysIdMappingService.java b/template/insiis-web/src/main/java/com/insigma/sys/service/SysIdMappingService.java new file mode 100644 index 0000000..8b602a7 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/SysIdMappingService.java @@ -0,0 +1,12 @@ +package com.insigma.sys.service; + +import com.insigma.sys.entity.SysIdMapping; + +public interface SysIdMappingService { + /** + * 保存用户组织两者id + */ + void saveGroupidToOrgid(SysIdMapping sysIdMapping); + SysIdMapping queryByTid(String tid); + void deleteAll(); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/SysMessageService.java b/template/insiis-web/src/main/java/com/insigma/sys/service/SysMessageService.java new file mode 100644 index 0000000..ebd1f36 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/SysMessageService.java @@ -0,0 +1,33 @@ +package com.insigma.sys.service; + +import com.insigma.framework.db.PageInfo; +import com.insigma.sys.dto.LazyTreeNode; +import com.insigma.sys.dto.MessageDTO; +import com.insigma.sys.entity.SysUser; + +import java.sql.SQLException; +import java.util.List; + +/** + * Created by yinjh on 2020/6/15. + */ +public interface SysMessageService { + + void save(String currentUserId, MessageDTO messageDTO); + + void update(String currentUserId, MessageDTO messageDTO); + + PageInfo getSysMessageList(SysUser sysUser, MessageDTO queryDTO, Integer page, Integer size, boolean isManage) throws SQLException; + + MessageDTO getSysMessage(String messageId); + + MessageDTO getSysMessage(String userId, String messageId); + + MessageDTO getSysUserMessage(String userId, String messageId); + + void updateFlag(String userId, String messageId); + + void deleteSysMessage(String messageId); + + List> getUserOrgTree(String parentId); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/SysOperateLogService.java b/template/insiis-web/src/main/java/com/insigma/sys/service/SysOperateLogService.java new file mode 100644 index 0000000..602221f --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/SysOperateLogService.java @@ -0,0 +1,22 @@ +package com.insigma.sys.service; + +import com.insigma.framework.db.PageInfo; +import com.insigma.framework.web.securities.entity.SysOperateLog; +import com.insigma.sys.dto.SysOperateLogDTO; + +import java.sql.SQLException; + +/** + *fukq 2020/6/1 + */ +public interface SysOperateLogService { + /** + * 分页查询操作日志 + * @param queryDTO + * @param page + * @param size + * @return + * @throws SQLException + */ + PageInfo querySysOperateLogList(SysOperateLogDTO queryDTO, Integer page, Integer size) throws SQLException; +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/SysOrgService.java b/template/insiis-web/src/main/java/com/insigma/sys/service/SysOrgService.java new file mode 100644 index 0000000..11a1fe9 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/SysOrgService.java @@ -0,0 +1,52 @@ +package com.insigma.sys.service; + +import com.insigma.sys.entity.Aa26; +import com.insigma.sys.entity.SysOrg; + +import java.util.List; +import java.util.Map; + +/** + * @Author: caic + * @version: 14:10 2019/1/22 + * @Description: + */ +public interface SysOrgService { + /** + * 保存机构(同步用) + */ + void save(SysOrg sysOrg); + /** + * 删除所有机构(同步用) + */ + void deleteAllOrgs(); + + /** + * 删除机构根据id(同步用) + * @param id + */ + void deleteByOrgId(Long id); + SysOrg findByOrgid(Long orgId); + List findByRegioncode(String areaId); + //查询tree + List queryAllOrg(); + //initcodetype + List getAA26(); + //保存 + Aa26 queryAa26By301(String aab301); + + void saveOrg(SysOrg sysOrg); + + void delOrg(List list, boolean o); + //判断是否重复 + Boolean isMany(SysOrg sysOrg); + //将pagedata转化为SysOrgBean + SysOrg getSysOrgBean(Map map); +// //查找险种 +// List queryInsTypeById(long id); + //根据行政区划查找用户机构链接 + boolean findByArea(List list); + //找到子节点 + List findNodes(long node); +} + diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/SysUserAreaService.java b/template/insiis-web/src/main/java/com/insigma/sys/service/SysUserAreaService.java new file mode 100644 index 0000000..eb0c87a --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/SysUserAreaService.java @@ -0,0 +1,13 @@ +package com.insigma.sys.service; + +import com.insigma.sys.entity.SysUserArea; + +import java.util.List; + +/** + * 用户区域表 + */ +public interface SysUserAreaService { + List findUserAreaByUserid(String userid); + void deleteAllByUserid(String userid); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/SysUserService.java b/template/insiis-web/src/main/java/com/insigma/sys/service/SysUserService.java new file mode 100644 index 0000000..4c93602 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/SysUserService.java @@ -0,0 +1,206 @@ +package com.insigma.sys.service; + +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.exception.AppException; +import com.insigma.sys.dto.UserDTO; +import com.insigma.sys.entity.*; +import org.springframework.data.domain.Page; + +import java.util.List; +import java.util.Map; + +/** + * @Author: caic + * + * @version: 14:49 2019/1/7 + * @Description: + */ +public interface SysUserService { + /** + * 删除全部用户表数据(同步) + * @return + */ + void deleteAll(); + /** + * 删除用户表数据根据id(同步) + * @return + */ + void deleteByUserId(String id); + /** + * 添加用户表数据(同步) + * @return + */ + void saveAll(SysUser sysUser); + + /** + * 保存和修改用户 + * @param sysUser + * @param map + * @throws AppException + */ + void saveUser(SysUser sysUser, Map> map) throws AppException; + + /** + * 查询全部用户列表 + * @return + */ + List queryAllUser(); + + /** + * 注销用户 + * @param userId + * @throws AppException + */ + SysUser logoutUser(String userId) throws AppException; + + /** + * 解锁用户 + * @param userId + * @throws AppException + */ + SysUser unlockUser(String userId) throws AppException; + + /** + * 锁定用户 + * @param userId + * @throws AppException + */ + SysUser lockUser(String userId) throws AppException; + + /** + * 重置用户密码,重置密码为000000 + * @param userId + * @throws AppException + */ + SysUser resetPassWD(String userId) throws AppException; + + /** + * 修改密码 + * @param oldPass + * @param newPass + * @throws AppException + */ + SysUser updataPassWD(String oldPass, String newPass) throws AppException; + + /** + * 根据区域查询区域下的机构 + * @param areaId + * @return + */ + List queryOrgNodes(String areaId); + + /** + * 获取全部区域 + * @return + */ + List queryAa26Nodes(); + + /** + * 获取用户类型编码集合 + * @return + */ + List> findUsetTypeCode(); + + /** + * 分页查询用户 + * @param logonName + * @param dsiplayName + * @param orgId + * @param userType + * @param page + * @param size + * @return + */ + Page findAll(String logonName, String dsiplayName, String orgId, String userState, String userType, String aa26, String cardId, Integer page, Integer size,String type); + + /** + * 获取用户状态编码集合 + * @return + */ + List> getUserStateCode(); + + /** + * 根据角色类型获取角色 + * @param roleType + * @return + */ + List findByRoleType(String roleType); + + /** + * 校验用户登录名是否重复 + * @param logonName + * @param userId + * @return + */ + boolean checkLogonName(String logonName, String userId); + + /** + * 根据用户id查询单个用户 + * @param userId + * @return + */ + SysUser queryOneUser(String userId); + + /** + * 单个用户修改信息 + * @param sysUser + */ + void updateUser(SysUser sysUser); + /** + * 查询用户绑定的角色 + * @param userId + * @return + */ + List queryUserRole(String userId) throws AppException; + + /** + * 查询用户管理的区域 + * @param userId + * @return + */ + List queryUserArea(String userId) throws AppException; + + /** + * 查询全部机构 + * @return + */ + List findAllOrg(); + + /** + * 通用aa10编码集合 + * @return + */ + List> getAa10Code(String codeType); + /** + * 删除所有用户数据除去admin + * @return + */ + void deleteAllUserExitsAdmin(); + + /** + * 获取密级 + * @return + */ + List> findSlevel(); + + /** + * 保存和修改用户 + * @param sysUser + * @throws AppException + */ + void saveUserRole(SysUser sysUser) throws AppException; + + /** + * 获取用户的密级等级 + * @return + */ + public String getUserSlevel(); + + void batchSaveUsers(List users); + + SysUser findUserByLogonName(String logonName); + + void copyUser(JSONObject data) throws AppException; + + void clearSessions(String userId); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/SysWarningLogService.java b/template/insiis-web/src/main/java/com/insigma/sys/service/SysWarningLogService.java new file mode 100644 index 0000000..d3b4c0f --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/SysWarningLogService.java @@ -0,0 +1,11 @@ +package com.insigma.sys.service; + +/** + * @author yinjh + * @version 2021/10/9 + */ +public interface SysWarningLogService { + + void saveLog(String content); + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/SyslogonLogService.java b/template/insiis-web/src/main/java/com/insigma/sys/service/SyslogonLogService.java new file mode 100644 index 0000000..4660bd6 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/SyslogonLogService.java @@ -0,0 +1,29 @@ +package com.insigma.sys.service; + +import com.insigma.framework.db.PageInfo; +import com.insigma.framework.web.securities.entity.SysLogonLog; +import com.insigma.sys.dto.SysLogonLogDTO; + +import java.sql.SQLException; +import java.util.List; + +/** + * fukq 2020/6/2 + */ +public interface SyslogonLogService { + /** + * 分页查询登录日志 + * @param queryDTO + * @param page + * @param size + * @return + * @throws SQLException + */ + PageInfo querySysLogonList(SysLogonLogDTO queryDTO, Integer page, Integer size) throws SQLException; + /** + * 查询上次登录时间 + * @param userId 用户id + * @return 登录日志集合 + */ + List getLastLoginTime(String userId); +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/UService.java b/template/insiis-web/src/main/java/com/insigma/sys/service/UService.java new file mode 100644 index 0000000..fd65399 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/UService.java @@ -0,0 +1,887 @@ +package com.insigma.sys.service; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.parser.Feature; +import com.insigma.framework.db.util.DBUtil; +import com.insigma.framework.util.SysUtils; +import com.insigma.sys.entity.SysIdMapping; +import com.insigma.sys.entity.SysOrg; +import com.insigma.sys.entity.SysUser; +import com.insigma.sys.entity.SysUserArea; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; +import org.springframework.jdbc.core.namedparam.SqlParameterSourceUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import java.sql.SQLException; +import java.util.*; +import java.util.stream.Collectors; + +@Service +@Slf4j +public class UService { + + @Autowired + private SysUserService sysUserService; + @Autowired + private SysUserAreaService sysUserAreaService; + @Autowired + private JdbcTemplate jdbcTemplate; + @Autowired + private SysIdMappingService sysIdMappingService; + @Autowired + private SysOrgService sysOrgService; + @Autowired + private NamedParameterJdbcTemplate namedParameterJdbcTemplate; + @PersistenceContext + private EntityManager em; + @Transactional(rollbackFor = Exception.class) + public void syncuser(String data){ + JSONArray jsonArray = (JSONArray) JSONArray.parse(data, Feature.IgnoreNotMatch); + List> paramList = new ArrayList<>();//存放新增 + List> paramList1=new ArrayList<>();//存放修改数据 + JSONObject jsonObject=null; + + if(sysUserService== null){ + sysUserService = SysUtils.getBean(SysUserService.class); + } + String insertSql="insert into sysuser (USERID, LOGONNAME, PASSWD, DISPLAYNAME, USERSTATE, USERTYPE, CARDID, TEL, MOBILE, EMAIL, USERADDR,CREATORID, CREATETIME, DEPARTMENT, CARDTYPE)" + + " values (:USERID,:LOGONNAME,:PASSWD,:DISPLAYNAME,:USERSTATE,:USERTYPE,:CARDID,:TEL,:MOBILE,:EMAIL,:USERADDR,:CREATORID,:CREATETIME,:DEPARTMENT,:CARDTYPE)"; + String updateSql="update sysuser set LOGONNAME=:LOGONNAME,PASSWD=:PASSWD,DISPLAYNAME=:DISPLAYNAME,USERSTATE=:USERSTATE,USERTYPE=:USERTYPE,CARDID=:CARDID,TEL=:TEL,MOBILE=:MOBILE,EMAIL=:EMAIL,USERADDR=:USERADDR,CREATORID=:CREATORID,CREATETIME=:CREATETIME,DEPARTMENT=:DEPARTMENT,CARDTYPE=:CARDTYPE where USERID=:USERID"; + for(int i=0;i param=new HashMap<>();//存放新增 + Map param1=new HashMap<>();//存放修改 + SysUser sysUser=new SysUser(); + jsonObject=JSONObject.parseObject(jsonArray.get(i).toString()); + if("admin".equals(jsonObject.getString("LOGINNAME"))) { + continue; + } + sysUser.setUserId(jsonObject.getString("USERID")); + SysIdMapping useridMapping = sysIdMappingService.queryByTid(sysUser.getUserId()); + if(null==jsonObject.getString("LOGINNAME")|| "".equals(jsonObject.getString("LOGINNAME")) || "null".equals(jsonObject.getString("LOGINNAME"))){ + sysUser.setLogonName(""); + }else { + sysUser.setLogonName(jsonObject.getString("LOGINNAME")); + } + if(null==jsonObject.getString("PASSWD")|| "".equals(jsonObject.getString("PASSWD")) || "null".equals(jsonObject.getString("PASSWD"))){ + sysUser.setPassWD(""); + }else { + sysUser.setPassWD(jsonObject.getString("PASSWD")); + } + if(null==jsonObject.getString("USERNAME")|| "".equals(jsonObject.getString("USERNAME")) || "null".equals(jsonObject.getString("USERNAME"))){ + sysUser.setDisplayName(""); + }else { + sysUser.setDisplayName(jsonObject.getString("USERNAME")); + } + if(null==jsonObject.getString("USEFUL")|| "".equals(jsonObject.getString("USEFUL")) || "null".equals(jsonObject.getString("USEFUL"))){ + sysUser.setUserState(""); + }else { + sysUser.setUserState(jsonObject.getString("USEFUL")); + } + if(null==jsonObject.getString("ISLEADER")|| "".equals(jsonObject.getString("ISLEADER")) || "null".equals(jsonObject.getString("ISLEADER"))){ + sysUser.setUserType(""); + }else { + String isLeader = jsonObject.getString("ISLEADER"); + if("1".equals(isLeader)) { + isLeader = "3"; + } else { + isLeader = "4"; + } + sysUser.setUserType(isLeader); + } + if(null==jsonObject.getString("IDCARD")|| "".equals(jsonObject.getString("IDCARD")) || "null".equals(jsonObject.getString("IDCARD"))){ + sysUser.setCardId(""); + }else { + sysUser.setCardId(jsonObject.getString("IDCARD")); + } + if(null==jsonObject.getString("OFFICEPHONE")|| "".equals(jsonObject.getString("OFFICEPHONE")) || "null".equals(jsonObject.getString("OFFICEPHONE"))){ + sysUser.setTel(""); + }else { + sysUser.setTel(jsonObject.getString("OFFICEPHONE")); + } + if(null==jsonObject.getString("PHONE")|| "".equals(jsonObject.getString("PHONE")) || "null".equals(jsonObject.getString("PHONE"))){ + sysUser.setMobile(""); + }else { + sysUser.setTel(jsonObject.getString("PHONE")); + sysUser.setMobile(jsonObject.getString("PHONE")); + } + if(null==jsonObject.getString("EMAIL")|| "".equals(jsonObject.getString("EMAIL")) || "null".equals(jsonObject.getString("EMAIL"))){ + sysUser.setEMail(""); + }else { + sysUser.setEMail(jsonObject.getString("EMAIL")); + } + if(null==jsonObject.getString("MACADDR")|| "".equals(jsonObject.getString("MACADDR")) || "null".equals(jsonObject.getString("MACADDR"))){ + sysUser.setUserAddr(""); + }else { + sysUser.setUserAddr(jsonObject.getString("MACADDR")); + } + if(null==jsonObject.getString("OWNER")|| "".equals(jsonObject.getString("OWNER")) || "null".equals(jsonObject.getString("OWNER"))){ + sysUser.setCreatorId(""); + }else { + sysUser.setCreatorId(jsonObject.getString("OWNER")); + } + if(null==jsonObject.getString("CREATEDATE")|| "".equals(jsonObject.getString("CREATEDATE")) || "null".equals(jsonObject.getString("CREATEDATE"))){ + sysUser.setCreateTime(null); + }else { + sysUser.setCreateTime(new java.sql.Date(Long.valueOf(jsonObject.getString("CREATEDATE")))); + } + if(null==jsonObject.getString("DEPT")|| "".equals(jsonObject.getString("DEPT")) || "null".equals(jsonObject.getString("DEPT"))){ + sysUser.setDepartment(""); + }else { + sysUser.setDepartment(jsonObject.getString("DEPT")); + } + SysUser user=sysUserService.queryOneUser(sysUser.getUserId()); + //jdbcTemplate.execute(); + String sql=""; + if (user!=null){ + //修改 + param1.put("USERID",sysUser.getUserId()); + param1.put("LOGONNAME",sysUser.getLogonName()); + param1.put("PASSWD",sysUser.getPassWD()); + param1.put("DISPLAYNAME",sysUser.getDisplayName()); + param1.put("USERSTATE",sysUser.getUserState()); + param1.put("USERTYPE",sysUser.getUserType()); + param1.put("CARDID",sysUser.getCardId()); + param1.put("TEL",sysUser.getTel()); + param1.put("MOBILE",sysUser.getMobile()); + param1.put("EMAIL",sysUser.getEMail()); + param1.put("USERADDR",sysUser.getUserAddr()); + param1.put("CREATORID",sysUser.getCreatorId()); + param1.put("CREATETIME",sysUser.getCreateTime()); + param1.put("DEPARTMENT",sysUser.getDepartment()); + param1.put("CARDTYPE","1"); + paramList1.add(param1); + if(i%1000==0){ + namedParameterJdbcTemplate.batchUpdate(updateSql,SqlParameterSourceUtils.createBatch(paramList1)); + paramList1=new ArrayList<>(); + } + }else { + //新增 + param.put("USERID", sysUser.getUserId()); + param.put("LOGONNAME", sysUser.getLogonName()); + param.put("PASSWD", sysUser.getPassWD()); + param.put("DISPLAYNAME", sysUser.getDisplayName()); + param.put("USERSTATE", sysUser.getUserState()); + param.put("USERTYPE", sysUser.getUserType()); + param.put("CARDID", sysUser.getCardId()); + param.put("TEL", sysUser.getTel()); + param.put("MOBILE", sysUser.getMobile()); + param.put("EMAIL", sysUser.getEMail()); + param.put("USERADDR", sysUser.getUserAddr()); + param.put("CREATORID", sysUser.getCreatorId()); + param.put("CREATETIME", sysUser.getCreateTime()); + param.put("DEPARTMENT", sysUser.getDepartment()); + param.put("CARDTYPE", "1"); + paramList.add(param); + if (i % 1000 == 0) { + namedParameterJdbcTemplate.batchUpdate(insertSql, SqlParameterSourceUtils.createBatch(paramList)); + paramList = new ArrayList<>(); + } + } + } + namedParameterJdbcTemplate.batchUpdate(updateSql,SqlParameterSourceUtils.createBatch(paramList1)); + namedParameterJdbcTemplate.batchUpdate(insertSql, SqlParameterSourceUtils.createBatch(paramList)); + } + @Transactional(rollbackFor = Exception.class) + public void syncuserarea(String data){ + JSONArray jsonArray = (JSONArray) JSONArray.parse(data,Feature.IgnoreNotMatch); + JSONObject jsonObject=null; + List> paramList = new ArrayList<>();//存放新增 + String insertSql="insert into SYSUSERAREA (USERID, AAB301) values (:USERID,:AAB301)"; + //List list=new ArrayList<>(); + //HashMap tidMap = new HashMap<>(); + for(int i=0;i param = new HashMap<>();//存放新增 + SysUserArea sysUserArea = new SysUserArea(); + jsonObject = JSONObject.parseObject(jsonArray.get(i).toString()); + //sysOrg.setOrgid(Long.valueOf(jsonObject.getString("GROUPID"))); + if (null == jsonObject.getString("USERID") || "".equals(jsonObject.getString("USERID")) || "null".equals(jsonObject.getString("USERID"))) { + sysUserArea.setUserId(""); + } else { + sysUserArea.setUserId(jsonObject.getString("USERID")); + } + if (null == jsonObject.getString("DATAGROUPID") || "".equals(jsonObject.getString("DATAGROUPID")) || "null".equals(jsonObject.getString("DATAGROUPID"))) { + sysUserArea.setAab301(""); + } else { + sysUserArea.setAab301(jsonObject.getString("DATAGROUPID")); + } + List sysUserAreas = sysUserAreaService.findUserAreaByUserid(jsonObject.getString("USERID")); + if (sysUserAreas.size() > 0) { + //在表中能查到数据先删除再添加 + sysUserAreaService.deleteAllByUserid(jsonObject.getString("USERID")); + } + //如果两id关联表里面通过同步的groupid查SELFID + SysIdMapping sysIdMapping = sysIdMappingService.queryByTid(jsonObject.getString("DATAGROUPID")); + if (sysIdMapping != null) { + sysUserArea.setAab301(sysIdMapping.getSELFID().toString()); + param.put("USERID", sysUserArea.getUserId()); + param.put("AAB301", sysUserArea.getAab301()); + paramList.add(param); +// if (i%1000==0) { +// namedParameterJdbcTemplate.batchUpdate(insertSql, SqlParameterSourceUtils.createBatch(paramList)); +// paramList = new ArrayList<>(); +// } +// log.info("orgid={},userid={}", sysIdMapping.getSELFID().longValue(), sysUserArea.getUserId()); + } +// if (i%1000==0) { +// namedParameterJdbcTemplate.batchUpdate(insertSql, SqlParameterSourceUtils.createBatch(paramList)); +// paramList = new ArrayList<>(); +// } + } + namedParameterJdbcTemplate.batchUpdate(insertSql, SqlParameterSourceUtils.createBatch(paramList)); + } + @Transactional(rollbackFor = Exception.class) + public void syncgroup(String data){ + JSONArray jsonArray = (JSONArray) JSONArray.parse(data,Feature.IgnoreNotMatch); + JSONObject jsonObject=null; + List> paramList = new ArrayList<>();//存放新增 + String insertSql="insert into sysorg (ORGID, ORGNAME, ORGENTERCODE, REGIONCODE, PARENTID, SHORTNAME, LINKMAN, TEL, ORGADDR, ORGDESC,IDPATH)\n" + + "values (:ORGID,:ORGNAME,:ORGENTERCODE, :REGIONCODE, :PARENTID,:SHORTNAME,:LINKMAN,:TEL,:ORGADDR,:ORGDESC,:IDPATH)"; + //List list=new ArrayList<>(); + //HashMap tidMap = new HashMap<>(); + for(int i=0;i param=new HashMap<>();//存放新增 + SysOrg sysOrg=new SysOrg(); + jsonObject=JSONObject.parseObject(jsonArray.get(i).toString()); + //sysOrg.setOrgid(Long.valueOf(jsonObject.getString("GROUPID"))); + if(null==jsonObject.getString("NAME")|| "".equals(jsonObject.getString("NAME")) || "null".equals(jsonObject.getString("NAME"))){ + sysOrg.setOrgname(""); + }else { + sysOrg.setOrgname(jsonObject.getString("NAME")); + } + String orgentercode=""; + String str=jsonObject.getString("GROUPID"); + for(int j=0;j= 48 && str.charAt(j) <= 57) { + orgentercode += str.charAt(j); + if (orgentercode.length()==6){ + break; + } + } + } + if (orgentercode.length()<6) { + for (int k = 0; orgentercode.length() < 6; k++) { + orgentercode += 0; + } + } + String parentid = jsonObject.getString("PARENTID"); + if(null==jsonObject.getString("SHORTNAME")|| "".equals(jsonObject.getString("SHORTNAME")) || "null".equals(jsonObject.getString("SHORTNAME"))){ + sysOrg.setShortname(""); + }else { + sysOrg.setShortname(jsonObject.getString("SHORTNAME")); + } + if(null==jsonObject.getString("LINKMAN")|| "".equals(jsonObject.getString("LINKMAN")) || "null".equals(jsonObject.getString("LINKMAN"))){ + sysOrg.setLinkman(""); + }else { + sysOrg.setLinkman(jsonObject.getString("LINKMAN")); + } + if(null==jsonObject.getString("TEL")|| "".equals(jsonObject.getString("TEL")) || "null".equals(jsonObject.getString("TEL"))){ + sysOrg.setTel(""); + }else { + sysOrg.setTel(jsonObject.getString("TEL")); + } + if(null==jsonObject.getString("ADDRESS")|| "".equals(jsonObject.getString("ADDRESS")) || "null".equals(jsonObject.getString("ADDRESS"))){ + sysOrg.setOrgaddr(""); + }else { + sysOrg.setOrgaddr(jsonObject.getString("ADDRESS")); + } + if(null==jsonObject.getString("DESCRIPTION")|| "".equals(jsonObject.getString("DESCRIPTION")) || "null".equals(jsonObject.getString("DESCRIPTION"))){ + sysOrg.setOrgdesc(""); + }else { + sysOrg.setOrgdesc(jsonObject.getString("DESCRIPTION")); + } + if(null==jsonObject.getString("STATUS")|| "".equals(jsonObject.getString("STATUS")) || "null".equals(jsonObject.getString("STATUS"))){ + sysOrg.setOrgstate("1"); + }else { + sysOrg.setOrgstate(jsonObject.getString("STATUS")); + } + if(null==jsonObject.getString("OTHERINFO")|| "".equals(jsonObject.getString("OTHERINFO")) || "null".equals(jsonObject.getString("OTHERINFO"))){ + sysOrg.setIdpath(""); + }else { + sysOrg.setIdpath(jsonObject.getString("OTHERINFO")); + } + if(null==jsonObject.getString("ORG")|| "".equals(jsonObject.getString("ORG")) || "null".equals(jsonObject.getString("ORG"))){ + sysOrg.setOrgentercode(""); + }else { + sysOrg.setOrgentercode(jsonObject.getString("ORG")); + } + if(null==jsonObject.getString("DISTRICTCODE")|| "".equals(jsonObject.getString("DISTRICTCODE")) || "null".equals(jsonObject.getString("DISTRICTCODE"))){ + sysOrg.setRegioncode(""); + }else { + sysOrg.setRegioncode(jsonObject.getString("DISTRICTCODE")); + } + if(null==jsonObject.getString("PRINCIPAL")|| "".equals(jsonObject.getString("PRINCIPAL")) || "null".equals(jsonObject.getString("PRINCIPAL"))){ + sysOrg.setLeader(""); + }else { + sysOrg.setLeader(jsonObject.getString("PRINCIPAL")); + } + if(null==jsonObject.getString("CHARGEDEPT")|| "".equals(jsonObject.getString("CHARGEDEPT")) || "null".equals(jsonObject.getString("CHARGEDEPT"))){ + sysOrg.setSuperdept(""); + }else { + sysOrg.setSuperdept(jsonObject.getString("CHARGEDEPT")); + } + if(null==jsonObject.getString("RATE")|| "".equals(jsonObject.getString("RATE")) || "null".equals(jsonObject.getString("RATE"))){ + sysOrg.setRate(""); + }else { + sysOrg.setRate(jsonObject.getString("RATE")); + } + //如果两id关联表里面通过同步的groupid能查到=修改 + SysIdMapping sysIdMapping=sysIdMappingService.queryByTid(jsonObject.getString("GROUPID")); + Long realParentid = null; + if(null==parentid|| "".equals(parentid) || "null".equals(parentid)){ + // + }else{ + SysIdMapping orgparentidmapping=sysIdMappingService.queryByTid(parentid); +// SysIdMapping orgparentidmapping = tidMap.get(parentid); +// if(orgparentidmapping == null){ +// orgparentidmapping = sysIdMappingService.queryByTid(parentid); +// if(orgparentidmapping == null) { +// orgparentidmapping = new SysIdMapping(); +// orgparentidmapping.setTID(parentid); +// sysIdMappingService.saveGroupidToOrgid(orgparentidmapping); +// tidMap.put(parentid,orgparentidmapping); +// } +// } + if (orgparentidmapping!=null){ + realParentid = orgparentidmapping.getSELFID().longValue(); + }else { + realParentid= Long.valueOf(0); + } + } + sysOrg.setParentid(realParentid); +// if (sysIdMapping!=null){ + //修改 + sysOrg.setOrgid(sysIdMapping.getSELFID().longValue()); + //sysOrg.setOrgentercode(sysOrg.getOrgentercode()==null?"888888":sysOrg.getOrgentercode()); + transformOrgIdPath(sysOrg); + if(sysOrgService.findByOrgid(sysOrg.getOrgid()) != null) { + em.persist(em.merge(sysOrg)); + if (i % 1000 == 0) { + em.flush(); + em.clear(); + } + }else{ + //新增 + param.put("ORGID", sysOrg.getOrgid()); + param.put("ORGNAME",sysOrg.getOrgname()); + param.put("ORGENTERCODE",sysOrg.getOrgentercode()); + param.put("REGIONCODE", sysOrg.getRegioncode()); + param.put("PARENTID", sysOrg.getParentid()); + param.put("SHORTNAME",sysOrg.getShortname()); + param.put("LINKMAN",sysOrg.getLinkman()); + param.put("TEL", sysOrg.getTel()); + param.put("ORGADDR",sysOrg.getOrgaddr()); + param.put("ORGDESC",sysOrg.getOrgdesc()); + param.put("IDPATH", sysOrg.getIdpath()); + paramList.add(param); + if (i % 1000 == 0) { + namedParameterJdbcTemplate.batchUpdate(insertSql, SqlParameterSourceUtils.createBatch(paramList)); + paramList = new ArrayList<>(); + } + } + log.info("orgid={},save={}",sysIdMapping.getSELFID().longValue(),sysOrg.getOrgid()); +// } +// else { +// //新增 +// sysIdMapping = tidMap.get(jsonObject.getString("GROUPID")); +// if(sysIdMapping == null) { +// SysIdMapping sysIdMapping1 = new SysIdMapping(); +// sysIdMapping1.setTID(jsonObject.getString("GROUPID")); +// sysIdMappingService.saveGroupidToOrgid(sysIdMapping1); +// tidMap.put(sysIdMapping1.getTID(),sysIdMapping1); +// sysIdMapping = sysIdMapping1; +// } +// sysOrg.setOrgid(sysIdMapping.getSELFID().longValue()); +// transformOrgIdPath(sysOrg); +// saveSysOrg(jdbcTemplate,sysOrg); +// } + } + em.flush(); + em.clear(); + namedParameterJdbcTemplate.batchUpdate(insertSql, SqlParameterSourceUtils.createBatch(paramList)); + } + +// private void saveSysOrg(NamedParameterJdbcTemplate namedParameterJdbcTemplate,SysOrg sysOrg){ +// +// +// +// +//// String sql="insert into sysorg (ORGID, ORGNAME, ORGENTERCODE, PARENTID, SHORTNAME, LINKMAN, TEL, ORGADDR, ORGDESC,IDPATH)\n" + +//// "values (?,?,?,?,?,?,?,?,?)"; //错的,ID path值不对 +//// jdbcTemplate.execute(sql); +//// jdbcTemplate.update(sql,sysOrg.getOrgid(),sysOrg.getOrgname(),sysOrg.getOrgentercode()==null?"888888":sysOrg.getOrgentercode(),sysOrg.getParentid(),sysOrg.getShortname(),sysOrg.getLinkman(),sysOrg.getTel(),sysOrg.getOrgaddr(),sysOrg.getOrgdesc(),sysOrg.getIdpath()); +// } + + private void transformOrgIdPath(SysOrg org){ + if(org != null){ + if(!ObjectUtils.isEmpty(org.getIdpath())) { + String[] ids = StringUtils.split(org.getIdpath(), "/"); + String newIdPath = Arrays.stream(ids).map((id) -> { + SysIdMapping idMapping = sysIdMappingService.queryByTid(id); + if (idMapping != null) { + return idMapping.getSELFID().toString(); + } else { + log.error("找不到机构({})字符ID对应的数字ID", id); + return "0"; + } + }).collect(Collectors.joining("/")); + org.setIdpath(newIdPath); + }else{ + org.setIdpath(org.getOrgid().toString()); + } + } + + } + + @Transactional(rollbackFor = Exception.class) + public void syncgroupref(String data){ + JSONArray jsonArray = (JSONArray) JSONArray.parse(data,Feature.IgnoreNotMatch); + JSONObject jsonObject=null; + HashMap ret=null; + //List list=new ArrayList<>(); + List> paramList = new ArrayList<>();//存放用户新增 + List> paramList1=new ArrayList<>();//存放组织新增 + String insertUserSql="insert into sysuser (USERID, ORGID, LOGONNAME,DISPLAYNAME,AREAID) values (:USERID,:ORGID,:LOGONNAME,:DISPLAYNAME,:AREAID)"; + String insertOrgSql = "insert into sysorg(ORGID,ORGNAME,ORGENTERCODE) values(:ORGID,:ORGNAME,:ORGENTERCODE)"; + for(int i=0;i param=new HashMap<>();//存放新增 + Map param1=new HashMap<>();//存放新增 + SysUser user=new SysUser(); + jsonObject=JSONObject.parseObject(jsonArray.get(i).toString()); + String userid=jsonObject.getString("USERID"); + SysUser sysUser=sysUserService.queryOneUser(userid); + if (sysUser!=null&&sysUser.getUserId()!=null){ + //修改 + SysIdMapping sysIdMapping=sysIdMappingService.queryByTid(jsonObject.getString("GROUPID")); + if (sysIdMapping==null){ + continue; + } + sysUser.setOrgId(sysIdMapping.getSELFID().longValue()); + if(null==jsonObject.getString("DISTRICTCODE")|| "".equals(jsonObject.getString("DISTRICTCODE")) || "null".equals(jsonObject.getString("DISTRICTCODE"))){ + //sysUser.setAreaId(); + }else { + sysUser.setAreaId(Long.parseLong(jsonObject.getString("DISTRICTCODE"))); + } + + em.persist(em.merge(sysUser)); + if (i % 1000 == 0) { + em.flush(); + em.clear(); + } + + + }else { + //新增 + user.setUserId(userid); + SysIdMapping sysIdMapping=sysIdMappingService.queryByTid(jsonObject.getString("GROUPID")); + //if (sysIdMapping!=null){ + //在sysidmapping里面找到 + if (sysIdMapping==null){ + continue; + } + user.setOrgId(sysIdMapping.getSELFID().longValue()); + // insertUserSql="insert into sysuser (USERID, ORGID, LOGONNAME,DISPLAYNAME) values (?,?,?,?)"; + //jdbcTemplate.update(sql,user.getUserId(),user.getOrgId(),"tuser","临时"); + if(null==jsonObject.getString("DISTRICTCODE")|| "".equals(jsonObject.getString("DISTRICTCODE")) || "null".equals(jsonObject.getString("DISTRICTCODE"))){ + //sysUser.setAreaId(); + }else { + sysUser.setAreaId(Long.parseLong(jsonObject.getString("DISTRICTCODE"))); + } + //新增 + param.put("USERID", user.getUserId()); + param.put("ORGID",user.getOrgId()); + param.put("LOGONNAME","tuser"); + param.put("DISPLAYNAME","临时"); + param.put("AREAID", user.getAreaId()); + paramList.add(param); + if (i % 1000 == 0) { + namedParameterJdbcTemplate.batchUpdate(insertUserSql, SqlParameterSourceUtils.createBatch(paramList)); + paramList = new ArrayList<>(); + } + if(sysOrgService.findByOrgid(sysIdMapping.getSELFID().longValue()) == null) { + param1.put("ORGID", sysIdMapping.getSELFID().longValue()); + param1.put("ORGNAME","临时"); + param1.put("ORGENTERCODE","888888"); + paramList1.add(param1); + if (i % 1000 == 0) { + namedParameterJdbcTemplate.batchUpdate(insertOrgSql, SqlParameterSourceUtils.createBatch(paramList1)); + paramList1 = new ArrayList<>(); + } + } +// }else { +// //在sysidmapping里面找不到 +// SysIdMapping sysIdMapping1=new SysIdMapping(); +// sysIdMapping1.setTID(jsonObject.getString("GROUPID")); + // sysIdMappingService.saveGroupidToOrgid(sysIdMapping1); +// user.setOrgId(sysIdMapping1.getSELFID().longValue()); +// String sql="insert into sysuser (USERID, ORGID, LOGONNAME,DISPLAYNAME) values (?,?,?,?)"; +// jdbcTemplate.update(sql,user.getUserId(),user.getOrgId(),"tuser","临时"); +// + } + } + em.flush(); + em.clear(); + namedParameterJdbcTemplate.batchUpdate(insertUserSql, SqlParameterSourceUtils.createBatch(paramList)); + namedParameterJdbcTemplate.batchUpdate(insertOrgSql, SqlParameterSourceUtils.createBatch(paramList1)); + } + @Transactional(rollbackFor = Exception.class) + public void syncidMapping(String data) throws SQLException { + JSONArray jsonArray = (JSONArray) JSONArray.parse(data,Feature.IgnoreNotMatch); + JSONObject jsonObject=null; + HashMap ret=null; + //List list=new ArrayList<>(); + Date date2=null; + for(int i=0;i> paramList = new ArrayList<>();//存放新增 + JSONObject jsonObject=null; + String insertSql="insert into sysuser (USERID, LOGONNAME, PASSWD, DISPLAYNAME, USERSTATE, USERTYPE, CARDID, TEL, MOBILE, EMAIL, USERADDR,CREATORID, CREATETIME, DEPARTMENT, CARDTYPE)" + + " values (:USERID,:LOGONNAME,:PASSWD,:DISPLAYNAME,:USERSTATE,:USERTYPE,:CARDID,:TEL,:MOBILE,:EMAIL,:USERADDR,:CREATORID,:CREATETIME,:DEPARTMENT,:CARDTYPE)"; + for(int i=0;i param=new HashMap<>();//存放新增 + SysUser sysUser=new SysUser(); + jsonObject=JSONObject.parseObject(jsonArray.get(i).toString()); + if("admin".equals(jsonObject.getString("LOGINNAME"))) { + continue; + } + sysUser.setUserId(jsonObject.getString("USERID")); + if(null==jsonObject.getString("LOGINNAME")|| "".equals(jsonObject.getString("LOGINNAME")) || "null".equals(jsonObject.getString("LOGINNAME"))){ + sysUser.setLogonName(""); + }else { + sysUser.setLogonName(jsonObject.getString("LOGINNAME")); + } + if(null==jsonObject.getString("PASSWD")|| "".equals(jsonObject.getString("PASSWD")) || "null".equals(jsonObject.getString("PASSWD"))){ + sysUser.setPassWD(""); + }else { + sysUser.setPassWD(jsonObject.getString("PASSWD")); + } + if(null==jsonObject.getString("USERNAME")|| "".equals(jsonObject.getString("USERNAME")) || "null".equals(jsonObject.getString("USERNAME"))){ + sysUser.setDisplayName(""); + }else { + sysUser.setDisplayName(jsonObject.getString("USERNAME")); + } + if(null==jsonObject.getString("USEFUL")|| "".equals(jsonObject.getString("USEFUL")) || "null".equals(jsonObject.getString("USEFUL"))){ + sysUser.setUserState(""); + }else { + sysUser.setUserState(jsonObject.getString("USEFUL")); + } + if(null==jsonObject.getString("ISLEADER")|| "".equals(jsonObject.getString("ISLEADER")) || "null".equals(jsonObject.getString("ISLEADER"))){ + sysUser.setUserType(""); + }else { + String isLeader = jsonObject.getString("ISLEADER"); + if("1".equals(isLeader)) { + isLeader = "3"; + } else { + isLeader = "4"; + } + sysUser.setUserType(isLeader); + } + if(null==jsonObject.getString("IDCARD")|| "".equals(jsonObject.getString("IDCARD")) || "null".equals(jsonObject.getString("IDCARD"))){ + sysUser.setCardId(""); + }else { + sysUser.setCardId(jsonObject.getString("IDCARD")); + } + if(null==jsonObject.getString("OFFICEPHONE")|| "".equals(jsonObject.getString("OFFICEPHONE")) || "null".equals(jsonObject.getString("OFFICEPHONE"))){ + sysUser.setTel(""); + }else { + sysUser.setTel(jsonObject.getString("OFFICEPHONE")); + } + if(null==jsonObject.getString("PHONE")|| "".equals(jsonObject.getString("PHONE")) || "null".equals(jsonObject.getString("PHONE"))){ + sysUser.setMobile(""); + }else { + sysUser.setTel(jsonObject.getString("PHONE")); + sysUser.setMobile(jsonObject.getString("PHONE")); + } + if(null==jsonObject.getString("EMAIL")|| "".equals(jsonObject.getString("EMAIL")) || "null".equals(jsonObject.getString("EMAIL"))){ + sysUser.setEMail(""); + }else { + sysUser.setEMail(jsonObject.getString("EMAIL")); + } + if(null==jsonObject.getString("MACADDR")|| "".equals(jsonObject.getString("MACADDR")) || "null".equals(jsonObject.getString("MACADDR"))){ + sysUser.setUserAddr(""); + }else { + sysUser.setUserAddr(jsonObject.getString("MACADDR")); + } + if(null==jsonObject.getString("OWNER")|| "".equals(jsonObject.getString("OWNER")) || "null".equals(jsonObject.getString("OWNER"))){ + sysUser.setCreatorId(""); + }else { + sysUser.setCreatorId(jsonObject.getString("OWNER")); + } + if(null==jsonObject.getString("CREATEDATE")|| "".equals(jsonObject.getString("CREATEDATE")) || "null".equals(jsonObject.getString("CREATEDATE"))){ + sysUser.setCreateTime(null); + }else { + sysUser.setCreateTime(new java.sql.Date(Long.valueOf(jsonObject.getString("CREATEDATE")))); + } + if(null==jsonObject.getString("DEPT")|| "".equals(jsonObject.getString("DEPT")) || "null".equals(jsonObject.getString("DEPT"))){ + sysUser.setDepartment(""); + }else { + sysUser.setDepartment(jsonObject.getString("DEPT")); + } + //新增 + param.put("USERID", sysUser.getUserId()); + param.put("LOGONNAME", sysUser.getLogonName()); + param.put("PASSWD", sysUser.getPassWD()); + param.put("DISPLAYNAME", sysUser.getDisplayName()); + param.put("USERSTATE", sysUser.getUserState()); + param.put("USERTYPE", sysUser.getUserType()); + param.put("CARDID", sysUser.getCardId()); + param.put("TEL", sysUser.getTel()); + param.put("MOBILE", sysUser.getMobile()); + param.put("EMAIL", sysUser.getEMail()); + param.put("USERADDR", sysUser.getUserAddr()); + param.put("CREATORID", sysUser.getCreatorId()); + param.put("CREATETIME", sysUser.getCreateTime()); + param.put("DEPARTMENT", sysUser.getDepartment()); + param.put("CARDTYPE", "1"); + paramList.add(param); + if (i % 1000 == 0) { + namedParameterJdbcTemplate.batchUpdate(insertSql, SqlParameterSourceUtils.createBatch(paramList)); + paramList = new ArrayList<>(); + } + + } + namedParameterJdbcTemplate.batchUpdate(insertSql, SqlParameterSourceUtils.createBatch(paramList)); + } + /** + * 全量同步用户 + */ + @Transactional(rollbackFor = Exception.class) + public void syncIdMappingWithAll(String data) throws SQLException { + sysIdMappingService.deleteAll(); + em.flush(); + JSONArray jsonArray = (JSONArray) JSONArray.parse(data,Feature.IgnoreNotMatch); + JSONObject jsonObject=null; + HashMap ret=null; + Date date2=null; + for(int i = 0; i < jsonArray.size(); i++){ + jsonObject = jsonArray.getJSONObject(i); + SysIdMapping sysIdMapping1=new SysIdMapping(); + sysIdMapping1.setTID(jsonObject.getString("GROUPID")); + if(sysIdMapping1.getSELFID() == null || sysIdMapping1.getSELFID().intValue() == 0){ + Long selfid = DBUtil.getSequence("sys_idmapping"); +// Long selfid = jdbcTemplate.queryForObject("select SYS_IDMAPPING.nextval from dual",Long.class); + sysIdMapping1.setSELFID(selfid.intValue()); + } + em.persist(sysIdMapping1); + if (i % 1000 == 0) { + em.flush(); + em.clear(); + } + } + em.flush(); + em.clear(); + } + @Transactional(rollbackFor = Exception.class) + public void syncgroupWithAll(String data){ + JSONArray jsonArray = (JSONArray) JSONArray.parse(data,Feature.IgnoreNotMatch); + JSONObject jsonObject=null; + List> paramList = new ArrayList<>();//存放新增 + String insertSql="insert into sysorg (ORGID, ORGNAME, ORGENTERCODE, REGIONCODE, PARENTID, SHORTNAME, LINKMAN, TEL, ORGADDR, ORGDESC,IDPATH)\n" + + "values (:ORGID,:ORGNAME,:ORGENTERCODE, :REGIONCODE, :PARENTID,:SHORTNAME,:LINKMAN,:TEL,:ORGADDR,:ORGDESC,:IDPATH)"; + Map paramMap = new HashMap(); + List> maps=namedParameterJdbcTemplate.queryForList("select t.tid,t.selfid from sysidmapping t",paramMap); + for(int i=0;i param=new HashMap<>();//存放新增 + SysOrg sysOrg=new SysOrg(); + jsonObject=JSONObject.parseObject(jsonArray.get(i).toString()); + if(null==jsonObject.getString("NAME")|| "".equals(jsonObject.getString("NAME")) || "null".equals(jsonObject.getString("NAME"))){ + sysOrg.setOrgname(""); + }else { + sysOrg.setOrgname(jsonObject.getString("NAME")); + } + String orgentercode=""; + String str=jsonObject.getString("GROUPID"); + for(int j=0;j= 48 && str.charAt(j) <= 57) { + orgentercode += str.charAt(j); + if (orgentercode.length()==6){ + break; + } + } + } + if (orgentercode.length()<6) { + for (int k = 0; orgentercode.length() < 6; k++) { + orgentercode += 0; + } + } + String parentid = jsonObject.getString("PARENTID"); + if(null==jsonObject.getString("SHORTNAME")|| "".equals(jsonObject.getString("SHORTNAME")) || "null".equals(jsonObject.getString("SHORTNAME"))){ + sysOrg.setShortname(""); + }else { + sysOrg.setShortname(jsonObject.getString("SHORTNAME")); + } + if(null==jsonObject.getString("LINKMAN")|| "".equals(jsonObject.getString("LINKMAN")) || "null".equals(jsonObject.getString("LINKMAN"))){ + sysOrg.setLinkman(""); + }else { + sysOrg.setLinkman(jsonObject.getString("LINKMAN")); + } + if(null==jsonObject.getString("TEL")|| "".equals(jsonObject.getString("TEL")) || "null".equals(jsonObject.getString("TEL"))){ + sysOrg.setTel(""); + }else { + sysOrg.setTel(jsonObject.getString("TEL")); + } + if(null==jsonObject.getString("ADDRESS")|| "".equals(jsonObject.getString("ADDRESS")) || "null".equals(jsonObject.getString("ADDRESS"))){ + sysOrg.setOrgaddr(""); + }else { + sysOrg.setOrgaddr(jsonObject.getString("ADDRESS")); + } + if(null==jsonObject.getString("DESCRIPTION")|| "".equals(jsonObject.getString("DESCRIPTION")) || "null".equals(jsonObject.getString("DESCRIPTION"))){ + sysOrg.setOrgdesc(""); + }else { + sysOrg.setOrgdesc(jsonObject.getString("DESCRIPTION")); + } + if(null==jsonObject.getString("STATUS")|| "".equals(jsonObject.getString("STATUS")) || "null".equals(jsonObject.getString("STATUS"))){ + sysOrg.setOrgstate("1"); + }else { + sysOrg.setOrgstate(jsonObject.getString("STATUS")); + } + if(null==jsonObject.getString("OTHERINFO")|| "".equals(jsonObject.getString("OTHERINFO")) || "null".equals(jsonObject.getString("OTHERINFO"))){ + sysOrg.setIdpath(""); + }else { + sysOrg.setIdpath(jsonObject.getString("OTHERINFO")); + } + if(null==jsonObject.getString("ORG")|| "".equals(jsonObject.getString("ORG")) || "null".equals(jsonObject.getString("ORG"))){ + sysOrg.setOrgentercode(""); + }else { + sysOrg.setOrgentercode(jsonObject.getString("ORG")); + } + if(null==jsonObject.getString("DISTRICTCODE")|| "".equals(jsonObject.getString("DISTRICTCODE")) || "null".equals(jsonObject.getString("DISTRICTCODE"))){ + sysOrg.setRegioncode(""); + }else { + sysOrg.setRegioncode(jsonObject.getString("DISTRICTCODE")); + } + if(null==jsonObject.getString("PRINCIPAL")|| "".equals(jsonObject.getString("PRINCIPAL")) || "null".equals(jsonObject.getString("PRINCIPAL"))){ + sysOrg.setLeader(""); + }else { + sysOrg.setLeader(jsonObject.getString("PRINCIPAL")); + } + if(null==jsonObject.getString("CHARGEDEPT")|| "".equals(jsonObject.getString("CHARGEDEPT")) || "null".equals(jsonObject.getString("CHARGEDEPT"))){ + sysOrg.setSuperdept(""); + }else { + sysOrg.setSuperdept(jsonObject.getString("CHARGEDEPT")); + } + if(null==jsonObject.getString("RATE")|| "".equals(jsonObject.getString("RATE")) || "null".equals(jsonObject.getString("RATE"))){ + sysOrg.setRate(""); + }else { + sysOrg.setRate(jsonObject.getString("RATE")); + } + + Long realParentid = Long.valueOf(0); + Long Orgid=null; + for(int k=0;k(); + } + } + namedParameterJdbcTemplate.batchUpdate(insertSql, SqlParameterSourceUtils.createBatch(paramList)); + } + + /** + * 同步用户组织关系全量 + * @param data + */ + @Transactional(rollbackFor = Exception.class) + public void syncgrouprefWithAll(String data){ + JSONArray jsonArray = (JSONArray) JSONArray.parse(data,Feature.IgnoreNotMatch); + JSONObject jsonObject=null; + HashMap ret=null; + List> paramList = new ArrayList<>(); + String updateSql="update sysuser set ORGID=:ORGID where USERID=:USERID"; + Map paramMap = new HashMap(); + List> maps=namedParameterJdbcTemplate.queryForList("select t.tid,t.selfid from sysidmapping t",paramMap); + for(int i=0;i param=new HashMap<>();//存放修改 + param.put("USERID", jsonObject.getString("USERID")); + Long Orgid = null; + for (int k = 0; k < maps.size(); k++) { + if (maps.get(k).get("tid").toString().equals(jsonObject.getString("GROUPID"))) { + Orgid = Long.valueOf(String.valueOf(maps.get(k).get("selfid"))); + break; + } + } + param.put("ORGID", Orgid); + paramList.add(param); + if (i % 1000 == 0) { + namedParameterJdbcTemplate.batchUpdate(updateSql, SqlParameterSourceUtils.createBatch(paramList)); + paramList = new ArrayList<>(); + } + } + namedParameterJdbcTemplate.batchUpdate(updateSql, SqlParameterSourceUtils.createBatch(paramList)); + + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/impl/Aa26ServiceImpl.java b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/Aa26ServiceImpl.java new file mode 100644 index 0000000..c010a6e --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/Aa26ServiceImpl.java @@ -0,0 +1,39 @@ +package com.insigma.sys.service.impl; + +import com.insigma.sys.entity.Aa26; +import com.insigma.sys.repository.Aa26Repository; +import com.insigma.sys.service.Aa26Service; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; + +import java.util.List; + +/** + * @Author: caic + * @version: 14:38 2019/1/22 + * @Description: + */ +@Service("Aa26Service") +public class Aa26ServiceImpl implements Aa26Service { + @Autowired + Aa26Repository aa26Repository; + + @Override + public Aa26 findByAab301(String aab301) { + return aa26Repository.findByAab301(aab301); + } + + @Override + public List findByAa148(String aaa148) { + if (ObjectUtils.isEmpty(aaa148)) { + return aa26Repository.findAa26sByAaa148IsNullOrderByAab301(); + } + return aa26Repository.findAa26sByAaa148OrderByAab301(aaa148); + } + + @Override + public List findAll() { + return aa26Repository.findAll(); + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/impl/HolidayServiceImpl.java b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/HolidayServiceImpl.java new file mode 100644 index 0000000..991dd0e --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/HolidayServiceImpl.java @@ -0,0 +1,70 @@ +package com.insigma.sys.service.impl; + +import com.insigma.sys.entity.SysHoliday; +import com.insigma.sys.repository.SysHolidayRepository; +import com.insigma.sys.service.HolidayService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +/** + * @author yinjh + * @version 2021/6/16 + */ +@Service +public class HolidayServiceImpl implements HolidayService { + + @Autowired + private SysHolidayRepository sysHolidayRepository; + + @Override + public List queryHolidayList(int year) { + return sysHolidayRepository.findSysHolidaysByYear(year); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateHolidays(int year, List holidays) { + sysHolidayRepository.deleteByYear(year); + sysHolidayRepository.flush(); + sysHolidayRepository.saveAll(holidays); + } + + @Override + public List getWeekdays(int year) { + List sysHolidays = new ArrayList<>(); + //如果当年没有设置节假日,则默认所有周六周日为节假日 + Calendar calendar = Calendar.getInstance(); + calendar.clear(); + calendar.set(Calendar.YEAR, year); + //第一天 + Date startDate = calendar.getTime(); + calendar.roll(Calendar.DAY_OF_YEAR, -1); + //最后一天 + Date endDate = calendar.getTime(); + // 相隔天数  364 + long step = (endDate.getTime() - startDate.getTime()) / (24 * 60 * 60 * 1000); + //周末集合 + calendar.set(Calendar.DAY_OF_YEAR, 1); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); + for (int i = 0; i < step + 1; i++) { + //判断是否为周末 + if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY || calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { + SysHoliday sysHoliday = new SysHoliday(); + sysHoliday.setYear(calendar.get(Calendar.YEAR)); + sysHoliday.setMonth(calendar.get(Calendar.MONTH) + 1); + sysHoliday.setDay(calendar.get(Calendar.DAY_OF_MONTH)); + sysHolidays.add(sysHoliday); + } + //加一天 + calendar.add(Calendar.DAY_OF_YEAR, 1); + } + return sysHolidays; + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/impl/MenuServiceImpl.java b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/MenuServiceImpl.java new file mode 100644 index 0000000..0ded0e4 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/MenuServiceImpl.java @@ -0,0 +1,555 @@ +package com.insigma.sys.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.commons.syslog.Syslog; +import com.insigma.framework.web.securities.service.SysCacheService; +import com.insigma.sys.common.SysManageMode; +import com.insigma.sys.dto.MenuDTO; +import com.insigma.sys.entity.SysMenu; +import com.insigma.sys.entity.SysRoleFunction; +import com.insigma.sys.entity.SysUser; +import com.insigma.sys.entity.SysUserRole; +import com.insigma.sys.repository.MenuRepository; +import com.insigma.sys.repository.SysRoleFunctionRepository; +import com.insigma.sys.repository.SysUserRoleRepository; +import com.insigma.sys.service.MenuService; +import com.insigma.web.support.repository.CodeTypeRepository; +import com.insigma.web.support.entity.CodeType; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; + +import java.util.*; +import java.util.stream.Collectors; + +@Service +public class MenuServiceImpl implements MenuService { + @Autowired + private MenuRepository menuRepository; + @Autowired + private CodeTypeRepository codeTypeRepository; + @Autowired + private SysRoleFunctionRepository sysRoleFunctionRepository; + @Autowired + private SysUserRoleRepository sysUserRoleRepository; + @Autowired + private SysCacheService sysCacheService; + @Override + public List queryAllMenu() { + List menuDTOS = new ArrayList<>(); + List sysMenuList = menuRepository.findTrees(); + sysMenuList.stream().forEach(sysMenu -> { + MenuDTO menuDTO = new MenuDTO(); + BeanUtils.copyProperties(sysMenu, menuDTO); + menuDTO.setPath(sysMenu.getLocation()); + menuDTOS.add(menuDTO); + }); + + return menuDTOS; + } + + @Override + public SysMenu findMenuById(long id) { + SysMenu sysMenu =menuRepository.findById(id); + return sysMenu; + } + + @Syslog("保存菜单:${sysMenu.title}") + @Override + @Transactional(rollbackFor=Exception.class) + public void save(SysMenu sysMenu) { + String s = ""; + List m = new ArrayList<>(); + + if(sysMenu.getIdpath() != null){ + s = sysMenu.getIdpath(); + m = findNodes(sysMenu.getIdpath()); + } + menuRepository.save(sysMenu); + SysMenu sysMenu1 = findMenuById(sysMenu.getParentid()); + if(sysMenu1 == null){ + sysMenu.setIdpath("0/" + sysMenu.getFunctionid()); + }else { + sysMenu.setIdpath(sysMenu1.getIdpath() + "/" + sysMenu.getFunctionid()); + } + menuRepository.save(sysMenu); + if(!"".equals(s) && m.size() > 0){ + for (SysMenu sm : m){ + sm.setIdpath(sm.getIdpath().replace(s, sysMenu.getIdpath())); + menuRepository.save(sm); + } + } + // 清除菜单缓存 + sysCacheService.clearFunctionCache(sysMenu.getLocation()); + } + + @Override + public void update(SysMenu sysMenu) { + menuRepository.update(sysMenu.getFunctionid(),sysMenu.getFunorder(),sysMenu.getParentid()); + + } + + @Syslog("删除菜单:${list[0].title}") + @Override + @Transactional(rollbackFor=Exception.class) + public void delete(List list, boolean isWithRole) { + for (int i=0;i sysFunctionRole=sysRoleFunctionRepository.queryRoleBy(list.get(i).getFunctionid()); + for (SysRoleFunction s:sysFunctionRole){ + sysRoleFunctionRepository.delete(s); + } + } + } + // 清空所有菜单缓存 + sysCacheService.clearFunctionCache(null); + } + + + @Override + public List findTreesByPId(long id) { + List menus1=menuRepository.findTreesByPId(id); + return menus1; + } + + @Override + public SysMenu queryByFuncID(long parentid) { + SysMenu sysMenu =menuRepository.findById(parentid); + return sysMenu; + } + public JSONObject getCodeTypes(JSONObject jsonObject) { + // + List list = new ArrayList<>(); + list.addAll(jsonObject.keySet()); + List codeTypeList = codeTypeRepository.findByCodetypeInOrderByCodetypeAscKeyAsc(list); + //System.out.println(codeTypeList); + JSONObject codeTypes = new JSONObject(); + codeTypeList.stream() + .filter(ct -> jsonObject.getJSONArray(ct.getCodetype()).size() == 0) + .forEach(ct -> { + JSONObject ctObj = new JSONObject(); + ctObj.put("key", ct.getKey()); + ctObj.put("value", ct.getValue()); + if(codeTypes.getJSONArray(ct.getCodetype()) == null) { + JSONArray jsonArray = new JSONArray(); + codeTypes.put(ct.getCodetype(), jsonArray); + } + codeTypes.getJSONArray(ct.getCodetype()).add(ctObj); + }); + return jsonObject.fluentPutAll(codeTypes); + } + + @Override + public boolean findFunctionRoles(SysMenu sysMenu) { + boolean flag=false; + List list=findNodes(sysMenu.getIdpath()); + for (SysMenu list1:list){ + List sysFunctionRoles=sysRoleFunctionRepository.queryRoleBy(list1.getFunctionid()); + if (sysFunctionRoles.size()>0){ + flag=true; + break; + } + } + return flag; + } + + @Override + public List queryMenuByFuntype(String funtype) { + + List menuDTOS = new ArrayList<>(); + + List sysMenuList = menuRepository.findTreesByFuntype(funtype); + sysMenuList.stream().forEach(sysMenu -> { + MenuDTO menuDTO = new MenuDTO(); + BeanUtils.copyProperties(sysMenu, menuDTO); + menuDTO.setPath(sysMenu.getLocation()); + menuDTOS.add(menuDTO); + }); + + return menuDTOS; + } + + @Override + public List getMenuList(SysUser user) { + List menuDTOS = new ArrayList<>(); + List sysMenuList; + // 如果是超级管理员则显示所有菜单 + if("1".equals(user.getUserType())) { + sysMenuList = menuRepository.getMenuList(); + // if(SysManageMode.isTripleMode()) {//三员制 + // 1、查询用户所拥有的角色 + // List sysUserRoles = sysUserRoleRepository.findByUserId(user.getUserId()); + // // 2、查询角色们所拥有的菜单 + // List roleIds = sysUserRoles.stream().map(role -> role.getRoleId()).collect(Collectors.toList()); + // if(roleIds.size() > 0) { + // sysMenuList = menuRepository.getMenuList(roleIds); + // } else { + // sysMenuList = new ArrayList<>(); + // } + // } + } else { + // 1、查询用户所拥有的角色 + List sysUserRoles = sysUserRoleRepository.findByUserId(user.getUserId()); + // 2、查询角色们所拥有的菜单 + List roleIds = sysUserRoles.stream().map(role -> role.getRoleId()).collect(Collectors.toList()); + if(roleIds.size() > 0) { + sysMenuList = menuRepository.getMenuList(roleIds); + } else { + sysMenuList = new ArrayList<>(); + } + } + sysMenuList.stream().forEach(sysMenu -> { + MenuDTO menuDTO = new MenuDTO(); + BeanUtils.copyProperties(sysMenu, menuDTO); + menuDTO.setPath(sysMenu.getLocation()); + menuDTO.setAppid(sysMenu.getAppId()); + menuDTOS.add(menuDTO); + }); + return menuDTOS; + } + + @Override + public List getVirtualMenuList(SysUser user) { + List menuDTOS = new ArrayList<>(); + List sysMenuList; + sysMenuList = menuRepository.getMenuList(); + + sysMenuList.stream().forEach(sysMenu -> { + MenuDTO menuDTO = new MenuDTO(); + BeanUtils.copyProperties(sysMenu, menuDTO); + menuDTO.setPath(sysMenu.getLocation()); + menuDTOS.add(menuDTO); + }); + return menuDTOS; + } + @Override + public SysMenu getSysMenuBean(Map map) { + SysMenu sysMenu =new SysMenu(); + sysMenu.setTitle(map.get("title").toString()); + sysMenu.setLocation(map.get("location").toString()); + sysMenu.setFuntype(map.get("funtype").toString()); + sysMenu.setNodetype(map.get("nodetype").toString()); + sysMenu.setActive(map.get("active").toString()); + sysMenu.setDescription(map.get("description").toString()); + sysMenu.setDeveloper(map.get("developer").toString()); + if (!ObjectUtils.isEmpty(map.get("openmode"))) { + sysMenu.setOpenmode(map.get("openmode").toString()); + }else{ + sysMenu.setOpenmode(null); + } + if (!ObjectUtils.isEmpty(map.get("funorder"))) { + sysMenu.setFunorder(Integer.parseInt(map.get("funorder").toString())); + }else { + sysMenu.setFunorder(0); + } + if (!ObjectUtils.isEmpty(map.get("funcode"))) { + sysMenu.setFuncode(map.get("funcode").toString()); + } + sysMenu.setIcon(map.get("icon").toString()); + sysMenu.setIslog(map.get("islog").toString()); + sysMenu.setAuflag(map.get("auflag").toString()); + sysMenu.setRbflag(map.get("rbflag").toString()); + sysMenu.setDigest(map.get("digest").toString()); + sysMenu.setSlevel(map.get("slevel").toString()); + if (!ObjectUtils.isEmpty(map.get("appId"))) { + sysMenu.setAppId(map.get("appId").toString()); + }else { + sysMenu.setAppId(null); + } + +// sysMenu.setParentid((long) Integer.parseInt(map.get("parentid").toString())); +// if (!map.get("functionid").toString().equals("")){ +// sysMenu.setFunctionid((long)Integer.parseInt(map.get("functionid").toString())); +// } + sysMenu.setParentid( map.get("parentid")==null?0:Long.valueOf(String.valueOf(map.get("parentid")))); + if (!ObjectUtils.isEmpty(map.get("functionid"))) { + sysMenu.setFunctionid(Long.valueOf((String.valueOf(map.get("functionid"))))); + } + if (!ObjectUtils.isEmpty(map.get("idpath"))) { + sysMenu.setIdpath(String.valueOf(map.get("idpath"))); + } + return sysMenu; + } + + @Override + public boolean isManyLocations(SysMenu sysMenu) { + boolean flag = false; + // 配置了菜单url且不是节点 + if (!ObjectUtils.isEmpty(sysMenu.getLocation()) && !"1".equals(sysMenu.getNodetype())) { + List sysMenus = menuRepository.findLocation(sysMenu.getLocation()); + // 新增 + if (ObjectUtils.isEmpty(sysMenu.getFunctionid())) { + if (sysMenus.size() > 0) { + flag = true; + } + } else { // 修改 + if (sysMenus.size() > 0 && !sysMenu.getFunctionid().equals(sysMenus.get(0).getFunctionid())) { + flag = true; + } + } + } + return flag; + + } + + @Override + public List findNodes(String idpath) { + List sysMenus=menuRepository.findByIdpathStartingWith(idpath); + return sysMenus; +// JSONArray treedatas=JSONArray.parseArray(trees); +// List list=new ArrayList(); +// if(treedatas.size()>0){ +// for(int i=0;i findNodesNoAnNiu(Long id) { + List sysMenus=menuRepository.findNodesNoAnNiu(id); + return sysMenus; + } + + public JSONObject findFunctionid(JSONObject jsonObject,String node){ + JSONArray jsonArray= (JSONArray)jsonObject.get("children"); + JSONObject jsonObject1=new JSONObject(); + for (int j=0;j0){ +// for(int j=0;j queryMenuByFuntypeAndActive(String funtype) { + + List menuDTOS = new ArrayList<>(); + String originFuntype=funtype; + if(SysManageMode.isTripleMode()){//三员制 + if("3".equals(funtype)){//安全管理员角色按照系统管理员去查管理类和通用类菜单 + funtype="1"; + }else if("4".equals(funtype)){//审计管理员角色按照系统管理员去查管理类和通用类菜单 + funtype="1"; + } + } + List sysMenuList = menuRepository.findTreesByFuntypeAndActive(funtype); + + if(SysManageMode.isTripleMode()) {//三员制 + List location=new ArrayList(); + if("3".equals(originFuntype)){ + location.add("/sys/user"); + location.add("/sys/usertms"); + }else if("4".equals(originFuntype)){ + location.add("/sys/role"); + location.add("/sys/grant"); + location.add("/sys/user"); + location.add("/sys/usertms"); + } + location.add("/sys/user"); + removeMenu(location,sysMenuList); + }else{ + List location=new ArrayList(); + location.add("/sys/grant"); + location.add("/sys/usertms"); + removeMenu(location,sysMenuList); + } + + Set ids = new HashSet<>(); + + sysMenuList.stream().forEach(sysMenu -> { + MenuDTO menuDTO = new MenuDTO(); + BeanUtils.copyProperties(sysMenu, menuDTO); + menuDTO.setPath(sysMenu.getLocation()); + + // 如果是按钮,并且父ID没有add进ids中,构造基本功能节点并放在第一位 + if ("3".equals(menuDTO.getNodetype()) && !ids.contains(menuDTO.getParentid())) { + MenuDTO base = new MenuDTO(); + // 虚拟一个 + base.setFunctionid(-menuDTO.getParentid()); + base.setParentid(menuDTO.getParentid()); + base.setTitle("基本功能"); + menuDTOS.add(base); + ids.add(menuDTO.getParentid()); + } + + menuDTOS.add(menuDTO); + + }); + + return menuDTOS; + } + + @Override + public List findNodeslevel(Long id) { + + return menuRepository.findNodeslevel(id); + } + + @Override + public List queryMenusByUserId(String userId) { + List menuDTOS = new ArrayList<>(); + List sysMenuList = menuRepository.findTreesByUserId(userId); + sysMenuList.stream().forEach(sysMenu -> { + MenuDTO menuDTO = new MenuDTO(); + BeanUtils.copyProperties(sysMenu, menuDTO); + menuDTO.setPath(sysMenu.getLocation()); + menuDTOS.add(menuDTO); + }); + return menuDTOS; + } + + @Override + public List getButtonAuthList(SysUser user, String location) { + List buttonAuthList = new ArrayList<>(); + List menuList = menuRepository.findLocation(location); + if (menuList.size() > 0) { + Long parentId = menuList.get(0).getFunctionid(); + if("1".equals(user.getUserType())) { + buttonAuthList = menuRepository.getAllButtonAuthList(parentId); + } else { + // 1、查询用户所拥有的角色 + List sysUserRoles = sysUserRoleRepository.findByUserId(user.getUserId()); + // 2、查询角色们所拥有的按钮 + List roleIds = sysUserRoles.stream().map(SysUserRole::getRoleId).collect(Collectors.toList()); + if(roleIds.size() > 0) { + buttonAuthList = menuRepository.getButtonAuthList(roleIds, parentId); + } + } + } + return buttonAuthList; + } + + @Override + public String updateNodeOrder(MenuDTO nodeBy, MenuDTO nodeTo) { + String message = null; + List allMenuList = this.queryAllMenu(); + //获取当前拖拽节点的父节点 + Long pid = nodeBy.getParentid(); + //获取当前拖拽节点的父节点下所有的child + List childList = menuRepository.findTreesByPId(pid); + //转化 + List childListByMenuDTO = new ArrayList<>(); + childList.stream().forEach(sysMenu -> { + MenuDTO menuDTO = new MenuDTO(); + BeanUtils.copyProperties(sysMenu, menuDTO); + menuDTO.setPath(sysMenu.getLocation()); + childListByMenuDTO.add(menuDTO); + }); + //获取nodeBy的下标 + int nodeByIndex = childListByMenuDTO.indexOf(nodeBy); + if(nodeByIndex == -1){ + message = "未获取被拖拽node下标"; + return message; + } + //获取nodeTo的下标 + int nodeToIndex = childListByMenuDTO.indexOf(nodeTo); + if(nodeToIndex == -1){ + message = "未获取目标对象node下标"; + return message; + } + //截取从nodeBy到nodeTo的list + if(nodeBy.getFunorder() > nodeTo.getFunorder()){ + //上移 + nodeByIndex = nodeByIndex + 1; + List subList = childListByMenuDTO.subList(nodeToIndex,nodeByIndex); + for(int i = 0;i < subList.size();i++){ + //获取ID与order + Long nodeFunctionId = subList.get(i).getFunctionid(); + int funOrder = subList.get(i).getFunorder(); + if(i == subList.size()-1){ + //获取subList顶端的node赋值给拖动的目标node + menuRepository.updateNodeOrder(nodeFunctionId,subList.get(0).getFunorder()); + continue; + } + //前序+1,更新 + menuRepository.updateNodeOrder(nodeFunctionId,funOrder+1); + } + message = "向下tuo"; + }else if(nodeBy.getFunorder() < nodeTo.getFunorder()){ + //下移 + List subList = childListByMenuDTO.subList(nodeByIndex,nodeToIndex+1); + for(int i = 0;i < subList.size();i++){ + //获取ID与order + Long nodeFunctionId = subList.get(i).getFunctionid(); + int funOrder = subList.get(i).getFunorder(); + if(i == 0){ + //获取subList底端的node赋值给拖动的目标node + menuRepository.updateNodeOrder(nodeFunctionId,subList.get(subList.size() - 1).getFunorder()); + continue; + } + //前序-1,更新 + menuRepository.updateNodeOrder(nodeFunctionId,funOrder-1); + } + } + return message; + } + + public void removeMenu(List location,List sysMenuList){ + List listRemove=new ArrayList(); + for(int i=0;i0){ + for(int i=0;i getReportDetailedData(MonitorCentersDTO monitorCentersDTO) { + String mon = monitorCentersDTO.getTimeStart() == null ? "" : monitorCentersDTO.getTimeStart(); + String nowDate = monitorCentersDTO.getTimeEnd() == null ? "" : monitorCentersDTO.getTimeEnd(); + String getUrl = url + "/monitor/count/getReportDetailedData?appName=" + monitorCentersDTO.getAppName().toLowerCase() + "&startTime=" + mon + "&endTime=" + nowDate; + log.info("获取报告详细数据url是=====" + getUrl); + JSONObject result = restTemplate.getForObject(getUrl, JSONObject.class); + Map map = new HashMap<>(); + JSONObject data = result.getJSONObject("data"); + map.put("dates", data.getString("dates")); + map.put("score", data.getString("score")); + map.put("scoreSlowSql", data.getString("scoreSlowSql")); + map.put("scoreErrorSql", data.getString("scoreErrorSql")); + map.put("scoreSlowUrl",data.getString("scoreSlowUrl")); + map.put("scoreJdbcErrorUrl", data.getString("scoreJdbcErrorUrl")); + map.put("type", data.getString("type")); + map.put("sqlAvgTime", data.getString("sqlAvgTime")); + map.put("urlAvgTime", data.getString("urlAvgTime")); + map.put("slowSql", data.getString("slowSql")); + map.put("sqlExecuteError", data.getString("sqlExecuteError")); + map.put("sqlExecuteErrorCount", data.getString("sqlExecuteErrorCount")); + map.put("slowUri", data.getString("slowUri")); + map.put("jdbcError", data.getString("jdbcError")); + map.put("jdbcErrorCount", data.getString("jdbcErrorCount")); + map.put("newDate", new SimpleDateFormat("yyyy年 MM月 dd日 HH:mm:ss").format(new Date())); + map.put("sqlList", data.getJSONArray("sqlList").toJavaList(Map.class)); + map.put("sqlErrorList", data.getJSONArray("sqlErrorList").toJavaList(Map.class)); + map.put("uriList", data.getJSONArray("uriList").toJavaList(Map.class)); + map.put("jdbcErrorList", data.getJSONArray("jdbcErrorList").toJavaList(Map.class)); + return map; + } + + /** + * 下载历史数据 + * + * @return + */ + @Override + public List getDataExport(String appName) { + String getUrl = url + "/monitor/count/getDataExport?appName=" + appName; + JSONObject result = restTemplate.getForObject(getUrl, JSONObject.class); + JSONObject data = result.getJSONObject("data"); + List list = data.getJSONArray("list").toJavaList(Map.class); + return list; + } + + /** + * 获取菜单id + * + * @return + */ + @Override + public SysMenu queryEntity(String url) { + SysMenu sysMenu = menuRepository.queryEntity(url); + return sysMenu; + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/impl/ParamConfigServiceImpl.java b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/ParamConfigServiceImpl.java new file mode 100644 index 0000000..b20e9b3 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/ParamConfigServiceImpl.java @@ -0,0 +1,74 @@ +package com.insigma.sys.service.impl; + +import com.insigma.framework.db.PageInfo; +import com.insigma.framework.exception.AppException; +import com.insigma.sys.service.ParamConfigService; +import com.insigma.web.support.repository.Aa01Repository; +import com.insigma.web.support.entity.Aa01; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.persistence.criteria.Predicate; +import java.util.ArrayList; +import java.util.List; + +/** + * @author yinjh + * @version 2022/10/17 + * @since 2.7.0 + */ +@Service +public class ParamConfigServiceImpl implements ParamConfigService { + + @Autowired + private Aa01Repository aa01Repository; + + @Override + public PageInfo query(String aaa001, String aaa002, Integer page, Integer size) { + PageInfo pageInfo = new PageInfo<>(); + + Specification queryParams = (Specification) (root, criteriaQuery, criteriaBuilder) -> { + List predicates = new ArrayList<>(); + if(null != aaa001 && !"".equals(aaa001)) { + predicates.add(criteriaBuilder.like(root.get("aaa001"), "%" + aaa001 + "%")); + } + if(null != aaa002 && !"".equals(aaa002)) { + predicates.add(criteriaBuilder.like(root.get("aaa002"), "%" + aaa002 + "%")); + } + Predicate[] p = new Predicate[predicates.size()]; + criteriaQuery.where(criteriaBuilder.and(predicates.toArray(p))); + criteriaQuery.orderBy(criteriaBuilder.asc(root.get("aaa001"))); + return criteriaQuery.getRestriction(); + }; + // 分页 + Pageable pageable = PageRequest.of(page, size); + Page aa01Page = aa01Repository.findAll(queryParams, pageable); + pageInfo.setData(aa01Page.getContent()); + pageInfo.setTotal(aa01Page.getTotalElements()); + + return pageInfo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void save(Aa01 aa01, boolean isUpdate) { + Aa01 aa01Temp = aa01Repository.findByAaa001(aa01.getAaa001()); + if (aa01Temp == null && isUpdate) { + throw new AppException("参数类别【" + aa01.getAaa001() + "】不存在!"); + } else if (aa01Temp != null && !isUpdate) { + throw new AppException("参数类别【" + aa01.getAaa001() + "】已存在!"); + } + aa01Repository.saveAndFlush(aa01); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(String aaa001) { + aa01Repository.deleteById(aaa001); + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/impl/RoleServiceImpl.java b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/RoleServiceImpl.java new file mode 100644 index 0000000..4f8f267 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/RoleServiceImpl.java @@ -0,0 +1,547 @@ +package com.insigma.sys.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.commons.syslog.Syslog; +import com.insigma.framework.db.JdbcPageHelper; +import com.insigma.framework.db.PageInfo; +import com.insigma.framework.exception.AppException; +import com.insigma.framework.web.securities.service.SysCacheService; +import com.insigma.sys.common.CurrentUserService; +import com.insigma.sys.common.SysManageMode; +import com.insigma.sys.dto.SysRoleDTO; +import com.insigma.sys.dto.UserDTO; +import com.insigma.sys.entity.*; +import com.insigma.sys.repository.RoleRepository; +import com.insigma.sys.repository.SysCodeRepository; +import com.insigma.sys.repository.SysRoleFunctionRepository; +import com.insigma.sys.repository.SysUserRoleRepository; +import com.insigma.sys.service.RoleService; +import com.insigma.web.support.repository.CodeTypeRepository; +import com.insigma.web.support.entity.CodeType; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.persistence.criteria.Predicate; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; + +/** + * Created by zxy on 2019/1/7. + */ +@Service +public class RoleServiceImpl implements RoleService { + + @Autowired + private RoleRepository roleRepository; + + @Autowired + private CodeTypeRepository codeTypeRepository; + + @Autowired + private SysRoleFunctionRepository sysRoleFunctionRepository; + + @Autowired + private SysUserRoleRepository sysUserRoleRepository; + + @Autowired + private SysCodeRepository sysCodeRepository; + + @Autowired + private CurrentUserService currentUserService; + + @Autowired + private JdbcTemplate jdbcTemplate; + + @Autowired + private SysCacheService sysCacheService; + + + @Syslog("保存角色:${sysRole.rolename}") + @Override + @Transactional(rollbackFor = Exception.class) + public void save(SysRole sysRole) { + //SysRole sysRole = JavaBeanUtils.pageElementToBean(pageData, "form1", SysRole.class); + roleRepository.save(sysRole); + } + + @Override + public SysRoleDTO query(String rolename, String roledesc, String roletype, Integer page, Integer size, + Long areaid, Long orgid, String usertype) { + SysRoleDTO sysRoleDTO = new SysRoleDTO(); + Specification queryParams = (Specification) (root, criteriaQuery, criteriaBuilder) -> { + List predicates = new ArrayList<>(); + if (null != rolename && !"".equals(rolename)) { + predicates.add((Predicate) criteriaBuilder.like(root.get("rolename"), "%" + rolename + "%")); + } + if (null != roledesc && !"".equals(roledesc)) { + predicates.add((Predicate) criteriaBuilder.like(root.get("roledesc"), "%" + roledesc + "%")); + } + if (null != roletype && !"".equals(roletype)) { + predicates.add((Predicate) criteriaBuilder.equal(root.get("roletype"), roletype)); + } + if (null != usertype && !"".equals(usertype)) { + if ("1".equals(usertype)) {//超级管理员 + + } else if ("2".equals(usertype)) {//行政区管理员 + predicates.add((Predicate) criteriaBuilder.equal(root.get("areaid"), areaid)); + } else if ("3".equals(usertype)) {//机构管理员 + predicates.add((Predicate) criteriaBuilder.equal(root.get("orgid"), orgid)); + } + } + + Predicate[] p = new Predicate[predicates.size()]; + criteriaQuery.where(criteriaBuilder.and(predicates.toArray(p))); + + criteriaQuery.orderBy(criteriaBuilder.asc(root.get("rolename")), + criteriaBuilder.asc(root.get("roletype")), criteriaBuilder.asc(root.get("roledesc"))); + return criteriaQuery.getRestriction(); + }; + Pageable pageable = PageRequest.of(page, size); + Page codePage = roleRepository.findAll(queryParams, pageable); + sysRoleDTO.setTotal(codePage.getTotalElements()); + sysRoleDTO.setData(codePage.getContent()); + + return sysRoleDTO; + + } + + @Syslog("删除角色:${sysRole.rolename}") + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteSysRole(SysRole sysRole) { + roleRepository.delete(sysRole); + } + + @Override + public JSONObject getCodeTypes(JSONObject jsonObject) { + // 获取CodeTypes start + List list = new ArrayList<>(); + // 将Set中的数据拷贝到List中 + list.addAll(jsonObject.keySet()); + List codeTypeList = codeTypeRepository.findByCodetypeInOrderByCodetypeAscKeyAsc(list); + //System.out.println(codeTypeList); + JSONObject codeTypes = new JSONObject(); + codeTypeList.stream() + .filter(ct -> jsonObject.getJSONArray(ct.getCodetype()).size() == 0) + .forEach(ct -> { + JSONObject ctObj = new JSONObject(); + ctObj.put("key", ct.getKey()); + ctObj.put("value", ct.getValue()); + if (codeTypes.getJSONArray(ct.getCodetype()) == null) { + JSONArray jsonArray = new JSONArray(); + codeTypes.put(ct.getCodetype(), jsonArray); + } + codeTypes.getJSONArray(ct.getCodetype()).add(ctObj); + }); + return jsonObject.fluentPutAll(codeTypes); + } + + /*@Override + public void saveRoleFunction(SysRoleFunction sysRoleFunction) { + + sysRoleFunctionRepository.save(sysRoleFunction); + }*/ + + @Override + public boolean checkRoleByRolename(String rolename) { + List list = roleRepository.findByRolename(rolename); + if (list.size() == 0) {//查询结果为空,则表示没有登录名称重复 + return true; + } + return false; + } + + @Override + public boolean checkRoleByRolenameAndRoleid(String rolename, String roleid) { + List list = null; + list = roleRepository.checkRoleIfValidByRoleid(roleid); + String oldRolename = list.get(0).getRolename(); + if (rolename.equals(oldRolename)) { + //说明没有改变角色名称 + return true; + } else { + list = roleRepository.findByRolename(rolename); + if (list.size() > 0) { + return false; + } else { + return true; + } + } + } + + @Override + public List queryRoleByUserId(String userid) { + List list = roleRepository.queryRoleByUserId(userid); + return list; + } + + @Syslog("删除角色:${sysRole.rolename}") + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteRoleRef(SysRole sysRole) { + roleRepository.delete(sysRole); + sysRoleFunctionRepository.deleteRoleFunction(sysRole.getRoleid()); + sysUserRoleRepository.deleteUserRole(sysRole.getRoleid()); + + // 清空所有用户菜单缓存 + sysCacheService.clearUserCache(null); + sysCacheService.clearFunctionCache(null); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public List queryFuncitonidByRoleid(String roleid) { + List list = sysRoleFunctionRepository.queryFuncitonidByRoleid(roleid); + List alls = sysRoleFunctionRepository.queryFuncitonidAllByRoleid(roleid); + List buttons = alls.stream().filter(item -> item < 0).collect(Collectors.toList()); + List originList = buttons.stream().map(item -> -item).collect(Collectors.toList()); + list.removeAll(originList); + list.addAll(buttons); + return list; + } + + @Override + public boolean checkRoleIfValidByRoleid(String roleid) { + List list = roleRepository.checkRoleIfValidByRoleid(roleid); + boolean flag = false; + if (list.size() > 0) { + return true; + } else { + return false; + } + } + + @Override + public SysRole getRoleById(String roleid) { + List list = roleRepository.checkRoleIfValidByRoleid(roleid); + if (list.size() > 0) { + return list.get(0); + } + return null; + } + + @Override + public boolean roleCanOperate(SysUser sysUser, SysRole sysRole) { + boolean flag = true; + if ("2".equals(sysUser.getUserType())) { + if (sysRole.getAreaid() == null || !sysRole.getAreaid().equals(sysUser.getAreaId())) { + flag = false; + } + } else if ("3".equals(sysUser.getUserType())) { + if (sysRole.getOrgid() == null || !sysRole.getOrgid().equals(sysUser.getOrgId())) { + flag = false; + } + } else if ("4".equals(sysUser.getUserType())) { + flag = false; + } + return flag; + } + + public void deleteRoleFunctionRefAndAddNewRef(String roleid, List list) { + /** + * 先删除老的角色资源关系,后增加新的角色资源关系 + */ + sysRoleFunctionRepository.deleteRoleFunction(roleid); + SysRoleFunction sysRoleFunction = null; + Long functionid = null; + for (int i = 0; i < list.size(); i++) { + functionid = list.get(i); + sysRoleFunction = new SysRoleFunction(); + sysRoleFunction.setRoleid(roleid); + sysRoleFunction.setFunctionid(functionid); + sysRoleFunctionRepository.save(sysRoleFunction); + } + } + + @Syslog("对角色:${role.rolename}授权菜单") + @Override + @Transactional(rollbackFor = Exception.class) + public void saveGrant(SysUser sysUser, SysRole role, JSONObject jsonObject) { + JSONArray treeInfo = jsonObject.getJSONArray("treeInfo"); + JSONObject jsonTemp = null; + List fids = new ArrayList<>(); + for (int i = 0; i < treeInfo.size(); i++) { + jsonTemp = treeInfo.getJSONObject(i); + Long functionid = jsonTemp.getLong("functionid"); + fids.add(functionid); + } + this.deleteRoleFunctionRefAndAddNewRef(role.getRoleid(), fids); + + // 清空所有菜单缓存 + sysCacheService.clearFunctionCache(null); + } + + @Override + public List> findRoleTypesCode() { + List list = sysCodeRepository.findByAaa100("ROLETYPE"); + if (SysManageMode.isTripleMode()) {//三员制 + if ("1".equals(currentUserService.getCurrentUser().getUserType()) || "5".equals(currentUserService.getCurrentUser().getUserType())) {//如果不是超级管理员或者安全管理员 + + } else { + List listRemove = new ArrayList(); + for (int i = 0; i < list.size(); i++) { + if ("1".equals(list.get(i).getAaa105())) { + listRemove.add(list.get(i).getAaz093()); + } + } + if (listRemove.size() > 0) { + for (int i = 0; i < listRemove.size(); i++) { + for (int j = 0; j < list.size(); j++) { + if (listRemove.get(i).toString().equals(list.get(j).getAaz093().toString())) { + list.remove(j); + break; + } + } + + } + } + } + } else { + List listRemove = new ArrayList(); + for (int i = 0; i < list.size(); i++) { + if ("1".equals(list.get(i).getAaa105())) { + listRemove.add(list.get(i).getAaz093()); + } + } + if (listRemove.size() > 0) { + for (int i = 0; i < listRemove.size(); i++) { + for (int j = 0; j < list.size(); j++) { + if (listRemove.get(i).toString().equals(list.get(j).getAaz093().toString())) { + list.remove(j); + break; + } + } + + } + } + } + return aa10ToCodeList(list); + } + + /** + * 将aa10数据组装成List格式 + * + * @param list + * @return + */ + private List> aa10ToCodeList(List list) { + List> codeList = new ArrayList<>(); + for (Aa10 aa10 : list) { + Map tem = new ConcurrentHashMap(); + tem.put("key", aa10.getAaa102()); + tem.put("value", aa10.getAaa102()); + tem.put("label", aa10.getAaa103()); + codeList.add(tem); + } + return codeList; + } + + @Override + public PageInfo queryToGrantUser(String roleId, String roletype, String logonname, String displayname, + Integer page, Integer size) throws SQLException { + SysUser currentUser = currentUserService.getCurrentUser(); + String usertype = currentUser.getUserType(); + String sql = null; + if ("1".equals(roletype)) {//系统管理类角色 + if ("1".equals(usertype)) {//当前登录用户为超级管理员,则可以授权所有管理类用户(超管、行政管、机构管) + sql = "select * from sysuser where (usertype ='1' or USERTYPE = '2' or USERTYPE = '3')"; + } else if ("2".equals(usertype)) { + //当前登录用户为行政区划管理员,则可以授权这个行政区划下所有管理类用户 + Long areaid=currentUser.getAreaId(); + sql= + "select * from sysuser where (usertype ='1' or USERTYPE = '2' or USERTYPE = '3') and " + + "areaid='"+areaid+"'"; + } else if ("3".equals(usertype)) { + //当前登录用户为机构管理员,则可以授权这个机构下所有管理类用户 + Long orgid=currentUser.getOrgId(); + sql= + "select * from sysuser where (usertype ='1' or USERTYPE = '2' or USERTYPE = '3') and orgid='"+orgid+"'"; + + } else if ("5".equals(usertype)) {//当前登录用户为安全管理员,则权限与超级管理员一致 + sql = "select * from sysuser where (usertype ='1' or USERTYPE = '2' or USERTYPE = '3')"; + } else if ("4".equals(usertype) || "6".equals(usertype)) {//当前登录用户为业务操作员,审计管理员,不可以授权任何用户 + PageInfo pageInfo = new PageInfo(); + pageInfo.setTotal(Long.parseLong("0")); + pageInfo.setData(null); + return pageInfo; + } + } else if ("2".equals(roletype)) {//业务操作类角色 + if ("1".equals(usertype)) {//当前登录用户为超级管理员,则可以授权所有业务操作员类用户 + sql = "select * from sysuser where usertype ='4'"; + } else if ("2".equals(usertype)) { + //当前登录用户为行政区划管理员,则可以授权这个行政区划下所有业务操作员类用户 + Long areaid=currentUser.getAreaId(); + sql="select * from sysuser where usertype ='4' and areaid='"+areaid+"'"; + } else if ("3".equals(usertype)) { + //当前登录用户为机构管理员,则可以授权这个机构下所有业务操作员类用户 + Long orgid=currentUser.getOrgId(); + sql="select * from sysuser where usertype ='4' and orgid='"+orgid+"'"; + + } else if ("5".equals(usertype)) {//当前登录用户为安全管理员,则权限与超级管理员一致 + sql = "select * from sysuser where usertype ='4'"; + } else if ("4".equals(usertype) || "6".equals(usertype)) {//当前登录用户为业务操作员,不可以授权任何用户 + PageInfo pageInfo = new PageInfo(); + pageInfo.setTotal(Long.parseLong("0")); + pageInfo.setData(null); + return pageInfo; + } + } else if ("3".equals(roletype)) {//安全管理员角色 + if ("1".equals(usertype)) {//当前登录用户为超级管理员,则可以授权所有业务操作员类用户 + sql = "select * from sysuser where usertype ='5'"; + } else if ("2".equals(usertype)) { + //当前登录用户为行政区划管理员,则可以授权这个行政区划下所有业务操作员类用户 + Long areaid=currentUser.getAreaId(); + sql="select * from sysuser where usertype ='5' and areaid='"+areaid+"'"; + } else if ("3".equals(usertype)) { + //当前登录用户为机构管理员,则可以授权这个机构下所有业务操作员类用户 + Long orgid=currentUser.getOrgId(); + sql="select * from sysuser where usertype ='5' and orgid='"+orgid+"'"; + + } else if ("5".equals(usertype)) {//当前登录用户为安全管理员,则权限与超级管理员一致 + sql = "select * from sysuser where usertype ='5'"; + } else if ("4".equals(usertype) || "6".equals(usertype)) {//当前登录用户为业务操作员,不可以授权任何用户 + PageInfo pageInfo = new PageInfo(); + pageInfo.setTotal(Long.parseLong("0")); + pageInfo.setData(null); + return pageInfo; + } + }else if ("4".equals(roletype)) {//审计管理员角色 + if ("1".equals(usertype)) {//当前登录用户为超级管理员,则可以授权所有业务操作员类用户 + sql = "select * from sysuser where usertype ='6'"; + } else if ("2".equals(usertype)) { + //当前登录用户为行政区划管理员,则可以授权这个行政区划下所有业务操作员类用户 + Long areaid=currentUser.getAreaId(); + sql="select * from sysuser where usertype ='6' and areaid='"+areaid+"'"; + } else if ("3".equals(usertype)) { + //当前登录用户为机构管理员,则可以授权这个机构下所有业务操作员类用户 + Long orgid=currentUser.getOrgId(); + sql="select * from sysuser where usertype ='6' and orgid='"+orgid+"'"; + + } else if ("5".equals(usertype)) {//当前登录用户为安全管理员,则权限与超级管理员一致 + sql = "select * from sysuser where usertype ='6'"; + } else if ("4".equals(usertype) || "6".equals(usertype)) {//当前登录用户为业务操作员,不可以授权任何用户 + PageInfo pageInfo = new PageInfo(); + pageInfo.setTotal(Long.parseLong("0")); + pageInfo.setData(null); + return pageInfo; + } + } else { + throw new AppException("用户类型异常!"); + } + + Map param = new HashMap<>(); + if (logonname != null && !"".equals(logonname)) { + sql += " and logonname like :logonname"; + param.put("logonname", "%" + logonname + "%"); + } + if (displayname != null && !"".equals(displayname)) { + sql += " and displayname like :displayname"; + param.put("logonname", "%" + displayname + "%"); + } + + JdbcPageHelper pageHelper = new JdbcPageHelper(jdbcTemplate, page, size); + PageInfo pageInfo = pageHelper.queryPagination(sql, param, rs -> { + UserDTO dto = new UserDTO(); + dto.setLogonName(rs.getString("logonname")); + dto.setUserId(rs.getString("userid")); + dto.setDisplayName(rs.getString("displayname")); + dto.setOrgId(Long.parseLong(rs.getString("orgid"))); + return dto; + }); + return pageInfo; + } + + @Override + public List queryGrantedUser(String roleId) { + List params = new ArrayList<>(); + String sql = null; + SysUser currentUser = currentUserService.getCurrentUser(); + String usertype = currentUser.getUserType(); + Long orgid=currentUser.getOrgId(); + Long areaid=currentUser.getAreaId(); + if ("1".equals(usertype)) {//当前登录用户为超级管理员,则可以查询改角色授权的所有用户 + sql = "select su.* from sysuserrole sur,sysuser su where sur.userid=su.userid and sur.roleid=?"; + } else if ("5".equals(usertype)) {//若是安全操作员,与超管权限一致 + sql = "select su.* from sysuserrole sur,sysuser su where sur.userid=su.userid and sur.roleid=?"; + } else if ("3".equals(usertype)) {//若是机构管理员 + sql = "select su.* from sysuserrole sur,sysuser su where sur.userid=su.userid and su.orgid='" + orgid + + "'" + "and sur.roleid=?"; + } else if ("2".equals(usertype)) {//若是行政区操作员 + sql = "select su.* from sysuserrole sur,sysuser su where sur.userid=su.userid and su.areaid='" + areaid + + "'" + "and sur.roleid=?"; + } else if ("4".equals(usertype)) {//若是业务操作员,则没有权限 + throw new AppException("业务操作人员没权限查看角色列表"); + } else if ("6".equals(usertype)) {//若是审计管理员,则没有权限 + throw new AppException("审计管理人员没权限查看角色列表"); + } else { + throw new AppException("用户类型异常!"); + } + params.add(roleId); + List list = jdbcTemplate.query(sql.toString(), params.toArray(), (rs, i) -> { + UserDTO dto = new UserDTO(); + dto.setUserId(rs.getString("userid")); + dto.setLogonName(rs.getString("logonname")); + dto.setDisplayName(rs.getString("displayname")); + dto.setOrgId(Long.parseLong(rs.getString("orgid"))); + return dto; + }); + return list; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void removeGrantUserRole(String roleid, String userid) { + sysUserRoleRepository.removeGrantUserRole(roleid, userid); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void saveGrantUser(JSONObject jsonObject) { + String roleid = (String) jsonObject.get("roleId"); + JSONArray jsonArray = jsonObject.getJSONArray("tableDataGranted"); + List params = new ArrayList<>(); + String sql = "select userid from sysuserrole where roleid=?"; + params.add(roleid); + List list = jdbcTemplate.query(sql, params.toArray(), (rs, i) -> { + String userid = rs.getString("userid"); + return userid; + }); + + JSONObject jsonObject1 = null; + String userid = null; + List listUser = new ArrayList<>(); + for (int i = 0; i < jsonArray.size(); i++) { + jsonObject1 = jsonArray.getJSONObject(i); + userid = jsonObject1.getString("userId"); + listUser.add(userid); + if (list.contains(userid)) { + listUser.remove(userid); + } + } + SysUserRole sysUserRole = null; + for (int i = 0; i < listUser.size(); i++) { + sysUserRole = new SysUserRole(); + sysUserRole.setRoleId(roleid); + sysUserRole.setUserId(listUser.get(i)); + sysUserRoleRepository.save(sysUserRole); + } + + // 清空所有用户缓存 + sysCacheService.clearUserCache(null); + + } + + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/impl/ScmMyFavoritesServiceImpl.java b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/ScmMyFavoritesServiceImpl.java new file mode 100644 index 0000000..e12fbaf --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/ScmMyFavoritesServiceImpl.java @@ -0,0 +1,131 @@ +package com.insigma.sys.service.impl; + +import com.insigma.framework.ResponseMessage; +import com.insigma.framework.util.IDUtil; +import com.insigma.sys.common.CurrentUserService; +import com.insigma.sys.dto.ScmMyFavoritesDTO; +import com.insigma.sys.service.ScmMyFavoritesService; +import com.insigma.web.support.entity.MdParam; +import com.insigma.web.support.util.SysFunctionManager; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; + +/** + * @Author tanyj + * @Version 2022/8/23 10:00 + * @since 2.7.0 + **/ +@Service +public class ScmMyFavoritesServiceImpl implements ScmMyFavoritesService { + + @Autowired + private JdbcTemplate jdbcTemplate; + + @Autowired + private CurrentUserService currentUserService; + /** + * 新增我的收藏 + * + * @param scmMyFavoritesDTO scmMyFavoritesDTO + */ + @Override + @Transactional(rollbackFor = Exception.class) + public ResponseMessage addScmMyFavorites(String currentUserId, ScmMyFavoritesDTO scmMyFavoritesDTO) { + if(scmMyFavoritesDTO != null && scmMyFavoritesDTO.getFunctionRoutePath() != null){ + String sql = "select count(1) from SCM_MY_FAVORITES where USERID = ? and FUNCTION_ROUTE_PATH = ?"; + int count = jdbcTemplate.queryForObject(sql, Integer.class, currentUserId, scmMyFavoritesDTO.getFunctionRoutePath()); + if (count > 0) { + return ResponseMessage.error("该功能已收藏"); + }else { + ScmMyFavoritesDTO sfd = this.getMdParamByPath(scmMyFavoritesDTO.getFunctionRoutePath()); + String insertSql = "insert into SCM_MY_FAVORITES(ID,FUNCTIONID,FUNCTION_ROUTE_PATH,USERID,FAVOR_TIME,ORDER_NO,TITLE) values(?,?,?,?,?,?,?)"; + scmMyFavoritesDTO.setId(IDUtil.generateUUID()); + scmMyFavoritesDTO.setFavorTime(new Date()); + scmMyFavoritesDTO.setOrderNo(getMaxOrderNo() + 1); + jdbcTemplate.update(insertSql, scmMyFavoritesDTO.getId(), sfd.getFunctionId(), scmMyFavoritesDTO.getFunctionRoutePath(), currentUserId, scmMyFavoritesDTO.getFavorTime(), scmMyFavoritesDTO.getOrderNo(), scmMyFavoritesDTO.getTitle()); + return ResponseMessage.ok("收藏成功"); + } + } + return ResponseMessage.error("未获取tab详情"); + } + + /** + * 根据用户id查询我的收藏 + * + * @param userid userid + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public List getScmMyFavorites(String userid) { + String sql = "select * from SCM_MY_FAVORITES where USERID = ? order by ORDER_NO"; + List list = jdbcTemplate.query(sql, new Object[]{userid}, (resultSet, i) -> { + ScmMyFavoritesDTO scmMyFavoritesDTO = new ScmMyFavoritesDTO(); + scmMyFavoritesDTO.setId(resultSet.getString("ID")); + scmMyFavoritesDTO.setFunctionId(resultSet.getInt("FUNCTIONID")); + scmMyFavoritesDTO.setFunctionRoutePath(resultSet.getString("FUNCTION_ROUTE_PATH")); + scmMyFavoritesDTO.setUserid(resultSet.getString("USERID")); + scmMyFavoritesDTO.setFavorTime(resultSet.getDate("FAVOR_TIME")); + scmMyFavoritesDTO.setOrderNo(resultSet.getInt("ORDER_NO")); + scmMyFavoritesDTO.setTitle(resultSet.getString("TITLE")); + scmMyFavoritesDTO.setTableDelFlag(false); + ScmMyFavoritesDTO smf = this.getMdParamByPath(scmMyFavoritesDTO.getFunctionRoutePath()); + if(smf != null){ + scmMyFavoritesDTO.setIcon(smf.getIcon()); + } + return scmMyFavoritesDTO; + }); + return list; + } + + /** + * 根据用户id删除我的收藏 + * + * @param scmMyFavoritesDTO scmMyFavoritesDTO + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteScmMyFavorites(String currentUserId, ScmMyFavoritesDTO scmMyFavoritesDTO) { + String sql = "delete from SCM_MY_FAVORITES where USERID = ? and FUNCTION_ROUTE_PATH = ?"; + jdbcTemplate.update(sql, currentUserId, scmMyFavoritesDTO.getFunctionRoutePath()); + } + + + /** + * 根据用户id更新我的收藏 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void orderScmMyFavorites(String userId, ScmMyFavoritesDTO scmMyFavoritesDTO) { + String sql = "update SCM_MY_FAVORITES set ORDER_NO = ? where USERID = ? and FUNCTION_ROUTE_PATH = ?"; + jdbcTemplate.update(sql, scmMyFavoritesDTO.getOrderNo(), userId, scmMyFavoritesDTO.getFunctionRoutePath()); + } + + public int getMaxOrderNo(){ + String sqlCount = "select count(1) from SCM_MY_FAVORITES where USERID = ?"; + int count = jdbcTemplate.queryForObject(sqlCount, new Object[]{currentUserService.getCurrentUser().getUserId()}, Integer.class); + if(count == 0) { + return 0; + }else { + String sql = "select MAX(ORDER_NO) from SCM_MY_FAVORITES where USERID = ?"; + return jdbcTemplate.queryForObject(sql, new Object[]{currentUserService.getCurrentUser().getUserId()}, Integer.class); + } + } + + public ScmMyFavoritesDTO getMdParamByPath(String path){ + String sql = "select * from SYSFUNCTION where LOCATION = ?"; + return jdbcTemplate.queryForObject(sql, new Object[]{path}, (resultSet, i) -> { + ScmMyFavoritesDTO scmMyFavoritesDTO = new ScmMyFavoritesDTO(); + scmMyFavoritesDTO.setFunctionId(resultSet.getInt("FUNCTIONID")); + scmMyFavoritesDTO.setFunctionRoutePath(resultSet.getString("LOCATION")); + scmMyFavoritesDTO.setTitle(resultSet.getString("TITLE")); + scmMyFavoritesDTO.setIcon(resultSet.getString("ICON")); + return scmMyFavoritesDTO; + }); + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysAppServiceImpl.java b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysAppServiceImpl.java new file mode 100644 index 0000000..27a1357 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysAppServiceImpl.java @@ -0,0 +1,243 @@ +package com.insigma.sys.service.impl; + +import com.insigma.framework.db.JdbcPageHelper; +import com.insigma.framework.db.PageInfo; +import com.insigma.framework.util.DtoEntityUtil; +import com.insigma.framework.util.StringUtil; +import com.insigma.sys.dto.SysAppAddressDTO; +import com.insigma.sys.dto.SysAppDTO; +import com.insigma.sys.entity.SysApp; +import com.insigma.sys.entity.SysAppAddress; +import com.insigma.sys.repository.SysAppAddressRepository; +import com.insigma.sys.repository.SysAppRepository; +import com.insigma.sys.service.SysAppService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * @author GH + * @version 2022/3/28 + * @since 2.6.5 + */ + +@Service +public class SysAppServiceImpl implements SysAppService { + @Autowired + private JdbcTemplate jdbcTemplate; + @Autowired + private SysAppRepository sysAppRepository; + @Autowired + private SysAppAddressRepository sysAppAddressRepository; + + /** + * 根据条件进行分页查询 + * + * @param queryDTO 查询条件 + * @param page 页码 + * @param size 每页条数 + * @return 对象ID + * @throws SQLException SQLException + */ + @Override + public PageInfo pageQuery(SysAppDTO queryDTO, Integer page, Integer size) throws SQLException { + List params = new ArrayList<>(); + StringBuffer sql = new StringBuffer("select * from SYSAPP where 1=1"); + if (!ObjectUtils.isEmpty(queryDTO.getAppName())) { + sql.append(" and APP_NAME like ?"); + params.add("%" + queryDTO.getAppName() + "%"); + } + + if (!ObjectUtils.isEmpty(queryDTO.getAppCode())) { + sql.append(" and APP_CODE like ?"); + params.add("%" + queryDTO.getAppCode() + "%"); + } + if (!ObjectUtils.isEmpty(queryDTO.getActive())) { + sql.append(" and ACTIVE = ?"); + params.add(queryDTO.getActive()); + } + sql.append(" order by ORDER_NO asc"); + + JdbcPageHelper pageHelper = new JdbcPageHelper(jdbcTemplate, page, size); + List list = pageHelper.queryPagination(sql.toString(), params, SysAppDTO.class).getData(); + for (SysAppDTO sysAppDTO : list) { + String secretKey = sysAppDTO.getSecretKey(); + String substring = secretKey.substring(4, 12); + String replace = secretKey.replace(substring, "********"); + sysAppDTO.setSecretKey(replace); + } + PageInfo pageInfo = new PageInfo<>(); + pageInfo.setData(list); + pageInfo.setTotal((long) list.size()); + return pageInfo; + } + + /*** + * 保存应用信息 + * @param queryDTO 保存的数据对象 + * @param secretKey 安全key + * @return 对象id + */ + @Override + @Transactional(rollbackFor = Exception.class) + public String saveSysAppDTO(SysAppDTO queryDTO, String secretKey) { + String appId = null; + if (StringUtil.isEmpty(queryDTO.getAppId())) { // 新增 + queryDTO.setActive("1"); + queryDTO.setSecretKey(secretKey); + queryDTO.setCreateTime(new Date()); + Long apporder = sysAppRepository.selectMaxOrder(); + if (apporder != null && !"".equals(apporder)) { + queryDTO.setOrderNo(apporder + 1); + } else { + queryDTO.setOrderNo((long) 1); + } + } else { + SysApp sApp = sysAppRepository.getOne(queryDTO.getAppId()); + queryDTO.setAppId(sApp.getAppId()); + queryDTO.setSecretKey(sApp.getSecretKey()); + queryDTO.setCreateTime(sApp.getCreateTime()); + queryDTO.setActive(sApp.getActive()); + queryDTO.setOrderNo(sApp.getOrderNo()); + queryDTO.setUpdateTime(new Date()); + } + SysApp sysApp = DtoEntityUtil.trans(queryDTO, SysApp.class); + SysApp app = sysAppRepository.save(sysApp); + if (app != null) { + appId = app.getAppId(); + } + return appId; + } + + /*** + * 保存应用地址信息 + * @param list 应用地址信息的对象集合 + * @param appid 应用系统id + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void saveSysAppAddressDTO(List list, String appid) { + for (SysAppAddressDTO sysAppAddressDTO : list) { + if (StringUtil.isNotEmpty(sysAppAddressDTO.getAddressId())) {//修改 + sysAppAddressDTO.setAddressId(sysAppAddressDTO.getAddressId()); + } + sysAppAddressDTO.setAppId(appid); + SysAppAddress sysAppAddress = DtoEntityUtil.trans(sysAppAddressDTO, SysAppAddress.class); + sysAppAddressRepository.save(sysAppAddress); + } + } + + /*** + * 根据应用ID查询对应的信息 + * @param appid 应用系统id + * @return 应用系统对象 + */ + @Override + public SysAppDTO querySysApp(String appid) { + SysApp sysApp = sysAppRepository.getOne(appid); + SysAppDTO appDTO = DtoEntityUtil.trans(sysApp, SysAppDTO.class); + return appDTO; + } + + /*** + * 根据应用ID查询所有应用地址信息 + * @param appid 应用系统id + * @return 所有应用地址对象集合 + */ + @Override + public List querySysAddressDTO(String appid) { + List sysAppAddresses = sysAppAddressRepository.querySysAddressDTO(appid); + List dtos = DtoEntityUtil.trans(sysAppAddresses, SysAppAddressDTO.class); + return dtos; + } + + /*** + * 根据应用ID删除 + * @param appid 应用系统id + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteSysApp(String appid) { + sysAppRepository.deleteById(appid); + } + + /*** + * 根据应用id删除所有对应的应用地址数据 + * @param appid 应用系统id + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteSysAppAddressByAppId(String appid) { + sysAppAddressRepository.deleteSysAppAddressByAppId(appid); + } + + /*** + * 根据应用地址ID删除应用 + * @param addressId 应用地址id + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteSysAppAddress(String addressId) { + sysAppAddressRepository.deleteById(addressId); + } + + /*** + * 将应用设置为有效 + * @param appid 应用系统id + * @return + */ + @Override + public void toActiveSysApp(String appid) { + jdbcTemplate.update("update SYSAPP set ACTIVE = '1' where APP_ID=?", ps -> { + ps.setString(1, appid); + }); + } + + /*** + * 将应用设置为无效 + * @param appid 应用系统id + * @return + */ + @Override + public void toNotActiveSysApp(String appid) { + jdbcTemplate.update("update SYSAPP set ACTIVE = '0' where APP_ID=?", ps -> { + ps.setString(1, appid); + }); + } + + /*** + * 查询所有的应用名称 + * @return 应用系统集合 + */ + @Override + public List querySysAppDTO() { + List sysApps = sysAppRepository.findAll(); + List dtos = DtoEntityUtil.trans(sysApps, SysAppDTO.class); + return dtos; + } + + /*** + * 验证编码是否重复 + * @return 布尔 + */ + @Override + public boolean selectAppCode(String appCode) { + boolean flag = false; + SysApp sysApp = sysAppRepository.selectAppCode(appCode); + if (sysApp != null) { + flag = true; + } + return flag; + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysCodeServiceImpl.java b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysCodeServiceImpl.java new file mode 100644 index 0000000..fa4b990 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysCodeServiceImpl.java @@ -0,0 +1,112 @@ +package com.insigma.sys.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.exception.AppException; +import com.insigma.sys.dto.CodeDTO; +import com.insigma.sys.entity.Aa10; +import com.insigma.sys.repository.SysCodeRepository; +import com.insigma.sys.service.SysCodeService; +import com.insigma.web.support.repository.CodeTypeRepository; +import com.insigma.web.support.entity.CodeType; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.persistence.criteria.Predicate; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by yinjh on 2019/1/9. + */ +@Service +public class SysCodeServiceImpl implements SysCodeService { + + @Autowired + private SysCodeRepository sysCodeRepository; + + @Autowired + private CodeTypeRepository codeTypeRepository; + + @Override + public CodeDTO query(String aaa100, String aaa103, Integer page, Integer size) { + + CodeDTO codeDTO = new CodeDTO(); + + Specification queryParams = (Specification) (root, criteriaQuery, criteriaBuilder) -> { + List predicates = new ArrayList<>(); + if(null != aaa100 && !"".equals(aaa100)) { + predicates.add(criteriaBuilder.like(root.get("aaa100"), "%" + aaa100 + "%")); + } + if(null != aaa103 && !"".equals(aaa103)) { + predicates.add(criteriaBuilder.like(root.get("aaa103"), "%" + aaa103 + "%")); + } + Predicate[] p = new Predicate[predicates.size()]; + criteriaQuery.where(criteriaBuilder.and(predicates.toArray(p))); + criteriaQuery.orderBy(criteriaBuilder.asc(root.get("aaa100")), criteriaBuilder.asc(root.get("aaa102"))); + return criteriaQuery.getRestriction(); + }; + // 分页 + Pageable pageable = PageRequest.of(page, size); + Page codePage = sysCodeRepository.findAll(queryParams, pageable); + System.out.println(codePage); + codeDTO.setData(codePage.getContent()); + codeDTO.setTotal(codePage.getTotalElements()); + + return codeDTO; + } + + @Override + public JSONObject getCodeTypes(JSONObject jsonObject) { + // 获取CodeTypes start + List list = new ArrayList<>(); + // 将Set中的数据拷贝到List中 + list.addAll(jsonObject.keySet()); + List codeTypeList = codeTypeRepository.findByCodetypeInOrderByCodetypeAscKeyAsc(list); + //System.out.println(codeTypeList); + JSONObject codeTypes = new JSONObject(); + codeTypeList.stream() + .filter(ct -> jsonObject.getJSONArray(ct.getCodetype()).size() == 0) + .forEach(ct -> { + JSONObject ctObj = new JSONObject(); + ctObj.put("key", ct.getKey()); + ctObj.put("value", ct.getValue()); + if(codeTypes.getJSONArray(ct.getCodetype()) == null) { + JSONArray jsonArray = new JSONArray(); + codeTypes.put(ct.getCodetype(), jsonArray); + } + codeTypes.getJSONArray(ct.getCodetype()).add(ctObj); + }); + return jsonObject.fluentPutAll(codeTypes); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void saveCode(Aa10 aa10) { + if (aa10.getAaz093() != null) { + Aa10 aa10Temp = sysCodeRepository.findByAaa100AndAaa102(aa10.getAaa100(), aa10.getAaa102()); + if (!aa10Temp.getAaz093().equals(aa10.getAaz093())) { + throw new AppException("代码值重复!"); + } + } + sysCodeRepository.save(aa10); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteCode(Long aaz093) throws AppException { + if(aaz093 == null) { + throw new AppException("数据异常!"); + } + Aa10 aa10 = sysCodeRepository.getOne(aaz093); + if(aa10 == null) { + throw new AppException("当前数据已删除或不存在!"); + } + sysCodeRepository.delete(aa10); + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysDownloadCenterServiceImpl.java b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysDownloadCenterServiceImpl.java new file mode 100644 index 0000000..b789f44 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysDownloadCenterServiceImpl.java @@ -0,0 +1,105 @@ +package com.insigma.sys.service.impl; + +import com.insigma.framework.db.JdbcPageHelper; +import com.insigma.framework.db.PageInfo; +import com.insigma.framework.util.DtoEntityUtil; +import com.insigma.sys.dto.SysDownloadCenterDTO; +import com.insigma.sys.entity.SysDownloadCenter; +import com.insigma.sys.entity.SysDownloadLog; +import com.insigma.sys.repository.SysDownloadCenterRepository; +import com.insigma.sys.repository.SysDownloadLogRepository; +import com.insigma.sys.service.SysDownloadCenterService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; + +import java.sql.SQLException; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +/** + * @author GH + * @ClassName: SysDownloadCenterServiceImpl + * @Description: + * @version 2021/8/4 10:16 + */ +@Service("SysDownloadCenterService") +public class SysDownloadCenterServiceImpl implements SysDownloadCenterService { + + @Autowired + private SysDownloadCenterRepository sysDownloadCenterRepository; + + @Autowired + private SysDownloadLogRepository sysDownloadLogRepository; + + @Autowired + private JdbcTemplate jdbcTemplate; + + //查询 + @Override + public PageInfo queryDownloadCenterList(SysDownloadCenterDTO queryDTO, Integer page, Integer size) throws SQLException { + //用于保存查询条件 + Map params = new HashMap<>(); + //创建SQL语句 + StringBuffer sql = new StringBuffer("SELECT sdc.ID, " + + " sdc.MATERIAL_TYPE, " + + " sdc.MATERIAL_SIZE," + + " sdc.MATERIAL_NAME, " + + " sdc.UPLOAD_TIME " + + "from SYSDOWNLOADCENTER sdc " + + "where 1=1 "); + + if (!ObjectUtils.isEmpty(queryDTO.getMaterial_type())) { + //拼接在上面的SQL上 + sql.append(" and sdc.MATERIAL_TYPE = :material_type"); + params.put("material_type", queryDTO.getMaterial_type()); + } + + if (!ObjectUtils.isEmpty(queryDTO.getMaterial_name())) { + sql.append(" and sdc.MATERIAL_NAME like :material_name"); + params.put("material_name", "%" + queryDTO.getMaterial_name() + "%"); + } + sql.append(" ORDER BY sdc.UPLOAD_TIME DESC"); + + JdbcPageHelper pageHelper = new JdbcPageHelper(jdbcTemplate, page, size); + PageInfo pageInfo = pageHelper.queryPagination(sql.toString(), params, rs -> { + SysDownloadCenterDTO dto = new SysDownloadCenterDTO(); + //赋值 + dto.setMaterial_type(rs.getString("material_type")); + dto.setMaterial_size(rs.getString("material_size")); + dto.setMaterial_name(rs.getString("material_name")); + dto.setUpload_time(rs.getTimestamp("upload_time")); + dto.setId(rs.getString("id")); + return dto; + }); + return pageInfo; + } + + //新增 + @Override + @Transactional(rollbackFor = Exception.class) + public void saveDownloadCenter(SysDownloadCenterDTO sysDownloadCenterDTO) { + SysDownloadCenter sysDownloadCenter = DtoEntityUtil.trans(sysDownloadCenterDTO, SysDownloadCenter.class); + sysDownloadCenterRepository.save(sysDownloadCenter); + } + + //删除 + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(String id) { + sysDownloadCenterRepository.deleteById(id); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void saveDownloadLog(String id, String logonName) { + SysDownloadLog log = new SysDownloadLog(); + log.setFileId(id); + log.setDownloader(logonName); + log.setDownloadTime(new Date()); + sysDownloadLogRepository.saveAndFlush(log); + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysErrorServiceImpl.java b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysErrorServiceImpl.java new file mode 100644 index 0000000..a53a541 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysErrorServiceImpl.java @@ -0,0 +1,151 @@ +package com.insigma.sys.service.impl; + +import com.insigma.framework.constants.SysConst; +import com.insigma.framework.util.SysUtils; +import com.insigma.sys.entity.SysError; +import com.insigma.sys.repository.SysErrorRepository; +import com.insigma.sys.service.SysErrorService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.persistence.criteria.Predicate; +import java.util.*; + +@Service +public class SysErrorServiceImpl implements SysErrorService { + @Autowired(required = false) + private StringRedisTemplate stringRedisTemplate; + + @Autowired + private SysErrorRepository sysErrorRepository; + @Override + public List queryAllErrors() { + return sysErrorRepository.findAll(); + } + + @Override + public List findAllBySome(String serviceName, String functionName, String errorCode) { + Specification queryParams = (Specification) (root, criteriaQuery, criteriaBuilder) -> { + try { + List predicates = new ArrayList<>(); + if (null != serviceName && !"".equals(serviceName)) { + predicates.add((Predicate) criteriaBuilder.like(root.get("serviceName"), "%" +serviceName+ "%")); + } + if (null != functionName && !"".equals(functionName)) { + predicates.add((Predicate) criteriaBuilder.like(root.get("functionName"), "%" + functionName + "%")); + } + if (null != errorCode && !"".equals(errorCode)) { + predicates.add((Predicate) criteriaBuilder.like(root.get("errorCode"),"%"+errorCode+ "%")); + } + Predicate[] p = new Predicate[predicates.size()]; + criteriaQuery.where(criteriaBuilder.and(predicates.toArray(p))); + } catch (Exception e) { + throw new RuntimeException(e); + } + return criteriaQuery.getRestriction(); + }; + //Pageable pageable = PageRequest.of(page, size); + List sysErrors = sysErrorRepository.findAll(queryParams); + return sysErrors; + } + + @Override + @Transactional(rollbackFor=Exception.class) + public void save(SysError sysError) { + if (stringRedisTemplate == null) { + stringRedisTemplate = SysUtils.getBean(StringRedisTemplate.class); + } + // xxxx add + sysErrorRepository.save(sysError); + stringRedisTemplate.opsForValue().set(SysConst.ERR_CACHE_KEY + sysError.getErrorCode(), sysError.getMessage()); + + } + + @Override + @Transactional(rollbackFor=Exception.class) + public void deleteError(SysError sysError) { + if (stringRedisTemplate == null) { + stringRedisTemplate = SysUtils.getBean(StringRedisTemplate.class); + } + sysErrorRepository.delete(sysError); + stringRedisTemplate.delete(SysConst.ERR_CACHE_KEY + sysError.getErrorCode()); + } + + @Override + public SysError getSysErrorBean(Map> map) { + SysError sysError=new SysError(); + if (!map.get("id").get("value").equals("")){ + sysError.setId(map.get("id").get("value")); + } + if (!map.get("serviceName").get("value").equals("")){ + sysError.setServiceName(map.get("serviceName").get("value")); + } + if (!map.get("functionName").get("value").equals("")){ + sysError.setFunctionName(map.get("functionName").get("value")); + } + if (!map.get("errorCode").get("value").equals("")){ + sysError.setErrorCode(map.get("errorCode").get("value")); + } + if (!map.get("message").get("value").equals("")){ + sysError.setMessage(map.get("message").get("value")); + } + Date date = new Date(); + sysError.setCreateTime(date); + return sysError; + } + + @Override + public SysError getSysErrorBean2(Map map) { + SysError sysError=new SysError(); + if (!map.get("id").equals("")){ + sysError.setId(map.get("id")); + } + if (!map.get("serviceName").equals("")){ + sysError.setServiceName(map.get("serviceName")); + } + if (!map.get("functionName").equals("")){ + sysError.setFunctionName(map.get("functionName")); + } + if (!map.get("errorCode").equals("")){ + sysError.setErrorCode(map.get("errorCode")); + } + if (!map.get("message").equals("")){ + sysError.setMessage(map.get("message")); + } + Date date = new Date(); + sysError.setCreateTime(date); + return sysError; + } + + @Override + public SysError getSysErrorBean1(Map> map) { + SysError sysError=new SysError(); + if (!map.get("serviceName1").get("value").equals("")){ + sysError.setServiceName(map.get("serviceName1").get("value")); + } + if (!map.get("functionName1").get("value").equals("")){ + sysError.setFunctionName(map.get("functionName1").get("value")); + } + if (!map.get("errorCode1").get("value").equals("")){ + sysError.setErrorCode(map.get("errorCode1").get("value")); + } + if (!map.get("message1").get("value").equals("")){ + sysError.setMessage(map.get("message1").get("value")); + } + Date date = new Date(); + sysError.setCreateTime(date); + return sysError; + } + + @Override + public boolean queryByErrCode(String code) { + SysError sysError=sysErrorRepository.findByErrCode(code); + if (sysError!=null){ + return true; + } + return false; + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysFeedbackServiceImpl.java b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysFeedbackServiceImpl.java new file mode 100644 index 0000000..14125ee --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysFeedbackServiceImpl.java @@ -0,0 +1,138 @@ +package com.insigma.sys.service.impl; + +import com.insigma.framework.db.JdbcPageHelper; +import com.insigma.framework.db.PageInfo; +import com.insigma.framework.exception.AppException; +import com.insigma.framework.util.DtoEntityUtil; +import com.insigma.sys.common.CurrentUserService; +import com.insigma.sys.dto.FeedbackAnswerDTO; +import com.insigma.sys.dto.FeedbackDTO; +import com.insigma.sys.entity.SysFeedback; +import com.insigma.sys.entity.SysFeedbackAnswer; +import com.insigma.sys.entity.SysUser; +import com.insigma.sys.repository.SysFeedbackAnswerRepository; +import com.insigma.sys.repository.SysFeedbackRepository; +import com.insigma.sys.repository.SysUserRepository; +import com.insigma.sys.service.SysFeedbackService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; + +import java.sql.SQLException; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author yinjh + * @version 2022/2/23 + */ +@Service +public class SysFeedbackServiceImpl implements SysFeedbackService { + + @Autowired + private JdbcTemplate jdbcTemplate; + + @Autowired + private SysFeedbackRepository sysFeedbackRepository; + + @Autowired + private SysFeedbackAnswerRepository sysFeedbackAnswerRepository; + + @Autowired + private SysUserRepository sysUserRepository; + + @Autowired + private CurrentUserService currentUserService; + + @Override + public PageInfo page(FeedbackDTO queryDTO, Integer page, Integer size) throws SQLException { + SysUser sysUser = currentUserService.getCurrentUser(); + Map params = new HashMap<>(); + StringBuffer sql = new StringBuffer(); + sql.append("select sf.*, su.displayname from sysfeedback sf, sysuser su where sf.userid=su.userid"); + if (!ObjectUtils.isEmpty(queryDTO.getTitle())) { + sql.append(" and sf.title like :title"); + params.put("title", "%" + queryDTO.getTitle() + "%"); + } + if (!ObjectUtils.isEmpty(queryDTO.getAnswered())) { + sql.append(" and sf.answered = :answered"); + params.put("answered", queryDTO.getAnswered()); + } + if (queryDTO.getDateRange() != null && queryDTO.getDateRange().size() == 2) { + sql.append(" and sf.create_time > :startDate and sf.create_time < :endDate"); + params.put("startDate", queryDTO.getDateRange().get(0)); + params.put("endDate", queryDTO.getDateRange().get(1)); + } + if (!"1".equals(sysUser.getUserType())) { + // 不是超级管理员,则只能看到自己提的建议 + sql.append(" and su.userid = :userId"); + params.put("userId", sysUser.getUserId()); + } + sql.append(" order by sf.create_time desc"); + JdbcPageHelper pageHelper = new JdbcPageHelper(jdbcTemplate, page, size); + PageInfo pageInfo = pageHelper.queryPagination(sql.toString(), params, rs -> { + FeedbackDTO feedbackDTO = new FeedbackDTO(); + feedbackDTO.setId(rs.getString("id")); + feedbackDTO.setTitle(rs.getString("title")); + feedbackDTO.setAnswered(rs.getString("answered")); + feedbackDTO.setCreateTime(rs.getTimestamp("create_time")); + feedbackDTO.setDisplayName(rs.getString("displayname")); + return feedbackDTO; + }); + return pageInfo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void save(FeedbackDTO feedbackDTO) { + SysUser sysUser = currentUserService.getCurrentUser(); + if ("1".equals(sysUser.getUserType())) { + throw new AppException("超级管理员不可新增意见反馈!"); + } + SysFeedback feedback = new SysFeedback(); + feedback.setTitle(feedbackDTO.getTitle()); + feedback.setContent(feedbackDTO.getContent()); + feedback.setUserId(sysUser.getUserId()); + feedback.setCreateTime(new Date()); + feedback.setAnswered("0"); + sysFeedbackRepository.saveAndFlush(feedback); + } + + @Override + public FeedbackDTO get(String id) { + FeedbackDTO feedbackDTO = new FeedbackDTO(); + SysFeedback sysFeedback = sysFeedbackRepository.findById(id).orElseThrow(() -> new AppException("意见不存在!")); + feedbackDTO.setId(sysFeedback.getId()); + feedbackDTO.setTitle(sysFeedback.getTitle()); + feedbackDTO.setContent(sysFeedback.getContent()); + feedbackDTO.setCreateTime(sysFeedback.getCreateTime()); + feedbackDTO.setUserId(sysFeedback.getUserId()); + SysUser sysUser = sysUserRepository.findById(sysFeedback.getUserId()).orElseThrow(() -> new AppException("用户不存在")); + feedbackDTO.setDisplayName(sysUser.getDisplayName()); + List answerList = sysFeedbackAnswerRepository.findAllByFeedbackIdOrderByCreateTimeAsc(id); + feedbackDTO.setAnswerList(DtoEntityUtil.trans(answerList, FeedbackAnswerDTO.class)); + return feedbackDTO; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void saveAnswer(FeedbackAnswerDTO feedbackAnswerDTO) { + SysUser sysUser = currentUserService.getCurrentUser(); + String type = "1".equals(sysUser.getUserType()) ? "1" : "0"; + SysFeedback sysFeedback = sysFeedbackRepository.findById(feedbackAnswerDTO.getFeedbackId()).orElseThrow(() -> new AppException("意见不存在!")); + sysFeedback.setAnswered(type); + sysFeedbackRepository.saveAndFlush(sysFeedback); + + SysFeedbackAnswer sysFeedbackAnswer = new SysFeedbackAnswer(); + sysFeedbackAnswer.setContent(feedbackAnswerDTO.getContent()); + sysFeedbackAnswer.setCreateTime(new Date()); + sysFeedbackAnswer.setFeedbackId(feedbackAnswerDTO.getFeedbackId()); + sysFeedbackAnswer.setUserId(sysUser.getUserId()); + sysFeedbackAnswer.setType(type); + sysFeedbackAnswerRepository.saveAndFlush(sysFeedbackAnswer); + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysFunctionDocServiceImpl.java b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysFunctionDocServiceImpl.java new file mode 100644 index 0000000..a010dbc --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysFunctionDocServiceImpl.java @@ -0,0 +1,69 @@ +package com.insigma.sys.service.impl; +import com.insigma.framework.exception.AppException; +import com.insigma.framework.util.DtoEntityUtil; +import com.insigma.sys.common.CurrentUserService; +import com.insigma.sys.dto.SysFunctionDocDTO; +import com.insigma.sys.entity.SysFunctionDoc; +import com.insigma.sys.repository.SysFunctionDocRepository; +import com.insigma.sys.service.SysFunctionDocService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; + +import java.util.Date; +import java.util.List; + +@Service +public class SysFunctionDocServiceImpl implements SysFunctionDocService { + + @Autowired + private SysFunctionDocRepository sysFunctionDocRepository; + @Autowired + private CurrentUserService currentUserService; + + + @Override + @Transactional(rollbackFor = Exception.class) + public void saveDoc(SysFunctionDocDTO sysFunctionDocDTO) { + String overviewStr = sysFunctionDocDTO.getOverview(); + String detailed_viewStr = sysFunctionDocDTO.getDetailed_view(); + Long functionid = sysFunctionDocDTO.getFunctionid(); + //检测传入数据是否为空 + if(ObjectUtils.isEmpty(overviewStr)||ObjectUtils.isEmpty(detailed_viewStr)||functionid==null ) + throw new AppException("传入数据异常!"); + try { + SysFunctionDoc sysFunctionDoc = DtoEntityUtil.trans(sysFunctionDocDTO, SysFunctionDoc.class); + //设置添加/修改时间 + sysFunctionDoc.setUpdate_time(new Date()); + //设置修改人名称 + String logonName = currentUserService.getCurrentUser().getLogonName(); + sysFunctionDoc.setUpdate_name(logonName); + sysFunctionDocRepository.save(sysFunctionDoc); + }catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public SysFunctionDocDTO queryByFunctionID(Long functionid) { + List sysFunctionDocList=sysFunctionDocRepository.findByFunctionid(functionid); + if (sysFunctionDocList.size() > 0) { + SysFunctionDoc sysFunctionDoc = sysFunctionDocList.get(0); + return DtoEntityUtil.trans(sysFunctionDoc, SysFunctionDocDTO.class); + } + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteByFunctionid(Long functionid) { + try { + sysFunctionDocRepository.deleteByFunctionid(functionid); + }catch (Exception e) { + e.printStackTrace(); + } + } + +} + diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysGuideServiceImpl.java b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysGuideServiceImpl.java new file mode 100644 index 0000000..c3caa3b --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysGuideServiceImpl.java @@ -0,0 +1,340 @@ +package com.insigma.sys.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.insigma.business.demo.entity.DemoPerson; +import com.insigma.framework.db.JdbcPageHelper; +import com.insigma.framework.db.PageInfo; +import com.insigma.framework.util.DtoEntityUtil; +import com.insigma.framework.web.securities.service.SysCacheService; +import com.insigma.sys.dto.SysGuideDTO; +import com.insigma.sys.entity.Aa10; +import com.insigma.sys.entity.SysGuide; +import com.insigma.sys.entity.SysGuideHot; +import com.insigma.sys.entity.SysGuideType; +import com.insigma.sys.repository.SysCodeRepository; +import com.insigma.sys.repository.SysGuideHotRepository; +import com.insigma.sys.repository.SysGuideRepository; +import com.insigma.sys.repository.SysGuideTypeRepository; +import com.insigma.sys.service.SysGuideService; +import lombok.SneakyThrows; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; + +import java.sql.SQLException; +import java.util.*; +import java.util.stream.Collectors; + +@Service("SysGuideService") +public class SysGuideServiceImpl implements SysGuideService { + + @Autowired + private SysGuideRepository sysGuideRepository; + + @Autowired + private SysGuideHotRepository sysGuideHotRepository; + + @Autowired + private JdbcTemplate jdbcTemplate; + + @Autowired + private SysCacheService sysCacheService; + + @Autowired + private SysCodeRepository sysCodeRepository; + + @Autowired + private SysGuideTypeRepository sysGuideTypeRepository; + + + /** + * 分页查询 + * + * @param queryDTO + * @param page + * @param size + * @return + */ + @Override + public PageInfo queryGuideList(SysGuideDTO queryDTO, Integer page, Integer size) throws SQLException { + //用于保存查询条件 + Map params = new HashMap<>(); + + //创建SQL语句 + StringBuffer sql = new StringBuffer("select sg.QUESTION_TYPE, " + + " sg.QUESTION_NAME, " + + " sg.ID," + + " sg.CREATE_TIME, " + + " sgh.HOT_COUNT " + + "from SYSGUIDE sg, " + + " SYSGUIDEHOT sgh " + + "where sg.ID=sgh.ID "); + + if (!ObjectUtils.isEmpty(queryDTO.getQuestion_type())) { + //拼接在上面的SQL上 + sql.append(" and sg.QUESTION_TYPE = :question_type"); + params.put("question_type", queryDTO.getQuestion_type()); + } + + if (!ObjectUtils.isEmpty(queryDTO.getQuestion_name())) { + sql.append(" and sg.QUESTION_NAME like :question_name"); + params.put("question_name", "%" + queryDTO.getQuestion_name() + "%"); + } + + sql.append(" ORDER BY sg.CREATE_TIME DESC"); + + //热度排序 可以设置当某个字段为不同的状态的时候就按不同的方法去排序 +// s.append(" ORDER BY sgh.HOT_COUNT DESC"); + + JdbcPageHelper pageHelper = new JdbcPageHelper(jdbcTemplate, page, size); + PageInfo pageInfo = pageHelper.queryPagination(sql.toString(), params, rs -> { + SysGuideDTO dto = new SysGuideDTO(); + //赋值 + dto.setHot_count(Long.parseLong(rs.getString("hot_count"))); + dto.setQuestion_type(rs.getString("question_type")); + dto.setQuestion_name(rs.getString("question_name")); + dto.setCreate_time(rs.getTimestamp("create_time")); + dto.setId(rs.getString("id")); + return dto; + }); + return pageInfo; + } + + + /** + * 查询 + * + * @param id + * @return + */ + @Override + public SysGuideDTO queryGuide(String id) { + //根据id查询数据 要不然为空 + SysGuide guide = sysGuideRepository.findById(id).orElse(null); + SysGuideDTO dto = DtoEntityUtil.trans(guide, SysGuideDTO.class); + return dto; + } + + /** + * 批量删除 + * + * @param list + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteGuides(List list) { + List guideList = DtoEntityUtil.trans(list, SysGuide.class); + List ids = new ArrayList<>(); + for (SysGuide sysGuide : guideList) { + SysGuideHot sysGuideHot = new SysGuideHot(); + sysGuideHot.setId(sysGuide.getId()); + ids.add(sysGuideHot); + } + //删除sysguide表数据 + sysGuideRepository.deleteInBatch(guideList); + + //删除与其对应的sysguidehot表数据 + sysGuideHotRepository.deleteAll(ids); + } + + + /** + * 保存 + * + * @param sysGuideDTO + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void saveGuide(SysGuideDTO sysGuideDTO) { + + String answer_content = sysGuideDTO.getAnswer_content(); + + if (!ObjectUtils.isEmpty(answer_content)) { + String all = answer_content.replaceAll("\n", "
"); + sysGuideDTO.setAnswer_content(all); + }; + + String answer_type = sysGuideDTO.getAnswer_type(); + + if (answer_type.equals("0")) {//文本 + sysGuideDTO.setLink_url(""); + } + if (answer_type.equals("1")) {//链接 + sysGuideDTO.setAnswer_content(""); + } + SysGuide sysGuide = DtoEntityUtil.trans(sysGuideDTO, SysGuide.class); + + //设置添加/修改时间 + sysGuide.setCreate_time(new Date()); + + //save方法回去判断是否含有id 有进行修改 反之进行添加 + SysGuide guide = sysGuideRepository.save(sysGuide); + SysGuideHot guideHot = sysGuideHotRepository.findById(guide.getId()).orElse(null); + SysGuideHot sysGuideHot = new SysGuideHot(); + if (guideHot == null) {//没数据表示 新增 + sysGuideHot.setHot_count(0); + } else {//有数据表示 编辑 + long hot_count = guideHot.getHot_count(); + sysGuideHot.setHot_count(hot_count); + } + sysGuideHot.setId(guide.getId()); + sysGuideHotRepository.save(sysGuideHot); + // 清除菜单缓存 +// sysCacheService.clearFunctionCache(sysGuideDTO.getAnswer_content()); +// sysCacheService.clearFunctionCache(sysGuideDTO.getLink_url()); + + } + + + /** + * 删除 + * + * @param id + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(String id) { + sysGuideRepository.deleteById(id); + sysGuideHotRepository.deleteById(id); + } + + /** + * 热度 + * + * @param id + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void hot(String id) { + SysGuideHot sysGuideHot = sysGuideHotRepository.findById(id).orElse(null); + sysGuideHot.setHot_count(sysGuideHot.getHot_count() + 1L); + sysGuideHotRepository.save(sysGuideHot); + } + + /** + * @return + * @Description: 根据不同选择来查询数据 + * @author GH + * @version 2021/7/23 15:05 + */ + @SneakyThrows + @Override + public PageInfo findByQuestion_type(String question_type, String sort, String str, Integer page, Integer size) { + + //用于保存查询条件 + Map params = new HashMap<>(); + + //创建SQL语句 + StringBuffer sql = new StringBuffer("select sg.QUESTION_TYPE, " + + " sg.QUESTION_NAME, " + + " sg.ID," + + " sgh.HOT_COUNT " + + "from SYSGUIDE sg, " + + " SYSGUIDEHOT sgh " + + "where sg.ID=sgh.ID "); + + if (!ObjectUtils.isEmpty(question_type)) { + //拼接在上面的SQL上 + sql.append(" and sg.QUESTION_TYPE = :question_type"); + params.put("question_type", question_type); + } + + //其他选项(关键字) + if (!ObjectUtils.isEmpty(str)) { + //拼接在上面的SQL上 + sql.append(" and sg.QUESTION_NAME like :question_name"); + params.put("question_name", "%" + str + "%"); + } + + //排序 + if (!ObjectUtils.isEmpty(sort)) { + if (sort.equals("热度")) { + sql.append(" ORDER BY sgh.HOT_COUNT DESC"); + } else if (sort.equals("时间")) { + sql.append(" ORDER BY sg.CREATE_TIME DESC"); + } + } else { + sql.append(" ORDER BY sg.CREATE_TIME DESC"); + } + + JdbcPageHelper pageHelper = new JdbcPageHelper(jdbcTemplate, page, size); + PageInfo pageInfo = pageHelper.queryPagination(sql.toString(), params, rs -> { + SysGuideDTO dto = new SysGuideDTO(); + //赋值 + dto.setHot_count(Long.parseLong(rs.getString("hot_count"))); + + Aa10 aa10 = sysCodeRepository.findByAaa100AndAaa102("GUIDE_QUESTION_TYPE", rs.getString("question_type")); + dto.setQuestion_type(aa10.getAaa103()); + dto.setQuestion_name(rs.getString("question_name")); + dto.setId(rs.getString("id")); + return dto; + }); + return pageInfo; + } + + /** + * @return + * @Description: 查询首页引导信息 + * @author GH + * @version 2021/7/30 13:10 + */ + @Override + public List> findFrontPage() { + //查询所有问题类型 +// List question_type = sysGuideRepository.findQuestion_type(); + + List sysGuideTypes = sysGuideTypeRepository.findType_name(); + List question_type = sysGuideTypes.stream().map(o -> o.getType_code()).collect(Collectors.toList()); + + List> arrayList = new ArrayList<>(); + + for (String s : question_type) {//0 {} 1{} 2{} +// Aa10 type = sysCodeRepository.findByAaa100AndAaa102("GUIDE_QUESTION_TYPE", s); + SysGuideType sysGuideType = sysGuideTypeRepository.findById(s).orElse(null); + //键是类型 值是问题名称 + HashMap map = new HashMap<>(); + //所有的问题名称 + List list = new ArrayList<>(); + //每个类型的所有内容 + List sysGuides = sysGuideRepository.findByQuestion_type(s); + for (SysGuide sysGuide : sysGuides) { + SysGuideDTO sysGuideDTO = new SysGuideDTO(); + String name = sysGuide.getQuestion_name(); + String id = sysGuide.getId(); + sysGuideDTO.setId(id); + sysGuideDTO.setQuestion_name(name); + list.add(sysGuideDTO); + } +// map.put("img", sysGuideType.getType_icon()); + map.put("img", ""); + map.put("type", sysGuideType.getType_name()); + map.put("question_type", s); + map.put("question_name", list); + arrayList.add(map); + } + + return arrayList; + } + + /** + * @return + * @Description: 查询详细页面信息 + * @author GH + * @version 2021/7/30 13:10 + */ + @Override + public SysGuideDTO findDetailsPage(String id) { + //根据id查询数据 要不然为空 + SysGuide guide = sysGuideRepository.findById(id).orElse(null); + SysGuideHot sysGuideHot = sysGuideHotRepository.findById(id).orElse(null); + String question_type = guide.getQuestion_type(); + Aa10 type = sysCodeRepository.findByAaa100AndAaa102("GUIDE_QUESTION_TYPE", question_type); + SysGuideDTO dto = DtoEntityUtil.trans(guide, SysGuideDTO.class); + dto.setQuestion_type(type.getAaa103()); + dto.setHot_count(sysGuideHot.getHot_count()); + return dto; + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysHashServiceImpl.java b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysHashServiceImpl.java new file mode 100644 index 0000000..7786245 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysHashServiceImpl.java @@ -0,0 +1,129 @@ +package com.insigma.sys.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.util.IDUtil; +import com.insigma.framework.util.SignUtil; +import com.insigma.sys.entity.SysUser; +import com.insigma.sys.service.SysHashService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ReflectionUtils; + +import javax.persistence.EntityManager; +import java.lang.reflect.Field; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Hash校验服务类 + * + * @author yinjh + * @version 2021/8/19 + */ +@Service +public class SysHashServiceImpl implements SysHashService { + + @Value("${sys.hash.enabled:false}") + private boolean hashEnabled; + + @Autowired + private NamedParameterJdbcTemplate namedParameterJdbcTemplate; + + @Autowired + private EntityManager entityManager; + + + @Override + @Transactional(rollbackFor = Exception.class) + public void saveHash(Object entity) { + if (!hashEnabled) { + return; + } +// Object serializableId = entityManager.getEntityManagerFactory().getPersistenceUnitUtil().getIdentifier(entity); + Map params = initParams(entity); + String updateSql = "update syshash set record_hash=:recordHash where record_id=:recordId and record_type=:recordType"; + String insertSql = "insert into syshash(id, record_id, record_hash, record_type) values(:id, :recordId, :recordHash, :recordType)"; + int result = namedParameterJdbcTemplate.update(updateSql, params); + if (result == 0) { + params.put("id", IDUtil.generateUUID()); + namedParameterJdbcTemplate.update(insertSql, params); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void saveAllHash(List entities) { + for (Object entity : entities) { + saveHash(entity); + } + } + + @Override + public boolean checkHash(Object entity) { + if (!hashEnabled) { + return true; + } + Map params = initParams(entity); + String selectSql = "select record_hash from syshash where record_id=:recordId and record_type=:recordType"; + List list = namedParameterJdbcTemplate.query(selectSql, params, (rs, i) -> rs.getString("record_hash")); + if (list.size() > 0) { + if (list.get(0).equals(params.get("recordHash"))) { + return true; + } + } + return false; + } + + private Map initParams(Object entity) { + Object serializableId = entityManager.getEntityManagerFactory().getPersistenceUnitUtil().getIdentifier(entity); + entity = entityManager.find(entity.getClass(), serializableId); + Map map = JSONObject.parseObject(JSONObject.toJSONString(entity), Map.class); + excludeSpecialKey(entity, map); + formatSpecialKey(entity, map); + Map params = new HashMap<>(); + params.put("recordHash", SignUtil.getSignCode(map)); + params.put("recordId", String.valueOf(serializableId)); + params.put("recordType", entity.getClass().getSimpleName()); + return params; + } + + /** + * 排除特殊key + * @param entity + * @param map + */ + private void excludeSpecialKey(Object entity, Map map) { + if (SysUser.class == entity.getClass()) { + map.remove("failNO"); + } + } + + /** + * 格式化特殊类型的key + * @param entity + * @param map + */ + private void formatSpecialKey(Object entity, Map map) { + try { + Field[] fields = entity.getClass().getDeclaredFields(); + for (Field field : fields) { + ReflectionUtils.makeAccessible(field); + if (field.getType().isAssignableFrom(Date.class)) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + if (map.containsKey(field.getName())) { + map.put(field.getName(), sdf.format(field.get(entity))); + } + } + } + } catch (Exception e) { + throw new RuntimeException("格式化特殊key失败!", e); + } + } + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysIdMappingImpl.java b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysIdMappingImpl.java new file mode 100644 index 0000000..ca7727f --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysIdMappingImpl.java @@ -0,0 +1,36 @@ +package com.insigma.sys.service.impl; + +import com.insigma.sys.entity.SysIdMapping; +import com.insigma.sys.repository.SysIdMappingRespository; +import com.insigma.sys.service.SysIdMappingService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class SysIdMappingImpl implements SysIdMappingService { + @Autowired + private SysIdMappingRespository sysIdMappingRespository; + @Autowired + private JdbcTemplate jdbcTemplate; + + @Override + @Transactional(rollbackFor=Exception.class) + public void saveGroupidToOrgid(SysIdMapping sysIdMapping) { + if(sysIdMapping.getSELFID() == null || sysIdMapping.getSELFID().intValue() == 0){ + Long selfid = jdbcTemplate.queryForObject("select SYS_IDMAPPING.nextval from dual",Long.class); + sysIdMapping.setSELFID(selfid.intValue()); + } + sysIdMappingRespository.save(sysIdMapping); + } + @Override + public SysIdMapping queryByTid(String tid) { + return sysIdMappingRespository.findByTID(tid); + } + + @Override + public void deleteAll() { + sysIdMappingRespository.deleteAll(); + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysMessageServiceImpl.java b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysMessageServiceImpl.java new file mode 100644 index 0000000..1798ebe --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysMessageServiceImpl.java @@ -0,0 +1,325 @@ +package com.insigma.sys.service.impl; + +import com.insigma.framework.db.JdbcPageHelper; +import com.insigma.framework.db.PageInfo; +import com.insigma.framework.util.IDUtil; +import com.insigma.sys.dto.LazyTreeNode; +import com.insigma.sys.dto.MessageDTO; +import com.insigma.sys.entity.SysUser; +import com.insigma.sys.service.SysMessageService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.BatchPreparedStatementSetter; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; + +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.util.*; + +/** + * Created by yinjh on 2020/6/15. + */ +@Service +public class SysMessageServiceImpl implements SysMessageService { + + @Autowired + private JdbcTemplate jdbcTemplate; + + @Override + @Transactional(rollbackFor = Exception.class) + public void save(String currentUserId, MessageDTO messageDTO) { + String sql = "insert into sysmessage(message_id, title, content, create_time, creator, type) values(?, ?, ?, ?, ?, ?)"; + jdbcTemplate.update(sql, ps -> { + ps.setString(1, messageDTO.getMessageId()); + ps.setString(2, messageDTO.getTitle()); + ps.setString(3, messageDTO.getContent()); + ps.setTimestamp(4, new Timestamp(System.currentTimeMillis())); + ps.setString(5, currentUserId); + ps.setString(6, messageDTO.getType()); + }); + if ("1".equals(messageDTO.getType())) { + insertSysUserMessageList(messageDTO.getMessageId(), messageDTO.getUserIds()); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(String currentUserId, MessageDTO messageDTO) { + String sql = "update sysmessage set title = ?, content = ?, create_time = ?, creator = ?, type = ? where message_id = ?"; + jdbcTemplate.update(sql, ps -> { + ps.setString(1, messageDTO.getTitle()); + ps.setString(2, messageDTO.getContent()); + ps.setTimestamp(3, new Timestamp(System.currentTimeMillis())); + ps.setString(4, currentUserId); + ps.setString(5, messageDTO.getType()); + ps.setString(6, messageDTO.getMessageId()); + }); + sql = "delete from sysusermessage where message_id = ?"; + jdbcTemplate.update(sql, ps -> ps.setString(1, messageDTO.getMessageId())); + if ("1".equals(messageDTO.getType())) { + insertSysUserMessageList(messageDTO.getMessageId(), messageDTO.getUserIds()); + } + } + + @Override + public PageInfo getSysMessageList(SysUser sysUser, MessageDTO queryDTO, Integer page, Integer size, boolean isManage) throws SQLException { + Map params = new HashMap<>(); + params.put("userId", sysUser.getUserId()); + StringBuffer sql = new StringBuffer(); + if (isManage) { + sql.append("select t.message_id, t.title, t.content, t.create_time, t.type, su.displayname" + + " from sysmessage t, sysuser su" + + " where t.creator=su.userid "); + if (!"1".equals(sysUser.getUserType())) { + sql.append(" and su.userid=:userId"); + } + } else { + sql.append("select t.* from (select sm.message_id, " + + " sm.title, " + + " sm.content, " + + " sm.create_time, " + + " sm.type, " + + " su.displayname, " + + " sum.flag " + + "from sysmessage sm, " + + " sysusermessage sum, " + + " sysuser su " + + "where sm.message_id = sum.message_id " + + " and sm.creator = su.userid " + + " and sum.user_id = :userId " + + " and sm.type = '1' " + + "union all " + + "select sm.message_id, " + + " sm.title, " + + " sm.content, " + + " sm.create_time, " + + " sm.type, " + + " su.displayname, " + + " case when sum.flag is null then '0' end " + + "from sysuser su, sysmessage sm left join sysusermessage sum " + + " on sm.message_id = sum.message_id and sum.user_id = :userId " + + "where sm.creator = su.userid and sm.type = '0') t where 1=1 "); + } + if (!ObjectUtils.isEmpty(queryDTO.getTitle())) { + sql.append(" and t.title like :title"); + params.put("title", "%" + queryDTO.getTitle() + "%"); + } + if (!ObjectUtils.isEmpty(queryDTO.getFlag())) { + sql.append(" and t.flag = :flag"); + params.put("flag", queryDTO.getFlag()); + } + if (queryDTO.getStartDate() != null) { + sql.append(" and t.create_time > :startDate"); + params.put("startDate", queryDTO.getStartDate()); + } + if (queryDTO.getEndDate() != null) { + sql.append(" and t.create_time < :endDate"); + Calendar c = Calendar.getInstance(); + c.setTime(queryDTO.getEndDate()); + c.add(Calendar.DAY_OF_MONTH, 1); + params.put("endDate", c.getTime()); + } + sql.append(" order by t.create_time desc, t.message_id"); + JdbcPageHelper pageHelper = new JdbcPageHelper(jdbcTemplate, page, size); + PageInfo pageInfo = pageHelper.queryPagination(sql.toString(), params, rs -> { + MessageDTO dto = new MessageDTO(); + dto.setMessageId(rs.getString("message_id")); + dto.setTitle(rs.getString("title")); + dto.setType(rs.getString("type")); + if (ObjectUtils.isEmpty(dto.getType())) { + dto.setType("0"); + } +// dto.setContent(rs.getString("content")); + dto.setCreator(rs.getString("displayname")); + dto.setCreateTime(rs.getTimestamp("create_time")); + if (!isManage) { + dto.setFlag(rs.getString("flag")); + } + return dto; + }); + return pageInfo; + } + + @Override + public MessageDTO getSysMessage(String messageId) { + String sql = "select sm.message_id, " + + " sm.title, " + + " sm.content, " + + " sm.create_time, " + + " sm.type, " + + " su.displayname " + + "from sysmessage sm, " + + " sysuser su " + + "where sm.creator=su.userid" + + " and sm.message_id=?"; + List list = jdbcTemplate.query(sql, new Object[] {messageId}, (rs, i) -> { + MessageDTO dto = new MessageDTO(); + dto.setMessageId(rs.getString("message_id")); + dto.setTitle(rs.getString("title")); + dto.setContent(rs.getString("content")); + dto.setType(rs.getString("type")); + if (ObjectUtils.isEmpty(dto.getType())) { + dto.setType("0"); + } + dto.setCreator(rs.getString("displayname")); + dto.setCreateTime(rs.getTimestamp("create_time")); + return dto; + }); + if (list != null && list.size() > 0) { + return list.get(0); + } + return null; + } + + @Override + public MessageDTO getSysMessage(String userId, String messageId) { + String sql = "select sm.message_id, " + + " sm.title, " + + " sm.content, " + + " sm.create_time, " + + " sm.type, " + + " su.displayname, " + + " case when sum.flag is null then '-1' else sum.flag end as flag " + + "from sysuser su, " + + " sysmessage sm left join sysusermessage sum " + + " on sm.message_id = sum.message_id and sum.user_id = ? " + + "where sm.creator=su.userid and sm.message_id=? "; + List list = jdbcTemplate.query(sql, new Object[] {userId, messageId}, (rs, i) -> { + MessageDTO dto = new MessageDTO(); + dto.setMessageId(rs.getString("message_id")); + dto.setTitle(rs.getString("title")); + dto.setContent(rs.getString("content")); + dto.setType(rs.getString("type")); + dto.setCreator(rs.getString("displayname")); + dto.setCreateTime(rs.getTimestamp("create_time")); + dto.setFlag(rs.getString("flag")); + return dto; + }); + if (list != null && list.size() > 0) { + return list.get(0); + } + return null; + } + + @Override + public MessageDTO getSysUserMessage(String userId, String messageId) { + String sql = "select sm.message_id, " + + " sm.title, " + + " sm.content, " + + " sm.create_time, " + + " sm.type, " + + " su.displayname " + + "from sysuser su, " + + " sysmessage sm, sysusermessage sum " + + "where sm.message_id = sum.message_id and (sum.user_id = ? or sm.creator = ?)" + + " and sm.creator=su.userid and sm.message_id=? "; + List list = jdbcTemplate.query(sql, new Object[] {userId, userId, messageId}, (rs, i) -> { + MessageDTO dto = new MessageDTO(); + dto.setMessageId(rs.getString("message_id")); + dto.setTitle(rs.getString("title")); + dto.setContent(rs.getString("content")); + dto.setType(rs.getString("type")); + dto.setCreator(rs.getString("displayname")); + dto.setCreateTime(rs.getTimestamp("create_time")); + return dto; + }); + if (list != null && list.size() > 0) { + return list.get(0); + } + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateFlag(String userId, String messageId) { + String sql = "update sysusermessage set flag='1' where user_id=? and message_id=?"; + int cnt = jdbcTemplate.update(sql, ps -> { + ps.setString(1, userId); + ps.setString(2, messageId); + }); + if (cnt == 0) { + sql = "select type from sysmessage where message_id = ?"; + List list = jdbcTemplate.query(sql, new Object[]{messageId}, (rs, i) -> rs.getString("type")); + if (list != null && list.size() > 0) { + String type = list.get(0); + if ("0".equals(type)) { + sql = "insert into sysusermessage(id_, user_id, message_id, flag) values(?, ?, ?, ?)"; + jdbcTemplate.update(sql, ps -> { + ps.setString(1, IDUtil.generateUUID()); + ps.setString(2, userId); + ps.setString(3, messageId); + ps.setString(4, "1"); + }); + } + } + + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteSysMessage(String messageId) { + String sql = "delete from sysmessage where message_id=?"; + jdbcTemplate.update(sql, ps -> ps.setString(1, messageId)); + sql = "delete from sysusermessage where message_id=?"; + jdbcTemplate.update(sql, ps -> ps.setString(1, messageId)); + } + + @Override + public List> getUserOrgTree(String parentId) { + List params = new ArrayList<>(); + StringBuffer orgSql = new StringBuffer("select * from sysorg where "); + if (ObjectUtils.isEmpty(parentId)) { + orgSql.append("parentid is null"); + } else { + orgSql.append("parentid = ?"); + params.add(parentId); + } + orgSql.append(" order by orgorder, orgid"); + List> orgList = jdbcTemplate.query(orgSql.toString(), params.toArray(), (rs, i) -> { + LazyTreeNode node = new LazyTreeNode<>(); + node.setId(rs.getString("orgid")); + node.setParent(rs.getString("parentid")); + node.setLabel(rs.getString("orgname")); + node.setExtra("1"); + node.setIsLeaf(false); + return node; + }); + List> userList = new ArrayList<>(); + if (!ObjectUtils.isEmpty(parentId)) { + String sql = "select * from sysuser where orgid=? order by logonname"; + userList = jdbcTemplate.query(sql, new Object[] {parentId}, (rs, i) -> { + LazyTreeNode node = new LazyTreeNode<>(); + node.setId(rs.getString("userid")); + node.setParent(rs.getString("orgid")); + node.setLabel(rs.getString("displayname")); + node.setExtra("2"); + node.setIsLeaf(true); + return node; + }); + } + orgList.addAll(userList); + return orgList; + } + + private void insertSysUserMessageList(String messageId, List userIds) { + String sql = "insert into sysusermessage(id_, user_id, message_id, flag) values(?, ?, ?, ?)"; + jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() { + @Override + public void setValues(PreparedStatement ps, int i) throws SQLException { + ps.setString(1, IDUtil.generateUUID()); + ps.setString(2, userIds.get(i)); + ps.setString(3, messageId); + ps.setString(4, "0"); + } + + @Override + public int getBatchSize() { + return userIds.size(); + } + }); + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysOperateLogServiceImpl.java b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysOperateLogServiceImpl.java new file mode 100644 index 0000000..312ad19 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysOperateLogServiceImpl.java @@ -0,0 +1,105 @@ +package com.insigma.sys.service.impl; + +import com.insigma.framework.db.JdbcPageHelper; +import com.insigma.framework.db.PageInfo; +import com.insigma.sys.common.CurrentUserService; +import com.insigma.sys.common.SysManageMode; +import com.insigma.sys.dto.SysOperateLogDTO; +import com.insigma.sys.entity.SysRole; +import com.insigma.sys.entity.SysUser; +import com.insigma.sys.service.RoleService; +import com.insigma.sys.service.SysOperateLogService; +import com.insigma.web.support.util.SysFunctionManager; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; + +import java.sql.SQLException; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Slf4j +@Service +public class SysOperateLogServiceImpl implements SysOperateLogService { + @Autowired + private JdbcTemplate jdbcTemplate; + @Autowired + RoleService roleService; + @Autowired + private CurrentUserService currentUserService; + @Autowired + private SysManageMode sysManageMode; + @Value("${insiis.log.show.all:true}") + private Boolean logShowAll; + @Override + public PageInfo querySysOperateLogList(SysOperateLogDTO queryDTO, Integer page, Integer size) throws SQLException { + Map params = new HashMap<>(); + SysUser sysUser = currentUserService.getCurrentUser(); + String userId = sysUser.getUserId(); + List roleList = roleService.queryRoleByUserId(userId); + StringBuffer sql = new StringBuffer("select dm.* from (select db.*, sy.title\n" + + " from (select dp.*, up.usertype, up.logonname, up.displayname, up.orgid\n" + + " from sysoperatelog dp left join sysuser up \n" + + " on dp.userid = up.userid) db\n" + + " left join sysfunction sy\n" + + " on db.functionid = sy.functionid) dm where 1=1 "); + if (sysManageMode.isTripleMode() == true && "1".equals(currentUserService.getCurrentUser().getUserType())){ + PageInfo pageInfo =new PageInfo(); + pageInfo.setTotal(Long.parseLong("0")); + pageInfo.setData(null); + return pageInfo;//系统管理员启用三员制 无法查看数据 + } + if (sysManageMode.isTripleMode() == true){//启用三员制 + // 当登录用户的角色为安全管理员 + if (roleList.stream().anyMatch(role -> role.getRoletype().equals("3"))) { + sql.append(" and (dm.usertype = '6' or dm.usertype = '4' )"); + } + // 当登录用户的角色为审计管理员 + if (roleList.stream().anyMatch(role -> role.getRoletype().equals("4"))) { + sql.append(" and (dm.usertype = '1' or dm.usertype = '5' )"); + } + + } else { + if (!logShowAll) { + if ("2".equals(sysUser.getUserType())) { + // 行政区管理员 + sql.append(" and exists (select 1 from sysorg so where so.orgid=dm.orgid and so.regioncode='" + sysUser.getAreaId() + "')"); + } else if ("3".equals(sysUser.getUserType())) { + // 机构管理员 + sql.append(" and dm.orgid='" + sysUser.getOrgId() + "' "); + } else if ("4".equals(sysUser.getUserType())) { + // 业务操作员,无可查看数据 + PageInfo pageInfo = new PageInfo<>(); + pageInfo.setTotal(Long.parseLong("0")); + pageInfo.setData(new ArrayList<>()); + return pageInfo; + } + } + } + if (!ObjectUtils.isEmpty(queryDTO.getLogonname())) { + sql.append(" and dm.logonname like :logonname"); + params.put("logonname", "%" + queryDTO.getLogonname() + "%"); + } + if (!ObjectUtils.isEmpty(queryDTO.getDisplayname())) { + sql.append(" and dm.displayname like :displayname"); + params.put("displayname", "%" + queryDTO.getDisplayname() + "%"); + } + if (queryDTO.getOpDate()!=null&&!"".equals(queryDTO.getOpDate())){ + String [] opDate = queryDTO.getOpDate().split(","); + sql.append(" and dm.begintime between :startTime and :endTime"); + params.put("startTime", Timestamp.valueOf(opDate[0])); + params.put("endTime", Timestamp.valueOf(opDate[1])); + + } + sql.append(" and dm.begintime is not null order by dm.begintime desc"); + JdbcPageHelper pageHelper = new JdbcPageHelper(jdbcTemplate, page, size,"grid", SysFunctionManager.getFunctionId()); + PageInfo pageInfo = pageHelper.queryPagination(sql.toString(), params,SysOperateLogDTO.class); + return pageInfo; + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysOrgServiceImpl.java b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysOrgServiceImpl.java new file mode 100644 index 0000000..81f5918 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysOrgServiceImpl.java @@ -0,0 +1,223 @@ +package com.insigma.sys.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.commons.syslog.Syslog; +import com.insigma.sys.entity.Aa26; +import com.insigma.sys.entity.SysOrg; +import com.insigma.sys.entity.SysUserArea; +import com.insigma.sys.repository.Aa26Repository; +import com.insigma.sys.repository.SysOrgRepository; +import com.insigma.sys.repository.SysUserAreaRepository; +import com.insigma.sys.service.SysOrgService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.transaction.Transactional; +import java.util.List; +import java.util.Map; + +/** + * @Author: caic + * @version: 14:11 2019/1/22 + * @Description: + */ +@Service("SysOrgService") +public class SysOrgServiceImpl implements SysOrgService { + @Autowired + SysOrgRepository sysOrgRepository; + @Autowired + Aa26Repository aa26Repository; + @Autowired + SysUserAreaRepository sysUserAreaRepository; + + @Syslog("保存机构:${sysOrg.orgname}") + @Override + @Transactional + public void save(SysOrg sysOrg) { + sysOrgRepository.save(sysOrg); + } + + @Syslog("删除所有机构") + @Override + @Transactional + public void deleteAllOrgs() { + sysOrgRepository.deleteAll(); + } + + @Syslog("删除机构:${id}") + @Override + @Transactional + public void deleteByOrgId(Long id) { + sysOrgRepository.deleteById(id); + } + + @Override + public SysOrg findByOrgid(Long orgId) { + return sysOrgRepository.findByOrgid(orgId); + } + + @Override + public List findByRegioncode(String areaId) { + return sysOrgRepository.findByRegioncode(areaId); + } + + @Override + public List queryAllOrg() { + List sysOrgs=sysOrgRepository.findAllOrg(); + return sysOrgs; + } + + @Override + public List getAA26() { + List list; + list = aa26Repository.findAll(); + return list; + } + + @Override + public Aa26 queryAa26By301(String aab301) { + Aa26 aa26=aa26Repository.findByAab301(aab301); + return aa26; + } + + @Syslog("保存机构:${sysOrg.orgname}") + @Override + @Transactional + public void saveOrg(SysOrg sysOrg) { + sysOrgRepository.save(sysOrg); + if (sysOrg.getParentid()!=null){ + SysOrg sysOrg2=sysOrgRepository.findByOrgid(sysOrg.getParentid()); + sysOrg.setIdpath(sysOrg2.getIdpath()+"/"+sysOrg.getOrgid()); + }else { + sysOrg.setIdpath(sysOrg.getOrgid().toString()); + } + sysOrgRepository.save(sysOrg); + } + + @Syslog("删除机构:${list[0].orgname}") + @Override + @Transactional + public void delOrg(List list, boolean o) { + for (int i=0;i s= sysUserAreaRepository.findByAreaId(list.get(i).getOrgentercode()); + if (s.size()>0){ + for (SysUserArea s1:s){ + sysUserAreaRepository.delete(s1); + } + } + } + + } + } + @Override + public SysOrg getSysOrgBean(Map form) { + SysOrg sysOrg=new SysOrg(); + sysOrg.setOrgname(form.get("orgname").toString()); + sysOrg.setOrgentercode(form.get("orgentercode").toString()); + sysOrg.setShortname(form.get("shortname").toString()); + if (form.get("parentid")!=null){ + sysOrg.setParentid(Long.valueOf(form.get("parentid").toString())); + } + Map regioncode= (Map) form.get("regioncode"); + List list= (List) regioncode.get("value"); + if (list.size()==0){ + sysOrg.setRegioncode(""); + }else if (list.size()>0){ + sysOrg.setRegioncode(list.get(list.size()-1)); + } + sysOrg.setLinkman(form.get("linkman").toString()); + sysOrg.setLeader(form.get("leader").toString()); + sysOrg.setTel(form.get("tel").toString()); + sysOrg.setOrgaddr(form.get("orgaddr").toString()); + sysOrg.setOrgdesc(form.get("orgdesc").toString()); + if (!form.get("orgorder").toString().equals("")){ + sysOrg.setOrgorder(Integer.parseInt(form.get("orgorder").toString())); + } + sysOrg.setOrgstate(form.get("orgstate").toString()); + sysOrg.setSuperdept(form.get("superdept").toString()); + sysOrg.setOrgautocode(form.get("orgautocode").toString()); + sysOrg.setZip(form.get("zip").toString()); + sysOrg.setIdpath(form.get("idpath").toString()); + if (!form.get("orgid").toString().equals("")){ + sysOrg.setOrgid( Long.valueOf(form.get("orgid").toString())); + } + return sysOrg; + } + + @Override + public boolean findByArea(List list) { + for (int i=0;i s =sysUserAreaRepository.findByAreaId(list.get(i).getOrgentercode()); + if (s.size()>0){ + return true; + } + } + return false; + } + + @Override + public List findNodes(long node) { + SysOrg sysOrg = sysOrgRepository.findByOrgid(node); + List sysOrgs=sysOrgRepository.findByIdpathStartingWith(sysOrg.getIdpath()); + return sysOrgs; + } + public JSONObject findOrgid(JSONObject jsonObject,String node){ + JSONArray jsonArray= (JSONArray)jsonObject.get("children"); + JSONObject jsonObject1=new JSONObject(); + for (int j=0;j0){ +// for(int j=0;j sysOrgs=sysOrgRepository.findByNameOrCode(sysOrg.getOrgname(),sysOrg.getOrgentercode()); + if (sysOrgs.size() > 0) { + if (null==sysOrg.getOrgid()){ + return true; + } + for (SysOrg sysOrg1 : sysOrgs) { + if (sysOrg1.getOrgname()==sysOrg.getOrgname()&&sysOrg.getOrgid()==null){ + flag = true; + break; + }else if (sysOrg1.getOrgentercode()==sysOrg.getOrgentercode()&&sysOrg.getOrgid()==null){ + flag = true; + break; + }else if (sysOrg.getOrgid()!=null&&!sysOrg1.getOrgid().equals(sysOrg.getOrgid())){ + flag = true; + break; + } + } + } + return flag; + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysUserAreaImpl.java b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysUserAreaImpl.java new file mode 100644 index 0000000..a9333b2 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysUserAreaImpl.java @@ -0,0 +1,25 @@ +package com.insigma.sys.service.impl; + +import com.insigma.sys.entity.SysUserArea; +import com.insigma.sys.repository.SysUserAreaRepository; +import com.insigma.sys.service.SysUserAreaService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +public class SysUserAreaImpl implements SysUserAreaService { + @Autowired + private SysUserAreaRepository sysUserAreaRepository; + @Override + public List findUserAreaByUserid(String userid) { + return sysUserAreaRepository.findByUserId(userid); + } + @Transactional(rollbackFor=Exception.class) + @Override + public void deleteAllByUserid(String userid) { + sysUserAreaRepository.deleteSysUserArea(userid); + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysUserServiceImpl.java b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysUserServiceImpl.java new file mode 100644 index 0000000..1640be3 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysUserServiceImpl.java @@ -0,0 +1,787 @@ +package com.insigma.sys.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.insigma.framework.commons.syslog.Syslog; +import com.insigma.framework.encryption.util.SM3Utils; +import com.insigma.framework.exception.AppException; +import com.insigma.framework.util.DtoEntityUtil; +import com.insigma.framework.web.securities.commons.SM3PasswordEncoder; +import com.insigma.framework.web.securities.entity.SysLogonLog; +import com.insigma.framework.web.securities.repository.SysLogonLogRepository; +import com.insigma.framework.web.securities.service.SysCacheService; +import com.insigma.sys.common.CurrentUserService; +import com.insigma.sys.common.SysManageMode; +import com.insigma.sys.dto.UserDTO; +import com.insigma.sys.entity.*; +import com.insigma.sys.repository.*; +import com.insigma.sys.service.SysUserService; +import com.insigma.web.support.config.SysConfigProperties; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; + +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.Predicate; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; + +/** + * @Author: caic + * @version: 15:39 2019/1/7 + * @Description: + */ +@Service("SysUserService") +public class SysUserServiceImpl implements SysUserService { + + @Autowired + private CurrentUserService currentUserService; + @Autowired + private SysUserRepository sysUserRepository; + @Autowired + private SysOrgRepository sysOrgRepository; + @Autowired + private Aa26Repository aa26Repository; + @Autowired + private RoleRepository roleRepository; + @Autowired + private SysUserRoleRepository sysUserRoleRepository; + @Autowired + private SysUserAreaRepository sysUserAreaRepository; + @Autowired + private SysConfigProperties sysConfigProperties; + @Autowired + private SysCodeRepository sysCodeRepository; + @Autowired + private SysCacheService sysCacheService; + @Autowired + private SysLogonLogRepository sysLogonLogRepository; + + /** + * 同步用户删除操作 + */ + @Syslog("删除所有用户") + @Override + @Transactional(rollbackFor=Exception.class) + public void deleteAll() { + sysUserRepository.deleteAll(); + } + + @Syslog("删除用户:${id}") + @Override + @Transactional(rollbackFor=Exception.class) + public void deleteByUserId(String id) { + + sysUserRepository.deleteById(id); + } + + @Syslog("保存用户:${sysUser.logonName}") + @Override + @Transactional(rollbackFor=Exception.class) + public void saveAll(SysUser sysUser) { + sysUserRepository.save(sysUser); + } + + /** + * 保存用户 + * + * @param sysUser + */ + @Syslog("保存用户:${sysUser.logonName}") + @Override + @Transactional(rollbackFor = Exception.class) + public void saveUser(SysUser sysUser, Map> map) throws AppException { + SysUser currentUser = currentUserService.getCurrentUser(); + if ("3".equals(currentUser.getUserType())) {//当前登录用户为机构管理员,添加的用户机构随当前登录用户机构 + sysUser.setOrgId(currentUser.getOrgId()); + sysUser.setAreaId(currentUser.getAreaId()); + } + + //如果是更新操作,将原密码查询到新的更新对象中 + if (sysUser.getUserId() != null && sysUser.getUserId().length() > 0) { + SysUser temUser=queryOneUser(sysUser.getUserId()); + if (temUser == null) { + throw new AppException("当前用户不存在"); + } + if((temUser.getPassWD()!=null) && (!temUser.getPassWD().equals(sysUser.getPassWD())) //原码是否和原来一样 + && (!SM3Utils.digest(temUser.getPassWD()).equals(sysUser.getPassWD()))){ + //密码有更新,需要重新加密 + sysUser.setPassWD(new SM3PasswordEncoder().encode(sysUser.getPassWD())); + } else { + sysUser.setPassWD(temUser.getPassWD()); + } + }else{ + if(checkLogonName(sysUser.getLogonName(), null)) { + throw new AppException("该用户已存在!"); + } + // 新增用户使用默认配置好的密码 + if (!SysManageMode.isTripleMode()) { + sysUser.setPassWD(new SM3PasswordEncoder().encode(SM3Utils.digest(sysConfigProperties.getDefaultPassword()))); + } else { + sysUser.setPassWD(new SM3PasswordEncoder().encode(SM3Utils.digest(sysUser.getPassWD()))); + } + } + String userId = sysUserRepository.save(sysUser).getUserId(); + + // 保存用户角色 + sysUserRoleRepository.deleteSysUserRole(userId); + if (sysUser.getSysUserRoleList() != null) { + List list = sysUser.getSysUserRoleList(); + for (SysUserRole sysUserRole : list) { + sysUserRole.setUserId(userId); + } + sysUserRoleRepository.saveAll(list); + } + + + //删除去掉打钩的区域 + List areaDelList = new ArrayList<>(); + if (map.get("removeAreaIds").size() > 0) { + for (String areaId : map.get("removeAreaIds")) { + SysUserArea sysUserArea = new SysUserArea(); + sysUserArea.setUserId(userId); + sysUserArea.setAab301(areaId); + areaDelList.add(sysUserArea); + } + } + sysUserAreaRepository.deleteAll(areaDelList); + //保存添加打钩的区域 + List areaAddList = new ArrayList<>(); + if (map.get("addAreaIds").size() > 0) { + for (String areaId : map.get("addAreaIds")) { + SysUserArea sysUserArea = new SysUserArea(); + sysUserArea.setUserId(userId); + sysUserArea.setAab301(areaId); + areaAddList.add(sysUserArea); + } + } + sysUserAreaRepository.saveAll(areaAddList); + + // 清除用户缓存 + sysCacheService.clearUserCache(sysUser.getLogonName()); + } + + /*** + * 查询全部用户 + * @return + */ + @Override + public List queryAllUser() { + return sysUserRepository.findAll(); + } + + /*** + * 注销用户 + * @param userId + */ + @Syslog("注销用户:${returnVal.logonName}") + @Override + @Transactional + public SysUser logoutUser(String userId) throws AppException { + SysUser sysUser = queryOneUser(userId); + if (sysUser == null) { + throw new AppException("所选用户不存在"); + } + sysUser.setUserState("3"); + sysUserRepository.saveAndFlush(sysUser); + // 清除用户缓存 + sysCacheService.clearUserCache(sysUser.getLogonName()); + //暂时不删除用户绑定的用户及管理的区域 + //sysUserRepository.deleteUserRole(userId); + return sysUser; + } + + /*** + * 解锁用户 + * @param userId + */ + @Syslog("解锁用户:${returnVal.logonName}") + @Override + @Transactional + public SysUser unlockUser(String userId) throws AppException { + SysUser sysUser = queryOneUser(userId); + if (sysUser == null) { + throw new AppException("所选用户不存在"); + } + if (!"2".equals(sysUser.getUserState())) { + throw new AppException("所选用户未被锁定"); + } + sysUser.setFailNO(0L); + sysUser.setUserState("1"); + sysUser.setUnlockTime(new Date()); + sysUserRepository.saveAndFlush(sysUser); + // 清除用户缓存 + sysCacheService.clearUserCache(sysUser.getLogonName()); + return sysUser; + } + + /*** + * 锁定用户 + * @param userId + */ + @Syslog("锁定用户:${returnVal.logonName}") + @Override + @Transactional + public SysUser lockUser(String userId) throws AppException { + SysUser sysUser = queryOneUser(userId); + if (sysUser == null) { + throw new AppException("所选用户不存在"); + } + if (!"1".equals(sysUser.getUserState())) { + throw new AppException("所选用户不是正常用户"); + } + sysUser.setFailNO(0L); + sysUser.setUserState("2"); + sysUser.setLockTime(new Date()); + sysUserRepository.saveAndFlush(sysUser); + // 清除用户缓存 + sysCacheService.clearUserCache(sysUser.getLogonName()); + return sysUser; + } + + /** + * 重置密码 + */ + @Syslog("重置密码:${returnVal.logonName}") + @Override + @Transactional(rollbackFor = Exception.class) + public SysUser resetPassWD(String userId) throws AppException { + SysUser sysUser = queryOneUser(userId); + if (sysUser == null) { + throw new AppException("所选用户不存在"); + } + if ("3".equals(sysUser.getUserState())) { + throw new AppException("所选用户已注销"); + } + sysUser.setPassWD(new SM3PasswordEncoder().encode(SM3Utils.digest(sysConfigProperties.getDefaultPassword()))); + sysUser.setPwEditDate(new Date()); + sysUserRepository.saveAndFlush(sysUser); + // 清除用户缓存 + sysCacheService.clearUserCache(sysUser.getLogonName()); + return sysUser; + } + + /** + * 修改密码 + * @param oldPass + * @param newPass + * @throws AppException + */ + @Syslog("修改密码:${returnVal.logonName}") + @Override + @Transactional(rollbackFor = Exception.class) + public SysUser updataPassWD(String oldPass, String newPass) throws AppException { + SysUser currentUser = currentUserService.getCurrentUser(); + boolean bool = new SM3PasswordEncoder().matches(oldPass,currentUser.getPassWD()); + if (bool) { + SysUser sysUser = sysUserRepository.getOne(currentUser.getUserId()); + sysUser.setPassWD(new SM3PasswordEncoder().encode(newPass)); + sysUser.setPwEditDate(new Date()); + sysUserRepository.saveAndFlush(sysUser); + // 清除用户缓存 + sysCacheService.clearUserCache(currentUser.getLogonName()); + return sysUser; + } else { + throw new AppException("旧密码输入错误,请重新输入"); + } + } + + /** + * 查询区域下的机构树节点 + * + * @param areaId + * @return + */ + @Override + public List queryOrgNodes(String areaId) { + List orgList = sysOrgRepository.findByRegioncode(areaId); + List orgTree = new ArrayList<>(); + for (SysOrg sysOrg : orgList) { + orgTree.add(sysOrg);//添加自身节点 + orgTree.addAll(sysOrgRepository.findByIdpathStartingWith(sysOrg.getIdpath() + "/"));//后面加"/"为了防止匹配例如1/2/3,匹配成1/2/323 + } + List list = orgTree.stream().distinct().collect(Collectors.toList()); + return list; + } + + /** + * 查找区域树结构数据 + * + * @return + */ + @Override + public List queryAa26Nodes() { + SysUser currentUser = currentUserService.getCurrentUser(); + List list = new ArrayList<>(); + if ("1".equals(currentUser.getUserType())) {//超级管理员 + list = aa26Repository.findAll(); + } else if ("2".equals(currentUser.getUserType())) {//区域管理员 + Aa26 aa26 = aa26Repository.findByAab301(currentUser.getAreaId() + ""); + list = aa26Repository.findByidpathStartingWith(aa26.getIdpath()); + } else if ("3".equals(currentUser.getUserType())) {//机构管理员不查询所属行政区,默认跟随自身机构 + // sysOrgRepository.getOne(currentUser.getOrgId()); + Aa26 aa26 = aa26Repository.getOne(currentUser.getAreaId() + ""); + list.add(aa26); + } + return list; + } + + /** + * 查询用户类型列表 + * + * @return + */ + @Override + public List> findUsetTypeCode() { + List list = sysCodeRepository.findByAaa100("USERTYPE"); + if(SysManageMode.isTripleMode()){//三员制 + if(!"1".equals(currentUserService.getCurrentUser().getUserType())){//如果当前登录用户不是超级管理员,则不能添加超级管理员。 + if(!"5".equals(currentUserService.getCurrentUser().getUserType())){//如果不是安全管理员则不能显示安全管理员 + for(int i=0;i0){ + for(int i=0;i0){ + for(int i=0;i> findSlevel() { + List list = sysCodeRepository.findByAaa100("SLEVEL"); + return aa10ToCodeList(list); + } + + /** + * 分页查询用户 + * + * @param logonName + * @param displayName + * @param orgId + * @param userState + * @param page + * @param size + * @return + */ + @Override + public Page findAll(String logonName, String displayName, String orgId, String userState, String userType, String aa26, String cardId, Integer page, Integer size,String type) { + SysUser currentUser = currentUserService.getCurrentUser(); + Specification queryParams = (Specification) (root, criteriaQuery, criteriaBuilder) -> { + try { + List predicates = new ArrayList<>(); + // if("1".equals(type) || "2".equals(type)){//常规用户管理模块或者三员制用户管理模块 + if (!"1".equals(currentUser.getUserType())) {//超级管理员 + String[] states = new String[]{"1", "2"};//过滤的用户状态,只查询状态为1:正常,2:锁定的用户 + CriteriaBuilder.In in = criteriaBuilder.in(root.get("userState")); + for (String state : states) { + in.value(state); + } + predicates.add(in); + if ("2".equals(currentUser.getUserType())) {//行政区管理员 + predicates.add((Predicate) criteriaBuilder.equal(root.get("areaId"), currentUser.getAreaId())); + predicates.add((Predicate) criteriaBuilder.notEqual(root.get("userType"), "1")); + // List orgList = sysOrgRepository.findByparentid(currentUser.getOrgId()); + // CriteriaBuilder.In areaIn = criteriaBuilder.in(root.get("orgId")); + // for (SysOrg sysOrg : orgList) { + // areaIn.value(sysOrg.getOrgid()); + // } + // areaIn.value(currentUser.getOrgId()); + // predicates.add(in); + } + if ("3".equals(currentUser.getUserType())) {//机构管理员 + predicates.add((Predicate) criteriaBuilder.equal(root.get("orgId"), currentUser.getOrgId())); + predicates.add((Predicate) criteriaBuilder.notEqual(root.get("userType"), "1")); + predicates.add((Predicate) criteriaBuilder.notEqual(root.get("userType"), "2")); + // List orgList = sysOrgRepository.findByparentid(currentUser.getOrgId()); + // CriteriaBuilder.In areaIn = criteriaBuilder.in(root.get("orgId")); + // for (SysOrg sysOrg : orgList) { + // areaIn.value(sysOrg.getOrgid()); + // } + // predicates.add(in); + } + if ("4".equals(currentUser.getUserType())) {//业务操作员 + throw new RuntimeException("业务操作人员没权限查看用户列表"); + } + /*if ("5".equals(currentUser.getUserType())) {//安全管理员 + throw new RuntimeException("安全管理员没权限查看用户列表"); + } + if ("6".equals(currentUser.getUserType())) {//审计管理员 + throw new RuntimeException("审计管理员没权限查看用户列表"); + }*/ + } + /*}else if("3".equals(type)) {//三员制下用户授权模块 + if (!"5".equals(currentUser.getUserType())) { + throw new RuntimeException("三员制下,除了安全管理员有用户授权权限,其他人员没权限查看用户列表"); + } + }*/ + if (null != logonName && !"".equals(logonName)) { + predicates.add((Predicate) criteriaBuilder.like(root.get("logonName"), "%" + logonName + "%")); + } + if (null != displayName && !"".equals(displayName)) { + predicates.add((Predicate) criteriaBuilder.like(root.get("displayName"), "%" + displayName + "%")); + } + if (null != orgId && !"".equals(orgId)) { + predicates.add((Predicate) criteriaBuilder.equal(root.get("orgId"), orgId)); + } + if (null != userState && !"".equals(userState)) { + predicates.add((Predicate) criteriaBuilder.equal(root.get("userState"), userState)); + } + if (null != userType && !"".equals(userType)) { + predicates.add((Predicate) criteriaBuilder.equal(root.get("userType"), userType)); + } + if (null != aa26 && !"".equals(aa26)) { + predicates.add((Predicate) criteriaBuilder.equal(root.get("areaId"), aa26)); + } + if (null != cardId && !"".equals(cardId)) { + predicates.add((Predicate) criteriaBuilder.equal(root.get("cardId"), cardId)); + } + + Predicate[] p = new Predicate[predicates.size()]; + criteriaQuery.where(criteriaBuilder.and(predicates.toArray(p))); + } catch (Exception e) { + throw new RuntimeException(e); + } + return criteriaQuery.getRestriction(); + }; + page = page < 0 ? 0 : page; + Pageable pageable = PageRequest.of(page, size); + Page codePage = sysUserRepository.findAll(queryParams, pageable); + List dtoList = DtoEntityUtil.trans(codePage.getContent(), UserDTO.class); + dtoList.stream().forEach(userDTO -> { + userDTO.setVisible("1"); + if (!ObjectUtils.isEmpty(userDTO.getTel())){ + String tel = userDTO.getTel(); + String substring = tel.substring(3, 7); + String replace = tel.replace(substring, "****"); + userDTO.setTel(replace); + } + if (!ObjectUtils.isEmpty(userDTO.getCardId()) && userDTO.getCardId().length() > 3) { + StringBuilder sb = new StringBuilder(); + int len = userDTO.getCardId().length() - 3; + for (int i = 0; i < len; i++) { + sb.append("*"); + } + String replace = userDTO.getCardId().replaceAll("^(.{1})(?:\\d+).(.{2})$", "$1" + sb.toString() + "$2"); + userDTO.setCardId(replace); + } + }); + return new PageImpl(dtoList,pageable,codePage.getTotalElements()); + } + + /** + * 查询用户状态列表 + * + * @return + */ + @Override + public List> getUserStateCode() { + List list = sysCodeRepository.findByAaa100("USERSTATE"); + return aa10ToCodeList(list); + } + + /** + * 将aa10数据组装成List格式 + * + * @param list + * @return + */ + private List> aa10ToCodeList(List list) { + List> codeList = new ArrayList<>(); + for (Aa10 aa10 : list) { + Map tem = new ConcurrentHashMap(); + tem.put("key", aa10.getAaa102()); + tem.put("value", aa10.getAaa102()); + tem.put("label", aa10.getAaa103()); + codeList.add(tem); + } + return codeList; + } + + @Override + public List findByRoleType(String userType) { + String currentUserType = currentUserService.getCurrentUser().getUserType(); + if("1".equals(userType)){//新增的用户类型为超级管理员 + return roleRepository.queryByAdmin(); + } + if ("2".equals(userType)) {//新增的用户类型为行政区管理员 + return roleRepository.queryRoleByArea(currentUserService.getCurrentUser().getAreaId()); + } + if ("3".equals(userType)) {//新增的用户类型为机构管理员 + return roleRepository.queryByOrgId(currentUserService.getCurrentUser().getOrgId()); + } + if ("4".equals(userType)) {//新增的用户类型为业务操作员(普通用户) + if("1".equals(currentUserType)){//当前登录用户为超级管理员 + return roleRepository.findAllByRoletype("2"); + } + if ("2".equals(currentUserType)) {//当前登录用户为行政区管理员 + return roleRepository.queryRoleByRoletypeAndAreaid("2", currentUserService.getCurrentUser().getAreaId()); + } + if ("3".equals(currentUserType)) {//当前登录用户为机构管理员 + return roleRepository.findByRoletypeAndOrgid("2", currentUserService.getCurrentUser().getOrgId()); + } + if ("5".equals(currentUserType)) {//当前登录用户为安全管理员 + return roleRepository.findAllByRoletype("2"); + } + } + if(SysManageMode. isTripleMode()){//三员制 + if("5".equals(userType)){ + return roleRepository.findAllByRoletype("3"); + }else if("6".equals(userType)){ + return roleRepository.findAllByRoletype("4"); + } + } + return roleRepository.findAll(); + } + + /** + * 校验登录名是否重复 + * + * @param logonName + * @return + */ + @Override + public boolean checkLogonName(String logonName, String userId) { + List list; + if (userId == null || userId.length() == 0) { + list = sysUserRepository.findByLogonName(logonName); + } else { + list = sysUserRepository.findByLogonNameAndUserIdNot(logonName, userId); + } + if (list.size() == 0) {//查询结果为空,则表示没有登录名称重复 + return false; + } + return true; + } + + @Override + public SysUser queryOneUser(String userId) { + SysUser sysUser = sysUserRepository.findById(userId).orElse(null); + return sysUser; + } + + /** + * 更新单个用户信息 + * @param sysUser + */ + @Override + public void updateUser(SysUser sysUser) { + sysUserRepository.saveAndFlush(sysUser); + } + + @Override + public List queryUserRole(String userId) throws AppException { + if (!checkUser(userId)) { + throw new AppException("该用户无效"); + } + return sysUserRoleRepository.findByUserId(userId); + } + + @Override + public List queryUserArea(String userId) throws AppException { + if (!checkUser(userId)) { + throw new AppException("该用户无效"); + } + return sysUserAreaRepository.findByUserId(userId); + } + + /** + * 查询所有机构 + * + * @return + */ + @Override + public List findAllOrg() { + return sysOrgRepository.findAll(); + } + + /** + * 校验用户是否有效 + * + * @param userId + */ + private boolean checkUser(String userId) { + SysUser sysUser = queryOneUser(userId); + if (sysUser == null) { + return false; + } + if ("3".equals(sysUser.getUserState())) { + return false; + } + return true; + } + + /** + * 通用查询aa10编码 + * @param codeType + * @return + */ + @Override + public List> getAa10Code(String codeType) { + List list = sysCodeRepository.findByAaa100(codeType); + return aa10ToCodeList(list); + } + + @Override + public void deleteAllUserExitsAdmin() { + sysUserRepository.deleteAllUserExitsAdmin(); + } + + /** + * 保存用户 + * + * @param sysUser + */ + @Override + @Transactional + public void saveUserRole(SysUser sysUser) throws AppException { + String userId=sysUser.getUserId(); + if(SysManageMode.isTripleMode()){//三员制 + sysUserRoleRepository.deleteSysUserRole(userId); + List list = sysUser.getSysUserRoleList(); + for (int i = 0; i < list.size(); i++) { + list.get(i).setUserId(userId); + } + sysUserRoleRepository.saveAll(list); + } + } + + @Override + public String getUserSlevel(){ + String logonName=currentUserService.getCurrentUser().getLogonName(); + List sysUser=sysUserRepository.findByLogonName(logonName); + return sysUser.get(0).getSlevel(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void batchSaveUsers(List users) { + users.stream().forEach(sysUser -> { + sysUser.setPassWD(new SM3PasswordEncoder().encode(SM3Utils.digest(sysConfigProperties.getDefaultPassword()))); + sysUser.setUserState("1"); + }); + sysUserRepository.saveAll(users); + } + + @Override + public SysUser findUserByLogonName(String logonName) { + return sysUserRepository.findUsefulUserByLogonName(logonName); + } + + @Override + public void copyUser(JSONObject data) throws AppException { + String cuType = currentUserService.getCurrentUser().getUserType(); + String userId = data.getString("userId"); + String logonName = data.getString("logonName"); + String displayName = data.getString("displayName"); + String cardType = data.getString("cardType"); + String cardId = data.getString("cardId"); + SysUser sysUser = sysUserRepository.findById(userId).orElse(null); + SysUser oneUser = new SysUser(); + if(checkLogonName(logonName, null)) { + throw new AppException("该用户名已存在!"); + } + if(sysUser != null){ + if(Integer.parseInt(sysUser.getUserType()) < Integer.parseInt(cuType)){ + throw new AppException("无复制权限"); + } + oneUser.setLogonName(logonName); + oneUser.setDisplayName(displayName); + oneUser.setOrgId(sysUser.getOrgId()); + oneUser.setAreaId(sysUser.getAreaId()); + oneUser.setUserType(sysUser.getUserType()); + oneUser.setUserState(sysUser.getUserState()); + oneUser.setCardType(cardType); + oneUser.setCardId(cardId); + oneUser.setPassWD(new SM3PasswordEncoder().encode(SM3Utils.digest(sysConfigProperties.getDefaultPassword()))); + sysUserRepository.save(oneUser); + } + } + + @Override + public void clearSessions(String userId) { + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + Date todayStart = calendar.getTime(); + List list = sysLogonLogRepository.findNotLogoffListByUserIdToday(userId, todayStart); + List sessionIds = list.stream().map(SysLogonLog::getSessionid).collect(Collectors.toList()); + if (sessionIds.size() > 0) { + sysCacheService.clearSessions(sessionIds); + } + } + + +} + diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysWarningLogServiceImpl.java b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysWarningLogServiceImpl.java new file mode 100644 index 0000000..d408e45 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SysWarningLogServiceImpl.java @@ -0,0 +1,46 @@ +package com.insigma.sys.service.impl; + +import com.insigma.framework.web.securities.service.SysLogService; +import com.insigma.sys.common.CurrentUserService; +import com.insigma.sys.entity.SysWarningLog; +import com.insigma.sys.repository.SysWarningLogRepository; +import com.insigma.sys.service.SysWarningLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.servlet.http.HttpServletRequest; +import java.util.Date; + +/** + * @author yinjh + * @version 2021/10/9 + */ +@Service +public class SysWarningLogServiceImpl implements SysWarningLogService { + + @Autowired + private CurrentUserService currentUserService; + + @Autowired + private SysWarningLogRepository sysWarningLogRepository; + + @Autowired + private SysLogService logService; + + @Autowired + private HttpServletRequest request; + + @Override + @Transactional(rollbackFor = Exception.class) + public void saveLog(String content) { + SysWarningLog log = new SysWarningLog(); + log.setUserid(currentUserService.getCurrentUser().getUserId()); + log.setSessionid(request.getSession().getId()); + log.setContent(content); + log.setCreateTime(new Date()); + sysWarningLogRepository.saveAndFlush(log); + + logService.saveLogoffLogBySid(request.getSession().getId(), "输入异常退出"); + } +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SyslogonLogServiceImpl.java b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SyslogonLogServiceImpl.java new file mode 100644 index 0000000..300d729 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/service/impl/SyslogonLogServiceImpl.java @@ -0,0 +1,151 @@ +package com.insigma.sys.service.impl; + +import com.insigma.framework.db.JdbcPageHelper; +import com.insigma.framework.db.PageInfo; +import com.insigma.framework.web.securities.entity.SysLogonLog; +import com.insigma.framework.web.securities.repository.SysLogonLogRepository; +import com.insigma.sys.common.CurrentUserService; +import com.insigma.sys.common.SysManageMode; +import com.insigma.sys.dto.SysLogonLogDTO; +import com.insigma.sys.entity.SysRole; +import com.insigma.sys.entity.SysUser; +import com.insigma.sys.service.RoleService; +import com.insigma.sys.service.SyslogonLogService; +import com.insigma.web.support.util.SysFunctionManager; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.domain.PageRequest; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; + +import java.sql.SQLException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * fukq 2020/6/2 + */ +@Slf4j +@Service +public class SyslogonLogServiceImpl implements SyslogonLogService { + + @Autowired + private JdbcTemplate jdbcTemplate; + @Autowired + private RoleService roleService; + @Autowired + private CurrentUserService currentUserService; + @Autowired + private SysManageMode sysManageMode; + @Autowired + private SysLogonLogRepository sysLogonLogRepository; + @Value("${insiis.log.show.all:true}") + private Boolean logShowAll; + + @Override + public PageInfo querySysLogonList(SysLogonLogDTO queryDTO, Integer page, Integer size) throws SQLException { + Map params = new HashMap<>(); + // 当前登录用户所拥有的角色 + SysUser sysUser = currentUserService.getCurrentUser(); + String userId = sysUser.getUserId(); + List roleList = roleService.queryRoleByUserId(userId); + // List roleList = currentUserService.getCurrentUser().getSysUserRoleList(); + StringBuffer sql = new StringBuffer("select dp.*,up.usertype,up.logonname,up.displayname from syslogonlog dp left join " + + "sysuser up on dp.userid = up.userid where 1=1 "); + if (sysManageMode.isTripleMode() == true && "1".equals(currentUserService.getCurrentUser().getUserType())){ + PageInfo pageInfo =new PageInfo(); + pageInfo.setTotal(Long.parseLong("0")); + pageInfo.setData(new ArrayList<>()); + + return pageInfo; + } + if (sysManageMode.isTripleMode() == true) {//启用三员制 + // 当登录用户的角色为安全管理员 + if (roleList.stream().anyMatch(role -> role.getRoletype().equals("3"))) { + sql.append("and (up.usertype = '6' or up.usertype = '4' )"); + } + // 当登录用户的角色为审计管理员 + if (roleList.stream().anyMatch(role -> role.getRoletype().equals("4"))) { + sql.append("and (up.usertype = '1' or up.usertype = '5' )"); + } + // sql.append("and up.usertype = :usertype"); + // params.put("usertype", currentUserService.getCurrentUser().getUserType()); + } else { + if (!logShowAll) { + if ("2".equals(sysUser.getUserType())) { + // 行政区管理员 + sql.append(" and exists (select 1 from sysorg so where so.orgid=up.orgid and so.regioncode='" + sysUser.getAreaId() + "')"); + } else if ("3".equals(sysUser.getUserType())) { + // 机构管理员 + sql.append(" and up.orgid='" + sysUser.getOrgId() + "' "); + } else if ("4".equals(sysUser.getUserType())) { + // 业务操作员,无可查看数据 + PageInfo pageInfo = new PageInfo(); + pageInfo.setTotal(Long.parseLong("0")); + pageInfo.setData(new ArrayList<>()); + return pageInfo; + } + } + } + if (!ObjectUtils.isEmpty(queryDTO.getLogonname())) { + sql.append(" and up.logonname like :logonname"); + params.put("logonname", "%" + queryDTO.getLogonname() + "%"); + } + if (!ObjectUtils.isEmpty(queryDTO.getDisplayname())) { + sql.append(" and up.displayname like :displayname"); + params.put("displayname", "%" + queryDTO.getDisplayname() + "%"); + } + if (queryDTO.getOpDate()!=null&&!"".equals(queryDTO.getOpDate())){ + String [] opDate = queryDTO.getOpDate().split(","); + SimpleDateFormat st =new SimpleDateFormat("yyyy-MM-dd"); + sql.append(" and to_date(to_char(dp.logontime,'YYYY-MM-DD'),'YYYY-MM-DD') between to_date(:startTime,'YYYY-MM-DD') and to_date(:endTime,'YYYY-MM-DD')"); + try { + params.put("startTime",st.format(st.parse(opDate[0]))); + params.put("endTime",st.format(st.parse(opDate[1]))); + } catch (ParseException e) { + log.error(e.getMessage(), e); + } + + } + sql.append(" order by dp.logontime desc"); + JdbcPageHelper pageHelper = new JdbcPageHelper(jdbcTemplate, page, size, "grid", SysFunctionManager.getFunctionId()); + PageInfo pageInfo = pageHelper.queryPagination(sql.toString(), params, rs -> { + SysLogonLogDTO dto = new SysLogonLogDTO(); + dto.setUserid(rs.getString("userid")); + String logonname = rs.getString("logonname"); + if (ObjectUtils.isEmpty(logonname) && dto.getUserid().startsWith("NE:")) { + dto.setLogonname(dto.getUserid().substring(3)); + } else { + dto.setLogonname(logonname); + } + dto.setDisplayname(rs.getString("displayname")); + dto.setLogonip(rs.getString("logonip")); + dto.setSessionid(rs.getString("sessionid")); + dto.setFailreason(rs.getString("failreason")); + dto.setLogontime(rs.getTimestamp("logontime")); + dto.setLogofftime(rs.getTimestamp("logofftime")); + dto.setLogoffreason(rs.getString("logoffreason")); + dto.setSuccessflag(rs.getString("successflag")); + dto.setBrowser(rs.getString("browser")); + dto.setOs(rs.getString("os")); + return dto; + }); + return pageInfo; + } + + @Override + public List getLastLoginTime(String userId) { + return sysLogonLogRepository.findListByPage(userId, PageRequest.of(0, 2)); +// StringBuffer sql = new StringBuffer("select * from ( SELECT s.* FROM SYSLOGONLOG s where s.USERID=? and s.SUCCESSFLAG = '1' ORDER BY s.LOGONTIME desc) where rownum<=2"); +// List> maps = jdbcTemplate.queryForList(sql.toString(), new Object[]{userId}); +// return maps; + } +} + + diff --git a/template/insiis-web/src/main/java/com/insigma/sys/util/MybatisCodeGenerator.java b/template/insiis-web/src/main/java/com/insigma/sys/util/MybatisCodeGenerator.java new file mode 100644 index 0000000..4383b69 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/util/MybatisCodeGenerator.java @@ -0,0 +1,85 @@ +package com.insigma.sys.util; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.*; + +import java.sql.SQLException; + +/** + * mybatis-plus代码生成工具 + * + * @author yinjh + * @date 2022/10/14 + */ +public class MybatisCodeGenerator { + + /** + * 数据源配置 + */ + private static final DataSourceConfig.Builder DATA_SOURCE_CONFIG = new DataSourceConfig + .Builder("jdbc:mysql://192.168.70.10:3306/insiis7?useSSL=false", + "root", + "mysql2019"); + + /** + * 执行 run + */ + public static void main(String[] args) throws SQLException { + // 初始化数据库脚本 + FastAutoGenerator.create(DATA_SOURCE_CONFIG) + // 全局配置 + .globalConfig((scanner, builder) -> builder.author(scanner.apply("请输入作者名称"))) + // 包配置 + .packageConfig((scanner, builder) -> builder.parent(scanner.apply("请输入包名"))) + // 策略配置 + .strategyConfig((scanner, builder) -> builder.addInclude(scanner.apply("请输入表名,多个表名用,隔开"))) + /* + 模板引擎配置,默认 Velocity 可选模板引擎 Beetl 或 Freemarker 或 Enjoy + .templateEngine(new BeetlTemplateEngine()) + .templateEngine(new FreemarkerTemplateEngine()) + .templateEngine(new EnjoyTemplateEngine()) + */ + .execute(); + } + + /** + * 策略配置 + */ + protected static StrategyConfig.Builder strategyConfig() { + return new StrategyConfig.Builder(); + } + + /** + * 全局配置 + */ + protected static GlobalConfig.Builder globalConfig() { + return new GlobalConfig.Builder(); + } + + /** + * 包配置 + */ + protected static PackageConfig.Builder packageConfig() { + return new PackageConfig.Builder(); + } + + /** + * 模板配置 + */ + protected static TemplateConfig.Builder templateConfig() { + return new TemplateConfig.Builder(); + } + + /** + * 注入配置 + */ + protected static InjectionConfig.Builder injectionConfig() { + // 测试自定义输出文件之前注入操作,该操作再执行生成代码前 debug 查看 + return new InjectionConfig.Builder().beforeOutputFile((tableInfo, objectMap) -> { + System.out.println("tableInfo: " + tableInfo.getEntityName() + " objectMap: " + objectMap.size()); + }); + } + +} + + diff --git a/template/insiis-web/src/main/java/com/insigma/sys/util/SysHashUtil.java b/template/insiis-web/src/main/java/com/insigma/sys/util/SysHashUtil.java new file mode 100644 index 0000000..d7aee10 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/util/SysHashUtil.java @@ -0,0 +1,37 @@ +package com.insigma.sys.util; + +import com.insigma.framework.util.SysUtils; +import com.insigma.sys.entity.SysUser; +import com.insigma.sys.service.SysHashService; +import com.insigma.sys.service.SysUserService; + +import java.util.List; + +/** + * @author yinjh + * @version 2021/8/19 + */ +public class SysHashUtil { + + /** + * 重新计算所有用户的hash + */ + public static void reComputeAllUserHash() { + SysUserService sysUserService = SysUtils.getBean(SysUserService.class); + List list = sysUserService.queryAllUser(); + SysHashService sysHashService = SysUtils.getBean(SysHashService.class); + sysHashService.saveAllHash(list); + } + + /** + * 重新计算指定用户的hash + * @param logonName + */ + public static void reComputeUserHash(String logonName) { + SysUserService sysUserService = SysUtils.getBean(SysUserService.class); + SysUser sysUser = sysUserService.findUserByLogonName(logonName); + SysHashService sysHashService = SysUtils.getBean(SysHashService.class); + sysHashService.saveHash(sysUser); + } + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/util/SysSessionUtil.java b/template/insiis-web/src/main/java/com/insigma/sys/util/SysSessionUtil.java new file mode 100644 index 0000000..fa380f4 --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/util/SysSessionUtil.java @@ -0,0 +1,42 @@ +package com.insigma.sys.util; + +import com.insigma.framework.exception.UserNoLoginException; +import com.insigma.framework.util.SysUtils; +import com.insigma.sys.service.SysWarningLogService; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; + +/** + * 会话工具类 + * + * @author yinjh + * @version 2021/10/9 + */ +public class SysSessionUtil { + + /** + * 清除会话 + * @param warningLogMsg 告警内容 + */ + public static void clear(String warningLogMsg) { + clear(warningLogMsg, "输入异常,请重新登录!"); + } + + /** + * 清除会话 + * @param warningLogMsg 告警内容 + * @param throwMsg 异常信息 + */ + public static void clear(String warningLogMsg, String throwMsg) { + // 记录告警日志 + SysWarningLogService sysWarningLogService = SysUtils.getBean(SysWarningLogService.class); + sysWarningLogService.saveLog(warningLogMsg); + // 清除会话 + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + request.getSession().invalidate(); + throw new UserNoLoginException(throwMsg); + } + +} diff --git a/template/insiis-web/src/main/java/com/insigma/sys/util/WordUtil.java b/template/insiis-web/src/main/java/com/insigma/sys/util/WordUtil.java new file mode 100644 index 0000000..1cce3ae --- /dev/null +++ b/template/insiis-web/src/main/java/com/insigma/sys/util/WordUtil.java @@ -0,0 +1,71 @@ +package com.insigma.sys.util; + + +import freemarker.template.Configuration; +import freemarker.template.Template; + +import java.io.*; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + + +/** + * @author GH + * @ClassName: WordUtil + * @Description: + * @date 2022/3/22 11:12 + */ +public class WordUtil { + + + //读取配置文件 + private static Configuration configuration = null; + private static Map allTemplate = null; + private static final String TEMPLATE_PATH = "/templates"; // 模板加载路径 + + + static { + configuration = new Configuration(Configuration.VERSION_2_3_22); + //设置编码 + configuration.setDefaultEncoding("UTF-8"); + //按照路径加载模板 + configuration.setClassForTemplateLoading(WordUtil.class, TEMPLATE_PATH); + //存储模板 + allTemplate = new HashMap(); + try { + //按照指定编码读取文档报告模板 + allTemplate.put("monReportTemplet", configuration.getTemplate("monReportTemplate.ftl", "UTF-8")); + } catch (IOException e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + } + + /** + * 创建doc文档 + * + * @param dataMap + * @param type + * @return + */ + public static File createDoc(Map dataMap, String type) { + //文件名 + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); + String name = "temp_" + sdf.format(new Date()) + ".doc"; + File file = new File(name); + //获取模板 + Template t = allTemplate.get(type); + //这个地方不能使用FileWriter因为需要指定编码类型否则声场的word文档会因为有无法识别的编码而无法打开 + try (FileOutputStream fileOutputStream = new FileOutputStream(file); + Writer w = new OutputStreamWriter(fileOutputStream, "UTF-8")) { + t.process(dataMap, w); + w.flush(); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + return file; + } +} diff --git a/template/insiis-web/src/main/java/com/vs/FailData.java b/template/insiis-web/src/main/java/com/vs/FailData.java new file mode 100644 index 0000000..2bce45a --- /dev/null +++ b/template/insiis-web/src/main/java/com/vs/FailData.java @@ -0,0 +1,43 @@ +package com.vs; + +/** + * 对异常返回值的封装 + */ +public class FailData { + private int code = 500; + private String message; + private String debugInfo; + private Object data; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public String getDebugInfo() { + return debugInfo; + } + + public void setDebugInfo(String debugInfo) { + this.debugInfo = debugInfo; + } + + public Object getData() { + return data; + } + + public void setData(Object data) { + this.data = data; + } +} diff --git a/template/insiis-web/src/main/java/com/vs/ResponseJsonExceptionResolver.java b/template/insiis-web/src/main/java/com/vs/ResponseJsonExceptionResolver.java new file mode 100644 index 0000000..6b890a5 --- /dev/null +++ b/template/insiis-web/src/main/java/com/vs/ResponseJsonExceptionResolver.java @@ -0,0 +1,108 @@ +package com.vs; + +import com.vs.ox.common.exception.ErrorCode; +import com.vs.ox.common.exception.IgnoredException; +import com.vs.ox.common.utils.ObjectMapperFactory; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.core.Ordered; +import org.springframework.http.MediaType; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.http.server.ServletServerHttpResponse; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.validation.ConstraintViolation; +import javax.validation.ConstraintViolationException; +import javax.validation.Path; +import java.io.IOException; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +@Slf4j +public class ResponseJsonExceptionResolver extends AbstractHandlerExceptionResolver implements InitializingBean { + private HttpMessageConverter messageConverter; + + public ResponseJsonExceptionResolver() { + } + + @Override + public void afterPropertiesSet() throws Exception { + if (messageConverter == null) { + messageConverter = new MappingJackson2HttpMessageConverter(ObjectMapperFactory.getDefaultObjectMapper()); + } + } + + public static String getErrorInfoFromException(Exception e) { + try { + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + e.printStackTrace(pw); + return "\r\n" + sw.toString() + "\r\n"; + } catch (Exception e2) { + return "bad getErrorInfoFromException"; + } + } + + @Override + protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { + /** + * web请求分页单独处理,应对antd框架 + */ + FailData failData = new FailData(); + failData.setMessage(ex.getMessage()); + if (ex instanceof IgnoredException) { + IgnoredException realEx = (IgnoredException) ex; + failData.setCode(realEx.getErrorCode()); + failData.setData(realEx.getData()); + log.error("execute {} failed with exception", request.getRequestURL(), ex); + } else if (ex instanceof ConstraintViolationException) { + failData.setCode(ErrorCode.WRONG_PARAMETER); + failData.setMessage(getMessage((ConstraintViolationException) ex)); + } else if (ex instanceof ErrorCode) { + failData.setCode(((ErrorCode) ex).getErrorCode()); + } else { + log.error("execute {} failed with exception", request.getRequestURL(), ex); + } + try { + response.setCharacterEncoding("utf-8"); + messageConverter.write(failData, MediaType.APPLICATION_JSON, new ServletServerHttpResponse(response)); + } catch (IOException e) { + logger.error(e.getMessage(), e); + } + return new ModelAndView(); + } + + @Override + public int getOrder() { + return Ordered.LOWEST_PRECEDENCE; + } + + public static String getMessage(ConstraintViolationException e) { + List msgList = new ArrayList<>(); + for (ConstraintViolation constraintViolation : e.getConstraintViolations()) { + int i = 0; + StringBuilder param = new StringBuilder(); + for (Iterator iterator = constraintViolation.getPropertyPath().iterator(); iterator.hasNext(); i++) { + Path.Node node = iterator.next(); + if (i == 0) { + continue; + } + if (!param.toString().isBlank()) { + param.append("."); + } + param.append(node.getName()); + } + msgList.add("参数 [ " + param + " ] " + constraintViolation.getMessage()); + } + return StringUtils.join(msgList.toArray(), ";"); + } + +} diff --git a/template/insiis-web/src/main/java/com/vs/ResponseJsonMethodReturnValueHandler.java b/template/insiis-web/src/main/java/com/vs/ResponseJsonMethodReturnValueHandler.java new file mode 100644 index 0000000..aa835f8 --- /dev/null +++ b/template/insiis-web/src/main/java/com/vs/ResponseJsonMethodReturnValueHandler.java @@ -0,0 +1,48 @@ +package com.vs; + +import com.vs.ox.common.utils.ObjectMapperFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.core.MethodParameter; +import org.springframework.http.MediaType; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.http.server.ServletServerHttpResponse; +import org.springframework.web.context.request.NativeWebRequest; +import org.springframework.web.method.support.HandlerMethodReturnValueHandler; +import org.springframework.web.method.support.ModelAndViewContainer; + +import javax.servlet.http.HttpServletResponse; +import java.util.Collections; + +/** + * 处理 Controller 里的返回值,从 Object转为Json + */ +public class ResponseJsonMethodReturnValueHandler implements HandlerMethodReturnValueHandler, InitializingBean { + private HttpMessageConverter messageConverter; + + @Override + public void afterPropertiesSet() { + if (messageConverter == null) { + messageConverter = new MappingJackson2HttpMessageConverter(ObjectMapperFactory.getDefaultObjectMapper()); + } + } + + @Override + public boolean supportsReturnType(MethodParameter returnType) { + return true; + } + + @Override + public void handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception { + mavContainer.setRequestHandled(true); + Object result = returnValue; + /** + * Web分页请求的返回按照antd框架要求的格式,不转为SuccessData + */ + result = result == null ? new SuccessData(Collections.emptyMap()) : new SuccessData(returnValue); + ServletServerHttpResponse response = new ServletServerHttpResponse(webRequest.getNativeResponse(HttpServletResponse.class)); + messageConverter.write(result, new MediaType(MediaType.APPLICATION_JSON, Collections.singletonMap("charset", "utf-8")), response); + } + + +} diff --git a/template/insiis-web/src/main/java/com/vs/SuccessData.java b/template/insiis-web/src/main/java/com/vs/SuccessData.java new file mode 100644 index 0000000..59e31c7 --- /dev/null +++ b/template/insiis-web/src/main/java/com/vs/SuccessData.java @@ -0,0 +1,30 @@ +package com.vs; + +public class SuccessData { + private final int code = 200; + private Object data; + private String message = ""; + public SuccessData(Object data){ + this.data = data; + } + + public int getCode() { + return code; + } + + public Object getData() { + return data; + } + + public void setData(Object data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/template/insiis-web/src/main/java/com/vs/VSResponseHandlerConfig.java b/template/insiis-web/src/main/java/com/vs/VSResponseHandlerConfig.java new file mode 100644 index 0000000..e83c0cd --- /dev/null +++ b/template/insiis-web/src/main/java/com/vs/VSResponseHandlerConfig.java @@ -0,0 +1,48 @@ +package com.vs; + +import com.vs.common.util.rpc.handler.CustomArgumentResolver; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.method.support.HandlerMethodArgumentResolver; +import org.springframework.web.method.support.HandlerMethodReturnValueHandler; +import org.springframework.web.servlet.HandlerExceptionResolver; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import java.util.List; + +@Configuration +public class VSResponseHandlerConfig implements WebMvcConfigurer { + + @Value("${com.toco.response.handler:true}") + private boolean useHandler; + + @Override + public void addArgumentResolvers(List resolvers) { + resolvers.add(new CustomArgumentResolver()); + } + + @Override + public void extendHandlerExceptionResolvers(List exceptionResolvers) { + if (!useHandler) { + return; + } + ResponseJsonExceptionResolver responseJsonExceptionResolver = new ResponseJsonExceptionResolver(); + try { + responseJsonExceptionResolver.afterPropertiesSet(); + } catch (Exception e) { + e.printStackTrace(); + } + exceptionResolvers.add(responseJsonExceptionResolver); + } + + @Override + public void addReturnValueHandlers(List returnValueHandlers) { + if (!useHandler) { + return; + } + ResponseJsonMethodReturnValueHandler responseJsonMethodReturnValueHandler = new ResponseJsonMethodReturnValueHandler(); + responseJsonMethodReturnValueHandler.afterPropertiesSet(); + returnValueHandlers.add(responseJsonMethodReturnValueHandler); + } + +} diff --git a/template/insiis-web/src/main/resources/META-INF/spring-autoconfigure-metadata.properties b/template/insiis-web/src/main/resources/META-INF/spring-autoconfigure-metadata.properties new file mode 100644 index 0000000..6c92314 --- /dev/null +++ b/template/insiis-web/src/main/resources/META-INF/spring-autoconfigure-metadata.properties @@ -0,0 +1,2 @@ +com.insigma.EnableDynamicDataSourceConfig= +com.insigma.EnableDynamicDataSourceConfig.AutoConfigureAfter=com.ulisesbocchio.jasyptspringboot.JasyptSpringBootAutoConfiguration diff --git a/template/insiis-web/src/main/resources/application-async.properties b/template/insiis-web/src/main/resources/application-async.properties new file mode 100644 index 0000000..921752c --- /dev/null +++ b/template/insiis-web/src/main/resources/application-async.properties @@ -0,0 +1,10 @@ +# 线程池核心线程数(设置为0时,使用CPU核心数作为核心线程池线程数) +odin.async.core-pool-size=2 +# 线程池缓冲队列最大长度 +odin.async.queue-capacity=200 +# 线程池维护线程所允许的空闲时间 +odin.async.keep-alive-seconds=60 +# 线程池最大线程数 +odin.async.max-pool-size=10 +# 线程名前缀 +odin.async.thread-name-prefix=asyncExecutor- diff --git a/template/insiis-web/src/main/resources/application-datasource.properties b/template/insiis-web/src/main/resources/application-datasource.properties new file mode 100644 index 0000000..0acea8e --- /dev/null +++ b/template/insiis-web/src/main/resources/application-datasource.properties @@ -0,0 +1,40 @@ +# 数据库配置 +#datasource +spring.datasource.url=jdbc:{{ .dbType }}://${DB_HOST:{{ .db_address }}}/${DB_DATABASE:{{ .db_database }}}?characterEncoding=utf-8&serverTimezone=Asia/Shanghai +spring.datasource.username=${DB_USER:{{ .db_username }}} +spring.datasource.password=${DB_PASSWORD:{{ .db_password }}} +spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource + +# Druid Data Source Config +#spring.datasource.driver-class-name=oracle.jdbc.OracleDriver +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver + +spring.datasource.druid.initial-size=5 +spring.datasource.druid.max-active=20 +spring.datasource.druid.min-idle=5 +spring.datasource.druid.max-wait=60000 +spring.datasource.druid.filter.stat.enabled=true +spring.datasource.druid.filter.stat.merge-sql=true +spring.datasource.druid.filter.stat.slow-sql-millis=5000 +spring.datasource.druid.web-stat-filter.enabled=true + +spring.datasource.druid.filter.wall.enabled=true +spring.datasource.druid.filter.wall.config.multi-statement-allow=true +spring.datasource.druid.filter.slf4j.enabled=true +spring.datasource.druid.filter.slf4j.statement-executable-sql-log-enable=true +spring.datasource.druid.filter.slf4j.data-source-log-enabled=false +spring.datasource.druid.filter.slf4j.connection-log-enabled=false +spring.datasource.druid.filter.slf4j.statement-log-enabled=false +spring.datasource.druid.filter.slf4j.result-set-log-enabled=false +#spring.datasource.druid.validation-query=select 1 from dual +#spring.datasource.druid.validation-query-timeout=30 +#spring.datasource.druid.test-on-borrow=true +#spring.datasource.druid.remove-abandoned=true +#spring.datasource.druid.remove-abandoned-timeout=90 +#spring.datasource.druid.log-abandoned=true + +spring.datasource.druid.stat-view-servlet.enabled=true +spring.datasource.druid.stat-view-servlet.login-username=admin +spring.datasource.druid.stat-view-servlet.login-password=admin + +#spring.datasource.druid.default-auto-commit=false diff --git a/template/insiis-web/src/main/resources/application-eps.properties b/template/insiis-web/src/main/resources/application-eps.properties new file mode 100644 index 0000000..bf27d6a --- /dev/null +++ b/template/insiis-web/src/main/resources/application-eps.properties @@ -0,0 +1,12 @@ +# 微服务网关配置 +#cloud_gateway_url=http://192.168.190.153:20080/ +#service.reg.url=http://192.168.70.23:28082/api/register + +# ⽹关地址 +eps.gateway.url=http://192.168.190.153:20080/ +# 渠道应⽤id +eps.gateway.appid=develop +# 渠道私钥 +eps.gateway.private-key=MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC2pQX50cLsQPTuhLxb8NXjpcVE33Ipz1KbXaKSd9+zarMfd5WudEcivpkqzzHV/nFSUA7zPq5BJXNv/OJDmqpqUv7Zy4tDcDjeoF9nfDqlCkNjx+iL2avSiaXcMej2FhAa1ZmThtFanaReKKLg941iX/N6UKbIuM2y5pK5FwWlu0yLJy1cGuatBYcPJ5rpeFTm4k6YOD7ZeDisHxp+x9rgq33EtrydBJjxw4znKUaUOw/mcjGBfgIgspQSSsxr+9hIT/VH7tUECHl89LY63j4DPIR5LetF4Z9uVSBbj8MmYUCPynHUrP5g4FEDJX4f2LsZ2P2yh+BStt1DF238DwxdAgMBAAECggEANWtOtCKFwFO/T4PDE6D87fguGlbALTpWDtr0EaK96tvqR+nR/ZREugTFB6BSEyS4QDrqJHrQvH0XpklwZBV4gmCD6W9+69qGx5ZgUQQkouC9lRGDEmQ3vPxFZoGygUcyrqaKpHtp//bbfC6mdOXylDM8IyozncFvaEPH5hq1rCL9S/doCckTJyUSCZnmV8w5xSETDBY63GMENerxlHjKy7Z63UKUprh0fmpBrW76kC+4G/dRldI3wufeeFnXUN+hwN/vAhlbc5CK7X0qkExemuXjFKBfKlJa/ipXOHY+wC+bMgu+81K/Se786CevmkyF87sM4wX7tOj0AXREObsMAQKBgQDglVvzJw9QhK8nCskqF9OsEixk4Tim8fn6YToSPk1efDwzExFjj/Oywoorra0l5+nES32pO0lXBe7Cjj6V6cInluJz8FddHg24QLRvmdX5fRRg8pHBtKWXgYMm6U7MtKEFLB6x9g6quFziozvLIPs+HQD4uIApBFwVWIZsiVzO9QKBgQDQMccdIShDB4h4LoUehpqYW9TJ6buMHcxyGYsuuUnGRMqpvF1PGNuKa4BSzf2EQ3juR9ZvT46p97mK/s7jdD4kgYntcR9oVxMitDyJHs2EiKk79a6z5TGz8CsCz6t/VVombPsD1dWjMfBSSTNRhtLM53YkM3lqcjE0wkhGfxmWyQKBgG4jUXCxmyUVrQAsnfLytHASiYr/mNTmnn1X6S7BNxg7PRqfI0v8cLseBLze86c/ULlffETeOl1fH3RyZecHOJxJtsy89VtJPdk6gkKo4vLzkGbrDug8O2lNrpAKowZpHv52YKdN0GuQ9px/CPfZON2BQ9S2RsPWy4H8ZBAeXVFxAoGBALLPPeMf2jOPob8OvVhVZSucG2r7aw/RfAk3NRoBG4LFDIaxeDZ58/yzjbgQoT9ar99/JYXef3otgFcHt+sUqFa0RyD+emoj9xRkVmWyZfMBaNBNlyl8nK6dhGNat0Gard241fIaUu1h87TIl+HaeOxxkz9OUmaBAw/8GRUrDnA5AoGAEcGxoKtd5SlyMFH4JiWPlG29nAo4DyggwvUZu1GfXoI6ki0ztWTLJBQTdeVGBHT+8RoNSlfn+deOLkunukYC8vOqxkNkVTDEJlnYofD9DNes6vuvIF/gLMdjylsNVOtgmOoozCa6BkTipm2JEp4+ZQIgVOBL3nfsW9jCyrqRZI0= +# 渠道公钥 +eps.gateway.public-key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAswvVxOlvzWmcex40W3S8y3a1VphIohUOQ9WI1DZL8/l6rSHF9Mi4NmtP9yRnrwH5bO2duOREY7ZmH1sNloouUWniKMt+5Rnkz98HxcP/VxfLI8ZZQxQTFEqWoR/ESjOplZP74DeT7mHaY8+CWeOnGKC8jMaHE8fgDV7dHEMQdM9+kGJ61k0AxDkCdXTNk8/MHSAOzstIIPOKpKHi+YsV9AS1+ZAcJQbdCMD4Uo6EdzqTjRtvxQds9xzyB3fwQIhM5LspRyXutuWEWFPLvX0KsBKzY1XJoPSlhedcEgImaUX2wgPlnBKG+JN8/r1r+G9RpK68PHhqObNnmYBOMXOnMQIDAQAB diff --git a/template/insiis-web/src/main/resources/application-eureka.properties b/template/insiis-web/src/main/resources/application-eureka.properties new file mode 100644 index 0000000..b818de7 --- /dev/null +++ b/template/insiis-web/src/main/resources/application-eureka.properties @@ -0,0 +1,11 @@ +# eureka注册中心 +eureka.client.serviceUrl.defaultZone=http://192.168.70.10:19001/eureka/ +eureka.instance.instance-id=${spring.application.name}:${server.port} +eureka.instance.prefer-ip-address=true +eureka.client.enabled=false + +# default context 连接超时时间 +feign.client.config.default.connectTimeout = 5000 +# default context 读超时时间 +feign.client.config.default.readTimeout = 30000 + diff --git a/template/insiis-web/src/main/resources/application-mybatis.properties b/template/insiis-web/src/main/resources/application-mybatis.properties new file mode 100644 index 0000000..c5a58d5 --- /dev/null +++ b/template/insiis-web/src/main/resources/application-mybatis.properties @@ -0,0 +1,11 @@ +# mybatis-plus config +mybatis-plus.mapper-locations=classpath*:mapper/com/insigma/**/*DAO.xml +#mybatis-plus.type-aliases-package=com.insigma.**.entity +mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl +# 关闭sql日志输出 +#mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.nologging.NoLoggingImpl +mybatis-plus.configuration.call-setters-on-nulls=true +mybatis-plus.configuration.cache-enabled=true +mybatis-plus.configuration.map-underscore-to-camel-case=true +mybatis-plus.configuration.jdbc-type-for-null=null +mybatis-plus.auto-refresh=false diff --git a/template/insiis-web/src/main/resources/application-quartz.properties b/template/insiis-web/src/main/resources/application-quartz.properties new file mode 100644 index 0000000..bb2e634 --- /dev/null +++ b/template/insiis-web/src/main/resources/application-quartz.properties @@ -0,0 +1,19 @@ +spring.quartz.properties.org.quartz.scheduler.instanceName=EPScheduler +spring.quartz.properties.org.quartz.scheduler.instanceId=AUTO + +spring.quartz.properties.org.quartz.jobStore.class=org.springframework.scheduling.quartz.LocalDataSourceJobStore +#spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.oracle.OracleDelegate +#spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.PostgreSQLDelegate +spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate +spring.quartz.properties.org.quartz.jobStore.tablePrefix=QRTZ_ +spring.quartz.properties.org.quartz.jobStore.isClustered=true +spring.quartz.properties.org.quartz.jobStore.clusterCheckinInterval=10000 +spring.quartz.properties.org.quartz.jobStore.useProperties=false + +spring.quartz.properties.org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool +spring.quartz.properties.org.quartz.threadPool.threadCount=10 +spring.quartz.properties.org.quartz.threadPool.threadPriority=5 +spring.quartz.properties.org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true + +spring.quartz.jdbc.initialize-schema=never +spring.quartz.job-store-type=jdbc diff --git a/template/insiis-web/src/main/resources/application-redis.properties b/template/insiis-web/src/main/resources/application-redis.properties new file mode 100644 index 0000000..669abdf --- /dev/null +++ b/template/insiis-web/src/main/resources/application-redis.properties @@ -0,0 +1,36 @@ +# Redis +# Redis服务器地址(集群需要注释) +spring.redis.host=redis.byteawake.com +# Redis服务器连接端口(集群需要注释) +spring.redis.port=6379 +# Redis服务器连接密码(默认为空) +spring.redis.password= +# redis cluster +# redis集群节点(单机版需要注释) +#spring.redis.cluster.nodes=127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382 +# 在群集中执行命令时要遵循的最大重定向数目(单机版需要注释) +#spring.redis.cluster.max-redirects=3 + +# Redis Session配置 +# 命名空间(不同系统使用同一个redis服务器时,需要保持不同) +spring.redis.session.namespace=spring:session:${spring.application.name} +# 超时时间(单位:秒) +spring.redis.session.timeout=3600 + +# redis config +# Redis数据库索引(默认为0) +spring.redis.database=0 +# 连接超时时间(毫秒) +spring.redis.timeout=10000ms + +# Lettuce(springboot2以后推荐使用的redis连接池) +# 连接池最大连接数(使用负值表示没有限制) +spring.redis.lettuce.pool.max-active=8 +# 连接池最大阻塞等待时间(使用负值表示没有限制) +spring.redis.lettuce.pool.max-wait=10000ms +# 连接池中的最大空闲连接 +spring.redis.lettuce.pool.max-idle=8 +# 连接池中的最小空闲连接 +spring.redis.lettuce.pool.min-idle=0 +# 关闭超时时间 +spring.redis.lettuce.shutdown-timeout=100ms diff --git a/template/insiis-web/src/main/resources/application-security.properties b/template/insiis-web/src/main/resources/application-security.properties new file mode 100644 index 0000000..2a83a8d --- /dev/null +++ b/template/insiis-web/src/main/resources/application-security.properties @@ -0,0 +1,37 @@ +# security +# cors信任站点 +odin.security.cors.origins=http://localhost:8089,http://localhost:8090 +# 免登录请求 +odin.security.free.requests=/sso/login,/check/login,/favicon.ico,/twoFactorEnabled +odin.security.free.like-requests=/** +# 登录之后才能访问的请求 +odin.security.free.requests-after-login=/sys/guide/Guide/**,/sys/user/getUserSlevel,/sys/downloadcenter/DownloadCenter/** +# 请求防重复提交 +odin.security.repeat.enable=true +# 是否开启验证码校验 +odin.security.validatecode.enable=true +# 验证码类型 0: 简单验证码(默认),1:滑块验证码,2:点触验证码,3:旋转验证码,4:躲避障碍验证码 +odin.security.validatecode.type=0 +#odin.security.cache.enable=true +# 用户最大登录失败次数,超过将锁定账户 +#odin.security.maxFailTime=5 +# 同一用户最大同时登录数 +#odin.security.sessions.concurrent-max-sessions=1 +# 防SQL注入 +odin.safety.sql.enabled=true +odin.safety.sql.allowUrls=/sys/message/manage/save,/sys/sysFunctionDoc/doSave,/business/eptag/config/save +#odin.safety.sql.badstr=exec | and |execute |insert |select |delete |update |count(|drop |master |truncate |char |declare |sitename |net user |xp_cmdshell |like'|create | table|from |grant | use |group_concat(|column_name |information_schema.columns|table_schema |union |where | or |like |(+)|-- + +# 防XSS攻击 +odin.safety.script.enabled=true +odin.safety.script.allowUrls=/sys/message/manage/save,/sys/sysFunctionDoc/doSave,/business/eptag/config/save, +#odin.safety.script.badstr= + + + + + + + + + + + + + + + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + ${CONSOLE_LOG_CHARSET} + + + + + + + + ${FILE_LOG_PATTERN} + ${FILE_LOG_CHARSET} + + ${LOG_FILE} + + + ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz + + 30 + + 100MB + + + + + + ERROR + DENY + ACCEPT + + + ${FILE_LOG_PATTERN} + ${FILE_LOG_CHARSET} + + ${ERROR_LOG_FILE} + + + ${ERROR_LOG_FILE}.%d{yyyy-MM-dd}.%i.gz + + 30 + + 100MB + + + + + 0 + 2048 + false + + + + + 0 + 2048 + false + + + + + + + + diff --git a/template/insiis-web/src/main/resources/mapper/com/insigma/business/demo/DemoPersonDAO.xml b/template/insiis-web/src/main/resources/mapper/com/insigma/business/demo/DemoPersonDAO.xml new file mode 100644 index 0000000..a16ac9a --- /dev/null +++ b/template/insiis-web/src/main/resources/mapper/com/insigma/business/demo/DemoPersonDAO.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/template/insiis-web/src/main/resources/static/odin-base.jar b/template/insiis-web/src/main/resources/static/odin-base.jar new file mode 100644 index 0000000000000000000000000000000000000000..0f7264c4500e9fe2bb08d2372b423920712645f5 GIT binary patch literal 1154 zcmWIWW@Zs#;Nak3Xm5HP!GHur7+4s5T|*poJ^kGDeI5Ng-CTo1^nBg^onl~k{FI3y zz?+?8P3s~N7N8y`AP&H35+6`DIlm~?IX^EgGhMGDH;4D4Ytv!}28ILdg$Fz>9$m6v z+5PZRv-SG>YxSqtY*zE=)Tm_rc0T`!-?3kXHxHX>^v_v%;^$|nWy|g?cxo0JQ*v!y zxxZh4-}`5mVwWbz>Tht&7WyXlu|ro+a?%Gk!- z(l)&q1O4wucbNPWD(!2r_VA`|E{|SKyV-v(ZtmaYaQ>2S;pvlitX;V;h}bfx zG!+TONWJ)F;JNI==DXM47Pl+MpIWcM*EV^($JPUz`Q82Rzd7{ncewjI1A!Etl7p9C zb=+8YEBLZ*@x}J7YEzFky}l&=I*Y&YiuG#&R<3KWWlkCt@$#=0+oOb^E-+iC;dR)@T>CJ@#`kYv(1Qr7{z58szDpfAT`f&#pE}_0azNH{G8s z{Zc6~HOu{~>$dYzU00*0XE+(2Z2ofR`HG{@nS+}z?wns4dP}|Gz<;Y>dGq7m-Z?9K zzw4Cszvc5~xG!y=Kb7y{55YU$E55|^ILBulNj$Q5+qd?>jRGfmy+1m$M}5qzWYSVI z`M9@6_FwZyg%8u4J}jTw9536XVepJ5TMuwI$m7 ze6U)|Gr|6OXL5{8W_Y(&$5^;TTW}xR_U6-0vzf9Y;@`f%Q!|>p%yrhAE#_`%PL{pd z_tIRJ=6MQDIuf~VLV&s8;`!ef@QJ^SZF&>H^z?I=@YK~d79mG0X07AVeQfg}kU?_s zye$PMEW$5k<;*giAb*5^MOl zSQ{0%?aT74hvm9=!%zHY2IbF;EkZL=m>C!nfSEMFn~_O`0g=~{^DZc_qXJwxAKesW f8$kIS0la`r)Lb9n&B_LnX9B_|ApHvHG6n_!bz1MO literal 0 HcmV?d00001 diff --git a/template/insiis-web/src/main/resources/static/prd.desc b/template/insiis-web/src/main/resources/static/prd.desc new file mode 100644 index 0000000..110e7fb --- /dev/null +++ b/template/insiis-web/src/main/resources/static/prd.desc @@ -0,0 +1,5 @@ +{ + "frame": "Odin7C", + "version": "2.6.5", + "enc": "80EA7D6CC83C4679C03EAA7001C256C9" +} \ No newline at end of file diff --git a/template/insiis-web/src/main/resources/templates/blo.java.ftl b/template/insiis-web/src/main/resources/templates/blo.java.ftl new file mode 100644 index 0000000..6cb6b57 --- /dev/null +++ b/template/insiis-web/src/main/resources/templates/blo.java.ftl @@ -0,0 +1,15 @@ +package ${cfg.bloPath}; + +import org.mohrss.leaf.core.framework.domain.blo.IBLO; +/** +*

+* ${table.comment!} 服务类 +*

+* +* @author ${author} +* @since ${date} +*/ + +public interface ${entity}BLO extends IBLO { + +} diff --git a/template/insiis-web/src/main/resources/templates/bloImpl.java.ftl b/template/insiis-web/src/main/resources/templates/bloImpl.java.ftl new file mode 100644 index 0000000..f3d6663 --- /dev/null +++ b/template/insiis-web/src/main/resources/templates/bloImpl.java.ftl @@ -0,0 +1,23 @@ +package ${cfg.bloPath}.impl; + +import ${package.Mapper}.${table.mapperName}; +import ${cfg.bloPath}.${entity}BLO; +import org.mohrss.leaf.core.framework.domain.blo.impl.BLOImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** +*

+* ${table.comment!} 服务实现类 +*

+* +* @author ${author} +* @since ${date} +*/ +@Service +public class ${entity}BLOImpl extends BLOImpl implements ${entity}BLO { + + @Autowired + private ${table.mapperName} ${table.mapperName?uncap_first}; + +} \ No newline at end of file diff --git a/template/insiis-web/src/main/resources/templates/bpo.java.ftl b/template/insiis-web/src/main/resources/templates/bpo.java.ftl new file mode 100644 index 0000000..d3579f0 --- /dev/null +++ b/template/insiis-web/src/main/resources/templates/bpo.java.ftl @@ -0,0 +1,15 @@ +package ${cfg.bpoPath}; + +import org.mohrss.leaf.core.framework.domain.bpo.IBPO; +/** +*

+* ${table.comment!} 服务类 +*

+* +* @author ${author} +* @since ${date} +*/ + +public interface ${entity}BPO extends IBPO { + +} diff --git a/template/insiis-web/src/main/resources/templates/bpoImpl.java.ftl b/template/insiis-web/src/main/resources/templates/bpoImpl.java.ftl new file mode 100644 index 0000000..2402d83 --- /dev/null +++ b/template/insiis-web/src/main/resources/templates/bpoImpl.java.ftl @@ -0,0 +1,24 @@ +package ${cfg.bpoPath}.impl; + +import ${package.Mapper}.${table.mapperName}; +import ${cfg.bloPath}.${entity}BLO; +import ${cfg.bpoPath}.${entity}BPO; +import org.mohrss.leaf.core.framework.domain.bpo.impl.BPOImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** +*

+* ${table.comment!} 服务实现类 +*

+* +* @author ${author} +* @since ${date} +*/ +@Service +public class ${entity}BPOImpl extends BPOImpl implements ${entity}BPO { + + @Autowired + private ${entity}BLO ${entity?uncap_first}BLO; + +} \ No newline at end of file diff --git a/template/insiis-web/src/main/resources/templates/controller.java.ftl b/template/insiis-web/src/main/resources/templates/controller.java.ftl new file mode 100644 index 0000000..fc485c2 --- /dev/null +++ b/template/insiis-web/src/main/resources/templates/controller.java.ftl @@ -0,0 +1,79 @@ +package ${package.Controller}; + +import com.insigma.framework.ResponseMessage; +import com.insigma.web.support.annotation.OdinRequest; +import com.insigma.web.support.annotation.OdinRequestParam; +import com.insigma.web.support.controller.BaseController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PathVariable; +import ${package.Service}.${table.serviceName}; + +<#if restControllerStyle> +import org.springframework.web.bind.annotation.RestController; +<#else> +import org.springframework.stereotype.Controller; + + +/** +*

+* ${table.comment!} 前端控制器 +*

+* +* @author ${author} +* @since ${date} +*/ +<#if restControllerStyle> +@RestController +<#else> +@Controller + +@RequestMapping("${cfg.requestMapping}") +public class ${table.controllerName} extends BaseController { + + @Autowired + private ${table.serviceName} ${table.serviceName?uncap_first}; + + /** + * 页面初始化 + */ + @OdinRequest(init = true) + @PostMapping("/doInit") + public ResponseMessage doInit() { + return this.ok(); + } + + /** + * 查询 + */ + @OdinRequest + @PostMapping("/query") + public ResponseMessage query() { + this.set("page", 1); // 需要将前端ep-table中:currentPage定义的值设置成1 + return this.ok(); + } + + /** + * 分页查询 + */ + @OdinRequest + @PostMapping("/doGridQuery/{name}") + public ResponseMessage doGridQuery(@OdinRequestParam("t_tableData_page") Integer page, + @OdinRequestParam("t_tableData_size") Integer size, + @PathVariable String name) { + this.set("page", page); // 需要将t_tableData_page的值赋值到前端ep-table表格:currentPage的值中 + return this.ok(); + } + + /** + * 保存 + */ + @OdinRequest(refresh = true) + @PostMapping("/doSave/{name}") + public ResponseMessage doSave(@PathVariable String name) { + //this.refresh(); // 可以通过@OdinRequest(refresh = true)刷新,也可以手动调用this.refresh();来刷新 + return this.ok("保存成功!"); + } + +} diff --git a/template/insiis-web/src/main/resources/templates/mapper.java.ftl b/template/insiis-web/src/main/resources/templates/mapper.java.ftl new file mode 100644 index 0000000..138ca3a --- /dev/null +++ b/template/insiis-web/src/main/resources/templates/mapper.java.ftl @@ -0,0 +1,18 @@ +package ${package.Mapper}; + +import com.insigma.framework.mybatis.BaseDAO; +import ${package.Entity}.${entity}; +import ${superMapperClassPackage}; + +/** +*

+* ${table.comment!} BaseDAO 接口 +*

+* +* @author ${author} +* @since ${date} +*/ +public interface ${table.mapperName} extends BaseDAO<${entity}> { + +} + diff --git a/template/insiis-web/src/main/resources/templates/monReportTemplate.ftl b/template/insiis-web/src/main/resources/templates/monReportTemplate.ftl new file mode 100644 index 0000000..0ae43eb --- /dev/null +++ b/template/insiis-web/src/main/resources/templates/monReportTemplate.ftl @@ -0,0 +1,4381 @@ + + + + + + epsoft + epsoft + 2 + 1 + 2022-03-24T02:38:00Z + 2022-03-24T02:38:00Z + 4 + 225 + 1283 + Insigma + 10 + 3 + 1505 + 16 + + + 2052-0.0.0.0 + 3188E7923005410FAA37074467CEB224 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 磐石技术中台 + + + + + + + + + + - + + + + + + + + + + + 服务端性能监控报告 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 距近 + + + + + + + + ${dates} + + + + + + + + + 日服务端性能监测统计,平台最终得分为 + + + + + + + ${score} + + + + + + + + + + + + + + + + + SQL + + + + + + + ${scoreSlowSql} + + + + + + + + + 分, + + + + + + + + SQL + + + + + + + ${scoreErrorSql} + + + + + + + + + + 分, + + + + + + + + URI + + + + + + + ${scoreSlowUrl} + + + + + + + + + + 分, + + + + + + + + JDBC + + + + + + + ${scoreJdbcErrorUrl} + + + + + + + + + + 分),连接池峰值状态 + + + + + + + ${type} + + + + + + + + + + ,所有 + + + + + + + + SQL + + + + + + + + + 执行平均耗时 + + + + + + + ${sqlAvgTime} + + + + + + + + + + + + + + + + + 秒, + + + + + + + + URI + + + + + + + + + 平均请求耗时 + + + + + + + ${urlAvgTime} + + + + + + + + + + + + + + + + + 秒,总体状态良好。平台中仍存在部分问题, + + + + + + + + + + 现总结 + + + + + + + + + + 如下: + + + + + + + + + + + + + + + + + + + + 执行时间 + + + + + + + + 5s + + + + + + + + + 以上的慢 + + + + + + + + SQL + + + + + + + + + + + + + + + + ${slowSql} + + + + + + + + + + + + + + + + + + + + ,执行过程中出现错误的 + + + + + + + + SQL + + + + + + + + + + + + + + + + ${sqlExecuteError} + + + + + + + + + + + + + + + + + + + + ,发生错误共 + + + + + + + ${sqlExecuteErrorCount} + + + + + + + + + + 次; + + + + + + + + + + + + + + + + + + + + 请求时间 + + + + + + + + 8s + + + + + + + + + 以上的慢 + + + + + + + + URI + + + + + + + + + + + + + + + + ${slowUri} + + + + + + + + + + + + + + + + + + + + ,请求过程中出现 + + + + + + + + JDBC + + + + + + + + + 执行错误的 + + + + + + + + URI + + + + + + + + + + + + + + + + ${jdbcError} + + + + + + + + + + + + + + + + + + + + + ,错误共计 + + + + + + + ${jdbcErrorCount} + + + + + + + + + + 次; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 具体详情请看下方疑似问题分类表。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 生成时间: + + + + + + + ${newDate} + + + <#if sqlList?? && (sqlList?size>0)> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SQL + + + + + + + + + + + 监测记录详情 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 序号 + + + + + + + + + + + + + + + + + + + + + + + + + + + SQL + + + + + + + 名称 + + + + + + + + + + + + + + + + + + + + + + + + + + + + 执行 + + + + + + + + + + + + + + + + + + + + + + + + + (次) + + + + + + + + + + + + + + + + + + + + + + + + + + + + 平均耗时 + + + + + + + + + + + + + + + + + + + + + s + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 最慢耗时 + + + + + + + + + + + + + + + + + + + + + s + + + + + + + + + + + + + <#list sqlList as item> + + + + + + + + + + + + + + + + + + + ${item.index} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${item.executeCount} + + + + + + + + + + + + + + + + + + ${item.avgExecutionTime} + + + + + + + + + + + + + + + + + + ${item.maxTimespan} + + + + + + + + <#if uriList?? && (uriList?size>0)> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + URI + + + + + + + + + + + 监测记录详情 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 序号 + + + + + + + + + + + + + + + + + + + + + + + + + + + URI + + + + + + + 名称 + + + + + + + + + + + + + + + + + + + + + + + + + + + + 请求次数 + + + + + + + + + + + + (次) + + + + + + + + + + + + + + + + + + + + + + + + + + + + 平均耗时 + + + + + + + + + + + + + + + + + + + + + s + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 最慢耗时 + + + + + + + + + + + + + + + + + + + + + s + + + + + + + + + + + + <#list uriList as item> + + + + + + + + + + + + + + + + + + + ${item.index} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${item.requestCount} + + + + + + + + + + + + + + + + + + + ${item.avgRequestTime} + + + + + + + + + + + + + + + + + + ${item.requestTimeNanoMax} + + + + + + + + + + <#if sqlErrorList?? && (sqlErrorList?size>0)> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SQL + + + + + + + + + + + 执行出错监测记录详情 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 序号 + + + + + + + + + + + + + + + + + + + + + + + + + + + SQL + + + + + + + 名称 + + + + + + + + + + + + + + + + + + + + + + + + + + + + 执行 + + + + + + + + + + + + + + + + + + + + + + + + + (次) + + + + + + + + + + + + + + + + + + + + + + + + + + + + 错误数 + + + + + + + + + + + + + + + (次) + + + + + + + + + + + + + + + + + + + + + + + + + + + + 错误率 + + + + + + + + + + + + + + + + + + + + + % + + + + + + + + + + + + <#list sqlErrorList as item> + + + + + + + + + + + + + + + + + + + ${item.index} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${item.executeCount} + + + + + + + + + + + + + + + + + + ${item.errorCount} + + + + + + + + + + + + + + + + + + ${item.sqlErrorRate} + + + + + + + + <#if jdbcErrorList?? && (jdbcErrorList?size>0)> + + + + + + + + + + + URI JDBC + + + + + + + + + + + 出错监测记录详情 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 序号 + + + + + + + + + + + + + + + + + + + + + + + + + + + URI + + + + + + + 名称 + + + + + + + + + + + + + + + + + + + + + + + + + + + JDBC + + + + + + + 执行数 + + + + + + + + + + + + (次) + + + + + + + + + + + + + + + + + + + + + + + + + + + JDBC + + + + + + + 出错数 + + + + + + + + + + + + + + + (次) + + + + + + + + + + + + + + + + + + + + + + + + + + + + 错误率 + + + + + + + + + + + + + + + + + + + + + % + + + + + + + + + + + + <#list jdbcErrorList as item> + + + + + + + + + + + + + + + + + + + ${item.index} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${item.jdbcExecuteCount} + + + + + + + + + + + + + + + + + + ${item.jdbcExecuteErrorCount} + + + + + + + + + + + + + + + + + + + ${item.jdbcErrorRate} + + + + + + + + + + + + + + + + + + + + + + + + + + 附件: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 规则说明 + + + + + + + + + + + + + + + + + 序号 + + + + + + + + + + + + + + + 规则名称 + + + + + + + + + + + + + + + 规则定义 + + + + + + + + + + + + + + + + + + + + 序号 + + + + + + + + + + + + + + + + + + + + 规则名称 + + + + + + + + + + + + + + + + + + + + 规则定义 + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + SQL + + + + + + + + + + + + + + + 响应时间≥ + + + + + + 5 + + + + + + + 秒。 + + + + + + + + + + + + + + 9 + + + + + + + + + + + + + + SQL + + + + + + + 平均耗时 + + + + + + + + + + + + + + + + + + + + + 1s + + + + + + + 黑; + + + + + + 1~3s + + + + + + + 黄;≥ + + + + + + 3s + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + + + + + + + + + + + + + + + + + + + + + URI + + + + + + + + + + + + + + URI + + + + + + + 响应时间≥ + + + 8 + + + + + + + 秒。 + + + + + + + + + + + + + + 10 + + + + + + + + + + + + + + SQL + + + + + + + 最慢耗时 + + + + + + + + + + + + + + + + + + + + + + + + + + 3s + + + + + + + 黑; + + + + + + 3~5s + + + + + + + 黄;≥ + + + + + + 5s + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + + + + + + + + + + + + + + + 总分 + + + + + + + + + + + + + + + 满分 + + + + + + 100 + + + + + + + ,按 + + + + + + 4 + + + + + + + 项规则扣分。 + + + + + + + + + + + + + + 11 + + + + + + + + + + + + + + + + 活跃数当前 + + + + + + + + + + + + + + + + ≥最大 + + + + + + + + 活跃数 + + + + + + + 80% + + + + + + + (红) + + + + + + + + + + + + + + + + + + + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + SQL + + + + + + + 扣分 + + + + + + + + + + + + + + + 满分 + + + + + + 30 + + + + + + + 分,出现一次扣 + + + + + + 1 + + + + + + + 分。 + + + + + + + + + + + + + + 12 + + + + + + + + + + + + + + + + 活跃数 + + + + + + + + 峰值 + + + + + + + + + + + + + + + + + + + + =最大 + + + + + + + + 活跃数 + + + + + + + 100% + + + + + + + (红) + + + + + + + + + + + + + + + + + + + 5 + + + + + + + + + + + + + + + + + + + + SQL + + + + + + + 错误扣分 + + + + + + + + + + + + + + + 满分 + + + + + + 20 + + + + + + + 分,出现一次扣 + + + + + + 0.01 + + + + + + + 分。 + + + + + + + + + + + + + + 13 + + + + + + + + + + + + + + URI + + + + + + + 平均耗时 + + + + + + + + + + + + + + + + + + + + + + + + + + 2s + + + + + + + 黑; + + + + + + 2~5s + + + + + + + 黄;≥ + + + + + + 5s + + + + + + + + + + + + + + + + + + + + + + + + + + 6 + + + + + + + + + + + + + + + + + + + + + + + + + + URI + + + + + + + 扣分 + + + + + + + + + + + + + + + 满分 + + + + + + 30 + + + + + + + 分,出现一次扣 + + + + + + 1 + + + + + + + 分。 + + + + + + + + + + + + + + 14 + + + + + + + + + + + + + + URI + + + + + + + 最慢耗时 + + + + + + + + + + + + + + + + + + + + + + + + + + 5s + + + + + + + 黑; + + + + + + 5~8s + + + + + + + 黄;≥ + + + + + + 8s + + + + + + + + + + + + + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + + + JDBC + + + + + + + 错误扣分 + + + + + + + + + + + + + + + 满分 + + + + + + 20 + + + + + + + 分,出现一次扣 + + + + + + 0.01 + + + + + + + 分。 + + + + + + + + + + + + + + 15 + + + + + + + + + + + + + + SQL + + + + + + + 分段监测 + + + + + + + + + + + + + + ( + + + + + + + 平均 + + + + + + ) + + + + + + + + + + + + + 1s + + + + + + + + + + + + + 1~3s + + + + + + + ,≥ + + + + + + 3s + + + + + + + + + + + + + ( + + + + + + + 最慢 + + + + + + ) + + + + + + + + + + + + + 3s + + + + + + + + + + + + + 3~5s + + + + + + + ,≥ + + + + + + 5s + + + + + + + + + + + + + + + + + + + + + + + + + + 8 + + + + + + + + + + + + + + + 得分状态 + + + + + + + + + + + + + + + + + + + + + 90 + + + + + + + (健康); + + + + + + 75~90 + + + + + + + (良好);< + + + + + + 75 + + + + + + + (预警) + + + + + + + + + + + + + + 16 + + + + + + + + + + + + + + + 监测周期 + + + + + + + + + + + + + + + + + + + + 默认近 + + + + + + 7 + + + + + + + 天,可通过代码配置 + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/template/insiis-web/src/main/resources/templates/service.java.ftl b/template/insiis-web/src/main/resources/templates/service.java.ftl new file mode 100644 index 0000000..baabc68 --- /dev/null +++ b/template/insiis-web/src/main/resources/templates/service.java.ftl @@ -0,0 +1,14 @@ +package ${package.Service}; + +/** +*

+* ${table.comment!} 服务类 +*

+* +* @author ${author} +* @since ${date} +*/ + +public interface ${table.serviceName} { + +} diff --git a/template/insiis-web/src/main/resources/templates/serviceImpl.java.ftl b/template/insiis-web/src/main/resources/templates/serviceImpl.java.ftl new file mode 100644 index 0000000..e908b6f --- /dev/null +++ b/template/insiis-web/src/main/resources/templates/serviceImpl.java.ftl @@ -0,0 +1,22 @@ +package ${package.ServiceImpl}; + +import ${package.Mapper}.${table.mapperName}; +import ${package.Service}.${table.serviceName}; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** +*

+* ${table.comment!} 服务实现类 +*

+* +* @author ${author} +* @since ${date} +*/ +@Service +public class ${table.serviceImplName} implements ${table.serviceName} { + + @Autowired + private ${table.mapperName} ${table.mapperName?uncap_first}; + +} \ No newline at end of file diff --git a/template/insiis-web/src/test/java/com/insigma/InsiisWebApplicationTests.java b/template/insiis-web/src/test/java/com/insigma/InsiisWebApplicationTests.java new file mode 100644 index 0000000..c91e67f --- /dev/null +++ b/template/insiis-web/src/test/java/com/insigma/InsiisWebApplicationTests.java @@ -0,0 +1,16 @@ +package com.insigma; + +import org.junit.jupiter.api.Test; +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 +public class InsiisWebApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/template/modules/.gitkeep b/template/modules/.gitkeep new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/template/modules/.gitkeep @@ -0,0 +1 @@ + diff --git a/template/mvnw b/template/mvnw new file mode 100755 index 0000000..8d937f4 --- /dev/null +++ b/template/mvnw @@ -0,0 +1,308 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.2.0 +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /usr/local/etc/mavenrc ] ; then + . /usr/local/etc/mavenrc + fi + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "$(uname)" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + JAVA_HOME="$(/usr/libexec/java_home)"; export JAVA_HOME + else + JAVA_HOME="/Library/Java/Home"; export JAVA_HOME + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=$(java-config --jre-home) + fi +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$JAVA_HOME" ] && + JAVA_HOME=$(cygpath --unix "$JAVA_HOME") + [ -n "$CLASSPATH" ] && + CLASSPATH=$(cygpath --path --unix "$CLASSPATH") +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] && + JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); pwd)" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="$(which javac)" + if [ -n "$javaExecutable" ] && ! [ "$(expr "\"$javaExecutable\"" : '\([^ ]*\)')" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=$(which readlink) + if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then + if $darwin ; then + javaHome="$(dirname "\"$javaExecutable\"")" + javaExecutable="$(cd "\"$javaHome\"" && pwd -P)/javac" + else + javaExecutable="$(readlink -f "\"$javaExecutable\"")" + fi + javaHome="$(dirname "\"$javaExecutable\"")" + javaHome=$(expr "$javaHome" : '\(.*\)/bin') + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="$(\unset -f command 2>/dev/null; \command -v java)" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=$(cd "$wdir/.." || exit 1; pwd) + fi + # end of workaround + done + printf '%s' "$(cd "$basedir" || exit 1; pwd)" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + # Remove \r in case we run on Windows within Git Bash + # and check out the repository with auto CRLF management + # enabled. Otherwise, we may read lines that are delimited with + # \r\n and produce $'-Xarg\r' rather than -Xarg due to word + # splitting rules. + tr -s '\r\n' ' ' < "$1" + fi +} + +log() { + if [ "$MVNW_VERBOSE" = true ]; then + printf '%s\n' "$1" + fi +} + +BASE_DIR=$(find_maven_basedir "$(dirname "$0")") +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR +log "$MAVEN_PROJECTBASEDIR" + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" +if [ -r "$wrapperJarPath" ]; then + log "Found $wrapperJarPath" +else + log "Couldn't find $wrapperJarPath, downloading it ..." + + if [ -n "$MVNW_REPOURL" ]; then + wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + else + wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + fi + while IFS="=" read -r key value; do + # Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' ) + safeValue=$(echo "$value" | tr -d '\r') + case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;; + esac + done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" + log "Downloading from: $wrapperUrl" + + if $cygwin; then + wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath") + fi + + if command -v wget > /dev/null; then + log "Found wget ... using wget" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + else + wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + log "Found curl ... using curl" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" + else + curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" + fi + else + log "Falling back to using Java to download" + javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java" + javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaSource=$(cygpath --path --windows "$javaSource") + javaClass=$(cygpath --path --windows "$javaClass") + fi + if [ -e "$javaSource" ]; then + if [ ! -e "$javaClass" ]; then + log " - Compiling MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/javac" "$javaSource") + fi + if [ -e "$javaClass" ]; then + log " - Running MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath" + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +# If specified, validate the SHA-256 sum of the Maven wrapper jar file +wrapperSha256Sum="" +while IFS="=" read -r key value; do + case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;; + esac +done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" +if [ -n "$wrapperSha256Sum" ]; then + wrapperSha256Result=false + if command -v sha256sum > /dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | sha256sum -c > /dev/null 2>&1; then + wrapperSha256Result=true + fi + elif command -v shasum > /dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | shasum -a 256 -c > /dev/null 2>&1; then + wrapperSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." + echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties." + exit 1 + fi + if [ $wrapperSha256Result = false ]; then + echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2 + echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2 + echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2 + exit 1 + fi +fi + +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$JAVA_HOME" ] && + JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME") + [ -n "$CLASSPATH" ] && + CLASSPATH=$(cygpath --path --windows "$CLASSPATH") + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR") +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +# shellcheck disable=SC2086 # safe args +exec "$JAVACMD" \ + $MAVEN_OPTS \ + $MAVEN_DEBUG_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/template/mvnw.cmd b/template/mvnw.cmd new file mode 100755 index 0000000..c4586b5 --- /dev/null +++ b/template/mvnw.cmd @@ -0,0 +1,205 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.2.0 +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %WRAPPER_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file +SET WRAPPER_SHA_256_SUM="" +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B +) +IF NOT %WRAPPER_SHA_256_SUM%=="" ( + powershell -Command "&{"^ + "$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^ + "If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^ + " Write-Output 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^ + " Write-Output 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^ + " Write-Output 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^ + " exit 1;"^ + "}"^ + "}" + if ERRORLEVEL 1 goto error +) + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%"=="on" pause + +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% + +cmd /C exit /B %ERROR_CODE% diff --git a/template/pom.xml b/template/pom.xml new file mode 100644 index 0000000..8e959b6 --- /dev/null +++ b/template/pom.xml @@ -0,0 +1,213 @@ + + + + 4.0.0 + com.insigma + insiis7 + pom + ${revision} + insiis7 + epsoft insiis7 project for Spring Boot + + 3.1.0-SNAPSHOT + UTF-8 + UTF-8 + 1.8 + 2021.0.9 + 1.2.20 + 3.5.5 + 2.11.1 + 1.9.4 + 2.12.0 + 1.2.83 + 2021.1 + 2.2.224 + + 7.0.0-SNAPSHOT + 1.2 + 1.0.8 + 12.2.0.1 + 8.0.31 + 8.6.0 + 2.4.0 + 42.5.6 + UTF-8 + 11 + 11 + 4.12 + 1.2.2 + 1.2.0 + 1.0-SNAPSHOT + 1.18.20 + 1.3.2 + 1.2.3 + 1.0-SNAPSHOT + 5.2.4 + 1.3.0-SNAPSHOT + 1.0.0-SNAPSHOT + 1.0.0-SNAPSHOT + 1.0.0-SNAPSHOT + 5.5.7.Final + 1.0-SNAPSHOT + 5.7.4 + 1.0.0-SNAPSHOT + 2.2 + 7.3.1 + 1.2.2 + + + org.springframework.boot + spring-boot-starter-parent + 2.7.18 + + + + + insiis-web + + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.projectlombok + lombok + + + + + + + + + com.github.jsqlparser + jsqlparser + 4.6 + + + com.alibaba + fastjson + ${fastjson.version} + + + org.springframework.cloud + spring-cloud-starter-bootstrap + 3.1.6 + + + com.vs + ox-basidc-common + 1.0-SNAPSHOT + + + org.mybatis + mybatis + + + + + + com.vs + ox-common + 1.0-SNAPSHOT + + + org.mybatis + mybatis + + + + + org.mybatis + mybatis + 3.5.11 + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + ${nacos-config.version} + + + + + + + org.codehaus.mojo + flatten-maven-plugin + 1.1.0 + + true + resolveCiFriendliesOnly + + + + flatten + process-resources + + flatten + + + + flatten.clean + clean + + clean + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.3.2 + + protected + true + + insiis-commons,insiis-securities,insiis-web-support,insiis-dfs,insiis-export-queue,insiis-adminserver,insiis-monitor,insiis-monitor-datasourceclient,insiis-monitor-datasources,insiis-mq,insiis-registry,insiis-report,insiis-scheduler,insiis-service,insiis-service-support,insiis-sms,insiis-sysconfig,insiis-test,insiis-web,insiis-web-support + + + + + + + + + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + + diff --git a/template/project b/template/project new file mode 100644 index 0000000..89f9a32 --- /dev/null +++ b/template/project @@ -0,0 +1,3 @@ +id={{ .projectId }} +name={{ .projectName | replace "-" "_" }} +version={{ .vsVersion }} diff --git a/values.yml b/values.yml new file mode 100644 index 0000000..7457bda --- /dev/null +++ b/values.yml @@ -0,0 +1,45 @@ +groupId: com.vs +artifactId: volunteer_bank +vsVersion: 1.0.0 +projectName: volunteer-bank +projectId: 3fdc654b-feb2-4d4a-be19-e9ca2998b5d6 +applicationName: "{{ .projectName }}-server" +branchName: master +clusterName: "{{ .applicationName }}-{{ .branchName }}" +version: 1.0-SNAPSHOT +operator: horsepower +codeRepoProtocol: https +codeRepoDomain: bit.byteawake.com +codeRepoSSHPort: 23123 +codeRepoGroup: vs-server-generate +codeRepoApplicationParentPath: "{{ .codeRepoGroup }}/{{ .projectName }}" +dbType: mysql +dbHost: mysql-rw.staging.svc.cluster.local +dbPort: 3306 +package: "{{ .groupId }}.{{ .artifactId }}" +packagePath: '{{ .package | replace "." "/" }}' +db_address: "{{ .dbHost }}:{{ .dbPort }}" +db_database: '{{ .projectName | replace "-" "_" }}' +db_username: '{{ .projectName | replace "-" "_" }}_user' +db_password: "{{ randAlphaNum 16 }}" +rocketmq_address: "10.0.2.221:9876;10.0.2.222:9876;10.0.2.223:9876" +rocketmq_topic: '{{ .projectName | replace "-" "_" }}' +rocketmq_consumerGroup: "CID_{{ .artifactId }}" +rocketmq_producerGroup: "PID_{{ .artifactId }}" +elasticsearch_host: "10.0.2.221,10.0.2.222,10.0.2.223" +elasticsearch_port: "9200" +elasticsearch_scheme: "https" +elasticsearch_username: "admin" +elasticsearch_password: "dnZkaNVK" +xxljob_address: "https://xxljob.teitui.com/xxl-job-admin" +xxljob_username: "admin" +xxljob_password: "123456" +xxljob_accessToken: "default_token" +redis_address: "redis.byteawake.com:6379" +redis_password: "" +redis_maxTotal: 100 +redis_maxIdle: 10 +redis_minIdle: 10 +git_url: "{{ .codeRepoProtocol }}://{{ .codeRepoDomain }}/{{ .codeRepoApplicationParentPath }}/{{ .applicationName }}" +git_ssh_url: "ssh://git@{{ .codeRepoDomain }}:{{ .codeRepoSSHPort }}/{{ .codeRepoApplicationParentPath }}/{{ .applicationName }}.git" +freeway_url: "https://fwy.teitui.com/clusters/pods/-/{{ .codeRepoGroup }}/{{ .projectName }}/{{ .applicationName }}/{{ .clusterName }}"