From 59da3376c12a4027626c5fc2c0e0407d580d91ec Mon Sep 17 00:00:00 2001 From: hongawen <83944980@qq.com> Date: Tue, 21 Jun 2022 20:47:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 340 + pqs-auth/Dockerfile | 7 + pqs-auth/pom.xml | 136 + .../java/com/njcn/auth/AuthApplication.java | 24 + .../config/AuthorizationServerConfig.java | 229 + .../njcn/auth/config/WebSecurityConfig.java | 104 + .../njcn/auth/controller/AuthController.java | 140 + .../njcn/auth/controller/JudgeThirdToken.java | 77 + .../auth/controller/KaptchaController.java | 80 + .../auth/exception/AuthExceptionHandler.java | 88 + ...mClientCredentialsTokenEndpointFilter.java | 42 + .../com/njcn/auth/pojo/bo/BusinessUser.java | 94 + .../ClientDetailsServiceImpl.java | 58 + .../captcha/CaptchaTokenGranter.java | 101 + .../PreAuthenticatedUserDetailsService.java | 60 + .../sm4/Sm4AuthenticationProvider.java | 92 + .../auth/service/UserDetailsServiceImpl.java | 47 + .../njcn/auth/service/UserTokenService.java | 121 + .../java/com/njcn/auth/utils/AuthPubUtil.java | 29 + pqs-auth/src/main/resources/bootstrap.yml | 51 + pqs-auth/src/main/resources/njcn.jks | Bin 0 -> 2242 bytes pqs-common/common-autocode/pom.xml | 42 + .../java/com/njcn/autocode/pojo/Module.java | 35 + .../com/njcn/autocode/utils/GenerateCode.java | 95 + pqs-common/common-core/pom.xml | 96 + .../common/config/AsyncConfiguration.java | 66 + .../com/njcn/common/config/GeneralInfo.java | 39 + .../common/pojo/annotation/OperateInfo.java | 30 + .../njcn/common/pojo/constant/LogInfo.java | 22 + .../common/pojo/constant/OperateType.java | 31 + .../common/pojo/constant/PatternRegex.java | 250 + .../pojo/constant/SecurityConstants.java | 148 + .../njcn/common/pojo/constant/ServerInfo.java | 26 + .../com/njcn/common/pojo/dto/LogInfoDTO.java | 36 + .../com/njcn/common/pojo/dto/SimpleDTO.java | 27 + .../njcn/common/pojo/dto/SimpleTreeDTO.java | 18 + .../njcn/common/pojo/dto/UserTokenInfo.java | 41 + .../njcn/common/pojo/dto/wave/AnalogDTO.java | 46 + .../common/pojo/dto/wave/ComtradeCfgDTO.java | 46 + .../njcn/common/pojo/dto/wave/DigitalDTO.java | 30 + .../common/pojo/dto/wave/EigenvalueDTO.java | 29 + .../common/pojo/dto/wave/MutationDTO.java | 27 + .../njcn/common/pojo/dto/wave/RateDTO.java | 24 + .../common/pojo/dto/wave/SamplingDTO.java | 34 + .../common/pojo/dto/wave/SamplingsDTO.java | 25 + .../common/pojo/dto/wave/WaveDataDTO.java | 31 + .../enums/auth/AuthenticationMethodEnum.java | 39 + .../common/pojo/enums/auth/ClientEnum.java | 40 + .../enums/auth/PasswordEncoderTypeEnum.java | 28 + .../pojo/enums/common/DataStateEnum.java | 31 + .../common/pojo/enums/common/LogEnum.java | 36 + .../common/pojo/enums/common/ServerEnum.java | 36 + .../enums/response/CommonResponseEnum.java | 92 + .../pojo/exception/BusinessException.java | 83 + .../njcn/common/pojo/response/HttpResult.java | 44 + .../java/com/njcn/common/utils/EnumUtils.java | 134 + .../com/njcn/common/utils/ExceptionUtil.java | 108 + .../com/njcn/common/utils/HttpResultUtil.java | 45 + .../java/com/njcn/common/utils/LogUtil.java | 53 + .../java/com/njcn/common/utils/PubUtils.java | 234 + .../njcn/common/utils/ReflectCommonUtil.java | 108 + .../njcn/common/utils/XssCleanRuleUtils.java | 54 + .../com/njcn/common/utils/sm/DesUtils.java | 143 + .../java/com/njcn/common/utils/sm/Sm2.java | 112 + .../java/com/njcn/common/utils/sm/Sm3.java | 322 + .../com/njcn/common/utils/sm/Sm3Digest.java | 134 + .../java/com/njcn/common/utils/sm/Sm4.java | 345 + .../com/njcn/common/utils/sm/Sm4Context.java | 20 + .../com/njcn/common/utils/sm/Sm4Utils.java | 196 + .../java/com/njcn/common/utils/sm/util.java | 674 ++ .../com/njcn/common/utils/wave/AnalyWave.java | 1119 ++ .../njcn/common/utils/wave/BitConverter.java | 81 + pqs-common/common-db/pom.xml | 59 + .../main/java/com/njcn/db/bo/BaseEntity.java | 47 + .../com/njcn/db/config/MybatisConfig.java | 37 + .../java/com/njcn/db/constant/DbConstant.java | 19 + .../njcn/db/handler/AutoFillValueHandler.java | 51 + .../main/resources/META-INF/spring.factories | 4 + pqs-common/common-echarts/pom.xml | 46 + .../main/java/com/njcn/echarts/TestUtil.java | 85 + pqs-common/common-influxdb/pom.xml | 44 + .../njcn/influxdb/config/InfluxDbConfig.java | 34 + .../njcn/influxdb/utils/InfluxDbUtils.java | 324 + .../common-influxdb/src/test/java/test.java | 204 + pqs-common/common-microservice/pom.xml | 58 + pqs-common/common-poi/pom.xml | 36 + .../java/com/njcn/poi/excel/ExcelUtil.java | 83 + .../njcn/poi/pojo/bo/BaseLineExcelBody.java | 51 + .../poi/pojo/bo/BaseLineProExcelBody.java | 54 + .../poi/pojo/constant/DeviceInfoConstant.java | 21 + .../main/java/com/njcn/poi/util/PoiUtil.java | 91 + pqs-common/common-redis/pom.xml | 43 + .../com/njcn/redis/config/RedisConfig.java | 52 + .../redis/config/RedisListenerConfig.java | 28 + .../njcn/redis/pojo/enums/RedisKeyEnum.java | 36 + .../java/com/njcn/redis/utils/RedisUtil.java | 234 + .../main/resources/META-INF/spring.factories | 5 + pqs-common/common-swagger/pom.xml | 26 + .../swagger/config/Knife4jSwaggerConfig.java | 144 + .../main/resources/META-INF/spring.factories | 4 + pqs-common/common-web/pom.xml | 59 + .../com/njcn/web/advice/ResponseAdvice.java | 90 + .../com/njcn/web/config/AntiSamyConfig.java | 31 + .../njcn/web/config/DateTimeValidator.java | 42 + .../java/com/njcn/web/config/FeignConfig.java | 64 + .../com/njcn/web/constant/ValidMessage.java | 63 + .../njcn/web/controller/BaseController.java | 23 + .../GlobalBusinessExceptionHandler.java | 240 + .../com/njcn/web/factory/PageFactory.java | 29 + .../java/com/njcn/web/filter/XssFilter.java | 33 + .../njcn/web/filter/XssRequestWrapper.java | 244 + .../web/pojo/annotation/DateTimeStrValid.java | 32 + .../java/com/njcn/web/pojo/dto/BaseDTO.java | 25 + .../com/njcn/web/pojo/param/BaseParam.java | 43 + .../njcn/web/pojo/param/DeptLineParam.java | 21 + .../java/com/njcn/web/pojo/vo/AreaIdVO.java | 21 + .../java/com/njcn/web/pojo/vo/BaseVO.java | 29 + .../java/com/njcn/web/pojo/vo/DeptLineVO.java | 17 + .../java/com/njcn/web/pojo/vo/LineDataVO.java | 55 + .../com/njcn/web/pojo/vo/SteadyDataVO.java | 51 + .../com/njcn/web/service/ILogService.java | 48 + .../njcn/web/service/impl/LogServiceImpl.java | 138 + .../java/com/njcn/web/utils/ComAssesUtil.java | 299 + .../com/njcn/web/utils/ControllerUtil.java | 37 + .../java/com/njcn/web/utils/FloatUtils.java | 28 + .../java/com/njcn/web/utils/GeneralUtil.java | 34 + .../com/njcn/web/utils/HttpServletUtil.java | 41 + .../main/java/com/njcn/web/utils/IpUtils.java | 74 + .../java/com/njcn/web/utils/PqsComasses.java | 43 + .../java/com/njcn/web/utils/RequestUtil.java | 367 + .../com/njcn/web/utils/ValidatorUtils.java | 34 + .../main/java/com/njcn/web/utils/WebUtil.java | 63 + .../src/main/resources/antisamy-ebay.xml | 2453 +++++ .../src/main/resources/antisamy.xsd | 147 + pqs-common/pom.xml | 32 + pqs-device/device-api/pom.xml | 52 + .../njcn/device/api/DeptLineFeignClient.java | 25 + .../com/njcn/device/api/DeviceTreeClient.java | 25 + .../device/api/GeneralDeviceInfoClient.java | 98 + .../com/njcn/device/api/LineFeignClient.java | 175 + .../njcn/device/api/TerminalBaseClient.java | 36 + .../DeptLineFeignClientFallbackFactory.java | 48 + .../DeviceTreeClientFallbackFactory.java | 44 + ...eneralDeviceInfoClientFallbackFactory.java | 86 + .../LineFeignClientFallbackFactory.java | 140 + .../TerminalBaseClientFallbackFactory.java | 45 + .../njcn/device/enums/DeviceResponseEnum.java | 89 + .../com/njcn/device/enums/LineBaseEnum.java | 44 + .../com/njcn/device/enums/LineFlagEnum.java | 35 + .../com/njcn/device/pojo/bo/BaseLineInfo.java | 42 + .../com/njcn/device/pojo/bo/DeviceType.java | 37 + .../njcn/device/pojo/bo/excel/LineMark.java | 48 + .../njcn/device/pojo/bo/excel/NodeExcel.java | 34 + .../pojo/bo/excel/OracleTerminalExcel.java | 241 + .../device/pojo/bo/excel/OverLimitExcel.java | 511 + .../pojo/bo/excel/TerminalBaseExcel.java | 208 + .../pojo/constant/DeviceValidMessage.java | 20 + .../njcn/device/pojo/dto/DeviceLineDTO.java | 61 + .../device/pojo/dto/GeneralDeviceDTO.java | 44 + .../device/pojo/dto/OverLimitLineDTO.java | 34 + .../device/pojo/dto/PollutionLineDTO.java | 38 + .../device/pojo/dto/PollutionParamDTO.java | 19 + .../pojo/dto/PollutionSubstationDTO.java | 30 + .../device/pojo/dto/WarningSubstationDTO.java | 24 + .../device/pojo/param/AddTerminalParam.java | 52 + .../njcn/device/pojo/param/AlarmParam.java | 51 + .../device/pojo/param/DeviceInfoParam.java | 171 + .../device/pojo/param/DeviceLogParam.java | 38 + .../njcn/device/pojo/param/DeviceParam.java | 140 + .../njcn/device/pojo/param/EventLogParam.java | 49 + .../njcn/device/pojo/param/FlowMealParam.java | 68 + .../device/pojo/param/FlowStrategyParam.java | 88 + .../device/pojo/param/GdInformationParam.java | 49 + .../com/njcn/device/pojo/param/LineParam.java | 152 + .../pojo/param/NodeInformationParam.java | 41 + .../com/njcn/device/pojo/param/NodeParam.java | 96 + .../njcn/device/pojo/param/ProjectParam.java | 56 + .../njcn/device/pojo/param/ProvinceParam.java | 50 + .../device/pojo/param/RunManageParam.java | 65 + .../device/pojo/param/SubStationParam.java | 75 + .../device/pojo/param/SubVoltageParam.java | 70 + .../pojo/param/TerminalLedgerParam.java | 27 + .../pojo/param/TerminalMainQueryParam.java | 27 + .../pojo/param/UpdateTerminalParam.java | 43 + .../njcn/device/pojo/param/VersionParam.java | 80 + .../java/com/njcn/device/pojo/po/Alarm.java | 64 + .../com/njcn/device/pojo/po/Communicate.java | 46 + .../com/njcn/device/pojo/po/DeptLine.java | 37 + .../com/njcn/device/pojo/po/DevFuction.java | 42 + .../java/com/njcn/device/pojo/po/DevMeal.java | 42 + .../com/njcn/device/pojo/po/DevState.java | 54 + .../com/njcn/device/pojo/po/DevStrategy.java | 36 + .../com/njcn/device/pojo/po/DevVersion.java | 74 + .../java/com/njcn/device/pojo/po/Device.java | 139 + .../njcn/device/pojo/po/EventPushLogs.java | 41 + .../com/njcn/device/pojo/po/FlowMeal.java | 60 + .../com/njcn/device/pojo/po/FlowStrategy.java | 60 + .../njcn/device/pojo/po/FlowStrategyDic.java | 36 + .../java/com/njcn/device/pojo/po/Line.java | 71 + .../java/com/njcn/device/pojo/po/LineBak.java | 33 + .../com/njcn/device/pojo/po/LineDetail.java | 128 + .../com/njcn/device/pojo/po/MonthFlow.java | 46 + .../java/com/njcn/device/pojo/po/Node.java | 71 + .../com/njcn/device/pojo/po/Overlimit.java | 533 + .../com/njcn/device/pojo/po/ProtectValue.java | 88 + .../com/njcn/device/pojo/po/ProtectWord.java | 58 + .../java/com/njcn/device/pojo/po/Push.java | 76 + .../com/njcn/device/pojo/po/StatisFlow.java | 44 + .../njcn/device/pojo/po/StrategydicFun.java | 24 + .../com/njcn/device/pojo/po/Substation.java | 48 + .../java/com/njcn/device/pojo/po/Version.java | 76 + .../java/com/njcn/device/pojo/po/Voltage.java | 48 + .../njcn/device/pojo/vo/CommunicateVO.java | 26 + .../njcn/device/pojo/vo/DeptLineTreeVO.java | 21 + .../com/njcn/device/pojo/vo/DeviceLogVO.java | 49 + .../com/njcn/device/pojo/vo/DeviceVO.java | 119 + .../com/njcn/device/pojo/vo/EventLogVO.java | 84 + .../njcn/device/pojo/vo/FlowStrategyVO.java | 67 + .../njcn/device/pojo/vo/GdInformationVO.java | 33 + .../njcn/device/pojo/vo/LineDetailDataVO.java | 80 + .../com/njcn/device/pojo/vo/LineDetailVO.java | 23 + .../device/pojo/vo/LineDeviceStateVO.java | 26 + .../device/pojo/vo/LineDistributionVO.java | 20 + .../device/pojo/vo/LineFlowMealDetailVO.java | 59 + .../pojo/vo/LineInfluxDbInegrityVO.java | 25 + .../device/pojo/vo/LineInfluxDbOnlineVO.java | 24 + .../com/njcn/device/pojo/vo/LineMarkVO.java | 43 + .../njcn/device/pojo/vo/LineOverLimitVO.java | 122 + .../com/njcn/device/pojo/vo/LineStateVO.java | 27 + .../device/pojo/vo/LineStaticsValueVO.java | 24 + .../device/pojo/vo/LineStaticsViewVO.java | 24 + .../pojo/vo/LineStatisticsDetailVO.java | 43 + .../device/pojo/vo/LineStatisticsTableVO.java | 38 + .../java/com/njcn/device/pojo/vo/LineVO.java | 127 + .../com/njcn/device/pojo/vo/ProjectVO.java | 39 + .../com/njcn/device/pojo/vo/ProvinceVO.java | 39 + .../com/njcn/device/pojo/vo/RateOfFlowVO.java | 59 + .../com/njcn/device/pojo/vo/RunManageVO.java | 187 + .../com/njcn/device/pojo/vo/RunTimeVO.java | 60 + .../device/pojo/vo/ShowFlowStrategyVO.java | 40 + .../com/njcn/device/pojo/vo/SubStationVO.java | 49 + .../com/njcn/device/pojo/vo/SubVoltageVO.java | 50 + .../device/pojo/vo/SubstationDetailVO.java | 25 + .../njcn/device/pojo/vo/TerminalAlarmVO.java | 97 + .../njcn/device/pojo/vo/TerminalLedgerVO.java | 59 + .../device/pojo/vo/TerminalMaintainVO.java | 48 + .../com/njcn/device/pojo/vo/TerminalTree.java | 54 + .../com/njcn/device/pojo/vo/TerminalVO.java | 35 + .../device/pojo/vo/TerminalVersionVO.java | 50 + .../com/njcn/device/pojo/vo/VersionVO.java | 82 + .../com/njcn/device/utils/COverlimit.java | 309 + .../com/njcn/device/utils/DeviceEnumUtil.java | 51 + pqs-device/device-boot/Dockerfile | 5 + pqs-device/device-boot/pom.xml | 117 + .../njcn/device/DeviceBootApplication.java | 26 + .../device/controller/DeptLineController.java | 112 + .../GeneralDeviceInfoController.java | 206 + .../device/controller/LineController.java | 230 + .../device/controller/LineMarkController.java | 162 + .../controller/LogManageController.java | 65 + .../device/controller/NodeController.java | 173 + .../controller/OperationContrController.java | 99 + .../controller/ProgramVersionController.java | 118 + .../controller/RateOfFlowController.java | 158 + .../controller/RunManageController.java | 73 + .../controller/TerminalAlarmController.java | 94 + .../controller/TerminalBaseController.java | 251 + .../TerminalMaintainController.java | 163 + .../controller/TerminalTreeController.java | 99 + .../controller/TerminalVersionController.java | 66 + .../com/njcn/device/mapper/AlarmMapper.java | 44 + .../njcn/device/mapper/CommunicateMapper.java | 18 + .../njcn/device/mapper/DeptLineMapper.java | 47 + .../njcn/device/mapper/DevFuctionMapper.java | 22 + .../com/njcn/device/mapper/DevMealMapper.java | 17 + .../njcn/device/mapper/DevStateMapper.java | 17 + .../njcn/device/mapper/DevStrategyMapper.java | 17 + .../njcn/device/mapper/DevVersionMapper.java | 17 + .../com/njcn/device/mapper/DeviceMapper.java | 28 + .../njcn/device/mapper/FlowMealMapper.java | 17 + .../device/mapper/FlowStrategyDicMapper.java | 17 + .../device/mapper/FlowStrategyMapper.java | 17 + .../com/njcn/device/mapper/LineBakMapper.java | 19 + .../njcn/device/mapper/LineDetailMapper.java | 28 + .../com/njcn/device/mapper/LineMapper.java | 345 + .../njcn/device/mapper/LineMarkMapper.java | 56 + .../njcn/device/mapper/LogManageMapper.java | 25 + .../njcn/device/mapper/MonthFlowMapper.java | 17 + .../com/njcn/device/mapper/NodeMapper.java | 17 + .../njcn/device/mapper/OverlimitMapper.java | 17 + .../device/mapper/ProgramVersionMapper.java | 26 + .../device/mapper/ProtectValueMapper.java | 17 + .../njcn/device/mapper/ProtectWordMapper.java | 17 + .../njcn/device/mapper/RateOfFlowMapper.java | 56 + .../njcn/device/mapper/StatisFlowMapper.java | 17 + .../device/mapper/StrategydicFunMapper.java | 12 + .../njcn/device/mapper/SubstationMapper.java | 26 + .../device/mapper/TerminalMaintainMapper.java | 77 + .../device/mapper/TerminalVersionMapper.java | 58 + .../com/njcn/device/mapper/TreeMapper.java | 43 + .../com/njcn/device/mapper/VersionMapper.java | 17 + .../com/njcn/device/mapper/VoltageMapper.java | 27 + .../device/mapper/mapping/AlarmMapper.xml | 162 + .../mapper/mapping/CommunicateMapper.xml | 5 + .../device/mapper/mapping/DeptLineMapper.xml | 20 + .../mapper/mapping/DevFuctionMapper.xml | 11 + .../device/mapper/mapping/DevMealMapper.xml | 5 + .../device/mapper/mapping/DevStateMapper.xml | 5 + .../mapper/mapping/DevStrategyMapper.xml | 5 + .../mapper/mapping/DevVersionMapper.xml | 5 + .../device/mapper/mapping/DeviceMapper.xml | 10 + .../device/mapper/mapping/FlowMealMapper.xml | 5 + .../mapper/mapping/FlowStrategyDicMapper.xml | 5 + .../mapper/mapping/FlowStrategyMapper.xml | 5 + .../device/mapper/mapping/LineBakMapper.xml | 6 + .../mapper/mapping/LineDetailMapper.xml | 17 + .../njcn/device/mapper/mapping/LineMapper.xml | 835 ++ .../device/mapper/mapping/LineMarkMapper.xml | 140 + .../device/mapper/mapping/LogManageMapper.xml | 53 + .../device/mapper/mapping/MonthFlowMapper.xml | 5 + .../njcn/device/mapper/mapping/NodeMapper.xml | 5 + .../device/mapper/mapping/OverlimitMapper.xml | 5 + .../mapper/mapping/ProgramVersionMapper.xml | 47 + .../mapper/mapping/ProtectValueMapper.xml | 5 + .../mapper/mapping/ProtectWordMapper.xml | 5 + .../mapper/mapping/RateOfFlowMapper.xml | 143 + .../mapper/mapping/StatisFlowMapper.xml | 5 + .../mapper/mapping/StrategydicFunMapper.xml | 5 + .../mapper/mapping/SubstationMapper.xml | 22 + .../mapper/mapping/TerminalMaintainMapper.xml | 119 + .../mapper/mapping/TerminalVersionMapper.xml | 73 + .../njcn/device/mapper/mapping/TreeMapper.xml | 404 + .../device/mapper/mapping/VersionMapper.xml | 5 + .../device/mapper/mapping/VoltageMapper.xml | 17 + .../njcn/device/service/DeptLineService.java | 55 + .../njcn/device/service/FlowMealService.java | 45 + .../device/service/FlowStrategyService.java | 48 + .../njcn/device/service/IDevMealService.java | 17 + .../device/service/IDevStrategyService.java | 17 + .../njcn/device/service/IDeviceService.java | 17 + .../com/njcn/device/service/INodeService.java | 88 + .../njcn/device/service/LineBakService.java | 15 + .../njcn/device/service/LineMarkService.java | 51 + .../com/njcn/device/service/LineService.java | 128 + .../njcn/device/service/LogManageService.java | 30 + .../device/service/ProgramVersionService.java | 42 + .../njcn/device/service/RunManageService.java | 39 + .../device/service/TerminalAlarmService.java | 41 + .../device/service/TerminalBaseService.java | 168 + .../service/TerminalMaintainService.java | 58 + .../device/service/TerminalTreeService.java | 43 + .../service/TerminalVersionService.java | 32 + .../service/impl/DeptLineServiceImpl.java | 72 + .../service/impl/DevMealServiceImpl.java | 21 + .../service/impl/DevStrategyServiceImpl.java | 21 + .../service/impl/DeviceServiceImpl.java | 21 + .../service/impl/FlowMealServiceImpl.java | 101 + .../service/impl/FlowStrategyServiceImpl.java | 261 + .../service/impl/GeneralDeviceService.java | 552 + .../service/impl/LineBakServiceImpl.java | 25 + .../service/impl/LineMarkServiceImpl.java | 142 + .../device/service/impl/LineServiceImpl.java | 626 ++ .../service/impl/LogManageServiceImpl.java | 145 + .../device/service/impl/NodeServiceImpl.java | 185 + .../impl/ProgramVersionServiceImpl.java | 211 + .../service/impl/RunManageServiceImpl.java | 431 + .../impl/TerminalAlarmServiceImpl.java | 50 + .../service/impl/TerminalBaseServiceImpl.java | 2224 ++++ .../impl/TerminalMaintainServiceImpl.java | 151 + .../service/impl/TerminalTreeServiceImpl.java | 486 + .../impl/TerminalVersionServiceImpl.java | 83 + .../com/njcn/device/utils/DeviceUtil.java | 42 + .../src/main/resources/bootstrap.yml | 54 + .../src/test/java/com/njcn/BaseJunitTest.java | 18 + .../src/test/java/com/njcn/DeviceTest.java | 46 + pqs-device/pom.xml | 25 + pqs-energy/energy-api/pom.xml | 45 + .../pojo/api/EleAirStrategyFeignClient.java | 28 + .../pojo/api/EleIntegrityFeignClient.java | 27 + .../pojo/api/EleOnlineRateFeignClient.java | 26 + .../EleAirStrategyFallbackFactory.java | 42 + .../fallback/EleIntegrityFallbackFactory.java | 48 + .../EleOnlineRateFallbackFactory.java | 44 + .../njcn/energy/pojo/constant/ApiParam.java | 59 + .../njcn/energy/pojo/constant/DataType.java | 68 + .../njcn/energy/pojo/constant/ModelState.java | 58 + .../njcn/energy/pojo/constant/TableName.java | 21 + .../com/njcn/energy/pojo/dto/ACtrlDTO.java | 42 + .../com/njcn/energy/pojo/dto/AccessDTO.java | 53 + .../njcn/energy/pojo/dto/AccessParamDTO.java | 25 + .../njcn/energy/pojo/dto/AirStrategyDTO.java | 29 + .../java/com/njcn/energy/pojo/dto/AlmDTO.java | 28 + .../com/njcn/energy/pojo/dto/AskDataDTO.java | 47 + .../njcn/energy/pojo/dto/AskDataParamDTO.java | 25 + .../com/njcn/energy/pojo/dto/CpuInfoDTO.java | 29 + .../com/njcn/energy/pojo/dto/CtrlDTO.java | 48 + .../njcn/energy/pojo/dto/DataArrayDTO.java | 24 + .../energy/pojo/dto/DataArrayListDTO.java | 21 + .../com/njcn/energy/pojo/dto/DataSetDTO.java | 40 + .../com/njcn/energy/pojo/dto/DevCfgDTO.java | 27 + .../java/com/njcn/energy/pojo/dto/DevDTO.java | 82 + .../com/njcn/energy/pojo/dto/DevInfoDTO.java | 32 + .../com/njcn/energy/pojo/dto/DeviceDTO.java | 91 + .../energy/pojo/dto/DeviceOperateDTO.java | 30 + .../java/com/njcn/energy/pojo/dto/DiDTO.java | 21 + .../com/njcn/energy/pojo/dto/DiskInfoDTO.java | 27 + .../java/com/njcn/energy/pojo/dto/DoDTO.java | 29 + .../njcn/energy/pojo/dto/ElePublicDTO.java | 20 + .../com/njcn/energy/pojo/dto/EpdPqdDTO.java | 46 + .../java/com/njcn/energy/pojo/dto/EvtDTO.java | 30 + .../com/njcn/energy/pojo/dto/EvtParam.java | 31 + .../com/njcn/energy/pojo/dto/LineDTO.java | 50 + .../java/com/njcn/energy/pojo/dto/MdDTO.java | 43 + .../com/njcn/energy/pojo/dto/MemInfoDTO.java | 26 + .../energy/pojo/dto/NetAndDevByLineDTO.java | 18 + .../com/njcn/energy/pojo/dto/NetDevDTO.java | 60 + .../njcn/energy/pojo/dto/OnlineRateDTO.java | 27 + .../com/njcn/energy/pojo/dto/ParamDTO.java | 49 + .../njcn/energy/pojo/dto/PublicParamDTO.java | 42 + .../com/njcn/energy/pojo/dto/RegisterDTO.java | 51 + .../energy/pojo/dto/RegisterParamDTO.java | 56 + .../com/njcn/energy/pojo/dto/SoftInfoDTO.java | 36 + .../java/com/njcn/energy/pojo/dto/StsDTO.java | 36 + .../com/njcn/energy/pojo/dto/TemplateDTO.java | 30 + .../energy/pojo/dto/TemplateDataArrayDTO.java | 32 + .../com/njcn/energy/pojo/dto/ThreadDTO.java | 20 + .../com/njcn/energy/pojo/dto/TopicDTO.java | 22 + .../njcn/energy/pojo/dto/TopicParamDTO.java | 22 + .../com/njcn/energy/pojo/dto/TpListDTO.java | 31 + .../com/njcn/energy/pojo/dto/UserCfgDTO.java | 20 + .../pojo/enums/EleStatisticalSetEnum.java | 26 + .../energy/pojo/enums/EnergyResponseEnum.java | 81 + .../com/njcn/energy/pojo/enums/LoadEnum.java | 33 + .../energy/pojo/param/AirStrategyParam.java | 90 + .../energy/pojo/param/DataArrayParam.java | 58 + .../energy/pojo/param/DataGroupParam.java | 28 + .../njcn/energy/pojo/param/DataHisParam.java | 33 + .../energy/pojo/param/DataModelParam.java | 71 + .../njcn/energy/pojo/param/DataSetParam.java | 72 + .../njcn/energy/pojo/param/DevCfgParam.java | 118 + .../energy/pojo/param/DevLineQueryParam.java | 33 + .../energy/pojo/param/DevVersionParam.java | 87 + .../com/njcn/energy/pojo/param/DictParam.java | 68 + .../energy/pojo/param/ElDataBindParam.java | 17 + .../com/njcn/energy/pojo/param/EleParam.java | 25 + .../energy/pojo/param/ElectComparaParam.java | 58 + .../energy/pojo/param/EnergyBaseParam.java | 46 + .../njcn/energy/pojo/param/GroupArrParam.java | 37 + .../njcn/energy/pojo/param/HardwareParam.java | 105 + .../njcn/energy/pojo/param/JobInfoParam.java | 21 + .../com/njcn/energy/pojo/param/LineParam.java | 87 + .../energy/pojo/param/LoadStatisticParam.java | 55 + .../njcn/energy/pojo/param/NetDevParam.java | 108 + .../java/com/njcn/energy/pojo/po/AirSet.java | 19 + .../com/njcn/energy/pojo/po/AirStrategy.java | 28 + .../com/njcn/energy/pojo/po/DataArray.java | 90 + .../com/njcn/energy/pojo/po/DataGroup.java | 38 + .../com/njcn/energy/pojo/po/DataMould.java | 53 + .../java/com/njcn/energy/pojo/po/DataSet.java | 48 + .../com/njcn/energy/pojo/po/DevVersion.java | 55 + .../java/com/njcn/energy/pojo/po/EleALM.java | 29 + .../com/njcn/energy/pojo/po/EleActrl.java | 41 + .../java/com/njcn/energy/pojo/po/EleBind.java | 23 + .../java/com/njcn/energy/pojo/po/EleCtrl.java | 45 + .../java/com/njcn/energy/pojo/po/EleDi.java | 39 + .../java/com/njcn/energy/pojo/po/EleDict.java | 32 + .../java/com/njcn/energy/pojo/po/EleDo.java | 39 + .../com/njcn/energy/pojo/po/EleEpdPqd.java | 40 + .../java/com/njcn/energy/pojo/po/EleEvt.java | 28 + .../com/njcn/energy/pojo/po/EleEvtParm.java | 29 + .../njcn/energy/pojo/po/EleInformation.java | 41 + .../com/njcn/energy/pojo/po/EleIntegrity.java | 32 + .../java/com/njcn/energy/pojo/po/EleLine.java | 96 + .../com/njcn/energy/pojo/po/EleLoadSet.java | 18 + .../java/com/njcn/energy/pojo/po/EleLogs.java | 53 + .../java/com/njcn/energy/pojo/po/EleMd.java | 38 + .../njcn/energy/pojo/po/EleOnlineRate.java | 28 + .../java/com/njcn/energy/pojo/po/EleParm.java | 42 + .../com/njcn/energy/pojo/po/EleRateSet.java | 20 + .../energy/pojo/po/EleStatisticalSet.java | 18 + .../java/com/njcn/energy/pojo/po/EleSts.java | 35 + .../com/njcn/energy/pojo/po/EleTopic.java | 28 + .../com/njcn/energy/pojo/po/GroupArray.java | 23 + .../com/njcn/energy/pojo/po/Hardware.java | 134 + .../com/njcn/energy/pojo/po/LogicAccess.java | 34 + .../com/njcn/energy/pojo/po/LogicDev.java | 135 + .../java/com/njcn/energy/pojo/po/NetDev.java | 84 + .../energy/pojo/utils/EnergyEnumUtil.java | 49 + .../njcn/energy/pojo/vo/AirStrategyVO.java | 57 + .../energy/pojo/vo/DataGroupTemplateVO.java | 23 + .../com/njcn/energy/pojo/vo/DataHisVO.java | 20 + .../njcn/energy/pojo/vo/EleIntegrityVO.java | 47 + .../njcn/energy/pojo/vo/EleLoadSetTreeVO.java | 20 + .../com/njcn/energy/pojo/vo/EleLoadSetVO.java | 25 + .../java/com/njcn/energy/pojo/vo/EleMdVO.java | 20 + .../com/njcn/energy/pojo/vo/EleRateVO.java | 28 + .../energy/pojo/vo/EleStatisticalTreeVO.java | 21 + .../njcn/energy/pojo/vo/EleStatisticalVO.java | 23 + .../njcn/energy/pojo/vo/ElectCompareVO.java | 23 + .../energy/pojo/vo/EnergyDeviceTreeVO.java | 30 + .../njcn/energy/pojo/vo/EnergyTemplateVO.java | 45 + .../njcn/energy/pojo/vo/LoadStatisticVO.java | 19 + .../njcn/energy/pojo/vo/LoadTendencyVO.java | 17 + .../energy/pojo/vo/LogicDeviceLineInfoVO.java | 76 + .../com/njcn/energy/pojo/vo/NetDevInfoVO.java | 161 + .../com/njcn/energy/pojo/vo/YunCaiDataVO.java | 21 + pqs-energy/energy-boot/Dockerfile | 6 + pqs-energy/energy-boot/pom.xml | 126 + .../njcn/energy/EnergyBootApplication.java | 26 + .../controller/DataArrayController.java | 65 + .../controller/DataGroupController.java | 73 + .../energy/controller/DataSetController.java | 74 + .../energy/controller/DevModelController.java | 79 + .../controller/DevVersionController.java | 62 + .../energy/controller/EleActrlController.java | 72 + .../controller/EleAirStrategyController.java | 196 + .../energy/controller/EleAlmController.java | 70 + .../energy/controller/EleBindController.java | 72 + .../energy/controller/EleCtrlController.java | 71 + .../energy/controller/EleDiController.java | 72 + .../energy/controller/EleDictController.java | 124 + .../energy/controller/EleDoController.java | 69 + .../controller/EleEpdPqdController.java | 87 + .../energy/controller/EleEvtController.java | 70 + .../controller/EleEvtParamController.java | 89 + .../controller/EleIntegrityController.java | 85 + .../energy/controller/EleLineController.java | 74 + .../controller/EleLoadSetController.java | 68 + .../energy/controller/EleLogsController.java | 25 + .../energy/controller/EleMdController.java | 74 + .../controller/EleOnlineRateController.java | 78 + .../energy/controller/EleParmController.java | 71 + .../controller/EleRateSetController.java | 58 + .../EleStatisticalSetController.java | 68 + .../energy/controller/EleStsController.java | 76 + .../energy/controller/EleTopicController.java | 88 + .../controller/GroupArrayController.java | 72 + .../energy/controller/HardwareController.java | 73 + .../controller/HighAnalyticController.java | 200 + .../njcn/energy/controller/LogicAccess.java | 29 + .../controller/LogicDeviceLineController.java | 297 + .../energy/controller/ModelController.java | 70 + .../energy/controller/NetDevController.java | 141 + .../energy/handler/MqttMessageHandler.java | 189 + .../listener/RedisKeyExpirationListener.java | 76 + .../com/njcn/energy/mapper/AirSetMapper.java | 13 + .../njcn/energy/mapper/AirStrategyMapper.java | 13 + .../njcn/energy/mapper/DataArrayMapper.java | 17 + .../njcn/energy/mapper/DataGroupMapper.java | 30 + .../njcn/energy/mapper/DataMouldMapper.java | 17 + .../com/njcn/energy/mapper/DataSetMapper.java | 17 + .../njcn/energy/mapper/DevVersionMapper.java | 8 + .../njcn/energy/mapper/EleActrlMapper.java | 7 + .../com/njcn/energy/mapper/EleAlmMapper.java | 10 + .../com/njcn/energy/mapper/EleBindMapper.java | 24 + .../com/njcn/energy/mapper/EleCtrlMapper.java | 7 + .../com/njcn/energy/mapper/EleDiMapper.java | 7 + .../com/njcn/energy/mapper/EleDictMapper.java | 10 + .../com/njcn/energy/mapper/EleDoMapper.java | 7 + .../com/njcn/energy/mapper/EleEpdMapper.java | 25 + .../com/njcn/energy/mapper/EleEvtMapper.java | 7 + .../njcn/energy/mapper/EleEvtParamMapper.java | 16 + .../energy/mapper/EleInformationMapper.java | 10 + .../energy/mapper/EleIntegrityMapper.java | 17 + .../com/njcn/energy/mapper/EleLineMapper.java | 19 + .../njcn/energy/mapper/EleLoadSetMapper.java | 38 + .../com/njcn/energy/mapper/EleLogsMapper.java | 7 + .../com/njcn/energy/mapper/EleMdMapper.java | 23 + .../com/njcn/energy/mapper/EleParmMapper.java | 7 + .../njcn/energy/mapper/EleRateSetMappser.java | 32 + .../mapper/EleStatisticalSetMapper.java | 24 + .../com/njcn/energy/mapper/EleStsMapper.java | 7 + .../njcn/energy/mapper/EleTopicMapper.java | 7 + .../njcn/energy/mapper/GroupArrayMapper.java | 10 + .../njcn/energy/mapper/HardwareMapper.java | 17 + .../njcn/energy/mapper/LogicAccessMapper.java | 10 + .../energy/mapper/LogicDeviceLineMapper.java | 126 + .../com/njcn/energy/mapper/NetDevMapper.java | 37 + .../energy/mapper/mapping/DataGroupMapper.xml | 17 + .../energy/mapper/mapping/EleBindMapper.xml | 19 + .../energy/mapper/mapping/EleEpdPqdMapper.xml | 41 + .../mapper/mapping/EleIntergrityMapper.xml | 29 + .../energy/mapper/mapping/EleLineMapper.xml | 15 + .../mapper/mapping/EleLoadSetMapper.xml | 35 + .../energy/mapper/mapping/EleMdMapper.xml | 31 + .../mapper/mapping/EleRateSetMapper.xml | 34 + .../mapping/EleStatisticalSetMapper.xml | 17 + .../mapper/mapping/LogicDeviceLineMapper.xml | 188 + .../energy/mapper/mapping/NetDevMapper.xml | 19 + .../energy/service/EleAirStrategyService.java | 73 + .../energy/service/EleLoadSetService.java | 30 + .../energy/service/EleRateSetService.java | 23 + .../service/EleStatisticalSetService.java | 36 + .../energy/service/HighAnalyticService.java | 86 + .../energy/service/IDataArrayService.java | 34 + .../energy/service/IDataGroupService.java | 51 + .../njcn/energy/service/IDataSetService.java | 43 + .../njcn/energy/service/IDevModelService.java | 44 + .../energy/service/IDevVersionService.java | 29 + .../njcn/energy/service/IEleActrlService.java | 40 + .../njcn/energy/service/IEleAlmService.java | 47 + .../njcn/energy/service/IEleBindService.java | 37 + .../njcn/energy/service/IEleCtrlService.java | 41 + .../njcn/energy/service/IEleDiService.java | 40 + .../njcn/energy/service/IEleDictService.java | 78 + .../njcn/energy/service/IEleDoService.java | 41 + .../energy/service/IEleEpdPqdService.java | 51 + .../energy/service/IEleEvtParamService.java | 56 + .../njcn/energy/service/IEleEvtService.java | 41 + .../service/IEleInformationService.java | 49 + .../energy/service/IEleIntegrityService.java | 26 + .../njcn/energy/service/IEleLineService.java | 58 + .../njcn/energy/service/IEleLogsService.java | 22 + .../njcn/energy/service/IEleMdService.java | 41 + .../njcn/energy/service/IEleParmService.java | 46 + .../njcn/energy/service/IEleSetService.java | 14 + .../njcn/energy/service/IEleStsService.java | 41 + .../njcn/energy/service/IEleTopicService.java | 39 + .../energy/service/IGroupArrayService.java | 42 + .../njcn/energy/service/IHardwareService.java | 34 + .../energy/service/ILogicAccessService.java | 136 + .../service/ILogicDeviceLineService.java | 217 + .../njcn/energy/service/IModelService.java | 61 + .../njcn/energy/service/INetDevService.java | 96 + .../service/impl/DataArrayServiceImpl.java | 38 + .../service/impl/DataGroupServiceImpl.java | 47 + .../service/impl/DataSetServiceImpl.java | 44 + .../service/impl/DevModelServiceImpl.java | 41 + .../service/impl/DevVersionServiceImpl.java | 38 + .../service/impl/ELeParmServiceImpl.java | 33 + .../service/impl/EleActrlServiceImpl.java | 33 + .../service/impl/EleAirSetServiceImpl.java | 21 + .../impl/EleAirStrategyServiceImpl.java | 509 + .../service/impl/EleAlmServiceImpl.java | 33 + .../service/impl/EleBindServiceImpl.java | 99 + .../service/impl/EleCtrlServiceImpl.java | 33 + .../energy/service/impl/EleDiServiceImpl.java | 32 + .../service/impl/EleDictServiceImpl.java | 146 + .../energy/service/impl/EleDoServiceImpl.java | 33 + .../service/impl/EleEpdPqdServiceImpl.java | 42 + .../service/impl/EleEvtParamServiceImpl.java | 45 + .../service/impl/EleEvtServiceImpl.java | 35 + .../impl/EleInformationServiceImpl.java | 283 + .../service/impl/EleIntegrityServiceImpl.java | 208 + .../service/impl/EleLineServiceImpl.java | 55 + .../service/impl/EleLoadSetServiceImpl.java | 53 + .../service/impl/EleLogsServiceImpl.java | 25 + .../energy/service/impl/EleMdServiceImpl.java | 32 + .../service/impl/EleRateSetServiceImpl.java | 34 + .../impl/EleStatisticalSetServiceImpl.java | 114 + .../service/impl/EleStsServiceImpl.java | 33 + .../service/impl/EleTopicServiceImpl.java | 38 + .../service/impl/GroupArrayServiceImpl.java | 45 + .../service/impl/HardwareServiceImpl.java | 38 + .../service/impl/HighAnalyticServiceImpl.java | 1642 +++ .../service/impl/LogicAccessServiceImpl.java | 122 + .../impl/LogicDeviceLineServiceImpl.java | 680 ++ .../energy/service/impl/ModelServiceImpl.java | 1220 +++ .../service/impl/NetDevServiceImpl.java | 144 + .../src/main/resources/bootstrap.yml | 54 + pqs-energy/pom.xml | 29 + pqs-event/event-api/pom.xml | 47 + .../event/api/EventDetailFeignClient.java | 44 + ...EventDetailFeignClientFallbackFactory.java | 53 + .../njcn/event/enums/EventResponseEnum.java | 28 + .../njcn/event/pojo/param/TransientParam.java | 31 + .../com/njcn/event/pojo/po/EventDetail.java | 85 + .../njcn/event/pojo/vo/AreaEventDetailVO.java | 32 + .../com/njcn/event/pojo/vo/AreaLineVO.java | 22 + .../njcn/event/pojo/vo/EventAssessmentVO.java | 21 + .../event/pojo/vo/EventAssessmentValueVO.java | 23 + .../njcn/event/pojo/vo/EventHeatDeatilVO.java | 26 + .../event/pojo/vo/EventHeatMapDetailVO.java | 27 + .../njcn/event/pojo/vo/EventHeatMapVO.java | 22 + .../njcn/event/pojo/vo/EventSeverityVO.java | 22 + .../event/pojo/vo/EventSeverityValueVO.java | 23 + .../com/njcn/event/pojo/vo/TransientVO.java | 81 + .../com/njcn/event/utils/EventlEnumUtil.java | 46 + pqs-event/event-boot/Dockerfile | 6 + pqs-event/event-boot/pom.xml | 118 + .../com/njcn/event/EventBootApplication.java | 26 + .../njcn/event/controller/AreaController.java | 84 + .../controller/EventDetailController.java | 128 + .../event/controller/TransientController.java | 61 + .../njcn/event/mapper/EventDetailMapper.java | 12 + .../njcn/event/mapper/TransientMapper.java | 19 + .../event/mapper/mapping/TransientMapper.xml | 38 + .../njcn/event/service/AreaLineService.java | 36 + .../event/service/EventDetailService.java | 38 + .../service/Impl/AreaLineServiceImpl.java | 230 + .../service/Impl/EventDetailServiceImpl.java | 117 + .../service/Impl/TransientServiceImpl.java | 185 + .../njcn/event/service/TransientService.java | 29 + .../src/main/resources/bootstrap.yml | 54 + pqs-event/pom.xml | 22 + pqs-gateway/Dockerfile | 6 + pqs-gateway/pom.xml | 131 + .../java/com/njcn/gateway/GatewayMain.java | 19 + .../gateway/config/ResourceServerConfig.java | 120 + .../gateway/config/SwaggerResourceConfig.java | 55 + .../njcn/gateway/config/WhiteListConfig.java | 22 + .../com/njcn/gateway/enums/GateWayEnum.java | 35 + .../njcn/gateway/filter/AuthGlobalFilter.java | 99 + .../gateway/filter/SwaggerHeaderFilter.java | 36 + .../njcn/gateway/handler/SwaggerHandler.java | 52 + .../security/AuthorizationManager.java | 82 + .../com/njcn/gateway/utils/GatePubUtils.java | 20 + .../java/com/njcn/gateway/utils/IpUtils.java | 86 + .../com/njcn/gateway/utils/ResponseUtils.java | 51 + pqs-gateway/src/main/resources/bootstrap.yml | 138 + pqs-gateway/src/main/resources/public.key | 7 + pqs-harmonic/harmonic-api/pom.xml | 53 + .../constant/HarmonicValidMessage.java | 10 + .../com/njcn/harmonic/constant/Param.java | 63 + .../harmonic/enums/HarmonicResponseEnum.java | 28 + .../com/njcn/harmonic/pojo/dto/AreaDTO.java | 34 + .../njcn/harmonic/pojo/dto/ComAssessDTO.java | 75 + .../com/njcn/harmonic/pojo/dto/PublicDTO.java | 18 + .../harmonic/pojo/dto/SteadyQualifyDTO.java | 172 + .../pojo/dto/excel/area/AreaExcel.java | 56 + .../pojo/dto/excel/area/OverData.java | 27 + .../harmonic/pojo/param/HarmInHarmParam.java | 17 + .../pojo/param/HarmonicPublicParam.java | 21 + .../pojo/param/HistoryHarmOverLimitParam.java | 41 + .../harmonic/pojo/param/HistoryParam.java | 45 + .../harmonic/pojo/param/NormHistoryParam.java | 37 + .../pojo/param/OnlineRateCensusParam.java | 25 + .../harmonic/pojo/param/OnlineRateParam.java | 44 + .../harmonic/pojo/param/PulicTimeParam.java | 33 + .../pojo/param/PulicTimeStatisParam.java | 23 + .../pojo/param/THDistortionParam.java | 49 + .../harmonic/pojo/param/TerminalParam.java | 46 + .../njcn/harmonic/pojo/po/EventDetail.java | 85 + .../com/njcn/harmonic/pojo/po/LimitRate.java | 21 + .../njcn/harmonic/pojo/po/LimitRatePO.java | 252 + .../njcn/harmonic/pojo/po/LimitTarget.java | 276 + .../njcn/harmonic/pojo/po/PQSComAssesPO.java | 120 + .../com/njcn/harmonic/pojo/vo/AssesVO.java | 18 + .../njcn/harmonic/pojo/vo/ComAssessVO.java | 40 + .../pojo/vo/CommunicateStatisticsVO.java | 21 + .../njcn/harmonic/pojo/vo/EventDetailVO.java | 19 + .../njcn/harmonic/pojo/vo/HarmInHarmVO.java | 22 + .../njcn/harmonic/pojo/vo/HarmonicDeptVO.java | 48 + .../njcn/harmonic/pojo/vo/HarmonicLineVO.java | 52 + .../pojo/vo/HarmonicSubstationVO.java | 23 + .../com/njcn/harmonic/pojo/vo/HarmonicVO.java | 57 + .../harmonic/pojo/vo/HistoryDataResultVO.java | 51 + .../pojo/vo/HistoryHarmOverLimitVO.java | 64 + .../harmonic/pojo/vo/IntegrityCensusVO.java | 35 + .../harmonic/pojo/vo/IntegrityIconVO.java | 45 + .../njcn/harmonic/pojo/vo/IntegrityVO.java | 100 + .../com/njcn/harmonic/pojo/vo/LoadTypeVO.java | 24 + .../harmonic/pojo/vo/MonitorOverLimitVO.java | 133 + .../harmonic/pojo/vo/OnlineRateCensusVO.java | 33 + .../njcn/harmonic/pojo/vo/OnlineRateVO.java | 97 + .../harmonic/pojo/vo/OverAreaLimitVO.java | 146 + .../com/njcn/harmonic/pojo/vo/OverAreaVO.java | 35 + .../njcn/harmonic/pojo/vo/PollutionVO.java | 35 + .../harmonic/pojo/vo/QueryResultLimitVO.java | 24 + .../pojo/vo/SteadyExceedRateCensusVO.java | 32 + .../harmonic/pojo/vo/SteadyExceedRateVO.java | 73 + .../njcn/harmonic/pojo/vo/SteadyInfoData.java | 23 + .../pojo/vo/SteadyQualifyCensusVO.java | 43 + .../harmonic/pojo/vo/SteadyQualifyVO.java | 107 + .../pojo/vo/THDistortionCensusVO.java | 27 + .../njcn/harmonic/pojo/vo/THDistortionVO.java | 65 + .../harmonic/pojo/vo/TerminalCensusVO.java | 34 + .../com/njcn/harmonic/pojo/vo/TerminalVO.java | 85 + .../njcn/harmonic/pojo/vo/TransientVO.java | 81 + .../harmonic/pojo/vo/WarningSubstationVO.java | 75 + .../com/njcn/harmonic/utils/FloatUtils.java | 28 + .../harmonic/utils/HarmonicComAssesUtil.java | 299 + .../njcn/harmonic/utils/HarmonicEnumUtil.java | 38 + pqs-harmonic/harmonic-boot/Dockerfile | 5 + pqs-harmonic/harmonic-boot/pom.xml | 124 + .../harmonic/HarmonicBootApplication.java | 28 + .../controller/AnalyzeController.java | 195 + .../harmonic/controller/AssesController.java | 46 + .../controller/ComAssessController.java | 50 + .../controller/CommunicateController.java | 55 + .../controller/HarmInHarmController.java | 47 + .../controller/HarmonicController.java | 100 + .../controller/HistoryResultController.java | 60 + .../controller/IntegrityController.java | 82 + .../controller/NormLimitController.java | 49 + .../controller/OnlineRateDataController.java | 62 + .../controller/PollutionController.java | 91 + .../controller/SteadyDataController.java | 47 + .../SteadyExceedRateController.java | 72 + .../controller/SteadyQualifyController.java | 62 + .../harmonic/controller/THDController.java | 62 + .../controller/TerminalController.java | 61 + .../njcn/harmonic/mapper/HarmonicMapper.java | 9 + .../njcn/harmonic/mapper/IntegrityMapper.java | 40 + .../harmonic/mapper/OnlineRateDataMapper.java | 28 + .../njcn/harmonic/mapper/PollutionMapper.java | 9 + .../mapper/SteadyExceedRateMapper.java | 24 + .../harmonic/mapper/SteadyQualifyMapper.java | 24 + .../harmonic/mapper/THDistortionMapper.java | 24 + .../harmonic/mapper/TerminalDataMapper.java | 26 + .../mapper/mapping/HarmonicMapper.xml | 119 + .../mapper/mapping/IntegrityMapper.xml | 117 + .../mapper/mapping/OnlineRateDataMapper.xml | 71 + .../mapper/mapping/PollutionMapper.xml | 9 + .../mapper/mapping/SteadyExceedRateMapper.xml | 69 + .../mapper/mapping/SteadyQualifyMapper.xml | 50 + .../mapper/mapping/THDistortionMapper.xml | 47 + .../mapper/mapping/TerminalDataMapper.xml | 75 + .../njcn/harmonic/service/AssesService.java | 13 + .../harmonic/service/ComAssessService.java | 22 + .../harmonic/service/CommunicateService.java | 18 + .../harmonic/service/HarmInHarmService.java | 20 + .../service/HistoryResultService.java | 30 + .../harmonic/service/IAnalyzeService.java | 51 + .../harmonic/service/IHarmonicService.java | 76 + .../harmonic/service/IPollutionService.java | 53 + .../harmonic/service/IntegrityService.java | 45 + .../harmonic/service/NormLimitService.java | 21 + .../service/OnlineRateDataService.java | 37 + .../harmonic/service/SteadyDataService.java | 13 + .../service/SteadyExceedRateService.java | 30 + .../service/SteadyQualifyService.java | 31 + .../harmonic/service/THDistortionService.java | 30 + .../harmonic/service/TerminalService.java | 31 + .../service/impl/AnalyzeServiceImpl.java | 696 ++ .../service/impl/AssesServiceImpl.java | 144 + .../service/impl/ComAssessServiceImpl.java | 184 + .../service/impl/CommunicateServiceImpl.java | 94 + .../service/impl/HarmInHarmServiceImpl.java | 110 + .../service/impl/HarmonicServiceImpl.java | 514 + .../impl/HistoryResultServiceImpl.java | 990 ++ .../service/impl/IntegrityServiceImpl.java | 361 + .../service/impl/NormLimitServiceImpl.java | 609 ++ .../impl/OnlineRateDataServiceImpl.java | 317 + .../service/impl/PollutionServiceImpl.java | 237 + .../service/impl/SteadyDataServiceImpl.java | 384 + .../impl/SteadyExceedRateServiceImpl.java | 447 + .../impl/SteadyQualifyServiceImpl.java | 454 + .../service/impl/THDistortionServiceImpl.java | 219 + .../service/impl/TerminalServiceImpl.java | 288 + .../src/main/resources/bootstrap.yml | 54 + pqs-harmonic/pom.xml | 19 + pqs-job/job-admin/Dockerfile | 6 + pqs-job/job-admin/pom.xml | 165 + .../njcn/job/admin/JobAdminApplication.java | 16 + .../job/admin/controller/IndexController.java | 96 + .../admin/controller/JobApiController.java | 72 + .../admin/controller/JobCodeController.java | 96 + .../admin/controller/JobGroupController.java | 197 + .../admin/controller/JobInfoController.java | 226 + .../admin/controller/JobLogController.java | 233 + .../job/admin/controller/UserController.java | 179 + .../annotation/PermissionLimit.java | 29 + .../interceptor/CookieInterceptor.java | 43 + .../interceptor/PermissionInterceptor.java | 60 + .../controller/interceptor/WebMvcConfig.java | 28 + .../resolver/WebExceptionResolver.java | 66 + .../njcn/job/admin/core/alarm/JobAlarm.java | 20 + .../njcn/job/admin/core/alarm/JobAlarmer.java | 65 + .../admin/core/alarm/impl/EmailJobAlarm.java | 117 + .../admin/core/complete/XxlJobCompleter.java | 99 + .../admin/core/conf/XxlJobAdminConfig.java | 158 + .../job/admin/core/cron/CronExpression.java | 1657 +++ .../admin/core/exception/XxlJobException.java | 14 + .../job/admin/core/old/RemoteHttpJobBean.java | 32 + .../core/old/XxlJobDynamicScheduler.java | 413 + .../job/admin/core/old/XxlJobThreadPool.java | 58 + .../core/route/ExecutorRouteStrategyEnum.java | 48 + .../job/admin/core/route/ExecutorRouter.java | 24 + .../route/strategy/ExecutorRouteBusyover.java | 48 + .../strategy/ExecutorRouteConsistentHash.java | 85 + .../route/strategy/ExecutorRouteFailover.java | 48 + .../route/strategy/ExecutorRouteFirst.java | 19 + .../core/route/strategy/ExecutorRouteLFU.java | 79 + .../core/route/strategy/ExecutorRouteLRU.java | 76 + .../route/strategy/ExecutorRouteLast.java | 19 + .../route/strategy/ExecutorRouteRandom.java | 23 + .../route/strategy/ExecutorRouteRound.java | 46 + .../core/scheduler/MisfireStrategyEnum.java | 39 + .../core/scheduler/ScheduleTypeEnum.java | 46 + .../admin/core/scheduler/XxlJobScheduler.java | 101 + .../admin/core/thread/JobCompleteHelper.java | 184 + .../core/thread/JobFailMonitorHelper.java | 110 + .../admin/core/thread/JobLogReportHelper.java | 152 + .../admin/core/thread/JobRegistryHelper.java | 204 + .../admin/core/thread/JobScheduleHelper.java | 369 + .../core/thread/JobTriggerPoolHelper.java | 150 + .../admin/core/trigger/TriggerTypeEnum.java | 27 + .../job/admin/core/trigger/XxlJobTrigger.java | 226 + .../njcn/job/admin/core/util/CookieUtil.java | 98 + .../com/njcn/job/admin/core/util/FtlUtil.java | 31 + .../njcn/job/admin/core/util/I18nUtil.java | 79 + .../njcn/job/admin/core/util/JacksonUtil.java | 92 + .../job/admin/core/util/LocalCacheUtil.java | 133 + .../njcn/job/admin/dao/XxlJobGroupDao.java | 37 + .../com/njcn/job/admin/dao/XxlJobInfoDao.java | 49 + .../com/njcn/job/admin/dao/XxlJobLogDao.java | 62 + .../njcn/job/admin/dao/XxlJobLogGlueDao.java | 24 + .../job/admin/dao/XxlJobLogReportDao.java | 26 + .../njcn/job/admin/dao/XxlJobRegistryDao.java | 38 + .../com/njcn/job/admin/dao/XxlJobUserDao.java | 32 + .../njcn/job/admin/service/LoginService.java | 107 + .../njcn/job/admin/service/XxlJobService.java | 97 + .../job/admin/service/impl/AdminBizImpl.java | 35 + .../admin/service/impl/XxlJobServiceImpl.java | 718 ++ .../src/main/resources/bootstrap.yml | 121 + .../main/resources/i18n/message_en.properties | 276 + .../resources/i18n/message_zh_CN.properties | 276 + .../resources/i18n/message_zh_TC.properties | 276 + .../mybatis-mapper/XxlJobGroupMapper.xml | 91 + .../mybatis-mapper/XxlJobInfoMapper.xml | 240 + .../mybatis-mapper/XxlJobLogGlueMapper.xml | 71 + .../mybatis-mapper/XxlJobLogMapper.xml | 273 + .../mybatis-mapper/XxlJobLogReportMapper.xml | 62 + .../mybatis-mapper/XxlJobRegistryMapper.xml | 62 + .../mybatis-mapper/XxlJobUserMapper.xml | 87 + .../Ionicons/css/ionicons.min.css | 11 + .../Ionicons/fonts/ionicons.eot | Bin 0 -> 120724 bytes .../Ionicons/fonts/ionicons.svg | 2230 ++++ .../Ionicons/fonts/ionicons.ttf | Bin 0 -> 188508 bytes .../Ionicons/fonts/ionicons.woff | Bin 0 -> 67904 bytes .../bower_components/PACE/pace.min.js | 2 + .../PACE/themes/blue/pace-theme-flash.css | 77 + .../daterangepicker.css | 269 + .../daterangepicker.js | 1653 +++ .../bootstrap/css/bootstrap.min.css | 6 + .../bootstrap/css/bootstrap.min.css.map | 1 + .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20127 bytes .../fonts/glyphicons-halflings-regular.svg | 288 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes .../fonts/glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes .../bootstrap/js/bootstrap.min.js | 6 + .../css/dataTables.bootstrap.min.css | 1 + .../js/dataTables.bootstrap.min.js | 8 + .../js/jquery.dataTables.min.js | 166 + .../bower_components/fastclick/fastclick.js | 841 ++ .../font-awesome/css/font-awesome.css.map | 7 + .../font-awesome/css/font-awesome.min.css | 4 + .../font-awesome/fonts/FontAwesome.otf | Bin 0 -> 134808 bytes .../fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes .../fonts/fontawesome-webfont.svg | 2671 +++++ .../fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes .../fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes .../fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes .../jquery.slimscroll.min.js | 16 + .../bower_components/jquery/jquery.min.js | 2 + .../bower_components/moment/moment.min.js | 1 + .../adminlte/plugins/iCheck/icheck.min.js | 10 + .../adminlte/plugins/iCheck/square/blue.css | 62 + .../adminlte/plugins/iCheck/square/blue.png | Bin 0 -> 2185 bytes .../plugins/iCheck/square/blue@2x.png | Bin 0 -> 4485 bytes .../src/main/resources/static/favicon.ico | Bin 0 -> 4286 bytes .../src/main/resources/static/js/common.1.js | 156 + .../src/main/resources/static/js/index.js | 207 + .../resources/static/js/jobcode.index.1.js | 97 + .../resources/static/js/jobgroup.index.1.js | 359 + .../resources/static/js/jobinfo.index.1.js | 739 ++ .../resources/static/js/joblog.detail.1.js | 91 + .../resources/static/js/joblog.index.1.js | 396 + .../src/main/resources/static/js/login.1.js | 66 + .../main/resources/static/js/user.index.1.js | 328 + .../codemirror/addon/hint/anyword-hint.js | 41 + .../codemirror/addon/hint/show-hint.css | 36 + .../codemirror/addon/hint/show-hint.js | 434 + .../plugins/codemirror/lib/codemirror.css | 346 + .../plugins/codemirror/lib/codemirror.js | 9698 +++++++++++++++++ .../plugins/codemirror/mode/clike/clike.js | 879 ++ .../codemirror/mode/javascript/javascript.js | 899 ++ .../static/plugins/codemirror/mode/php/php.js | 234 + .../codemirror/mode/powershell/powershell.js | 398 + .../plugins/codemirror/mode/python/python.js | 409 + .../plugins/codemirror/mode/shell/shell.js | 152 + .../static/plugins/cronGen/cronGen.js | 1106 ++ .../static/plugins/cronGen/cronGen_en.js | 1106 ++ .../plugins/echarts/echarts.common.min.js | 22 + .../static/plugins/jquery/jquery.cookie.js | 117 + .../plugins/jquery/jquery.validate.min.js | 4 + .../resources/static/plugins/layer/layer.js | 2 + .../plugins/layer/theme/default/icon-ext.png | Bin 0 -> 5911 bytes .../plugins/layer/theme/default/icon.png | Bin 0 -> 11493 bytes .../plugins/layer/theme/default/layer.css | 1 + .../plugins/layer/theme/default/loading-0.gif | Bin 0 -> 5793 bytes .../plugins/layer/theme/default/loading-1.gif | Bin 0 -> 701 bytes .../plugins/layer/theme/default/loading-2.gif | Bin 0 -> 1787 bytes .../templates/common/common.exception.ftl | 31 + .../templates/common/common.macro.ftl | 239 + .../src/main/resources/templates/help.ftl | 47 + .../src/main/resources/templates/index.ftl | 147 + .../templates/jobcode/jobcode.index.ftl | 164 + .../templates/jobgroup/jobgroup.index.ftl | 172 + .../templates/jobinfo/jobinfo.index.ftl | 540 + .../templates/joblog/joblog.detail.ftl | 72 + .../templates/joblog/joblog.index.ftl | 180 + .../src/main/resources/templates/login.ftl | 45 + .../resources/templates/user/user.index.ftl | 188 + pqs-job/job-api/pom.xml | 87 + .../java/com/njcn/job/api/JobFeignClient.java | 68 + .../JobFeignClientFallbackFactory.java | 66 + .../java/com/njcn/job/model/XxlJobGroup.java | 77 + .../java/com/njcn/job/model/XxlJobInfo.java | 237 + .../java/com/njcn/job/model/XxlJobLog.java | 157 + .../com/njcn/job/model/XxlJobLogGlue.java | 75 + .../com/njcn/job/model/XxlJobLogReport.java | 54 + .../com/njcn/job/model/XxlJobRegistry.java | 55 + .../java/com/njcn/job/model/XxlJobUser.java | 73 + pqs-job/job-executor/Dockerfile | 6 + pqs-job/job-executor/pom.xml | 144 + .../njcn/executor/JobExecutorApplication.java | 24 + .../njcn/executor/config/XxlJobConfig.java | 78 + .../njcn/executor/handler/AirStrategyJob.java | 42 + .../com/njcn/executor/handler/DayJob.java | 2401 ++++ .../executor/handler/EleIntegrityJob.java | 165 + .../executor/handler/EleOnlineRateJob.java | 70 + .../njcn/executor/handler/ElectricCalJob.java | 148 + .../njcn/executor/handler/LimitRateJob.java | 1367 +++ .../njcn/executor/handler/LimitTargetJob.java | 984 ++ .../njcn/executor/handler/PollutionJob.java | 551 + .../com/njcn/executor/handler/TestJob.java | 35 + .../njcn/executor/pojo/dto/HarmonicDTO.java | 20 + .../njcn/executor/pojo/dto/PollutionDTO.java | 59 + .../njcn/executor/pojo/vo/DataFlicker.java | 43 + .../com/njcn/executor/pojo/vo/DataFluc.java | 41 + .../executor/pojo/vo/DataHarmPhasicI.java | 185 + .../executor/pojo/vo/DataHarmPhasicV.java | 185 + .../njcn/executor/pojo/vo/DataHarmPowerP.java | 193 + .../njcn/executor/pojo/vo/DataHarmPowerQ.java | 188 + .../njcn/executor/pojo/vo/DataHarmPowerS.java | 188 + .../njcn/executor/pojo/vo/DataHarmRateI.java | 18 + .../njcn/executor/pojo/vo/DataHarmRateV.java | 18 + .../java/com/njcn/executor/pojo/vo/DataI.java | 203 + .../njcn/executor/pojo/vo/DataInHarmI.java | 20 + .../executor/pojo/vo/DataInHarmRateI.java | 20 + .../executor/pojo/vo/DataInHarmRateV.java | 20 + .../njcn/executor/pojo/vo/DataInHarmV.java | 186 + .../com/njcn/executor/pojo/vo/DataPlt.java | 42 + .../java/com/njcn/executor/pojo/vo/DataV.java | 221 + .../njcn/executor/pojo/vo/DayHarmrateV.java | 184 + .../java/com/njcn/executor/pojo/vo/DayI.java | 20 + .../com/njcn/executor/pojo/vo/DayInharmV.java | 185 + .../com/njcn/executor/pojo/vo/DayPlt.java | 23 + .../java/com/njcn/executor/pojo/vo/DayV.java | 22 + .../com/njcn/executor/pojo/vo/LimitRate.java | 244 + .../src/main/resources/bootstrap.yml | 60 + pqs-job/pom.xml | 26 + pqs-system/pom.xml | 24 + pqs-system/system-api/pom.xml | 38 + .../com/njcn/system/api/AreaFeignClient.java | 63 + .../njcn/system/api/ConfigFeignClient.java | 27 + .../njcn/system/api/DicDataFeignClient.java | 59 + .../com/njcn/system/api/ThemeFeignClient.java | 25 + .../AreaFeignClientFallbackFactory.java | 72 + .../ConfigFeignClientFallbackFactory.java | 45 + .../DicDataFeignClientFallbackFactory.java | 71 + .../ThemeFeignClientFallbackFactory.java | 45 + .../java/com/njcn/system/enums/AreaEnum.java | 13 + .../com/njcn/system/enums/DicDataEnum.java | 36 + .../njcn/system/enums/DicDataTypeEnum.java | 48 + .../njcn/system/enums/SystemResponseEnum.java | 33 + .../java/com/njcn/system/enums/ThemeEnum.java | 34 + .../njcn/system/pojo/constant/SystemType.java | 15 + .../njcn/system/pojo/constant/ThemeState.java | 21 + .../com/njcn/system/pojo/dto/AreaTreeDTO.java | 20 + .../system/pojo/enums/StatisticsEnum.java | 48 + .../com/njcn/system/pojo/param/AreaParam.java | 87 + .../njcn/system/pojo/param/DictDataParam.java | 93 + .../njcn/system/pojo/param/DictTypeParam.java | 83 + .../njcn/system/pojo/param/MxGraphParam.java | 34 + .../njcn/system/pojo/param/ThemeParam.java | 63 + .../java/com/njcn/system/pojo/po/Area.java | 72 + .../java/com/njcn/system/pojo/po/Config.java | 52 + .../com/njcn/system/pojo/po/DictData.java | 61 + .../com/njcn/system/pojo/po/DictType.java | 63 + .../java/com/njcn/system/pojo/po/MxGraph.java | 29 + .../com/njcn/system/pojo/po/Resource.java | 52 + .../java/com/njcn/system/pojo/po/Task.java | 51 + .../java/com/njcn/system/pojo/po/Theme.java | 61 + .../com/njcn/system/pojo/vo/AreaTreeVO.java | 43 + .../njcn/system/pojo/vo/DictDataCache.java | 30 + .../com/njcn/system/pojo/vo/DictDataVO.java | 58 + .../com/njcn/system/utils/SystemEnumUtil.java | 49 + pqs-system/system-boot/Dockerfile | 5 + pqs-system/system-boot/pom.xml | 93 + .../java/com/njcn/system/SystemBootMain.java | 22 + .../system/controller/AreaController.java | 261 + .../system/controller/ConfigController.java | 61 + .../system/controller/DictDataController.java | 213 + .../system/controller/DictTypeController.java | 139 + .../system/controller/MxGraphController.java | 98 + .../system/controller/ResourceController.java | 22 + .../system/controller/TaskController.java | 22 + .../system/controller/ThemeController.java | 125 + .../com/njcn/system/mapper/AreaMapper.java | 71 + .../com/njcn/system/mapper/ConfigMapper.java | 16 + .../njcn/system/mapper/DictDataMapper.java | 47 + .../njcn/system/mapper/DictTypeMapper.java | 25 + .../com/njcn/system/mapper/MxGraphMapper.java | 13 + .../njcn/system/mapper/ResourceMapper.java | 16 + .../com/njcn/system/mapper/TaskMapper.java | 16 + .../com/njcn/system/mapper/ThemeMapper.java | 16 + .../njcn/system/mapper/mapping/AreaMapper.xml | 74 + .../system/mapper/mapping/ConfigMapper.xml | 5 + .../system/mapper/mapping/DictDataMapper.xml | 45 + .../system/mapper/mapping/DictTypeMapper.xml | 23 + .../system/mapper/mapping/ResourceMapper.xml | 5 + .../njcn/system/mapper/mapping/TaskMapper.xml | 5 + .../system/mapper/mapping/ThemeMapper.xml | 5 + .../com/njcn/system/service/IAreaService.java | 106 + .../njcn/system/service/IConfigService.java | 16 + .../njcn/system/service/IDictDataService.java | 102 + .../njcn/system/service/IDictTypeService.java | 67 + .../njcn/system/service/IMxGraphService.java | 33 + .../njcn/system/service/IResourceService.java | 16 + .../com/njcn/system/service/ITaskService.java | 16 + .../njcn/system/service/IThemeService.java | 88 + .../system/service/impl/AreaServiceImpl.java | 280 + .../service/impl/ConfigServiceImpl.java | 20 + .../service/impl/DictDataServiceImpl.java | 201 + .../service/impl/DictTypeServiceImpl.java | 157 + .../service/impl/MxGraphServiceImpl.java | 47 + .../service/impl/ResourceServiceImpl.java | 20 + .../system/service/impl/TaskServiceImpl.java | 20 + .../system/service/impl/ThemeServiceImpl.java | 139 + .../src/main/resources/bootstrap.yml | 48 + .../src/test/java/com/njcn/BaseJunitTest.java | 18 + .../src/test/java/com/njcn/DictDataTest.java | 24 + pqs-user/pom.xml | 24 + pqs-user/user-api/pom.xml | 42 + .../njcn/user/api/AuthClientFeignClient.java | 29 + .../com/njcn/user/api/DeptFeignClient.java | 48 + .../com/njcn/user/api/UserFeignClient.java | 45 + .../AuthClientFeignClientFallbackFactory.java | 43 + .../DeptFeignClientFallbackFactory.java | 60 + .../UserFeignClientFallbackFactory.java | 57 + .../com/njcn/user/enums/UserResponseEnum.java | 96 + .../com/njcn/user/enums/UserStatusEnum.java | 32 + .../user/pojo/constant/ComponentState.java | 19 + .../njcn/user/pojo/constant/DeptState.java | 15 + .../com/njcn/user/pojo/constant/DeptType.java | 16 + .../user/pojo/constant/FunctionState.java | 36 + .../user/pojo/constant/HomePageState.java | 19 + .../com/njcn/user/pojo/constant/RoleType.java | 16 + .../pojo/constant/UserDefaultPassword.java | 13 + .../njcn/user/pojo/constant/UserState.java | 41 + .../com/njcn/user/pojo/constant/UserType.java | 28 + .../user/pojo/constant/UserValidMessage.java | 73 + .../com/njcn/user/pojo/dto/ComponentDTO.java | 46 + .../java/com/njcn/user/pojo/dto/DeptDTO.java | 37 + .../java/com/njcn/user/pojo/dto/UserDTO.java | 47 + .../njcn/user/pojo/dto/excel/UserExcel.java | 46 + .../njcn/user/pojo/param/ComponentParam.java | 74 + .../com/njcn/user/pojo/param/DeptParam.java | 75 + .../njcn/user/pojo/param/FunctionParam.java | 74 + .../njcn/user/pojo/param/HomePageParam.java | 62 + .../com/njcn/user/pojo/param/RoleParam.java | 83 + .../com/njcn/user/pojo/param/UserParam.java | 128 + .../user/pojo/param/UserPasswordParam.java | 27 + .../com/njcn/user/pojo/po/AuthClient.java | 85 + .../java/com/njcn/user/pojo/po/Component.java | 71 + .../main/java/com/njcn/user/pojo/po/Dept.java | 65 + .../java/com/njcn/user/pojo/po/Function.java | 76 + .../java/com/njcn/user/pojo/po/HomePage.java | 61 + .../main/java/com/njcn/user/pojo/po/Role.java | 50 + .../com/njcn/user/pojo/po/RoleComponent.java | 29 + .../com/njcn/user/pojo/po/RoleFunction.java | 29 + .../main/java/com/njcn/user/pojo/po/User.java | 146 + .../java/com/njcn/user/pojo/po/UserRole.java | 29 + .../java/com/njcn/user/pojo/po/UserSet.java | 39 + .../com/njcn/user/pojo/po/UserStrategy.java | 71 + .../com/njcn/user/pojo/vo/ComponentVO.java | 46 + .../com/njcn/user/pojo/vo/DeptAllTreeVO.java | 19 + .../com/njcn/user/pojo/vo/DeptTreeVO.java | 38 + .../java/com/njcn/user/pojo/vo/DeptVO.java | 64 + .../com/njcn/user/pojo/vo/FunctionVO.java | 52 + .../java/com/njcn/user/pojo/vo/RoleVO.java | 44 + .../java/com/njcn/user/pojo/vo/UserVO.java | 43 + .../com/njcn/user/utils/UserEnumUtil.java | 59 + pqs-user/user-boot/Dockerfile | 6 + pqs-user/user-boot/pom.xml | 114 + .../com/njcn/user/UserBootApplication.java | 25 + .../user/controller/AuthClientController.java | 60 + .../user/controller/ComponentController.java | 119 + .../njcn/user/controller/DeptController.java | 260 + .../user/controller/FunctionController.java | 158 + .../user/controller/HomePageController.java | 117 + .../controller/RoleComponentController.java | 75 + .../njcn/user/controller/RoleController.java | 149 + .../controller/RoleFunctionController.java | 56 + .../njcn/user/controller/UserController.java | 337 + .../user/controller/UserRoleController.java | 22 + .../user/controller/UserSetController.java | 22 + .../controller/UserStrategyController.java | 22 + .../njcn/user/init/InitPermissionRoles.java | 26 + .../njcn/user/mapper/AuthClientMapper.java | 16 + .../com/njcn/user/mapper/ComponentMapper.java | 25 + .../java/com/njcn/user/mapper/DeptMapper.java | 94 + .../com/njcn/user/mapper/FunctionMapper.java | 26 + .../com/njcn/user/mapper/HomePageMapper.java | 16 + .../njcn/user/mapper/RoleComponentMapper.java | 25 + .../njcn/user/mapper/RoleFunctionMapper.java | 25 + .../java/com/njcn/user/mapper/RoleMapper.java | 53 + .../java/com/njcn/user/mapper/UserMapper.java | 59 + .../com/njcn/user/mapper/UserRoleMapper.java | 24 + .../com/njcn/user/mapper/UserSetMapper.java | 16 + .../njcn/user/mapper/UserStrategyMapper.java | 16 + .../user/mapper/mapping/AuthClientMapper.xml | 5 + .../user/mapper/mapping/ComponentMapper.xml | 16 + .../njcn/user/mapper/mapping/DeptMapper.xml | 158 + .../user/mapper/mapping/FunctionMapper.xml | 60 + .../user/mapper/mapping/HomePageMapper.xml | 5 + .../mapper/mapping/RoleComponentMapper.xml | 13 + .../mapper/mapping/RoleFunctionMapper.xml | 13 + .../njcn/user/mapper/mapping/RoleMapper.xml | 35 + .../njcn/user/mapper/mapping/UserMapper.xml | 68 + .../user/mapper/mapping/UserRoleMapper.xml | 13 + .../user/mapper/mapping/UserSetMapper.xml | 5 + .../mapper/mapping/UserStrategyMapper.xml | 5 + .../njcn/user/service/IAuthClientService.java | 22 + .../njcn/user/service/IComponentService.java | 69 + .../com/njcn/user/service/IDeptService.java | 134 + .../njcn/user/service/IFunctionService.java | 116 + .../njcn/user/service/IHomePageService.java | 80 + .../user/service/IRoleComponentService.java | 32 + .../user/service/IRoleFunctionService.java | 28 + .../com/njcn/user/service/IRoleService.java | 81 + .../njcn/user/service/IUserRoleService.java | 48 + .../com/njcn/user/service/IUserService.java | 161 + .../njcn/user/service/IUserSetService.java | 72 + .../user/service/IUserStrategyService.java | 22 + .../service/impl/AuthClientServiceImpl.java | 34 + .../service/impl/ComponentServiceImpl.java | 155 + .../user/service/impl/DeptServiceImpl.java | 313 + .../service/impl/FunctionServiceImpl.java | 303 + .../service/impl/HomePageServiceImpl.java | 103 + .../impl/RoleComponentServiceImpl.java | 57 + .../service/impl/RoleFunctionServiceImpl.java | 39 + .../user/service/impl/RoleServiceImpl.java | 216 + .../service/impl/UserRoleServiceImpl.java | 97 + .../user/service/impl/UserServiceImpl.java | 532 + .../user/service/impl/UserSetServiceImpl.java | 159 + .../service/impl/UserStrategyServiceImpl.java | 36 + .../src/main/resources/bootstrap.yml | 49 + .../src/test/java/com/njcn/BaseJunitTest.java | 18 + .../src/test/java/com/njcn/UserTest.java | 25 + pqs.ipr | 141 + pqs.iws | 418 + 1246 files changed, 129600 insertions(+) create mode 100644 pom.xml create mode 100644 pqs-auth/Dockerfile create mode 100644 pqs-auth/pom.xml create mode 100644 pqs-auth/src/main/java/com/njcn/auth/AuthApplication.java create mode 100644 pqs-auth/src/main/java/com/njcn/auth/config/AuthorizationServerConfig.java create mode 100644 pqs-auth/src/main/java/com/njcn/auth/config/WebSecurityConfig.java create mode 100644 pqs-auth/src/main/java/com/njcn/auth/controller/AuthController.java create mode 100644 pqs-auth/src/main/java/com/njcn/auth/controller/JudgeThirdToken.java create mode 100644 pqs-auth/src/main/java/com/njcn/auth/controller/KaptchaController.java create mode 100644 pqs-auth/src/main/java/com/njcn/auth/exception/AuthExceptionHandler.java create mode 100644 pqs-auth/src/main/java/com/njcn/auth/filter/CustomClientCredentialsTokenEndpointFilter.java create mode 100644 pqs-auth/src/main/java/com/njcn/auth/pojo/bo/BusinessUser.java create mode 100644 pqs-auth/src/main/java/com/njcn/auth/security/clientdetails/ClientDetailsServiceImpl.java create mode 100644 pqs-auth/src/main/java/com/njcn/auth/security/extension/captcha/CaptchaTokenGranter.java create mode 100644 pqs-auth/src/main/java/com/njcn/auth/security/extension/refresh/PreAuthenticatedUserDetailsService.java create mode 100644 pqs-auth/src/main/java/com/njcn/auth/security/sm4/Sm4AuthenticationProvider.java create mode 100644 pqs-auth/src/main/java/com/njcn/auth/service/UserDetailsServiceImpl.java create mode 100644 pqs-auth/src/main/java/com/njcn/auth/service/UserTokenService.java create mode 100644 pqs-auth/src/main/java/com/njcn/auth/utils/AuthPubUtil.java create mode 100644 pqs-auth/src/main/resources/bootstrap.yml create mode 100644 pqs-auth/src/main/resources/njcn.jks create mode 100644 pqs-common/common-autocode/pom.xml create mode 100644 pqs-common/common-autocode/src/main/java/com/njcn/autocode/pojo/Module.java create mode 100644 pqs-common/common-autocode/src/main/java/com/njcn/autocode/utils/GenerateCode.java create mode 100644 pqs-common/common-core/pom.xml create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/config/AsyncConfiguration.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/config/GeneralInfo.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/pojo/annotation/OperateInfo.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/pojo/constant/LogInfo.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/pojo/constant/OperateType.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/pojo/constant/PatternRegex.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/pojo/constant/SecurityConstants.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/pojo/constant/ServerInfo.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/LogInfoDTO.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/SimpleDTO.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/SimpleTreeDTO.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/UserTokenInfo.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/AnalogDTO.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/ComtradeCfgDTO.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/DigitalDTO.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/EigenvalueDTO.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/MutationDTO.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/RateDTO.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/SamplingDTO.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/SamplingsDTO.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/WaveDataDTO.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/pojo/enums/auth/AuthenticationMethodEnum.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/pojo/enums/auth/ClientEnum.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/pojo/enums/auth/PasswordEncoderTypeEnum.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/pojo/enums/common/DataStateEnum.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/pojo/enums/common/LogEnum.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/pojo/enums/common/ServerEnum.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/pojo/enums/response/CommonResponseEnum.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/pojo/exception/BusinessException.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/pojo/response/HttpResult.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/utils/EnumUtils.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/utils/ExceptionUtil.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/utils/HttpResultUtil.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/utils/LogUtil.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/utils/PubUtils.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/utils/ReflectCommonUtil.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/utils/XssCleanRuleUtils.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/utils/sm/DesUtils.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/utils/sm/Sm2.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/utils/sm/Sm3.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/utils/sm/Sm3Digest.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/utils/sm/Sm4.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/utils/sm/Sm4Context.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/utils/sm/Sm4Utils.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/utils/sm/util.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/utils/wave/AnalyWave.java create mode 100644 pqs-common/common-core/src/main/java/com/njcn/common/utils/wave/BitConverter.java create mode 100644 pqs-common/common-db/pom.xml create mode 100644 pqs-common/common-db/src/main/java/com/njcn/db/bo/BaseEntity.java create mode 100644 pqs-common/common-db/src/main/java/com/njcn/db/config/MybatisConfig.java create mode 100644 pqs-common/common-db/src/main/java/com/njcn/db/constant/DbConstant.java create mode 100644 pqs-common/common-db/src/main/java/com/njcn/db/handler/AutoFillValueHandler.java create mode 100644 pqs-common/common-db/src/main/resources/META-INF/spring.factories create mode 100644 pqs-common/common-echarts/pom.xml create mode 100644 pqs-common/common-echarts/src/main/java/com/njcn/echarts/TestUtil.java create mode 100644 pqs-common/common-influxdb/pom.xml create mode 100644 pqs-common/common-influxdb/src/main/java/com/njcn/influxdb/config/InfluxDbConfig.java create mode 100644 pqs-common/common-influxdb/src/main/java/com/njcn/influxdb/utils/InfluxDbUtils.java create mode 100644 pqs-common/common-influxdb/src/test/java/test.java create mode 100644 pqs-common/common-microservice/pom.xml create mode 100644 pqs-common/common-poi/pom.xml create mode 100644 pqs-common/common-poi/src/main/java/com/njcn/poi/excel/ExcelUtil.java create mode 100644 pqs-common/common-poi/src/main/java/com/njcn/poi/pojo/bo/BaseLineExcelBody.java create mode 100644 pqs-common/common-poi/src/main/java/com/njcn/poi/pojo/bo/BaseLineProExcelBody.java create mode 100644 pqs-common/common-poi/src/main/java/com/njcn/poi/pojo/constant/DeviceInfoConstant.java create mode 100644 pqs-common/common-poi/src/main/java/com/njcn/poi/util/PoiUtil.java create mode 100644 pqs-common/common-redis/pom.xml create mode 100644 pqs-common/common-redis/src/main/java/com/njcn/redis/config/RedisConfig.java create mode 100644 pqs-common/common-redis/src/main/java/com/njcn/redis/config/RedisListenerConfig.java create mode 100644 pqs-common/common-redis/src/main/java/com/njcn/redis/pojo/enums/RedisKeyEnum.java create mode 100644 pqs-common/common-redis/src/main/java/com/njcn/redis/utils/RedisUtil.java create mode 100644 pqs-common/common-redis/src/main/resources/META-INF/spring.factories create mode 100644 pqs-common/common-swagger/pom.xml create mode 100644 pqs-common/common-swagger/src/main/java/com/njcn/swagger/config/Knife4jSwaggerConfig.java create mode 100644 pqs-common/common-swagger/src/main/resources/META-INF/spring.factories create mode 100644 pqs-common/common-web/pom.xml create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/advice/ResponseAdvice.java create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/config/AntiSamyConfig.java create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/config/DateTimeValidator.java create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/config/FeignConfig.java create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/constant/ValidMessage.java create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/controller/BaseController.java create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/exception/GlobalBusinessExceptionHandler.java create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/factory/PageFactory.java create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/filter/XssFilter.java create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/filter/XssRequestWrapper.java create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/pojo/annotation/DateTimeStrValid.java create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/pojo/dto/BaseDTO.java create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/pojo/param/BaseParam.java create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/pojo/param/DeptLineParam.java create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/pojo/vo/AreaIdVO.java create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/pojo/vo/BaseVO.java create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/pojo/vo/DeptLineVO.java create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/pojo/vo/LineDataVO.java create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/pojo/vo/SteadyDataVO.java create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/service/ILogService.java create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/service/impl/LogServiceImpl.java create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/utils/ComAssesUtil.java create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/utils/ControllerUtil.java create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/utils/FloatUtils.java create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/utils/GeneralUtil.java create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/utils/HttpServletUtil.java create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/utils/IpUtils.java create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/utils/PqsComasses.java create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/utils/RequestUtil.java create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/utils/ValidatorUtils.java create mode 100644 pqs-common/common-web/src/main/java/com/njcn/web/utils/WebUtil.java create mode 100644 pqs-common/common-web/src/main/resources/antisamy-ebay.xml create mode 100644 pqs-common/common-web/src/main/resources/antisamy.xsd create mode 100644 pqs-common/pom.xml create mode 100644 pqs-device/device-api/pom.xml create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/api/DeptLineFeignClient.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/api/DeviceTreeClient.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/api/GeneralDeviceInfoClient.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/api/LineFeignClient.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/api/TerminalBaseClient.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/api/fallback/DeptLineFeignClientFallbackFactory.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/api/fallback/DeviceTreeClientFallbackFactory.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/api/fallback/GeneralDeviceInfoClientFallbackFactory.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/api/fallback/LineFeignClientFallbackFactory.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/api/fallback/TerminalBaseClientFallbackFactory.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/enums/DeviceResponseEnum.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/enums/LineBaseEnum.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/enums/LineFlagEnum.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/bo/BaseLineInfo.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/bo/DeviceType.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/bo/excel/LineMark.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/bo/excel/NodeExcel.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/bo/excel/OracleTerminalExcel.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/bo/excel/OverLimitExcel.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/bo/excel/TerminalBaseExcel.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/constant/DeviceValidMessage.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/dto/DeviceLineDTO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/dto/GeneralDeviceDTO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/dto/OverLimitLineDTO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/dto/PollutionLineDTO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/dto/PollutionParamDTO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/dto/PollutionSubstationDTO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/dto/WarningSubstationDTO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/param/AddTerminalParam.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/param/AlarmParam.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/param/DeviceInfoParam.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/param/DeviceLogParam.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/param/DeviceParam.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/param/EventLogParam.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/param/FlowMealParam.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/param/FlowStrategyParam.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/param/GdInformationParam.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/param/LineParam.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/param/NodeInformationParam.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/param/NodeParam.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/param/ProjectParam.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/param/ProvinceParam.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/param/RunManageParam.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/param/SubStationParam.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/param/SubVoltageParam.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/param/TerminalLedgerParam.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/param/TerminalMainQueryParam.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/param/UpdateTerminalParam.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/param/VersionParam.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/po/Alarm.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/po/Communicate.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/po/DeptLine.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/po/DevFuction.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/po/DevMeal.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/po/DevState.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/po/DevStrategy.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/po/DevVersion.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/po/Device.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/po/EventPushLogs.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/po/FlowMeal.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/po/FlowStrategy.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/po/FlowStrategyDic.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/po/Line.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/po/LineBak.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/po/LineDetail.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/po/MonthFlow.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/po/Node.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/po/Overlimit.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/po/ProtectValue.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/po/ProtectWord.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/po/Push.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/po/StatisFlow.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/po/StrategydicFun.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/po/Substation.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/po/Version.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/po/Voltage.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/CommunicateVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/DeptLineTreeVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/DeviceLogVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/DeviceVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/EventLogVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/FlowStrategyVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/GdInformationVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/LineDetailDataVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/LineDetailVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/LineDeviceStateVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/LineDistributionVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/LineFlowMealDetailVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/LineInfluxDbInegrityVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/LineInfluxDbOnlineVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/LineMarkVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/LineOverLimitVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/LineStateVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/LineStaticsValueVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/LineStaticsViewVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/LineStatisticsDetailVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/LineStatisticsTableVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/LineVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/ProjectVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/ProvinceVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/RateOfFlowVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/RunManageVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/RunTimeVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/ShowFlowStrategyVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/SubStationVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/SubVoltageVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/SubstationDetailVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/TerminalAlarmVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/TerminalLedgerVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/TerminalMaintainVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/TerminalTree.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/TerminalVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/TerminalVersionVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/pojo/vo/VersionVO.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/utils/COverlimit.java create mode 100644 pqs-device/device-api/src/main/java/com/njcn/device/utils/DeviceEnumUtil.java create mode 100644 pqs-device/device-boot/Dockerfile create mode 100644 pqs-device/device-boot/pom.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/DeviceBootApplication.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/controller/DeptLineController.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/controller/GeneralDeviceInfoController.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/controller/LineController.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/controller/LineMarkController.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/controller/LogManageController.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/controller/NodeController.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/controller/OperationContrController.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/controller/ProgramVersionController.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/controller/RateOfFlowController.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/controller/RunManageController.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/controller/TerminalAlarmController.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/controller/TerminalBaseController.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/controller/TerminalMaintainController.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/controller/TerminalTreeController.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/controller/TerminalVersionController.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/AlarmMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/CommunicateMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/DeptLineMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/DevFuctionMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/DevMealMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/DevStateMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/DevStrategyMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/DevVersionMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/DeviceMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/FlowMealMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/FlowStrategyDicMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/FlowStrategyMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/LineBakMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/LineDetailMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/LineMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/LineMarkMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/LogManageMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/MonthFlowMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/NodeMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/OverlimitMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/ProgramVersionMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/ProtectValueMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/ProtectWordMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/RateOfFlowMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/StatisFlowMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/StrategydicFunMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/SubstationMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/TerminalMaintainMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/TerminalVersionMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/TreeMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/VersionMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/VoltageMapper.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/AlarmMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/CommunicateMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/DeptLineMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/DevFuctionMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/DevMealMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/DevStateMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/DevStrategyMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/DevVersionMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/DeviceMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/FlowMealMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/FlowStrategyDicMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/FlowStrategyMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/LineBakMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/LineDetailMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/LineMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/LineMarkMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/LogManageMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/MonthFlowMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/NodeMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/OverlimitMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/ProgramVersionMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/ProtectValueMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/ProtectWordMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/RateOfFlowMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/StatisFlowMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/StrategydicFunMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/SubstationMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/TerminalMaintainMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/TerminalVersionMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/TreeMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/VersionMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/mapper/mapping/VoltageMapper.xml create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/DeptLineService.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/FlowMealService.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/FlowStrategyService.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/IDevMealService.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/IDevStrategyService.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/IDeviceService.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/INodeService.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/LineBakService.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/LineMarkService.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/LineService.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/LogManageService.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/ProgramVersionService.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/RunManageService.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/TerminalAlarmService.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/TerminalBaseService.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/TerminalMaintainService.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/TerminalTreeService.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/TerminalVersionService.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/impl/DeptLineServiceImpl.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/impl/DevMealServiceImpl.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/impl/DevStrategyServiceImpl.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/impl/DeviceServiceImpl.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/impl/FlowMealServiceImpl.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/impl/FlowStrategyServiceImpl.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/impl/GeneralDeviceService.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/impl/LineBakServiceImpl.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/impl/LineMarkServiceImpl.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/impl/LineServiceImpl.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/impl/LogManageServiceImpl.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/impl/NodeServiceImpl.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/impl/ProgramVersionServiceImpl.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/impl/RunManageServiceImpl.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/impl/TerminalAlarmServiceImpl.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/impl/TerminalBaseServiceImpl.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/impl/TerminalMaintainServiceImpl.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/impl/TerminalTreeServiceImpl.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/service/impl/TerminalVersionServiceImpl.java create mode 100644 pqs-device/device-boot/src/main/java/com/njcn/device/utils/DeviceUtil.java create mode 100644 pqs-device/device-boot/src/main/resources/bootstrap.yml create mode 100644 pqs-device/device-boot/src/test/java/com/njcn/BaseJunitTest.java create mode 100644 pqs-device/device-boot/src/test/java/com/njcn/DeviceTest.java create mode 100644 pqs-device/pom.xml create mode 100644 pqs-energy/energy-api/pom.xml create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/api/EleAirStrategyFeignClient.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/api/EleIntegrityFeignClient.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/api/EleOnlineRateFeignClient.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/api/fallback/EleAirStrategyFallbackFactory.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/api/fallback/EleIntegrityFallbackFactory.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/api/fallback/EleOnlineRateFallbackFactory.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/constant/ApiParam.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/constant/DataType.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/constant/ModelState.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/constant/TableName.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/ACtrlDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/AccessDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/AccessParamDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/AirStrategyDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/AlmDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/AskDataDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/AskDataParamDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/CpuInfoDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/CtrlDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/DataArrayDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/DataArrayListDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/DataSetDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/DevCfgDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/DevDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/DevInfoDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/DeviceDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/DeviceOperateDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/DiDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/DiskInfoDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/DoDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/ElePublicDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/EpdPqdDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/EvtDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/EvtParam.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/LineDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/MdDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/MemInfoDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/NetAndDevByLineDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/NetDevDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/OnlineRateDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/ParamDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/PublicParamDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/RegisterDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/RegisterParamDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/SoftInfoDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/StsDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/TemplateDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/TemplateDataArrayDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/ThreadDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/TopicDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/TopicParamDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/TpListDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/UserCfgDTO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/enums/EleStatisticalSetEnum.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/enums/EnergyResponseEnum.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/enums/LoadEnum.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/param/AirStrategyParam.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/param/DataArrayParam.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/param/DataGroupParam.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/param/DataHisParam.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/param/DataModelParam.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/param/DataSetParam.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/param/DevCfgParam.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/param/DevLineQueryParam.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/param/DevVersionParam.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/param/DictParam.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/param/ElDataBindParam.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/param/EleParam.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/param/ElectComparaParam.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/param/EnergyBaseParam.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/param/GroupArrParam.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/param/HardwareParam.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/param/JobInfoParam.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/param/LineParam.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/param/LoadStatisticParam.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/param/NetDevParam.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/AirSet.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/AirStrategy.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/DataArray.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/DataGroup.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/DataMould.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/DataSet.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/DevVersion.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/EleALM.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/EleActrl.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/EleBind.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/EleCtrl.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/EleDi.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/EleDict.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/EleDo.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/EleEpdPqd.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/EleEvt.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/EleEvtParm.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/EleInformation.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/EleIntegrity.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/EleLine.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/EleLoadSet.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/EleLogs.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/EleMd.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/EleOnlineRate.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/EleParm.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/EleRateSet.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/EleStatisticalSet.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/EleSts.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/EleTopic.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/GroupArray.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/Hardware.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/LogicAccess.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/LogicDev.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/po/NetDev.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/utils/EnergyEnumUtil.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/vo/AirStrategyVO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/vo/DataGroupTemplateVO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/vo/DataHisVO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/vo/EleIntegrityVO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/vo/EleLoadSetTreeVO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/vo/EleLoadSetVO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/vo/EleMdVO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/vo/EleRateVO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/vo/EleStatisticalTreeVO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/vo/EleStatisticalVO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/vo/ElectCompareVO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/vo/EnergyDeviceTreeVO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/vo/EnergyTemplateVO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/vo/LoadStatisticVO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/vo/LoadTendencyVO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/vo/LogicDeviceLineInfoVO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/vo/NetDevInfoVO.java create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/vo/YunCaiDataVO.java create mode 100644 pqs-energy/energy-boot/Dockerfile create mode 100644 pqs-energy/energy-boot/pom.xml create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/EnergyBootApplication.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/DataArrayController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/DataGroupController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/DataSetController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/DevModelController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/DevVersionController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/EleActrlController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/EleAirStrategyController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/EleAlmController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/EleBindController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/EleCtrlController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/EleDiController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/EleDictController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/EleDoController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/EleEpdPqdController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/EleEvtController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/EleEvtParamController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/EleIntegrityController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/EleLineController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/EleLoadSetController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/EleLogsController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/EleMdController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/EleOnlineRateController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/EleParmController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/EleRateSetController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/EleStatisticalSetController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/EleStsController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/EleTopicController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/GroupArrayController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/HardwareController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/HighAnalyticController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/LogicAccess.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/LogicDeviceLineController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/ModelController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/NetDevController.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/handler/MqttMessageHandler.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/listener/RedisKeyExpirationListener.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/AirSetMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/AirStrategyMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/DataArrayMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/DataGroupMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/DataMouldMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/DataSetMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/DevVersionMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/EleActrlMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/EleAlmMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/EleBindMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/EleCtrlMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/EleDiMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/EleDictMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/EleDoMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/EleEpdMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/EleEvtMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/EleEvtParamMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/EleInformationMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/EleIntegrityMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/EleLineMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/EleLoadSetMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/EleLogsMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/EleMdMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/EleParmMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/EleRateSetMappser.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/EleStatisticalSetMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/EleStsMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/EleTopicMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/GroupArrayMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/HardwareMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/LogicAccessMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/LogicDeviceLineMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/NetDevMapper.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/mapping/DataGroupMapper.xml create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/mapping/EleBindMapper.xml create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/mapping/EleEpdPqdMapper.xml create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/mapping/EleIntergrityMapper.xml create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/mapping/EleLineMapper.xml create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/mapping/EleLoadSetMapper.xml create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/mapping/EleMdMapper.xml create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/mapping/EleRateSetMapper.xml create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/mapping/EleStatisticalSetMapper.xml create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/mapping/LogicDeviceLineMapper.xml create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/mapper/mapping/NetDevMapper.xml create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/EleAirStrategyService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/EleLoadSetService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/EleRateSetService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/EleStatisticalSetService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/HighAnalyticService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/IDataArrayService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/IDataGroupService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/IDataSetService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/IDevModelService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/IDevVersionService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/IEleActrlService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/IEleAlmService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/IEleBindService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/IEleCtrlService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/IEleDiService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/IEleDictService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/IEleDoService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/IEleEpdPqdService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/IEleEvtParamService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/IEleEvtService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/IEleInformationService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/IEleIntegrityService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/IEleLineService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/IEleLogsService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/IEleMdService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/IEleParmService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/IEleSetService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/IEleStsService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/IEleTopicService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/IGroupArrayService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/IHardwareService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/ILogicAccessService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/ILogicDeviceLineService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/IModelService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/INetDevService.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/DataArrayServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/DataGroupServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/DataSetServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/DevModelServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/DevVersionServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/ELeParmServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/EleActrlServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/EleAirSetServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/EleAirStrategyServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/EleAlmServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/EleBindServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/EleCtrlServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/EleDiServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/EleDictServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/EleDoServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/EleEpdPqdServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/EleEvtParamServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/EleEvtServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/EleInformationServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/EleIntegrityServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/EleLineServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/EleLoadSetServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/EleLogsServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/EleMdServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/EleRateSetServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/EleStatisticalSetServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/EleStsServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/EleTopicServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/GroupArrayServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/HardwareServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/HighAnalyticServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/LogicAccessServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/LogicDeviceLineServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/ModelServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/java/com/njcn/energy/service/impl/NetDevServiceImpl.java create mode 100644 pqs-energy/energy-boot/src/main/resources/bootstrap.yml create mode 100644 pqs-energy/pom.xml create mode 100644 pqs-event/event-api/pom.xml create mode 100644 pqs-event/event-api/src/main/java/com/njcn/event/api/EventDetailFeignClient.java create mode 100644 pqs-event/event-api/src/main/java/com/njcn/event/api/fallback/EventDetailFeignClientFallbackFactory.java create mode 100644 pqs-event/event-api/src/main/java/com/njcn/event/enums/EventResponseEnum.java create mode 100644 pqs-event/event-api/src/main/java/com/njcn/event/pojo/param/TransientParam.java create mode 100644 pqs-event/event-api/src/main/java/com/njcn/event/pojo/po/EventDetail.java create mode 100644 pqs-event/event-api/src/main/java/com/njcn/event/pojo/vo/AreaEventDetailVO.java create mode 100644 pqs-event/event-api/src/main/java/com/njcn/event/pojo/vo/AreaLineVO.java create mode 100644 pqs-event/event-api/src/main/java/com/njcn/event/pojo/vo/EventAssessmentVO.java create mode 100644 pqs-event/event-api/src/main/java/com/njcn/event/pojo/vo/EventAssessmentValueVO.java create mode 100644 pqs-event/event-api/src/main/java/com/njcn/event/pojo/vo/EventHeatDeatilVO.java create mode 100644 pqs-event/event-api/src/main/java/com/njcn/event/pojo/vo/EventHeatMapDetailVO.java create mode 100644 pqs-event/event-api/src/main/java/com/njcn/event/pojo/vo/EventHeatMapVO.java create mode 100644 pqs-event/event-api/src/main/java/com/njcn/event/pojo/vo/EventSeverityVO.java create mode 100644 pqs-event/event-api/src/main/java/com/njcn/event/pojo/vo/EventSeverityValueVO.java create mode 100644 pqs-event/event-api/src/main/java/com/njcn/event/pojo/vo/TransientVO.java create mode 100644 pqs-event/event-api/src/main/java/com/njcn/event/utils/EventlEnumUtil.java create mode 100644 pqs-event/event-boot/Dockerfile create mode 100644 pqs-event/event-boot/pom.xml create mode 100644 pqs-event/event-boot/src/main/java/com/njcn/event/EventBootApplication.java create mode 100644 pqs-event/event-boot/src/main/java/com/njcn/event/controller/AreaController.java create mode 100644 pqs-event/event-boot/src/main/java/com/njcn/event/controller/EventDetailController.java create mode 100644 pqs-event/event-boot/src/main/java/com/njcn/event/controller/TransientController.java create mode 100644 pqs-event/event-boot/src/main/java/com/njcn/event/mapper/EventDetailMapper.java create mode 100644 pqs-event/event-boot/src/main/java/com/njcn/event/mapper/TransientMapper.java create mode 100644 pqs-event/event-boot/src/main/java/com/njcn/event/mapper/mapping/TransientMapper.xml create mode 100644 pqs-event/event-boot/src/main/java/com/njcn/event/service/AreaLineService.java create mode 100644 pqs-event/event-boot/src/main/java/com/njcn/event/service/EventDetailService.java create mode 100644 pqs-event/event-boot/src/main/java/com/njcn/event/service/Impl/AreaLineServiceImpl.java create mode 100644 pqs-event/event-boot/src/main/java/com/njcn/event/service/Impl/EventDetailServiceImpl.java create mode 100644 pqs-event/event-boot/src/main/java/com/njcn/event/service/Impl/TransientServiceImpl.java create mode 100644 pqs-event/event-boot/src/main/java/com/njcn/event/service/TransientService.java create mode 100644 pqs-event/event-boot/src/main/resources/bootstrap.yml create mode 100644 pqs-event/pom.xml create mode 100644 pqs-gateway/Dockerfile create mode 100644 pqs-gateway/pom.xml create mode 100644 pqs-gateway/src/main/java/com/njcn/gateway/GatewayMain.java create mode 100644 pqs-gateway/src/main/java/com/njcn/gateway/config/ResourceServerConfig.java create mode 100644 pqs-gateway/src/main/java/com/njcn/gateway/config/SwaggerResourceConfig.java create mode 100644 pqs-gateway/src/main/java/com/njcn/gateway/config/WhiteListConfig.java create mode 100644 pqs-gateway/src/main/java/com/njcn/gateway/enums/GateWayEnum.java create mode 100644 pqs-gateway/src/main/java/com/njcn/gateway/filter/AuthGlobalFilter.java create mode 100644 pqs-gateway/src/main/java/com/njcn/gateway/filter/SwaggerHeaderFilter.java create mode 100644 pqs-gateway/src/main/java/com/njcn/gateway/handler/SwaggerHandler.java create mode 100644 pqs-gateway/src/main/java/com/njcn/gateway/security/AuthorizationManager.java create mode 100644 pqs-gateway/src/main/java/com/njcn/gateway/utils/GatePubUtils.java create mode 100644 pqs-gateway/src/main/java/com/njcn/gateway/utils/IpUtils.java create mode 100644 pqs-gateway/src/main/java/com/njcn/gateway/utils/ResponseUtils.java create mode 100644 pqs-gateway/src/main/resources/bootstrap.yml create mode 100644 pqs-gateway/src/main/resources/public.key create mode 100644 pqs-harmonic/harmonic-api/pom.xml create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/constant/HarmonicValidMessage.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/constant/Param.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/enums/HarmonicResponseEnum.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/dto/AreaDTO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/dto/ComAssessDTO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/dto/PublicDTO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/dto/SteadyQualifyDTO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/dto/excel/area/AreaExcel.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/dto/excel/area/OverData.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/param/HarmInHarmParam.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/param/HarmonicPublicParam.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/param/HistoryHarmOverLimitParam.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/param/HistoryParam.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/param/NormHistoryParam.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/param/OnlineRateCensusParam.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/param/OnlineRateParam.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/param/PulicTimeParam.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/param/PulicTimeStatisParam.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/param/THDistortionParam.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/param/TerminalParam.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/EventDetail.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/LimitRate.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/LimitRatePO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/LimitTarget.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/PQSComAssesPO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/AssesVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/ComAssessVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/CommunicateStatisticsVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/EventDetailVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/HarmInHarmVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/HarmonicDeptVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/HarmonicLineVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/HarmonicSubstationVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/HarmonicVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/HistoryDataResultVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/HistoryHarmOverLimitVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/IntegrityCensusVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/IntegrityIconVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/IntegrityVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/LoadTypeVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/MonitorOverLimitVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/OnlineRateCensusVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/OnlineRateVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/OverAreaLimitVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/OverAreaVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/PollutionVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/QueryResultLimitVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/SteadyExceedRateCensusVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/SteadyExceedRateVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/SteadyInfoData.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/SteadyQualifyCensusVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/SteadyQualifyVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/THDistortionCensusVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/THDistortionVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/TerminalCensusVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/TerminalVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/TransientVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/WarningSubstationVO.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/utils/FloatUtils.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/utils/HarmonicComAssesUtil.java create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/utils/HarmonicEnumUtil.java create mode 100644 pqs-harmonic/harmonic-boot/Dockerfile create mode 100644 pqs-harmonic/harmonic-boot/pom.xml create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/HarmonicBootApplication.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/AnalyzeController.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/AssesController.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/ComAssessController.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/CommunicateController.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/HarmInHarmController.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/HarmonicController.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/HistoryResultController.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/IntegrityController.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/NormLimitController.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/OnlineRateDataController.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/PollutionController.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/SteadyDataController.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/SteadyExceedRateController.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/SteadyQualifyController.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/THDController.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/TerminalController.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/HarmonicMapper.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/IntegrityMapper.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/OnlineRateDataMapper.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/PollutionMapper.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/SteadyExceedRateMapper.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/SteadyQualifyMapper.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/THDistortionMapper.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/TerminalDataMapper.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/mapping/HarmonicMapper.xml create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/mapping/IntegrityMapper.xml create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/mapping/OnlineRateDataMapper.xml create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/mapping/PollutionMapper.xml create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/mapping/SteadyExceedRateMapper.xml create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/mapping/SteadyQualifyMapper.xml create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/mapping/THDistortionMapper.xml create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/mapping/TerminalDataMapper.xml create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/AssesService.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/ComAssessService.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/CommunicateService.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/HarmInHarmService.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/HistoryResultService.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/IAnalyzeService.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/IHarmonicService.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/IPollutionService.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/IntegrityService.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/NormLimitService.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/OnlineRateDataService.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/SteadyDataService.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/SteadyExceedRateService.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/SteadyQualifyService.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/THDistortionService.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/TerminalService.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/AnalyzeServiceImpl.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/AssesServiceImpl.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/ComAssessServiceImpl.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/CommunicateServiceImpl.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/HarmInHarmServiceImpl.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/HarmonicServiceImpl.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/HistoryResultServiceImpl.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/IntegrityServiceImpl.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/NormLimitServiceImpl.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/OnlineRateDataServiceImpl.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/PollutionServiceImpl.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/SteadyDataServiceImpl.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/SteadyExceedRateServiceImpl.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/SteadyQualifyServiceImpl.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/THDistortionServiceImpl.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/TerminalServiceImpl.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/resources/bootstrap.yml create mode 100644 pqs-harmonic/pom.xml create mode 100644 pqs-job/job-admin/Dockerfile create mode 100644 pqs-job/job-admin/pom.xml create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/JobAdminApplication.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/controller/IndexController.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/controller/JobApiController.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/controller/JobCodeController.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/controller/JobGroupController.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/controller/JobInfoController.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/controller/JobLogController.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/controller/UserController.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/controller/annotation/PermissionLimit.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/controller/interceptor/CookieInterceptor.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/controller/interceptor/PermissionInterceptor.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/controller/interceptor/WebMvcConfig.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/controller/resolver/WebExceptionResolver.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/alarm/JobAlarm.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/alarm/JobAlarmer.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/alarm/impl/EmailJobAlarm.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/complete/XxlJobCompleter.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/conf/XxlJobAdminConfig.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/cron/CronExpression.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/exception/XxlJobException.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/old/RemoteHttpJobBean.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/old/XxlJobDynamicScheduler.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/old/XxlJobThreadPool.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/route/ExecutorRouteStrategyEnum.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/route/ExecutorRouter.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/route/strategy/ExecutorRouteBusyover.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/route/strategy/ExecutorRouteConsistentHash.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/route/strategy/ExecutorRouteFailover.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/route/strategy/ExecutorRouteFirst.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/route/strategy/ExecutorRouteLFU.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/route/strategy/ExecutorRouteLRU.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/route/strategy/ExecutorRouteLast.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/route/strategy/ExecutorRouteRandom.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/route/strategy/ExecutorRouteRound.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/scheduler/MisfireStrategyEnum.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/scheduler/ScheduleTypeEnum.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/scheduler/XxlJobScheduler.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/thread/JobCompleteHelper.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/thread/JobFailMonitorHelper.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/thread/JobLogReportHelper.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/thread/JobRegistryHelper.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/thread/JobScheduleHelper.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/thread/JobTriggerPoolHelper.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/trigger/TriggerTypeEnum.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/trigger/XxlJobTrigger.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/util/CookieUtil.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/util/FtlUtil.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/util/I18nUtil.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/util/JacksonUtil.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/core/util/LocalCacheUtil.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/dao/XxlJobGroupDao.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/dao/XxlJobInfoDao.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/dao/XxlJobLogDao.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/dao/XxlJobLogGlueDao.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/dao/XxlJobLogReportDao.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/dao/XxlJobRegistryDao.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/dao/XxlJobUserDao.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/service/LoginService.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/service/XxlJobService.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/service/impl/AdminBizImpl.java create mode 100644 pqs-job/job-admin/src/main/java/com/njcn/job/admin/service/impl/XxlJobServiceImpl.java create mode 100644 pqs-job/job-admin/src/main/resources/bootstrap.yml create mode 100644 pqs-job/job-admin/src/main/resources/i18n/message_en.properties create mode 100644 pqs-job/job-admin/src/main/resources/i18n/message_zh_CN.properties create mode 100644 pqs-job/job-admin/src/main/resources/i18n/message_zh_TC.properties create mode 100644 pqs-job/job-admin/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml create mode 100644 pqs-job/job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml create mode 100644 pqs-job/job-admin/src/main/resources/mybatis-mapper/XxlJobLogGlueMapper.xml create mode 100644 pqs-job/job-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml create mode 100644 pqs-job/job-admin/src/main/resources/mybatis-mapper/XxlJobLogReportMapper.xml create mode 100644 pqs-job/job-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml create mode 100644 pqs-job/job-admin/src/main/resources/mybatis-mapper/XxlJobUserMapper.xml create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/Ionicons/css/ionicons.min.css create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.eot create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.svg create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.ttf create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.woff create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/PACE/pace.min.js create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/PACE/themes/blue/pace-theme-flash.css create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/bootstrap-daterangepicker/daterangepicker.css create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/bootstrap-daterangepicker/daterangepicker.js create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/bootstrap/css/bootstrap.min.css create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/bootstrap/css/bootstrap.min.css.map create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.svg create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff2 create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/bootstrap/js/bootstrap.min.js create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/datatables.net/js/jquery.dataTables.min.js create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/fastclick/fastclick.js create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/font-awesome/css/font-awesome.css.map create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/font-awesome/css/font-awesome.min.css create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/FontAwesome.otf create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.eot create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.svg create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.ttf create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.woff create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.woff2 create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/jquery-slimscroll/jquery.slimscroll.min.js create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/jquery/jquery.min.js create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/bower_components/moment/moment.min.js create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/plugins/iCheck/icheck.min.js create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue.css create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue.png create mode 100644 pqs-job/job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue@2x.png create mode 100644 pqs-job/job-admin/src/main/resources/static/favicon.ico create mode 100644 pqs-job/job-admin/src/main/resources/static/js/common.1.js create mode 100644 pqs-job/job-admin/src/main/resources/static/js/index.js create mode 100644 pqs-job/job-admin/src/main/resources/static/js/jobcode.index.1.js create mode 100644 pqs-job/job-admin/src/main/resources/static/js/jobgroup.index.1.js create mode 100644 pqs-job/job-admin/src/main/resources/static/js/jobinfo.index.1.js create mode 100644 pqs-job/job-admin/src/main/resources/static/js/joblog.detail.1.js create mode 100644 pqs-job/job-admin/src/main/resources/static/js/joblog.index.1.js create mode 100644 pqs-job/job-admin/src/main/resources/static/js/login.1.js create mode 100644 pqs-job/job-admin/src/main/resources/static/js/user.index.1.js create mode 100644 pqs-job/job-admin/src/main/resources/static/plugins/codemirror/addon/hint/anyword-hint.js create mode 100644 pqs-job/job-admin/src/main/resources/static/plugins/codemirror/addon/hint/show-hint.css create mode 100644 pqs-job/job-admin/src/main/resources/static/plugins/codemirror/addon/hint/show-hint.js create mode 100644 pqs-job/job-admin/src/main/resources/static/plugins/codemirror/lib/codemirror.css create mode 100644 pqs-job/job-admin/src/main/resources/static/plugins/codemirror/lib/codemirror.js create mode 100644 pqs-job/job-admin/src/main/resources/static/plugins/codemirror/mode/clike/clike.js create mode 100644 pqs-job/job-admin/src/main/resources/static/plugins/codemirror/mode/javascript/javascript.js create mode 100644 pqs-job/job-admin/src/main/resources/static/plugins/codemirror/mode/php/php.js create mode 100644 pqs-job/job-admin/src/main/resources/static/plugins/codemirror/mode/powershell/powershell.js create mode 100644 pqs-job/job-admin/src/main/resources/static/plugins/codemirror/mode/python/python.js create mode 100644 pqs-job/job-admin/src/main/resources/static/plugins/codemirror/mode/shell/shell.js create mode 100644 pqs-job/job-admin/src/main/resources/static/plugins/cronGen/cronGen.js create mode 100644 pqs-job/job-admin/src/main/resources/static/plugins/cronGen/cronGen_en.js create mode 100644 pqs-job/job-admin/src/main/resources/static/plugins/echarts/echarts.common.min.js create mode 100644 pqs-job/job-admin/src/main/resources/static/plugins/jquery/jquery.cookie.js create mode 100644 pqs-job/job-admin/src/main/resources/static/plugins/jquery/jquery.validate.min.js create mode 100644 pqs-job/job-admin/src/main/resources/static/plugins/layer/layer.js create mode 100644 pqs-job/job-admin/src/main/resources/static/plugins/layer/theme/default/icon-ext.png create mode 100644 pqs-job/job-admin/src/main/resources/static/plugins/layer/theme/default/icon.png create mode 100644 pqs-job/job-admin/src/main/resources/static/plugins/layer/theme/default/layer.css create mode 100644 pqs-job/job-admin/src/main/resources/static/plugins/layer/theme/default/loading-0.gif create mode 100644 pqs-job/job-admin/src/main/resources/static/plugins/layer/theme/default/loading-1.gif create mode 100644 pqs-job/job-admin/src/main/resources/static/plugins/layer/theme/default/loading-2.gif create mode 100644 pqs-job/job-admin/src/main/resources/templates/common/common.exception.ftl create mode 100644 pqs-job/job-admin/src/main/resources/templates/common/common.macro.ftl create mode 100644 pqs-job/job-admin/src/main/resources/templates/help.ftl create mode 100644 pqs-job/job-admin/src/main/resources/templates/index.ftl create mode 100644 pqs-job/job-admin/src/main/resources/templates/jobcode/jobcode.index.ftl create mode 100644 pqs-job/job-admin/src/main/resources/templates/jobgroup/jobgroup.index.ftl create mode 100644 pqs-job/job-admin/src/main/resources/templates/jobinfo/jobinfo.index.ftl create mode 100644 pqs-job/job-admin/src/main/resources/templates/joblog/joblog.detail.ftl create mode 100644 pqs-job/job-admin/src/main/resources/templates/joblog/joblog.index.ftl create mode 100644 pqs-job/job-admin/src/main/resources/templates/login.ftl create mode 100644 pqs-job/job-admin/src/main/resources/templates/user/user.index.ftl create mode 100644 pqs-job/job-api/pom.xml create mode 100644 pqs-job/job-api/src/main/java/com/njcn/job/api/JobFeignClient.java create mode 100644 pqs-job/job-api/src/main/java/com/njcn/job/api/fallback/JobFeignClientFallbackFactory.java create mode 100644 pqs-job/job-api/src/main/java/com/njcn/job/model/XxlJobGroup.java create mode 100644 pqs-job/job-api/src/main/java/com/njcn/job/model/XxlJobInfo.java create mode 100644 pqs-job/job-api/src/main/java/com/njcn/job/model/XxlJobLog.java create mode 100644 pqs-job/job-api/src/main/java/com/njcn/job/model/XxlJobLogGlue.java create mode 100644 pqs-job/job-api/src/main/java/com/njcn/job/model/XxlJobLogReport.java create mode 100644 pqs-job/job-api/src/main/java/com/njcn/job/model/XxlJobRegistry.java create mode 100644 pqs-job/job-api/src/main/java/com/njcn/job/model/XxlJobUser.java create mode 100644 pqs-job/job-executor/Dockerfile create mode 100644 pqs-job/job-executor/pom.xml create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/JobExecutorApplication.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/config/XxlJobConfig.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/handler/AirStrategyJob.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/handler/DayJob.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/handler/EleIntegrityJob.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/handler/EleOnlineRateJob.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/handler/ElectricCalJob.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/handler/LimitRateJob.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/handler/LimitTargetJob.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/handler/PollutionJob.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/handler/TestJob.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/dto/HarmonicDTO.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/dto/PollutionDTO.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataFlicker.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataFluc.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataHarmPhasicI.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataHarmPhasicV.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataHarmPowerP.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataHarmPowerQ.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataHarmPowerS.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataHarmRateI.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataHarmRateV.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataI.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataInHarmI.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataInHarmRateI.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataInHarmRateV.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataInHarmV.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataPlt.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataV.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DayHarmrateV.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DayI.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DayInharmV.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DayPlt.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DayV.java create mode 100644 pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/LimitRate.java create mode 100644 pqs-job/job-executor/src/main/resources/bootstrap.yml create mode 100644 pqs-job/pom.xml create mode 100644 pqs-system/pom.xml create mode 100644 pqs-system/system-api/pom.xml create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/api/AreaFeignClient.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/api/ConfigFeignClient.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/api/DicDataFeignClient.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/api/ThemeFeignClient.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/api/fallback/AreaFeignClientFallbackFactory.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/api/fallback/ConfigFeignClientFallbackFactory.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/api/fallback/DicDataFeignClientFallbackFactory.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/api/fallback/ThemeFeignClientFallbackFactory.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/enums/AreaEnum.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataEnum.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataTypeEnum.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/enums/SystemResponseEnum.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/enums/ThemeEnum.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/pojo/constant/SystemType.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/pojo/constant/ThemeState.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/pojo/dto/AreaTreeDTO.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/pojo/enums/StatisticsEnum.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/pojo/param/AreaParam.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/pojo/param/DictDataParam.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/pojo/param/DictTypeParam.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/pojo/param/MxGraphParam.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/pojo/param/ThemeParam.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/Area.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/Config.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/DictData.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/DictType.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/MxGraph.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/Resource.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/Task.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/Theme.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/pojo/vo/AreaTreeVO.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/pojo/vo/DictDataCache.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/pojo/vo/DictDataVO.java create mode 100644 pqs-system/system-api/src/main/java/com/njcn/system/utils/SystemEnumUtil.java create mode 100644 pqs-system/system-boot/Dockerfile create mode 100644 pqs-system/system-boot/pom.xml create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/SystemBootMain.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/controller/AreaController.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/controller/ConfigController.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/controller/DictDataController.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/controller/DictTypeController.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/controller/MxGraphController.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/controller/ResourceController.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/controller/TaskController.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/controller/ThemeController.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/mapper/AreaMapper.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/mapper/ConfigMapper.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/mapper/DictDataMapper.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/mapper/DictTypeMapper.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/mapper/MxGraphMapper.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/mapper/ResourceMapper.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/mapper/TaskMapper.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/mapper/ThemeMapper.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/AreaMapper.xml create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/ConfigMapper.xml create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/DictDataMapper.xml create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/DictTypeMapper.xml create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/ResourceMapper.xml create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/TaskMapper.xml create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/ThemeMapper.xml create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/service/IAreaService.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/service/IConfigService.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/service/IDictDataService.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/service/IDictTypeService.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/service/IMxGraphService.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/service/IResourceService.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/service/ITaskService.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/service/IThemeService.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/AreaServiceImpl.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/ConfigServiceImpl.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/DictDataServiceImpl.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/DictTypeServiceImpl.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/MxGraphServiceImpl.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/ResourceServiceImpl.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/TaskServiceImpl.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/ThemeServiceImpl.java create mode 100644 pqs-system/system-boot/src/main/resources/bootstrap.yml create mode 100644 pqs-system/system-boot/src/test/java/com/njcn/BaseJunitTest.java create mode 100644 pqs-system/system-boot/src/test/java/com/njcn/DictDataTest.java create mode 100644 pqs-user/pom.xml create mode 100644 pqs-user/user-api/pom.xml create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/api/AuthClientFeignClient.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/api/DeptFeignClient.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/api/UserFeignClient.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/api/fallback/AuthClientFeignClientFallbackFactory.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/api/fallback/DeptFeignClientFallbackFactory.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/api/fallback/UserFeignClientFallbackFactory.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/enums/UserResponseEnum.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/enums/UserStatusEnum.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/ComponentState.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/DeptState.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/DeptType.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/FunctionState.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/HomePageState.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/RoleType.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/UserDefaultPassword.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/UserState.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/UserType.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/UserValidMessage.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/dto/ComponentDTO.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/dto/DeptDTO.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/dto/UserDTO.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/dto/excel/UserExcel.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/ComponentParam.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/DeptParam.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/FunctionParam.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/HomePageParam.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/RoleParam.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/UserParam.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/UserPasswordParam.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/AuthClient.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/Component.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/Dept.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/Function.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/HomePage.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/Role.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/RoleComponent.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/RoleFunction.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/User.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/UserRole.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/UserSet.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/UserStrategy.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/ComponentVO.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/DeptAllTreeVO.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/DeptTreeVO.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/DeptVO.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/FunctionVO.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/RoleVO.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/UserVO.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/utils/UserEnumUtil.java create mode 100644 pqs-user/user-boot/Dockerfile create mode 100644 pqs-user/user-boot/pom.xml create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/UserBootApplication.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/controller/AuthClientController.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/controller/ComponentController.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/controller/DeptController.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/controller/FunctionController.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/controller/HomePageController.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/controller/RoleComponentController.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/controller/RoleController.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/controller/RoleFunctionController.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/controller/UserController.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/controller/UserRoleController.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/controller/UserSetController.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/controller/UserStrategyController.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/init/InitPermissionRoles.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/mapper/AuthClientMapper.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/mapper/ComponentMapper.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/mapper/DeptMapper.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/mapper/FunctionMapper.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/mapper/HomePageMapper.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/mapper/RoleComponentMapper.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/mapper/RoleFunctionMapper.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/mapper/RoleMapper.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/mapper/UserMapper.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/mapper/UserRoleMapper.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/mapper/UserSetMapper.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/mapper/UserStrategyMapper.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/AuthClientMapper.xml create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/ComponentMapper.xml create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/DeptMapper.xml create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/FunctionMapper.xml create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/HomePageMapper.xml create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/RoleComponentMapper.xml create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/RoleFunctionMapper.xml create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/RoleMapper.xml create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/UserMapper.xml create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/UserRoleMapper.xml create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/UserSetMapper.xml create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/UserStrategyMapper.xml create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/service/IAuthClientService.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/service/IComponentService.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/service/IDeptService.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/service/IFunctionService.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/service/IHomePageService.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/service/IRoleComponentService.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/service/IRoleFunctionService.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/service/IRoleService.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/service/IUserRoleService.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/service/IUserService.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/service/IUserSetService.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/service/IUserStrategyService.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/AuthClientServiceImpl.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/ComponentServiceImpl.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/DeptServiceImpl.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/FunctionServiceImpl.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/HomePageServiceImpl.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/RoleComponentServiceImpl.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/RoleFunctionServiceImpl.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/RoleServiceImpl.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/UserRoleServiceImpl.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/UserServiceImpl.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/UserSetServiceImpl.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/UserStrategyServiceImpl.java create mode 100644 pqs-user/user-boot/src/main/resources/bootstrap.yml create mode 100644 pqs-user/user-boot/src/test/java/com/njcn/BaseJunitTest.java create mode 100644 pqs-user/user-boot/src/test/java/com/njcn/UserTest.java create mode 100644 pqs.ipr create mode 100644 pqs.iws diff --git a/pom.xml b/pom.xml new file mode 100644 index 000000000..13ebc2b07 --- /dev/null +++ b/pom.xml @@ -0,0 +1,340 @@ + + + 4.0.0 + + + com.njcn + pqs + 1.0.0 + + pqs-common + pqs-gateway + pqs-user + pqs-auth + pqs-system + pqs-harmonic + pqs-device + pqs-energy + pqs-event + pqs-job + pqs-job/job-api + + pom + 灿能微服务生态系统 + + + nexus-releases + Nexus Release Repository + http://192.168.1.13:8001/nexus/content/repositories/releases/ + + + nexus-snapshots + Nexus Snapshot Repository + http://192.168.1.13:8001/nexus/content/repositories/snapshots/ + + + + + 192.168.1.13:18854 + + + + fd74182b-1fce-4dba-afa7-2623b0376205 + + 192.168.1.14:8080 + + 192.168.1.13 + + 192.168.1.13:10215 + + http://${server.url}:2375 + + ${server.url}:8090 + + njcn + site + 1.8 + 8 + 8 + + 2.3.12.RELEASE + Hoxton.SR12 + 2.2.7.RELEASE + 5.7.9 + 3.0.2 + 2.0.8 + 1.18.18 + 2.1.3 + 1.2.5 + 8.0.19 + 3.4.2 + 3.5.1 + 2.3 + 0.9.1 + 11.2 + 1.6.4 + 2.3.2 + 1.68 + 3.12.0 + 2.8.0 + 1.15 + 1.8.1 + 2.12.4 + 2.2.6 + 2.18 + 3.0.0.6 + 2.8.9 + 2.3.0 + 1.2.7 + 4.4.0 + + + + + + + org.springframework.boot + spring-boot-dependencies + ${springboot.version} + pom + import + + + org.springframework.cloud + spring-cloud-dependencies + ${springcloud.version} + pom + import + + + com.alibaba.cloud + spring-cloud-alibaba-dependencies + ${springcloud.alibaba.version} + pom + import + + + + + cn.hutool + hutool-all + ${hutool.version} + + + + org.projectlombok + lombok + ${lombok.version} + + + + com.github.xiaoymin + knife4j-spring-boot-starter + ${knife4j.version} + + + com.github.xiaoymin + knife4j-spring-ui + ${knife4j.version} + + + com.github.xiaoymin + knife4j-aggregation-spring-boot-starter + + ${knife4j.aggregation.version} + + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + ${mybatis.version} + + + + com.alibaba + druid-spring-boot-starter + ${druid.version} + + + + mysql + mysql-connector-java + ${mysql.version} + + + + org.mariadb.jdbc + mariadb-java-client + ${mariadb.version} + + + + com.oracle.database.jdbc + ojdbc8 + ${oracle.version} + + + + com.oracle.database.nls + orai18n + 21.1.0.0 + + + + com.baomidou + mybatis-plus-boot-starter + ${mybatis-plus.version} + + + com.baomidou + mybatis-plus-generator + ${mybatis-plus-generator.version} + + + org.apache.velocity + velocity-engine-core + ${velocity.version} + + + + + io.jsonwebtoken + jjwt + ${jjwt.version} + + + + io.github.openfeign + feign-okhttp + ${feignOkhttp.version} + + + + org.owasp.antisamy + antisamy + ${antisamy.version} + + + + com.github.penggle + kaptcha + ${kaptcha.version} + + + + org.bouncycastle + bcprov-jdk15on + ${bcprov-jdk15on.version} + + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + commons-io + commons-io + ${commons-io.version} + + + commons-codec + commons-codec + ${commons-codec.version} + + + com.alibaba.csp + sentinel-datasource-nacos + ${sentinel.datasource.nacos.version} + + + + com.fasterxml.jackson.core + jackson-databind + ${jackson} + + + + com.fasterxml.jackson.core + jackson-core + ${jackson} + + + com.fasterxml.jackson.core + jackson-annotations + ${jackson} + + + com.alibaba + easyexcel + ${easyexcel} + + + com.github.abel533 + ECharts + ${echarts.version} + + + + com.google.code.gson + gson + ${gson.version} + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + + com.github.tocrhz + mqtt-spring-boot-starter + ${mqtt.version} + + + cn.afterturn + easypoi-spring-boot-starter + ${easypoi.version} + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + 2.2.2.RELEASE + + true + true + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + 1.8 + 1.8 + + + + + + src/main/resources + true + + + src/main/java + + **/*.xml + + + + + diff --git a/pqs-auth/Dockerfile b/pqs-auth/Dockerfile new file mode 100644 index 000000000..c813b0a62 --- /dev/null +++ b/pqs-auth/Dockerfile @@ -0,0 +1,7 @@ +FROM openjdk:8-jdk-alpine +RUN set -xe \&& apk --no-cache add ttf-dejavu fontconfig +ADD target/auth.jar auth.jar +ENTRYPOINT ["java","-jar","/auth.jar"] +EXPOSE 10214 +RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone + diff --git a/pqs-auth/pom.xml b/pqs-auth/pom.xml new file mode 100644 index 000000000..78b6e2a15 --- /dev/null +++ b/pqs-auth/pom.xml @@ -0,0 +1,136 @@ + + + + pqs + com.njcn + 1.0.0 + + 4.0.0 + pqs-auth + 认证授权服务模块 + + + 8 + 8 + + + + + com.njcn + common-web + ${project.version} + + + com.njcn + common-swagger + ${project.version} + + + com.njcn + common-microservice + ${project.version} + + + com.njcn + common-db + ${project.version} + + + com.njcn + common-redis + ${project.version} + + + com.njcn + user-api + ${project.version} + + + + org.springframework.security.oauth.boot + spring-security-oauth2-autoconfigure + + + org.springframework.security + spring-security-oauth2-jose + + + + com.github.penggle + kaptcha + + + + + auth + + + org.springframework.boot + spring-boot-maven-plugin + + + package + + repackage + + + + + + org.apache.maven.plugins + maven-resources-plugin + + + + jks + + + + + + com.spotify + docker-maven-plugin + 1.0.0 + + + + build-image + ${docker.operate} + + build + + + + + + http://${docker.repostory} + + ${docker.repostory}/${docker.registry.name}/${project.artifactId} + + + latest + + + ${docker.url} + ${basedir}/ + + + + /ROOT + + ${project.build.directory} + + ${project.build.finalName}.jar + + + + + + + + + + + \ No newline at end of file diff --git a/pqs-auth/src/main/java/com/njcn/auth/AuthApplication.java b/pqs-auth/src/main/java/com/njcn/auth/AuthApplication.java new file mode 100644 index 000000000..16892b47f --- /dev/null +++ b/pqs-auth/src/main/java/com/njcn/auth/AuthApplication.java @@ -0,0 +1,24 @@ +package com.njcn.auth; + +import lombok.extern.slf4j.Slf4j; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年12月14日 20:33 + */ +@Slf4j +@MapperScan("com.njcn.**.mapper") +@EnableFeignClients(basePackages = "com.njcn") +@SpringBootApplication(scanBasePackages = "com.njcn") +public class AuthApplication { + + public static void main(String[] args) { + SpringApplication.run(AuthApplication.class,args); + } + +} diff --git a/pqs-auth/src/main/java/com/njcn/auth/config/AuthorizationServerConfig.java b/pqs-auth/src/main/java/com/njcn/auth/config/AuthorizationServerConfig.java new file mode 100644 index 000000000..3e69c8402 --- /dev/null +++ b/pqs-auth/src/main/java/com/njcn/auth/config/AuthorizationServerConfig.java @@ -0,0 +1,229 @@ +package com.njcn.auth.config; + + +import cn.hutool.core.util.StrUtil; +import com.njcn.auth.filter.CustomClientCredentialsTokenEndpointFilter; +import com.njcn.auth.pojo.bo.BusinessUser; +import com.njcn.auth.security.clientdetails.ClientDetailsServiceImpl; +import com.njcn.auth.security.extension.captcha.CaptchaTokenGranter; +import com.njcn.auth.security.extension.refresh.PreAuthenticatedUserDetailsService; +import com.njcn.auth.service.UserDetailsServiceImpl; +import com.njcn.common.pojo.constant.SecurityConstants; +import com.njcn.common.pojo.enums.auth.ClientEnum; +import com.njcn.redis.utils.RedisUtil; +import com.njcn.user.enums.UserResponseEnum; +import com.njcn.web.utils.WebUtil; +import lombok.AllArgsConstructor; +import lombok.SneakyThrows; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.ClassPathResource; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.ProviderManager; +import org.springframework.security.authentication.dao.DaoAuthenticationProvider; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken; +import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer; +import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter; +import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer; +import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer; +import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer; +import org.springframework.security.oauth2.provider.CompositeTokenGranter; +import org.springframework.security.oauth2.provider.TokenGranter; +import org.springframework.security.oauth2.provider.token.DefaultTokenServices; +import org.springframework.security.oauth2.provider.token.TokenEnhancer; +import org.springframework.security.oauth2.provider.token.TokenEnhancerChain; +import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter; +import org.springframework.security.oauth2.provider.token.store.KeyStoreKeyFactory; +import org.springframework.security.web.AuthenticationEntryPoint; +import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider; + +import java.security.KeyPair; +import java.util.*; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年05月11日 13:16 + */ +@Configuration +@AllArgsConstructor +@EnableAuthorizationServer +public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter { + + private final AuthenticationManager authenticationManager; + + private final ClientDetailsServiceImpl clientDetailsService; + + private final UserDetailsServiceImpl userDetailsService; + + private final PasswordEncoder passwordEncoder; + + private final RedisUtil redisUtil; + + + /** + * 客户端信息配置 + */ + @Override + @SneakyThrows + public void configure(ClientDetailsServiceConfigurer clients) { + clients.withClientDetails(clientDetailsService); + } + + /** + * 配置授权(authorization)以及令牌(token)的访问端点和令牌服务(token services) + */ + @Override + public void configure(AuthorizationServerEndpointsConfigurer endpoints) { + TokenEnhancerChain tokenEnhancerChain = new TokenEnhancerChain(); + List tokenEnhancers = new ArrayList<>(); + tokenEnhancers.add(tokenEnhancer()); + tokenEnhancers.add(jwtAccessTokenConverter()); + tokenEnhancerChain.setTokenEnhancers(tokenEnhancers); + // 获取原有默认授权模式(授权码模式、密码模式、客户端模式、简化模式)的授权者 + List granterList = new ArrayList<>(Arrays.asList(endpoints.getTokenGranter())); + + // 添加验证码授权模式授权者 + granterList.add(new CaptchaTokenGranter(endpoints.getTokenServices(), endpoints.getClientDetailsService(), + endpoints.getOAuth2RequestFactory(), authenticationManager, redisUtil + )); + + //todo... 后续可以扩展更多授权模式,比如:微信小程序、移动app + + + CompositeTokenGranter compositeTokenGranter = new CompositeTokenGranter(granterList); + endpoints.authenticationManager(authenticationManager) + .accessTokenConverter(jwtAccessTokenConverter()) + //设置grant_type类型集合 + .tokenEnhancer(tokenEnhancerChain) + .tokenGranter(compositeTokenGranter) + /**refresh_token有两种使用方式:重复使用(true)、非重复使用(false),默认为true + *1.重复使用:access_token过期刷新时, refresh token过期时间未改变,仍以初次生成的时间为准 + *2.非重复使用:access_token过期刷新时, refresh_token过期时间延续,在refresh_token有效期内刷新而无需失效再次登录 + */ + .reuseRefreshTokens(true) + .tokenServices(tokenServices(endpoints)); + } + + + + public DefaultTokenServices tokenServices(AuthorizationServerEndpointsConfigurer endpoints) { + TokenEnhancerChain tokenEnhancerChain = new TokenEnhancerChain(); + List tokenEnhancers = new ArrayList<>(); + tokenEnhancers.add(tokenEnhancer()); + tokenEnhancers.add(jwtAccessTokenConverter()); + tokenEnhancerChain.setTokenEnhancers(tokenEnhancers); + + DefaultTokenServices tokenServices = new DefaultTokenServices(); + tokenServices.setTokenStore(endpoints.getTokenStore()); + tokenServices.setSupportRefreshToken(true); + tokenServices.setClientDetailsService(clientDetailsService); + tokenServices.setTokenEnhancer(tokenEnhancerChain); + + // 多用户体系下,刷新token再次认证客户端ID和 UserDetailService 的映射Map + Map clientUserDetailsServiceMap = new HashMap<>(); + + // 系统管理客户端 + clientUserDetailsServiceMap.put(ClientEnum.WEB_CLIENT.getClientId(), userDetailsService); + clientUserDetailsServiceMap.put(ClientEnum.WEB_CLIENT_TEST.getClientId(), userDetailsService); + clientUserDetailsServiceMap.put(ClientEnum.APP_CLIENT.getClientId(), userDetailsService); + clientUserDetailsServiceMap.put(ClientEnum.SCREEN_CLIENT.getClientId(), userDetailsService); + clientUserDetailsServiceMap.put(ClientEnum.WE_CHAT_APP_CLIENT.getClientId(), userDetailsService); + + //todo .. 后面扩展微信小程序、app实现服务 + // 刷新token模式下,重写预认证提供者替换其AuthenticationManager,可自定义根据客户端ID和认证方式区分用户体系获取认证用户信息 + PreAuthenticatedAuthenticationProvider provider = new PreAuthenticatedAuthenticationProvider(); + provider.setPreAuthenticatedUserDetailsService(new PreAuthenticatedUserDetailsService<>(clientUserDetailsServiceMap)); + tokenServices.setAuthenticationManager(new ProviderManager(Collections.singletonList(provider))); + return tokenServices; + + } + + /** + * 使用非对称加密算法对token签名 + */ + @Bean + public JwtAccessTokenConverter jwtAccessTokenConverter() { + JwtAccessTokenConverter converter = new JwtAccessTokenConverter(); + converter.setKeyPair(keyPair()); + return converter; + } + + /** + * 从classpath下的密钥库中获取密钥对(公钥+私钥) + */ + @Bean + public KeyPair keyPair() { + KeyStoreKeyFactory factory = new KeyStoreKeyFactory(new ClassPathResource("njcn.jks"), "njcnpqs".toCharArray()); + return factory.getKeyPair("njcn", "njcnpqs".toCharArray()); + } + + + + + /** + * 自定义认证异常响应数据 + */ + @Bean + public AuthenticationEntryPoint authenticationEntryPoint() { + return (request, response, e) -> { + WebUtil.responseInfo(response, UserResponseEnum.CLIENT_AUTHENTICATION_FAILED.getCode(), UserResponseEnum.CLIENT_AUTHENTICATION_FAILED.getMessage()); + }; + } + + + /** + * JWT内容增强 + */ + @Bean + public TokenEnhancer tokenEnhancer() { + return (accessToken, authentication) -> { + String clientId = authentication.getOAuth2Request().getClientId(); + BusinessUser user = (BusinessUser) authentication.getUserAuthentication().getPrincipal(); + Map map = new HashMap<>(8); + map.put(SecurityConstants.USER_INDEX_KEY, user.getUserIndex()); + map.put(SecurityConstants.USER_TYPE, user.getType()); + map.put(SecurityConstants.USER_NICKNAME_KEY, user.getNickName()); + map.put(SecurityConstants.CLIENT_ID_KEY, clientId); + map.put(SecurityConstants.DEPT_INDEX_KEY, user.getDeptIndex()); + if (StrUtil.isNotBlank(user.getAuthenticationMethod())) { + map.put(SecurityConstants.AUTHENTICATION_METHOD, user.getAuthenticationMethod()); + } + ((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(map); + return accessToken; + }; + } + + + /** + * 配置自定义密码认证过滤器 + * @param security . + */ + @Override + public void configure(AuthorizationServerSecurityConfigurer security) { + CustomClientCredentialsTokenEndpointFilter endpointFilter = new CustomClientCredentialsTokenEndpointFilter(security); + endpointFilter.afterPropertiesSet(); + endpointFilter.setAuthenticationEntryPoint(authenticationEntryPoint()); + security.addTokenEndpointAuthenticationFilter(endpointFilter); + + security + .authenticationEntryPoint(authenticationEntryPoint()) + /* .allowFormAuthenticationForClients()*/ //如果使用表单认证则需要加上 + .tokenKeyAccess("permitAll()") + .checkTokenAccess("isAuthenticated()"); + } + + + + @Bean + public DaoAuthenticationProvider authenticationProvider() { + DaoAuthenticationProvider provider = new DaoAuthenticationProvider(); + provider.setHideUserNotFoundExceptions(false); + provider.setUserDetailsService(userDetailsService); + provider.setPasswordEncoder(passwordEncoder); + return provider; + } + +} diff --git a/pqs-auth/src/main/java/com/njcn/auth/config/WebSecurityConfig.java b/pqs-auth/src/main/java/com/njcn/auth/config/WebSecurityConfig.java new file mode 100644 index 000000000..edeb8f34a --- /dev/null +++ b/pqs-auth/src/main/java/com/njcn/auth/config/WebSecurityConfig.java @@ -0,0 +1,104 @@ +package com.njcn.auth.config; + +import com.njcn.auth.security.sm4.Sm4AuthenticationProvider; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.ProviderManager; +import org.springframework.security.authentication.dao.DaoAuthenticationProvider; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.crypto.factory.PasswordEncoderFactories; +import org.springframework.security.crypto.password.PasswordEncoder; + +/** + * @author hongawen + */ +@Slf4j +@Configuration +@EnableWebSecurity +@RequiredArgsConstructor +public class WebSecurityConfig extends WebSecurityConfigurerAdapter { + + private final UserDetailsService sysUserDetailsService; + + private final Sm4AuthenticationProvider sm4AuthenticationProvider; + + + @Override + protected void configure(HttpSecurity http) throws Exception { + http + .authorizeRequests() + .antMatchers("/oauth/getPublicKey","/oauth/logout","/auth/getImgCode","/judgeToken/guangZhou").permitAll() + // @link https://gitee.com/xiaoym/knife4j/issues/I1Q5X6 (接口文档knife4j需要放行的规则) + .antMatchers("/webjars/**","/doc.html","/swagger-resources/**","/v2/api-docs").permitAll() + .anyRequest().authenticated() + .and() + .csrf().disable(); + } + + /** + * 认证管理对象 + * + * @throws Exception . + * @return . + */ + @Override + @Bean + public AuthenticationManager authenticationManagerBean() throws Exception { + return super.authenticationManagerBean(); + } + + + + @Override + public void configure(AuthenticationManagerBuilder auth) { + auth.authenticationProvider(daoAuthenticationProvider()); + } + + + + + /** + * 用户名密码认证授权提供者 + * + * @return + */ + @Bean + public DaoAuthenticationProvider daoAuthenticationProvider() { + DaoAuthenticationProvider provider = new DaoAuthenticationProvider(); + provider.setUserDetailsService(sysUserDetailsService); + provider.setPasswordEncoder(passwordEncoder()); + provider.setHideUserNotFoundExceptions(false); // 是否隐藏用户不存在异常,默认:true-隐藏;false-抛出异常; + return provider; + } + + /** + * 重写父类自定义AuthenticationManager 将provider注入进去 + * 当然我们也可以考虑不重写 在父类的manager里面注入provider + */ + @Bean + @Override + protected AuthenticationManager authenticationManager(){ + return new ProviderManager(sm4AuthenticationProvider); + } + + + /** + * 密码编码器 + *

+ * 委托方式,根据密码的前缀选择对应的encoder,例如:{bcypt}前缀->标识BCYPT算法加密;{noop}->标识不使用任何加密即明文的方式 + * 密码判读 DaoAuthenticationProvider#additionalAuthenticationChecks + */ + @Bean + public PasswordEncoder passwordEncoder() { + return PasswordEncoderFactories.createDelegatingPasswordEncoder(); + } + + +} diff --git a/pqs-auth/src/main/java/com/njcn/auth/controller/AuthController.java b/pqs-auth/src/main/java/com/njcn/auth/controller/AuthController.java new file mode 100644 index 000000000..7d7ad38bd --- /dev/null +++ b/pqs-auth/src/main/java/com/njcn/auth/controller/AuthController.java @@ -0,0 +1,140 @@ +package com.njcn.auth.controller; + +import com.nimbusds.jose.jwk.JWKSet; +import com.nimbusds.jose.jwk.RSAKey; +import com.njcn.auth.service.UserTokenService; +import com.njcn.common.pojo.constant.SecurityConstants; +import com.njcn.common.pojo.dto.UserTokenInfo; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.common.utils.LogUtil; +import com.njcn.common.utils.sm.DesUtils; +import com.njcn.redis.utils.RedisUtil; +import com.njcn.user.api.UserFeignClient; +import com.njcn.web.controller.BaseController; +import com.njcn.web.utils.RequestUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.security.oauth2.common.OAuth2AccessToken; +import org.springframework.security.oauth2.provider.endpoint.TokenEndpoint; +import org.springframework.web.HttpRequestMethodNotSupportedException; +import org.springframework.web.bind.annotation.*; +import springfox.documentation.annotations.ApiIgnore; + +import java.security.KeyPair; +import java.security.Principal; +import java.security.interfaces.RSAPublicKey; +import java.time.LocalDateTime; +import java.time.ZoneOffset; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * @author hongawen + */ +@Api(tags = "认证中心") +@Slf4j +@RestController +@RequestMapping("/oauth") +@AllArgsConstructor +public class AuthController extends BaseController { + + + private final TokenEndpoint tokenEndpoint; + + private final KeyPair keyPair; + + private final RedisUtil redisUtil; + + private final UserFeignClient userFeignClient; + + private final UserTokenService userTokenService; + + + @ApiIgnore + @ApiOperation("登录认证") + @ApiImplicitParams({ + @ApiImplicitParam(name = SecurityConstants.GRANT_TYPE, defaultValue = "password", value = "授权模式", required = true), + @ApiImplicitParam(name = SecurityConstants.CLIENT_ID, defaultValue = "njcn", value = "Oauth2客户端ID", required = true), + @ApiImplicitParam(name = SecurityConstants.CLIENT_SECRET, defaultValue = "njcnpqs", value = "Oauth2客户端秘钥", required = true), + @ApiImplicitParam(name = SecurityConstants.REFRESH_TOKEN, value = "刷新token"), + @ApiImplicitParam(name = SecurityConstants.USERNAME, value = "登录用户名"), + @ApiImplicitParam(name = SecurityConstants.PASSWORD, value = "登录密码"), + @ApiImplicitParam(name = SecurityConstants.IMAGE_CODE, value = "图形验证码"), + }) + @PostMapping("/token") + public Object postAccessToken(@ApiIgnore Principal principal, @RequestParam @ApiIgnore Map parameters) throws HttpRequestMethodNotSupportedException { + String methodDescribe = getMethodDescribe("postAccessToken"); + String username = parameters.get(SecurityConstants.USERNAME); + String grantType = parameters.get(SecurityConstants.GRANT_TYPE); + //正式环境需删除,均是加密的用户名 + if (!grantType.equalsIgnoreCase(SecurityConstants.PASSWORD)) { + username = DesUtils.aesDecrypt(username); + } + if (grantType.equalsIgnoreCase(SecurityConstants.REFRESH_TOKEN_KEY)) { + //如果是刷新token,需要去黑名单校验 + userTokenService.judgeRefreshToken(parameters.get(SecurityConstants.REFRESH_TOKEN_KEY)); + } + RequestUtil.saveLoginName(username); + OAuth2AccessToken oAuth2AccessToken = tokenEndpoint.postAccessToken(principal, parameters).getBody(); + //用户的登录名&密码校验成功后,判断当前该用户是否可以正常使用系统 + userFeignClient.judgeUserStatus(username); + //登录成功后,记录token信息,并处理踢人效果 + userTokenService.recordUserInfo(oAuth2AccessToken); + if (!grantType.equalsIgnoreCase(SecurityConstants.PASSWORD)) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, oAuth2AccessToken, methodDescribe); + } else { + return oAuth2AccessToken; + } + } + + @ApiOperation("用户登出系统") + @DeleteMapping("/logout") + public HttpResult logout() { + String methodDescribe = getMethodDescribe("logout"); + String userIndex = RequestUtil.getUserIndex(); + String username = RequestUtil.getUsername(); + LogUtil.njcnDebug(log, "{},用户名为:{}", methodDescribe, username); + String blackUserKey = SecurityConstants.TOKEN_BLACKLIST_PREFIX + userIndex; + String onlineUserKey = SecurityConstants.TOKEN_ONLINE_PREFIX + userIndex; + Object onlineTokenInfoOld = redisUtil.getObjectByKey(onlineUserKey); + List blackUsers = (List) redisUtil.getObjectByKey(blackUserKey); + UserTokenInfo userTokenInfo; + if (!Objects.isNull(onlineTokenInfoOld)) { + //清除在线token信息 + redisUtil.delete(onlineUserKey); + userTokenInfo = (UserTokenInfo) onlineTokenInfoOld; + if (CollectionUtils.isEmpty(blackUsers)) { + blackUsers = new ArrayList<>(); + } + blackUsers.add(userTokenInfo); + LocalDateTime refreshTokenExpire = userTokenInfo.getRefreshTokenExpire(); + long lifeTime = Math.abs(refreshTokenExpire.plusMinutes(5L).toEpochSecond(ZoneOffset.of("+8")) - LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8"))); + redisUtil.saveByKeyWithExpire(blackUserKey, blackUsers, lifeTime); + } + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } + + + /** + * 文档隐藏该接口 + */ + @ApiIgnore + @ApiOperation("RSA公钥获取接口") + @GetMapping("/getPublicKey") + public Map getPublicKey() { + RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); + RSAKey key = new RSAKey.Builder(publicKey).build(); + return new JWKSet(key).toJSONObject(); + } + + +} diff --git a/pqs-auth/src/main/java/com/njcn/auth/controller/JudgeThirdToken.java b/pqs-auth/src/main/java/com/njcn/auth/controller/JudgeThirdToken.java new file mode 100644 index 000000000..86776c2c4 --- /dev/null +++ b/pqs-auth/src/main/java/com/njcn/auth/controller/JudgeThirdToken.java @@ -0,0 +1,77 @@ +package com.njcn.auth.controller; + +import cn.hutool.json.JSONObject; +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.enums.common.LogEnum; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.common.utils.LogUtil; +import com.njcn.web.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.client.RestTemplate; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2022年04月27日 11:22 + */ +@Slf4j +@RestController +@AllArgsConstructor +@Api(tags = "校验第三方token") +@RequestMapping("/judgeToken") +public class JudgeThirdToken extends BaseController { + + /** + * 校验广州超高压token有效性 + * + * @param token token数据 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/guangZhou") + @ApiOperation("校验广州超高压token有效性") + @ApiImplicitParam(name = "token", value = "", required = true) + public HttpResult guangZhou(String token) { + RestTemplate restTemplate = new RestTemplate(); + String methodDescribe = getMethodDescribe("guangZhou"); + LogUtil.njcnDebug(log, "{},token:{}", methodDescribe, token); + + // 请求地址 + String url = "http://10.121.17.9:9080/ehv/auth_valid"; + + // 请求头设置,x-www-form-urlencoded格式的数据 + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + + //提交参数设置 + MultiValueMap map = new LinkedMultiValueMap<>(); + map.add("token", token); + + // 组装请求体 + HttpEntity> request = + new HttpEntity<>(map, headers); + + // 发送post请求,并打印结果,以String类型接收响应结果JSON字符串 + String result = restTemplate.postForObject(url, request, String.class); + JSONObject resultJson = new JSONObject(result); + System.out.println(result); + if (resultJson.getInt("status") == 1) { + //成功 + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe); + } + } + +} diff --git a/pqs-auth/src/main/java/com/njcn/auth/controller/KaptchaController.java b/pqs-auth/src/main/java/com/njcn/auth/controller/KaptchaController.java new file mode 100644 index 000000000..84429a53f --- /dev/null +++ b/pqs-auth/src/main/java/com/njcn/auth/controller/KaptchaController.java @@ -0,0 +1,80 @@ +package com.njcn.auth.controller; + +import cn.hutool.core.io.IoUtil; +import com.google.code.kaptcha.Producer; +import com.google.code.kaptcha.util.Config; +import com.njcn.auth.utils.AuthPubUtil; +import com.njcn.common.pojo.constant.SecurityConstants; +import com.njcn.redis.utils.RedisUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpHeaders; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import springfox.documentation.annotations.ApiIgnore; + +import javax.imageio.ImageIO; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.util.Properties; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年06月04日 15:25 + */ +@Api(tags = "认证中心") +@Slf4j +@Controller +@RequestMapping("/auth") +@AllArgsConstructor +public class KaptchaController { + + private final RedisUtil redisUtil; + + @ApiIgnore + @ApiOperation("获取图形验证码") + @GetMapping("/getImgCode") + public void getImgCode(@ApiIgnore HttpServletResponse resp, @ApiIgnore HttpServletRequest request) { + ServletOutputStream out = null; + try { + out = resp.getOutputStream(); +// resp.setContentType("image/jpeg");"/pqs-auth/auth/getImgCode", + if (null != out) { + Properties props = new Properties(); + Producer kaptchaProducer; + ImageIO.setUseCache(false); + props.put("kaptcha.border", "no"); + props.put("kaptcha.textproducer.font.color", "black"); + /*props.put("kaptcha.obscurificator.impl", "com.google.code.kaptcha.impl.ShadowGimpy");*/ + /*props.put("kaptcha.noise.impl", "com.sso.utils.ComplexNoise");*/ + props.put("kaptcha.textproducer.char.space", "5"); + props.put("kaptcha.textproducer.char.length", "4"); + Config config = new Config(props); + kaptchaProducer = config.getProducerImpl(); + //此处需要固定采用字母和数字混合 + String capText = AuthPubUtil.getKaptchaText(4); + String userAgent = request.getHeader(HttpHeaders.USER_AGENT); + String ip = request.getHeader(SecurityConstants.REQUEST_HEADER_KEY_CLIENT_REAL_IP); + String key = userAgent + ip; + redisUtil.delete(key); + redisUtil.saveByKeyWithExpire(key, capText, 30*60L); + BufferedImage bi = kaptchaProducer.createImage(capText); + ImageIO.write(bi, "jpg", out); + out.flush(); + } + } catch (IOException ioException) { + log.error("获取图形验证码异常,异常为:{}", ioException.toString()); + } finally { + IoUtil.close(out); + } + + } + +} diff --git a/pqs-auth/src/main/java/com/njcn/auth/exception/AuthExceptionHandler.java b/pqs-auth/src/main/java/com/njcn/auth/exception/AuthExceptionHandler.java new file mode 100644 index 000000000..a2ce22e10 --- /dev/null +++ b/pqs-auth/src/main/java/com/njcn/auth/exception/AuthExceptionHandler.java @@ -0,0 +1,88 @@ +package com.njcn.auth.exception; + +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.nimbusds.jose.JWSObject; +import com.njcn.common.pojo.constant.LogInfo; +import com.njcn.common.pojo.constant.SecurityConstants; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.user.api.UserFeignClient; +import com.njcn.user.enums.UserResponseEnum; +import com.njcn.web.service.ILogService; +import com.njcn.web.utils.RequestUtil; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.oauth2.common.exceptions.InvalidGrantException; +import org.springframework.security.oauth2.common.exceptions.InvalidTokenException; +import org.springframework.security.oauth2.common.exceptions.UnsupportedGrantTypeException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import javax.servlet.http.HttpServletRequest; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年05月17日 12:46 + */ +@Slf4j +@RestControllerAdvice +@RequiredArgsConstructor +public class AuthExceptionHandler { + + private final UserFeignClient userFeignClient; + + private final ILogService logService; + + /** + * 用户名和密码非法 + */ + @ExceptionHandler(InvalidGrantException.class) + public HttpResult handleInvalidGrantException(HttpServletRequest httpServletRequest, InvalidGrantException invalidGrantException) { + String loginName = invalidGrantException.getMessage(); + logService.recodeAuthExceptionLog(invalidGrantException, httpServletRequest, UserResponseEnum.LOGIN_WRONG_PWD.getMessage(), loginName); + HttpResult result = userFeignClient.updateUserLoginErrorTimes(loginName); + if (result.getData().equals(UserResponseEnum.LOGIN_USER_LOCKED.getMessage())) { + return HttpResultUtil.assembleResult(UserResponseEnum.LOGIN_USER_LOCKED.getCode(), null, UserResponseEnum.LOGIN_USER_LOCKED.getMessage()); + } else { + return HttpResultUtil.assembleResult(UserResponseEnum.LOGIN_WRONG_PWD.getCode(), null, UserResponseEnum.LOGIN_WRONG_PWD.getMessage()); + } + } + + + /** + * 不支持的认证方式 + *

+ * 不支持的认证方式 目前支持:用户名密码:password、刷新token:refresh-token + */ + @ExceptionHandler(UnsupportedGrantTypeException.class) + public HttpResult unsupportedGrantTypeExceptionException(HttpServletRequest httpServletRequest, UnsupportedGrantTypeException unsupportedGrantTypeException) { + String loginName = RequestUtil.getLoginName(httpServletRequest); + logService.recodeAuthExceptionLog(unsupportedGrantTypeException, httpServletRequest, UserResponseEnum.UNSUPPORTED_GRANT_TYPE.getMessage(), loginName); + return HttpResultUtil.assembleResult(UserResponseEnum.UNSUPPORTED_GRANT_TYPE.getCode(), null, UserResponseEnum.UNSUPPORTED_GRANT_TYPE.getMessage()); + } + + /** + * oAuth2中token校验异常 + */ + @SneakyThrows + @ExceptionHandler(InvalidTokenException.class) + public HttpResult invalidTokenExceptionException(HttpServletRequest httpServletRequest, InvalidTokenException invalidTokenException) { + final String EXPIRED_KEY = "Invalid refresh token (expired):"; + if (invalidTokenException.getMessage().startsWith(EXPIRED_KEY)) { + String message = invalidTokenException.getMessage(); + message = message.substring(EXPIRED_KEY.length()); + JWSObject jwsObject = JWSObject.parse(message); + String payload = jwsObject.getPayload().toString(); + JSONObject jsonObject = JSONUtil.parseObj(payload); + logService.recodeAuthExceptionLog(invalidTokenException, httpServletRequest, UserResponseEnum.REFRESH_TOKEN_EXPIRE_JWT.getMessage(), jsonObject.getStr(SecurityConstants.USER_NAME_KEY)); + return HttpResultUtil.assembleResult(UserResponseEnum.REFRESH_TOKEN_EXPIRE_JWT.getCode(), null, UserResponseEnum.REFRESH_TOKEN_EXPIRE_JWT.getMessage()); + } + logService.recodeAuthExceptionLog(invalidTokenException, httpServletRequest, UserResponseEnum.PARSE_TOKEN_FORBIDDEN_JWT.getMessage(), LogInfo.UNKNOWN_USER); + return HttpResultUtil.assembleResult(UserResponseEnum.PARSE_TOKEN_FORBIDDEN_JWT.getCode(), null, UserResponseEnum.PARSE_TOKEN_FORBIDDEN_JWT.getMessage()); + } + + +} diff --git a/pqs-auth/src/main/java/com/njcn/auth/filter/CustomClientCredentialsTokenEndpointFilter.java b/pqs-auth/src/main/java/com/njcn/auth/filter/CustomClientCredentialsTokenEndpointFilter.java new file mode 100644 index 000000000..cf4c89791 --- /dev/null +++ b/pqs-auth/src/main/java/com/njcn/auth/filter/CustomClientCredentialsTokenEndpointFilter.java @@ -0,0 +1,42 @@ +package com.njcn.auth.filter; + + +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer; +import org.springframework.security.oauth2.provider.client.ClientCredentialsTokenEndpointFilter; +import org.springframework.security.web.AuthenticationEntryPoint; + +/** + * @author hongawen + * @version 1.0.0 + * @createTime 2021年05月24日 15:39 + */ +public class CustomClientCredentialsTokenEndpointFilter extends ClientCredentialsTokenEndpointFilter { + + private final AuthorizationServerSecurityConfigurer configurer; + + private AuthenticationEntryPoint authenticationEntryPoint; + + + public CustomClientCredentialsTokenEndpointFilter(AuthorizationServerSecurityConfigurer configurer) { + this.configurer = configurer; + } + + @Override + public void setAuthenticationEntryPoint(AuthenticationEntryPoint authenticationEntryPoint) { + super.setAuthenticationEntryPoint(null); + this.authenticationEntryPoint = authenticationEntryPoint; + } + + @Override + protected AuthenticationManager getAuthenticationManager() { + return configurer.and().getSharedObject(AuthenticationManager.class); + } + + @Override + public void afterPropertiesSet() { + setAuthenticationFailureHandler((request, response, e) -> authenticationEntryPoint.commence(request, response, e)); + setAuthenticationSuccessHandler((request, response, authentication) -> { + }); + } +} \ No newline at end of file diff --git a/pqs-auth/src/main/java/com/njcn/auth/pojo/bo/BusinessUser.java b/pqs-auth/src/main/java/com/njcn/auth/pojo/bo/BusinessUser.java new file mode 100644 index 000000000..c996e15dc --- /dev/null +++ b/pqs-auth/src/main/java/com/njcn/auth/pojo/bo/BusinessUser.java @@ -0,0 +1,94 @@ +package com.njcn.auth.pojo.bo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import java.util.Collection; +import java.util.List; + +/** + * @author hongawen + * @version 1.0.0 + * @createTime 2021年04月28日 13:31 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class BusinessUser implements UserDetails { + + private String userIndex; + + private String username; + + private String nickName; + + private String password; + + private String clientId; + + private String deptIndex; + + private Collection authorities; + + private boolean accountNonExpired; + + private boolean accountNonLocked; + + private boolean credentialsNonExpired; + + private boolean enabled; + + private String secretKey; + + private String standBy; + + private String authenticationMethod; + + private Integer type; + + @Override + public String getPassword() { + return this.password; + } + + @Override + public String getUsername() { + return this.username; + } + + @Override + public boolean isAccountNonExpired() { + return true; + } + + @Override + public boolean isAccountNonLocked() { + return true; + } + + @Override + public boolean isCredentialsNonExpired() { + return true; + } + + @Override + public boolean isEnabled() { + return true; + } + + @Override + public Collection getAuthorities(){ + return authorities; + } + + + public BusinessUser(String username, String password, List authorities) { + this.username = username; + this.password = password; + this.authorities =authorities; + } + +} diff --git a/pqs-auth/src/main/java/com/njcn/auth/security/clientdetails/ClientDetailsServiceImpl.java b/pqs-auth/src/main/java/com/njcn/auth/security/clientdetails/ClientDetailsServiceImpl.java new file mode 100644 index 000000000..c30f2dd09 --- /dev/null +++ b/pqs-auth/src/main/java/com/njcn/auth/security/clientdetails/ClientDetailsServiceImpl.java @@ -0,0 +1,58 @@ +package com.njcn.auth.security.clientdetails; + + +import com.njcn.common.pojo.enums.auth.PasswordEncoderTypeEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.user.api.AuthClientFeignClient; +import com.njcn.user.pojo.po.AuthClient; +import lombok.RequiredArgsConstructor; +import org.springframework.dao.EmptyResultDataAccessException; +import org.springframework.security.crypto.factory.PasswordEncoderFactories; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.oauth2.provider.ClientDetails; +import org.springframework.security.oauth2.provider.ClientDetailsService; +import org.springframework.security.oauth2.provider.NoSuchClientException; +import org.springframework.security.oauth2.provider.client.BaseClientDetails; +import org.springframework.stereotype.Service; + +/** + * OAuth2 客户端信息 + * @author hongawen + */ +@Service +@RequiredArgsConstructor +public class ClientDetailsServiceImpl implements ClientDetailsService { + + private final AuthClientFeignClient authClientFeignClient; + + @Override + public ClientDetails loadClientByClientId(String clientName) { + try { + HttpResult authClientResult = authClientFeignClient.getAuthClientByName(clientName); + AuthClient authClient = authClientResult.getData(); + BaseClientDetails clientDetails = new BaseClientDetails( + authClient.getName(), + authClient.getResourceIds(), + authClient.getScope(), + authClient.getAuthorizedGrantTypes(), + authClient.getAuthorities(), + authClient.getWebServerRedirectUri() + ); + clientDetails.setClientSecret(PasswordEncoderTypeEnum.BCRYPT.getPrefix() + authClient.getClientSecret()); + clientDetails.setAccessTokenValiditySeconds(authClient.getAccessTokenValidity()); + clientDetails.setRefreshTokenValiditySeconds(authClient.getRefreshTokenValidity()); + return clientDetails; + } catch (EmptyResultDataAccessException var4) { + throw new NoSuchClientException("No client with requested id: " + clientName); + } + } + + public static void main(String[] args) { + PasswordEncoder delegatingPasswordEncoder = PasswordEncoderFactories.createDelegatingPasswordEncoder(); + String njcnpqs = delegatingPasswordEncoder.encode("njcnpqs"); + //{bcrypt}$2a$10$xIP3g5Rc11zDdclsKXpQXuOobvZ9gaw2Mix1rkOm1MJN1.hTVY7ci + System.out.println(njcnpqs); + System.out.println(delegatingPasswordEncoder.matches("njcnpqs","{bcrypt}$2a$10$xIP3g5Rc11zDdclsKXpQXuOobvZ9gaw2Mix1rkOm1MJN1.hTVY7ci")); + + } +} diff --git a/pqs-auth/src/main/java/com/njcn/auth/security/extension/captcha/CaptchaTokenGranter.java b/pqs-auth/src/main/java/com/njcn/auth/security/extension/captcha/CaptchaTokenGranter.java new file mode 100644 index 000000000..023b3bc1c --- /dev/null +++ b/pqs-auth/src/main/java/com/njcn/auth/security/extension/captcha/CaptchaTokenGranter.java @@ -0,0 +1,101 @@ +package com.njcn.auth.security.extension.captcha; + +import cn.hutool.core.util.StrUtil; +import com.njcn.common.pojo.constant.SecurityConstants; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.common.utils.sm.DesUtils; +import com.njcn.common.utils.sm.Sm2; +import com.njcn.redis.utils.RedisUtil; +import com.njcn.user.enums.UserResponseEnum; +import com.njcn.web.utils.RequestUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpHeaders; +import org.springframework.security.authentication.*; +import org.springframework.security.core.Authentication; +import org.springframework.security.oauth2.common.exceptions.InvalidGrantException; +import org.springframework.security.oauth2.provider.*; +import org.springframework.security.oauth2.provider.token.AbstractTokenGranter; +import org.springframework.security.oauth2.provider.token.AuthorizationServerTokenServices; + +import javax.servlet.http.HttpServletRequest; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年12月15日 14:23 + */ +@Slf4j +public class CaptchaTokenGranter extends AbstractTokenGranter { + + private final AuthenticationManager authenticationManager; + + private final RedisUtil redisUtil; + + public CaptchaTokenGranter(AuthorizationServerTokenServices tokenServices, ClientDetailsService clientDetailsService, + OAuth2RequestFactory requestFactory, AuthenticationManager authenticationManager, + RedisUtil redisUtil + ) { + //SecurityConstants.GRANT_CAPTCHA:申明为授权码模式 + super(tokenServices, clientDetailsService, requestFactory, SecurityConstants.GRANT_CAPTCHA); + this.authenticationManager = authenticationManager; + this.redisUtil = redisUtil; + } + + @Override + protected OAuth2Authentication getOAuth2Authentication(ClientDetails client, TokenRequest tokenRequest) { + Map parameters = new LinkedHashMap<>(tokenRequest.getRequestParameters()); + String username = parameters.get(SecurityConstants.USERNAME); + username = DesUtils.aesDecrypt(username); + if (!judgeImageCode(parameters.get(SecurityConstants.IMAGE_CODE), RequestUtil.getRequest())) { + throw new BusinessException(UserResponseEnum.LOGIN_WRONG_CODE); + } + String password = parameters.get(SecurityConstants.PASSWORD); + String ip = RequestUtil.getRequest().getHeader(SecurityConstants.REQUEST_HEADER_KEY_CLIENT_REAL_IP); + //密码处理 + String privateKey = redisUtil.getStringByKey(username + ip); +// //秘钥用完即删 + redisUtil.delete(username + ip); + //对SM2解密面进行验证 + password = Sm2.getPasswordSM2Verify(privateKey, password); + if (StrUtil.isBlankIfStr(password)) { + throw new BusinessException(UserResponseEnum.PASSWORD_TRANSPORT_ERROR); + } + //正式环境放行 + parameters.remove(SecurityConstants.PASSWORD); + Authentication userAuth = new UsernamePasswordAuthenticationToken(username, password); + ((AbstractAuthenticationToken) userAuth).setDetails(parameters); + try { + userAuth = authenticationManager.authenticate(userAuth); + } catch (AccountStatusException | BadCredentialsException ase) { + //covers expired, locked, disabled cases + throw new InvalidGrantException(ase.getMessage()); + } + // If the username/password are wrong the spec says we should send 400/invalid grant + if (userAuth == null || !userAuth.isAuthenticated()) { + throw new InvalidGrantException("Could not authenticate user: " + username); + } + + OAuth2Request storedOauth2Request = getRequestFactory().createOAuth2Request(client, tokenRequest); + return new OAuth2Authentication(storedOauth2Request, userAuth); + } + + /** + * @param imageCode 图形验证码 + */ + private boolean judgeImageCode(String imageCode, HttpServletRequest request) { + if (StrUtil.isBlankIfStr(imageCode)) { + return false; + } + String userAgent = request.getHeader(HttpHeaders.USER_AGENT); + String ip = request.getHeader(SecurityConstants.REQUEST_HEADER_KEY_CLIENT_REAL_IP); + String key = userAgent + ip; + String redisImageCode = redisUtil.getStringByKey(key); + if (imageCode.equalsIgnoreCase(redisImageCode)) { + redisUtil.delete(key); + return true; + } + return false; + } +} diff --git a/pqs-auth/src/main/java/com/njcn/auth/security/extension/refresh/PreAuthenticatedUserDetailsService.java b/pqs-auth/src/main/java/com/njcn/auth/security/extension/refresh/PreAuthenticatedUserDetailsService.java new file mode 100644 index 000000000..af5cac7dc --- /dev/null +++ b/pqs-auth/src/main/java/com/njcn/auth/security/extension/refresh/PreAuthenticatedUserDetailsService.java @@ -0,0 +1,60 @@ +package com.njcn.auth.security.extension.refresh; + +import com.njcn.common.pojo.constant.SecurityConstants; +import com.njcn.common.pojo.enums.auth.AuthenticationMethodEnum; +import com.njcn.web.utils.RequestUtil; +import lombok.NoArgsConstructor; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.userdetails.AuthenticationUserDetailsService; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer; +import org.springframework.stereotype.Component; +import org.springframework.util.Assert; + +import java.util.Map; + +/** + * 刷新token再次认证 UserDetailsService + * + * @author hongawen + * @date 2021/10/2 + */ +@NoArgsConstructor +public class PreAuthenticatedUserDetailsService implements AuthenticationUserDetailsService, InitializingBean { + + /** + * 客户端ID和用户服务 UserDetailService 的映射 + * + * @see com.njcn.auth.config.AuthorizationServerConfig#tokenServices(AuthorizationServerEndpointsConfigurer) + */ + private Map userDetailsServiceMap; + + public PreAuthenticatedUserDetailsService(Map userDetailsServiceMap) { + Assert.notNull(userDetailsServiceMap, "userDetailsService cannot be null."); + this.userDetailsServiceMap = userDetailsServiceMap; + } + + @Override + public void afterPropertiesSet() throws Exception { + Assert.notNull(this.userDetailsServiceMap, "UserDetailsService must be set"); + } + + /** + * 重写PreAuthenticatedAuthenticationProvider 的 preAuthenticatedUserDetailsService 属性,可根据客户端和认证方式选择用户服务 UserDetailService 获取用户信息 UserDetail + * + * @param authentication . + * @return . + * @throws UsernameNotFoundException . + */ + @Override + public UserDetails loadUserDetails(T authentication) throws UsernameNotFoundException { + String clientId = RequestUtil.getOAuth2ClientId(); + // 获取认证方式,默认是用户名 username + UserDetailsService userDetailsService = userDetailsServiceMap.get(clientId); + return userDetailsService.loadUserByUsername(authentication.getName()); + + } +} diff --git a/pqs-auth/src/main/java/com/njcn/auth/security/sm4/Sm4AuthenticationProvider.java b/pqs-auth/src/main/java/com/njcn/auth/security/sm4/Sm4AuthenticationProvider.java new file mode 100644 index 000000000..9218875ca --- /dev/null +++ b/pqs-auth/src/main/java/com/njcn/auth/security/sm4/Sm4AuthenticationProvider.java @@ -0,0 +1,92 @@ +package com.njcn.auth.security.sm4; + +import com.njcn.auth.pojo.bo.BusinessUser; +import com.njcn.common.utils.sm.Sm4Utils; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.authentication.BadCredentialsException; +import org.springframework.security.authentication.InternalAuthenticationServiceException; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.stereotype.Component; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年06月08日 15:43 + */ +@Slf4j +@Component +@AllArgsConstructor +public class Sm4AuthenticationProvider extends AbstractUserDetailsAuthenticationProvider { + + private final UserDetailsService userDetailsService; + + + /** + * 校验密码有效性. + * + * @param userDetails 用户详细信息 + * @param authentication 用户登录的密码 + * @throws AuthenticationException . + */ + @Override + protected void additionalAuthenticationChecks( + UserDetails userDetails, UsernamePasswordAuthenticationToken authentication) + throws AuthenticationException { + if (authentication.getCredentials() == null) { + logger.debug("Authentication failed: no credentials provided"); + + throw new BadCredentialsException(messages.getMessage( + "AbstractUserDetailsAuthenticationProvider.badCredentials", + "Bad credentials")); + } + + String presentedPassword = authentication.getCredentials().toString(); + BusinessUser businessUser = (BusinessUser)userDetails; + String secretKey = businessUser.getSecretKey(); + Sm4Utils sm4 = new Sm4Utils(secretKey); + //SM4加密密码 + String sm4PwdOnce = sm4.encryptData_ECB(presentedPassword); + //SM4加密(密码+工作秘钥) + String sm4PwdTwice = sm4.encryptData_ECB(sm4PwdOnce + secretKey); + if(!businessUser.getPassword().equalsIgnoreCase(sm4PwdTwice)){ + throw new BadCredentialsException(messages.getMessage( + "AbstractUserDetailsAuthenticationProvider.badCredentials", + businessUser.getUsername())); + } + } + + /** + * 获取用户 + * + * @param username 用户名 + * @param authentication 认证token + * @throws AuthenticationException . + */ + @Override + protected UserDetails retrieveUser( + String username, UsernamePasswordAuthenticationToken authentication) + throws AuthenticationException { + UserDetails loadedUser = userDetailsService.loadUserByUsername(username); + if (loadedUser == null) { + throw new InternalAuthenticationServiceException( + "UserDetailsService returned null, which is an interface contract violation"); + } + return loadedUser; + } + + + /** + * 授权持久化. + */ + @Override + protected Authentication createSuccessAuthentication(Object principal, + Authentication authentication, UserDetails user) { + return super.createSuccessAuthentication(principal, authentication, user); + } +} \ No newline at end of file diff --git a/pqs-auth/src/main/java/com/njcn/auth/service/UserDetailsServiceImpl.java b/pqs-auth/src/main/java/com/njcn/auth/service/UserDetailsServiceImpl.java new file mode 100644 index 000000000..ca5a1a767 --- /dev/null +++ b/pqs-auth/src/main/java/com/njcn/auth/service/UserDetailsServiceImpl.java @@ -0,0 +1,47 @@ +package com.njcn.auth.service; + +import cn.hutool.core.bean.BeanUtil; +import com.njcn.auth.pojo.bo.BusinessUser; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.LogUtil; +import com.njcn.user.api.UserFeignClient; +import com.njcn.user.pojo.dto.UserDTO; +import com.njcn.web.utils.RequestUtil; +import lombok.AllArgsConstructor; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.core.authority.AuthorityUtils; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; + + +/** + * @author hongawen + *

+ * 自定义用户认证和授权 + */ +@Slf4j +@Service +@AllArgsConstructor +public class UserDetailsServiceImpl implements UserDetailsService { + + private final UserFeignClient userFeignClient; + + @SneakyThrows + @Override + public UserDetails loadUserByUsername(String loginName) throws UsernameNotFoundException { + String clientId = RequestUtil.getOAuth2ClientId(); + BusinessUser businessUser = new BusinessUser(loginName, null, null); + businessUser.setClientId(clientId); + HttpResult result = userFeignClient.getUserByName(loginName); + LogUtil.njcnDebug(log, "用户认证时,用户名:{}获取用户信息:{}", loginName, result.toString()); + //成功获取用户信息 + UserDTO userDTO = result.getData(); + BeanUtil.copyProperties(userDTO,businessUser,true); + businessUser.setAuthorities(AuthorityUtils.commaSeparatedStringToAuthorityList(String.join(",", userDTO.getRoleName()))); + return businessUser; + } + +} diff --git a/pqs-auth/src/main/java/com/njcn/auth/service/UserTokenService.java b/pqs-auth/src/main/java/com/njcn/auth/service/UserTokenService.java new file mode 100644 index 000000000..574444894 --- /dev/null +++ b/pqs-auth/src/main/java/com/njcn/auth/service/UserTokenService.java @@ -0,0 +1,121 @@ +package com.njcn.auth.service; + +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.nimbusds.jose.JWSObject; +import com.njcn.common.pojo.constant.SecurityConstants; +import com.njcn.common.pojo.dto.UserTokenInfo; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.redis.utils.RedisUtil; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.scheduling.annotation.Async; +import org.springframework.security.oauth2.common.OAuth2RefreshToken; +import org.springframework.stereotype.Service; +import org.springframework.security.oauth2.common.OAuth2AccessToken; + +import java.text.ParseException; +import java.time.LocalDateTime; +import java.time.ZoneOffset; +import java.util.*; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2022年03月11日 10:34 + */ +@Slf4j +@Service +@AllArgsConstructor +public class UserTokenService { + + private final RedisUtil redisUtil; + + + /** + * 记录用户token信息,并经过处理后达到最新登录的使用者,将之前的token信息置为黑名单,过期状态 + * 1、从在线名单中获取该用户的token信息,key为:TOKEN_ONLINE_PREFIX+userid,value为userTokenInfo的json对象 + * 1.1 有,则表示有人使用该账户登录过 + * 1.1.1 将在线名单的用户信息添加到黑名单,并清除黑名单中已经过期的token信息 + * ,重新赋值黑名单信息,key为:TOKEN_BLACKLIST_PREFIX+userid,value为userTokenInfo的集合 + * 1.2 没有,该账号当前只有本人在登录,将当前token等信息保存到白名单 + * + * @param oAuth2AccessToken 认证后的最新token信息 + */ + @Async("asyncExecutor") + public void recordUserInfo(OAuth2AccessToken oAuth2AccessToken) { + UserTokenInfo userTokenInfo = new UserTokenInfo(); + String accessTokenValue = oAuth2AccessToken.getValue(); + JWSObject accessJwsObject ; + try { + accessJwsObject = JWSObject.parse(accessTokenValue); + } catch (ParseException e) { + throw new BusinessException(CommonResponseEnum.PARSE_TOKEN_ERROR); + } + JSONObject accessJson = JSONUtil.parseObj(accessJwsObject.getPayload().toString()); + String userIndex = accessJson.getStr(SecurityConstants.USER_INDEX_KEY); + //查询是否有在线的当前用户 + String onlineUserKey = SecurityConstants.TOKEN_ONLINE_PREFIX + userIndex; + Object onlineTokenInfoOld = redisUtil.getObjectByKey(onlineUserKey); + if (!Objects.isNull(onlineTokenInfoOld)) { + //存在在线用户,将在线用户添加到黑名单列表 + String blackUserKey = SecurityConstants.TOKEN_BLACKLIST_PREFIX + userIndex; + List blackUsers = (List) redisUtil.getObjectByKey(blackUserKey); + if (CollectionUtils.isEmpty(blackUsers)) { + blackUsers = new ArrayList<>(); + } + blackUsers.add((UserTokenInfo) onlineTokenInfoOld); + //筛选黑名单中是否存在过期的token信息 + blackUsers.removeIf(userTokenInfoTemp -> userTokenInfoTemp.getRefreshTokenExpire().isBefore(LocalDateTime.now())); + //将黑名单集合重新缓存,此处根据最新的黑名单计算当前这个key的生命周期,在时间差的基础上增加5分钟的延迟时间 + LocalDateTime refreshTokenExpire = ((UserTokenInfo) onlineTokenInfoOld).getRefreshTokenExpire(); + long lifeTime = Math.abs(refreshTokenExpire.plusMinutes(5L).toEpochSecond(ZoneOffset.of("+8")) - LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8"))); + redisUtil.saveByKeyWithExpire(blackUserKey, blackUsers, lifeTime); + } + String accessJti = accessJson.getStr(SecurityConstants.JWT_JTI); + OAuth2RefreshToken refreshToken = oAuth2AccessToken.getRefreshToken(); + JWSObject refreshJwsObject ; + try { + refreshJwsObject = JWSObject.parse(refreshToken.getValue()); + } catch (ParseException e) { + throw new BusinessException(CommonResponseEnum.PARSE_TOKEN_ERROR); + } + JSONObject refreshJson = JSONUtil.parseObj(refreshJwsObject.getPayload().toString()); + String refreshJti = refreshJson.getStr(SecurityConstants.JWT_JTI); + Long refreshExpireTime = refreshJson.getLong(SecurityConstants.JWT_EXP); + userTokenInfo.setAccessTokenJti(accessJti); + userTokenInfo.setRefreshToken(refreshToken.getValue()); + LocalDateTime refreshLifeTime =LocalDateTime.ofEpochSecond(refreshExpireTime,0,ZoneOffset.of("+8")); + userTokenInfo.setRefreshTokenExpire(refreshLifeTime); + //生命周期在refreshToken的基础上,延迟5分钟 + redisUtil.saveByKeyWithExpire(onlineUserKey, userTokenInfo, refreshLifeTime.plusMinutes(5L).toEpochSecond(ZoneOffset.of("+8")) - LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8"))); + } + + /** + * 校验刷新token是否被加入黑名单 + * + * @param refreshToken 刷新token + */ + public void judgeRefreshToken(String refreshToken) { + JWSObject refreshJwsObject; + try { + refreshJwsObject = JWSObject.parse(refreshToken); + } catch (ParseException e) { + throw new BusinessException(); + } + JSONObject refreshJson = JSONUtil.parseObj(refreshJwsObject.getPayload().toString()); + String userIndex = refreshJson.getStr(SecurityConstants.USER_INDEX_KEY); + String blackUserKey = SecurityConstants.TOKEN_BLACKLIST_PREFIX + userIndex; + List blackUsers = (List) redisUtil.getObjectByKey(blackUserKey); + if (CollectionUtils.isNotEmpty(blackUsers)) { + blackUsers.forEach(temp -> { + //存在当前的刷新token,则抛出业务异常 + if(temp.getRefreshToken().equalsIgnoreCase(refreshToken)){ + throw new BusinessException(CommonResponseEnum.TOKEN_EXPIRE_JWT); + } + }); + } + } +} diff --git a/pqs-auth/src/main/java/com/njcn/auth/utils/AuthPubUtil.java b/pqs-auth/src/main/java/com/njcn/auth/utils/AuthPubUtil.java new file mode 100644 index 000000000..1b90292e0 --- /dev/null +++ b/pqs-auth/src/main/java/com/njcn/auth/utils/AuthPubUtil.java @@ -0,0 +1,29 @@ +package com.njcn.auth.utils; + +import cn.hutool.core.util.RandomUtil; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Locale; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年06月04日 14:00 + */ +public class AuthPubUtil { + + public static String getKaptchaText(int codeLength) { + StringBuilder code = new StringBuilder(); + int letterLength = RandomUtil.randomInt(codeLength - 1) + 1; + code.append(RandomUtil.randomString(RandomUtil.BASE_CHAR, letterLength).toUpperCase(Locale.ROOT)); + int numberLength = codeLength - letterLength; + code.append(RandomUtil.randomString(RandomUtil.BASE_NUMBER, numberLength)); + List textList = Arrays.asList(code.toString().split("")); + //填充完字符后,打乱顺序,返回字符串 + Collections.shuffle(textList); + return String.join("", textList); + } + +} diff --git a/pqs-auth/src/main/resources/bootstrap.yml b/pqs-auth/src/main/resources/bootstrap.yml new file mode 100644 index 000000000..d8f7ef266 --- /dev/null +++ b/pqs-auth/src/main/resources/bootstrap.yml @@ -0,0 +1,51 @@ +#当前服务的基本信息 +microservice: + ename: @artifactId@ + name: '@name@' + version: @version@ + sentinel: + url: @sentinel.url@ + gateway: + url: @gateway.url@ +server: + port: 10214 +#feign接口开启服务熔断降级处理 +feign: + sentinel: + enabled: true + +spring: + application: + name: @artifactId@ + #nacos注册中心以及配置中心的指定 + cloud: + nacos: + discovery: + server-addr: @nacos.url@ + namespace: @nacos.namespace@ + config: + server-addr: @nacos.url@ + namespace: @nacos.namespace@ + file-extension: yaml + shared-configs: + - data-id: share-config.yaml + refresh: true + - data-Id: share-config-datasource-db.yaml + refresh: true + main: + allow-bean-definition-overriding: true + + +#项目日志的配置 +logging: + config: http://@nacos.url@/nacos/v1/cs/configs?tenant=@nacos.namespace@&group=DEFAULT_GROUP&dataId=logback.xml + level: + root: info + + +#mybatis配置信息 +mybatis-plus: + #别名扫描 + type-aliases-package: com.njcn.user.pojo + + diff --git a/pqs-auth/src/main/resources/njcn.jks b/pqs-auth/src/main/resources/njcn.jks new file mode 100644 index 0000000000000000000000000000000000000000..0b25e1dab9b67252efec20faf5ba9fa866dcca6b GIT binary patch literal 2242 zcmchYXHe6L7RCSn5QqUnFH$1atP)BH0i*~7q=^tg5tJqZOOF&4NT?x#lqXe;6bmB7 zfUr~%71Us;f`9>Rv_-%tEmR3*nVoq%JLC5^cg~0N`*i2bopX2Rcjo~Bfb0wWTTo(v z7jfUjyflNo1^{jdh63Hi2=MTtc|a(r0ucs5ZU9Pwem~p6{8;1#i`PBfu%axAM!pi+ z`w)V9e63p!SeVNWdQJ zxIx(IbUd=neEKmAS^2)gTbM64q}FiLoKaG*u@Q$ZR?wZX9DY-UYaCq}^P}kco5jVh zcas&>p<9tXH5vG4)~FlCW1vcxh|s z7g~4v-9?G9Ww;y0cE+R?mBXx$e=3uHh^1KZF8KCOF|!uqC>_fb#Y5x^vSk(E^v$nr z_uMCI{G@_PSfs|K+$<@W;8;j-UfuN{&&-gK)|aE(KVOOISrzY;+N-8e!d$fuXvrN? z;t%00`5fg zI5=IFeB-tE#T0kls27FB6PXf5ywlh5C++7Qhh%bV#`IUHf(3r&H~?uJ(vHM?9-@ie3aT||D9x_@%fs)YPd{;U1(j! z<-r&SeGa|U@0zOo1VjFai`%yHpJayKhsLxqo~>i3xaT8Pdgncub>#Xu|hJRPkf z)ru}aB5T610`X6Wa5bi$364BsV+mqCvKle(g~zNHC-V5>?yP^>v0cqrwlGkZ7@=aW z({Z9i!Pv-&@z2bae!cQ9apjBfZCfYENvpng1Z>j}w<=n&+aIgEmkE&Bn{v3)WO}z5jG{|O%lOBr2CEZUH z)*;W1E_3X=xQrE5-{A^(Bb|BHw~E3n+T4RqVo7Le>5L2cr6@nV;Rg{Z!j-31qE2+N`CEC@l2J z_EAm2_}e}8+v3(L(3fkqRm00SV)#bf$;P`ASxiH-Y`_3^A+<=-p;egoLVw?OnX0c< zt?p50A0hd11tR}K%bN67)f)azsZ@8NOz%K!#8tDYlyZ+8yj}S7Y{e?>OKsVb546uf zABdznM>G#ocNW(eC2gO+ZjtlmG9Eq{p_&B=EL@EVoURmWbQu&^(U|+Y7rC9)wJ~}C zz(vMTxFRqVh{t^{2nc~dO^y$+FbE#FN|II51_A{6xB*O%rqF(6aydeIL}8A^K;q>H z;{V8jUkL0M!ut#1`-O1*LokOV5m-%4tfsc67IuFw>{~2G>mU1n-i87y{yUESZ^1=+*< z&aqEqE>?pdFT_1`LTio?>vfD%9ZA}GIVrlz{cN`64caF|I8>5C;P%hZJ4#|x6|TZH%n+fMHu+eqV0}^#5Bpob(xz=F zx-e(h*jTlFBgH*^o50H6)LRV8m#6>MSX9vpmrTPR6?Ij5gK(`S(8aZV@X>j3(50+( zi1rwS3k1N23K%&Ia{oe*0#FI4m_~xAUvxn{VwbI-g{|+GjSc<||96P{H?@pvl>#nMC|l9^SgHe4OUo<4Crs}(OL9$7X{H1_L{odih8?hden?o80kQI&T@jn*>2RN zL3_lVr5Fxea@0KYI*y=oZYWvu@RkAW#lifUY2DkoB%@lJSk0Cvndd6;OFGZP&q{5# RJX?|GGgF&k_4F@m{{_HG+F1Yq literal 0 HcmV?d00001 diff --git a/pqs-common/common-autocode/pom.xml b/pqs-common/common-autocode/pom.xml new file mode 100644 index 000000000..fa4569a85 --- /dev/null +++ b/pqs-common/common-autocode/pom.xml @@ -0,0 +1,42 @@ + + + + pqs-common + com.njcn + 1.0.0 + + 4.0.0 + common-autocode + + mybatis-plus代码自动生成模块 + + 8 + 8 + + + + + com.njcn + common-db + 1.0.0 + + + com.njcn + common-web + 1.0.0 + + + + com.baomidou + mybatis-plus-generator + + + + org.apache.velocity + velocity-engine-core + + + + \ No newline at end of file diff --git a/pqs-common/common-autocode/src/main/java/com/njcn/autocode/pojo/Module.java b/pqs-common/common-autocode/src/main/java/com/njcn/autocode/pojo/Module.java new file mode 100644 index 000000000..16839b443 --- /dev/null +++ b/pqs-common/common-autocode/src/main/java/com/njcn/autocode/pojo/Module.java @@ -0,0 +1,35 @@ +package com.njcn.autocode.pojo; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.io.Serializable; +import java.util.List; + +/** + * + * 需要生成代码的模块 + * + * @author hongawen + * @version 1.0.0 + * @date 2021年12月10日 16:03 + */ +@Setter +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class Module implements Serializable { + + private String author; + + private String packageName; + + private String moduleName; + + private List tableNames; + + private String prefix; + +} diff --git a/pqs-common/common-autocode/src/main/java/com/njcn/autocode/utils/GenerateCode.java b/pqs-common/common-autocode/src/main/java/com/njcn/autocode/utils/GenerateCode.java new file mode 100644 index 000000000..1f671094b --- /dev/null +++ b/pqs-common/common-autocode/src/main/java/com/njcn/autocode/utils/GenerateCode.java @@ -0,0 +1,95 @@ +package com.njcn.autocode.utils; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.po.LikeTable; +import com.njcn.autocode.pojo.Module; +import org.springframework.web.bind.annotation.RestController; + +import java.io.File; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年12月10日 15:16 + */ +public class GenerateCode { + + private static final String TARGET_DIR = "D://code"; + + private static final String DB_URL = "jdbc:mysql://192.168.1.14:13306/pqsinfo"; + + private static final String USERNAME = "root"; + + private static final String PASSWORD = "njcnpqs"; + + + public static void main(String[] args) { + List modules = Stream.of( + new Module("hongawen", "com.njcn", "user", Stream.of( + "sys_component" + ,"sys_dept" + ,"sys_function" + ,"sys_home_page" + ,"sys_role" + ,"sys_role_component" + ,"sys_role_function" + ,"sys_user" + ,"sys_user_role" + ,"sys_user_set" + ,"sys_auth_client" + ,"sys_user_strategy" + ).collect(Collectors.toList()), "sys_") + , new Module("hongawen", "com.njcn", "system", Stream.of( + "sys_dict_data" + ,"sys_area" + ,"sys_config" + ,"sys_dict_type" + ,"sys_task" + ,"sys_resource" + ,"sys_theme" + ).collect(Collectors.toList()), "sys_") + ).collect(Collectors.toList()); + generateJavaFile(modules); + } + + + /** + * 批量生成不同模块的代码 + * @param modules 模块数据 + */ + private static void generateJavaFile(List modules) { + for (Module module : modules) { + //文件夹提前建好,否则会报错 + FastAutoGenerator.create(DB_URL, USERNAME, PASSWORD) + .globalConfig(builder -> { + builder.author(module.getAuthor()) // 设置作者 + .fileOverride() // 覆盖已生成文件 + .outputDir(TARGET_DIR); // 指定输出目录 + }) + .packageConfig(builder -> { + builder.parent(module.getPackageName()) // 设置父包名 + .moduleName(module.getModuleName()) // 设置父包模块名 + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, TARGET_DIR+ File.separator+module.getModuleName())); // 设置mapperXml生成路径 + }) + .strategyConfig(builder -> { + builder.addInclude(module.getTableNames()) // 设置需要生成的表名 + .addTablePrefix(module.getPrefix())// 设置过滤表前缀 + .entityBuilder() + .superClass(com.njcn.db.bo.BaseEntity.class) //默认实体继承指定父类 + .enableLombok() //启用lombok + .controllerBuilder() + .superClass(com.njcn.web.controller.BaseController.class) //默认controller继承指定父类 + .enableRestStyle() //开启生成@RestController 控制器 + ; + }) + .execute(); + } + } + + +} diff --git a/pqs-common/common-core/pom.xml b/pqs-common/common-core/pom.xml new file mode 100644 index 000000000..39250ebb7 --- /dev/null +++ b/pqs-common/common-core/pom.xml @@ -0,0 +1,96 @@ + + + + pqs-common + com.njcn + 1.0.0 + + 4.0.0 + common-core + 聚合所有服务模块公共信息 + + 8 + 8 + + + + + + org.projectlombok + lombok + + + + cn.hutool + hutool-all + + + org.springframework.boot + spring-boot-starter-json + + + + org.springframework.boot + spring-boot-starter-actuator + + + + org.springframework.boot + spring-boot-configuration-processor + true + + + + org.springframework.boot + spring-boot-starter-test + + + + org.bouncycastle + bcprov-jdk15on + + + + org.apache.commons + commons-lang3 + + + commons-io + commons-io + + + commons-codec + commons-codec + + + + + + + + com.github.xiaoymin + knife4j-spring-boot-starter + + + com.github.xiaoymin + knife4j-spring-ui + + + + com.fasterxml.jackson.core + jackson-databind + + + + com.fasterxml.jackson.core + jackson-core + + + com.fasterxml.jackson.core + jackson-annotations + + + + \ No newline at end of file diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/config/AsyncConfiguration.java b/pqs-common/common-core/src/main/java/com/njcn/common/config/AsyncConfiguration.java new file mode 100644 index 000000000..653b91bc2 --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/config/AsyncConfiguration.java @@ -0,0 +1,66 @@ +package com.njcn.common.config; + +import lombok.AllArgsConstructor; +import lombok.Data; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.Order; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2022年03月11日 09:32 + */ +@Data +@Order(100) +@Configuration +@EnableAsync +@AllArgsConstructor +public class AsyncConfiguration { + + private final GeneralInfo generalInfo; + + @Bean("asyncExecutor") + public Executor asyncExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + // 核心线程数:线程池创建时候初始化的线程数 + executor.setCorePoolSize(generalInfo.getCorePoolSize()); + // 最大线程数:线程池最大的线程数,只有在缓冲队列满了之后才会申请超过核心线程数的线程 + executor.setMaxPoolSize(generalInfo.getMaxPoolSize()); + // 缓冲队列:用来缓冲执行任务的队列 + executor.setQueueCapacity(generalInfo.getQueueCapacity()); + // 允许线程的空闲时间60秒:当超过了核心线程之外的线程在空闲时间到达之后会被销毁 + executor.setKeepAliveSeconds(generalInfo.getKeepAliveSeconds()); + // 线程池名的前缀:设置好了之后可以方便我们定位处理任务所在的线程池 + executor.setThreadNamePrefix(generalInfo.getMicroServiceName()); + // 缓冲队列满了之后的拒绝策略:由调用线程处理(一般是主线程) + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + executor.initialize(); + return executor; + } + + @Bean("MQTTExecutor") + public Executor mqttExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + // 核心线程数:线程池创建时候初始化的线程数 + executor.setCorePoolSize(0); + // 最大线程数:线程池最大的线程数,只有在缓冲队列满了之后才会申请超过核心线程数的线程 + executor.setMaxPoolSize(1); + // 缓冲队列:用来缓冲执行任务的队列 + executor.setQueueCapacity(1); + // 允许线程的空闲时间60秒:当超过了核心线程之外的线程在空闲时间到达之后会被销毁 + executor.setKeepAliveSeconds(generalInfo.getKeepAliveSeconds()); + // 线程池名的前缀:设置好了之后可以方便我们定位处理任务所在的线程池 + executor.setThreadNamePrefix(generalInfo.getMicroServiceName()); + // 缓冲队列满了之后的拒绝策略:由调用线程处理(一般是主线程) + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardOldestPolicy()); + executor.initialize(); + return executor; + } + +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/config/GeneralInfo.java b/pqs-common/common-core/src/main/java/com/njcn/common/config/GeneralInfo.java new file mode 100644 index 000000000..b962b65a5 --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/config/GeneralInfo.java @@ -0,0 +1,39 @@ +package com.njcn.common.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.Order; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年08月19日 15:56 + */ +@Data +@Configuration +@Order(10) +public class GeneralInfo { + + @Value("${microservice.ename}") + private String microServiceName; + + @Value("${threadPool.corePoolSize}") + private int corePoolSize; + + @Value("${threadPool.maxPoolSize}") + private int maxPoolSize; + + @Value("${threadPool.queueCapacity}") + private int queueCapacity; + + @Value("${threadPool.keepAliveSeconds}") + private int keepAliveSeconds; + + @Value("${business.wavePath}") + private String businessWavePath; + + @Value("${business.tempPath}") + private String businessTempPath; + +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/pojo/annotation/OperateInfo.java b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/annotation/OperateInfo.java new file mode 100644 index 000000000..48d1db836 --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/annotation/OperateInfo.java @@ -0,0 +1,30 @@ +package com.njcn.common.pojo.annotation; + +import com.njcn.common.pojo.constant.OperateType; +import com.njcn.common.pojo.enums.common.LogEnum; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年07月07日 15:51 + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +public @interface OperateInfo { + + /** + * 默认为业务事件类型,严重度为普通 + */ + LogEnum info() default LogEnum.BUSINESS_COMMON; + + /** + * 默认为查询操作类型 + */ + String operateType() default OperateType.QUERY; + +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/pojo/constant/LogInfo.java b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/constant/LogInfo.java new file mode 100644 index 000000000..d94c0ac50 --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/constant/LogInfo.java @@ -0,0 +1,22 @@ +package com.njcn.common.pojo.constant; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年07月07日 15:33 + */ +public interface LogInfo { + + String UNKNOWN_OPERATE = "未知业务"; + + String UNKNOWN_USER = "未知用户"; + + String UNKNOWN_IP = "未知IP地址"; + + String UNKNOWN_CLIENT = "未知客户端"; + + String UNKNOWN_SERVER = "未知服务"; + + String UNKNOWN_DEPT = "未知部门"; + +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/pojo/constant/OperateType.java b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/constant/OperateType.java new file mode 100644 index 000000000..fb55a62bb --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/constant/OperateType.java @@ -0,0 +1,31 @@ +package com.njcn.common.pojo.constant; + +/** + * 系统操作类型 + * + * @author hongawen + * @version 1.0.0 + * @date 2021年07月08日 17:56 + */ +public interface OperateType { + + String QUERY = "查询"; + + String ADD = "新增"; + + String DELETE = "删除"; + + String UPDATE = "更新"; + + String AUTHENTICATE = "认证"; + + String LOGOUT = "注销"; + + String UPLOAD = "上传"; + + String DOWNLOAD = "下载"; + + + + +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/pojo/constant/PatternRegex.java b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/constant/PatternRegex.java new file mode 100644 index 000000000..db76710e6 --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/constant/PatternRegex.java @@ -0,0 +1,250 @@ +package com.njcn.common.pojo.constant; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年05月19日 12:52 + */ +public interface PatternRegex { + + /** + * URL + */ + String URL_REGEX = "[a-zA-z]+://[^\\s]*"; + + /** + * 密码需要包含特殊字符字母数字,长度为8-16 + */ + String PASSWORD_REGEX = "^(?=.*[a-zA-Z])(?=.*\\d)(?=.*[@#_!$%^&*()?<>/|~,\\-+]).{8,16}$"; + + /** + * 手机的密码 + */ + String PASSWORD_PHONE_REGEX = "^.{6,18}$"; + + /** + * 用户名中英文,长度1-16 + */ + String USERNAME_REGEX = "^[\\u4e00-\\u9fffa-zA-Z]{1,16}$"; + + /** + * 概览配置界面名称 + */ + String HOMEPAGE_REGEX = "^[\\u4e00-\\u9fa5]{1,10}$"; + + /** + * 登录名只能输入3-16位的英文字母和数字 + */ + String LOGIN_NAME_REGEX = "^[a-zA-Z_]{1}[a-zA-Z0-9_]{2,15}$"; + + /** + * 手机号必须有11位,并且为数字,是正常的手机·号码开头 + */ + String PHONE_REGEX = "(?:0|86|\\+86)?1[3-9]\\d{9}"; + + /** + * 手机号码可以为空,如果输入手机号就要正则匹配 + */ + String PHONE_REGEX_OR_NULL = "^\\s{0}$|(?:0|86|\\+86)?1[3-9]\\d{9}"; + + /** + * 邮箱含有@ .在@后,以.com、.con结尾(qq,163等) + */ + String EMAIL_REGEX = "^([a-zA-Z0-9]+[_|_|.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|_|.]?)*[a-zA-Z0-9]+\\.(?:com|cn)$"; + + /** + * 邮箱可以为空,如果输入邮箱就要进行正则匹配,邮箱含有@ .在@后,以.com、.con结尾(qq,163等) + */ + String EMAIL_REGEX_OR_NULL = "^\\s{0}$|([a-zA-Z0-9]+[_|_|.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|_|.]?)*[a-zA-Z0-9]+\\.(?:com|cn)$"; + + /** + * IP v4 + */ + String IP_REGEX = "\\b((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\b"; + + /** + * 角色名由数字、字母组成且长度为2-50 + */ + String ROLE_REGEX = "^[a-zA-Z][a-zA-Z0-9]{2,50}$"; + + /** + * 部门名称由汉字组成,长度为0-20 + */ + String DEPT_NAME_REGEX = "^[\\u4e00-\\u9fa5]{1,20}$"; + + /** + * 字典名称包括中文、数字、字母、括号以及点号 + */ + String DIC_REGEX = "^[\\w\\u4E00-\\u9FA5()()_/、\\- ]+\\.?[\\w\\u4E00-\\u9FA5()()/]{0,125}$"; + + /** + * 密码有效期(月)1-3月 + */ + String PASS_MONTH_REGEX = "^[1-3]{1}$"; + + /** + * 密码错误次数 1-10次 + */ + String PASS_ERROR_REGEX = "^([1-9]|10)$"; + + /** + * 最大并发数 1-99次 + */ + String MAX_NUM_REGEX = "^([1-9]{1}|[0-9]{2})$"; + + /** + * 闲置用户_修改密码 6-12 + */ + String PASS_UPW_REGEX = "^([6-9]{1}|10|11|12)$"; + + /** + * 临时账户休眠 1-12 + */ + String FREE_MONTH_REGEX = "^([1-9]{1}|10|11|12)$"; + + /** + * 审计存储空间 1-2G + */ + String LOG_SIZE_REGEX = "^[1-2]{1}$"; + + /** + * 用户锁定时长20-60min + */ + String USER_LOCK_REGEX = "^[2-5][0-9]|60$"; + + /** + * 台账名称 前置机名称 供电公司 变电站 + */ + String DEV_NAME_REGEX = "[\\u4E00-\\u9FA5A-Za-z0-9ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ_\\s+\\#\\-]{1,32}$"; + + /** + * 浮点数 + */ + String FLOAT_REGEX = "[0-9]*(\\.?)[0-9]*"; + + /** + * 识别码秘钥 + */ + String SERIES_REGEX = "[^\\u4e00-\\u9fa5]{0,20}$"; + + /** + * ip分段 + */ + String SIP_REGEX = "[0-9]{1,3}$"; + + /** + * 端口号 + */ + String PORT_REGEX = "[0-9]{1,10}$"; + + /** + * 备注 + */ + String REMARK_REGEX = "[\\u4E00-\\u9FA5A-Za-z0-9_]{0,255}$"; + + /** + * 国网平台监测点号 + */ + String MONITOR_ID_REGEX = "[A-Za-z0-9]{0,255}$"; + + /** + * 变压器名称 + */ + String TRANS_NAME_REGEX = "^[0-9a-zA-Z\\u0391-\\uFFE5]{1,50}$"; + + /** + * 变压器策略名称 + */ + String TF_NAME_REGEX = "^[0-9a-zA-Z\\u0391-\\uFFE5]{1,16}$"; + + /** + * 字典类型名称 + */ + String TYPE_REGEX = "^[0-9a-zA-Z\\u0391-\\uFFE5]{1,100}$"; + + /** + * 描述64 + */ + String DES64_REGEX = "^.{0,64}$"; + + /** + * 描述200 + */ + String DES200_REGEX = "^.{0,200}$"; + + /** + * 描述500 + */ + String DES500_REGEX = "^.{0,500}$"; + + /** + * mac地址 + */ + String MAC_REGEX = "((?:[A-F0-9]{1,2}[:-]){5}[A-F0-9]{1,2})|(?:0x)(\\d{12})(?:.+ETHER)"; + + /** + * 流量套餐 + */ + String DATA_PLAN_REGEX = "[0-9]{0,6}$"; + + /** + * 十六进制颜色 + */ + String COLOR_REGEX = "^#([a-fA-F\\d]{3}|[a-fA-F\\d]{6})$"; + + /** + * 描述64 + */ + String DES10_REGEX = "^.{1,10}$"; + + /** + * 大于0的正整数 + */ + String POSITIVE = "^[0-9].*$"; + + /** + * 资源名称 + */ + String FUNCTION_NAME = "^[\\u4e00-\\u9fa5A-Za-z0-9_]+$"; + + /** + * 资源路径 + */ + String FUNCTION_URL = "^[A-Za-z0-9\\/\\-]+$"; + + /** + * 匹配数字、字母、中文 + */ + String NORMAL = "^[A-Za-z0-9\\u4e00-\\u9fa5]+$"; + + + /** + * 任意字符,长度在1-20位,常用于名称、编码等常规录入 + */ + String ALL_CHAR_1_20 = "^[-_A-Za-z0-9\\u4e00-\\u9fa5]{1,20}$"; + + /** + * uuid 32位正则,数字 、 字母 + */ + String SYSTEM_ID = "^[A-Za-z0-9]{32}$"; + + /** + * 1-32位正则,数字 、 字母 + */ + String SYSTEMS_ID = "^[A-Za-z0-9]{1,32}$"; + + /** + * decimal(10,6) 10位数字,小数点最多6位(坐标) + */ + String COORDINATE="^([0-9]{1,4})([.][0-9]{1,6})?$"; + + /** + * 时间正则(日期) + */ + String TIME_FORMAT = "^$|(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)$"; + + /** + * 时间正则(秒) + */ + String TIME_SECOND_FORMAT = "^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29))\\s+([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$"; +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/pojo/constant/SecurityConstants.java b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/constant/SecurityConstants.java new file mode 100644 index 000000000..5ab308c66 --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/constant/SecurityConstants.java @@ -0,0 +1,148 @@ +package com.njcn.common.pojo.constant; + +/** + * 认证业务用到的常量定义 + * + * @author hongawen + */ +public interface SecurityConstants { + + /** + * 认证请求头key + * 1. 获取token时,Authorization的内容是client:secret的base64的密文 + * 2. 已经认证后,Authorization的内容是access_token内容 + */ + String AUTHORIZATION_KEY = "Authorization"; + + /** + * JWT令牌前缀 + */ + String AUTHORIZATION_PREFIX = "bearer "; + + /** + * Basic认证前缀 + */ + String BASIC_PREFIX = "Basic "; + + /** + * JWT载体key + */ + String JWT_PAYLOAD_KEY = "payload"; + + /** + * JWT ID 唯一标识 + */ + String JWT_JTI = "jti"; + + /** + * JWT ID 超时key + */ + String JWT_EXP = "exp"; + + /** + * 认证成功后,返回信息包含的内容- + */ + String USER_INDEX_KEY = "userIndex"; + String USER_TYPE = "userType"; + String USER_NAME_KEY = "user_name"; + String USER_NICKNAME_KEY = "nickname"; + String CLIENT_ID_KEY = "client_id"; + String DEPT_INDEX_KEY = "deptIndex"; + + /** + * 认证方式 + */ + String AUTHENTICATION_METHOD = "authenticationMethod"; + + /** + * JWT存储权限前缀 + */ + String AUTHORITY_PREFIX = "ROLE_"; + + /** + * JWT存储权限属性 + */ + String JWT_AUTHORITIES_KEY = "authorities"; + + String GRANT_TYPE_KEY = "grant_type"; + + String REFRESH_TOKEN_KEY = "refresh_token"; + + /** + * 黑名单token前缀 + */ + String TOKEN_BLACKLIST_PREFIX = "auth:token:black:"; + + /** + * 认证后token前缀 + */ + String TOKEN_ONLINE_PREFIX = "auth:token:online:"; + + + /** + * 真实客户端IP地址 + */ + String REQUEST_HEADER_KEY_CLIENT_REAL_IP = "realClientIp"; + + + /** + * 认证需要的各项参数名 + */ + String GRANT_TYPE = "grant_type"; + String CLIENT_ID = "client_id"; + String CLIENT_SECRET = "client_secret"; + String REFRESH_TOKEN = "refresh_token"; + String USERNAME = "username"; + String PASSWORD = "password"; + String IMAGE_CODE = "imageCode"; + + + /** + * 认证阶段保存的用户登录名 + */ + String AUTHENTICATE_USERNAME = "authenticateUserName"; + + /** + * 上游服务器模块名称 + */ + String SERVER_NAME = "serverName"; + + + /** + * 接口文档 Knife4j 测试客户端ID + */ + String TEST_CLIENT_ID = "client"; + + + /** + * 授权码模式 + */ + String GRANT_AUTHORIZATION_CODE = "authorization_code"; + + /** + * 验证码授权模式 + */ + String GRANT_CAPTCHA = "captcha"; + + /** + * 密码模式 + */ + String GRANT_PASSWORD = "password"; + + /** + * 刷新token模式 + */ + String GRANT_REFRESH_TOKEN = "refresh_token"; + + /** + * 短信模式 + */ + String GRANT_SMS_CODE = "sms_code"; + + /** + * 微信模式 + */ + String GRANT_WECHAT = "wechat"; + + +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/pojo/constant/ServerInfo.java b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/constant/ServerInfo.java new file mode 100644 index 000000000..b263ce89d --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/constant/ServerInfo.java @@ -0,0 +1,26 @@ +package com.njcn.common.pojo.constant; + + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年12月15日 13:39 + */ +public interface ServerInfo { + + String GATEWAY = "pqs-gateway"; + String OAUTH = "pqs-auth"; + String APP = "pqs-app"; + String SUPERVISE = "pqs-supervise"; + String COMMON = "pqs-common"; + String DEVICE = "device-boot"; + String EVENT = "event-boot"; + String HARMONIC = "harmonic-boot"; + String REPORT = "report-boot"; + String SYSTEM = "system-boot"; + String ENERGY = "energy-boot"; + String JOB_ADMIN = "job-admin"; + String USER = "user-boot"; + String JOB = "job-admin"; + +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/LogInfoDTO.java b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/LogInfoDTO.java new file mode 100644 index 000000000..e130e5268 --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/LogInfoDTO.java @@ -0,0 +1,36 @@ +package com.njcn.common.pojo.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年07月08日 20:03 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class LogInfoDTO { + + /** + * 登录名 + */ + private String userName; + + private String operate; + + private String result; + + private String ip; + + private String type; + + private String level; + + private String operateType; + + private String serviceName; + +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/SimpleDTO.java b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/SimpleDTO.java new file mode 100644 index 000000000..3e7a4ecd9 --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/SimpleDTO.java @@ -0,0 +1,27 @@ +package com.njcn.common.pojo.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2022年03月18日 12:30 + */ +@Data +public class SimpleDTO implements Serializable { + + @ApiModelProperty(name = "name", value = "名称") + private String name; + + @ApiModelProperty(name = "id", value = "索引") + private String id; + + @ApiModelProperty(name = "code", value = "编码") + private String code; + + private Integer sort; + +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/SimpleTreeDTO.java b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/SimpleTreeDTO.java new file mode 100644 index 000000000..0785c99e7 --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/SimpleTreeDTO.java @@ -0,0 +1,18 @@ +package com.njcn.common.pojo.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2022年03月24日 16:02 + */ +@Data +public class SimpleTreeDTO extends SimpleDTO implements Serializable { + + private List children; + +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/UserTokenInfo.java b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/UserTokenInfo.java new file mode 100644 index 000000000..4f27e71ed --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/UserTokenInfo.java @@ -0,0 +1,41 @@ +package com.njcn.common.pojo.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2022年03月11日 11:29 + */ +@Data +public class UserTokenInfo implements Serializable { + + /** + * 通行token + */ + private String accessTokenJti; + + /** + * 刷新token + */ + private String refreshToken; + + + /** + * refreshToken的生命周期结点 + */ + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + @JsonSerialize(using = LocalDateTimeSerializer.class) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime refreshTokenExpire; + + +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/AnalogDTO.java b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/AnalogDTO.java new file mode 100644 index 000000000..07ea390f7 --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/AnalogDTO.java @@ -0,0 +1,46 @@ +package com.njcn.common.pojo.dto.wave; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * @author yxb + * @version 1.0.0 + * @date 2022年06月02日 20:03 + * 模拟量通道记录类 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class AnalogDTO implements Serializable { + + // 通道序号 + private Integer nIndex; + // 通道名称 + private String szChannleName; + // 相位名称 + private String szPhasicName; + // 监视的通道名称 + private String szMonitoredChannleName; + // 通道的单位 + private String szUnitName; + // 通道的系数 + private Float fCoefficent; + // 通道的便宜量 + private Float fOffset; + // 起始采样时间的偏移量 + private Float fTimeOffset; + // 采样值的最小值 + private Integer nMin; + // 采样值的最大值 + private Integer nMax; + // 一次变比 + private Float fPrimary; + // 二次变比 + private Float fSecondary; + // 一次值还是二次值标志 + private String szValueType; +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/ComtradeCfgDTO.java b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/ComtradeCfgDTO.java new file mode 100644 index 000000000..1d9a21f5a --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/ComtradeCfgDTO.java @@ -0,0 +1,46 @@ +package com.njcn.common.pojo.dto.wave; + +import cn.hutool.core.date.DateTime; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * @author yxb + * @version 1.0.0 + * @date 2022年06月02日 20:03 + * CFG配置文件总类 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class ComtradeCfgDTO implements Serializable { + private Integer nChannelNum; + private Integer nPhasic;// 模拟量通道的个数 yxb 2020-12-15 + private Integer nAnalogNum;// 模拟量通道的个数 WW 2013-05-15 + private Integer nDigitalNum;// 数字量通道的个数 WW 2013-05-15 + private Date timeStart;// 暂态记录时间 yxb 2022-06-06 + private Date timeTrige;// 暂态触发时间 yxb 2022-06-06 + + private List lstAnalogDTO;//模拟量通道记录 + private List lstDigitalDTO;//数字量通道记录 + + public Integer nRates;//对应采样次数 + public List lstRate;//采样率合集 + + // add by sw 暂降触发时间 + private Date firstTime; // 暂降触发第一次 + private Integer firstMs; // 暂降触发第一次毫秒 + + // 波形前推周波束 + private Integer nPush = 0; + // 最终采样率,计算的时候只用一个采样率 + private Long finalSampleRate; + // 整个波形大小 + private Long nAllWaveNum = 0l; + +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/DigitalDTO.java b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/DigitalDTO.java new file mode 100644 index 000000000..77ab65333 --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/DigitalDTO.java @@ -0,0 +1,30 @@ +package com.njcn.common.pojo.dto.wave; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * @author yxb + * @version 1.0.0 + * @date 2022年06月02日 20:03 + * 数字量通道记录类 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class DigitalDTO implements Serializable { + + // 通道序号 + private Integer nIndex; + // 通道名称 + private String szChannleName; + // 相位名称 + private String szPhasicName; + // 监视的通道名称 + private String szMonitoredChannleName; + // 通道的单位 + private Integer Initial; +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/EigenvalueDTO.java b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/EigenvalueDTO.java new file mode 100644 index 000000000..fdcb25227 --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/EigenvalueDTO.java @@ -0,0 +1,29 @@ +package com.njcn.common.pojo.dto.wave; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * @author yxb + * @version 1.0.0 + * @date 2022年06月02日 20:03 + * 特征值计算类 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class EigenvalueDTO implements Serializable { + + //是特征幅值(残余电压百分比) + private float amplitude; + //是特征幅值(残余电压) + private float residualVoltage; + //额定定压(动态电压) + private float ratedVoltage; + //持续时间 + private float durationTime; +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/MutationDTO.java b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/MutationDTO.java new file mode 100644 index 000000000..dde936d01 --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/MutationDTO.java @@ -0,0 +1,27 @@ +package com.njcn.common.pojo.dto.wave; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * @author yxb + * @version 1.0.0 + * @date 2022年06月02日 20:03 + * 突变量计算类 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class MutationDTO implements Serializable { + + private List> listRms_Offline = new ArrayList<>();//离线数据RMS有效值数据 + private List> listTBL_Offline = new ArrayList<>();//离线数据突变量数据 + private double fMinMagA = 99999d; + private double fMinMagB = 99999d; + private double fMinMagC = 99999d; +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/RateDTO.java b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/RateDTO.java new file mode 100644 index 000000000..cd67cd677 --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/RateDTO.java @@ -0,0 +1,24 @@ +package com.njcn.common.pojo.dto.wave; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * @author yxb + * @version 1.0.0 + * @date 2022年06月02日 20:03 + * 采样率类 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class RateDTO implements Serializable { + + // 1秒钟内的采样点数 + private Long nOneSample; + // 总采样点数 + private Long nSampleNum; +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/SamplingDTO.java b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/SamplingDTO.java new file mode 100644 index 000000000..36c4a5e6c --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/SamplingDTO.java @@ -0,0 +1,34 @@ +package com.njcn.common.pojo.dto.wave; + + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * @author yxb + * @version 1.0.0 + * @date 2022年06月02日 20:03 + * 采样值结构类 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class SamplingDTO implements Serializable { + + // 数据点时间 + private String szTime; + // 数据点序号 + private Integer nIndex; + // Integer nValueNum; WW 2013-05-15 + // 模拟量数据个数 + private Integer nAnalogValueNum; + // 数字量数据个数 + private Integer nDigitalValueNum; + // 数据区 float fValue[8]; + private List fValue;// WW 2013-05-15 原来的8通道也是仅考虑了单路的情况,如果遇到多路这里会超出 + private List DigitalValue;// WW 2013-05-15 +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/SamplingsDTO.java b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/SamplingsDTO.java new file mode 100644 index 000000000..65f86d90f --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/SamplingsDTO.java @@ -0,0 +1,25 @@ +package com.njcn.common.pojo.dto.wave; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * @author yxb + * @version 1.0.0 + * @date 2022年06月02日 20:03 + * 采样值结构类 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class SamplingsDTO implements Serializable { + + // 数据个数 + private Integer nValueNum; + // 数据区 + private List lstSamplingDTO; +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/WaveDataDTO.java b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/WaveDataDTO.java new file mode 100644 index 000000000..4b8d3f8a3 --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/dto/wave/WaveDataDTO.java @@ -0,0 +1,31 @@ +package com.njcn.common.pojo.dto.wave; + + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * @author yxb + * @version 1.0.0 + * @date 2022年06月02日 20:03 + * 返回波形数据类 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class WaveDataDTO implements Serializable { + + private ComtradeCfgDTO comtradeCfgDTO;//CFG实体类 + //波形对应的标题 + private List waveTitle; + //波形对应的值 + private List> listWaveData; + //波形RMS值 + private List> listRmsData; + //波形对应的相别数量 + private Integer iPhasic; +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/pojo/enums/auth/AuthenticationMethodEnum.java b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/enums/auth/AuthenticationMethodEnum.java new file mode 100644 index 000000000..82064c14e --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/enums/auth/AuthenticationMethodEnum.java @@ -0,0 +1,39 @@ +package com.njcn.common.pojo.enums.auth; + +import lombok.Getter; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年12月15日 15:55 + */ +@Getter +public enum AuthenticationMethodEnum { + + /** + * 认证的方式 + */ + USERNAME("username", "用户名"), + MOBILE("mobile", "手机号"), + OPENID("openId", "开放式认证系统唯一身份标识"); + + private final String value; + + private final String label; + + AuthenticationMethodEnum(String value, String label) { + this.value = value; + this.label = label; + } + + public static AuthenticationMethodEnum getByValue(String value) { + AuthenticationMethodEnum authenticationMethodEnum = null; + for (AuthenticationMethodEnum item : values()) { + if (item.getValue().equals(value)) { + authenticationMethodEnum = item; + } + } + return authenticationMethodEnum; + } + +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/pojo/enums/auth/ClientEnum.java b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/enums/auth/ClientEnum.java new file mode 100644 index 000000000..3ceb29e4a --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/enums/auth/ClientEnum.java @@ -0,0 +1,40 @@ +package com.njcn.common.pojo.enums.auth; + +import lombok.Getter; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2022年02月10日 14:50 + */ +@Getter +public enum ClientEnum { + + /** + * 客户端,目前仅分为web端、大屏端、移动端 + */ + WEB_CLIENT("njcn", "web"), + WEB_CLIENT_TEST("njcntest", "web"), + SCREEN_CLIENT("screen", "screen"), + APP_CLIENT("app", "app"), + WE_CHAT_APP_CLIENT("wx", "app"); + + private final String clientId; + + private final String clientType; + + ClientEnum(String clientId, String clientType) { + this.clientId = clientId; + this.clientType = clientType; + } + + public static String getClientType(String clientId) { + for (ClientEnum item : values()) { + if (item.getClientId().equals(clientId)) { + return item.getClientType(); + } + } + //默认为web端 + return "web"; + } +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/pojo/enums/auth/PasswordEncoderTypeEnum.java b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/enums/auth/PasswordEncoderTypeEnum.java new file mode 100644 index 000000000..a38e80605 --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/enums/auth/PasswordEncoderTypeEnum.java @@ -0,0 +1,28 @@ +package com.njcn.common.pojo.enums.auth; + +import lombok.Getter; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年12月15日 14:03 + */ +@Getter +public enum PasswordEncoderTypeEnum { + + /** + * 密码加密类型 + */ + BCRYPT("{bcrypt}","BCRYPT加密"), + + NOOP("{noop}","无加密明文"); + + private final String prefix; + + private final String desc; + + PasswordEncoderTypeEnum(String prefix, String desc){ + this.prefix=prefix; + this.desc = desc; + } +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/pojo/enums/common/DataStateEnum.java b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/enums/common/DataStateEnum.java new file mode 100644 index 000000000..5ec5403c7 --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/enums/common/DataStateEnum.java @@ -0,0 +1,31 @@ +package com.njcn.common.pojo.enums.common; + +import lombok.Getter; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年12月15日 11:37 + */ +@Getter +public enum DataStateEnum { + /** + * 正常 + */ + ENABLE(1, "正常"), + + /** + * 删除 + */ + DELETED(0, "删除"); + + private final Integer code; + + private final String message; + + DataStateEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/pojo/enums/common/LogEnum.java b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/enums/common/LogEnum.java new file mode 100644 index 000000000..6874613df --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/enums/common/LogEnum.java @@ -0,0 +1,36 @@ +package com.njcn.common.pojo.enums.common; + +import lombok.Getter; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年07月07日 15:37 + */ +@Getter +public enum LogEnum { + + /** + * 日志类型分为业务事件、系统事件 + * 严重度分为 严重 中等 普通 + */ + BUSINESS_SERIOUS("业务事件", "严重"), + BUSINESS_MEDIUM("业务事件", "中等"), + BUSINESS_COMMON("业务事件", "普通"), + + SYSTEM_SERIOUS("系统事件", "严重"), + SYSTEM_MEDIUM("系统事件", "中等"), + SYSTEM_COMMON("系统事件", "普通"); + + + private final String operateType; + + private final String operateLevel; + + LogEnum(String operateType, String operateLevel) { + this.operateType = operateType; + this.operateLevel = operateLevel; + } + + +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/pojo/enums/common/ServerEnum.java b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/enums/common/ServerEnum.java new file mode 100644 index 000000000..00abad528 --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/enums/common/ServerEnum.java @@ -0,0 +1,36 @@ +package com.njcn.common.pojo.enums.common; + +import lombok.Getter; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年09月06日 14:00 + */ +@Getter +public enum ServerEnum { + + /** + * 微服务模块的枚举信息 + */ + APP("pqs-app", "APP服务模块"), + DEVICE("device-boot", "终端服务模块"), + EVENT("event-boot", "暂降服务模块"), + GATEWAY("pqs-gateway", "网关服务模块"), + HARMONIC("harmonic-boot", "谐波监测服务模块"), + OAUTH("pqs-auth", "认证服务模块"), + REPORT("report-boot", "报表服务模块"), + SUPERVISE("pqs-supervise", "技术监督管理服务模块"), + SYSTEM("system-boot", "系统配置服务模块"), + USER("user-boot", "用户服务模块"), + COMMON("pqs-common", "通用服务模块"); + + private final String name; + + private final String serverInfo; + + ServerEnum(String name, String serverInfo) { + this.name = name; + this.serverInfo = serverInfo; + } +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/pojo/enums/response/CommonResponseEnum.java b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/enums/response/CommonResponseEnum.java new file mode 100644 index 000000000..a6a6acc30 --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/enums/response/CommonResponseEnum.java @@ -0,0 +1,92 @@ +package com.njcn.common.pojo.enums.response; + +import lombok.Getter; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年04月13日 10:33 + */ +@Getter +public enum CommonResponseEnum { + + /** + * A0000 ~ A0099 作用于通用业务枚举 + * 通用业务的响应枚举 + */ + SUCCESS("A0000", "成功"), + + NO_DATA("A0001", "数据为空"), + + FAIL("A0002", "失败"), + + INTERNAL_ERROR("A0003", "系统内部异常"), + + SERVICE_FALLBACK("A0004", "服务访问降级"), + + INVALID_PARAMETER("A0005", "请求参数非法"), + + INVALID_MEDIA("A0006", "请求参数媒体不支持"), + + ENUM_ERROR("A0007", "枚举解析异常"), + + NULL_POINTER_EXCEPTION("A0008", "空指针异常"), + + ARITHMETIC_EXCEPTION("A0009", "算数运算异常"), + + CLASS_CAST_EXCEPTION("A0010", "类型转换异常"), + + INDEX_OUT_OF_BOUNDS_EXCEPTION("A0011", "索引下标越界异常"), + + HTTP_MEDIA_TYPE_NOT_SUPPORTED_EXCEPTION("A0012", "请求中参数的媒体方式不支持"), + + METHOD_ARGUMENT_NOT_VALID_EXCEPTION("A0013", "参数校验异常"), + + ILLEGAL_ARGUMENT_EXCEPTION("A0014", "参数校验异常"), + + SM2_CIPHER_ERROR("A0015", "SM2获取秘钥对异常"), + + UN_DECLARE("A0016", "未声明异常"), + + DIC_DATA("A0017", "获取字典数据失败"), + + GET_MQTT_CLIENT_FAIL("A0018", "获取MQTT客户端失败"), + + NO_MQTT_HANDLER("A0019", "MQTT中没有处理器Handler"), + + NO_MQTT_PRODUCER("A0020", "MQTT没有生产者producer"), + + JSON_CONVERT_EXCEPTION("A0021", "JSON转换异常"), + + TOKEN_EXPIRE_JWT("A0024", "token已过期"), + + PARSE_TOKEN_ERROR("A0025", "token解析异常"), + + REFLECT_METHOD_EXCEPTION("A0026", "反射方法获取属性值异常"), + + REQUEST_EMPTY("A0027", "当前请求web环境为空"), + + EXPORT_FILE_ERROR("A00551","数据完整报表下载异常"), + + USER_RESPONSE_ENUM("A0090", "用户响应枚举类型"), + + GATEWAY_RESPONSE_ENUM("A0091", "网关响应枚举类型"), + + DEVICE_RESPONSE_ENUM("A0092", "终端响应枚举类型"), + + SYSTEM_RESPONSE_ENUM("A0093", "系统响应枚举类型"), + + DELETE_PID_EXIST("A0094", "存在子节点"), + + DELETE_PID_UNEXIST("A0095", "不存在子节点"), + ; + + private final String code; + + private final String message; + + CommonResponseEnum(String code, String message) { + this.code = code; + this.message = message; + } +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/pojo/exception/BusinessException.java b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/exception/BusinessException.java new file mode 100644 index 000000000..6c7bd1f9a --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/exception/BusinessException.java @@ -0,0 +1,83 @@ +package com.njcn.common.pojo.exception; + +import com.njcn.common.pojo.response.HttpResult; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年04月20日 14:48 + */ +@Data +@Slf4j +@NoArgsConstructor +public class BusinessException extends RuntimeException { + + private static final long serialVersionUID = -1; + + public static final String GET_CODE_METHOD = "getCode"; + + public static final String GET_MESSAGE_METHOD = "getMessage"; + + /** + * 异常码 + */ + private String code; + + /** + * 异常提示信息 + */ + private String message; + + /** + * 构造器内的枚举 + */ + private Enum anEnum; + + /** + * openfeign请求,返回的非常规结果集 + */ + private HttpResult result; + + public BusinessException(Enum eEnum) { + anEnum = eEnum; + try { + Method codeMethod = eEnum.getClass().getMethod(GET_CODE_METHOD); + Method messageMethod = eEnum.getClass().getMethod(GET_MESSAGE_METHOD); + this.code = (String) codeMethod.invoke(eEnum); + this.message = (String) messageMethod.invoke(eEnum); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); + } + } + + /** + * 针对批量操作的业务返回 + * + * @author cdf + * @date 2021/7/7 + */ + public BusinessException(Enum eEnum, String msg) { + anEnum = eEnum; + try { + Method codeMethod = eEnum.getClass().getMethod(GET_CODE_METHOD); + Method messageMethod = eEnum.getClass().getMethod(GET_MESSAGE_METHOD); + this.code = (String) codeMethod.invoke(eEnum); + this.message = (String) messageMethod.invoke(eEnum); + this.message = this.message.concat(": " + msg); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); + } + } + + + public BusinessException(HttpResult result) { + this.result = result; + } + +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/pojo/response/HttpResult.java b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/response/HttpResult.java new file mode 100644 index 000000000..b150ed00d --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/pojo/response/HttpResult.java @@ -0,0 +1,44 @@ +package com.njcn.common.pojo.response; + +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.io.Serializable; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年03月25日 15:38 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class HttpResult implements Serializable { + + /**状态码*/ + private String code; + + /**回执信息*/ + private String message; + + /**响应数据*/ + private T data; + + public HttpResult(String code, String message) { + this.code = code; + this.message = message; + } + + public HttpResult(Integer code, String message) { + this.code = String.valueOf(code); + this.message = message; + } + + public HttpResult(T content) { + this.code = CommonResponseEnum.SUCCESS.getCode(); + this.data = content; + } +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/utils/EnumUtils.java b/pqs-common/common-core/src/main/java/com/njcn/common/utils/EnumUtils.java new file mode 100644 index 000000000..fef00cd43 --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/utils/EnumUtils.java @@ -0,0 +1,134 @@ +package com.njcn.common.utils; + + +import com.njcn.common.pojo.enums.common.ServerEnum; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.exception.BusinessException; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.math.BigDecimal; +import java.util.Objects; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年05月26日 11:44 + */ +public class EnumUtils { + + private final static int + COMMON_ENUM_FLOOR = 0 + ,COMMON_ENUM_CEIL = 99 + ,USER_ENUM_FLOOR = 100 + ,USER_ENUM_CEIL = 199 + ,GATEWAY_ENUM_FLOOR = 200 + ,GATEWAY_ENUM_CEIL = 249 + ,DEVICE_ENUM_FLOOR = 250 + ,DEVICE_ENUM_CEIL = 349 + ,SYSTEM_ENUM_FLOOR = 350 + ,SYSTEM_ENUM_CEIL = 449 + ,HARMONIC_ENUM_CEIL = 450 + ,HARMONIC_ENUM_FLOOR = 549; + + + + /** + * 值映射为枚举 + * + * @param enumClass 枚举类 + * @param value 枚举值 + * @param method 取值方法 + * @param 对应枚举 + */ + public static > E valueOf(Class enumClass, Object value, Method method) { + E[] es = enumClass.getEnumConstants(); + for (E enumTemp : es) { + Object evalue; + try { + method.setAccessible(true); + evalue = method.invoke(enumTemp); + } catch (IllegalAccessException | InvocationTargetException e1) { + throw new BusinessException(CommonResponseEnum.ENUM_ERROR); + } + if (value instanceof Number && evalue instanceof Number + && new BigDecimal(String.valueOf(value)).compareTo(new BigDecimal(String.valueOf(evalue))) == 0) { + return enumTemp; + } + if (Objects.equals(evalue, value)) { + return enumTemp; + } + } + return null; + } + + + /** + * 根据枚举code获取CommonResponseEnum实例 + */ + public static CommonResponseEnum getCommonResponseEnumByCode(String code) { + code = getCode(code); + CommonResponseEnum commonResponseEnum; + try { + commonResponseEnum = valueOf(CommonResponseEnum.class, code, CommonResponseEnum.class.getMethod(BusinessException.GET_CODE_METHOD)); + return Objects.isNull(commonResponseEnum) ? CommonResponseEnum.INTERNAL_ERROR : commonResponseEnum; + } catch (NoSuchMethodException e) { + throw new BusinessException(CommonResponseEnum.INTERNAL_ERROR); + } + } + + /** + * 根据枚举message获取CommonResponseEnum实例 + */ + public static CommonResponseEnum getCommonResponseEnumByMessage(String message) { + CommonResponseEnum commonResponseEnum; + try { + commonResponseEnum = valueOf(CommonResponseEnum.class, message, CommonResponseEnum.class.getMethod(BusinessException.GET_MESSAGE_METHOD)); + return Objects.isNull(commonResponseEnum) ? CommonResponseEnum.INTERNAL_ERROR : commonResponseEnum; + } catch (NoSuchMethodException e) { + throw new BusinessException(CommonResponseEnum.INTERNAL_ERROR); + } + } + + /** + * 获取UserStatusEnum实例 + */ + public static ServerEnum getServerEnumByName(Object value) { + ServerEnum serverEnum; + try { + serverEnum = EnumUtils.valueOf(ServerEnum.class, value, ServerEnum.class.getMethod("getName")); + return Objects.isNull(serverEnum) ? ServerEnum.COMMON : serverEnum; + } catch (NoSuchMethodException e) { + throw new BusinessException(CommonResponseEnum.INTERNAL_ERROR); + } + } + + + /** + * 如何通过枚举code获取响应的枚举类型 + * 比如 A0000 ~ A0099 通用业务枚举 + * 比如 A0100 ~ A0199 用户业务枚举 + * 比如 A0200 ~ A0249 网关业务枚举 + * 比如 A0250 ~ A0349 终端业务枚举 + * 比如 A0350 ~ A0449 系统业务枚举 + */ + private static String getCode(String originalCode){ + int code = Integer.parseInt(originalCode.substring(1)); + if(PubUtils.rangeInDefined(code,0,99)){ + return originalCode; + }else if(PubUtils.rangeInDefined(code,100,199)){ + return CommonResponseEnum.USER_RESPONSE_ENUM.getCode(); + }else if(PubUtils.rangeInDefined(code,200,249)){ + return CommonResponseEnum.GATEWAY_RESPONSE_ENUM.getCode(); + }else if(PubUtils.rangeInDefined(code,250,349)){ + return CommonResponseEnum.DEVICE_RESPONSE_ENUM.getCode(); + }else if(PubUtils.rangeInDefined(code,350,449)){ + return CommonResponseEnum.SYSTEM_RESPONSE_ENUM.getCode(); + }else{ + return originalCode; + } + } + + + +} \ No newline at end of file diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/utils/ExceptionUtil.java b/pqs-common/common-core/src/main/java/com/njcn/common/utils/ExceptionUtil.java new file mode 100644 index 000000000..3073c5851 --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/utils/ExceptionUtil.java @@ -0,0 +1,108 @@ +package com.njcn.common.utils; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.CharUtil; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年04月21日 09:16 + */ +public class ExceptionUtil { + + private static final String PACKAGE_PREFIX = "com.njcn"; + + private static final String CONTROLLER = "controller"; + + /** + * 遍历出当前异常在本服务中栈堆信息----异常发生最初位置 + * 本服务所有的包名均需要以com.njcn为前缀 + * 该前缀不需要做配置管理,通常项目创建之初约定完便可。 + */ + public static String getExceptionServerStackInfo(Exception exception) { + StackTraceElement[] stackTrace = exception.getStackTrace(); + List originalStackTraceElements = Arrays.asList(stackTrace); + //遍历出本服务的栈堆信息 + List stackTraceElements = originalStackTraceElements.stream().filter(stackInfo -> stackInfo.getClassName().contains(PACKAGE_PREFIX)).collect(Collectors.toList()); + if (CollectionUtil.isNotEmpty(stackTraceElements)) { + return stackTraceElements.get(0).toString(); + } else if (CollectionUtil.isNotEmpty(originalStackTraceElements)) { + return originalStackTraceElements.get(0).toString(); + } + return "未找到当前异常的堆栈信息"; + } + + + /** + * 遍历出当前异常在本服务中栈堆信息----堆栈的所有信息 + * 本服务所有的包名均需要以com.njcn为前缀 + * 该前缀不需要做配置管理,通常项目创建之初约定完便可。 + */ + public static List getAllExceptionServerStackInfo(Exception exception) { + StackTraceElement[] stackTrace = exception.getStackTrace(); + List originalStackTraceElements = Arrays.asList(stackTrace); + //遍历出本服务的栈堆信息 + List stackTraceElements = originalStackTraceElements.stream().filter(stackInfo -> stackInfo.getClassName().contains(PACKAGE_PREFIX)).collect(Collectors.toList()); + if (CollectionUtil.isNotEmpty(stackTraceElements)) { + return stackTraceElements.stream().map(StackTraceElement::toString).collect(Collectors.toList()); + } else if (CollectionUtil.isNotEmpty(originalStackTraceElements)) { + return originalStackTraceElements.stream().map(StackTraceElement::toString).collect(Collectors.toList()); + } + List noStackInfos = new ArrayList<>(); + noStackInfos.add("未找到当前异常的堆栈信息"); + return noStackInfos; + } + + /** + * 遍历出当前异常堆栈的所有信息 + * 本服务所有的包名均需要以com.njcn为前缀 + * 该前缀不需要做配置管理,通常项目创建之初约定完便可。 + */ + public static List getAllExceptionStackInfo(Exception exception) { + StackTraceElement[] stackTrace = exception.getStackTrace(); + List originalStackTraceElements = Arrays.asList(stackTrace); + if (CollectionUtil.isNotEmpty(originalStackTraceElements)) { + return originalStackTraceElements.stream().map(StackTraceElement::toString).collect(Collectors.toList()); + } + List noStackInfos = new ArrayList<>(); + noStackInfos.add("未找到当前异常的堆栈信息"); + return noStackInfos; + } + + /** + * 遍历异常信息栈,获取信息栈中第一个出现的controller以及方法名称 + * 用于反射获取注解内容,比如方法名,操作类型,操作严重度 + *

+ * 实际情况可能会出现没有controller入口的情况导致的异常,比如网关gateway内所有请求 + */ + public static List getFirstControllerAndMethodName(Exception exception) { + List controllerInfo = new ArrayList<>(); + StackTraceElement[] stackTraces = exception.getStackTrace(); + List stackTraceElements = Stream.of(stackTraces) + .filter(stackInfo -> stackInfo.getClassName().contains(PACKAGE_PREFIX) && stackInfo.getClassName().contains(CONTROLLER)) + .collect(Collectors.toList()); + if (CollectionUtil.isNotEmpty(stackTraceElements)) { + StackTraceElement stackTraceElement = stackTraceElements.get(0); + String stackInfo = stackTraceElement.toString(); + + String packageInfo = stackInfo.substring(stackInfo.indexOf(PACKAGE_PREFIX)); + packageInfo = packageInfo.substring(0, packageInfo.indexOf("(")); + String controllerName = packageInfo.substring(0, packageInfo.lastIndexOf(CharUtil.DOT)); + String methodName = packageInfo.substring(packageInfo.lastIndexOf(CharUtil.DOT) + 1); + if(methodName.indexOf('$')>0){ + methodName = methodName.substring(0, methodName.indexOf('$')); + } + Collections.addAll(controllerInfo, controllerName, methodName); + } + return controllerInfo; + } + + +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/utils/HttpResultUtil.java b/pqs-common/common-core/src/main/java/com/njcn/common/utils/HttpResultUtil.java new file mode 100644 index 000000000..324d2e6f7 --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/utils/HttpResultUtil.java @@ -0,0 +1,45 @@ +package com.njcn.common.utils; + +import cn.hutool.core.text.StrFormatter; +import cn.hutool.core.util.StrUtil; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.exception.BusinessException; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年06月10日 13:42 + */ +public class HttpResultUtil { + + /** + * 组装结果集 + */ + public static HttpResult assembleResult(String code, T result, String message) { + HttpResult httpResult = new HttpResult<>(); + httpResult.setCode(code); + httpResult.setMessage(message); + httpResult.setData(result); + return httpResult; + } + + /** + * 组装通用结果集 + */ + public static HttpResult assembleCommonResponseResult(CommonResponseEnum responseEnum, T result, String methodDescribe) { + String message = responseEnum.getMessage(); + if (responseEnum.equals(CommonResponseEnum.METHOD_ARGUMENT_NOT_VALID_EXCEPTION)) { + message = (String) result; + } + return assembleResult(responseEnum.getCode(), result, StrFormatter.format("{}{}{}", methodDescribe, StrUtil.C_COMMA, message)); + } + + /** + * 业务异常组装结果集 + */ + public static HttpResult assembleBusinessExceptionResult(BusinessException businessException, T result, String methodDescribe) { + return assembleResult(businessException.getCode(), result, StrFormatter.format("{}{}{}", methodDescribe, StrUtil.C_COMMA, businessException.getMessage())); + } + +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/utils/LogUtil.java b/pqs-common/common-core/src/main/java/com/njcn/common/utils/LogUtil.java new file mode 100644 index 000000000..69f7dc91a --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/utils/LogUtil.java @@ -0,0 +1,53 @@ +package com.njcn.common.utils; + +import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; + +import java.util.List; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年03月25日 16:31 + */ +@Slf4j +public class LogUtil { + + /** + * 将判断是否开启debug模式,抽取单独的方法,必要时查看敏感信息 + * + * @param log 日志输出器 + */ + public static void njcnDebug(Logger log, String format, Object... args) { + if (log.isDebugEnabled()) { + log.info(format, args); + } + } + + /** + * 将判断是否开启debug模式,抽取单独的方法,必要时查看debug级别信息 + * 批量输出堆栈日志信息 + * + * @param log 日志输出器 + */ + public static void njcnPatchDebug(Logger log, List stackInfos) { + if (log.isDebugEnabled()) { + stackInfos.forEach(log::error); + } + } + + + /** + * 区分是否开启debug模式,输出系统异常日志信息 + * 若开启debug模式,则输出所有的堆栈信息 + * 否则只输出第一行日志信息 + * + * @param exception 异常 + */ + public static void logExceptionStackInfo(String exceptionName, Exception exception) { + //若开启了debug模式,则输出所有的栈堆信息 + njcnPatchDebug(log, ExceptionUtil.getAllExceptionStackInfo(exception)); + log.error("{}{},目标文件:{}",exceptionName, exception.toString(), ExceptionUtil.getExceptionServerStackInfo(exception)); + } + +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/utils/PubUtils.java b/pqs-common/common-core/src/main/java/com/njcn/common/utils/PubUtils.java new file mode 100644 index 000000000..286c23851 --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/utils/PubUtils.java @@ -0,0 +1,234 @@ +package com.njcn.common.utils; + +import cn.hutool.core.util.RandomUtil; +import cn.hutool.core.util.StrUtil; +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.type.TypeFactory; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.exception.BusinessException; + +import java.io.IOException; +import java.lang.reflect.Method; +import java.lang.reflect.Type; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +import static java.lang.Integer.parseInt; + + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年04月12日 14:21 + */ +public class PubUtils { + + private final static ObjectMapper MAPPER = new ObjectMapper(); + + private static final String DATE_TIME = "yyyy-MM-dd HH:mm:ss"; + + private static final String DATE = "yyyy-MM-dd"; + + private static final String TIME = "HH:mm:ss"; + + + /** + * 生成随机码,包含字母。--> 大写 + * + * @param length 随机码长度 + */ + public static String randomCode(int length) { + return RandomUtil.randomString(length).toUpperCase(Locale.ENGLISH); + } + + + /**** + * ***** ***** 验证IP是否属于某个IP段 ipSection IP段(以'-'分隔) ip 所验证的IP号码 ***** ***** + **/ + public static boolean ipExistsInRange(String ip, String ipSection) { + ipSection = ipSection.trim(); + ip = ip.trim(); + int idx = ipSection.indexOf('-'); + String beginIp = ipSection.substring(0, idx); + String endIp = ipSection.substring(idx + 1); + return getIp2long(beginIp) <= getIp2long(ip) && getIp2long(ip) <= getIp2long(endIp); + } + + private static long getIp2long(String ip) { + ip = ip.trim(); + String[] ips = ip.split("\\."); + long ip2long = 0L; + for (int i = 0; i < 4; ++i) { + ip2long = ip2long << 8 | parseInt(ips[i]); + } + return ip2long; + } + + /** + * 获取当前时间 + * + * @author cdf + * @date 2021/7/26 + */ + public static String getNow() { + DateFormat bf = new SimpleDateFormat("yyyyMMddHHmmss"); + return bf.format(new Date()); + } + + /** + * 获取当前web的IP + */ + public static String getLocalIp() { + String host; + try { + host = InetAddress.getLocalHost().getHostAddress(); + } catch (UnknownHostException e) { + e.printStackTrace(); + host = "127.0.0.1"; + } + return host; + } + + /** + * 将JSON转为实体对象 + * + * @param jsonStr json + * @param targetType 对象类型 + * @param 对象 + */ + public static T json2obj(String jsonStr, Type targetType) { + try { + JavaType javaType = TypeFactory.defaultInstance().constructType(targetType); + MAPPER.registerModule(new JavaTimeModule()); + MAPPER.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + return MAPPER.readValue(jsonStr, javaType); + } catch (IOException e) { + throw new IllegalArgumentException("将JSON转换为对象时发生错误:" + jsonStr, e); + } + } + + /** + * 判断一个数字是否在区间内 + * + * @param current 待判断数字 + * @param min 最小值 + * @param max 最大值 + */ + public static boolean rangeInDefined(int current, int min, int max) { + return Math.max(min, current) == Math.min(current, max); + } + + /** + * 将起始日期字符串 yyyy-MM-dd 转为 yyyy-MM-dd HH:mm:ss的LocalDateTime + */ + public static LocalDateTime beginTimeToLocalDateTime(String beginTime){ + beginTime = beginTime + StrUtil.SPACE + "00:00:00"; + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DATE_TIME); + return LocalDateTime.parse(beginTime, dateTimeFormatter); + } + + /** + * 将截止日期字符串 yyyy-MM-dd 转为 yyyy-MM-dd HH:mm:ss的LocalDateTime + */ + public static LocalDateTime endTimeToLocalDateTime(String endTime){ + endTime = endTime + StrUtil.SPACE + "23:59:59"; + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DATE_TIME); + return LocalDateTime.parse(endTime, dateTimeFormatter); + } + + /** + * 将字符串日期转为LocalDate日期(只用于日期转换) + */ + public static LocalDate localDateFormat(String time){ + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DATE); + return LocalDate.parse(time,dateTimeFormatter); + } + + public static LocalDateTime localDateTimeFormat(String time){ + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DATE_TIME); + return LocalDateTime.parse(time,dateTimeFormatter); + } + + /** + * 用于获取对象中,前缀一样,后缀为2~50的属性值 + * @param object 待操作对象 + * @param methodPrefix 方法前缀 + * @param number 方法后缀 + * @return 对象属性值 + */ + public static Float getValueByMethod(Object object, String methodPrefix, Integer number) { + try { + Method method = object.getClass().getMethod(methodPrefix + number); + return (Float) method.invoke(object); + } catch (Exception e) { + throw new BusinessException(CommonResponseEnum.REFLECT_METHOD_EXCEPTION); + } + } + + public static List getStartTimeEndTime(String beginDate, String endDate) throws Exception { + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Calendar cal = Calendar.getInstance(); + cal.setTime(sdf.parse(beginDate)); + List startTimeEndTime = null; + for (long d = cal.getTimeInMillis(); d <= sdf.parse(endDate).getTime(); d = getDplaus(cal)) { + startTimeEndTime.add(sdf.format(d)); + } + return startTimeEndTime; + } + + public static long getDplaus(Calendar c) { + c.set(Calendar.DAY_OF_MONTH, c.get(Calendar.DAY_OF_MONTH) + 1); + return c.getTimeInMillis(); + } + + public static String comFlag(Integer comFlag) { + switch (comFlag) { + case 0: + return "中断"; + case 1: + return "正常"; + default: + return ""; + } + } + + public static String runFlag(Integer runFlag) { + switch (runFlag) { + case 0: + return "投运"; + case 1: + return "热备用"; + case 2: + return "停运"; + default: + return ""; + } + } + + public static String ptType(Integer ptType) { + switch (ptType) { + case 0: + return "星型接线"; + case 1: + return "三角型接线"; + case 2: + return "开口三角型接线"; + default: + return ""; + } + } +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/utils/ReflectCommonUtil.java b/pqs-common/common-core/src/main/java/com/njcn/common/utils/ReflectCommonUtil.java new file mode 100644 index 000000000..75a59b943 --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/utils/ReflectCommonUtil.java @@ -0,0 +1,108 @@ +package com.njcn.common.utils; + + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.ReflectUtil; +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.constant.LogInfo; +import com.njcn.common.pojo.constant.OperateType; +import com.njcn.common.pojo.enums.common.LogEnum; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; + +import java.lang.reflect.Method; +import java.util.List; +import java.util.Objects; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年06月10日 13:32 + */ +@Slf4j +public class ReflectCommonUtil { + + + /** + * 根据异常获取系统内controller中的方法 + * @param exception 运行时异常 + */ + public static Method getMethod(Exception exception) { + List stackInfo = ExceptionUtil.getFirstControllerAndMethodName(exception); + Method method = null; + if (!CollectionUtil.isEmpty(stackInfo)) { + String controllerName = stackInfo.get(0); + String methodName = stackInfo.get(1); + try { + method =ReflectUtil.getMethodByName(Class.forName(controllerName), methodName); + } catch (ClassNotFoundException e) { + log.error("根据controller名以及方法名反射获取方法体异常,controller为:{},方法为:{},异常为:{}", controllerName, methodName, e.getMessage()); + } + } + return method; + } + + + /** + * 从异常堆栈信息里找出controller上@ApiOperation内容 + * + * @param exception 异常 + */ + public static String getMethodDescribeByException(Exception exception) { + List stackInfo = ExceptionUtil.getFirstControllerAndMethodName(exception); + String operate = LogInfo.UNKNOWN_OPERATE; + if (!CollectionUtil.isEmpty(stackInfo)) { + String controllerName = stackInfo.get(0); + String methodName = stackInfo.get(1); + try { + operate = ReflectCommonUtil.getMethodDescribeByClassAndMethodName(Class.forName(controllerName), methodName); + } catch (ClassNotFoundException e) { + log.error("根据controller名以及方法名获取操作注解内容异常,controller为:{},方法为:{},异常为:{}", controllerName, methodName, e.getMessage()); + } + } + return operate; + } + + /** + * 获取controller上方法@ApiOperation注解的值,作为当前方法的简短描述 + */ + public static String getMethodDescribeByClassAndMethodName(Class clazz, String methodName) { + Method method = ReflectUtil.getMethodByName(clazz, methodName); + return getMethodDescribeByMethod(method); + } + + + /** + * 获取方法上@ApiOperation注解的值,作为当前方法的简短描述 + */ + public static String getMethodDescribeByMethod(Method method) { + String operate = LogInfo.UNKNOWN_OPERATE; + if (Objects.nonNull(method) && method.isAnnotationPresent(ApiOperation.class)) { + operate = method.getAnnotation(ApiOperation.class).value(); + } + return operate; + } + + /** + * 根据controller上的方法@OperateInfo注解的内容,返回当前[业务类型]以及[严重度] + */ + public static LogEnum getOperateInfoByMethod(Method method) { + LogEnum logEnum = LogEnum.BUSINESS_COMMON; + if(Objects.nonNull(method) && method.isAnnotationPresent(OperateInfo.class)){ + logEnum = method.getAnnotation(OperateInfo.class).info(); + } + return logEnum; + } + + /** + * 根据controller上的方法@OperateInfo注解的内容,返回当前操作类型 + */ + public static String getOperateTypeByMethod(Method method) { + String operateType = OperateType.QUERY; + if(Objects.nonNull(method) && method.isAnnotationPresent(OperateInfo.class)){ + operateType = method.getAnnotation(OperateInfo.class).operateType(); + } + return operateType; + } + +} diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/utils/XssCleanRuleUtils.java b/pqs-common/common-core/src/main/java/com/njcn/common/utils/XssCleanRuleUtils.java new file mode 100644 index 000000000..84239eac2 --- /dev/null +++ b/pqs-common/common-core/src/main/java/com/njcn/common/utils/XssCleanRuleUtils.java @@ -0,0 +1,54 @@ +package com.njcn.common.utils; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import java.util.regex.Pattern; + +/** + * @author hongawen + * @version 1.0.0 + * @createTime 2021年05月20日 14:13 + */ +@Slf4j +public class XssCleanRuleUtils { + + private XssCleanRuleUtils() { + } + + private static final Pattern[] PATTERNS = { + // Avoid anything in a ", Pattern.CASE_INSENSITIVE), + // Avoid anything in a src='...' type of expression + Pattern.compile("src[\r\n]*=[\r\n]*\\\'(.*?)\\\'", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL), + Pattern.compile("src[\r\n]*=[\r\n]*\\\"(.*?)\\\"", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL), + // Remove any lonesome tag + Pattern.compile("", Pattern.CASE_INSENSITIVE), + // Avoid anything in a ", Pattern.CASE_INSENSITIVE), + // Remove any lonesome + + + + + + + + + + + + <#-- jquery cookie --> + + <#-- jquery.validate --> + + + <#-- layer --> + + + <#-- common --> + + + + + +<#macro commonHeader> +

+ + +
+ + + + + + +<#macro commonLeft pageName > + + + + +<#macro commonControl > + + + + +
+ + +<#macro commonFooter > +
+ Powered by XXL-JOB ${I18n.admin_version} + +
+ \ No newline at end of file diff --git a/pqs-job/job-admin/src/main/resources/templates/help.ftl b/pqs-job/job-admin/src/main/resources/templates/help.ftl new file mode 100644 index 000000000..1409fc50c --- /dev/null +++ b/pqs-job/job-admin/src/main/resources/templates/help.ftl @@ -0,0 +1,47 @@ + + + + <#import "./common/common.macro.ftl" as netCommon> + <@netCommon.commonStyle /> + ${I18n.admin_name} + +sidebar-collapse "> +
+ + <@netCommon.commonHeader /> + + <@netCommon.commonLeft "help" /> + + +
+ +
+

${I18n.job_help}

+
+ + +
+
+

${I18n.admin_name_full}

+
+

+ Github     + +

+ ${I18n.job_help_document} +

+ +

+

+
+
+ +
+ + + + <@netCommon.commonFooter /> +
+<@netCommon.commonScript /> + + diff --git a/pqs-job/job-admin/src/main/resources/templates/index.ftl b/pqs-job/job-admin/src/main/resources/templates/index.ftl new file mode 100644 index 000000000..d642f4e68 --- /dev/null +++ b/pqs-job/job-admin/src/main/resources/templates/index.ftl @@ -0,0 +1,147 @@ + + + + <#import "./common/common.macro.ftl" as netCommon> + <@netCommon.commonStyle /> + + + ${I18n.admin_name} + +sidebar-collapse "> +
+ + <@netCommon.commonHeader /> + + <@netCommon.commonLeft "index" /> + + +
+ +
+

${I18n.job_dashboard_name}

+ +
+ + +
+ + +
+ + <#-- 任务信息 --> +
+
+ + +
+ ${I18n.job_dashboard_job_num} + ${jobInfoCount} + +
+
+
+ ${I18n.job_dashboard_job_num_tip} +
+
+
+ + <#-- 调度信息 --> +
+
+ + +
+ ${I18n.job_dashboard_trigger_num} + ${jobLogCount} + +
+
+
+ + ${I18n.job_dashboard_trigger_num_tip} + <#--<#if jobLogCount gt 0> + 调度成功率:${(jobLogSuccessCount*100/jobLogCount)?string("0.00")}% + --> + +
+
+
+ + <#-- 执行器 --> +
+
+ + +
+ ${I18n.job_dashboard_jobgroup_num} + ${executorCount} + +
+
+
+ ${I18n.job_dashboard_jobgroup_num_tip} +
+
+
+ +
+ + <#-- 调度报表:时间区间筛选,左侧折线图 + 右侧饼图 --> +
+
+
+
+

${I18n.job_dashboard_report}

+ <#----> + + +
+ + <#----> +
+ + +
+
+
+ <#-- 左侧折线图 --> +
+
+
+ <#-- 右侧饼图 --> +
+
+
+
+
+
+
+
+ +
+ +
+ + + + <@netCommon.commonFooter /> +
+<@netCommon.commonScript /> + + + +<#-- echarts --> + + + + diff --git a/pqs-job/job-admin/src/main/resources/templates/jobcode/jobcode.index.ftl b/pqs-job/job-admin/src/main/resources/templates/jobcode/jobcode.index.ftl new file mode 100644 index 000000000..a386b2883 --- /dev/null +++ b/pqs-job/job-admin/src/main/resources/templates/jobcode/jobcode.index.ftl @@ -0,0 +1,164 @@ + + + + <#import "../common/common.macro.ftl" as netCommon> + <@netCommon.commonStyle /> + + + ${I18n.admin_name} + + + + +
+ +
+ +
+ +
+ + + <#--<@netCommon.commonFooter />--> +
+ + + + +<@netCommon.commonScript /> + + + <#assign glueTypeModeSrc = "${request.contextPath}/static/plugins/codemirror/mode/clike/clike.js" /> + <#assign glueTypeIdeMode = "text/x-java" /> + + <#if jobInfo.glueType == "GLUE_GROOVY" > + <#assign glueTypeModeSrc = "${request.contextPath}/static/plugins/codemirror/mode/clike/clike.js" /> + <#assign glueTypeIdeMode = "text/x-java" /> + <#elseif jobInfo.glueType == "GLUE_SHELL" > + <#assign glueTypeModeSrc = "${request.contextPath}/static/plugins/codemirror/mode/shell/shell.js" /> + <#assign glueTypeIdeMode = "text/x-sh" /> + <#elseif jobInfo.glueType == "GLUE_PYTHON" > + <#assign glueTypeModeSrc = "${request.contextPath}/static/plugins/codemirror/mode/python/python.js" /> + <#assign glueTypeIdeMode = "text/x-python" /> + <#elseif jobInfo.glueType == "GLUE_PHP" > + <#assign glueTypeModeSrc = "${request.contextPath}/static/plugins/codemirror/mode/php/php.js" /> + <#assign glueTypeIdeMode = "text/x-php" /> + <#assign glueTypeModeSrc02 = "${request.contextPath}/static/plugins/codemirror/mode/clike/clike.js" /> + <#elseif jobInfo.glueType == "GLUE_NODEJS" > + <#assign glueTypeModeSrc = "${request.contextPath}/static/plugins/codemirror/mode/javascript/javascript.js" /> + <#assign glueTypeIdeMode = "text/javascript" /> + <#elseif jobInfo.glueType == "GLUE_POWERSHELL" > + <#assign glueTypeModeSrc = "${request.contextPath}/static/plugins/codemirror/mode/powershell/powershell.js" /> + <#assign glueTypeIdeMode = "powershell" /> + + + + + +<#if glueTypeModeSrc02?exists> + + + + + + + + + + diff --git a/pqs-job/job-admin/src/main/resources/templates/jobgroup/jobgroup.index.ftl b/pqs-job/job-admin/src/main/resources/templates/jobgroup/jobgroup.index.ftl new file mode 100644 index 000000000..778df9ec2 --- /dev/null +++ b/pqs-job/job-admin/src/main/resources/templates/jobgroup/jobgroup.index.ftl @@ -0,0 +1,172 @@ + + + + <#import "../common/common.macro.ftl" as netCommon> + <@netCommon.commonStyle /> + + + ${I18n.admin_name} + +sidebar-collapse "> +
+ + <@netCommon.commonHeader /> + + <@netCommon.commonLeft "jobgroup" /> + + +
+ +
+

${I18n.jobgroup_name}

+
+ + +
+ +
+
+
+ AppName + +
+
+
+
+ ${I18n.jobgroup_field_title} + +
+
+
+ +
+
+ +
+
+ +
+
+
+
+ + + + + + + + + + + + + +
IDAppName${I18n.jobgroup_field_title}${I18n.jobgroup_field_addressType}OnLine ${I18n.jobgroup_field_registryList}${I18n.system_opt}
+
+
+
+
+
+
+ + + + + + + + + <@netCommon.commonFooter /> +
+ +<@netCommon.commonScript /> + + + + + + diff --git a/pqs-job/job-admin/src/main/resources/templates/jobinfo/jobinfo.index.ftl b/pqs-job/job-admin/src/main/resources/templates/jobinfo/jobinfo.index.ftl new file mode 100644 index 000000000..3a5d7d8a7 --- /dev/null +++ b/pqs-job/job-admin/src/main/resources/templates/jobinfo/jobinfo.index.ftl @@ -0,0 +1,540 @@ + + + + <#import "../common/common.macro.ftl" as netCommon> + <@netCommon.commonStyle /> + + + ${I18n.admin_name} + +sidebar-collapse"> +
+ + <@netCommon.commonHeader /> + + <@netCommon.commonLeft "jobinfo" /> + + +
+ +
+

${I18n.jobinfo_name}

+
+ + +
+ +
+
+
+ ${I18n.jobinfo_field_jobgroup} + +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+ +
+
+ +
+
+ +
+
+
+ <#--
+

调度列表

+
--> +
+ + + + + + + + + + + + + + + + + + + +
${I18n.jobinfo_field_id}${I18n.jobinfo_field_jobgroup}${I18n.jobinfo_field_jobdesc}${I18n.schedule_type}${I18n.jobinfo_field_gluetype}${I18n.jobinfo_field_executorparam}addTimeupdateTime${I18n.jobinfo_field_author}${I18n.jobinfo_field_alarmemail}${I18n.system_status}${I18n.system_opt}
+
+
+
+
+
+
+ + + <@netCommon.commonFooter /> +
+ + + + + + + +<#-- trigger --> + + +<@netCommon.commonScript /> + + + + + +<#-- cronGen --> + + + + diff --git a/pqs-job/job-admin/src/main/resources/templates/joblog/joblog.detail.ftl b/pqs-job/job-admin/src/main/resources/templates/joblog/joblog.detail.ftl new file mode 100644 index 000000000..3881cfa6a --- /dev/null +++ b/pqs-job/job-admin/src/main/resources/templates/joblog/joblog.detail.ftl @@ -0,0 +1,72 @@ + + + + <#import "../common/common.macro.ftl" as netCommon> + <@netCommon.commonStyle /> + ${I18n.admin_name} + + + +
+ +
+ +
+ +
+
+
+                
+
  • +
    +
    +
    + + + <@netCommon.commonFooter /> + +
    + +<@netCommon.commonScript /> + + + + + \ No newline at end of file diff --git a/pqs-job/job-admin/src/main/resources/templates/joblog/joblog.index.ftl b/pqs-job/job-admin/src/main/resources/templates/joblog/joblog.index.ftl new file mode 100644 index 000000000..a2e983de8 --- /dev/null +++ b/pqs-job/job-admin/src/main/resources/templates/joblog/joblog.index.ftl @@ -0,0 +1,180 @@ + + + + <#import "../common/common.macro.ftl" as netCommon> + <@netCommon.commonStyle /> + + + + + ${I18n.admin_name} + +sidebar-collapse "> +
    + + <@netCommon.commonHeader /> + + <@netCommon.commonLeft "joblog" /> + + +
    + +
    +

    ${I18n.joblog_name}

    +
    + + +
    +
    +
    +
    + ${I18n.jobinfo_field_jobgroup} + +
    +
    +
    +
    + ${I18n.jobinfo_job} + +
    +
    + +
    +
    + ${I18n.joblog_status} + +
    +
    + +
    +
    + + ${I18n.joblog_field_triggerTime} + + +
    +
    + +
    + +
    + +
    + +
    +
    + +
    +
    +
    + <#--

    调度日志

    --> +
    + + + + + + <#-- + + --> + + + + + + + + + + +
    ${I18n.jobinfo_field_id}jobGroup执行器地址运行模式任务参数${I18n.joblog_field_triggerTime}${I18n.joblog_field_triggerCode}${I18n.joblog_field_triggerMsg}${I18n.joblog_field_handleTime}${I18n.joblog_field_handleCode}${I18n.joblog_field_handleMsg}${I18n.system_opt}
    +
    +
    +
    +
    +
    +
    + + + <@netCommon.commonFooter /> +
    + + + + +<@netCommon.commonScript /> + + + + + + + + + diff --git a/pqs-job/job-admin/src/main/resources/templates/login.ftl b/pqs-job/job-admin/src/main/resources/templates/login.ftl new file mode 100644 index 000000000..c3f696385 --- /dev/null +++ b/pqs-job/job-admin/src/main/resources/templates/login.ftl @@ -0,0 +1,45 @@ + + + + <#import "./common/common.macro.ftl" as netCommon> + <@netCommon.commonStyle /> + + ${I18n.admin_name} + + + +<@netCommon.commonScript /> + + + + + diff --git a/pqs-job/job-admin/src/main/resources/templates/user/user.index.ftl b/pqs-job/job-admin/src/main/resources/templates/user/user.index.ftl new file mode 100644 index 000000000..012039826 --- /dev/null +++ b/pqs-job/job-admin/src/main/resources/templates/user/user.index.ftl @@ -0,0 +1,188 @@ + + + + <#import "../common/common.macro.ftl" as netCommon> + <@netCommon.commonStyle /> + + + ${I18n.admin_name} + +sidebar-collapse"> +
    + + <@netCommon.commonHeader /> + + <@netCommon.commonLeft "user" /> + + +
    + +
    +

    ${I18n.user_manage}

    +
    + + +
    + +
    +
    +
    + ${I18n.user_role} + +
    +
    +
    +
    + ${I18n.user_username} + +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    + + + + + + + + + + + + + +
    ID${I18n.user_username}${I18n.user_password}${I18n.user_role}${I18n.user_permission}${I18n.system_opt}
    +
    +
    +
    +
    +
    +
    + + + <@netCommon.commonFooter /> +
    + + + + + + + +<@netCommon.commonScript /> + + + + + + diff --git a/pqs-job/job-api/pom.xml b/pqs-job/job-api/pom.xml new file mode 100644 index 000000000..1aab7d063 --- /dev/null +++ b/pqs-job/job-api/pom.xml @@ -0,0 +1,87 @@ + + + + pqs + com.njcn + 1.0.0 + ../../pom.xml + + 4.0.0 + job-api + 1.0.0 + + 8 + 8 + + + + + + com.xuxueli + xxl-job-core + + + com.njcn + common-core + ${project.version} + + + + org.springframework.cloud + spring-cloud-context + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + org.springframework.boot + spring-boot-starter-actuator + + + + com.xuxueli + xxl-job-core + + + com.njcn + common-core + ${project.version} + + + + org.springframework.cloud + spring-cloud-context + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + org.springframework.boot + spring-boot-starter-actuator + + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + + \ No newline at end of file diff --git a/pqs-job/job-api/src/main/java/com/njcn/job/api/JobFeignClient.java b/pqs-job/job-api/src/main/java/com/njcn/job/api/JobFeignClient.java new file mode 100644 index 000000000..f637a1467 --- /dev/null +++ b/pqs-job/job-api/src/main/java/com/njcn/job/api/JobFeignClient.java @@ -0,0 +1,68 @@ +package com.njcn.job.api; + +import com.njcn.common.pojo.constant.ServerInfo; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.job.api.fallback.JobFeignClientFallbackFactory; +import com.njcn.job.model.XxlJobInfo; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.*; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2022年04月18日 14:41 + */ +@FeignClient(value = ServerInfo.JOB_ADMIN,path = "/job-admin/jobinfo",fallbackFactory = JobFeignClientFallbackFactory.class) +public interface JobFeignClient { + + /** + * 新增定时任务 + * @param jobInfo 任务细节 + * @return 新增结果 + */ + @PostMapping("/addJob") + @ResponseBody + HttpResult addJob(@RequestBody XxlJobInfo jobInfo); + + + + /** + * 修改定时任务 + * @param jobInfo 任务细节 + * @return 修改结果 + */ + @PostMapping("/updateJob") + @ResponseBody + HttpResult updateJob(@RequestBody XxlJobInfo jobInfo); + + + + /** + * 删除定时任务 + * @param id + * @return 新增结果 + */ + @GetMapping("/removeJob") + @ResponseBody + HttpResult removeJob(@RequestParam("id")int id); + + + + /** + * 停止定时任务 + * @param id + * @return 新增结果 + */ + @GetMapping("/stopJob") + @ResponseBody + HttpResult stopJob(@RequestParam("id")int id); + + /** + * 启动任务 + * @param id 任务ID + * @return 新增结果 + */ + @RequestMapping("/startTask") + @ResponseBody + HttpResult startTask(@RequestParam("id")int id); +} diff --git a/pqs-job/job-api/src/main/java/com/njcn/job/api/fallback/JobFeignClientFallbackFactory.java b/pqs-job/job-api/src/main/java/com/njcn/job/api/fallback/JobFeignClientFallbackFactory.java new file mode 100644 index 000000000..99b9bf34c --- /dev/null +++ b/pqs-job/job-api/src/main/java/com/njcn/job/api/fallback/JobFeignClientFallbackFactory.java @@ -0,0 +1,66 @@ +package com.njcn.job.api.fallback; + +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.job.api.JobFeignClient; +import com.njcn.job.model.XxlJobInfo; +import com.xxl.job.core.biz.model.ReturnT; +import feign.hystrix.FallbackFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2022年04月18日 14:44 + */ +@Slf4j +@Component +public class JobFeignClientFallbackFactory implements FallbackFactory { + + /** + * 输出远程请求接口异常日志 + * + * @param cause RPC请求异常 + */ + @Override + public JobFeignClient create(Throwable cause) { + + return new JobFeignClient() { + @Override + public HttpResult addJob(XxlJobInfo jobInfo) { + log.error("{}异常,降级处理,异常为:{}", "新增定时任务", cause.toString()); + + return new HttpResult(ReturnT.FAIL_CODE, "新增定时任务降级失败"); + } + + @Override + public HttpResult updateJob(XxlJobInfo jobInfo) { + log.error("{}异常,降级处理,异常为:{}", "修改定时任务", cause.toString()); + + return new HttpResult(ReturnT.FAIL_CODE, "修改定时任务降级失败"); + } + + @Override + public HttpResult removeJob(int id) { + log.error("{}异常,降级处理,异常为:{}", "删除定时任务", cause.toString()); + + return new HttpResult(ReturnT.FAIL_CODE, "删除定时任务降级失败"); + } + + @Override + public HttpResult stopJob(int id) { + log.error("{}异常,降级处理,异常为:{}", "停止定时任务", cause.toString()); + + return new HttpResult(ReturnT.FAIL_CODE, "停止定时任务降级失败"); + } + + @Override + public HttpResult startTask(int id) { + log.error("{}异常,降级处理,异常为:{}", "启动任务", cause.toString()); + return new HttpResult(ReturnT.FAIL_CODE, "启动任务降级失败"); + } + }; + } +} diff --git a/pqs-job/job-api/src/main/java/com/njcn/job/model/XxlJobGroup.java b/pqs-job/job-api/src/main/java/com/njcn/job/model/XxlJobGroup.java new file mode 100644 index 000000000..9f47d1336 --- /dev/null +++ b/pqs-job/job-api/src/main/java/com/njcn/job/model/XxlJobGroup.java @@ -0,0 +1,77 @@ +package com.njcn.job.model; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.List; + +/** + * Created by xuxueli on 16/9/30. + */ +public class XxlJobGroup { + + private int id; + private String appname; + private String title; + private int addressType; // 执行器地址类型:0=自动注册、1=手动录入 + private String addressList; // 执行器地址列表,多地址逗号分隔(手动录入) + private Date updateTime; + + // registry list + private List registryList; // 执行器地址列表(系统注册) + public List getRegistryList() { + if (addressList!=null && addressList.trim().length()>0) { + registryList = new ArrayList(Arrays.asList(addressList.split(","))); + } + return registryList; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getAppname() { + return appname; + } + + public void setAppname(String appname) { + this.appname = appname; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public int getAddressType() { + return addressType; + } + + public void setAddressType(int addressType) { + this.addressType = addressType; + } + + public String getAddressList() { + return addressList; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public void setAddressList(String addressList) { + this.addressList = addressList; + } + +} diff --git a/pqs-job/job-api/src/main/java/com/njcn/job/model/XxlJobInfo.java b/pqs-job/job-api/src/main/java/com/njcn/job/model/XxlJobInfo.java new file mode 100644 index 000000000..07a5771ba --- /dev/null +++ b/pqs-job/job-api/src/main/java/com/njcn/job/model/XxlJobInfo.java @@ -0,0 +1,237 @@ +package com.njcn.job.model; + +import java.util.Date; + +/** + * xxl-job info + * + * @author xuxueli 2016-1-12 18:25:49 + */ +public class XxlJobInfo { + + private int id; // 主键ID + + private int jobGroup; // 执行器主键ID + private String jobDesc; + + private Date addTime; + private Date updateTime; + + private String author; // 负责人 + private String alarmEmail; // 报警邮件 + + private String scheduleType; // 调度类型 + private String scheduleConf; // 调度配置,值含义取决于调度类型 + private String misfireStrategy; // 调度过期策略 + + private String executorRouteStrategy; // 执行器路由策略 + private String executorHandler; // 执行器,任务Handler名称 + private String executorParam; // 执行器,任务参数 + private String executorBlockStrategy; // 阻塞处理策略 + private int executorTimeout; // 任务执行超时时间,单位秒 + private int executorFailRetryCount; // 失败重试次数 + + private String glueType; // GLUE类型 #com.xxl.job.core.glue.GlueTypeEnum + private String glueSource; // GLUE源代码 + private String glueRemark; // GLUE备注 + private Date glueUpdatetime; // GLUE更新时间 + + private String childJobId; // 子任务ID,多个逗号分隔 + + private int triggerStatus; // 调度状态:0-停止,1-运行 + private long triggerLastTime; // 上次调度时间 + private long triggerNextTime; // 下次调度时间 + + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public int getJobGroup() { + return jobGroup; + } + + public void setJobGroup(int jobGroup) { + this.jobGroup = jobGroup; + } + + public String getJobDesc() { + return jobDesc; + } + + public void setJobDesc(String jobDesc) { + this.jobDesc = jobDesc; + } + + public Date getAddTime() { + return addTime; + } + + public void setAddTime(Date addTime) { + this.addTime = addTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getAlarmEmail() { + return alarmEmail; + } + + public void setAlarmEmail(String alarmEmail) { + this.alarmEmail = alarmEmail; + } + + public String getScheduleType() { + return scheduleType; + } + + public void setScheduleType(String scheduleType) { + this.scheduleType = scheduleType; + } + + public String getScheduleConf() { + return scheduleConf; + } + + public void setScheduleConf(String scheduleConf) { + this.scheduleConf = scheduleConf; + } + + public String getMisfireStrategy() { + return misfireStrategy; + } + + public void setMisfireStrategy(String misfireStrategy) { + this.misfireStrategy = misfireStrategy; + } + + public String getExecutorRouteStrategy() { + return executorRouteStrategy; + } + + public void setExecutorRouteStrategy(String executorRouteStrategy) { + this.executorRouteStrategy = executorRouteStrategy; + } + + public String getExecutorHandler() { + return executorHandler; + } + + public void setExecutorHandler(String executorHandler) { + this.executorHandler = executorHandler; + } + + public String getExecutorParam() { + return executorParam; + } + + public void setExecutorParam(String executorParam) { + this.executorParam = executorParam; + } + + public String getExecutorBlockStrategy() { + return executorBlockStrategy; + } + + public void setExecutorBlockStrategy(String executorBlockStrategy) { + this.executorBlockStrategy = executorBlockStrategy; + } + + public int getExecutorTimeout() { + return executorTimeout; + } + + public void setExecutorTimeout(int executorTimeout) { + this.executorTimeout = executorTimeout; + } + + public int getExecutorFailRetryCount() { + return executorFailRetryCount; + } + + public void setExecutorFailRetryCount(int executorFailRetryCount) { + this.executorFailRetryCount = executorFailRetryCount; + } + + public String getGlueType() { + return glueType; + } + + public void setGlueType(String glueType) { + this.glueType = glueType; + } + + public String getGlueSource() { + return glueSource; + } + + public void setGlueSource(String glueSource) { + this.glueSource = glueSource; + } + + public String getGlueRemark() { + return glueRemark; + } + + public void setGlueRemark(String glueRemark) { + this.glueRemark = glueRemark; + } + + public Date getGlueUpdatetime() { + return glueUpdatetime; + } + + public void setGlueUpdatetime(Date glueUpdatetime) { + this.glueUpdatetime = glueUpdatetime; + } + + public String getChildJobId() { + return childJobId; + } + + public void setChildJobId(String childJobId) { + this.childJobId = childJobId; + } + + public int getTriggerStatus() { + return triggerStatus; + } + + public void setTriggerStatus(int triggerStatus) { + this.triggerStatus = triggerStatus; + } + + public long getTriggerLastTime() { + return triggerLastTime; + } + + public void setTriggerLastTime(long triggerLastTime) { + this.triggerLastTime = triggerLastTime; + } + + public long getTriggerNextTime() { + return triggerNextTime; + } + + public void setTriggerNextTime(long triggerNextTime) { + this.triggerNextTime = triggerNextTime; + } +} diff --git a/pqs-job/job-api/src/main/java/com/njcn/job/model/XxlJobLog.java b/pqs-job/job-api/src/main/java/com/njcn/job/model/XxlJobLog.java new file mode 100644 index 000000000..e08226bf2 --- /dev/null +++ b/pqs-job/job-api/src/main/java/com/njcn/job/model/XxlJobLog.java @@ -0,0 +1,157 @@ +package com.njcn.job.model; + +import java.util.Date; + +/** + * xxl-job log, used to track trigger process + * @author xuxueli 2015-12-19 23:19:09 + */ +public class XxlJobLog { + + private long id; + + // job info + private int jobGroup; + private int jobId; + + // execute info + private String executorAddress; + private String executorHandler; + private String executorParam; + private String executorShardingParam; + private int executorFailRetryCount; + + // trigger info + private Date triggerTime; + private int triggerCode; + private String triggerMsg; + + // handle info + private Date handleTime; + private int handleCode; + private String handleMsg; + + // alarm info + private int alarmStatus; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public int getJobGroup() { + return jobGroup; + } + + public void setJobGroup(int jobGroup) { + this.jobGroup = jobGroup; + } + + public int getJobId() { + return jobId; + } + + public void setJobId(int jobId) { + this.jobId = jobId; + } + + public String getExecutorAddress() { + return executorAddress; + } + + public void setExecutorAddress(String executorAddress) { + this.executorAddress = executorAddress; + } + + public String getExecutorHandler() { + return executorHandler; + } + + public void setExecutorHandler(String executorHandler) { + this.executorHandler = executorHandler; + } + + public String getExecutorParam() { + return executorParam; + } + + public void setExecutorParam(String executorParam) { + this.executorParam = executorParam; + } + + public String getExecutorShardingParam() { + return executorShardingParam; + } + + public void setExecutorShardingParam(String executorShardingParam) { + this.executorShardingParam = executorShardingParam; + } + + public int getExecutorFailRetryCount() { + return executorFailRetryCount; + } + + public void setExecutorFailRetryCount(int executorFailRetryCount) { + this.executorFailRetryCount = executorFailRetryCount; + } + + public Date getTriggerTime() { + return triggerTime; + } + + public void setTriggerTime(Date triggerTime) { + this.triggerTime = triggerTime; + } + + public int getTriggerCode() { + return triggerCode; + } + + public void setTriggerCode(int triggerCode) { + this.triggerCode = triggerCode; + } + + public String getTriggerMsg() { + return triggerMsg; + } + + public void setTriggerMsg(String triggerMsg) { + this.triggerMsg = triggerMsg; + } + + public Date getHandleTime() { + return handleTime; + } + + public void setHandleTime(Date handleTime) { + this.handleTime = handleTime; + } + + public int getHandleCode() { + return handleCode; + } + + public void setHandleCode(int handleCode) { + this.handleCode = handleCode; + } + + public String getHandleMsg() { + return handleMsg; + } + + public void setHandleMsg(String handleMsg) { + this.handleMsg = handleMsg; + } + + public int getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(int alarmStatus) { + this.alarmStatus = alarmStatus; + } + +} diff --git a/pqs-job/job-api/src/main/java/com/njcn/job/model/XxlJobLogGlue.java b/pqs-job/job-api/src/main/java/com/njcn/job/model/XxlJobLogGlue.java new file mode 100644 index 000000000..5cea5ff46 --- /dev/null +++ b/pqs-job/job-api/src/main/java/com/njcn/job/model/XxlJobLogGlue.java @@ -0,0 +1,75 @@ +package com.njcn.job.model; + +import java.util.Date; + +/** + * xxl-job log for glue, used to track job code process + * @author xuxueli 2016-5-19 17:57:46 + */ +public class XxlJobLogGlue { + + private int id; + private int jobId; // 任务主键ID + private String glueType; // GLUE类型 #com.xxl.job.core.glue.GlueTypeEnum + private String glueSource; + private String glueRemark; + private Date addTime; + private Date updateTime; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public int getJobId() { + return jobId; + } + + public void setJobId(int jobId) { + this.jobId = jobId; + } + + public String getGlueType() { + return glueType; + } + + public void setGlueType(String glueType) { + this.glueType = glueType; + } + + public String getGlueSource() { + return glueSource; + } + + public void setGlueSource(String glueSource) { + this.glueSource = glueSource; + } + + public String getGlueRemark() { + return glueRemark; + } + + public void setGlueRemark(String glueRemark) { + this.glueRemark = glueRemark; + } + + public Date getAddTime() { + return addTime; + } + + public void setAddTime(Date addTime) { + this.addTime = addTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + +} diff --git a/pqs-job/job-api/src/main/java/com/njcn/job/model/XxlJobLogReport.java b/pqs-job/job-api/src/main/java/com/njcn/job/model/XxlJobLogReport.java new file mode 100644 index 000000000..ceec13b86 --- /dev/null +++ b/pqs-job/job-api/src/main/java/com/njcn/job/model/XxlJobLogReport.java @@ -0,0 +1,54 @@ +package com.njcn.job.model; + +import java.util.Date; + +public class XxlJobLogReport { + + private int id; + + private Date triggerDay; + + private int runningCount; + private int sucCount; + private int failCount; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public Date getTriggerDay() { + return triggerDay; + } + + public void setTriggerDay(Date triggerDay) { + this.triggerDay = triggerDay; + } + + public int getRunningCount() { + return runningCount; + } + + public void setRunningCount(int runningCount) { + this.runningCount = runningCount; + } + + public int getSucCount() { + return sucCount; + } + + public void setSucCount(int sucCount) { + this.sucCount = sucCount; + } + + public int getFailCount() { + return failCount; + } + + public void setFailCount(int failCount) { + this.failCount = failCount; + } +} diff --git a/pqs-job/job-api/src/main/java/com/njcn/job/model/XxlJobRegistry.java b/pqs-job/job-api/src/main/java/com/njcn/job/model/XxlJobRegistry.java new file mode 100644 index 000000000..ef709ea66 --- /dev/null +++ b/pqs-job/job-api/src/main/java/com/njcn/job/model/XxlJobRegistry.java @@ -0,0 +1,55 @@ +package com.njcn.job.model; + +import java.util.Date; + +/** + * Created by xuxueli on 16/9/30. + */ +public class XxlJobRegistry { + + private int id; + private String registryGroup; + private String registryKey; + private String registryValue; + private Date updateTime; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getRegistryGroup() { + return registryGroup; + } + + public void setRegistryGroup(String registryGroup) { + this.registryGroup = registryGroup; + } + + public String getRegistryKey() { + return registryKey; + } + + public void setRegistryKey(String registryKey) { + this.registryKey = registryKey; + } + + public String getRegistryValue() { + return registryValue; + } + + public void setRegistryValue(String registryValue) { + this.registryValue = registryValue; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} diff --git a/pqs-job/job-api/src/main/java/com/njcn/job/model/XxlJobUser.java b/pqs-job/job-api/src/main/java/com/njcn/job/model/XxlJobUser.java new file mode 100644 index 000000000..ba35cd5e4 --- /dev/null +++ b/pqs-job/job-api/src/main/java/com/njcn/job/model/XxlJobUser.java @@ -0,0 +1,73 @@ +package com.njcn.job.model; + +import org.springframework.util.StringUtils; + +/** + * @author xuxueli 2019-05-04 16:43:12 + */ +public class XxlJobUser { + + private int id; + private String username; // 账号 + private String password; // 密码 + private int role; // 角色:0-普通用户、1-管理员 + private String permission; // 权限:执行器ID列表,多个逗号分割 + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public int getRole() { + return role; + } + + public void setRole(int role) { + this.role = role; + } + + public String getPermission() { + return permission; + } + + public void setPermission(String permission) { + this.permission = permission; + } + + // plugin + public boolean validPermission(int jobGroup){ + if (this.role == 1) { + return true; + } else { + if (StringUtils.hasText(this.permission)) { + for (String permissionItem : this.permission.split(",")) { + if (String.valueOf(jobGroup).equals(permissionItem)) { + return true; + } + } + } + return false; + } + + } + +} diff --git a/pqs-job/job-executor/Dockerfile b/pqs-job/job-executor/Dockerfile new file mode 100644 index 000000000..ac596e0af --- /dev/null +++ b/pqs-job/job-executor/Dockerfile @@ -0,0 +1,6 @@ +FROM openjdk:8-jdk-alpine +ADD target/job-executor.jar job-executor.jar +ENTRYPOINT ["java","-jar","/job-executor.jar"] +EXPOSE 10218 +RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone + diff --git a/pqs-job/job-executor/pom.xml b/pqs-job/job-executor/pom.xml new file mode 100644 index 000000000..dea960a86 --- /dev/null +++ b/pqs-job/job-executor/pom.xml @@ -0,0 +1,144 @@ + + + + pqs-job + com.njcn + 1.0.0 + + 4.0.0 + job-executor + 任务执行器管理模块 + jar + + + 8 + 8 + + + + + com.njcn + user-api + ${project.version} + + + com.njcn + common-core + ${project.version} + + + com.njcn + common-db + ${project.version} + + + com.njcn + common-microservice + ${project.version} + + + + com.xuxueli + xxl-job-core + + + com.njcn + harmonic-api + 1.0.0 + compile + + + com.njcn + common-influxDB + 1.0.0 + compile + + + com.njcn + energy-api + 1.0.0 + compile + + + + + ${project.artifactId} + + + src/main/resources + true + + static/**/*.woff + static/**/*.woff2 + static/**/*.ttf + + + + src/main/resources + false + + static/**/*.woff + static/**/*.woff2 + static/**/*.ttf + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + true + + + + + com.spotify + docker-maven-plugin + 1.0.0 + + + + build-image + ${docker.operate} + + build + + + + + + http://${docker.repostory} + + ${docker.repostory}/${docker.registry.name}/${project.artifactId} + + + latest + + + ${docker.url} + ${basedir}/ + + + + /ROOT + + ${project.build.directory} + + ${project.build.finalName}.jar + + + + + + + \ No newline at end of file diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/JobExecutorApplication.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/JobExecutorApplication.java new file mode 100644 index 000000000..b2daca55e --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/JobExecutorApplication.java @@ -0,0 +1,24 @@ +package com.njcn.executor; + +import lombok.extern.slf4j.Slf4j; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2022年03月22日 10:07 + */ +@Slf4j +@MapperScan("com.njcn.**.mapper") +@EnableFeignClients(basePackages = "com.njcn") +@SpringBootApplication(scanBasePackages = "com.njcn") +public class JobExecutorApplication { + + public static void main(String[] args) { + SpringApplication.run(JobExecutorApplication.class); + } + +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/config/XxlJobConfig.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/config/XxlJobConfig.java new file mode 100644 index 000000000..22de916a7 --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/config/XxlJobConfig.java @@ -0,0 +1,78 @@ +package com.njcn.executor.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * xxl-job config + * + * @author xuxueli 2017-04-28 + */ +@Configuration +public class XxlJobConfig { + private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class); + + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + + @Value("${xxl.job.executor.address}") + private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + logger.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); + xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } + + /** + * 针对多网卡、容器内部署等情况,可借助 "spring-cloud-commons" 提供的 "InetUtils" 组件灵活定制注册IP; + * + * 1、引入依赖: + * + * org.springframework.cloud + * spring-cloud-commons + * ${version} + * + * + * 2、配置文件,或者容器启动变量 + * spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.' + * + * 3、获取IP + * String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress(); + */ + + +} \ No newline at end of file diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/handler/AirStrategyJob.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/handler/AirStrategyJob.java new file mode 100644 index 000000000..356866429 --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/handler/AirStrategyJob.java @@ -0,0 +1,42 @@ +package com.njcn.executor.handler; + +import cn.hutool.core.util.StrUtil; +import com.njcn.energy.pojo.api.EleAirStrategyFeignClient; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * pqs + * 空调策略 + * @author cdf + * @date 2022/4/21 + */ + +@Slf4j +@Component +@AllArgsConstructor +public class AirStrategyJob { + + private final EleAirStrategyFeignClient eleAirStrategyFeignClient; + + + + @XxlJob("airStrategyJob") + public void airStrategyJob() { + + try { + + String command = XxlJobHelper.getJobParam(); + //获取所有策略监测点 + String[] arr = command.split(StrUtil.COMMA); + eleAirStrategyFeignClient.dealAirStrategyId(arr[1], arr[0]); + }catch (Exception e){ + e.printStackTrace(); + } + + + } +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/handler/DayJob.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/handler/DayJob.java new file mode 100644 index 000000000..5e4e13499 --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/handler/DayJob.java @@ -0,0 +1,2401 @@ +package com.njcn.executor.handler; + +import com.njcn.common.pojo.constant.PatternRegex; +import com.njcn.executor.pojo.vo.*; +import com.njcn.harmonic.constant.Param; +import com.njcn.influxdb.utils.InfluxDbUtils; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.influxdb.InfluxDB; +import org.influxdb.dto.BatchPoints; +import org.influxdb.dto.Point; +import org.influxdb.dto.QueryResult; +import org.influxdb.impl.InfluxDBResultMapper; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.regex.Pattern; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/5/10 14:10 + */ +@Slf4j +@Component +@AllArgsConstructor +public class DayJob { + + private final String DATABASE = "pqsbase"; + + private final InfluxDbUtils influxDbUtils; + + @XxlJob("dayJobHandler") + public void getDayData() throws ParseException { + List paramList = new ArrayList<>(); + List lineList = new ArrayList<>(); + String command = XxlJobHelper.getJobParam(); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar calendar = Calendar.getInstance(); + calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)-1, 0, 0, 0); + calendar.set(Calendar.MILLISECOND, 0); + Calendar calendar2 = Calendar.getInstance(); + calendar2.set(calendar2.get(Calendar.YEAR), calendar2.get(Calendar.MONTH), calendar2.get(Calendar.DAY_OF_MONTH)-1, 23, 59, 59); + calendar2.set(Calendar.MILLISECOND, 0); + String startTime = format.format(calendar.getTime()); + String endTime = format.format(calendar2.getTime()); + if (!StringUtils.isEmpty(command)){ + paramList = Arrays.asList(command.split(",")); + startTime = paramList.get(0); + endTime = paramList.get(1); + lineList = paramList.subList(2,paramList.size()); + if (CollectionUtils.isEmpty(lineList)){ + log.info("补招传入的参数有误,未传监测点id"); + } + boolean s1 = Pattern.matches(PatternRegex.TIME_FORMAT,startTime); + boolean e1 = Pattern.matches(PatternRegex.TIME_FORMAT,endTime); + if (!s1 || !e1){ + log.error("补招时间格式错误"); + return; + } else { + startTime = startTime + " 00:00:00"; + endTime = endTime + " 23:59:59"; + } + } + long diff,diffDays,a,b = 0; + Date d1 = format.parse(startTime); + Date d2 = format.parse(endTime); + diff = d2.getTime() - d1.getTime(); + diffDays = diff / (24 * 60 * 60 * 1000-1000); + int days = (int) diffDays; + for (int i = 1; i <= days; i++) { + a = d1.getTime() + (long)(i-1)*(24 * 60 * 60) * 1000; + b = d1.getTime() + (long)i*(24 * 60 * 60) * 1000-1000; + startTime = format.format(a); + endTime = format.format(b); + //生成dayV表 + List dataV = getDataV(lineList,startTime,endTime); + if (!CollectionUtils.isEmpty(dataV)){ + insertDayV(dataV,a); + } + //生成dayI表 + List dataI = getDataI(lineList,startTime,endTime); + if (!CollectionUtils.isEmpty(dataI)){ + insertDayI(dataI,a); + } + //生成dayFlicker表 + List dataFlicker = getDataFlicker(lineList,startTime,endTime); + if (!CollectionUtils.isEmpty(dataFlicker)){ + insertDayFlicker(dataFlicker,a); + } + //生成dayFluc表 + List dataFluc = getDataFluc(lineList,startTime,endTime); + if (!CollectionUtils.isEmpty(dataFluc)){ + insertDayFluc(dataFluc,a); + } + //生成dayHarmphasicI表 + List dataHarmphasicI = getDataHarmphasicI(lineList,startTime,endTime); + if (!CollectionUtils.isEmpty(dataHarmphasicI)){ + insertDayHarmphasicI(dataHarmphasicI,a); + } + //生成dayHarmphasicV表 + List dataHarmphasicV = getDataHarmphasicV(lineList,startTime,endTime); + if (!CollectionUtils.isEmpty(dataHarmphasicV)){ + insertDayHarmphasicV(dataHarmphasicV,a); + } + //生成dayHarmPowerP表 + List dataHarmPowerP = getDataHarmPowerP(lineList,startTime,endTime); + if (!CollectionUtils.isEmpty(dataHarmPowerP)){ + insertDayHarmPowerP(dataHarmPowerP,a); + } + //生成dayHarmPowerQ表 + List dataHarmPowerQ = getDataHarmPowerQ(lineList,startTime,endTime); + if (!CollectionUtils.isEmpty(dataHarmPowerQ)){ + insertDayHarmPowerQ(dataHarmPowerQ,a); + } + //生成dayHarmPowerS表 + List dataHarmPowerS = getDataHarmPowerS(lineList,startTime,endTime); + if (!CollectionUtils.isEmpty(dataHarmPowerS)){ + insertDayHarmPowerS(dataHarmPowerS,a); + } + //生成dayHarmRateI + List dataHarmRateI = getDataHarmRateI(lineList,startTime,endTime); + if (!CollectionUtils.isEmpty(dataHarmRateI)){ + insertDayHarmRateI(dataHarmRateI,a); + } + //生成dayHarmRateV + List dataHarmRateV = getDataHarmRateV(lineList,startTime,endTime); + if (!CollectionUtils.isEmpty(dataHarmRateV)){ + insertDayHarmRateV(dataHarmRateV,a); + } + //生成dayInHarmI + List dataInHarmI = getDataInHarmI(lineList,startTime,endTime); + if (!CollectionUtils.isEmpty(dataInHarmI)){ + insertDayInHarmI(dataInHarmI,a); + } + //生成dayInHarmV + List dataInHarmV = getDataInHarmV(lineList,startTime,endTime); + if (!CollectionUtils.isEmpty(dataInHarmV)){ + insertDayInHarmV(dataInHarmV,a); + } + //生成dayInHarmRateI + List dataInHarmRateI = getDataInHarmRateI(lineList,startTime,endTime); + if (!CollectionUtils.isEmpty(dataInHarmRateI)){ + insertDayInHarmRateI(dataInHarmRateI,a); + } + //生成dayInHarmRateV + List dataInHarmRateV = getDataInHarmRateV(lineList,startTime,endTime); + if (!CollectionUtils.isEmpty(dataInHarmRateV)){ + insertDayInHarmRateV(dataInHarmRateV,a); + } + //生成dayPlt + List dataPlt = getDataPlt(lineList,startTime,endTime); + if (!CollectionUtils.isEmpty(dataPlt)){ + insertDayPlt(dataPlt,a); + } + } + } + + /** + * 功能描述:获取dataV数据 + * @author xy + * @param lineList 监测点集合 + * @param startTime 起始时间 + * @param endTime 结束时间 + * @date 2022/5/10 14:56 + * @return List + */ + public List getDataV(List lineList, String startTime, String endTime){ + List result = new ArrayList<>(); + StringBuilder stringBuilder = lineStringBuilder(lineList); + //最小值 + StringBuilder stringBuilder1 = new StringBuilder(); + StringBuilder stringBuilder2 = new StringBuilder(); + stringBuilder1.append("min(freq) AS freq,min(freq_dev) AS freq_dev,min(rms) AS rms,min(rms_lvr) AS rms_lvr,min(v_neg) AS v_neg,min(v_pos) AS v_pos,min(v_thd) AS v_thd,min(v_unbalance) AS v_unbalance,min(v_zero) AS v_zero,min(vl_dev) AS vl_dev,min(vu_dev) AS vu_dev,"); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder1.append("min(v_").append(i).append(") AS v_").append(i); + } else { + stringBuilder1.append("min(v_").append(i).append(") AS v_").append(i).append(","); + } + } + stringBuilder2.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'MIN' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql1 = "select "+stringBuilder1+" from data_v where "+stringBuilder+stringBuilder2; + QueryResult sqlResult1 = influxDbUtils.query(sql1); + InfluxDBResultMapper resultMapper1 = new InfluxDBResultMapper(); + List list1 = resultMapper1.toPOJO(sqlResult1, DataV.class); + //最大值 + StringBuilder stringBuilder3 = new StringBuilder(); + StringBuilder stringBuilder4 = new StringBuilder(); + stringBuilder3.append("max(freq) AS freq,max(freq_dev) AS freq_dev,max(rms) AS rms,max(rms_lvr) AS rms_lvr,max(v_neg) AS v_neg,max(v_pos) AS v_pos,max(v_thd) AS v_thd,max(v_unbalance) AS v_unbalance,max(v_zero) AS v_zero,max(vl_dev) AS vl_dev,max(vu_dev) AS vu_dev,"); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder3.append("max(v_").append(i).append(") AS v_").append(i); + } else { + stringBuilder3.append("max(v_").append(i).append(") AS v_").append(i).append(","); + } + } + stringBuilder4.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'MAX' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql2 = "select "+stringBuilder3+" from data_v where "+stringBuilder+stringBuilder4; + QueryResult sqlResult2 = influxDbUtils.query(sql2); + InfluxDBResultMapper resultMapper2 = new InfluxDBResultMapper(); + List list2 = resultMapper2.toPOJO(sqlResult2, DataV.class); + //平均值 + StringBuilder stringBuilder5 = new StringBuilder(); + StringBuilder stringBuilder6 = new StringBuilder(); + stringBuilder5.append("mean(freq) AS freq,mean(freq_dev) AS freq_dev,mean(rms) AS rms,mean(rms_lvr) AS rms_lvr,mean(v_neg) AS v_neg,mean(v_pos) AS v_pos,mean(v_thd) AS v_thd,mean(v_unbalance) AS v_unbalance,mean(v_zero) AS v_zero,mean(vl_dev) AS vl_dev,mean(vu_dev) AS vu_dev,"); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder5.append("mean(v_").append(i).append(") AS v_").append(i); + } else { + stringBuilder5.append("mean(v_").append(i).append(") AS v_").append(i).append(","); + } + } + stringBuilder6.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'AVG' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql3 = "select "+stringBuilder5+" from data_v where "+stringBuilder+stringBuilder6; + QueryResult sqlResult3 = influxDbUtils.query(sql3); + InfluxDBResultMapper resultMapper3 = new InfluxDBResultMapper(); + List list3 = resultMapper3.toPOJO(sqlResult3, DataV.class); + //CP95值 + StringBuilder stringBuilder7 = new StringBuilder(); + StringBuilder stringBuilder8 = new StringBuilder(); + stringBuilder7.append("percentile(freq,95) AS freq,percentile(freq_dev,95) AS freq_dev,percentile(rms,95) AS rms,percentile(rms_lvr,95) AS rms_lvr,percentile(v_neg,95) AS v_neg,percentile(v_pos,95) AS v_pos,percentile(v_thd,95) AS v_thd,percentile(v_unbalance,95) AS v_unbalance,percentile(v_zero,95) AS v_zero,percentile(vl_dev,95) AS vl_dev,percentile(vu_dev,95) AS vu_dev,"); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder7.append("percentile(v_").append(i).append(",95) AS v_").append(i); + } else { + stringBuilder7.append("percentile(v_").append(i).append(",95) AS v_").append(i).append(","); + } + } + stringBuilder8.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'CP95' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql4 = "select "+stringBuilder7+" from data_v where "+stringBuilder+stringBuilder8; + QueryResult sqlResult4 = influxDbUtils.query(sql4); + InfluxDBResultMapper resultMapper4 = new InfluxDBResultMapper(); + List list4 = resultMapper4.toPOJO(sqlResult4, DataV.class); + result.addAll(list1); + result.addAll(list2); + result.addAll(list3); + result.addAll(list4); + return result; + } + + /** + * 功能描述:插入dayV表数据 + * @author xy + * @param list dataV集合 + * @param time 时间戳 + * @date 2022/5/11 14:55 + */ + private void insertDayV(List list, long time){ + List records = new ArrayList<>(); + list.forEach(item->{ + Map tags = new HashMap<>(); + Map fields = new HashMap<>(); + tags.put("line_id",item.getLineId()); + tags.put("phasic_type",item.getPhaseType()); + tags.put("quality_flag",item.getQualityFlag()); + tags.put("value_type",item.getValueType()); + fields.put("freq",item.getFreq()); + fields.put("freq_dev",item.getFreqDev()); + fields.put("rms",item.getRms()); + fields.put("rms_lvr",item.getRmsLvr()); + fields.put("v_neg",item.getVNeg()); + fields.put("v_pos",item.getVPos()); + fields.put("v_thd",item.getVThd()); + fields.put("v_unbalance",item.getVUnbalance()); + fields.put("v_zero",item.getVZero()); + fields.put("vl_dev",item.getVlDev()); + fields.put("vu_dev",item.getVuDev()); + fields.put("v_1",item.getV1()); + fields.put("v_2",item.getV2()); + fields.put("v_3",item.getV3()); + fields.put("v_4",item.getV4()); + fields.put("v_5",item.getV5()); + fields.put("v_6",item.getV6()); + fields.put("v_7",item.getV7()); + fields.put("v_8",item.getV8()); + fields.put("v_9",item.getV9()); + fields.put("v_10",item.getV10()); + fields.put("v_11",item.getV11()); + fields.put("v_12",item.getV12()); + fields.put("v_13",item.getV13()); + fields.put("v_14",item.getV14()); + fields.put("v_15",item.getV15()); + fields.put("v_16",item.getV16()); + fields.put("v_17",item.getV17()); + fields.put("v_18",item.getV18()); + fields.put("v_19",item.getV19()); + fields.put("v_20",item.getV20()); + fields.put("v_21",item.getV21()); + fields.put("v_22",item.getV22()); + fields.put("v_23",item.getV23()); + fields.put("v_24",item.getV24()); + fields.put("v_25",item.getV25()); + fields.put("v_26",item.getV26()); + fields.put("v_27",item.getV27()); + fields.put("v_28",item.getV28()); + fields.put("v_29",item.getV29()); + fields.put("v_30",item.getV30()); + fields.put("v_31",item.getV31()); + fields.put("v_32",item.getV32()); + fields.put("v_33",item.getV33()); + fields.put("v_34",item.getV34()); + fields.put("v_35",item.getV35()); + fields.put("v_36",item.getV36()); + fields.put("v_37",item.getV37()); + fields.put("v_38",item.getV38()); + fields.put("v_39",item.getV39()); + fields.put("v_40",item.getV40()); + fields.put("v_41",item.getV41()); + fields.put("v_42",item.getV42()); + fields.put("v_43",item.getV43()); + fields.put("v_44",item.getV44()); + fields.put("v_45",item.getV45()); + fields.put("v_46",item.getV46()); + fields.put("v_47",item.getV47()); + fields.put("v_48",item.getV48()); + fields.put("v_49",item.getV49()); + fields.put("v_50",item.getV50()); + Point point = influxDbUtils.pointBuilder("day_v", time, TimeUnit.MILLISECONDS, tags, fields); + BatchPoints batchPoints = BatchPoints.database(DATABASE).tag("line_id", item.getLineId()).tag("phasic_type",item.getPhaseType()).tag("quality_flag",item.getQualityFlag()).tag("value_type",item.getValueType()).retentionPolicy("").consistency(InfluxDB.ConsistencyLevel.ALL).build(); + batchPoints.point(point); + records.add(batchPoints.lineProtocol()); + }); + influxDbUtils.batchInsert(DATABASE,"", InfluxDB.ConsistencyLevel.ALL, records); + } + + + /** + * 功能描述:获取dataI数据 + * @author xy + * @param lineList 监测点集合 + * @param startTime 起始时间 + * @param endTime 结束时间 + * @date 2022/5/10 14:56 + * @return List + */ + public List getDataI(List lineList, String startTime, String endTime){ + List result = new ArrayList<>(); + StringBuilder stringBuilder = lineStringBuilder(lineList); + //最小值 + StringBuilder stringBuilder1 = new StringBuilder(); + StringBuilder stringBuilder2 = new StringBuilder(); + stringBuilder1.append("min(rms) AS rms,min(i_neg) AS i_neg,min(i_pos) AS i_pos,min(i_thd) AS i_thd,min(i_unbalance) AS i_unbalance,min(i_zero) AS i_zero,"); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder1.append("min(i_").append(i).append(") AS i_").append(i); + } else { + stringBuilder1.append("min(i_").append(i).append(") AS i_").append(i).append(","); + } + } + stringBuilder2.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'MIN' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql1 = "select "+stringBuilder1+" from data_i where "+stringBuilder+stringBuilder2; + QueryResult sqlResult1 = influxDbUtils.query(sql1); + InfluxDBResultMapper resultMapper1 = new InfluxDBResultMapper(); + List list1 = resultMapper1.toPOJO(sqlResult1, DataI.class); + //最大值 + StringBuilder stringBuilder3 = new StringBuilder(); + StringBuilder stringBuilder4 = new StringBuilder(); + stringBuilder3.append("max(rms) AS rms,max(i_neg) AS i_neg,max(i_pos) AS i_pos,max(i_thd) AS i_thd,max(i_unbalance) AS i_unbalance,max(i_zero) AS i_zero,"); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder3.append("max(i_").append(i).append(") AS i_").append(i); + } else { + stringBuilder3.append("max(i_").append(i).append(") AS i_").append(i).append(","); + } + } + stringBuilder4.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'MAX' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql2 = "select "+stringBuilder3+" from data_i where "+stringBuilder+stringBuilder4; + QueryResult sqlResult2 = influxDbUtils.query(sql2); + InfluxDBResultMapper resultMapper2 = new InfluxDBResultMapper(); + List list2 = resultMapper2.toPOJO(sqlResult2, DataI.class); + //平均值 + StringBuilder stringBuilder5 = new StringBuilder(); + StringBuilder stringBuilder6 = new StringBuilder(); + stringBuilder5.append("mean(rms) AS rms,mean(i_neg) AS i_neg,mean(i_pos) AS i_pos,mean(i_thd) AS i_thd,mean(i_unbalance) AS i_unbalance,mean(i_zero) AS i_zero,"); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder5.append("mean(i_").append(i).append(") AS i_").append(i); + } else { + stringBuilder5.append("mean(i_").append(i).append(") AS i_").append(i).append(","); + } + } + stringBuilder6.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'AVG' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql3 = "select "+stringBuilder5+" from data_i where "+stringBuilder+stringBuilder6; + QueryResult sqlResult3 = influxDbUtils.query(sql3); + InfluxDBResultMapper resultMapper3 = new InfluxDBResultMapper(); + List list3 = resultMapper3.toPOJO(sqlResult3, DataI.class); + //CP95值 + StringBuilder stringBuilder7 = new StringBuilder(); + StringBuilder stringBuilder8 = new StringBuilder(); + stringBuilder7.append("percentile(rms,95) AS rms,percentile(i_neg,95) AS i_neg,percentile(i_pos,95) AS i_pos,percentile(i_thd,95) AS i_thd,percentile(i_unbalance,95) AS i_unbalance,percentile(i_zero,95) AS i_zero,"); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder7.append("percentile(i_").append(i).append(",95) AS i_").append(i); + } else { + stringBuilder7.append("percentile(i_").append(i).append(",95) AS i_").append(i).append(","); + } + } + stringBuilder8.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'CP95' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql4 = "select "+stringBuilder7+" from data_i where "+stringBuilder+stringBuilder8; + QueryResult sqlResult4 = influxDbUtils.query(sql4); + InfluxDBResultMapper resultMapper4 = new InfluxDBResultMapper(); + List list4 = resultMapper4.toPOJO(sqlResult4, DataI.class); + result.addAll(list1); + result.addAll(list2); + result.addAll(list3); + result.addAll(list4); + return result; + } + + /** + * 功能描述:插入dayI表数据 + * @author xy + * @param list dataI集合 + * @param time 时间戳 + * @date 2022/5/11 14:55 + */ + private void insertDayI(List list, long time){ + List records = new ArrayList<>(); + list.forEach(item->{ + Map tags = new HashMap<>(); + Map fields = new HashMap<>(); + tags.put("line_id",item.getLineId()); + tags.put("phasic_type",item.getPhaseType()); + tags.put("quality_flag",item.getQualityFlag()); + tags.put("value_type",item.getValueType()); + fields.put("rms",item.getRms()); + fields.put("i_neg",item.getINeg()); + fields.put("i_pos",item.getIPos()); + fields.put("i_thd",item.getIThd()); + fields.put("i_unbalance",item.getIUnbalance()); + fields.put("i_zero",item.getIZero()); + fields.put("i_1",item.getI1()); + fields.put("i_2",item.getI2()); + fields.put("i_3",item.getI3()); + fields.put("i_4",item.getI4()); + fields.put("i_5",item.getI5()); + fields.put("i_6",item.getI6()); + fields.put("i_7",item.getI7()); + fields.put("i_8",item.getI8()); + fields.put("i_9",item.getI9()); + fields.put("i_10",item.getI10()); + fields.put("i_11",item.getI11()); + fields.put("i_12",item.getI12()); + fields.put("i_13",item.getI13()); + fields.put("i_14",item.getI14()); + fields.put("i_15",item.getI15()); + fields.put("i_16",item.getI16()); + fields.put("i_17",item.getI17()); + fields.put("i_18",item.getI18()); + fields.put("i_19",item.getI19()); + fields.put("i_20",item.getI20()); + fields.put("i_21",item.getI21()); + fields.put("i_22",item.getI22()); + fields.put("i_23",item.getI23()); + fields.put("i_24",item.getI24()); + fields.put("i_25",item.getI25()); + fields.put("i_26",item.getI26()); + fields.put("i_27",item.getI27()); + fields.put("i_28",item.getI28()); + fields.put("i_29",item.getI29()); + fields.put("i_30",item.getI30()); + fields.put("i_31",item.getI31()); + fields.put("i_32",item.getI32()); + fields.put("i_33",item.getI33()); + fields.put("i_34",item.getI34()); + fields.put("i_35",item.getI35()); + fields.put("i_36",item.getI36()); + fields.put("i_37",item.getI37()); + fields.put("i_38",item.getI38()); + fields.put("i_39",item.getI39()); + fields.put("i_40",item.getI40()); + fields.put("i_41",item.getI41()); + fields.put("i_42",item.getI42()); + fields.put("i_43",item.getI43()); + fields.put("i_44",item.getI44()); + fields.put("i_45",item.getI45()); + fields.put("i_46",item.getI46()); + fields.put("i_47",item.getI47()); + fields.put("i_48",item.getI48()); + fields.put("i_49",item.getI49()); + fields.put("i_50",item.getI50()); + Point point = influxDbUtils.pointBuilder("day_i", time, TimeUnit.MILLISECONDS, tags, fields); + BatchPoints batchPoints = BatchPoints.database(DATABASE).tag("line_id", item.getLineId()).tag("phasic_type",item.getPhaseType()).tag("quality_flag",item.getQualityFlag()).tag("value_type",item.getValueType()).retentionPolicy("").consistency(InfluxDB.ConsistencyLevel.ALL).build(); + batchPoints.point(point); + records.add(batchPoints.lineProtocol()); + }); + influxDbUtils.batchInsert(DATABASE,"", InfluxDB.ConsistencyLevel.ALL, records); + } + + + /** + * 功能描述:获取dataFlicker数据 + * @author xy + * @param startTime 起始时间 + * @param endTime 结束时间 + * @date 2022/5/10 14:56 + * @return List + */ + public List getDataFlicker(List lineList, String startTime, String endTime){ + List result = new ArrayList<>(); + StringBuilder stringBuilder = lineStringBuilder(lineList); + //最小值 + String sql1 = "select min(fluc) AS fluc,min(plt) AS plt,min(pst) AS pst from data_flicker where "+stringBuilder+" time >= '" + startTime + "' and time <= '" + endTime + "' and value_type = 'MIN' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"; + QueryResult sqlResult1 = influxDbUtils.query(sql1); + InfluxDBResultMapper resultMapper1 = new InfluxDBResultMapper(); + List list1 = resultMapper1.toPOJO(sqlResult1, DataFlicker.class); + //最大值 + String sql2 = "select max(fluc) AS fluc,max(plt) AS plt,max(pst) AS pst from data_flicker where "+stringBuilder+" time >= '" + startTime + "' and time <= '" + endTime + "' and value_type = 'MAX' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"; + QueryResult sqlResult2 = influxDbUtils.query(sql2); + InfluxDBResultMapper resultMapper2 = new InfluxDBResultMapper(); + List list2 = resultMapper2.toPOJO(sqlResult2, DataFlicker.class); + //平均值 + String sql3 = "select mean(fluc) AS fluc,mean(plt) AS plt,mean(pst) AS pst from data_flicker where "+stringBuilder+" time >= '" + startTime + "' and time <= '" + endTime + "' and value_type = 'AVG' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"; + QueryResult sqlResult3 = influxDbUtils.query(sql3); + InfluxDBResultMapper resultMapper3= new InfluxDBResultMapper(); + List list3 = resultMapper3.toPOJO(sqlResult3, DataFlicker.class); + //CP95值 + String sql4 = "select percentile(fluc,95) AS fluc,percentile(plt,95) AS plt,percentile(pst,95) AS pst from data_flicker where "+stringBuilder+" time >= '" + startTime + "' and time <= '" + endTime + "' and value_type = 'CP95' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"; + QueryResult sqlResult4 = influxDbUtils.query(sql4); + InfluxDBResultMapper resultMapper4= new InfluxDBResultMapper(); + List list4 = resultMapper4.toPOJO(sqlResult4, DataFlicker.class); + result.addAll(list1); + result.addAll(list2); + result.addAll(list3); + result.addAll(list4); + return result; + } + + /** + * 功能描述:插入dayFlicker表数据 + * @author xy + * @param list dataFlicker集合 + * @param time 时间戳 + * @date 2022/5/11 14:55 + */ + private void insertDayFlicker(List list, long time){ + List records = new ArrayList<>(); + list.forEach(item->{ + Map tags = new HashMap<>(); + Map fields = new HashMap<>(); + tags.put("line_id",item.getLineId()); + tags.put("phasic_type",item.getPhaseType()); + tags.put("quality_flag",item.getQualityFlag()); + tags.put("value_type",item.getValueType()); + fields.put("fluc",item.getFluc()); + fields.put("plt",item.getPlt()); + fields.put("pst",item.getPst()); + Point point = influxDbUtils.pointBuilder("day_flicker", time, TimeUnit.MILLISECONDS, tags, fields); + BatchPoints batchPoints = BatchPoints.database(DATABASE).tag("line_id", item.getLineId()).tag("phasic_type",item.getPhaseType()).tag("quality_flag",item.getQualityFlag()).tag("value_type",item.getValueType()).retentionPolicy("").consistency(InfluxDB.ConsistencyLevel.ALL).build(); + batchPoints.point(point); + records.add(batchPoints.lineProtocol()); + }); + influxDbUtils.batchInsert(DATABASE,"", InfluxDB.ConsistencyLevel.ALL, records); + } + + + /** + * 功能描述:获取dataFluc数据 + * @author xy + * @param startTime 起始时间 + * @param endTime 结束时间 + * @date 2022/5/10 14:56 + * @return List + */ + public List getDataFluc(List lineList, String startTime, String endTime){ + List result = new ArrayList<>(); + StringBuilder stringBuilder = lineStringBuilder(lineList); + //最小值 + String sql1 = "select min(fluc) AS fluc,min(fluccf) AS fluccf from data_fluc where "+stringBuilder+" time >= '" + startTime + "' and time <= '" + endTime + "' and value_type = 'MIN' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"; + QueryResult sqlResult1 = influxDbUtils.query(sql1); + InfluxDBResultMapper resultMapper1 = new InfluxDBResultMapper(); + List list1 = resultMapper1.toPOJO(sqlResult1, DataFluc.class); + //最大值 + String sql2 = "select max(fluc) AS fluc,max(fluccf) AS fluccf from data_fluc where "+stringBuilder+" time >= '" + startTime + "' and time <= '" + endTime + "' and value_type = 'MAX' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"; + QueryResult sqlResult2 = influxDbUtils.query(sql2); + InfluxDBResultMapper resultMapper2 = new InfluxDBResultMapper(); + List list2 = resultMapper2.toPOJO(sqlResult2, DataFluc.class); + //平均值 + String sql3 = "select mean(fluc) AS fluc,mean(fluccf) AS fluccf from data_fluc where "+stringBuilder+" time >= '" + startTime + "' and time <= '" + endTime + "' and value_type = 'AVG' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"; + QueryResult sqlResult3 = influxDbUtils.query(sql3); + InfluxDBResultMapper resultMapper3= new InfluxDBResultMapper(); + List list3 = resultMapper3.toPOJO(sqlResult3, DataFluc.class); + //CP95值 + String sql4 = "select percentile(fluc,95) AS fluc,percentile(fluccf,95) AS fluccf from data_fluc where "+stringBuilder+" time >= '" + startTime + "' and time <= '" + endTime + "' and value_type = 'CP95' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"; + QueryResult sqlResult4 = influxDbUtils.query(sql4); + InfluxDBResultMapper resultMapper4= new InfluxDBResultMapper(); + List list4 = resultMapper4.toPOJO(sqlResult4, DataFluc.class); + result.addAll(list1); + result.addAll(list2); + result.addAll(list3); + result.addAll(list4); + return result; + } + + /** + * 功能描述:插入dayFluc表数据 + * @author xy + * @param list dataFluc集合 + * @param time 时间戳 + * @date 2022/5/12 8:55 + */ + private void insertDayFluc(List list, long time){ + List records = new ArrayList<>(); + list.forEach(item->{ + Map tags = new HashMap<>(); + Map fields = new HashMap<>(); + tags.put("line_id",item.getLineId()); + tags.put("phasic_type",item.getPhaseType()); + tags.put("quality_flag",item.getQualityFlag()); + tags.put("value_type",item.getValueType()); + fields.put("fluc",item.getFluc()); + fields.put("fluccf",item.getFluccf()); + Point point = influxDbUtils.pointBuilder("day_fluc", time, TimeUnit.MILLISECONDS, tags, fields); + BatchPoints batchPoints = BatchPoints.database(DATABASE).tag("line_id", item.getLineId()).tag("phasic_type",item.getPhaseType()).tag("quality_flag",item.getQualityFlag()).tag("value_type",item.getValueType()).retentionPolicy("").consistency(InfluxDB.ConsistencyLevel.ALL).build(); + batchPoints.point(point); + records.add(batchPoints.lineProtocol()); + }); + influxDbUtils.batchInsert(DATABASE,"", InfluxDB.ConsistencyLevel.ALL, records); + } + + + /** + * 功能描述:获取data_harmphasic_i数据 + * @author xy + * @param startTime 起始时间 + * @param endTime 结束时间 + * @date 2022/5/10 14:56 + * @return List + */ + public List getDataHarmphasicI(List lineList, String startTime, String endTime){ + List result = new ArrayList<>(); + StringBuilder stringBuilder = lineStringBuilder(lineList); + //最小值 + StringBuilder stringBuilder1 = new StringBuilder(); + StringBuilder stringBuilder2 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder1.append("min(i_").append(i).append(") AS i_").append(i); + } else { + stringBuilder1.append("min(i_").append(i).append(") AS i_").append(i).append(","); + } + } + stringBuilder2.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'MIN' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql1 = "select "+stringBuilder1+" from data_harmphasic_i where "+stringBuilder+stringBuilder2; + QueryResult sqlResult1 = influxDbUtils.query(sql1); + InfluxDBResultMapper resultMapper1 = new InfluxDBResultMapper(); + List list1 = resultMapper1.toPOJO(sqlResult1, DataHarmPhasicI.class); + //最大值 + StringBuilder stringBuilder3 = new StringBuilder(); + StringBuilder stringBuilder4 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder3.append("max(i_").append(i).append(") AS i_").append(i); + } else { + stringBuilder3.append("max(i_").append(i).append(") AS i_").append(i).append(","); + } + } + stringBuilder4.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'MAX' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql2 = "select "+stringBuilder3+" from data_harmphasic_i where "+stringBuilder+stringBuilder4; + QueryResult sqlResult2 = influxDbUtils.query(sql2); + InfluxDBResultMapper resultMapper2 = new InfluxDBResultMapper(); + List list2 = resultMapper2.toPOJO(sqlResult2, DataHarmPhasicI.class); + //平均值 + StringBuilder stringBuilder5 = new StringBuilder(); + StringBuilder stringBuilder6 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder5.append("mean(i_").append(i).append(") AS i_").append(i); + } else { + stringBuilder5.append("mean(i_").append(i).append(") AS i_").append(i).append(","); + } + } + stringBuilder6.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'AVG' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql3 = "select "+stringBuilder5+" from data_harmphasic_i where "+stringBuilder+stringBuilder6; + QueryResult sqlResult3 = influxDbUtils.query(sql3); + InfluxDBResultMapper resultMapper3 = new InfluxDBResultMapper(); + List list3 = resultMapper3.toPOJO(sqlResult3, DataHarmPhasicI.class); + //CP95值 + StringBuilder stringBuilder7 = new StringBuilder(); + StringBuilder stringBuilder8 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder7.append("percentile(i_").append(i).append(",95) AS i_").append(i); + } else { + stringBuilder7.append("percentile(i_").append(i).append(",95) AS i_").append(i).append(","); + } + } + stringBuilder8.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'CP95' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql4 = "select "+stringBuilder7+" from data_harmphasic_i where "+stringBuilder+stringBuilder8; + QueryResult sqlResult4 = influxDbUtils.query(sql4); + InfluxDBResultMapper resultMapper4 = new InfluxDBResultMapper(); + List list4 = resultMapper4.toPOJO(sqlResult4, DataHarmPhasicI.class); + result.addAll(list1); + result.addAll(list2); + result.addAll(list3); + result.addAll(list4); + return result; + } + + /** + * 功能描述:插入day_harmphasic_i表数据 + * @author xy + * @param list data_harmphasic_i表数据 + * @param time 时间戳 + * @date 2022/5/12 8:55 + */ + private void insertDayHarmphasicI(List list, long time){ + List records = new ArrayList<>(); + list.forEach(item->{ + Map tags = new HashMap<>(); + Map fields = new HashMap<>(); + tags.put("line_id",item.getLineId()); + tags.put("phasic_type",item.getPhaseType()); + tags.put("quality_flag",item.getQualityFlag()); + tags.put("value_type",item.getValueType()); + fields.put("i_1",item.getI1()); + fields.put("i_2",item.getI2()); + fields.put("i_3",item.getI3()); + fields.put("i_4",item.getI4()); + fields.put("i_5",item.getI5()); + fields.put("i_6",item.getI6()); + fields.put("i_7",item.getI7()); + fields.put("i_8",item.getI8()); + fields.put("i_9",item.getI9()); + fields.put("i_10",item.getI10()); + fields.put("i_11",item.getI11()); + fields.put("i_12",item.getI12()); + fields.put("i_13",item.getI13()); + fields.put("i_14",item.getI14()); + fields.put("i_15",item.getI15()); + fields.put("i_16",item.getI16()); + fields.put("i_17",item.getI17()); + fields.put("i_18",item.getI18()); + fields.put("i_19",item.getI19()); + fields.put("i_20",item.getI20()); + fields.put("i_21",item.getI21()); + fields.put("i_22",item.getI22()); + fields.put("i_23",item.getI23()); + fields.put("i_24",item.getI24()); + fields.put("i_25",item.getI25()); + fields.put("i_26",item.getI26()); + fields.put("i_27",item.getI27()); + fields.put("i_28",item.getI28()); + fields.put("i_29",item.getI29()); + fields.put("i_30",item.getI30()); + fields.put("i_31",item.getI31()); + fields.put("i_32",item.getI32()); + fields.put("i_33",item.getI33()); + fields.put("i_34",item.getI34()); + fields.put("i_35",item.getI35()); + fields.put("i_36",item.getI36()); + fields.put("i_37",item.getI37()); + fields.put("i_38",item.getI38()); + fields.put("i_39",item.getI39()); + fields.put("i_40",item.getI40()); + fields.put("i_41",item.getI41()); + fields.put("i_42",item.getI42()); + fields.put("i_43",item.getI43()); + fields.put("i_44",item.getI44()); + fields.put("i_45",item.getI45()); + fields.put("i_46",item.getI46()); + fields.put("i_47",item.getI47()); + fields.put("i_48",item.getI48()); + fields.put("i_49",item.getI49()); + fields.put("i_50",item.getI50()); + Point point = influxDbUtils.pointBuilder("day_harmphasic_i", time, TimeUnit.MILLISECONDS, tags, fields); + BatchPoints batchPoints = BatchPoints.database(DATABASE).tag("line_id", item.getLineId()).tag("phasic_type",item.getPhaseType()).tag("quality_flag",item.getQualityFlag()).tag("value_type",item.getValueType()).retentionPolicy("").consistency(InfluxDB.ConsistencyLevel.ALL).build(); + batchPoints.point(point); + records.add(batchPoints.lineProtocol()); + }); + influxDbUtils.batchInsert(DATABASE,"", InfluxDB.ConsistencyLevel.ALL, records); + } + + /** + * 功能描述:获取data_harmphasic_v数据 + * @author xy + * @param startTime 起始时间 + * @param endTime 结束时间 + * @date 2022/5/10 14:56 + * @return List + */ + public List getDataHarmphasicV(List lineList, String startTime, String endTime){ + List result = new ArrayList<>(); + StringBuilder stringBuilder = lineStringBuilder(lineList); + //最小值 + StringBuilder stringBuilder1 = new StringBuilder(); + StringBuilder stringBuilder2 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder1.append("min(v_").append(i).append(") AS v_").append(i); + } else { + stringBuilder1.append("min(v_").append(i).append(") AS v_").append(i).append(","); + } + } + stringBuilder2.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'MIN' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql1 = "select "+stringBuilder1+" from data_harmphasic_v where "+stringBuilder+stringBuilder2; + QueryResult sqlResult1 = influxDbUtils.query(sql1); + InfluxDBResultMapper resultMapper1 = new InfluxDBResultMapper(); + List list1 = resultMapper1.toPOJO(sqlResult1, DataHarmPhasicV.class); + //最大值 + StringBuilder stringBuilder3 = new StringBuilder(); + StringBuilder stringBuilder4 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder3.append("max(v_").append(i).append(") AS v_").append(i); + } else { + stringBuilder3.append("max(v_").append(i).append(") AS v_").append(i).append(","); + } + } + stringBuilder4.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'MAX' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql2 = "select "+stringBuilder3+" from data_harmphasic_v where "+stringBuilder+stringBuilder4; + QueryResult sqlResult2 = influxDbUtils.query(sql2); + InfluxDBResultMapper resultMapper2 = new InfluxDBResultMapper(); + List list2 = resultMapper2.toPOJO(sqlResult2, DataHarmPhasicV.class); + //平均值 + StringBuilder stringBuilder5 = new StringBuilder(); + StringBuilder stringBuilder6 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder5.append("mean(v_").append(i).append(") AS v_").append(i); + } else { + stringBuilder5.append("mean(v_").append(i).append(") AS v_").append(i).append(","); + } + } + stringBuilder6.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'AVG' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql3 = "select "+stringBuilder5+" from data_harmphasic_v where "+stringBuilder+stringBuilder6; + QueryResult sqlResult3 = influxDbUtils.query(sql3); + InfluxDBResultMapper resultMapper3 = new InfluxDBResultMapper(); + List list3 = resultMapper3.toPOJO(sqlResult3, DataHarmPhasicV.class); + //CP95值 + StringBuilder stringBuilder7 = new StringBuilder(); + StringBuilder stringBuilder8 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder7.append("percentile(v_").append(i).append(",95) AS v_").append(i); + } else { + stringBuilder7.append("percentile(v_").append(i).append(",95) AS v_").append(i).append(","); + } + } + stringBuilder8.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'CP95' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql4 = "select "+stringBuilder7+" from data_harmphasic_v where "+stringBuilder+stringBuilder8; + QueryResult sqlResult4 = influxDbUtils.query(sql4); + InfluxDBResultMapper resultMapper4 = new InfluxDBResultMapper(); + List list4 = resultMapper4.toPOJO(sqlResult4, DataHarmPhasicV.class); + result.addAll(list1); + result.addAll(list2); + result.addAll(list3); + result.addAll(list4); + return result; + } + + /** + * 功能描述:插入day_harmphasic_V表数据 + * @author xy + * @param list data_harmphasic_V表数据 + * @param time 时间戳 + * @date 2022/5/12 8:55 + */ + private void insertDayHarmphasicV(List list, long time){ + List records = new ArrayList<>(); + list.forEach(item->{ + Map tags = new HashMap<>(); + Map fields = new HashMap<>(); + tags.put("line_id",item.getLineId()); + tags.put("phasic_type",item.getPhaseType()); + tags.put("quality_flag",item.getQualityFlag()); + tags.put("value_type",item.getValueType()); + fields.put("v_1",item.getV1()); + fields.put("v_2",item.getV2()); + fields.put("v_3",item.getV3()); + fields.put("v_4",item.getV4()); + fields.put("v_5",item.getV5()); + fields.put("v_6",item.getV6()); + fields.put("v_7",item.getV7()); + fields.put("v_8",item.getV8()); + fields.put("v_9",item.getV9()); + fields.put("v_10",item.getV10()); + fields.put("v_11",item.getV11()); + fields.put("v_12",item.getV12()); + fields.put("v_13",item.getV13()); + fields.put("v_14",item.getV14()); + fields.put("v_15",item.getV15()); + fields.put("v_16",item.getV16()); + fields.put("v_17",item.getV17()); + fields.put("v_18",item.getV18()); + fields.put("v_19",item.getV19()); + fields.put("v_20",item.getV20()); + fields.put("v_21",item.getV21()); + fields.put("v_22",item.getV22()); + fields.put("v_23",item.getV23()); + fields.put("v_24",item.getV24()); + fields.put("v_25",item.getV25()); + fields.put("v_26",item.getV26()); + fields.put("v_27",item.getV27()); + fields.put("v_28",item.getV28()); + fields.put("v_29",item.getV29()); + fields.put("v_30",item.getV30()); + fields.put("v_31",item.getV31()); + fields.put("v_32",item.getV32()); + fields.put("v_33",item.getV33()); + fields.put("v_34",item.getV34()); + fields.put("v_35",item.getV35()); + fields.put("v_36",item.getV36()); + fields.put("v_37",item.getV37()); + fields.put("v_38",item.getV38()); + fields.put("v_39",item.getV39()); + fields.put("v_40",item.getV40()); + fields.put("v_41",item.getV41()); + fields.put("v_42",item.getV42()); + fields.put("v_43",item.getV43()); + fields.put("v_44",item.getV44()); + fields.put("v_45",item.getV45()); + fields.put("v_46",item.getV46()); + fields.put("v_47",item.getV47()); + fields.put("v_48",item.getV48()); + fields.put("v_49",item.getV49()); + fields.put("v_50",item.getV50()); + Point point = influxDbUtils.pointBuilder("day_harmphasic_v", time, TimeUnit.MILLISECONDS, tags, fields); + BatchPoints batchPoints = BatchPoints.database(DATABASE).tag("line_id", item.getLineId()).tag("phasic_type",item.getPhaseType()).tag("quality_flag",item.getQualityFlag()).tag("value_type",item.getValueType()).retentionPolicy("").consistency(InfluxDB.ConsistencyLevel.ALL).build(); + batchPoints.point(point); + records.add(batchPoints.lineProtocol()); + }); + influxDbUtils.batchInsert(DATABASE,"", InfluxDB.ConsistencyLevel.ALL, records); + } + + /** + * 功能描述:获取data_harmpower_p数据 + * @author xy + * @param startTime 起始时间 + * @param endTime 结束时间 + * @date 2022/5/10 14:56 + * @return List + */ + public List getDataHarmPowerP(List lineList, String startTime, String endTime){ + List result = new ArrayList<>(); + StringBuilder stringBuilder = lineStringBuilder(lineList); + //最小值 + StringBuilder stringBuilder1 = new StringBuilder(); + StringBuilder stringBuilder2 = new StringBuilder(); + stringBuilder1.append("min(p) AS p,min(df) AS df,min(pf) AS pf,"); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder1.append("min(p_").append(i).append(") AS p_").append(i); + } else { + stringBuilder1.append("min(p_").append(i).append(") AS p_").append(i).append(","); + } + } + stringBuilder2.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'MIN' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql1 = "select "+stringBuilder1+" from data_harmpower_p where "+stringBuilder+stringBuilder2; + QueryResult sqlResult1 = influxDbUtils.query(sql1); + InfluxDBResultMapper resultMapper1 = new InfluxDBResultMapper(); + List list1 = resultMapper1.toPOJO(sqlResult1, DataHarmPowerP.class); + //最大值 + StringBuilder stringBuilder3 = new StringBuilder(); + StringBuilder stringBuilder4 = new StringBuilder(); + stringBuilder3.append("max(p) AS p,max(df) AS df,max(pf) AS pf,"); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder3.append("max(p_").append(i).append(") AS p_").append(i); + } else { + stringBuilder3.append("max(p_").append(i).append(") AS p_").append(i).append(","); + } + } + stringBuilder4.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'MAX' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql2 = "select "+stringBuilder3+" from data_harmpower_p where "+stringBuilder+stringBuilder4; + QueryResult sqlResult2 = influxDbUtils.query(sql2); + InfluxDBResultMapper resultMapper2 = new InfluxDBResultMapper(); + List list2 = resultMapper2.toPOJO(sqlResult2, DataHarmPowerP.class); + //平均值 + StringBuilder stringBuilder5 = new StringBuilder(); + StringBuilder stringBuilder6 = new StringBuilder(); + stringBuilder5.append("mean(p) AS p,mean(df) AS df,mean(pf) AS pf,"); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder5.append("mean(p_").append(i).append(") AS p_").append(i); + } else { + stringBuilder5.append("mean(p_").append(i).append(") AS p_").append(i).append(","); + } + } + stringBuilder6.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'AVG' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql3 = "select "+stringBuilder5+" from data_harmpower_p where "+stringBuilder+stringBuilder6; + QueryResult sqlResult3 = influxDbUtils.query(sql3); + InfluxDBResultMapper resultMapper3 = new InfluxDBResultMapper(); + List list3 = resultMapper3.toPOJO(sqlResult3, DataHarmPowerP.class); + //CP95值 + StringBuilder stringBuilder7 = new StringBuilder(); + StringBuilder stringBuilder8 = new StringBuilder(); + stringBuilder7.append("percentile(p,95) AS p,percentile(df,95) AS df,percentile(pf,95) AS pf,"); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder7.append("percentile(p_").append(i).append(",95) AS p_").append(i); + } else { + stringBuilder7.append("percentile(p_").append(i).append(",95) AS p_").append(i).append(","); + } + } + stringBuilder8.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'CP95' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql4 = "select "+stringBuilder7+" from data_harmpower_p where "+stringBuilder+stringBuilder8; + QueryResult sqlResult4 = influxDbUtils.query(sql4); + InfluxDBResultMapper resultMapper4 = new InfluxDBResultMapper(); + List list4 = resultMapper4.toPOJO(sqlResult4, DataHarmPowerP.class); + result.addAll(list1); + result.addAll(list2); + result.addAll(list3); + result.addAll(list4); + return result; + } + + /** + * 功能描述:插入day_harmpower_p表数据 + * @author xy + * @param list data_harmpower_p表数据 + * @param time 时间戳 + * @date 2022/5/12 8:55 + */ + private void insertDayHarmPowerP(List list, long time){ + List records = new ArrayList<>(); + list.forEach(item->{ + Map tags = new HashMap<>(); + Map fields = new HashMap<>(); + tags.put("line_id",item.getLineId()); + tags.put("phasic_type",item.getPhaseType()); + tags.put("quality_flag",item.getQualityFlag()); + tags.put("value_type",item.getValueType()); + fields.put("df",item.getDf()); + fields.put("pf",item.getPf()); + fields.put("p",item.getP()); + fields.put("p_1",item.getP1()); + fields.put("p_2",item.getP2()); + fields.put("p_3",item.getP3()); + fields.put("p_4",item.getP4()); + fields.put("p_5",item.getP5()); + fields.put("p_6",item.getP6()); + fields.put("p_7",item.getP7()); + fields.put("p_8",item.getP8()); + fields.put("p_9",item.getP9()); + fields.put("p_10",item.getP10()); + fields.put("p_11",item.getP11()); + fields.put("p_12",item.getP12()); + fields.put("p_13",item.getP13()); + fields.put("p_14",item.getP14()); + fields.put("p_15",item.getP15()); + fields.put("p_16",item.getP16()); + fields.put("p_17",item.getP17()); + fields.put("p_18",item.getP18()); + fields.put("p_19",item.getP19()); + fields.put("p_20",item.getP20()); + fields.put("p_21",item.getP21()); + fields.put("p_22",item.getP22()); + fields.put("p_23",item.getP23()); + fields.put("p_24",item.getP24()); + fields.put("p_25",item.getP25()); + fields.put("p_26",item.getP26()); + fields.put("p_27",item.getP27()); + fields.put("p_28",item.getP28()); + fields.put("p_29",item.getP29()); + fields.put("p_30",item.getP30()); + fields.put("p_31",item.getP31()); + fields.put("p_32",item.getP32()); + fields.put("p_33",item.getP33()); + fields.put("p_34",item.getP34()); + fields.put("p_35",item.getP35()); + fields.put("p_36",item.getP36()); + fields.put("p_37",item.getP37()); + fields.put("p_38",item.getP38()); + fields.put("p_39",item.getP39()); + fields.put("p_40",item.getP40()); + fields.put("p_41",item.getP41()); + fields.put("p_42",item.getP42()); + fields.put("p_43",item.getP43()); + fields.put("p_44",item.getP44()); + fields.put("p_45",item.getP45()); + fields.put("p_46",item.getP46()); + fields.put("p_47",item.getP47()); + fields.put("p_48",item.getP48()); + fields.put("p_49",item.getP49()); + fields.put("p_50",item.getP50()); + Point point = influxDbUtils.pointBuilder("day_harmpower_p", time, TimeUnit.MILLISECONDS, tags, fields); + BatchPoints batchPoints = BatchPoints.database(DATABASE).tag("line_id", item.getLineId()).tag("phasic_type",item.getPhaseType()).tag("quality_flag",item.getQualityFlag()).tag("value_type",item.getValueType()).retentionPolicy("").consistency(InfluxDB.ConsistencyLevel.ALL).build(); + batchPoints.point(point); + records.add(batchPoints.lineProtocol()); + }); + influxDbUtils.batchInsert(DATABASE,"", InfluxDB.ConsistencyLevel.ALL, records); + } + + + /** + * 功能描述:获取data_harmpower_q数据 + * @author xy + * @param startTime 起始时间 + * @param endTime 结束时间 + * @date 2022/5/10 14:56 + * @return List + */ + public List getDataHarmPowerQ(List lineList, String startTime, String endTime){ + List result = new ArrayList<>(); + StringBuilder stringBuilder = lineStringBuilder(lineList); + //最小值 + StringBuilder stringBuilder1 = new StringBuilder(); + StringBuilder stringBuilder2 = new StringBuilder(); + stringBuilder1.append("min(q) AS q,"); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder1.append("min(q_").append(i).append(") AS q_").append(i); + } else { + stringBuilder1.append("min(q_").append(i).append(") AS q_").append(i).append(","); + } + } + stringBuilder2.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'MIN' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql1 = "select "+stringBuilder1+" from data_harmpower_q where "+stringBuilder+stringBuilder2; + QueryResult sqlResult1 = influxDbUtils.query(sql1); + InfluxDBResultMapper resultMapper1 = new InfluxDBResultMapper(); + List list1 = resultMapper1.toPOJO(sqlResult1, DataHarmPowerQ.class); + //最大值 + StringBuilder stringBuilder3 = new StringBuilder(); + StringBuilder stringBuilder4 = new StringBuilder(); + stringBuilder3.append("max(q) AS q,"); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder3.append("max(q_").append(i).append(") AS q_").append(i); + } else { + stringBuilder3.append("max(q_").append(i).append(") AS q_").append(i).append(","); + } + } + stringBuilder4.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'MAX' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql2 = "select "+stringBuilder3+" from data_harmpower_q where "+stringBuilder+stringBuilder4; + QueryResult sqlResult2 = influxDbUtils.query(sql2); + InfluxDBResultMapper resultMapper2 = new InfluxDBResultMapper(); + List list2 = resultMapper2.toPOJO(sqlResult2, DataHarmPowerQ.class); + //平均值 + StringBuilder stringBuilder5 = new StringBuilder(); + StringBuilder stringBuilder6 = new StringBuilder(); + stringBuilder5.append("mean(q) AS q,"); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder5.append("mean(q_").append(i).append(") AS q_").append(i); + } else { + stringBuilder5.append("mean(q_").append(i).append(") AS q_").append(i).append(","); + } + } + stringBuilder6.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'AVG' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql3 = "select "+stringBuilder5+" from data_harmpower_q where "+stringBuilder+stringBuilder6; + QueryResult sqlResult3 = influxDbUtils.query(sql3); + InfluxDBResultMapper resultMapper3 = new InfluxDBResultMapper(); + List list3 = resultMapper3.toPOJO(sqlResult3, DataHarmPowerQ.class); + //CP95值 + StringBuilder stringBuilder7 = new StringBuilder(); + StringBuilder stringBuilder8 = new StringBuilder(); + stringBuilder7.append("percentile(q,95) AS q,"); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder7.append("percentile(q_").append(i).append(",95) AS q_").append(i); + } else { + stringBuilder7.append("percentile(q_").append(i).append(",95) AS q_").append(i).append(","); + } + } + stringBuilder8.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'CP95' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql4 = "select "+stringBuilder7+" from data_harmpower_q where "+stringBuilder+stringBuilder8; + QueryResult sqlResult4 = influxDbUtils.query(sql4); + InfluxDBResultMapper resultMapper4 = new InfluxDBResultMapper(); + List list4 = resultMapper4.toPOJO(sqlResult4, DataHarmPowerQ.class); + result.addAll(list1); + result.addAll(list2); + result.addAll(list3); + result.addAll(list4); + return result; + } + + /** + * 功能描述:插入day_harmpower_q表数据 + * @author xy + * @param list data_harmpower_q表数据 + * @param time 时间戳 + * @date 2022/5/12 8:55 + */ + private void insertDayHarmPowerQ(List list, long time){ + List records = new ArrayList<>(); + list.forEach(item->{ + Map tags = new HashMap<>(); + Map fields = new HashMap<>(); + tags.put("line_id",item.getLineId()); + tags.put("phasic_type",item.getPhaseType()); + tags.put("quality_flag",item.getQualityFlag()); + tags.put("value_type",item.getValueType()); + fields.put("q",item.getQ()); + fields.put("q_1",item.getQ1()); + fields.put("q_2",item.getQ2()); + fields.put("q_3",item.getQ3()); + fields.put("q_4",item.getQ4()); + fields.put("q_5",item.getQ5()); + fields.put("q_6",item.getQ6()); + fields.put("q_7",item.getQ7()); + fields.put("q_8",item.getQ8()); + fields.put("q_9",item.getQ9()); + fields.put("q_10",item.getQ10()); + fields.put("q_11",item.getQ11()); + fields.put("q_12",item.getQ12()); + fields.put("q_13",item.getQ13()); + fields.put("q_14",item.getQ14()); + fields.put("q_15",item.getQ15()); + fields.put("q_16",item.getQ16()); + fields.put("q_17",item.getQ17()); + fields.put("q_18",item.getQ18()); + fields.put("q_19",item.getQ19()); + fields.put("q_20",item.getQ20()); + fields.put("q_21",item.getQ21()); + fields.put("q_22",item.getQ22()); + fields.put("q_23",item.getQ23()); + fields.put("q_24",item.getQ24()); + fields.put("q_25",item.getQ25()); + fields.put("q_26",item.getQ26()); + fields.put("q_27",item.getQ27()); + fields.put("q_28",item.getQ28()); + fields.put("q_29",item.getQ29()); + fields.put("q_30",item.getQ30()); + fields.put("q_31",item.getQ31()); + fields.put("q_32",item.getQ32()); + fields.put("q_33",item.getQ33()); + fields.put("q_34",item.getQ34()); + fields.put("q_35",item.getQ35()); + fields.put("q_36",item.getQ36()); + fields.put("q_37",item.getQ37()); + fields.put("q_38",item.getQ38()); + fields.put("q_39",item.getQ39()); + fields.put("q_40",item.getQ40()); + fields.put("q_41",item.getQ41()); + fields.put("q_42",item.getQ42()); + fields.put("q_43",item.getQ43()); + fields.put("q_44",item.getQ44()); + fields.put("q_45",item.getQ45()); + fields.put("q_46",item.getQ46()); + fields.put("q_47",item.getQ47()); + fields.put("q_48",item.getQ48()); + fields.put("q_49",item.getQ49()); + fields.put("q_50",item.getQ50()); + Point point = influxDbUtils.pointBuilder("day_harmpower_q", time, TimeUnit.MILLISECONDS, tags, fields); + BatchPoints batchPoints = BatchPoints.database(DATABASE).tag("line_id", item.getLineId()).tag("phasic_type",item.getPhaseType()).tag("quality_flag",item.getQualityFlag()).tag("value_type",item.getValueType()).retentionPolicy("").consistency(InfluxDB.ConsistencyLevel.ALL).build(); + batchPoints.point(point); + records.add(batchPoints.lineProtocol()); + }); + influxDbUtils.batchInsert(DATABASE,"", InfluxDB.ConsistencyLevel.ALL, records); + } + + /** + * 功能描述:获取data_harmpower_s数据 + * @author xy + * @param startTime 起始时间 + * @param endTime 结束时间 + * @date 2022/5/10 14:56 + * @return List + */ + public List getDataHarmPowerS(List lineList, String startTime, String endTime){ + List result = new ArrayList<>(); + StringBuilder stringBuilder = lineStringBuilder(lineList); + //最小值 + StringBuilder stringBuilder1 = new StringBuilder(); + StringBuilder stringBuilder2 = new StringBuilder(); + stringBuilder1.append("min(s) AS s,"); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder1.append("min(s_").append(i).append(") AS s_").append(i); + } else { + stringBuilder1.append("min(s_").append(i).append(") AS s_").append(i).append(","); + } + } + stringBuilder2.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'MIN' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql1 = "select "+stringBuilder1+" from data_harmpower_s where "+stringBuilder+stringBuilder2; + QueryResult sqlResult1 = influxDbUtils.query(sql1); + InfluxDBResultMapper resultMapper1 = new InfluxDBResultMapper(); + List list1 = resultMapper1.toPOJO(sqlResult1, DataHarmPowerS.class); + //最大值 + StringBuilder stringBuilder3 = new StringBuilder(); + StringBuilder stringBuilder4 = new StringBuilder(); + stringBuilder3.append("max(s) AS s,"); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder3.append("max(s_").append(i).append(") AS s_").append(i); + } else { + stringBuilder3.append("max(s_").append(i).append(") AS s_").append(i).append(","); + } + } + stringBuilder4.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'MAX' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql2 = "select "+stringBuilder3+" from data_harmpower_s where "+stringBuilder+stringBuilder4; + QueryResult sqlResult2 = influxDbUtils.query(sql2); + InfluxDBResultMapper resultMapper2 = new InfluxDBResultMapper(); + List list2 = resultMapper2.toPOJO(sqlResult2, DataHarmPowerS.class); + //平均值 + StringBuilder stringBuilder5 = new StringBuilder(); + StringBuilder stringBuilder6 = new StringBuilder(); + stringBuilder5.append("mean(s) AS s,"); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder5.append("mean(s_").append(i).append(") AS s_").append(i); + } else { + stringBuilder5.append("mean(s_").append(i).append(") AS s_").append(i).append(","); + } + } + stringBuilder6.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'AVG' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql3 = "select "+stringBuilder5+" from data_harmpower_s where "+stringBuilder+stringBuilder6; + QueryResult sqlResult3 = influxDbUtils.query(sql3); + InfluxDBResultMapper resultMapper3 = new InfluxDBResultMapper(); + List list3 = resultMapper3.toPOJO(sqlResult3, DataHarmPowerS.class); + //CP95值 + StringBuilder stringBuilder7 = new StringBuilder(); + StringBuilder stringBuilder8 = new StringBuilder(); + stringBuilder7.append("percentile(s,95) AS s,"); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder7.append("percentile(s_").append(i).append(",95) AS s_").append(i); + } else { + stringBuilder7.append("percentile(s_").append(i).append(",95) AS s_").append(i).append(","); + } + } + stringBuilder8.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'CP95' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql4 = "select "+stringBuilder7+" from data_harmpower_s where "+stringBuilder+stringBuilder8; + QueryResult sqlResult4 = influxDbUtils.query(sql4); + InfluxDBResultMapper resultMapper4 = new InfluxDBResultMapper(); + List list4 = resultMapper4.toPOJO(sqlResult4, DataHarmPowerS.class); + result.addAll(list1); + result.addAll(list2); + result.addAll(list3); + result.addAll(list4); + return result; + } + + /** + * 功能描述:插入day_harmpower_q表数据 + * @author xy + * @param list data_harmpower_q表数据 + * @param time 时间戳 + * @date 2022/5/12 8:55 + */ + private void insertDayHarmPowerS(List list, long time){ + List records = new ArrayList<>(); + list.forEach(item->{ + Map tags = new HashMap<>(); + Map fields = new HashMap<>(); + tags.put("line_id",item.getLineId()); + tags.put("phasic_type",item.getPhaseType()); + tags.put("quality_flag",item.getQualityFlag()); + tags.put("value_type",item.getValueType()); + fields.put("s",item.getS()); + fields.put("s_1",item.getS1()); + fields.put("s_2",item.getS2()); + fields.put("s_3",item.getS3()); + fields.put("s_4",item.getS4()); + fields.put("s_5",item.getS5()); + fields.put("s_6",item.getS6()); + fields.put("s_7",item.getS7()); + fields.put("s_8",item.getS8()); + fields.put("s_9",item.getS9()); + fields.put("s_10",item.getS10()); + fields.put("s_11",item.getS11()); + fields.put("s_12",item.getS12()); + fields.put("s_13",item.getS13()); + fields.put("s_14",item.getS14()); + fields.put("s_15",item.getS15()); + fields.put("s_16",item.getS16()); + fields.put("s_17",item.getS17()); + fields.put("s_18",item.getS18()); + fields.put("s_19",item.getS19()); + fields.put("s_20",item.getS20()); + fields.put("s_21",item.getS21()); + fields.put("s_22",item.getS22()); + fields.put("s_23",item.getS23()); + fields.put("s_24",item.getS24()); + fields.put("s_25",item.getS25()); + fields.put("s_26",item.getS26()); + fields.put("s_27",item.getS27()); + fields.put("s_28",item.getS28()); + fields.put("s_29",item.getS29()); + fields.put("s_30",item.getS30()); + fields.put("s_31",item.getS31()); + fields.put("s_32",item.getS32()); + fields.put("s_33",item.getS33()); + fields.put("s_34",item.getS34()); + fields.put("s_35",item.getS35()); + fields.put("s_36",item.getS36()); + fields.put("s_37",item.getS37()); + fields.put("s_38",item.getS38()); + fields.put("s_39",item.getS39()); + fields.put("s_40",item.getS40()); + fields.put("s_41",item.getS41()); + fields.put("s_42",item.getS42()); + fields.put("s_43",item.getS43()); + fields.put("s_44",item.getS44()); + fields.put("s_45",item.getS45()); + fields.put("s_46",item.getS46()); + fields.put("s_47",item.getS47()); + fields.put("s_48",item.getS48()); + fields.put("s_49",item.getS49()); + fields.put("s_50",item.getS50()); + Point point = influxDbUtils.pointBuilder("day_harmpower_s", time, TimeUnit.MILLISECONDS, tags, fields); + BatchPoints batchPoints = BatchPoints.database(DATABASE).tag("line_id", item.getLineId()).tag("phasic_type",item.getPhaseType()).tag("quality_flag",item.getQualityFlag()).tag("value_type",item.getValueType()).retentionPolicy("").consistency(InfluxDB.ConsistencyLevel.ALL).build(); + batchPoints.point(point); + records.add(batchPoints.lineProtocol()); + }); + influxDbUtils.batchInsert(DATABASE,"", InfluxDB.ConsistencyLevel.ALL, records); + } + + /** + * 功能描述:获取data_harmrate_i数据 + * @author xy + * @param startTime 起始时间 + * @param endTime 结束时间 + * @date 2022/5/10 14:56 + * @return List + */ + public List getDataHarmRateI(List lineList, String startTime, String endTime){ + List result = new ArrayList<>(); + StringBuilder stringBuilder = lineStringBuilder(lineList); + //最小值 + StringBuilder stringBuilder1 = new StringBuilder(); + StringBuilder stringBuilder2 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder1.append("min(i_").append(i).append(") AS i_").append(i); + } else { + stringBuilder1.append("min(i_").append(i).append(") AS i_").append(i).append(","); + } + } + stringBuilder2.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'MIN' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql1 = "select "+stringBuilder1+" from data_harmrate_i where "+stringBuilder+stringBuilder2; + QueryResult sqlResult1 = influxDbUtils.query(sql1); + InfluxDBResultMapper resultMapper1 = new InfluxDBResultMapper(); + List list1 = resultMapper1.toPOJO(sqlResult1, DataHarmRateI.class); + //最大值 + StringBuilder stringBuilder3 = new StringBuilder(); + StringBuilder stringBuilder4 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder3.append("max(i_").append(i).append(") AS i_").append(i); + } else { + stringBuilder3.append("max(i_").append(i).append(") AS i_").append(i).append(","); + } + } + stringBuilder4.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'MAX' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql2 = "select "+stringBuilder3+" from data_harmrate_i where "+stringBuilder+stringBuilder4; + QueryResult sqlResult2 = influxDbUtils.query(sql2); + InfluxDBResultMapper resultMapper2 = new InfluxDBResultMapper(); + List list2 = resultMapper2.toPOJO(sqlResult2, DataHarmRateI.class); + //平均值 + StringBuilder stringBuilder5 = new StringBuilder(); + StringBuilder stringBuilder6 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder5.append("mean(i_").append(i).append(") AS i_").append(i); + } else { + stringBuilder5.append("mean(i_").append(i).append(") AS i_").append(i).append(","); + } + } + stringBuilder6.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'AVG' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql3 = "select "+stringBuilder5+" from data_harmrate_i where "+stringBuilder+stringBuilder6; + QueryResult sqlResult3 = influxDbUtils.query(sql3); + InfluxDBResultMapper resultMapper3 = new InfluxDBResultMapper(); + List list3 = resultMapper3.toPOJO(sqlResult3, DataHarmRateI.class); + //CP95值 + StringBuilder stringBuilder7 = new StringBuilder(); + StringBuilder stringBuilder8 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder7.append("percentile(i_").append(i).append(",95) AS i_").append(i); + } else { + stringBuilder7.append("percentile(i_").append(i).append(",95) AS i_").append(i).append(","); + } + } + stringBuilder8.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'CP95' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql4 = "select "+stringBuilder7+" from data_harmrate_i where "+stringBuilder+stringBuilder8; + QueryResult sqlResult4 = influxDbUtils.query(sql4); + InfluxDBResultMapper resultMapper4 = new InfluxDBResultMapper(); + List list4 = resultMapper4.toPOJO(sqlResult4, DataHarmRateI.class); + result.addAll(list1); + result.addAll(list2); + result.addAll(list3); + result.addAll(list4); + return result; + } + + /** + * 功能描述:插入day_harmrate_i表数据 + * @author xy + * @param list data_harmrate_i表数据 + * @param time 时间戳 + * @date 2022/5/12 8:55 + */ + private void insertDayHarmRateI(List list, long time){ + List records = new ArrayList<>(); + list.forEach(item->{ + Map tags = new HashMap<>(); + Map fields = new HashMap<>(); + tags.put("line_id",item.getLineId()); + tags.put("phasic_type",item.getPhaseType()); + tags.put("quality_flag",item.getQualityFlag()); + tags.put("value_type",item.getValueType()); + fields.put("i_1",item.getI1()); + fields.put("i_2",item.getI2()); + fields.put("i_3",item.getI3()); + fields.put("i_4",item.getI4()); + fields.put("i_5",item.getI5()); + fields.put("i_6",item.getI6()); + fields.put("i_7",item.getI7()); + fields.put("i_8",item.getI8()); + fields.put("i_9",item.getI9()); + fields.put("i_10",item.getI10()); + fields.put("i_11",item.getI11()); + fields.put("i_12",item.getI12()); + fields.put("i_13",item.getI13()); + fields.put("i_14",item.getI14()); + fields.put("i_15",item.getI15()); + fields.put("i_16",item.getI16()); + fields.put("i_17",item.getI17()); + fields.put("i_18",item.getI18()); + fields.put("i_19",item.getI19()); + fields.put("i_20",item.getI20()); + fields.put("i_21",item.getI21()); + fields.put("i_22",item.getI22()); + fields.put("i_23",item.getI23()); + fields.put("i_24",item.getI24()); + fields.put("i_25",item.getI25()); + fields.put("i_26",item.getI26()); + fields.put("i_27",item.getI27()); + fields.put("i_28",item.getI28()); + fields.put("i_29",item.getI29()); + fields.put("i_30",item.getI30()); + fields.put("i_31",item.getI31()); + fields.put("i_32",item.getI32()); + fields.put("i_33",item.getI33()); + fields.put("i_34",item.getI34()); + fields.put("i_35",item.getI35()); + fields.put("i_36",item.getI36()); + fields.put("i_37",item.getI37()); + fields.put("i_38",item.getI38()); + fields.put("i_39",item.getI39()); + fields.put("i_40",item.getI40()); + fields.put("i_41",item.getI41()); + fields.put("i_42",item.getI42()); + fields.put("i_43",item.getI43()); + fields.put("i_44",item.getI44()); + fields.put("i_45",item.getI45()); + fields.put("i_46",item.getI46()); + fields.put("i_47",item.getI47()); + fields.put("i_48",item.getI48()); + fields.put("i_49",item.getI49()); + fields.put("i_50",item.getI50()); + Point point = influxDbUtils.pointBuilder("day_harmrate_i", time, TimeUnit.MILLISECONDS, tags, fields); + BatchPoints batchPoints = BatchPoints.database(DATABASE).tag("line_id", item.getLineId()).tag("phasic_type",item.getPhaseType()).tag("quality_flag",item.getQualityFlag()).tag("value_type",item.getValueType()).retentionPolicy("").consistency(InfluxDB.ConsistencyLevel.ALL).build(); + batchPoints.point(point); + records.add(batchPoints.lineProtocol()); + }); + influxDbUtils.batchInsert(DATABASE,"", InfluxDB.ConsistencyLevel.ALL, records); + } + + /** + * 功能描述:获取data_harmrate_v数据 + * @author xy + * @param startTime 起始时间 + * @param endTime 结束时间 + * @date 2022/5/10 14:56 + * @return List + */ + public List getDataHarmRateV(List lineList, String startTime, String endTime){ + List result = new ArrayList<>(); + StringBuilder stringBuilder = lineStringBuilder(lineList); + //最小值 + StringBuilder stringBuilder1 = new StringBuilder(); + StringBuilder stringBuilder2 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder1.append("min(v_").append(i).append(") AS v_").append(i); + } else { + stringBuilder1.append("min(v_").append(i).append(") AS v_").append(i).append(","); + } + } + stringBuilder2.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'MIN' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql1 = "select "+stringBuilder1+" from data_harmrate_v where "+stringBuilder+stringBuilder2; + QueryResult sqlResult1 = influxDbUtils.query(sql1); + InfluxDBResultMapper resultMapper1 = new InfluxDBResultMapper(); + List list1 = resultMapper1.toPOJO(sqlResult1, DataHarmRateV.class); + //最大值 + StringBuilder stringBuilder3 = new StringBuilder(); + StringBuilder stringBuilder4 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder3.append("max(v_").append(i).append(") AS v_").append(i); + } else { + stringBuilder3.append("max(v_").append(i).append(") AS v_").append(i).append(","); + } + } + stringBuilder4.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'MAX' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql2 = "select "+stringBuilder3+" from data_harmrate_v where "+stringBuilder+stringBuilder4; + QueryResult sqlResult2 = influxDbUtils.query(sql2); + InfluxDBResultMapper resultMapper2 = new InfluxDBResultMapper(); + List list2 = resultMapper2.toPOJO(sqlResult2, DataHarmRateV.class); + //平均值 + StringBuilder stringBuilder5 = new StringBuilder(); + StringBuilder stringBuilder6 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder5.append("mean(v_").append(i).append(") AS v_").append(i); + } else { + stringBuilder5.append("mean(v_").append(i).append(") AS v_").append(i).append(","); + } + } + stringBuilder6.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'AVG' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql3 = "select "+stringBuilder5+" from data_harmrate_v where "+stringBuilder+stringBuilder6; + QueryResult sqlResult3 = influxDbUtils.query(sql3); + InfluxDBResultMapper resultMapper3 = new InfluxDBResultMapper(); + List list3 = resultMapper3.toPOJO(sqlResult3, DataHarmRateV.class); + //CP95值 + StringBuilder stringBuilder7 = new StringBuilder(); + StringBuilder stringBuilder8 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder7.append("percentile(v_").append(i).append(",95) AS v_").append(i); + } else { + stringBuilder7.append("percentile(v_").append(i).append(",95) AS v_").append(i).append(","); + } + } + stringBuilder8.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'CP95' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql4 = "select "+stringBuilder7+" from data_harmrate_v where "+stringBuilder+stringBuilder8; + QueryResult sqlResult4 = influxDbUtils.query(sql4); + InfluxDBResultMapper resultMapper4 = new InfluxDBResultMapper(); + List list4 = resultMapper4.toPOJO(sqlResult4, DataHarmRateV.class); + result.addAll(list1); + result.addAll(list2); + result.addAll(list3); + result.addAll(list4); + return result; + } + + /** + * 功能描述:插入day_harmrate_v表数据 + * @author xy + * @param list data_harmrate_v表数据 + * @param time 时间戳 + * @date 2022/5/12 8:55 + */ + private void insertDayHarmRateV(List list, long time){ + List records = new ArrayList<>(); + list.forEach(item->{ + Map tags = new HashMap<>(); + Map fields = new HashMap<>(); + tags.put("line_id",item.getLineId()); + tags.put("phasic_type",item.getPhaseType()); + tags.put("quality_flag",item.getQualityFlag()); + tags.put("value_type",item.getValueType()); + fields.put("v_1",item.getV1()); + fields.put("v_2",item.getV2()); + fields.put("v_3",item.getV3()); + fields.put("v_4",item.getV4()); + fields.put("v_5",item.getV5()); + fields.put("v_6",item.getV6()); + fields.put("v_7",item.getV7()); + fields.put("v_8",item.getV8()); + fields.put("v_9",item.getV9()); + fields.put("v_10",item.getV10()); + fields.put("v_11",item.getV11()); + fields.put("v_12",item.getV12()); + fields.put("v_13",item.getV13()); + fields.put("v_14",item.getV14()); + fields.put("v_15",item.getV15()); + fields.put("v_16",item.getV16()); + fields.put("v_17",item.getV17()); + fields.put("v_18",item.getV18()); + fields.put("v_19",item.getV19()); + fields.put("v_20",item.getV20()); + fields.put("v_21",item.getV21()); + fields.put("v_22",item.getV22()); + fields.put("v_23",item.getV23()); + fields.put("v_24",item.getV24()); + fields.put("v_25",item.getV25()); + fields.put("v_26",item.getV26()); + fields.put("v_27",item.getV27()); + fields.put("v_28",item.getV28()); + fields.put("v_29",item.getV29()); + fields.put("v_30",item.getV30()); + fields.put("v_31",item.getV31()); + fields.put("v_32",item.getV32()); + fields.put("v_33",item.getV33()); + fields.put("v_34",item.getV34()); + fields.put("v_35",item.getV35()); + fields.put("v_36",item.getV36()); + fields.put("v_37",item.getV37()); + fields.put("v_38",item.getV38()); + fields.put("v_39",item.getV39()); + fields.put("v_40",item.getV40()); + fields.put("v_41",item.getV41()); + fields.put("v_42",item.getV42()); + fields.put("v_43",item.getV43()); + fields.put("v_44",item.getV44()); + fields.put("v_45",item.getV45()); + fields.put("v_46",item.getV46()); + fields.put("v_47",item.getV47()); + fields.put("v_48",item.getV48()); + fields.put("v_49",item.getV49()); + fields.put("v_50",item.getV50()); + Point point = influxDbUtils.pointBuilder("day_harmrate_v", time, TimeUnit.MILLISECONDS, tags, fields); + BatchPoints batchPoints = BatchPoints.database(DATABASE).tag("line_id", item.getLineId()).tag("phasic_type",item.getPhaseType()).tag("quality_flag",item.getQualityFlag()).tag("value_type",item.getValueType()).retentionPolicy("").consistency(InfluxDB.ConsistencyLevel.ALL).build(); + batchPoints.point(point); + records.add(batchPoints.lineProtocol()); + }); + influxDbUtils.batchInsert(DATABASE,"", InfluxDB.ConsistencyLevel.ALL, records); + } + + /** + * 功能描述:获取data_inharm_i数据 + * @author xy + * @param startTime 起始时间 + * @param endTime 结束时间 + * @date 2022/5/10 14:56 + * @return List + */ + public List getDataInHarmI(List lineList, String startTime, String endTime){ + List result = new ArrayList<>(); + StringBuilder stringBuilder = lineStringBuilder(lineList); + //最小值 + StringBuilder stringBuilder1 = new StringBuilder(); + StringBuilder stringBuilder2 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder1.append("min(i_").append(i).append(") AS i_").append(i); + } else { + stringBuilder1.append("min(i_").append(i).append(") AS i_").append(i).append(","); + } + } + stringBuilder2.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'MIN' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql1 = "select "+stringBuilder1+" from data_inharm_i where "+stringBuilder+stringBuilder2; + QueryResult sqlResult1 = influxDbUtils.query(sql1); + InfluxDBResultMapper resultMapper1 = new InfluxDBResultMapper(); + List list1 = resultMapper1.toPOJO(sqlResult1, DataInHarmI.class); + //最大值 + StringBuilder stringBuilder3 = new StringBuilder(); + StringBuilder stringBuilder4 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder3.append("max(i_").append(i).append(") AS i_").append(i); + } else { + stringBuilder3.append("max(i_").append(i).append(") AS i_").append(i).append(","); + } + } + stringBuilder4.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'MAX' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql2 = "select "+stringBuilder3+" from data_inharm_i where "+stringBuilder+stringBuilder4; + QueryResult sqlResult2 = influxDbUtils.query(sql2); + InfluxDBResultMapper resultMapper2 = new InfluxDBResultMapper(); + List list2 = resultMapper2.toPOJO(sqlResult2, DataInHarmI.class); + //平均值 + StringBuilder stringBuilder5 = new StringBuilder(); + StringBuilder stringBuilder6 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder5.append("mean(i_").append(i).append(") AS i_").append(i); + } else { + stringBuilder5.append("mean(i_").append(i).append(") AS i_").append(i).append(","); + } + } + stringBuilder6.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'AVG' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql3 = "select "+stringBuilder5+" from data_inharm_i where "+stringBuilder+stringBuilder6; + QueryResult sqlResult3 = influxDbUtils.query(sql3); + InfluxDBResultMapper resultMapper3 = new InfluxDBResultMapper(); + List list3 = resultMapper3.toPOJO(sqlResult3, DataInHarmI.class); + //CP95值 + StringBuilder stringBuilder7 = new StringBuilder(); + StringBuilder stringBuilder8 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder7.append("percentile(i_").append(i).append(",95) AS i_").append(i); + } else { + stringBuilder7.append("percentile(i_").append(i).append(",95) AS i_").append(i).append(","); + } + } + stringBuilder8.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'CP95' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql4 = "select "+stringBuilder7+" from data_inharm_i where "+stringBuilder+stringBuilder8; + QueryResult sqlResult4 = influxDbUtils.query(sql4); + InfluxDBResultMapper resultMapper4 = new InfluxDBResultMapper(); + List list4 = resultMapper4.toPOJO(sqlResult4, DataInHarmI.class); + result.addAll(list1); + result.addAll(list2); + result.addAll(list3); + result.addAll(list4); + return result; + } + + /** + * 功能描述:插入day_inharm_i表数据 + * @author xy + * @param list data_inharm_i表数据 + * @param time 时间戳 + * @date 2022/5/12 8:55 + */ + private void insertDayInHarmI(List list, long time){ + List records = new ArrayList<>(); + list.forEach(item->{ + Map tags = new HashMap<>(); + Map fields = new HashMap<>(); + tags.put("line_id",item.getLineId()); + tags.put("phasic_type",item.getPhaseType()); + tags.put("quality_flag",item.getQualityFlag()); + tags.put("value_type",item.getValueType()); + fields.put("i_1",item.getI1()); + fields.put("i_2",item.getI2()); + fields.put("i_3",item.getI3()); + fields.put("i_4",item.getI4()); + fields.put("i_5",item.getI5()); + fields.put("i_6",item.getI6()); + fields.put("i_7",item.getI7()); + fields.put("i_8",item.getI8()); + fields.put("i_9",item.getI9()); + fields.put("i_10",item.getI10()); + fields.put("i_11",item.getI11()); + fields.put("i_12",item.getI12()); + fields.put("i_13",item.getI13()); + fields.put("i_14",item.getI14()); + fields.put("i_15",item.getI15()); + fields.put("i_16",item.getI16()); + fields.put("i_17",item.getI17()); + fields.put("i_18",item.getI18()); + fields.put("i_19",item.getI19()); + fields.put("i_20",item.getI20()); + fields.put("i_21",item.getI21()); + fields.put("i_22",item.getI22()); + fields.put("i_23",item.getI23()); + fields.put("i_24",item.getI24()); + fields.put("i_25",item.getI25()); + fields.put("i_26",item.getI26()); + fields.put("i_27",item.getI27()); + fields.put("i_28",item.getI28()); + fields.put("i_29",item.getI29()); + fields.put("i_30",item.getI30()); + fields.put("i_31",item.getI31()); + fields.put("i_32",item.getI32()); + fields.put("i_33",item.getI33()); + fields.put("i_34",item.getI34()); + fields.put("i_35",item.getI35()); + fields.put("i_36",item.getI36()); + fields.put("i_37",item.getI37()); + fields.put("i_38",item.getI38()); + fields.put("i_39",item.getI39()); + fields.put("i_40",item.getI40()); + fields.put("i_41",item.getI41()); + fields.put("i_42",item.getI42()); + fields.put("i_43",item.getI43()); + fields.put("i_44",item.getI44()); + fields.put("i_45",item.getI45()); + fields.put("i_46",item.getI46()); + fields.put("i_47",item.getI47()); + fields.put("i_48",item.getI48()); + fields.put("i_49",item.getI49()); + fields.put("i_50",item.getI50()); + Point point = influxDbUtils.pointBuilder("day_inharm_i", time, TimeUnit.MILLISECONDS, tags, fields); + BatchPoints batchPoints = BatchPoints.database(DATABASE).tag("line_id", item.getLineId()).tag("phasic_type",item.getPhaseType()).tag("quality_flag",item.getQualityFlag()).tag("value_type",item.getValueType()).retentionPolicy("").consistency(InfluxDB.ConsistencyLevel.ALL).build(); + batchPoints.point(point); + records.add(batchPoints.lineProtocol()); + }); + influxDbUtils.batchInsert(DATABASE,"", InfluxDB.ConsistencyLevel.ALL, records); + } + + /** + * 功能描述:获取data_inharm_v数据 + * @author xy + * @param startTime 起始时间 + * @param endTime 结束时间 + * @date 2022/5/10 14:56 + * @return List + */ + public List getDataInHarmV(List lineList, String startTime, String endTime){ + List result = new ArrayList<>(); + StringBuilder stringBuilder = lineStringBuilder(lineList); + //最小值 + StringBuilder stringBuilder1 = new StringBuilder(); + StringBuilder stringBuilder2 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder1.append("min(v_").append(i).append(") AS v_").append(i); + } else { + stringBuilder1.append("min(v_").append(i).append(") AS v_").append(i).append(","); + } + } + stringBuilder2.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'MIN' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql1 = "select "+stringBuilder1+" from data_inharm_v where "+stringBuilder+stringBuilder2; + QueryResult sqlResult1 = influxDbUtils.query(sql1); + InfluxDBResultMapper resultMapper1 = new InfluxDBResultMapper(); + List list1 = resultMapper1.toPOJO(sqlResult1, DataInHarmV.class); + //最大值 + StringBuilder stringBuilder3 = new StringBuilder(); + StringBuilder stringBuilder4 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder3.append("max(v_").append(i).append(") AS v_").append(i); + } else { + stringBuilder3.append("max(v_").append(i).append(") AS v_").append(i).append(","); + } + } + stringBuilder4.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'MAX' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql2 = "select "+stringBuilder3+" from data_inharm_v where "+stringBuilder+stringBuilder4; + QueryResult sqlResult2 = influxDbUtils.query(sql2); + InfluxDBResultMapper resultMapper2 = new InfluxDBResultMapper(); + List list2 = resultMapper2.toPOJO(sqlResult2, DataInHarmV.class); + //平均值 + StringBuilder stringBuilder5 = new StringBuilder(); + StringBuilder stringBuilder6 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder5.append("mean(v_").append(i).append(") AS v_").append(i); + } else { + stringBuilder5.append("mean(v_").append(i).append(") AS v_").append(i).append(","); + } + } + stringBuilder6.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'AVG' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql3 = "select "+stringBuilder5+" from data_inharm_v where "+stringBuilder+stringBuilder6; + QueryResult sqlResult3 = influxDbUtils.query(sql3); + InfluxDBResultMapper resultMapper3 = new InfluxDBResultMapper(); + List list3 = resultMapper3.toPOJO(sqlResult3, DataInHarmV.class); + //CP95值 + StringBuilder stringBuilder7 = new StringBuilder(); + StringBuilder stringBuilder8 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder7.append("percentile(v_").append(i).append(",95) AS v_").append(i); + } else { + stringBuilder7.append("percentile(v_").append(i).append(",95) AS v_").append(i).append(","); + } + } + stringBuilder8.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'CP95' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql4 = "select "+stringBuilder7+" from data_inharm_v where "+stringBuilder+stringBuilder8; + QueryResult sqlResult4 = influxDbUtils.query(sql4); + InfluxDBResultMapper resultMapper4 = new InfluxDBResultMapper(); + List list4 = resultMapper4.toPOJO(sqlResult4, DataInHarmV.class); + result.addAll(list1); + result.addAll(list2); + result.addAll(list3); + result.addAll(list4); + return result; + } + + /** + * 功能描述:插入day_inharm_v表数据 + * @author xy + * @param list data_inharm_v表数据 + * @param time 时间戳 + * @date 2022/5/12 8:55 + */ + private void insertDayInHarmV(List list, long time){ + List records = new ArrayList<>(); + list.forEach(item->{ + Map tags = new HashMap<>(); + Map fields = new HashMap<>(); + tags.put("line_id",item.getLineId()); + tags.put("phasic_type",item.getPhaseType()); + tags.put("quality_flag",item.getQualityFlag()); + tags.put("value_type",item.getValueType()); + fields.put("v_1",item.getV1()); + fields.put("v_2",item.getV2()); + fields.put("v_3",item.getV3()); + fields.put("v_4",item.getV4()); + fields.put("v_5",item.getV5()); + fields.put("v_6",item.getV6()); + fields.put("v_7",item.getV7()); + fields.put("v_8",item.getV8()); + fields.put("v_9",item.getV9()); + fields.put("v_10",item.getV10()); + fields.put("v_11",item.getV11()); + fields.put("v_12",item.getV12()); + fields.put("v_13",item.getV13()); + fields.put("v_14",item.getV14()); + fields.put("v_15",item.getV15()); + fields.put("v_16",item.getV16()); + fields.put("v_17",item.getV17()); + fields.put("v_18",item.getV18()); + fields.put("v_19",item.getV19()); + fields.put("v_20",item.getV20()); + fields.put("v_21",item.getV21()); + fields.put("v_22",item.getV22()); + fields.put("v_23",item.getV23()); + fields.put("v_24",item.getV24()); + fields.put("v_25",item.getV25()); + fields.put("v_26",item.getV26()); + fields.put("v_27",item.getV27()); + fields.put("v_28",item.getV28()); + fields.put("v_29",item.getV29()); + fields.put("v_30",item.getV30()); + fields.put("v_31",item.getV31()); + fields.put("v_32",item.getV32()); + fields.put("v_33",item.getV33()); + fields.put("v_34",item.getV34()); + fields.put("v_35",item.getV35()); + fields.put("v_36",item.getV36()); + fields.put("v_37",item.getV37()); + fields.put("v_38",item.getV38()); + fields.put("v_39",item.getV39()); + fields.put("v_40",item.getV40()); + fields.put("v_41",item.getV41()); + fields.put("v_42",item.getV42()); + fields.put("v_43",item.getV43()); + fields.put("v_44",item.getV44()); + fields.put("v_45",item.getV45()); + fields.put("v_46",item.getV46()); + fields.put("v_47",item.getV47()); + fields.put("v_48",item.getV48()); + fields.put("v_49",item.getV49()); + fields.put("v_50",item.getV50()); + Point point = influxDbUtils.pointBuilder("day_inharm_v", time, TimeUnit.MILLISECONDS, tags, fields); + BatchPoints batchPoints = BatchPoints.database(DATABASE).tag("line_id", item.getLineId()).tag("phasic_type",item.getPhaseType()).tag("quality_flag",item.getQualityFlag()).tag("value_type",item.getValueType()).retentionPolicy("").consistency(InfluxDB.ConsistencyLevel.ALL).build(); + batchPoints.point(point); + records.add(batchPoints.lineProtocol()); + }); + influxDbUtils.batchInsert(DATABASE,"", InfluxDB.ConsistencyLevel.ALL, records); + } + + + /** + * 功能描述:获取data_inharmrate_i数据 + * @author xy + * @param startTime 起始时间 + * @param endTime 结束时间 + * @date 2022/5/10 14:56 + * @return List + */ + public List getDataInHarmRateI(List lineList, String startTime, String endTime){ + List result = new ArrayList<>(); + StringBuilder stringBuilder = lineStringBuilder(lineList); + //最小值 + StringBuilder stringBuilder1 = new StringBuilder(); + StringBuilder stringBuilder2 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder1.append("min(i_").append(i).append(") AS i_").append(i); + } else { + stringBuilder1.append("min(i_").append(i).append(") AS i_").append(i).append(","); + } + } + stringBuilder2.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'MIN' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql1 = "select "+stringBuilder1+" from data_inharmrate_i where "+stringBuilder+stringBuilder2; + QueryResult sqlResult1 = influxDbUtils.query(sql1); + InfluxDBResultMapper resultMapper1 = new InfluxDBResultMapper(); + List list1 = resultMapper1.toPOJO(sqlResult1, DataInHarmRateI.class); + //最大值 + StringBuilder stringBuilder3 = new StringBuilder(); + StringBuilder stringBuilder4 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder3.append("max(i_").append(i).append(") AS i_").append(i); + } else { + stringBuilder3.append("max(i_").append(i).append(") AS i_").append(i).append(","); + } + } + stringBuilder4.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'MAX' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql2 = "select "+stringBuilder3+" from data_inharmrate_i where "+stringBuilder+stringBuilder4; + QueryResult sqlResult2 = influxDbUtils.query(sql2); + InfluxDBResultMapper resultMapper2 = new InfluxDBResultMapper(); + List list2 = resultMapper2.toPOJO(sqlResult2, DataInHarmRateI.class); + //平均值 + StringBuilder stringBuilder5 = new StringBuilder(); + StringBuilder stringBuilder6 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder5.append("mean(i_").append(i).append(") AS i_").append(i); + } else { + stringBuilder5.append("mean(i_").append(i).append(") AS i_").append(i).append(","); + } + } + stringBuilder6.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'AVG' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql3 = "select "+stringBuilder5+" from data_inharmrate_i where "+stringBuilder+stringBuilder6; + QueryResult sqlResult3 = influxDbUtils.query(sql3); + InfluxDBResultMapper resultMapper3 = new InfluxDBResultMapper(); + List list3 = resultMapper3.toPOJO(sqlResult3, DataInHarmRateI.class); + //CP95值 + StringBuilder stringBuilder7 = new StringBuilder(); + StringBuilder stringBuilder8 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder7.append("percentile(i_").append(i).append(",95) AS i_").append(i); + } else { + stringBuilder7.append("percentile(i_").append(i).append(",95) AS i_").append(i).append(","); + } + } + stringBuilder8.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'CP95' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql4 = "select "+stringBuilder7+" from data_inharmrate_i where "+stringBuilder+stringBuilder8; + QueryResult sqlResult4 = influxDbUtils.query(sql4); + InfluxDBResultMapper resultMapper4 = new InfluxDBResultMapper(); + List list4 = resultMapper4.toPOJO(sqlResult4, DataInHarmRateI.class); + result.addAll(list1); + result.addAll(list2); + result.addAll(list3); + result.addAll(list4); + return result; + } + + /** + * 功能描述:插入day_inharmrate_i表数据 + * @author xy + * @param list data_inharmrate_i表数据 + * @param time 时间戳 + * @date 2022/5/12 8:55 + */ + private void insertDayInHarmRateI(List list, long time){ + List records = new ArrayList<>(); + list.forEach(item->{ + Map tags = new HashMap<>(); + Map fields = new HashMap<>(); + tags.put("line_id",item.getLineId()); + tags.put("phasic_type",item.getPhaseType()); + tags.put("quality_flag",item.getQualityFlag()); + tags.put("value_type",item.getValueType()); + fields.put("i_1",item.getI1()); + fields.put("i_2",item.getI2()); + fields.put("i_3",item.getI3()); + fields.put("i_4",item.getI4()); + fields.put("i_5",item.getI5()); + fields.put("i_6",item.getI6()); + fields.put("i_7",item.getI7()); + fields.put("i_8",item.getI8()); + fields.put("i_9",item.getI9()); + fields.put("i_10",item.getI10()); + fields.put("i_11",item.getI11()); + fields.put("i_12",item.getI12()); + fields.put("i_13",item.getI13()); + fields.put("i_14",item.getI14()); + fields.put("i_15",item.getI15()); + fields.put("i_16",item.getI16()); + fields.put("i_17",item.getI17()); + fields.put("i_18",item.getI18()); + fields.put("i_19",item.getI19()); + fields.put("i_20",item.getI20()); + fields.put("i_21",item.getI21()); + fields.put("i_22",item.getI22()); + fields.put("i_23",item.getI23()); + fields.put("i_24",item.getI24()); + fields.put("i_25",item.getI25()); + fields.put("i_26",item.getI26()); + fields.put("i_27",item.getI27()); + fields.put("i_28",item.getI28()); + fields.put("i_29",item.getI29()); + fields.put("i_30",item.getI30()); + fields.put("i_31",item.getI31()); + fields.put("i_32",item.getI32()); + fields.put("i_33",item.getI33()); + fields.put("i_34",item.getI34()); + fields.put("i_35",item.getI35()); + fields.put("i_36",item.getI36()); + fields.put("i_37",item.getI37()); + fields.put("i_38",item.getI38()); + fields.put("i_39",item.getI39()); + fields.put("i_40",item.getI40()); + fields.put("i_41",item.getI41()); + fields.put("i_42",item.getI42()); + fields.put("i_43",item.getI43()); + fields.put("i_44",item.getI44()); + fields.put("i_45",item.getI45()); + fields.put("i_46",item.getI46()); + fields.put("i_47",item.getI47()); + fields.put("i_48",item.getI48()); + fields.put("i_49",item.getI49()); + fields.put("i_50",item.getI50()); + Point point = influxDbUtils.pointBuilder("day_inharmrate_i", time, TimeUnit.MILLISECONDS, tags, fields); + BatchPoints batchPoints = BatchPoints.database(DATABASE).tag("line_id", item.getLineId()).tag("phasic_type",item.getPhaseType()).tag("quality_flag",item.getQualityFlag()).tag("value_type",item.getValueType()).retentionPolicy("").consistency(InfluxDB.ConsistencyLevel.ALL).build(); + batchPoints.point(point); + records.add(batchPoints.lineProtocol()); + }); + influxDbUtils.batchInsert(DATABASE,"", InfluxDB.ConsistencyLevel.ALL, records); + } + + /** + * 功能描述:获取data_inharmrate_v数据 + * @author xy + * @param startTime 起始时间 + * @param endTime 结束时间 + * @date 2022/5/10 14:56 + * @return List + */ + public List getDataInHarmRateV(List lineList, String startTime, String endTime){ + List result = new ArrayList<>(); + StringBuilder stringBuilder = lineStringBuilder(lineList); + //最小值 + StringBuilder stringBuilder1 = new StringBuilder(); + StringBuilder stringBuilder2 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder1.append("min(v_").append(i).append(") AS v_").append(i); + } else { + stringBuilder1.append("min(v_").append(i).append(") AS v_").append(i).append(","); + } + } + stringBuilder2.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'MIN' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql1 = "select "+stringBuilder1+" from data_inharmrate_v where "+stringBuilder+stringBuilder2; + QueryResult sqlResult1 = influxDbUtils.query(sql1); + InfluxDBResultMapper resultMapper1 = new InfluxDBResultMapper(); + List list1 = resultMapper1.toPOJO(sqlResult1, DataInHarmRateV.class); + //最大值 + StringBuilder stringBuilder3 = new StringBuilder(); + StringBuilder stringBuilder4 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder3.append("max(v_").append(i).append(") AS v_").append(i); + } else { + stringBuilder3.append("max(v_").append(i).append(") AS v_").append(i).append(","); + } + } + stringBuilder4.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'MAX' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql2 = "select "+stringBuilder3+" from data_inharmrate_v where "+stringBuilder+stringBuilder4; + QueryResult sqlResult2 = influxDbUtils.query(sql2); + InfluxDBResultMapper resultMapper2 = new InfluxDBResultMapper(); + List list2 = resultMapper2.toPOJO(sqlResult2, DataInHarmRateV.class); + //平均值 + StringBuilder stringBuilder5 = new StringBuilder(); + StringBuilder stringBuilder6 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder5.append("mean(v_").append(i).append(") AS v_").append(i); + } else { + stringBuilder5.append("mean(v_").append(i).append(") AS v_").append(i).append(","); + } + } + stringBuilder6.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'AVG' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql3 = "select "+stringBuilder5+" from data_inharmrate_v where "+stringBuilder+stringBuilder6; + QueryResult sqlResult3 = influxDbUtils.query(sql3); + InfluxDBResultMapper resultMapper3 = new InfluxDBResultMapper(); + List list3 = resultMapper3.toPOJO(sqlResult3, DataInHarmRateV.class); + //CP95值 + StringBuilder stringBuilder7 = new StringBuilder(); + StringBuilder stringBuilder8 = new StringBuilder(); + for (int i = 1; i <=50 ; i++) { + if (i==50){ + stringBuilder7.append("percentile(v_").append(i).append(",95) AS v_").append(i); + } else { + stringBuilder7.append("percentile(v_").append(i).append(",95) AS v_").append(i).append(","); + } + } + stringBuilder8.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and value_type = 'CP95' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"); + String sql4 = "select "+stringBuilder7+" from data_inharmrate_v where "+stringBuilder+stringBuilder8; + QueryResult sqlResult4 = influxDbUtils.query(sql4); + InfluxDBResultMapper resultMapper4 = new InfluxDBResultMapper(); + List list4 = resultMapper4.toPOJO(sqlResult4, DataInHarmRateV.class); + result.addAll(list1); + result.addAll(list2); + result.addAll(list3); + result.addAll(list4); + return result; + } + + /** + * 功能描述:插入day_inharmrate_v表数据 + * @author xy + * @param list data_inharmrate_v表数据 + * @param time 时间戳 + * @date 2022/5/12 8:55 + */ + private void insertDayInHarmRateV(List list, long time){ + List records = new ArrayList<>(); + list.forEach(item->{ + Map tags = new HashMap<>(); + Map fields = new HashMap<>(); + tags.put("line_id",item.getLineId()); + tags.put("phasic_type",item.getPhaseType()); + tags.put("quality_flag",item.getQualityFlag()); + tags.put("value_type",item.getValueType()); + fields.put("v_1",item.getV1()); + fields.put("v_2",item.getV2()); + fields.put("v_3",item.getV3()); + fields.put("v_4",item.getV4()); + fields.put("v_5",item.getV5()); + fields.put("v_6",item.getV6()); + fields.put("v_7",item.getV7()); + fields.put("v_8",item.getV8()); + fields.put("v_9",item.getV9()); + fields.put("v_10",item.getV10()); + fields.put("v_11",item.getV11()); + fields.put("v_12",item.getV12()); + fields.put("v_13",item.getV13()); + fields.put("v_14",item.getV14()); + fields.put("v_15",item.getV15()); + fields.put("v_16",item.getV16()); + fields.put("v_17",item.getV17()); + fields.put("v_18",item.getV18()); + fields.put("v_19",item.getV19()); + fields.put("v_20",item.getV20()); + fields.put("v_21",item.getV21()); + fields.put("v_22",item.getV22()); + fields.put("v_23",item.getV23()); + fields.put("v_24",item.getV24()); + fields.put("v_25",item.getV25()); + fields.put("v_26",item.getV26()); + fields.put("v_27",item.getV27()); + fields.put("v_28",item.getV28()); + fields.put("v_29",item.getV29()); + fields.put("v_30",item.getV30()); + fields.put("v_31",item.getV31()); + fields.put("v_32",item.getV32()); + fields.put("v_33",item.getV33()); + fields.put("v_34",item.getV34()); + fields.put("v_35",item.getV35()); + fields.put("v_36",item.getV36()); + fields.put("v_37",item.getV37()); + fields.put("v_38",item.getV38()); + fields.put("v_39",item.getV39()); + fields.put("v_40",item.getV40()); + fields.put("v_41",item.getV41()); + fields.put("v_42",item.getV42()); + fields.put("v_43",item.getV43()); + fields.put("v_44",item.getV44()); + fields.put("v_45",item.getV45()); + fields.put("v_46",item.getV46()); + fields.put("v_47",item.getV47()); + fields.put("v_48",item.getV48()); + fields.put("v_49",item.getV49()); + fields.put("v_50",item.getV50()); + Point point = influxDbUtils.pointBuilder("day_inharmrate_v", time, TimeUnit.MILLISECONDS, tags, fields); + BatchPoints batchPoints = BatchPoints.database(DATABASE).tag("line_id", item.getLineId()).tag("phasic_type",item.getPhaseType()).tag("quality_flag",item.getQualityFlag()).tag("value_type",item.getValueType()).retentionPolicy("").consistency(InfluxDB.ConsistencyLevel.ALL).build(); + batchPoints.point(point); + records.add(batchPoints.lineProtocol()); + }); + influxDbUtils.batchInsert(DATABASE,"", InfluxDB.ConsistencyLevel.ALL, records); + } + + /** + * 功能描述:获取data_plt数据 + * @author xy + * @param startTime 起始时间 + * @param endTime 结束时间 + * @date 2022/5/10 14:56 + * @return List + */ + public List getDataPlt(List lineList, String startTime, String endTime){ + List result = new ArrayList<>(); + StringBuilder stringBuilder = lineStringBuilder(lineList); + //最小值 + String sql1 = "select min(plt) AS plt from data_plt where "+stringBuilder+" time >= '" + startTime + "' and time <= '" + endTime + "' and value_type = 'MIN' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"; + QueryResult sqlResult1 = influxDbUtils.query(sql1); + InfluxDBResultMapper resultMapper1 = new InfluxDBResultMapper(); + List list1 = resultMapper1.toPOJO(sqlResult1, DataPlt.class); + //最大值 + String sql2 = "select max(plt) AS plt from data_plt where "+stringBuilder+" time >= '" + startTime + "' and time <= '" + endTime + "' and value_type = 'MAX' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"; + QueryResult sqlResult2 = influxDbUtils.query(sql2); + InfluxDBResultMapper resultMapper2 = new InfluxDBResultMapper(); + List list2 = resultMapper2.toPOJO(sqlResult2, DataPlt.class); + //平均值 + String sql3 = "select mean(plt) AS plt from data_plt where "+stringBuilder+" time >= '" + startTime + "' and time <= '" + endTime + "' and value_type = 'AVG' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"; + QueryResult sqlResult3 = influxDbUtils.query(sql3); + InfluxDBResultMapper resultMapper3= new InfluxDBResultMapper(); + List list3 = resultMapper3.toPOJO(sqlResult3, DataPlt.class); + //CP95值 + String sql4 = "select percentile(plt,95) AS plt from data_plt where "+stringBuilder+" time >= '" + startTime + "' and time <= '" + endTime + "' and value_type = 'CP95' group by line_id,phasic_type,value_type,quality_flag tz('Asia/Shanghai')"; + QueryResult sqlResult4 = influxDbUtils.query(sql4); + InfluxDBResultMapper resultMapper4= new InfluxDBResultMapper(); + List list4 = resultMapper4.toPOJO(sqlResult4, DataPlt.class); + result.addAll(list1); + result.addAll(list2); + result.addAll(list3); + result.addAll(list4); + return result; + } + + /** + * 功能描述:插入day_plt表数据 + * @author xy + * @param list data_plt集合 + * @param time 时间戳 + * @date 2022/5/12 8:55 + */ + private void insertDayPlt(List list, long time){ + List records = new ArrayList<>(); + list.forEach(item->{ + Map tags = new HashMap<>(); + Map fields = new HashMap<>(); + tags.put("line_id",item.getLineId()); + tags.put("phasic_type",item.getPhaseType()); + tags.put("quality_flag",item.getQualityFlag()); + tags.put("value_type",item.getValueType()); + fields.put("plt",item.getPlt()); + Point point = influxDbUtils.pointBuilder("day_plt", time, TimeUnit.MILLISECONDS, tags, fields); + BatchPoints batchPoints = BatchPoints.database(DATABASE).tag("line_id", item.getLineId()).tag("phasic_type",item.getPhaseType()).tag("quality_flag",item.getQualityFlag()).tag("value_type",item.getValueType()).retentionPolicy("").consistency(InfluxDB.ConsistencyLevel.ALL).build(); + batchPoints.point(point); + records.add(batchPoints.lineProtocol()); + }); + influxDbUtils.batchInsert(DATABASE,"", InfluxDB.ConsistencyLevel.ALL, records); + } + + public StringBuilder lineStringBuilder(List list) { + StringBuilder stringBuilder = new StringBuilder(); + if (!CollectionUtils.isEmpty(list)){ + stringBuilder.append("("); + for (int i = 0; i < list.size(); i++) { + if (list.size() - i != 1) { + stringBuilder.append("line_id ='").append(list.get(i)).append("' or "); + } else { + stringBuilder.append("line_id ='").append(list.get(i)).append("') and "); + } + } + } + return stringBuilder; + } + +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/handler/EleIntegrityJob.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/handler/EleIntegrityJob.java new file mode 100644 index 000000000..da5c00f1c --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/handler/EleIntegrityJob.java @@ -0,0 +1,165 @@ +package com.njcn.executor.handler; + +import com.njcn.energy.pojo.api.EleIntegrityFeignClient; +import com.njcn.executor.pojo.dto.HarmonicDTO; +import com.njcn.influxdb.utils.InfluxDbUtils; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.influxdb.InfluxDB; +import org.influxdb.dto.BatchPoints; +import org.influxdb.dto.Point; +import org.influxdb.dto.QueryResult; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.TimeUnit; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/4/13 15:19 + */ +@Slf4j +@Component +@AllArgsConstructor +public class EleIntegrityJob { + + private final Integer POWER_DATA_DUE = 96; + + private final Integer AIR_DATA_DUE = 288; + + private final String DATABASE = "pqsbase"; + + private final InfluxDbUtils influxDbUtils; + + private final EleIntegrityFeignClient eleIntegrityFeignClient; + + @XxlJob("eleIntegrityJobHandler") + public void eleIntegrityJobHandler() { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar calendar = Calendar.getInstance(); + calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)-1, 0, 0, 0); + calendar.set(Calendar.MILLISECOND, 0); + Calendar calendar2 = Calendar.getInstance(); + calendar2.set(calendar2.get(Calendar.YEAR), calendar2.get(Calendar.MONTH), calendar2.get(Calendar.DAY_OF_MONTH)-1, 23, 59, 59); + calendar2.set(Calendar.MILLISECOND, 0); + String startTime = format.format(calendar.getTime()); + String endTime = format.format(calendar2.getTime()); + + List powerData = getPowerData(startTime,endTime); + if(!CollectionUtils.isEmpty(powerData)){ + createMeasurement(powerData,calendar.getTimeInMillis()); + } else { + List result = new ArrayList<>(); + //查询当前网关下所有监测点id + List lineList = eleIntegrityFeignClient.getPowerLineId().getData(); + lineList.forEach(item->{ + HarmonicDTO harmonicDTO = new HarmonicDTO(); + harmonicDTO.setId(item); + harmonicDTO.setReal(0); + harmonicDTO.setDue(96); + result.add(harmonicDTO); + }); + createMeasurement(result,calendar.getTimeInMillis()); + } + List airData = getAirData(startTime,endTime); + if(!CollectionUtils.isEmpty(airData)){ + powerData = new ArrayList<>(airData); + createMeasurement(powerData,calendar.getTimeInMillis()); + } else { + List result = new ArrayList<>(); + //查询当前网关下所有监测点id + List lineList = eleIntegrityFeignClient.getAirLineId().getData(); + lineList.forEach(item->{ + HarmonicDTO harmonicDTO = new HarmonicDTO(); + harmonicDTO.setId(item); + harmonicDTO.setReal(0); + harmonicDTO.setDue(288); + result.add(harmonicDTO); + }); + createMeasurement(result,calendar.getTimeInMillis()); + } + } + + /** + * 生成power_data数据 + */ + private List getPowerData(String startTime, String endTime){ + List list = new ArrayList<>(); + String sql = "SELECT count(FundWattHr) FROM power_data where time >= '"+startTime+"' and time <= '"+endTime+"' group by LineId"; + QueryResult sqlResult = influxDbUtils.query(sql); + //处理结果集 + List seriesList = sqlResult.getResults().get(0).getSeries(); + if (!CollectionUtils.isEmpty(seriesList)){ + seriesList.forEach(po -> { + HarmonicDTO harmonicDTO = new HarmonicDTO(); + String lineId = po.getTags().get("LineId"); + List> countList = po.getValues(); + for (List value : countList) { + //当日实际数据 + Integer count = new BigDecimal(value.get(1).toString()).intValue(); + harmonicDTO.setId(lineId); + harmonicDTO.setReal(count); + harmonicDTO.setDue(POWER_DATA_DUE); + } + list.add(harmonicDTO); + }); + } + return list; + } + + /** + * 生成air_data数据 + */ + private List getAirData(String startTime, String endTime){ + List list = new ArrayList<>(); + String sql = "SELECT count(ACInMode),count(ACOutMode) FROM air_data where time >='"+startTime+"' and time <= '"+endTime+"' group by LineId"; + QueryResult sqlResult = influxDbUtils.query(sql); + //处理结果集 + List seriesList = sqlResult.getResults().get(0).getSeries(); + if (!CollectionUtils.isEmpty(seriesList)){ + seriesList.forEach(po -> { + HarmonicDTO harmonicDTO = new HarmonicDTO(); + String lineId = po.getTags().get("LineId"); + List> countList = po.getValues(); + for (List value : countList) { + //当日实际数据 + if (!Objects.isNull(value.get(1))){ + harmonicDTO.setReal(new BigDecimal(value.get(1).toString()).intValue()); + } else { + harmonicDTO.setReal(new BigDecimal(value.get(2).toString()).intValue()); + } + harmonicDTO.setId(lineId); + harmonicDTO.setDue(AIR_DATA_DUE); + } + list.add(harmonicDTO); + }); + } + return list; + } + + /** + * 生成用能数据完整性表 + */ + private void createMeasurement(List list, long time){ + List records = new ArrayList(); + list.forEach(item->{ + Map tags = new HashMap<>(); + Map fields = new HashMap<>(); + tags.put("line_id",item.getId()); + fields.put("real",item.getReal()); + fields.put("due",item.getDue()); + Point point = influxDbUtils.pointBuilder("ele_integrity", time, TimeUnit.MILLISECONDS, tags, fields); + BatchPoints batchPoints = BatchPoints.database(DATABASE).tag("line_id", item.getId()).retentionPolicy("").consistency(InfluxDB.ConsistencyLevel.ALL).build(); + batchPoints.point(point); + records.add(batchPoints.lineProtocol()); + }); + influxDbUtils.batchInsert(DATABASE,"", InfluxDB.ConsistencyLevel.ALL, records); + }; +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/handler/EleOnlineRateJob.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/handler/EleOnlineRateJob.java new file mode 100644 index 000000000..0d8fbf008 --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/handler/EleOnlineRateJob.java @@ -0,0 +1,70 @@ +package com.njcn.executor.handler; + +import com.njcn.energy.pojo.api.EleOnlineRateFeignClient; +import com.njcn.energy.pojo.dto.OnlineRateDTO; +import com.njcn.influxdb.utils.InfluxDbUtils; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.influxdb.InfluxDB; +import org.influxdb.dto.BatchPoints; +import org.influxdb.dto.Point; +import org.springframework.stereotype.Component; + +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.TimeUnit; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/4/15 15:57 + */ +@Slf4j +@Component +@AllArgsConstructor +public class EleOnlineRateJob { + + private final String DATABASE = "pqsbase"; + + private final InfluxDbUtils influxDbUtils; + + private final EleOnlineRateFeignClient eleOnlineRateFeignClient; + + @XxlJob("eleOnlineRateJobHandler") + public void eleOnlineRateJobHandler() { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar calendar = Calendar.getInstance(); + calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)-1, 0, 0, 0); + calendar.set(Calendar.MILLISECOND, 0); + Calendar calendar2 = Calendar.getInstance(); + calendar2.set(calendar2.get(Calendar.YEAR), calendar2.get(Calendar.MONTH), calendar2.get(Calendar.DAY_OF_MONTH)-1, 23, 59, 59); + calendar2.set(Calendar.MILLISECOND, 0); + String startTime = format.format(calendar.getTime()); + String endTime = format.format(calendar2.getTime()); + List list = eleOnlineRateFeignClient.getDeviceTime(startTime,endTime).getData(); + createMeasurement(list,calendar.getTimeInMillis()); + } + + /** + * 生成用能终端在线率表 + */ + private void createMeasurement(List list, long time){ + List records = new ArrayList(); + list.forEach(item->{ + Map tags = new HashMap<>(); + Map fields = new HashMap<>(); + tags.put("device_id",item.getDeviceId()); + fields.put("online_rate",item.getOnlineRate()); + Point point = influxDbUtils.pointBuilder("ele_online_rate", time, TimeUnit.MILLISECONDS, tags, fields); + BatchPoints batchPoints = BatchPoints.database(DATABASE).tag("device_id", item.getDeviceId()).retentionPolicy("").consistency(InfluxDB.ConsistencyLevel.ALL).build(); + batchPoints.point(point); + records.add(batchPoints.lineProtocol()); + }); + influxDbUtils.batchInsert(DATABASE,"", InfluxDB.ConsistencyLevel.ALL, records); + }; + + +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/handler/ElectricCalJob.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/handler/ElectricCalJob.java new file mode 100644 index 000000000..304097486 --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/handler/ElectricCalJob.java @@ -0,0 +1,148 @@ +package com.njcn.executor.handler; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.IdUtil; +import com.njcn.influxdb.utils.InfluxDbUtils; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.influxdb.dto.BatchPoints; +import org.influxdb.dto.Point; +import org.springframework.stereotype.Component; + +import java.text.SimpleDateFormat; +import java.time.Instant; +import java.util.*; +import java.util.Map.Entry; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +/** + * pqs + * 电能量增量数据处理 10分钟执行一轮 + * + * @author cdf + * @date 2022/4/7 + */ +@Slf4j +@Component +@AllArgsConstructor +public class ElectricCalJob { + + private final InfluxDbUtils influxDbUtils; + + @XxlJob("ElectricCalJob") + public void ElectricCalJob() { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar startTime = Calendar.getInstance(); + + startTime.add(Calendar.MINUTE, -40); + String start = sdf.format(startTime.getTime()); + + Calendar endTime = Calendar.getInstance(); + //endTime.add(Calendar.DAY_OF_MONTH,-8); + String end = sdf.format(endTime.getTime()); + + String sql = "select * from power_data where time > '" + start + "' and time < '" + end + "' order by time"; + List> list = influxDbUtils.getResult(sql); + + if (CollectionUtil.isNotEmpty(list)) { + Map lineTemMap = new HashMap<>(); + List> insertObj = new ArrayList<>(); + list.stream().collect(Collectors.groupingBy((item) -> item.get("LineId"), Collectors.toList())).forEach(lineTemMap::put); + lineTemMap.forEach((lineId, mapList) -> { + List> tmpList = (List) mapList; + if (CollectionUtil.isNotEmpty(tmpList)) { + for (int i = 0; i < tmpList.size(); i++) { + if (i != 0) { + Map mapEnd = tmpList.get(i); + Map mapStart = tmpList.get(i - 1); + Long endT = (Long) mapEnd.get("time") + 28800; + Long startT = (Long) mapStart.get("time") + 28800; + if (endT > startT) { + Map map = new HashMap<>(); + if (endT - startT == 60 * 15) { + for (Entry entry : tmpList.get(i).entrySet()) { + if (entry.getKey().equals("Phase") || entry.getKey().equals("LineId") || entry.getKey().equals("Stat_Method")) { + map.put(entry.getKey(), entry.getValue()); + } else if (entry.getKey().equals("time")) { + map.put(entry.getKey(), endT); + } else { + //定义 float最大值 + Float endThis = Float.parseFloat(entry.getValue().toString()); + Float startThis = Float.parseFloat(mapStart.get(entry.getKey()).toString()); + if (-1000000f == endThis || -1000000f == startThis) { + map.put(entry.getKey(), -1000000f); + } else { + map.put(entry.getKey(), endThis - startThis); + } + } + } + insertObj.add(map); + } else { + //缺少数据处理 + + } + } else { + log.error("时间起始顺序错误!"); + } + } + } + } + }); + + if (CollectionUtil.isNotEmpty(insertObj)) { + BatchPoints batchPoints = BatchPoints.database("pqsbase").build(); + for (Map it : insertObj) { + Point.Builder point = Point.measurement("power_data_add"); + it.forEach((key, val) -> { + if (key.equals("LineId")) { + point.tag(key, val.toString()); + } else if (key.equals("time")) { + point.time((Long) val, TimeUnit.SECONDS); + } else if (key.equals("Phase") || key.equals("Stat_Method")) { + point.addField(key, val.toString()); + } else { + point.addField(key, (Float) val); + } + }); + Point p = point.build(); + batchPoints.point(p); + } + + try { + influxDbUtils.batchInsert(batchPoints, TimeUnit.SECONDS); + HashMap> hashMap = new HashMap<>(); + for (int j = 0; j < insertObj.size(); j++) { + hashMap.put(insertObj.get(j).get("LineId").toString(), insertObj.get(j)); + } + hashMap.forEach((key, val) -> { + Long t = (Long) val.get("time") * 1000 - 28800000; + String tt = Instant.ofEpochMilli((Long) val.get("time") * 1000).toString(); + String sqlQs = "delete from power_data_add_Real where time< '" + tt + "' and LineId ='" + key + "'"; + influxDbUtils.deleteMeasurementData(sqlQs); + Map filedss = new HashMap<>(); + Map tagss = new HashMap<>(); + val.forEach((keytem, valtem) -> { + if (keytem.equals("time")) { + + } else if (keytem.equals("LineId")) { + tagss.put(keytem, valtem.toString()); + } else { + filedss.put(keytem, valtem); + } + }); + influxDbUtils.insert("power_data_add_Real", tagss, filedss, t, TimeUnit.MILLISECONDS); + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + } else { + log.error(start + "——————" + end + "数据为空"); + } + + + } + +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/handler/LimitRateJob.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/handler/LimitRateJob.java new file mode 100644 index 000000000..3bbe2e90d --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/handler/LimitRateJob.java @@ -0,0 +1,1367 @@ +package com.njcn.executor.handler; + +import com.njcn.common.pojo.constant.PatternRegex; +import com.njcn.device.api.LineFeignClient; +import com.njcn.device.pojo.dto.PollutionParamDTO; +import com.njcn.device.pojo.po.Overlimit; +import com.njcn.executor.pojo.vo.*; +import com.njcn.harmonic.constant.Param; +import com.njcn.influxdb.utils.InfluxDbUtils; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.influxdb.InfluxDB; +import org.influxdb.dto.BatchPoints; +import org.influxdb.dto.Point; +import org.influxdb.dto.QueryResult; +import org.influxdb.impl.InfluxDBResultMapper; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.Instant; +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/5/17 14:34 + */ +@Slf4j +@Component +@AllArgsConstructor +public class LimitRateJob { + + private final String DATABASE = "pqsbase"; + + private final InfluxDbUtils influxDbUtils; + + private final LineFeignClient lineFeignClient; + + @XxlJob("limitRateJobHandler") + public void getLimitRate() throws ParseException { + List list = new ArrayList<>(),paramList = new ArrayList<>();; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar calendar = Calendar.getInstance(); + calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)-1, 0, 0, 0); + calendar.set(Calendar.MILLISECOND, 0); + Calendar calendar2 = Calendar.getInstance(); + calendar2.set(calendar2.get(Calendar.YEAR), calendar2.get(Calendar.MONTH), calendar2.get(Calendar.DAY_OF_MONTH)-1, 23, 59, 59); + calendar2.set(Calendar.MILLISECOND, 0); + String startTime = format.format(calendar.getTime()); + String endTime = format.format(calendar2.getTime()); + String command = XxlJobHelper.getJobParam(); + if (!StringUtils.isEmpty(command)){ + paramList = Arrays.asList(command.split(",")); + startTime = paramList.get(0); + endTime = paramList.get(1); + list = paramList.subList(2,paramList.size()); + if (CollectionUtils.isEmpty(list)){ + log.info("补招未传入监测点,默认使用系统查询的监测点"); + list = lineFeignClient.getLineList().getData(); + } + boolean s1 = Pattern.matches(PatternRegex.TIME_FORMAT,startTime); + boolean e1 = Pattern.matches(PatternRegex.TIME_FORMAT,endTime); + if (!s1 || !e1){ + log.error("补招时间格式错误"); + return; + } else { + startTime = startTime + " 00:00:00"; + endTime = endTime + " 23:59:59"; + } + } else { + list = lineFeignClient.getLineList().getData(); + } + long diff,diffDays,a,b = 0; + Date d1 = format.parse(startTime); + Date d2 = format.parse(endTime); + diff = d2.getTime() - d1.getTime(); + diffDays = diff / (24 * 60 * 60 * 1000-1000); + int days = (int) diffDays; + if (!CollectionUtils.isEmpty(list)){ + Map> overLimitMap = new HashMap<>(); + PollutionParamDTO pollutionParamDTO = new PollutionParamDTO(); + pollutionParamDTO.setLineList(list); + List overLimitList = lineFeignClient.getOverLimitByList(pollutionParamDTO).getData(); + if (!CollectionUtils.isEmpty(overLimitList)){ + overLimitMap = overLimitList.stream().collect(Collectors.groupingBy(Overlimit::getId)); + } + for (int i = 1; i <= days; i++) { + a = d1.getTime() + (long)(i-1)*(24 * 60 * 60) * 1000; + b = d1.getTime() + (long)i*(24 * 60 * 60) * 1000-1000; + startTime = format.format(a); + endTime = format.format(b); + Map> map1 = getAllTime(list,startTime,endTime); + Map> map2 = getFlickerAllTime(list,startTime,endTime); + Map> map3 = getDataHarmRateV(list,startTime,endTime); + Map> map4 = getDataI(list,startTime,endTime); + Map> map5 = getDataInHarmV(list,startTime,endTime); + Map> map6 = getDataV(list,startTime,endTime); + Map> map7 = getDataVUnbalance(list,startTime,endTime); + Map> map8 = getDataINeg(list,startTime,endTime); + Map> map9 = getDataVFreq(list,startTime,endTime); + Map> map10 = getDataVDev(list,startTime,endTime); + Map> map11 = getDataPlt(list,startTime,endTime); + List result = getData(overLimitMap,map1,map2,map3,map4,map5,map6,map7,map8,map9,map10,map11); + //入库 + if (!CollectionUtils.isEmpty(result)){ + insert(result,a); + } + } + } + } + + + /** + * 组装A、B、C、T数据 + */ + private List getData(Map> limitMap, Map> map1, Map> map2, Map> map3,Map> map4,Map> map5,Map> map6,Map> map7,Map> map8,Map> map9,Map> map10,Map> map11){ + List result = new ArrayList<>(); + for (String item:limitMap.keySet()){ + Map> map111 = new HashMap<>(); + Map> map22 = new HashMap<>(); + Map> map33 = new HashMap<>(); + Map> map44 = new HashMap<>(); + Map> map88 = new HashMap<>(); + Map> map99 = new HashMap<>(); + Map> map1111 = new HashMap<>(); + Map> map222 = new HashMap<>(); + Map> map333 = new HashMap<>(); + Map> map444 = new HashMap<>(); + Map> map555 = new HashMap<>(); + Map> map666 = new HashMap<>(); + Map> map777 = new HashMap<>(); + Map> map888 = new HashMap<>(); + Map> map999 = new HashMap<>(); + Integer allTime = 0; + Integer flickerAllTime = 0; + Overlimit overlimit = limitMap.get(item).get(0); + if (!CollectionUtils.isEmpty(map1.get(item))){ + allTime = map1.get(item).get(0).getAllTime(); + } + if (!CollectionUtils.isEmpty(map2.get(item))){ + flickerAllTime = map2.get(item).get(0).getFlickerAllTime(); + } + List list1 = map3.get(item); + List list2 = map4.get(item); + List list3 = map5.get(item); + List list4 = map6.get(item); + List list5 = map7.get(item); + List list6 = map8.get(item); + List list7 = map9.get(item); + List list8 = map10.get(item); + List list9 = map11.get(item); + if (!CollectionUtils.isEmpty(list1)){ + map111 = list1.stream().collect(Collectors.groupingBy(DataHarmRateV::getPhaseType)); + map1111 = list1.stream().collect(Collectors.groupingBy(DataHarmRateV::getTime)); + } + if (!CollectionUtils.isEmpty(list2)){ + map22 = list2.stream().collect(Collectors.groupingBy(DataI::getPhaseType)); + map222 = list2.stream().collect(Collectors.groupingBy(DataI::getTime)); + } + if (!CollectionUtils.isEmpty(list3)){ + map33 = list3.stream().collect(Collectors.groupingBy(DataInHarmV::getPhaseType)); + map333 = list3.stream().collect(Collectors.groupingBy(DataInHarmV::getTime)); + } + if (!CollectionUtils.isEmpty(list4)){ + map44 = list4.stream().collect(Collectors.groupingBy(DataV::getPhaseType)); + map444 = list4.stream().collect(Collectors.groupingBy(DataV::getTime)); + } + if (!CollectionUtils.isEmpty(list5)){ + map555 = list5.stream().collect(Collectors.groupingBy(DataV::getTime)); + } + if (!CollectionUtils.isEmpty(list6)){ + map666 = list6.stream().collect(Collectors.groupingBy(DataI::getTime)); + } + if (!CollectionUtils.isEmpty(list7)){ + map777 = list7.stream().collect(Collectors.groupingBy(DataV::getTime)); + } + if (!CollectionUtils.isEmpty(list8)){ + map88 = list8.stream().collect(Collectors.groupingBy(DataV::getPhaseType)); + map888 = list8.stream().collect(Collectors.groupingBy(DataV::getTime)); + } + if (!CollectionUtils.isEmpty(list9)){ + map99 = list9.stream().collect(Collectors.groupingBy(DataPlt::getPhaseType)); + map999 = list9.stream().collect(Collectors.groupingBy(DataPlt::getTime)); + } + LimitRate a = limitRateData(overlimit,allTime,flickerAllTime,"A",item,map111.get("A"),map22.get("A"),map33.get("A"),map44.get("A"),map88.get("A"),map99.get("A")); + LimitRate b = limitRateData(overlimit,allTime,flickerAllTime,"B",item,map111.get("B"),map22.get("B"),map33.get("B"),map44.get("B"),map88.get("B"),map99.get("B")); + LimitRate c = limitRateData(overlimit,allTime,flickerAllTime,"C",item,map111.get("C"),map22.get("C"),map33.get("C"),map44.get("C"),map88.get("C"),map99.get("C")); + LimitRate t = limitRateDataT(overlimit,allTime,flickerAllTime,item,map1111,map222,map333,map444,map555,map666,map777,map888,map999); + result.add(a); + result.add(b); + result.add(c); + result.add(t); + }; + return result; + } + + + /** + * A、B、C三项指标统计 + */ + public LimitRate limitRateData(Overlimit overlimit, Integer allTime, Integer flickerAllTime, String phasicType, String lineId, List list1, List list2, List list3, List list4, List list8, List list9){ + LimitRate limitRate = new LimitRate(); + int v2 = 0,v3 = 0,v4 = 0,v5 = 0,v6 = 0,v7 = 0,v8 = 0,v9 = 0,v10 = 0,v11 = 0,v12 = 0,v13 = 0,v14 = 0,v15 = 0,v16 = 0,v17 = 0,v18 = 0,v19 = 0,v20 = 0,v21 = 0,v22 = 0,v23 = 0,v24 = 0,v25 = 0; + int i2 = 0,i3 = 0,i4 = 0,i5 = 0,i6 = 0,i7 = 0,i8 = 0,i9 = 0,i10 = 0,i11 = 0,i12 = 0,i13 = 0,i14 = 0,i15 = 0,i16 = 0,i17 = 0,i18 = 0,i19 = 0,i20 = 0,i21 = 0,i22 = 0,i23 = 0,i24 = 0,i25 = 0; + int uHarm1 = 0,uHarm2 = 0,uHarm3 = 0,uHarm4 = 0,uHarm5 = 0,uHarm6 = 0,uHarm7 = 0,uHarm8 = 0,uHarm9 = 0,uHarm10 = 0,uHarm11 = 0,uHarm12 = 0,uHarm13 = 0,uHarm14 = 0,uHarm15 = 0,uHarm16 = 0; + int thd = 0,uDev = 0,flicker = 0; + //2-25次谐波电压含有率 + if (!CollectionUtils.isEmpty(list1)){ + for (DataHarmRateV item : list1) { + if (item.getV2() > overlimit.getUharm2()){ + v2++; + } + if (item.getV3() > overlimit.getUharm3()){ + v3++; + } + if (item.getV4() > overlimit.getUharm4()){ + v4++; + } + if (item.getV5() > overlimit.getUharm5()){ + v5++; + } + if (item.getV6() > overlimit.getUharm6()){ + v6++; + } + if (item.getV7() > overlimit.getUharm7()){ + v7++; + } + if (item.getV8() > overlimit.getUharm8()){ + v8++; + } + if (item.getV9() > overlimit.getUharm9()){ + v9++; + } + if (item.getV10() > overlimit.getUharm10()){ + v10++; + } + if (item.getV11() > overlimit.getUharm11()){ + v11++; + } + if (item.getV12() > overlimit.getUharm12()){ + v12++; + } + if (item.getV13() > overlimit.getUharm13()){ + v13++; + } + if (item.getV14() > overlimit.getUharm14()){ + v14++; + } + if (item.getV15() > overlimit.getUharm15()){ + v15++; + } + if (item.getV16() > overlimit.getUharm16()){ + v16++; + } + if (item.getV17() > overlimit.getUharm17()){ + v17++; + } + if (item.getV18() > overlimit.getUharm18()){ + v18++; + } + if (item.getV19() > overlimit.getUharm19()){ + v19++; + } + if (item.getV20() > overlimit.getUharm20()){ + v20++; + } + if (item.getV21() > overlimit.getUharm21()){ + v21++; + } + if (item.getV22() > overlimit.getUharm22()){ + v22++; + } + if (item.getV23() > overlimit.getUharm23()){ + v23++; + } + if (item.getV24() > overlimit.getUharm24()){ + v24++; + } + if (item.getV25() > overlimit.getUharm25()){ + v25++; + } + } + } + //2-25次谐波电流 + if (!CollectionUtils.isEmpty(list2)){ + for (DataI item : list2) { + if (item.getI2() > overlimit.getIharm2()){ + i2++; + } + if (item.getI3() > overlimit.getIharm3()){ + i3++; + } + if (item.getI4() > overlimit.getIharm4()){ + i4++; + } + if (item.getI5() > overlimit.getIharm5()){ + i5++; + } + if (item.getI6() > overlimit.getIharm6()){ + i6++; + } + if (item.getI7() > overlimit.getIharm7()){ + i7++; + } + if (item.getI8() > overlimit.getIharm8()){ + i8++; + } + if (item.getI9() > overlimit.getIharm9()){ + i9++; + } + if (item.getI10() > overlimit.getIharm10()){ + i10++; + } + if (item.getI11() > overlimit.getIharm11()){ + i11++; + } + if (item.getI12() > overlimit.getIharm12()){ + i12++; + } + if (item.getI13() > overlimit.getIharm13()){ + i13++; + } + if (item.getI14() > overlimit.getIharm14()){ + i14++; + } + if (item.getI15() > overlimit.getIharm15()){ + i15++; + } + if (item.getI16() > overlimit.getIharm16()){ + i16++; + } + if (item.getI17() > overlimit.getIharm17()){ + i17++; + } + if (item.getI18() > overlimit.getIharm18()){ + i18++; + } + if (item.getI19() > overlimit.getIharm19()){ + i19++; + } + if (item.getI20() > overlimit.getIharm20()){ + i20++; + } + if (item.getI21() > overlimit.getIharm21()){ + i21++; + } + if (item.getI22() > overlimit.getIharm22()){ + i22++; + } + if (item.getI23() > overlimit.getIharm23()){ + i23++; + } + if (item.getI24() > overlimit.getIharm24()){ + i24++; + } + if (item.getI25() > overlimit.getIharm25()){ + i25++; + } + } + } + //0.5-15.5次间谐波电压含有率 + if (!CollectionUtils.isEmpty(list3)){ + for (DataInHarmV item : list3) { + if (item.getV1() > overlimit.getInuharm1()){ + uHarm1++; + } + if (item.getV2() > overlimit.getInuharm2()){ + uHarm2++; + } + if (item.getV3() > overlimit.getInuharm3()){ + uHarm3++; + } + if (item.getV4() > overlimit.getInuharm4()){ + uHarm4++; + } + if (item.getV5() > overlimit.getInuharm5()){ + uHarm5++; + } + if (item.getV6() > overlimit.getInuharm6()){ + uHarm6++; + } + if (item.getV7() > overlimit.getInuharm7()){ + uHarm7++; + } + if (item.getV8() > overlimit.getInuharm8()){ + uHarm8++; + } + if (item.getV9() > overlimit.getInuharm9()){ + uHarm9++; + } + if (item.getV10() > overlimit.getInuharm10()){ + uHarm10++; + } + if (item.getV11() > overlimit.getInuharm11()){ + uHarm11++; + } + if (item.getV12() > overlimit.getInuharm12()){ + uHarm12++; + } + if (item.getV13() > overlimit.getInuharm13()){ + uHarm13++; + } + if (item.getV14() > overlimit.getInuharm14()){ + uHarm14++; + } + if (item.getV15() > overlimit.getInuharm15()){ + uHarm15++; + } + if (item.getV16() > overlimit.getInuharm16()){ + uHarm16++; + } + } + } + //电压总谐波畸变率 + if (!CollectionUtils.isEmpty(list4)){ + for (DataV item : list4) { + if (item.getVThd() > overlimit.getUaberrance()){ + thd++; + } + } + } + //电压上偏差、电压下偏差 + if (!CollectionUtils.isEmpty(list8)){ + Map> devMap = list8.stream().collect(Collectors.groupingBy(DataV::getValueType)); + List maxList = devMap.get("MAX"); + for (DataV item : maxList) { + if (item.getVuDev() > overlimit.getVoltageDev()){ + uDev++; + } + } + List minList = devMap.get("MIN"); + for (DataV item : minList) { + if (item.getVlDev() < overlimit.getUvoltageDev()){ + uDev++; + } + } + } + //长时间闪变 + if (!CollectionUtils.isEmpty(list9)){ + for (DataPlt item : list9) { + if (item.getPlt() > overlimit.getFlicker()){ + flicker++; + } + } + } + limitRate.setLineId(lineId); + limitRate.setPhasicType(phasicType); + limitRate.setAllTime(allTime); + limitRate.setFlickerAllTime(flickerAllTime); + limitRate.setUAberranceOverTime(0); + limitRate.setINegOverTime(0); + limitRate.setFreqDevOverTime(0); + limitRate.setUHarm2OverTime(v2); + limitRate.setUHarm3OverTime(v3); + limitRate.setUHarm4OverTime(v4); + limitRate.setUHarm5OverTime(v5); + limitRate.setUHarm6OverTime(v6); + limitRate.setUHarm7OverTime(v7); + limitRate.setUHarm8OverTime(v8); + limitRate.setUHarm9OverTime(v9); + limitRate.setUHarm10OverTime(v10); + limitRate.setUHarm11OverTime(v11); + limitRate.setUHarm12OverTime(v12); + limitRate.setUHarm13OverTime(v13); + limitRate.setUHarm14OverTime(v14); + limitRate.setUHarm15OverTime(v15); + limitRate.setUHarm16OverTime(v16); + limitRate.setUHarm17OverTime(v17); + limitRate.setUHarm18OverTime(v18); + limitRate.setUHarm19OverTime(v19); + limitRate.setUHarm20OverTime(v20); + limitRate.setUHarm21OverTime(v21); + limitRate.setUHarm22OverTime(v22); + limitRate.setUHarm23OverTime(v23); + limitRate.setUHarm24OverTime(v24); + limitRate.setUHarm25OverTime(v25); + limitRate.setIHarm2OverTime(i2); + limitRate.setIHarm3OverTime(i3); + limitRate.setIHarm4OverTime(i4); + limitRate.setIHarm5OverTime(i5); + limitRate.setIHarm6OverTime(i6); + limitRate.setIHarm7OverTime(i7); + limitRate.setIHarm8OverTime(i8); + limitRate.setIHarm9OverTime(i9); + limitRate.setIHarm10OverTime(i10); + limitRate.setIHarm11OverTime(i11); + limitRate.setIHarm12OverTime(i12); + limitRate.setIHarm13OverTime(i13); + limitRate.setIHarm14OverTime(i14); + limitRate.setIHarm15OverTime(i15); + limitRate.setIHarm16OverTime(i16); + limitRate.setIHarm17OverTime(i17); + limitRate.setIHarm18OverTime(i18); + limitRate.setIHarm19OverTime(i19); + limitRate.setIHarm20OverTime(i20); + limitRate.setIHarm21OverTime(i21); + limitRate.setIHarm22OverTime(i22); + limitRate.setIHarm23OverTime(i23); + limitRate.setIHarm24OverTime(i24); + limitRate.setIHarm25OverTime(i25); + limitRate.setInuHarm1OverTime(uHarm1); + limitRate.setInuHarm2OverTime(uHarm2); + limitRate.setInuHarm3OverTime(uHarm3); + limitRate.setInuHarm4OverTime(uHarm4); + limitRate.setInuHarm5OverTime(uHarm5); + limitRate.setInuHarm6OverTime(uHarm6); + limitRate.setInuHarm7OverTime(uHarm7); + limitRate.setInuHarm8OverTime(uHarm8); + limitRate.setInuHarm9OverTime(uHarm9); + limitRate.setInuHarm10OverTime(uHarm10); + limitRate.setInuHarm11OverTime(uHarm11); + limitRate.setInuHarm12OverTime(uHarm12); + limitRate.setInuHarm13OverTime(uHarm13); + limitRate.setInuHarm14OverTime(uHarm14); + limitRate.setInuHarm15OverTime(uHarm15); + limitRate.setInuHarm16OverTime(uHarm16); + limitRate.setUBalanceOverTime(thd); + limitRate.setVoltageDevOverTime(uDev); + limitRate.setFlickerOverTime(flicker); + return limitRate; + } + + /** + * T三项指标统计 + */ + public LimitRate limitRateDataT(Overlimit overlimit, Integer allTime, Integer flickerAllTime, String lineId, Map> map1,Map> map2, Map> map3,Map> map4,Map> map5,Map> map6,Map> map7, Map> map8,Map> map9){ + LimitRate limitRate = new LimitRate(); + int v2 = 0,v3 = 0,v4 = 0,v5 = 0,v6 = 0,v7 = 0,v8 = 0,v9 = 0,v10 = 0,v11 = 0,v12 = 0,v13 = 0,v14 = 0,v15 = 0,v16 = 0,v17 = 0,v18 = 0,v19 = 0,v20 = 0,v21 = 0,v22 = 0,v23 = 0,v24 = 0,v25 = 0; + int i2 = 0,i3 = 0,i4 = 0,i5 = 0,i6 = 0,i7 = 0,i8 = 0,i9 = 0,i10 = 0,i11 = 0,i12 = 0,i13 = 0,i14 = 0,i15 = 0,i16 = 0,i17 = 0,i18 = 0,i19 = 0,i20 = 0,i21 = 0,i22 = 0,i23 = 0,i24 = 0,i25 = 0; + int uHarm1 = 0,uHarm2 = 0,uHarm3 = 0,uHarm4 = 0,uHarm5 = 0,uHarm6 = 0,uHarm7 = 0,uHarm8 = 0,uHarm9 = 0,uHarm10 = 0,uHarm11 = 0,uHarm12 = 0,uHarm13 = 0,uHarm14 = 0,uHarm15 = 0,uHarm16 = 0; + int thd = 0,uDev = 0,flicker = 0,freqDev = 0,uAberrance = 0,iNeg = 0; + //2-25次谐波电压含有率 + for (Instant time:map1.keySet()) { + List list = map1.get(time); + List l2 = list.stream().filter(s->s.getV2()>overlimit.getUharm2()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l2)){ + v2++; + } + List l3 = list.stream().filter(s->s.getV3()>overlimit.getUharm3()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l3)){ + v3++; + } + List l4 = list.stream().filter(s->s.getV4()>overlimit.getUharm4()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l4)){ + v4++; + } + List l5 = list.stream().filter(s->s.getV5()>overlimit.getUharm5()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l5)){ + v5++; + } + List l6 = list.stream().filter(s->s.getV6()>overlimit.getUharm6()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l6)){ + v6++; + } + List l7 = list.stream().filter(s->s.getV7()>overlimit.getUharm7()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l7)){ + v7++; + } + List l8 = list.stream().filter(s->s.getV8()>overlimit.getUharm8()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l8)){ + v8++; + } + List l9 = list.stream().filter(s->s.getV9()>overlimit.getUharm9()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l9)){ + v9++; + } + List l10 = list.stream().filter(s->s.getV10()>overlimit.getUharm10()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l10)){ + v10++; + } + List l11 = list.stream().filter(s->s.getV11()>overlimit.getUharm11()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l11)){ + v11++; + } + List l12 = list.stream().filter(s->s.getV12()>overlimit.getUharm12()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l12)){ + v12++; + } + List l13 = list.stream().filter(s->s.getV13()>overlimit.getUharm13()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l13)){ + v13++; + } + List l14 = list.stream().filter(s->s.getV14()>overlimit.getUharm14()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l14)){ + v14++; + } + List l15 = list.stream().filter(s->s.getV15()>overlimit.getUharm15()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l15)){ + v15++; + } + List l16 = list.stream().filter(s->s.getV16()>overlimit.getUharm16()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l16)){ + v16++; + } + List l17 = list.stream().filter(s->s.getV17()>overlimit.getUharm17()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l17)){ + v17++; + } + List l18 = list.stream().filter(s->s.getV18()>overlimit.getUharm18()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l18)){ + v18++; + } + List l19 = list.stream().filter(s->s.getV19()>overlimit.getUharm19()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l19)){ + v19++; + } + List l20 = list.stream().filter(s->s.getV20()>overlimit.getUharm20()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l20)){ + v20++; + } + List l21 = list.stream().filter(s->s.getV21()>overlimit.getUharm21()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l21)){ + v21++; + } + List l22 = list.stream().filter(s->s.getV22()>overlimit.getUharm22()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l22)){ + v22++; + } + List l23 = list.stream().filter(s->s.getV23()>overlimit.getUharm23()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l23)){ + v23++; + } + List l24 = list.stream().filter(s->s.getV24()>overlimit.getUharm24()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l24)){ + v24++; + } + List l25 = list.stream().filter(s->s.getV25()>overlimit.getUharm25()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l25)){ + v25++; + } + } + //2-25次谐波电流 + for (Instant time:map2.keySet()) { + List list = map2.get(time); + List l2 = list.stream().filter(s->s.getI2()>overlimit.getIharm2()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l2)){ + i2++; + } + List l3 = list.stream().filter(s->s.getI3()>overlimit.getIharm3()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l3)){ + i3++; + } + List l4 = list.stream().filter(s->s.getI4()>overlimit.getIharm4()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l4)){ + i4++; + } + List l5 = list.stream().filter(s->s.getI5()>overlimit.getIharm5()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l5)){ + i5++; + } + List l6 = list.stream().filter(s->s.getI6()>overlimit.getIharm6()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l6)){ + i6++; + } + List l7 = list.stream().filter(s->s.getI7()>overlimit.getIharm7()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l7)){ + i7++; + } + List l8 = list.stream().filter(s->s.getI8()>overlimit.getIharm8()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l8)){ + i8++; + } + List l9 = list.stream().filter(s->s.getI9()>overlimit.getIharm9()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l9)){ + i9++; + } + List l10 = list.stream().filter(s->s.getI10()>overlimit.getIharm10()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l10)){ + i10++; + } + List l11 = list.stream().filter(s->s.getI11()>overlimit.getIharm11()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l11)){ + i11++; + } + List l12 = list.stream().filter(s->s.getI12()>overlimit.getIharm12()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l12)){ + i12++; + } + List l13 = list.stream().filter(s->s.getI13()>overlimit.getIharm13()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l13)){ + i13++; + } + List l14 = list.stream().filter(s->s.getI14()>overlimit.getIharm14()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l14)){ + i14++; + } + List l15 = list.stream().filter(s->s.getI15()>overlimit.getIharm15()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l15)){ + i15++; + } + List l16 = list.stream().filter(s->s.getI16()>overlimit.getIharm16()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l16)){ + i16++; + } + List l17 = list.stream().filter(s->s.getI17()>overlimit.getIharm17()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l17)){ + i17++; + } + List l18 = list.stream().filter(s->s.getI18()>overlimit.getIharm18()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l18)){ + i18++; + } + List l19 = list.stream().filter(s->s.getI19()>overlimit.getIharm19()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l19)){ + i19++; + } + List l20 = list.stream().filter(s->s.getI20()>overlimit.getIharm20()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l20)){ + i20++; + } + List l21 = list.stream().filter(s->s.getI21()>overlimit.getIharm21()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l21)){ + i21++; + } + List l22 = list.stream().filter(s->s.getI22()>overlimit.getIharm22()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l22)){ + i22++; + } + List l23 = list.stream().filter(s->s.getI23()>overlimit.getIharm23()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l23)){ + i23++; + } + List l24 = list.stream().filter(s->s.getI24()>overlimit.getIharm24()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l24)){ + i24++; + } + List l25 = list.stream().filter(s->s.getI25()>overlimit.getIharm25()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l25)){ + i25++; + } + } + //0.5-15.5次间谐波电压含有率 + for (Instant time:map3.keySet()) { + List list3 = map3.get(time); + List l2 = list3.stream().filter(s->s.getV1()>overlimit.getInuharm1()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l2)){ + uHarm1++; + } + List l3 = list3.stream().filter(s->s.getV2()>overlimit.getInuharm2()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l3)){ + uHarm2++; + } + List l4 = list3.stream().filter(s->s.getV3()>overlimit.getInuharm3()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l4)){ + uHarm3++; + } + List l5 = list3.stream().filter(s->s.getV4()>overlimit.getInuharm4()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l5)){ + uHarm4++; + } + List l6 = list3.stream().filter(s->s.getV5()>overlimit.getInuharm5()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l6)){ + uHarm5++; + } + List l7 = list3.stream().filter(s->s.getV6()>overlimit.getInuharm6()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l7)){ + uHarm6++; + } + List l8 = list3.stream().filter(s->s.getV7()>overlimit.getInuharm7()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l8)){ + uHarm7++; + } + List l9 = list3.stream().filter(s->s.getV8()>overlimit.getInuharm8()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l9)){ + uHarm8++; + } + List l10 = list3.stream().filter(s->s.getV9()>overlimit.getInuharm9()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l10)){ + uHarm9++; + } + List l11 = list3.stream().filter(s->s.getV10()>overlimit.getInuharm10()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l11)){ + uHarm10++; + } + List l12 = list3.stream().filter(s->s.getV11()>overlimit.getInuharm11()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l12)){ + uHarm11++; + } + List l13 = list3.stream().filter(s->s.getV12()>overlimit.getInuharm12()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l13)){ + uHarm12++; + } + List l14 = list3.stream().filter(s->s.getV13()>overlimit.getInuharm13()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l14)){ + uHarm13++; + } + List l15 = list3.stream().filter(s->s.getV14()>overlimit.getInuharm14()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l15)){ + uHarm14++; + } + List l16 = list3.stream().filter(s->s.getV15()>overlimit.getInuharm15()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l16)){ + uHarm15++; + } + List l17 = list3.stream().filter(s->s.getV16()>overlimit.getInuharm16()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l17)){ + uHarm16++; + } + } + //电压总谐波畸变率 + for (Instant time:map4.keySet()) { + List list = map4.get(time); + List l = list.stream().filter(s->s.getVThd()>overlimit.getUaberrance()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l)){ + thd++; + } + } + //三相电压不平衡度 + for (Instant time:map5.keySet()) { + List list = map5.get(time); + List l = list.stream().filter(s->s.getVUnbalance()>overlimit.getUbalance()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l)){ + uAberrance++; + } + } + //负序电流 + for (Instant time:map6.keySet()) { + List list = map6.get(time); + List l = list.stream().filter(s->s.getINeg()>overlimit.getINeg()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l)){ + iNeg++; + } + } + //频率偏差 + for (Instant time:map7.keySet()) { + List list = map7.get(time); + List l = list.stream().filter(s->s.getFreqDev()>overlimit.getFreqDev()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l)){ + freqDev++; + } + } + //电压上偏差、电压下偏差 + for (Instant time:map8.keySet()) { + List list = map8.get(time); + Map> devMap = list.stream().collect(Collectors.groupingBy(DataV::getValueType)); + List maxList = devMap.get("MAX"); + List minList = devMap.get("MIN"); + List l1 = maxList.stream().filter(s->s.getVuDev()>overlimit.getVoltageDev()).collect(Collectors.toList()); + List l2 = minList.stream().filter(s->s.getVlDev()>overlimit.getUvoltageDev()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l1) || !CollectionUtils.isEmpty(l2)){ + uDev++; + } + } + //长时间闪变 + for (Instant time:map9.keySet()) { + List list = map9.get(time); + List l = list.stream().filter(s->s.getPlt()>overlimit.getFlicker()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l)){ + flicker++; + } + } + limitRate.setLineId(lineId); + limitRate.setPhasicType("T"); + limitRate.setAllTime(allTime); + limitRate.setFlickerAllTime(flickerAllTime); + limitRate.setUAberranceOverTime(uAberrance); + limitRate.setINegOverTime(iNeg); + limitRate.setFreqDevOverTime(freqDev); + limitRate.setUHarm2OverTime(v2); + limitRate.setUHarm3OverTime(v3); + limitRate.setUHarm4OverTime(v4); + limitRate.setUHarm5OverTime(v5); + limitRate.setUHarm6OverTime(v6); + limitRate.setUHarm7OverTime(v7); + limitRate.setUHarm8OverTime(v8); + limitRate.setUHarm9OverTime(v9); + limitRate.setUHarm10OverTime(v10); + limitRate.setUHarm11OverTime(v11); + limitRate.setUHarm12OverTime(v12); + limitRate.setUHarm13OverTime(v13); + limitRate.setUHarm14OverTime(v14); + limitRate.setUHarm15OverTime(v15); + limitRate.setUHarm16OverTime(v16); + limitRate.setUHarm17OverTime(v17); + limitRate.setUHarm18OverTime(v18); + limitRate.setUHarm19OverTime(v19); + limitRate.setUHarm20OverTime(v20); + limitRate.setUHarm21OverTime(v21); + limitRate.setUHarm22OverTime(v22); + limitRate.setUHarm23OverTime(v23); + limitRate.setUHarm24OverTime(v24); + limitRate.setUHarm25OverTime(v25); + limitRate.setIHarm2OverTime(i2); + limitRate.setIHarm3OverTime(i3); + limitRate.setIHarm4OverTime(i4); + limitRate.setIHarm5OverTime(i5); + limitRate.setIHarm6OverTime(i6); + limitRate.setIHarm7OverTime(i7); + limitRate.setIHarm8OverTime(i8); + limitRate.setIHarm9OverTime(i9); + limitRate.setIHarm10OverTime(i10); + limitRate.setIHarm11OverTime(i11); + limitRate.setIHarm12OverTime(i12); + limitRate.setIHarm13OverTime(i13); + limitRate.setIHarm14OverTime(i14); + limitRate.setIHarm15OverTime(i15); + limitRate.setIHarm16OverTime(i16); + limitRate.setIHarm17OverTime(i17); + limitRate.setIHarm18OverTime(i18); + limitRate.setIHarm19OverTime(i19); + limitRate.setIHarm20OverTime(i20); + limitRate.setIHarm21OverTime(i21); + limitRate.setIHarm22OverTime(i22); + limitRate.setIHarm23OverTime(i23); + limitRate.setIHarm24OverTime(i24); + limitRate.setIHarm25OverTime(i25); + limitRate.setInuHarm1OverTime(uHarm1); + limitRate.setInuHarm2OverTime(uHarm2); + limitRate.setInuHarm3OverTime(uHarm3); + limitRate.setInuHarm4OverTime(uHarm4); + limitRate.setInuHarm5OverTime(uHarm5); + limitRate.setInuHarm6OverTime(uHarm6); + limitRate.setInuHarm7OverTime(uHarm7); + limitRate.setInuHarm8OverTime(uHarm8); + limitRate.setInuHarm9OverTime(uHarm9); + limitRate.setInuHarm10OverTime(uHarm10); + limitRate.setInuHarm11OverTime(uHarm11); + limitRate.setInuHarm12OverTime(uHarm12); + limitRate.setInuHarm13OverTime(uHarm13); + limitRate.setInuHarm14OverTime(uHarm14); + limitRate.setInuHarm15OverTime(uHarm15); + limitRate.setInuHarm16OverTime(uHarm16); + limitRate.setUBalanceOverTime(thd); + limitRate.setVoltageDevOverTime(uDev); + limitRate.setFlickerOverTime(flicker); + return limitRate; + } + + /** + * 功能描述:获取influxDB -> data_v -> 总计算次数(用data_v中phasic_type=A,quality_flag=0来参与统计) + * @author xy + * @param line 监测点集合 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @date 2022/5/23 10:51 + * @return + */ + public Map> getAllTime(List line, String startTime, String endTime){ + Map> map = new HashMap<>(); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("("); + for (int i = 0; i < line.size(); i++) { + if (line.size() - i != 1) { + stringBuilder.append("line_id='").append(line.get(i)).append("' or "); + } else { + stringBuilder.append("line_id='").append(line.get(i)).append("') and "); + } + } + stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and phasic_type = 'A' and value_type = 'AVG' and quality_flag = '1' group by line_id tz('Asia/Shanghai')"); + String sql = "SELECT count(freq) AS all_time FROM data_v where " + stringBuilder; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List list = resultMapper.toPOJO(sqlResult, DataV.class); + if (!CollectionUtils.isEmpty(list)){ + map = list.stream().collect(Collectors.groupingBy(DataV::getLineId)); + } + return map; + } + + /** + * 功能描述:获取influxDB ->data_plt -> 闪变总次数(用data_plt中phasic_type=A,quality_flag=0来参与统计) + * @author xy + * @param line 监测点集合 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @date 2022/5/23 10:51 + * @return + */ + public Map> getFlickerAllTime(List line, String startTime, String endTime){ + Map> map = new HashMap<>(); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("("); + for (int i = 0; i < line.size(); i++) { + if (line.size() - i != 1) { + stringBuilder.append("line_id='").append(line.get(i)).append("' or "); + } else { + stringBuilder.append("line_id='").append(line.get(i)).append("') and "); + } + } + stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and phasic_type = 'A' and value_type = 'AVG' and quality_flag = '1' group by line_id tz('Asia/Shanghai')"); + String sql = "SELECT count(plt) AS flicker_all_time FROM data_plt where " + stringBuilder; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List list = resultMapper.toPOJO(sqlResult, DataPlt.class); + if (!CollectionUtils.isEmpty(list)){ + map = list.stream().collect(Collectors.groupingBy(DataPlt::getLineId)); + } + return map; + } + + /** + * 功能描述:获取influxDB -> data_harmrate_v -> 2-25次谐波电压含有率 -> 日95%概率值 + * @author xy + * @param line 监测点集合 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @date 2022/5/23 10:51 + * @return + */ + public Map> getDataHarmRateV(List line, String startTime, String endTime){ + Map> map = new HashMap<>(); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("("); + for (int i = 0; i < line.size(); i++) { + if (line.size() - i != 1) { + stringBuilder.append("line_id='").append(line.get(i)).append("' or "); + } else { + stringBuilder.append("line_id='").append(line.get(i)).append("') and "); + } + } + stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and (phasic_type = 'A' or phasic_type = 'B' or phasic_type = 'C') and value_type = 'CP95' and quality_flag = '1' tz('Asia/Shanghai')"); + String sql = "SELECT * FROM data_harmrate_v WHERE " + stringBuilder; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List list = resultMapper.toPOJO(sqlResult, DataHarmRateV.class); + if (!CollectionUtils.isEmpty(list)){ + map = list.stream().collect(Collectors.groupingBy(DataHarmRateV::getLineId)); + } + return map; + } + + /** + * 功能描述:获取influxDB -> data_i -> 2-25次谐波电流 -> 日95%概率值 + * @author xy + * @param line 监测点集合 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @date 2022/5/23 10:51 + * @return + */ + public Map> getDataI(List line, String startTime, String endTime){ + Map> map = new HashMap<>(); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("("); + for (int i = 0; i < line.size(); i++) { + if (line.size() - i != 1) { + stringBuilder.append("line_id='").append(line.get(i)).append("' or "); + } else { + stringBuilder.append("line_id='").append(line.get(i)).append("') and "); + } + } + stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and (phasic_type = 'A' or phasic_type = 'B' or phasic_type = 'C') and value_type = 'CP95' and quality_flag = '1' tz('Asia/Shanghai')"); + String sql = "SELECT * FROM data_i WHERE " + stringBuilder; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List list = resultMapper.toPOJO(sqlResult, DataI.class); + if (!CollectionUtils.isEmpty(list)){ + map = list.stream().collect(Collectors.groupingBy(DataI::getLineId)); + } + return map; + } + + /** + * 功能描述:获取influxDB -> data_inharm_v -> 0.5-15.5次间谐波电压含有率 -> 日95%概率值 + * @author xy + * @param line 监测点集合 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @date 2022/5/23 10:51 + * @return + */ + public Map> getDataInHarmV(List line, String startTime, String endTime){ + Map> map = new HashMap<>(); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("("); + for (int i = 0; i < line.size(); i++) { + if (line.size() - i != 1) { + stringBuilder.append("line_id='").append(line.get(i)).append("' or "); + } else { + stringBuilder.append("line_id='").append(line.get(i)).append("') and "); + } + } + stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and (phasic_type = 'A' or phasic_type = 'B' or phasic_type = 'C') and value_type = 'CP95' and quality_flag = '1' tz('Asia/Shanghai')"); + String sql = "SELECT * FROM data_inharm_v WHERE " + stringBuilder; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List list = resultMapper.toPOJO(sqlResult, DataInHarmV.class); + if (!CollectionUtils.isEmpty(list)){ + map = list.stream().collect(Collectors.groupingBy(DataInHarmV::getLineId)); + } + return map; + } + + /** + * 功能描述:获取influxDB -> data_v -> 电压总谐波畸变率 -> 日95%概率值 + * @author xy + * @param line 监测点集合 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @date 2022/5/23 10:51 + * @return + */ + public Map> getDataV(List line, String startTime, String endTime){ + Map> map = new HashMap<>(); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("("); + for (int i = 0; i < line.size(); i++) { + if (line.size() - i != 1) { + stringBuilder.append("line_id='").append(line.get(i)).append("' or "); + } else { + stringBuilder.append("line_id='").append(line.get(i)).append("') and "); + } + } + stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and (phasic_type = 'A' or phasic_type = 'B' or phasic_type = 'C') and value_type = 'CP95' and quality_flag = '1' tz('Asia/Shanghai')"); + String sql = "SELECT * FROM data_v WHERE " + stringBuilder; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List list = resultMapper.toPOJO(sqlResult, DataV.class); + if (!CollectionUtils.isEmpty(list)){ + map = list.stream().collect(Collectors.groupingBy(DataV::getLineId)); + } + return map; + } + + + /** + * 功能描述:获取influxDB -> data_v -> 负序电压不平衡度 -> 最大值 && 日95%概率值 + * @author xy + * @param line 监测点集合 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @date 2022/5/23 10:51 + * @return + */ + public Map> getDataVUnbalance(List line, String startTime, String endTime){ + Map> map = new HashMap<>(); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("("); + for (int i = 0; i < line.size(); i++) { + if (line.size() - i != 1) { + stringBuilder.append("line_id='").append(line.get(i)).append("' or "); + } else { + stringBuilder.append("line_id='").append(line.get(i)).append("') and "); + } + } + stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and phasic_type = 'T' and (value_type = 'CP95' or value_type = 'MAX') and quality_flag = '1' tz('Asia/Shanghai')"); + String sql = "SELECT * FROM data_v WHERE " + stringBuilder; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List list = resultMapper.toPOJO(sqlResult, DataV.class); + if (!CollectionUtils.isEmpty(list)){ + map = list.stream().collect(Collectors.groupingBy(DataV::getLineId)); + } + return map; + } + + /** + * 功能描述:获取influxDB -> data_i -> 负序电流 -> 最大值 && 日95%概率值 + * @author xy + * @param line 监测点集合 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @date 2022/5/23 10:51 + * @return + */ + public Map> getDataINeg(List line, String startTime, String endTime){ + Map> map = new HashMap<>(); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("("); + for (int i = 0; i < line.size(); i++) { + if (line.size() - i != 1) { + stringBuilder.append("line_id='").append(line.get(i)).append("' or "); + } else { + stringBuilder.append("line_id='").append(line.get(i)).append("') and "); + } + } + stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and phasic_type = 'T' and (value_type = 'CP95' or value_type = 'MAX') and quality_flag = '1' tz('Asia/Shanghai')"); + String sql = "SELECT * FROM data_i WHERE " + stringBuilder; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List list = resultMapper.toPOJO(sqlResult, DataI.class); + if (!CollectionUtils.isEmpty(list)){ + map = list.stream().collect(Collectors.groupingBy(DataI::getLineId)); + } + return map; + } + + /** + * 功能描述:获取influxDB -> data_v -> 频率偏差 -> 最大值 && 最小值 + * @author xy + * @param line 监测点集合 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @date 2022/5/23 10:51 + * @return + */ + public Map> getDataVFreq(List line, String startTime, String endTime){ + Map> map = new HashMap<>(); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("("); + for (int i = 0; i < line.size(); i++) { + if (line.size() - i != 1) { + stringBuilder.append("line_id='").append(line.get(i)).append("' or "); + } else { + stringBuilder.append("line_id='").append(line.get(i)).append("') and "); + } + } + stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and phasic_type = 'T' and (value_type = 'MIN' or value_type = 'MAX') and quality_flag = '1' tz('Asia/Shanghai')"); + String sql = "SELECT * FROM data_v WHERE " + stringBuilder; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List list = resultMapper.toPOJO(sqlResult, DataV.class); + if (!CollectionUtils.isEmpty(list)){ + map = list.stream().collect(Collectors.groupingBy(DataV::getLineId)); + } + return map; + } + + /** + * 功能描述:获取influxDB -> data_v -> 电压偏差 -> 最大值 && 最小值 + * @author xy + * @param line 监测点集合 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @date 2022/5/23 10:51 + * @return + */ + public Map> getDataVDev(List line, String startTime, String endTime){ + Map> map = new HashMap<>(); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("("); + for (int i = 0; i < line.size(); i++) { + if (line.size() - i != 1) { + stringBuilder.append("line_id='").append(line.get(i)).append("' or "); + } else { + stringBuilder.append("line_id='").append(line.get(i)).append("') and "); + } + } + stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and (phasic_type = 'A' or phasic_type = 'B' or phasic_type = 'C') and (value_type = 'MIN' or value_type = 'MAX') and quality_flag = '1' tz('Asia/Shanghai')"); + String sql = "SELECT * FROM data_v WHERE " + stringBuilder; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List list = resultMapper.toPOJO(sqlResult, DataV.class); + if (!CollectionUtils.isEmpty(list)){ + map = list.stream().collect(Collectors.groupingBy(DataV::getLineId)); + } + return map; + } + + /** + * 功能描述:获取influxDB -> data_plt -> 长时间闪变 -> 最大值 + * @author xy + * @param line 监测点集合 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @date 2022/5/23 10:51 + * @return + */ + public Map> getDataPlt(List line, String startTime, String endTime){ + Map> map = new HashMap<>(); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("("); + for (int i = 0; i < line.size(); i++) { + if (line.size() - i != 1) { + stringBuilder.append("line_id='").append(line.get(i)).append("' or "); + } else { + stringBuilder.append("line_id='").append(line.get(i)).append("') and "); + } + } + stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and (phasic_type = 'A' or phasic_type = 'B' or phasic_type = 'C') and value_type = 'MAX' and quality_flag = '1' tz('Asia/Shanghai')"); + String sql = "SELECT * FROM data_plt WHERE " + stringBuilder; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List list = resultMapper.toPOJO(sqlResult, DataPlt.class); + if (!CollectionUtils.isEmpty(list)){ + map = list.stream().collect(Collectors.groupingBy(DataPlt::getLineId)); + } + return map; + } + + private void insert(List list, long time){ + List records = new ArrayList<>(); + list.forEach(item->{ + Map tags = new HashMap<>(); + Map fields = new HashMap<>(); + tags.put("line_id",item.getLineId()); + tags.put("phasic_type",item.getPhasicType()); + fields.put("all_time",item.getAllTime()); + fields.put("flicker_all_time",item.getFlickerAllTime()); + fields.put("flicker_overtime",item.getFlickerOverTime()); + fields.put("freq_dev_overtime",item.getFreqDevOverTime()); + fields.put("ubalance_overtime",item.getUBalanceOverTime()); + fields.put("uaberrance_overtime",item.getUAberranceOverTime()); + fields.put("i_neg_overtime",item.getINegOverTime()); + fields.put("voltage_dev_overtime",item.getVoltageDevOverTime()); + fields.put("uharm_2_overtime",item.getUHarm2OverTime()); + fields.put("uharm_3_overtime",item.getUHarm3OverTime()); + fields.put("uharm_4_overtime",item.getUHarm4OverTime()); + fields.put("uharm_5_overtime",item.getUHarm5OverTime()); + fields.put("uharm_6_overtime",item.getUHarm6OverTime()); + fields.put("uharm_7_overtime",item.getUHarm7OverTime()); + fields.put("uharm_8_overtime",item.getUHarm8OverTime()); + fields.put("uharm_9_overtime",item.getUHarm9OverTime()); + fields.put("uharm_10_overtime",item.getUHarm10OverTime()); + fields.put("uharm_11_overtime",item.getUHarm11OverTime()); + fields.put("uharm_12_overtime",item.getUHarm12OverTime()); + fields.put("uharm_13_overtime",item.getUHarm13OverTime()); + fields.put("uharm_14_overtime",item.getUHarm14OverTime()); + fields.put("uharm_15_overtime",item.getUHarm15OverTime()); + fields.put("uharm_16_overtime",item.getUHarm16OverTime()); + fields.put("uharm_17_overtime",item.getUHarm17OverTime()); + fields.put("uharm_18_overtime",item.getUHarm18OverTime()); + fields.put("uharm_19_overtime",item.getUHarm19OverTime()); + fields.put("uharm_20_overtime",item.getUHarm20OverTime()); + fields.put("uharm_21_overtime",item.getUHarm21OverTime()); + fields.put("uharm_22_overtime",item.getUHarm22OverTime()); + fields.put("uharm_23_overtime",item.getUHarm23OverTime()); + fields.put("uharm_24_overtime",item.getUHarm24OverTime()); + fields.put("uharm_25_overtime",item.getUHarm25OverTime()); + fields.put("iharm_2_overtime",item.getIHarm2OverTime()); + fields.put("iharm_3_overtime",item.getIHarm3OverTime()); + fields.put("iharm_4_overtime",item.getIHarm4OverTime()); + fields.put("iharm_5_overtime",item.getIHarm5OverTime()); + fields.put("iharm_6_overtime",item.getIHarm6OverTime()); + fields.put("iharm_7_overtime",item.getIHarm7OverTime()); + fields.put("iharm_8_overtime",item.getIHarm8OverTime()); + fields.put("iharm_9_overtime",item.getIHarm9OverTime()); + fields.put("iharm_10_overtime",item.getIHarm10OverTime()); + fields.put("iharm_11_overtime",item.getIHarm11OverTime()); + fields.put("iharm_12_overtime",item.getIHarm12OverTime()); + fields.put("iharm_13_overtime",item.getIHarm13OverTime()); + fields.put("iharm_14_overtime",item.getIHarm14OverTime()); + fields.put("iharm_15_overtime",item.getIHarm15OverTime()); + fields.put("iharm_16_overtime",item.getIHarm16OverTime()); + fields.put("iharm_17_overtime",item.getIHarm17OverTime()); + fields.put("iharm_18_overtime",item.getIHarm18OverTime()); + fields.put("iharm_19_overtime",item.getIHarm19OverTime()); + fields.put("iharm_20_overtime",item.getIHarm20OverTime()); + fields.put("iharm_21_overtime",item.getIHarm21OverTime()); + fields.put("iharm_22_overtime",item.getIHarm22OverTime()); + fields.put("iharm_23_overtime",item.getIHarm23OverTime()); + fields.put("iharm_24_overtime",item.getIHarm24OverTime()); + fields.put("iharm_25_overtime",item.getIHarm25OverTime()); + fields.put("inuharm_1_overtime",item.getInuHarm1OverTime()); + fields.put("inuharm_2_overtime",item.getInuHarm2OverTime()); + fields.put("inuharm_3_overtime",item.getInuHarm3OverTime()); + fields.put("inuharm_4_overtime",item.getInuHarm4OverTime()); + fields.put("inuharm_5_overtime",item.getInuHarm5OverTime()); + fields.put("inuharm_6_overtime",item.getInuHarm6OverTime()); + fields.put("inuharm_7_overtime",item.getInuHarm7OverTime()); + fields.put("inuharm_8_overtime",item.getInuHarm8OverTime()); + fields.put("inuharm_9_overtime",item.getInuHarm9OverTime()); + fields.put("inuharm_10_overtime",item.getInuHarm10OverTime()); + fields.put("inuharm_11_overtime",item.getInuHarm11OverTime()); + fields.put("inuharm_12_overtime",item.getInuHarm12OverTime()); + fields.put("inuharm_13_overtime",item.getInuHarm13OverTime()); + fields.put("inuharm_14_overtime",item.getInuHarm14OverTime()); + fields.put("inuharm_15_overtime",item.getInuHarm15OverTime()); + fields.put("inuharm_16_overtime",item.getInuHarm16OverTime()); + Point point = influxDbUtils.pointBuilder("limit_rate", time, TimeUnit.MILLISECONDS, tags, fields); + BatchPoints batchPoints = BatchPoints.database(DATABASE).tag("line_id", item.getLineId()).tag("phasic_type",item.getPhasicType()).retentionPolicy("").consistency(InfluxDB.ConsistencyLevel.ALL).build(); + batchPoints.point(point); + records.add(batchPoints.lineProtocol()); + }); + influxDbUtils.batchInsert(DATABASE,"", InfluxDB.ConsistencyLevel.ALL, records); + } +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/handler/LimitTargetJob.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/handler/LimitTargetJob.java new file mode 100644 index 000000000..3c4abddca --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/handler/LimitTargetJob.java @@ -0,0 +1,984 @@ +package com.njcn.executor.handler; + +import com.njcn.common.pojo.constant.PatternRegex; +import com.njcn.device.api.LineFeignClient; +import com.njcn.device.pojo.dto.PollutionParamDTO; +import com.njcn.device.pojo.po.Overlimit; +import com.njcn.executor.pojo.vo.*; +import com.njcn.harmonic.constant.Param; +import com.njcn.harmonic.pojo.po.LimitTarget; +import com.njcn.influxdb.utils.InfluxDbUtils; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.influxdb.InfluxDB; +import org.influxdb.dto.BatchPoints; +import org.influxdb.dto.Point; +import org.influxdb.dto.QueryResult; +import org.influxdb.impl.InfluxDBResultMapper; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/5/17 14:34 + */ +@Slf4j +@Component +@AllArgsConstructor +public class LimitTargetJob { + + private final String DATABASE = "pqsbase"; + + private final InfluxDbUtils influxDbUtils; + + private final LineFeignClient lineFeignClient; + + @XxlJob("limitTargetJobHandler") + public void getLimitTarget() throws ParseException { + List list = new ArrayList<>(),paramList = new ArrayList<>();; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar calendar = Calendar.getInstance(); + calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)-1, 0, 0, 0); + calendar.set(Calendar.MILLISECOND, 0); + Calendar calendar2 = Calendar.getInstance(); + calendar2.set(calendar2.get(Calendar.YEAR), calendar2.get(Calendar.MONTH), calendar2.get(Calendar.DAY_OF_MONTH)-1, 23, 59, 59); + calendar2.set(Calendar.MILLISECOND, 0); + String startTime = format.format(calendar.getTime()); + String endTime = format.format(calendar2.getTime()); + String command = XxlJobHelper.getJobParam(); + if (!StringUtils.isEmpty(command)){ + paramList = Arrays.asList(command.split(",")); + startTime = paramList.get(0); + endTime = paramList.get(1); + list = paramList.subList(2,paramList.size()); + if (CollectionUtils.isEmpty(list)){ + log.info("补招未传入监测点,默认使用系统查询的监测点"); + list = lineFeignClient.getLineList().getData(); + } + boolean s1 = Pattern.matches(PatternRegex.TIME_FORMAT,startTime); + boolean e1 = Pattern.matches(PatternRegex.TIME_FORMAT,endTime); + if (!s1 || !e1){ + log.error("补招时间格式错误"); + return; + } else { + startTime = startTime + " 00:00:00"; + endTime = endTime + " 23:59:59"; + } + } else { + list = lineFeignClient.getLineList().getData(); + } + long diff,diffDays,a,b = 0; + Date d1 = format.parse(startTime); + Date d2 = format.parse(endTime); + diff = d2.getTime() - d1.getTime(); + diffDays = diff / (24 * 60 * 60 * 1000-1000); + int days = (int) diffDays; + if (!CollectionUtils.isEmpty(list)){ + Map> overLimitMap = new HashMap<>(); + PollutionParamDTO pollutionParamDTO = new PollutionParamDTO(); + pollutionParamDTO.setLineList(list); + List overLimitList = lineFeignClient.getOverLimitByList(pollutionParamDTO).getData(); + if (!CollectionUtils.isEmpty(overLimitList)){ + overLimitMap = overLimitList.stream().collect(Collectors.groupingBy(Overlimit::getId)); + } + for (int i = 1; i <= days; i++) { + a = d1.getTime() + (long)(i-1)*(24 * 60 * 60) * 1000; + b = d1.getTime() + (long)i*(24 * 60 * 60) * 1000-1000; + startTime = format.format(a); + endTime = format.format(b); + Map> map1 = getAllTime(list,startTime,endTime); + Map> map2 = getFlickerAllTime(list,startTime,endTime); + Map> map3 = getDayHarmrateV(list,startTime,endTime); + Map> map4 = getDayI(list,startTime,endTime); + Map> map5 = getDayInharmV(list,startTime,endTime); + Map> map6 = getDayV(list,startTime,endTime); + Map> map7 = getDayVUnbalance(list,startTime,endTime); + Map> map8 = getDayINeg(list,startTime,endTime); + Map> map9 = getDayVFreq(list,startTime,endTime); + Map> map10 = getDayVDev(list,startTime,endTime); + Map> map11 = getDayPlt(list,startTime,endTime); + List result = getData(overLimitMap,map1,map2,map3,map4,map5,map6,map7,map8,map9,map10,map11); + //入库 + if (!CollectionUtils.isEmpty(result)){ + insert(result,a); + } + } + } + } + + + /** + * 组装T项数据 + */ + private List getData(Map> limitMap, Map> map1, Map> map2, Map> map3,Map> map4,Map> map5,Map> map6,Map> map7,Map> map8,Map> map9,Map> map10,Map> map11){ + List result = new ArrayList<>(); + for (String item:limitMap.keySet()){ + Integer allTime = 0; + Integer flickerAllTime = 0; + Overlimit overlimit = limitMap.get(item).get(0); + if (!CollectionUtils.isEmpty(map1.get(item))){ + allTime = map1.get(item).get(0).getAllTime(); + if (allTime > 0){ + allTime = 1; + } + } + if (!CollectionUtils.isEmpty(map2.get(item))){ + flickerAllTime = map2.get(item).get(0).getFlickerAllTime(); + if (flickerAllTime > 0){ + flickerAllTime = 1; + } + } + List list1 = map3.get(item); + List list2 = map4.get(item); + List list3 = map5.get(item); + List list4 = map6.get(item); + List list5 = map7.get(item); + List list6 = map8.get(item); + List list7 = map9.get(item); + List list8 = map10.get(item); + List list9 = map11.get(item); + LimitTarget t = limitTargetDataT(overlimit,allTime,flickerAllTime,item,list1,list2,list3,list4,list5,list6,list7,list8,list9); + result.add(t); + }; + return result; + } + + /** + * T项指标统计 + */ + public LimitTarget limitTargetDataT(Overlimit overlimit, Integer allTime, Integer flickerAllTime, String lineId, List list1, List list2, List list3 ,List list4 ,List list5, List list6, List list7, List list8, List list9){ + LimitTarget limitTarget = new LimitTarget(); + int v2 = 0,v3 = 0,v4 = 0,v5 = 0,v6 = 0,v7 = 0,v8 = 0,v9 = 0,v10 = 0,v11 = 0,v12 = 0,v13 = 0,v14 = 0,v15 = 0,v16 = 0,v17 = 0,v18 = 0,v19 = 0,v20 = 0,v21 = 0,v22 = 0,v23 = 0,v24 = 0,v25 = 0; + int i2 = 0,i3 = 0,i4 = 0,i5 = 0,i6 = 0,i7 = 0,i8 = 0,i9 = 0,i10 = 0,i11 = 0,i12 = 0,i13 = 0,i14 = 0,i15 = 0,i16 = 0,i17 = 0,i18 = 0,i19 = 0,i20 = 0,i21 = 0,i22 = 0,i23 = 0,i24 = 0,i25 = 0; + int uHarm1 = 0,uHarm2 = 0,uHarm3 = 0,uHarm4 = 0,uHarm5 = 0,uHarm6 = 0,uHarm7 = 0,uHarm8 = 0,uHarm9 = 0,uHarm10 = 0,uHarm11 = 0,uHarm12 = 0,uHarm13 = 0,uHarm14 = 0,uHarm15 = 0,uHarm16 = 0; + int thd = 0,uDev = 0,flicker = 0,freqDev = 0,uAberrance = 0,iNeg = 0; + //2-25次谐波电压含有率 + if (!CollectionUtils.isEmpty(list1)){ + List l2 = list1.stream().filter(s->s.getV2()>overlimit.getUharm2()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l2)){ + v2 = 1; + } + List l3 = list1.stream().filter(s->s.getV3()>overlimit.getUharm3()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l3)){ + v3 = 1; + } + List l4 = list1.stream().filter(s->s.getV4()>overlimit.getUharm4()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l4)){ + v4 = 1; + } + List l5 = list1.stream().filter(s->s.getV5()>overlimit.getUharm5()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l5)){ + v5 = 1; + } + List l6 = list1.stream().filter(s->s.getV6()>overlimit.getUharm6()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l6)){ + v6 = 1; + } + List l7 = list1.stream().filter(s->s.getV7()>overlimit.getUharm7()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l7)){ + v7 = 1; + } + List l8 = list1.stream().filter(s->s.getV8()>overlimit.getUharm8()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l8)){ + v8 = 1; + } + List l9 = list1.stream().filter(s->s.getV9()>overlimit.getUharm9()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l9)){ + v9 = 1; + } + List l10 = list1.stream().filter(s->s.getV10()>overlimit.getUharm10()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l10)){ + v10 = 1; + } + List l11 = list1.stream().filter(s->s.getV11()>overlimit.getUharm11()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l11)){ + v11 = 1; + } + List l12 = list1.stream().filter(s->s.getV12()>overlimit.getUharm12()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l12)){ + v12 = 1; + } + List l13 = list1.stream().filter(s->s.getV13()>overlimit.getUharm13()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l13)){ + v13 = 1; + } + List l14 = list1.stream().filter(s->s.getV14()>overlimit.getUharm14()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l14)){ + v14 = 1; + } + List l15 = list1.stream().filter(s->s.getV15()>overlimit.getUharm15()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l15)){ + v15 = 1; + } + List l16 = list1.stream().filter(s->s.getV16()>overlimit.getUharm16()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l16)){ + v16 = 1; + } + List l17 = list1.stream().filter(s->s.getV17()>overlimit.getUharm17()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l17)){ + v17 = 1; + } + List l18 = list1.stream().filter(s->s.getV18()>overlimit.getUharm18()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l18)){ + v18 = 1; + } + List l19 = list1.stream().filter(s->s.getV19()>overlimit.getUharm19()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l19)){ + v19 = 1; + } + List l20 = list1.stream().filter(s->s.getV20()>overlimit.getUharm20()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l20)){ + v20 = 1; + } + List l21 = list1.stream().filter(s->s.getV21()>overlimit.getUharm21()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l21)){ + v21 = 1; + } + List l22 = list1.stream().filter(s->s.getV22()>overlimit.getUharm22()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l22)){ + v22 = 1; + } + List l23 = list1.stream().filter(s->s.getV23()>overlimit.getUharm23()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l23)){ + v23 = 1; + } + List l24 = list1.stream().filter(s->s.getV24()>overlimit.getUharm24()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l24)){ + v24 = 1; + } + List l25 = list1.stream().filter(s->s.getV25()>overlimit.getUharm25()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l25)){ + v25 = 1; + } + } + //2-25次谐波电流 + if (!CollectionUtils.isEmpty(list2)){ + List l2 = list2.stream().filter(s->s.getI2()>overlimit.getIharm2()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l2)){ + i2 = 1; + } + List l3 = list2.stream().filter(s->s.getI3()>overlimit.getIharm3()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l3)){ + i3 = 1; + } + List l4 = list2.stream().filter(s->s.getI4()>overlimit.getIharm4()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l4)){ + i4 = 1; + } + List l5 = list2.stream().filter(s->s.getI5()>overlimit.getIharm5()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l5)){ + i5 = 1; + } + List l6 = list2.stream().filter(s->s.getI6()>overlimit.getIharm6()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l6)){ + i6 = 1; + } + List l7 = list2.stream().filter(s->s.getI7()>overlimit.getIharm7()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l7)){ + i7 = 1; + } + List l8 = list2.stream().filter(s->s.getI8()>overlimit.getIharm8()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l8)){ + i8 = 1; + } + List l9 = list2.stream().filter(s->s.getI9()>overlimit.getIharm9()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l9)){ + i9 = 1; + } + List l10 = list2.stream().filter(s->s.getI10()>overlimit.getIharm10()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l10)){ + i10 = 1; + } + List l11 = list2.stream().filter(s->s.getI11()>overlimit.getIharm11()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l11)){ + i11 = 1; + } + List l12 = list2.stream().filter(s->s.getI12()>overlimit.getIharm12()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l12)){ + i12 = 1; + } + List l13 = list2.stream().filter(s->s.getI13()>overlimit.getIharm13()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l13)){ + i13 = 1; + } + List l14 = list2.stream().filter(s->s.getI14()>overlimit.getIharm14()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l14)){ + i14 = 1; + } + List l15 = list2.stream().filter(s->s.getI15()>overlimit.getIharm15()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l15)){ + i15 = 1; + } + List l16 = list2.stream().filter(s->s.getI16()>overlimit.getIharm16()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l16)){ + i16 = 1; + } + List l17 = list2.stream().filter(s->s.getI17()>overlimit.getIharm17()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l17)){ + i17 = 1; + } + List l18 = list2.stream().filter(s->s.getI18()>overlimit.getIharm18()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l18)){ + i18 = 1; + } + List l19 = list2.stream().filter(s->s.getI19()>overlimit.getIharm19()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l19)){ + i19 = 1; + } + List l20 = list2.stream().filter(s->s.getI20()>overlimit.getIharm20()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l20)){ + i20 = 1; + } + List l21 = list2.stream().filter(s->s.getI21()>overlimit.getIharm21()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l21)){ + i21 = 1; + } + List l22 = list2.stream().filter(s->s.getI22()>overlimit.getIharm22()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l22)){ + i22 = 1; + } + List l23 = list2.stream().filter(s->s.getI23()>overlimit.getIharm23()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l23)){ + i23 = 1; + } + List l24 = list2.stream().filter(s->s.getI24()>overlimit.getIharm24()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l24)){ + i24 = 1; + } + List l25 = list2.stream().filter(s->s.getI25()>overlimit.getIharm25()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l25)){ + i25 = 1; + } + } + //0.5-15.5次间谐波电压含有率 + if (!CollectionUtils.isEmpty(list3)){ + List l2 = list3.stream().filter(s->s.getV1()>overlimit.getInuharm1()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l2)){ + uHarm1 = 1; + } + List l3 = list3.stream().filter(s->s.getV2()>overlimit.getInuharm2()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l3)){ + uHarm2 = 1; + } + List l4 = list3.stream().filter(s->s.getV3()>overlimit.getInuharm3()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l4)){ + uHarm3 = 1; + } + List l5 = list3.stream().filter(s->s.getV4()>overlimit.getInuharm4()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l5)){ + uHarm4 = 1; + } + List l6 = list3.stream().filter(s->s.getV5()>overlimit.getInuharm5()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l6)){ + uHarm5 = 1; + } + List l7 = list3.stream().filter(s->s.getV6()>overlimit.getInuharm6()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l7)){ + uHarm6 = 1; + } + List l8 = list3.stream().filter(s->s.getV7()>overlimit.getInuharm7()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l8)){ + uHarm7 = 1; + } + List l9 = list3.stream().filter(s->s.getV8()>overlimit.getInuharm8()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l9)){ + uHarm8 = 1; + } + List l10 = list3.stream().filter(s->s.getV9()>overlimit.getInuharm9()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l10)){ + uHarm9 = 1; + } + List l11 = list3.stream().filter(s->s.getV10()>overlimit.getInuharm10()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l11)){ + uHarm10 = 1; + } + List l12 = list3.stream().filter(s->s.getV11()>overlimit.getInuharm11()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l12)){ + uHarm11 = 1; + } + List l13 = list3.stream().filter(s->s.getV12()>overlimit.getInuharm12()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l13)){ + uHarm12 = 1; + } + List l14 = list3.stream().filter(s->s.getV13()>overlimit.getInuharm13()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l14)){ + uHarm13 = 1; + } + List l15 = list3.stream().filter(s->s.getV14()>overlimit.getInuharm14()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l15)){ + uHarm14 = 1; + } + List l16 = list3.stream().filter(s->s.getV15()>overlimit.getInuharm15()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l16)){ + uHarm15 = 1; + } + List l17 = list3.stream().filter(s->s.getV16()>overlimit.getInuharm16()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l17)){ + uHarm16 = 1; + } + } + //电压总谐波畸变率 + if (!CollectionUtils.isEmpty(list4)){ + List l = list4.stream().filter(s->s.getVThd()>overlimit.getUaberrance()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l)){ + thd = 1; + } + } + //三相电压不平衡度 + if (!CollectionUtils.isEmpty(list5)){ + List l = list5.stream().filter(s->s.getVUnbalance()>overlimit.getUbalance()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l)){ + uAberrance = 1; + } + } + //负序电流 + if (!CollectionUtils.isEmpty(list6)){ + List l = list6.stream().filter(s->s.getINeg()>overlimit.getINeg()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l)){ + iNeg = 1; + } + } + //频率偏差 + if (!CollectionUtils.isEmpty(list7)){ + List l = list7.stream().filter(s->s.getFreqDev()>overlimit.getFreqDev()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l)){ + freqDev = 1; + } + } + //电压上偏差、电压下偏差 + if (!CollectionUtils.isEmpty(list8)){ + Map> devMap = list8.stream().collect(Collectors.groupingBy(DayV::getValueType)); + List maxList = devMap.get("MAX"); + List minList = devMap.get("MIN"); + List l1 = maxList.stream().filter(s->s.getVuDev()>overlimit.getVoltageDev()).collect(Collectors.toList()); + List l2 = minList.stream().filter(s->s.getVlDev()>overlimit.getUvoltageDev()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l1) || !CollectionUtils.isEmpty(l2)){ + uDev = 1; + } + } + //长时间闪变 + if (!CollectionUtils.isEmpty(list9)){ + List l = list9.stream().filter(s->s.getPlt()>overlimit.getFlicker()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(l)){ + flicker = 1; + } + } + limitTarget.setLineId(lineId); + limitTarget.setPhasicType("T"); + limitTarget.setAllTime(allTime); + limitTarget.setFlickerAllTime(flickerAllTime); + limitTarget.setUAberranceOverTime(uAberrance); + limitTarget.setINegOverTime(iNeg); + limitTarget.setFreqDevOverTime(freqDev); + limitTarget.setUHarm2OverTime(v2); + limitTarget.setUHarm3OverTime(v3); + limitTarget.setUHarm4OverTime(v4); + limitTarget.setUHarm5OverTime(v5); + limitTarget.setUHarm6OverTime(v6); + limitTarget.setUHarm7OverTime(v7); + limitTarget.setUHarm8OverTime(v8); + limitTarget.setUHarm9OverTime(v9); + limitTarget.setUHarm10OverTime(v10); + limitTarget.setUHarm11OverTime(v11); + limitTarget.setUHarm12OverTime(v12); + limitTarget.setUHarm13OverTime(v13); + limitTarget.setUHarm14OverTime(v14); + limitTarget.setUHarm15OverTime(v15); + limitTarget.setUHarm16OverTime(v16); + limitTarget.setUHarm17OverTime(v17); + limitTarget.setUHarm18OverTime(v18); + limitTarget.setUHarm19OverTime(v19); + limitTarget.setUHarm20OverTime(v20); + limitTarget.setUHarm21OverTime(v21); + limitTarget.setUHarm22OverTime(v22); + limitTarget.setUHarm23OverTime(v23); + limitTarget.setUHarm24OverTime(v24); + limitTarget.setUHarm25OverTime(v25); + limitTarget.setIHarm2OverTime(i2); + limitTarget.setIHarm3OverTime(i3); + limitTarget.setIHarm4OverTime(i4); + limitTarget.setIHarm5OverTime(i5); + limitTarget.setIHarm6OverTime(i6); + limitTarget.setIHarm7OverTime(i7); + limitTarget.setIHarm8OverTime(i8); + limitTarget.setIHarm9OverTime(i9); + limitTarget.setIHarm10OverTime(i10); + limitTarget.setIHarm11OverTime(i11); + limitTarget.setIHarm12OverTime(i12); + limitTarget.setIHarm13OverTime(i13); + limitTarget.setIHarm14OverTime(i14); + limitTarget.setIHarm15OverTime(i15); + limitTarget.setIHarm16OverTime(i16); + limitTarget.setIHarm17OverTime(i17); + limitTarget.setIHarm18OverTime(i18); + limitTarget.setIHarm19OverTime(i19); + limitTarget.setIHarm20OverTime(i20); + limitTarget.setIHarm21OverTime(i21); + limitTarget.setIHarm22OverTime(i22); + limitTarget.setIHarm23OverTime(i23); + limitTarget.setIHarm24OverTime(i24); + limitTarget.setIHarm25OverTime(i25); + limitTarget.setInuHarm1OverTime(uHarm1); + limitTarget.setInuHarm2OverTime(uHarm2); + limitTarget.setInuHarm3OverTime(uHarm3); + limitTarget.setInuHarm4OverTime(uHarm4); + limitTarget.setInuHarm5OverTime(uHarm5); + limitTarget.setInuHarm6OverTime(uHarm6); + limitTarget.setInuHarm7OverTime(uHarm7); + limitTarget.setInuHarm8OverTime(uHarm8); + limitTarget.setInuHarm9OverTime(uHarm9); + limitTarget.setInuHarm10OverTime(uHarm10); + limitTarget.setInuHarm11OverTime(uHarm11); + limitTarget.setInuHarm12OverTime(uHarm12); + limitTarget.setInuHarm13OverTime(uHarm13); + limitTarget.setInuHarm14OverTime(uHarm14); + limitTarget.setInuHarm15OverTime(uHarm15); + limitTarget.setInuHarm16OverTime(uHarm16); + limitTarget.setUBalanceOverTime(thd); + limitTarget.setVoltageDevOverTime(uDev); + limitTarget.setFlickerOverTime(flicker); + return limitTarget; + } + + /** + * 功能描述:获取influxDB -> DayV -> 总计算次数(用DayV中phasic_type=A,quality_flag=0来参与统计) + * @author xy + * @param line 监测点集合 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @date 2022/5/23 10:51 + * @return + */ + public Map> getAllTime(List line, String startTime, String endTime){ + Map> map = new HashMap<>(); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("("); + for (int i = 0; i < line.size(); i++) { + if (line.size() - i != 1) { + stringBuilder.append("line_id='").append(line.get(i)).append("' or "); + } else { + stringBuilder.append("line_id='").append(line.get(i)).append("') and "); + } + } + stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and phasic_type = 'A' and value_type = 'AVG' and quality_flag = '1' group by line_id tz('Asia/Shanghai')"); + String sql = "SELECT count(freq) AS all_time FROM day_v where " + stringBuilder; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List list = resultMapper.toPOJO(sqlResult, DayV.class); + if (!CollectionUtils.isEmpty(list)){ + map = list.stream().collect(Collectors.groupingBy(DayV::getLineId)); + } + return map; + } + + /** + * 功能描述:获取influxDB ->DayPlt -> 闪变总次数(用DayPlt中phasic_type=A,quality_flag=0来参与统计) + * @author xy + * @param line 监测点集合 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @date 2022/5/23 10:51 + * @return + */ + public Map> getFlickerAllTime(List line, String startTime, String endTime){ + Map> map = new HashMap<>(); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("("); + for (int i = 0; i < line.size(); i++) { + if (line.size() - i != 1) { + stringBuilder.append("line_id='").append(line.get(i)).append("' or "); + } else { + stringBuilder.append("line_id='").append(line.get(i)).append("') and "); + } + } + stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and phasic_type = 'A' and value_type = 'AVG' and quality_flag = '1' group by line_id tz('Asia/Shanghai')"); + String sql = "SELECT count(plt) AS flicker_all_time FROM day_plt where " + stringBuilder; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List list = resultMapper.toPOJO(sqlResult, DayPlt.class); + if (!CollectionUtils.isEmpty(list)){ + map = list.stream().collect(Collectors.groupingBy(DayPlt::getLineId)); + } + return map; + } + + /** + * 功能描述:获取influxDB -> DayHarmrateV -> 2-25次谐波电压含有率 -> 日95%概率值 + * @author xy + * @param line 监测点集合 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @date 2022/5/23 10:51 + * @return + */ + public Map> getDayHarmrateV(List line, String startTime, String endTime){ + Map> map = new HashMap<>(); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("("); + for (int i = 0; i < line.size(); i++) { + if (line.size() - i != 1) { + stringBuilder.append("line_id='").append(line.get(i)).append("' or "); + } else { + stringBuilder.append("line_id='").append(line.get(i)).append("') and "); + } + } + stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and (phasic_type = 'A' or phasic_type = 'B' or phasic_type = 'C') and value_type = 'CP95' and quality_flag = '1' tz('Asia/Shanghai')"); + String sql = "SELECT * FROM day_harmrate_v WHERE " + stringBuilder; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List list = resultMapper.toPOJO(sqlResult, DayHarmrateV.class); + if (!CollectionUtils.isEmpty(list)){ + map = list.stream().collect(Collectors.groupingBy(DayHarmrateV::getLineId)); + } + return map; + } + + /** + * 功能描述:获取influxDB -> DayI -> 2-25次谐波电流 -> 日95%概率值 + * @author xy + * @param line 监测点集合 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @date 2022/5/23 10:51 + * @return + */ + public Map> getDayI(List line, String startTime, String endTime){ + Map> map = new HashMap<>(); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("("); + for (int i = 0; i < line.size(); i++) { + if (line.size() - i != 1) { + stringBuilder.append("line_id='").append(line.get(i)).append("' or "); + } else { + stringBuilder.append("line_id='").append(line.get(i)).append("') and "); + } + } + stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and (phasic_type = 'A' or phasic_type = 'B' or phasic_type = 'C') and value_type = 'CP95' and quality_flag = '1' tz('Asia/Shanghai')"); + String sql = "SELECT * FROM day_i WHERE " + stringBuilder; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List list = resultMapper.toPOJO(sqlResult, DayI.class); + if (!CollectionUtils.isEmpty(list)){ + map = list.stream().collect(Collectors.groupingBy(DayI::getLineId)); + } + return map; + } + + /** + * 功能描述:获取influxDB -> DayInharmV -> 0.5-15.5次间谐波电压含有率 -> 日95%概率值 + * @author xy + * @param line 监测点集合 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @date 2022/5/23 10:51 + * @return + */ + public Map> getDayInharmV(List line, String startTime, String endTime){ + Map> map = new HashMap<>(); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("("); + for (int i = 0; i < line.size(); i++) { + if (line.size() - i != 1) { + stringBuilder.append("line_id='").append(line.get(i)).append("' or "); + } else { + stringBuilder.append("line_id='").append(line.get(i)).append("') and "); + } + } + stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and (phasic_type = 'A' or phasic_type = 'B' or phasic_type = 'C') and value_type = 'CP95' and quality_flag = '1' tz('Asia/Shanghai')"); + String sql = "SELECT * FROM day_inharm_v WHERE " + stringBuilder; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List list = resultMapper.toPOJO(sqlResult, DayInharmV.class); + if (!CollectionUtils.isEmpty(list)){ + map = list.stream().collect(Collectors.groupingBy(DayInharmV::getLineId)); + } + return map; + } + + /** + * 功能描述:获取influxDB -> DayV -> 电压总谐波畸变率 -> 日95%概率值 + * @author xy + * @param line 监测点集合 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @date 2022/5/23 10:51 + * @return + */ + public Map> getDayV(List line, String startTime, String endTime){ + Map> map = new HashMap<>(); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("("); + for (int i = 0; i < line.size(); i++) { + if (line.size() - i != 1) { + stringBuilder.append("line_id='").append(line.get(i)).append("' or "); + } else { + stringBuilder.append("line_id='").append(line.get(i)).append("') and "); + } + } + stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and (phasic_type = 'A' or phasic_type = 'B' or phasic_type = 'C') and value_type = 'CP95' and quality_flag = '1' tz('Asia/Shanghai')"); + String sql = "SELECT * FROM day_v WHERE " + stringBuilder; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List list = resultMapper.toPOJO(sqlResult, DayV.class); + if (!CollectionUtils.isEmpty(list)){ + map = list.stream().collect(Collectors.groupingBy(DayV::getLineId)); + } + return map; + } + + + /** + * 功能描述:获取influxDB -> DayV -> 负序电压不平衡度 -> 最大值 && 日95%概率值 + * @author xy + * @param line 监测点集合 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @date 2022/5/23 10:51 + * @return + */ + public Map> getDayVUnbalance(List line, String startTime, String endTime){ + Map> map = new HashMap<>(); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("("); + for (int i = 0; i < line.size(); i++) { + if (line.size() - i != 1) { + stringBuilder.append("line_id='").append(line.get(i)).append("' or "); + } else { + stringBuilder.append("line_id='").append(line.get(i)).append("') and "); + } + } + stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and phasic_type = 'T' and (value_type = 'CP95' or value_type = 'MAX') and quality_flag = '1' tz('Asia/Shanghai')"); + String sql = "SELECT * FROM day_v WHERE " + stringBuilder; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List list = resultMapper.toPOJO(sqlResult, DayV.class); + if (!CollectionUtils.isEmpty(list)){ + map = list.stream().collect(Collectors.groupingBy(DayV::getLineId)); + } + return map; + } + + /** + * 功能描述:获取influxDB -> DayI -> 负序电流 -> 最大值 && 日95%概率值 + * @author xy + * @param line 监测点集合 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @date 2022/5/23 10:51 + * @return + */ + public Map> getDayINeg(List line, String startTime, String endTime){ + Map> map = new HashMap<>(); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("("); + for (int i = 0; i < line.size(); i++) { + if (line.size() - i != 1) { + stringBuilder.append("line_id='").append(line.get(i)).append("' or "); + } else { + stringBuilder.append("line_id='").append(line.get(i)).append("') and "); + } + } + stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and phasic_type = 'T' and (value_type = 'CP95' or value_type = 'MAX') and quality_flag = '1' tz('Asia/Shanghai')"); + String sql = "SELECT * FROM day_i WHERE " + stringBuilder; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List list = resultMapper.toPOJO(sqlResult, DayI.class); + if (!CollectionUtils.isEmpty(list)){ + map = list.stream().collect(Collectors.groupingBy(DayI::getLineId)); + } + return map; + } + + /** + * 功能描述:获取influxDB -> DayV -> 频率偏差 -> 最大值 && 最小值 + * @author xy + * @param line 监测点集合 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @date 2022/5/23 10:51 + * @return + */ + public Map> getDayVFreq(List line, String startTime, String endTime){ + Map> map = new HashMap<>(); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("("); + for (int i = 0; i < line.size(); i++) { + if (line.size() - i != 1) { + stringBuilder.append("line_id='").append(line.get(i)).append("' or "); + } else { + stringBuilder.append("line_id='").append(line.get(i)).append("') and "); + } + } + stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and phasic_type = 'T' and (value_type = 'MIN' or value_type = 'MAX') and quality_flag = '1' tz('Asia/Shanghai')"); + String sql = "SELECT * FROM day_v WHERE " + stringBuilder; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List list = resultMapper.toPOJO(sqlResult, DayV.class); + if (!CollectionUtils.isEmpty(list)){ + map = list.stream().collect(Collectors.groupingBy(DayV::getLineId)); + } + return map; + } + + /** + * 功能描述:获取influxDB -> DayV -> 电压偏差 -> 最大值 && 最小值 + * @author xy + * @param line 监测点集合 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @date 2022/5/23 10:51 + * @return + */ + public Map> getDayVDev(List line, String startTime, String endTime){ + Map> map = new HashMap<>(); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("("); + for (int i = 0; i < line.size(); i++) { + if (line.size() - i != 1) { + stringBuilder.append("line_id='").append(line.get(i)).append("' or "); + } else { + stringBuilder.append("line_id='").append(line.get(i)).append("') and "); + } + } + stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and (phasic_type = 'A' or phasic_type = 'B' or phasic_type = 'C') and (value_type = 'MIN' or value_type = 'MAX') and quality_flag = '1' tz('Asia/Shanghai')"); + String sql = "SELECT * FROM day_v WHERE " + stringBuilder; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List list = resultMapper.toPOJO(sqlResult, DayV.class); + if (!CollectionUtils.isEmpty(list)){ + map = list.stream().collect(Collectors.groupingBy(DayV::getLineId)); + } + return map; + } + + /** + * 功能描述:获取influxDB -> DayPlt -> 长时间闪变 -> 最大值 + * @author xy + * @param line 监测点集合 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @date 2022/5/23 10:51 + * @return + */ + public Map> getDayPlt(List line, String startTime, String endTime){ + Map> map = new HashMap<>(); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("("); + for (int i = 0; i < line.size(); i++) { + if (line.size() - i != 1) { + stringBuilder.append("line_id='").append(line.get(i)).append("' or "); + } else { + stringBuilder.append("line_id='").append(line.get(i)).append("') and "); + } + } + stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and (phasic_type = 'A' or phasic_type = 'B' or phasic_type = 'C') and value_type = 'MAX' and quality_flag = '1' tz('Asia/Shanghai')"); + String sql = "SELECT * FROM day_plt WHERE " + stringBuilder; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List list = resultMapper.toPOJO(sqlResult, DayPlt.class); + if (!CollectionUtils.isEmpty(list)){ + map = list.stream().collect(Collectors.groupingBy(DayPlt::getLineId)); + } + return map; + } + + private void insert(List list, long time){ + List records = new ArrayList<>(); + list.forEach(item->{ + Map tags = new HashMap<>(); + Map fields = new HashMap<>(); + tags.put("line_id",item.getLineId()); + tags.put("phasic_type",item.getPhasicType()); + fields.put("all_time",item.getAllTime()); + fields.put("flicker_all_time",item.getFlickerAllTime()); + fields.put("flicker_overtime",item.getFlickerOverTime()); + fields.put("freq_dev_overtime",item.getFreqDevOverTime()); + fields.put("ubalance_overtime",item.getUBalanceOverTime()); + fields.put("uaberrance_overtime",item.getUAberranceOverTime()); + fields.put("i_neg_overtime",item.getINegOverTime()); + fields.put("voltage_dev_overtime",item.getVoltageDevOverTime()); + fields.put("uharm_2_overtime",item.getUHarm2OverTime()); + fields.put("uharm_3_overtime",item.getUHarm3OverTime()); + fields.put("uharm_4_overtime",item.getUHarm4OverTime()); + fields.put("uharm_5_overtime",item.getUHarm5OverTime()); + fields.put("uharm_6_overtime",item.getUHarm6OverTime()); + fields.put("uharm_7_overtime",item.getUHarm7OverTime()); + fields.put("uharm_8_overtime",item.getUHarm8OverTime()); + fields.put("uharm_9_overtime",item.getUHarm9OverTime()); + fields.put("uharm_10_overtime",item.getUHarm10OverTime()); + fields.put("uharm_11_overtime",item.getUHarm11OverTime()); + fields.put("uharm_12_overtime",item.getUHarm12OverTime()); + fields.put("uharm_13_overtime",item.getUHarm13OverTime()); + fields.put("uharm_14_overtime",item.getUHarm14OverTime()); + fields.put("uharm_15_overtime",item.getUHarm15OverTime()); + fields.put("uharm_16_overtime",item.getUHarm16OverTime()); + fields.put("uharm_17_overtime",item.getUHarm17OverTime()); + fields.put("uharm_18_overtime",item.getUHarm18OverTime()); + fields.put("uharm_19_overtime",item.getUHarm19OverTime()); + fields.put("uharm_20_overtime",item.getUHarm20OverTime()); + fields.put("uharm_21_overtime",item.getUHarm21OverTime()); + fields.put("uharm_22_overtime",item.getUHarm22OverTime()); + fields.put("uharm_23_overtime",item.getUHarm23OverTime()); + fields.put("uharm_24_overtime",item.getUHarm24OverTime()); + fields.put("uharm_25_overtime",item.getUHarm25OverTime()); + fields.put("iharm_2_overtime",item.getIHarm2OverTime()); + fields.put("iharm_3_overtime",item.getIHarm3OverTime()); + fields.put("iharm_4_overtime",item.getIHarm4OverTime()); + fields.put("iharm_5_overtime",item.getIHarm5OverTime()); + fields.put("iharm_6_overtime",item.getIHarm6OverTime()); + fields.put("iharm_7_overtime",item.getIHarm7OverTime()); + fields.put("iharm_8_overtime",item.getIHarm8OverTime()); + fields.put("iharm_9_overtime",item.getIHarm9OverTime()); + fields.put("iharm_10_overtime",item.getIHarm10OverTime()); + fields.put("iharm_11_overtime",item.getIHarm11OverTime()); + fields.put("iharm_12_overtime",item.getIHarm12OverTime()); + fields.put("iharm_13_overtime",item.getIHarm13OverTime()); + fields.put("iharm_14_overtime",item.getIHarm14OverTime()); + fields.put("iharm_15_overtime",item.getIHarm15OverTime()); + fields.put("iharm_16_overtime",item.getIHarm16OverTime()); + fields.put("iharm_17_overtime",item.getIHarm17OverTime()); + fields.put("iharm_18_overtime",item.getIHarm18OverTime()); + fields.put("iharm_19_overtime",item.getIHarm19OverTime()); + fields.put("iharm_20_overtime",item.getIHarm20OverTime()); + fields.put("iharm_21_overtime",item.getIHarm21OverTime()); + fields.put("iharm_22_overtime",item.getIHarm22OverTime()); + fields.put("iharm_23_overtime",item.getIHarm23OverTime()); + fields.put("iharm_24_overtime",item.getIHarm24OverTime()); + fields.put("iharm_25_overtime",item.getIHarm25OverTime()); + fields.put("inuharm_1_overtime",item.getInuHarm1OverTime()); + fields.put("inuharm_2_overtime",item.getInuHarm2OverTime()); + fields.put("inuharm_3_overtime",item.getInuHarm3OverTime()); + fields.put("inuharm_4_overtime",item.getInuHarm4OverTime()); + fields.put("inuharm_5_overtime",item.getInuHarm5OverTime()); + fields.put("inuharm_6_overtime",item.getInuHarm6OverTime()); + fields.put("inuharm_7_overtime",item.getInuHarm7OverTime()); + fields.put("inuharm_8_overtime",item.getInuHarm8OverTime()); + fields.put("inuharm_9_overtime",item.getInuHarm9OverTime()); + fields.put("inuharm_10_overtime",item.getInuHarm10OverTime()); + fields.put("inuharm_11_overtime",item.getInuHarm11OverTime()); + fields.put("inuharm_12_overtime",item.getInuHarm12OverTime()); + fields.put("inuharm_13_overtime",item.getInuHarm13OverTime()); + fields.put("inuharm_14_overtime",item.getInuHarm14OverTime()); + fields.put("inuharm_15_overtime",item.getInuHarm15OverTime()); + fields.put("inuharm_16_overtime",item.getInuHarm16OverTime()); + Point point = influxDbUtils.pointBuilder("limit_target", time, TimeUnit.MILLISECONDS, tags, fields); + BatchPoints batchPoints = BatchPoints.database(DATABASE).tag("line_id", item.getLineId()).tag("phasic_type",item.getPhasicType()).retentionPolicy("").consistency(InfluxDB.ConsistencyLevel.ALL).build(); + batchPoints.point(point); + records.add(batchPoints.lineProtocol()); + }); + influxDbUtils.batchInsert(DATABASE,"", InfluxDB.ConsistencyLevel.ALL, records); + } +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/handler/PollutionJob.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/handler/PollutionJob.java new file mode 100644 index 000000000..8eb2d9550 --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/handler/PollutionJob.java @@ -0,0 +1,551 @@ +package com.njcn.executor.handler; + +import com.njcn.device.api.LineFeignClient; +import com.njcn.device.pojo.po.Overlimit; +import com.njcn.executor.pojo.dto.PollutionDTO; +import com.njcn.executor.pojo.vo.*; +import com.njcn.harmonic.pojo.dto.PublicDTO; +import com.njcn.influxdb.utils.InfluxDbUtils; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.influxdb.InfluxDB; +import org.influxdb.dto.BatchPoints; +import org.influxdb.dto.Point; +import org.influxdb.dto.QueryResult; +import org.influxdb.impl.InfluxDBResultMapper; +import org.springframework.stereotype.Component; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.function.BinaryOperator; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * @author xuy + * @version 1.0.0 + * @date 2022年04月07日 09:54 + */ +@Slf4j +@Component +@AllArgsConstructor +public class PollutionJob { + + private final String DATABASE = "pqsbase"; + + private final InfluxDbUtils influxDbUtils; + + private final LineFeignClient lineFeignClient; + + /** + * 监测点污染指标 + */ + @XxlJob("pollutionJobHandler") + public void pollutionJobHandler() { + List list = new ArrayList<>(); + //谐波电压 + List uaberranceList = new ArrayList<>(); + //谐波电流 + List iHarmList = new ArrayList<>(); + //频率偏差 + List freqList = new ArrayList<>(); + //电压偏差 + List devList = new ArrayList<>(); + //三相电压不平衡度 + List uBalanceList = new ArrayList<>(); + //负序电流 + List iNegList = new ArrayList<>(); + //间谐波电压含有率 + List iNuharmList = new ArrayList<>(); + //长时电压闪变 + List flickerList = new ArrayList<>(); + List lineList = getAllLinesLimitData().stream().map(Overlimit::getId).collect(Collectors.toList()); + List pollutionList = new ArrayList<>(); + lineList.forEach(item->{ + PollutionDTO pollutionDTO = new PollutionDTO(); + pollutionDTO.setId(item); + pollutionList.add(pollutionDTO); + }); + //谐波电压污染数值 + Map> map1 = getDistortionData(); + for (String key : map1.keySet()) { + list.add(map1.get(key).get()); + } + Map> map2 = getContentData(); + for (String key : map2.keySet()) { + list.add(map2.get(key).get()); + } + Comparator comparator = Comparator.comparing(PublicDTO::getData); + Map> result = list.stream().collect(Collectors.groupingBy(PublicDTO::getId,Collectors.reducing(BinaryOperator.maxBy(comparator)))); + for (String key : result.keySet()) { + uaberranceList.add(result.get(key).get()); + } + //谐波电流污染数值 + Map> map3 = getIharm(); + for (String key : map3.keySet()) { + iHarmList.add(map3.get(key).get()); + } + //频率偏差污染数值 + Map> map4 = getFreq(); + for (String key : map4.keySet()) { + freqList.add(map4.get(key).get()); + } + //电压偏差 + Map> map5 = getDev(); + for (String key : map5.keySet()) { + devList.add(map5.get(key).get()); + } + //三相电压不平衡度 + Map> map6 = getUbalance(); + for (String key : map6.keySet()) { + uBalanceList.add(map6.get(key).get()); + } + //负序电流 + Map> map7 = getIneg(); + for (String key : map7.keySet()) { + iNegList.add(map7.get(key).get()); + } + //间谐波电压含有率 + Map> map8 = getInuharm(); + for (String key : map8.keySet()) { + iNuharmList.add(map8.get(key).get()); + } + //长时电压闪变 + Map> map9 = getFlicker(); + for (String key : map9.keySet()) { + flickerList.add(map8.get(key).get()); + } + //组装数据 + for (PollutionDTO item1 : pollutionList) { + for (PublicDTO item2 : uaberranceList) { + if (Objects.equals(item1.getId(),item2.getId())){ + item1.setData5(BigDecimal.valueOf(item2.getData()).setScale(4, RoundingMode.HALF_UP).doubleValue()); + } + } + } + for (PollutionDTO item1 : pollutionList) { + for (PublicDTO item2 : iHarmList) { + if (Objects.equals(item1.getId(),item2.getId())){ + item1.setData6(BigDecimal.valueOf(item2.getData()).setScale(4, RoundingMode.HALF_UP).doubleValue()); + } + } + } + for (PollutionDTO item1 : pollutionList) { + for (PublicDTO item2 : freqList) { + if (Objects.equals(item1.getId(),item2.getId())){ + item1.setData1(BigDecimal.valueOf(item2.getData()).setScale(4, RoundingMode.HALF_UP).doubleValue()); + } + } + } + for (PollutionDTO item1 : pollutionList) { + for (PublicDTO item2 : devList) { + if (Objects.equals(item1.getId(),item2.getId())){ + item1.setData2(BigDecimal.valueOf(item2.getData()).setScale(4, RoundingMode.HALF_UP).doubleValue()); + } + } + } + for (PollutionDTO item1 : pollutionList) { + for (PublicDTO item2 : uBalanceList) { + if (Objects.equals(item1.getId(),item2.getId())){ + item1.setData3(BigDecimal.valueOf(item2.getData()).setScale(4, RoundingMode.HALF_UP).doubleValue()); + } + } + } + for (PollutionDTO item1 : pollutionList) { + for (PublicDTO item2 : iNegList) { + if (Objects.equals(item1.getId(),item2.getId())){ + item1.setData4(BigDecimal.valueOf(item2.getData()).setScale(4, RoundingMode.HALF_UP).doubleValue()); + } + } + } + for (PollutionDTO item1 : pollutionList) { + for (PublicDTO item2 : iNuharmList) { + if (Objects.equals(item1.getId(),item2.getId())){ + item1.setData7(BigDecimal.valueOf(item2.getData()).setScale(4, RoundingMode.HALF_UP).doubleValue()); + } + } + } + for (PollutionDTO item1 : pollutionList) { + for (PublicDTO item2 : flickerList) { + if (Objects.equals(item1.getId(),item2.getId())){ + item1.setData8(BigDecimal.valueOf(item2.getData()).setScale(4, RoundingMode.HALF_UP).doubleValue()); + } + } + } + //将处理好的数据存入influxDB表中 + Calendar calendar = Calendar.getInstance(); + calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)-1, 0, 0, 0); + calendar.set(Calendar.MILLISECOND,0); + createMeasurement(pollutionList,calendar.getTimeInMillis()); + } + + + /** + * 获取限值表中的所有监测点信息 + */ + private List getAllLinesLimitData() { + return lineFeignClient.getAllLineOverLimit("harmonic-boot","").getData(); + } + + /** + * 谐波电压 -> 电压总谐波畸变率 + * 各监测点最新的A、B、C三相数据 + * 按照监测点分组,每个监测点取最大 + */ + private Map> getDistortionData(){ + String sql = "SELECT * FROM day_v where value_type = 'CP95' and (phasic_type = 'A' or phasic_type = 'B' or phasic_type = 'C') group by line_id order by time desc limit 3"; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List data; + PublicDTO publicDTO; + List lineData = new ArrayList<>(); + List list = resultMapper.toPOJO(sqlResult, DayV.class); + List overLimitList = getAllLinesLimitData(); + for (DayV item1 : list) { + for (Overlimit item2 : overLimitList) { + if (Objects.equals(item1.getLineId(),item2.getId())){ + double vUnbalance = item1.getVUnbalance()/item2.getUaberrance(); + data = Stream.of(vUnbalance).collect(Collectors.toList()); + double result = data.stream().max(Comparator.comparing(Double::doubleValue)).get(); + publicDTO = new PublicDTO(); + publicDTO.setId(item1.getLineId()); + publicDTO.setData(result); + lineData.add(publicDTO); + } + } + } + Comparator comparator = Comparator.comparing(PublicDTO::getData); + return lineData.stream().collect(Collectors.groupingBy(PublicDTO::getId,Collectors.reducing(BinaryOperator.maxBy(comparator)))); + } + + /** + * 谐波电压 -> 各次谐波电压含有率(2~25次) + * 各监测点最新的A、B、C三相数据 + */ + private Map> getContentData(){ + String sql = "SELECT * FROM day_harmrate_v where value_type = 'CP95' and (phasic_type = 'A' or phasic_type = 'B' or phasic_type = 'C') group by line_id order by time desc limit 3"; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List data; + PublicDTO publicDTO; + List lineData = new ArrayList<>(); + List list = resultMapper.toPOJO(sqlResult, DayHarmrateV.class); + List overLimitList = getAllLinesLimitData(); + for (DayHarmrateV dayHarmrateV : list) { + for (Overlimit overlimit : overLimitList) { + if (Objects.equals(dayHarmrateV.getLineId(),overlimit.getId())){ + double v2 = dayHarmrateV.getV2()/overlimit.getUharm2(); + double v3 = dayHarmrateV.getV3()/overlimit.getUharm3(); + double v4 = dayHarmrateV.getV4()/overlimit.getUharm4(); + double v5 = dayHarmrateV.getV5()/overlimit.getUharm5(); + double v6 = dayHarmrateV.getV6()/overlimit.getUharm6(); + double v7 = dayHarmrateV.getV7()/overlimit.getUharm7(); + double v8 = dayHarmrateV.getV8()/overlimit.getUharm8(); + double v9 = dayHarmrateV.getV9()/overlimit.getUharm9(); + double v10 = dayHarmrateV.getV10()/overlimit.getUharm10(); + double v11 = dayHarmrateV.getV11()/overlimit.getUharm11(); + double v12 = dayHarmrateV.getV12()/overlimit.getUharm12(); + double v13 = dayHarmrateV.getV13()/overlimit.getUharm13(); + double v14 = dayHarmrateV.getV14()/overlimit.getUharm14(); + double v15 = dayHarmrateV.getV15()/overlimit.getUharm15(); + double v16 = dayHarmrateV.getV16()/overlimit.getUharm16(); + double v17 = dayHarmrateV.getV17()/overlimit.getUharm17(); + double v18 = dayHarmrateV.getV18()/overlimit.getUharm18(); + double v19 = dayHarmrateV.getV19()/overlimit.getUharm19(); + double v20 = dayHarmrateV.getV20()/overlimit.getUharm20(); + double v21 = dayHarmrateV.getV21()/overlimit.getUharm21(); + double v22 = dayHarmrateV.getV22()/overlimit.getUharm22(); + double v23 = dayHarmrateV.getV23()/overlimit.getUharm23(); + double v24 = dayHarmrateV.getV24()/overlimit.getUharm24(); + double v25 = dayHarmrateV.getV25()/overlimit.getUharm25(); + data = Stream.of(v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,v15,v16,v17,v18,v19,v20,v21,v22,v23,v24,v25).collect(Collectors.toList()); + double result = data.stream().max(Comparator.comparing(Double::doubleValue)).get(); + publicDTO = new PublicDTO(); + publicDTO.setId(dayHarmrateV.getLineId()); + publicDTO.setData(result); + lineData.add(publicDTO); + } + } + } + Comparator comparator = Comparator.comparing(PublicDTO::getData); + return lineData.stream().collect(Collectors.groupingBy(PublicDTO::getId,Collectors.reducing(BinaryOperator.maxBy(comparator)))); + } + + /** + * 谐波电流 -> 各次谐波电流(2~25次) + * 各监测点最新的A、B、C三相数据 + */ + private Map> getIharm(){ + String sql = "SELECT * FROM day_i where value_type = 'CP95' and (phasic_type = 'A' or phasic_type = 'B' or phasic_type = 'C') group by line_id order by time desc limit 3"; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List data; + PublicDTO publicDTO; + List lineData = new ArrayList<>(); + List list = resultMapper.toPOJO(sqlResult, DayI.class); + List overLimitList = getAllLinesLimitData(); + for (DayI dayI : list) { + for (Overlimit overlimit : overLimitList) { + if (Objects.equals(dayI.getLineId(),overlimit.getId())){ + double v2 = dayI.getI2()/overlimit.getIharm2(); + double v3 = dayI.getI3()/overlimit.getIharm3(); + double v4 = dayI.getI4()/overlimit.getIharm4(); + double v5 = dayI.getI5()/overlimit.getIharm5(); + double v6 = dayI.getI6()/overlimit.getIharm6(); + double v7 = dayI.getI7()/overlimit.getIharm7(); + double v8 = dayI.getI8()/overlimit.getIharm8(); + double v9 = dayI.getI9()/overlimit.getIharm9(); + double v10 = dayI.getI10()/overlimit.getIharm10(); + double v11 = dayI.getI11()/overlimit.getIharm11(); + double v12 = dayI.getI12()/overlimit.getIharm12(); + double v13 = dayI.getI13()/overlimit.getIharm13(); + double v14 = dayI.getI14()/overlimit.getIharm14(); + double v15 = dayI.getI15()/overlimit.getIharm15(); + double v16 = dayI.getI16()/overlimit.getIharm16(); + double v17 = dayI.getI17()/overlimit.getIharm17(); + double v18 = dayI.getI18()/overlimit.getIharm18(); + double v19 = dayI.getI19()/overlimit.getIharm19(); + double v20 = dayI.getI20()/overlimit.getIharm20(); + double v21 = dayI.getI21()/overlimit.getIharm21(); + double v22 = dayI.getI22()/overlimit.getIharm22(); + double v23 = dayI.getI23()/overlimit.getIharm23(); + double v24 = dayI.getI24()/overlimit.getIharm24(); + double v25 = dayI.getI25()/overlimit.getIharm25(); + data = Stream.of(v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,v15,v16,v17,v18,v19,v20,v21,v22,v23,v24,v25).collect(Collectors.toList()); + double result = data.stream().max(Comparator.comparing(Double::doubleValue)).get(); + publicDTO = new PublicDTO(); + publicDTO.setId(dayI.getLineId()); + publicDTO.setData(result); + lineData.add(publicDTO); + } + } + } + Comparator comparator = Comparator.comparing(PublicDTO::getData); + return lineData.stream().collect(Collectors.groupingBy(PublicDTO::getId,Collectors.reducing(BinaryOperator.maxBy(comparator)))); + } + + /** + * 频率偏差 -> 绝对值 + * 各监测点最新的T相数据 + */ + private Map> getFreq(){ + String sql = "SELECT line_id,abs(freq_dev) AS freq_dev FROM day_v where phasic_type = 'T' and (value_type = 'MIN' or value_type = 'MAX') group by line_id order by time desc limit 2"; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List data; + PublicDTO publicDTO; + List lineData = new ArrayList<>(); + List list = resultMapper.toPOJO(sqlResult, DayV.class); + List overLimitList = getAllLinesLimitData(); + for (DayV dayV : list) { + for (Overlimit overlimit : overLimitList) { + if (Objects.equals(dayV.getLineId(),overlimit.getId())){ + double freqDev = dayV.getFreqDev()/overlimit.getFreqDev(); + data = Stream.of(freqDev).collect(Collectors.toList()); + double result = data.stream().max(Comparator.comparing(Double::doubleValue)).get(); + publicDTO = new PublicDTO(); + publicDTO.setId(dayV.getLineId()); + publicDTO.setData(result); + lineData.add(publicDTO); + } + } + } + Comparator comparator = Comparator.comparing(PublicDTO::getData); + return lineData.stream().collect(Collectors.groupingBy(PublicDTO::getId,Collectors.reducing(BinaryOperator.maxBy(comparator)))); + } + + /** + * 电压偏差 -> 绝对值 + * 各监测点最新的A、B、C三相数据 + */ + private Map> getDev(){ + String sql = "SELECT line_id,vu_dev,vl_dev,value_type FROM day_v where (phasic_type = 'A' or phasic_type = 'B' or phasic_type = 'C') and (value_type = 'MIN' or value_type = 'MAX') group by line_id order by time desc limit 6"; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List data; + PublicDTO publicDTO; + List lineData = new ArrayList<>(); + List list = resultMapper.toPOJO(sqlResult, DayV.class); + List overLimitList = getAllLinesLimitData(); + for (DayV dayV : list) { + for (Overlimit overlimit : overLimitList) { + if (Objects.equals(dayV.getLineId(),overlimit.getId())){ + double vlDev = Math.abs(dayV.getVlDev()/overlimit.getUvoltageDev()); + double vuDev = Math.abs(dayV.getVuDev()/overlimit.getVoltageDev()); + data = Stream.of(vuDev,vlDev).collect(Collectors.toList()); + double result = data.stream().max(Comparator.comparing(Double::doubleValue)).get(); + publicDTO = new PublicDTO(); + publicDTO.setId(dayV.getLineId()); + publicDTO.setData(result); + lineData.add(publicDTO); + } + } + } + Comparator comparator = Comparator.comparing(PublicDTO::getData); + return lineData.stream().collect(Collectors.groupingBy(PublicDTO::getId,Collectors.reducing(BinaryOperator.maxBy(comparator)))); + } + + /** + * 三相电压不平衡度 + * 各监测点最新的T相数据 + */ + private Map> getUbalance(){ + String sql = "SELECT line_id,v_unbalance,value_type FROM day_v where phasic_type = 'T' and (value_type = 'CP95' or value_type = 'MAX') group by line_id order by time desc limit 2"; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List data; + PublicDTO publicDTO; + List lineData = new ArrayList<>(); + List list = resultMapper.toPOJO(sqlResult, DayV.class); + List overLimitList = getAllLinesLimitData(); + for (DayV dayV : list) { + for (Overlimit overlimit : overLimitList) { + if (Objects.equals(dayV.getLineId(),overlimit.getId())){ + double vUnbalance = Math.abs(dayV.getVUnbalance()/overlimit.getUbalance()); + data = Stream.of(vUnbalance).collect(Collectors.toList()); + double result = data.stream().max(Comparator.comparing(Double::doubleValue)).get(); + publicDTO = new PublicDTO(); + publicDTO.setId(dayV.getLineId()); + publicDTO.setData(result); + lineData.add(publicDTO); + } + } + } + Comparator comparator = Comparator.comparing(PublicDTO::getData); + return lineData.stream().collect(Collectors.groupingBy(PublicDTO::getId,Collectors.reducing(BinaryOperator.maxBy(comparator)))); + } + + /** + * 负序电流 + * 各监测点最新的T相数据 + */ + private Map> getIneg(){ + String sql = "SELECT line_id,i_neg,value_type FROM day_i where phasic_type = 'T' and (value_type = 'CP95' or value_type = 'MAX') group by line_id order by time desc limit 2"; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List data; + PublicDTO publicDTO; + List lineData = new ArrayList<>(); + List list = resultMapper.toPOJO(sqlResult, DayI.class); + List overLimitList = getAllLinesLimitData(); + for (DayI dayI : list) { + for (Overlimit overlimit : overLimitList) { + if (Objects.equals(dayI.getLineId(),overlimit.getId())){ + double iNeg = Math.abs(dayI.getINeg()/overlimit.getINeg()); + data = Stream.of(iNeg).collect(Collectors.toList()); + double result = data.stream().max(Comparator.comparing(Double::doubleValue)).get(); + publicDTO = new PublicDTO(); + publicDTO.setId(dayI.getLineId()); + publicDTO.setData(result); + lineData.add(publicDTO); + } + } + } + Comparator comparator = Comparator.comparing(PublicDTO::getData); + return lineData.stream().collect(Collectors.groupingBy(PublicDTO::getId,Collectors.reducing(BinaryOperator.maxBy(comparator)))); + } + + /** + * 间谐波电压含有率 + * 各监测点最新的A、B、C三相数据 + */ + private Map> getInuharm(){ + String sql = "SELECT * FROM day_inharm_v where (phasic_type = 'A' or phasic_type = 'B' or phasic_type = 'C') and value_type = 'CP95' group by line_id order by time desc limit 3"; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List data; + PublicDTO publicDTO; + List lineData = new ArrayList<>(); + List list = resultMapper.toPOJO(sqlResult, DayInharmV.class); + List overLimitList = getAllLinesLimitData(); + for (DayInharmV dayInharmV : list) { + for (Overlimit overlimit : overLimitList) { + if (Objects.equals(dayInharmV.getLineId(),overlimit.getId())){ + double v1 = Math.abs(dayInharmV.getV1()/overlimit.getInuharm1()); + double v2 = Math.abs(dayInharmV.getV2()/overlimit.getInuharm2()); + double v3 = Math.abs(dayInharmV.getV3()/overlimit.getInuharm3()); + double v4 = Math.abs(dayInharmV.getV4()/overlimit.getInuharm4()); + double v5 = Math.abs(dayInharmV.getV5()/overlimit.getInuharm5()); + double v6 = Math.abs(dayInharmV.getV6()/overlimit.getInuharm6()); + double v7 = Math.abs(dayInharmV.getV7()/overlimit.getInuharm7()); + double v8 = Math.abs(dayInharmV.getV8()/overlimit.getInuharm8()); + double v9 = Math.abs(dayInharmV.getV9()/overlimit.getInuharm9()); + double v10 = Math.abs(dayInharmV.getV10()/overlimit.getInuharm10()); + double v11 = Math.abs(dayInharmV.getV11()/overlimit.getInuharm11()); + double v12 = Math.abs(dayInharmV.getV12()/overlimit.getInuharm12()); + double v13 = Math.abs(dayInharmV.getV13()/overlimit.getInuharm13()); + double v14 = Math.abs(dayInharmV.getV14()/overlimit.getInuharm14()); + double v15 = Math.abs(dayInharmV.getV15()/overlimit.getInuharm15()); + double v16 = Math.abs(dayInharmV.getV16()/overlimit.getInuharm16()); + data = Stream.of(v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,v15,v16).collect(Collectors.toList()); + double result = data.stream().max(Comparator.comparing(Double::doubleValue)).get(); + publicDTO = new PublicDTO(); + publicDTO.setId(dayInharmV.getLineId()); + publicDTO.setData(result); + lineData.add(publicDTO); + } + } + } + Comparator comparator = Comparator.comparing(PublicDTO::getData); + return lineData.stream().collect(Collectors.groupingBy(PublicDTO::getId,Collectors.reducing(BinaryOperator.maxBy(comparator)))); + } + + /** + * 长时电压闪变 + * 各监测点最新的A、B、C三相数据 + */ + private Map> getFlicker(){ + String sql = "SELECT * FROM day_plt where (phasic_type = 'A' or phasic_type = 'B' or phasic_type = 'C') and value_type = 'CP95' group by line_id order by time desc limit 3"; + QueryResult sqlResult = influxDbUtils.query(sql); + InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); + List data; + PublicDTO publicDTO; + List lineData = new ArrayList<>(); + List list = resultMapper.toPOJO(sqlResult, DayPlt.class); + List overLimitList = getAllLinesLimitData(); + for (DayPlt dayPlt : list) { + for (Overlimit overlimit : overLimitList) { + if (Objects.equals(dayPlt.getLineId(),overlimit.getId())){ + double plt = Math.abs(dayPlt.getPlt()/overlimit.getFlicker()); + data = Stream.of(plt).collect(Collectors.toList()); + double result = data.stream().max(Comparator.comparing(Double::doubleValue)).get(); + publicDTO = new PublicDTO(); + publicDTO.setId(dayPlt.getLineId()); + publicDTO.setData(result); + lineData.add(publicDTO); + } + } + } + Comparator comparator = Comparator.comparing(PublicDTO::getData); + return lineData.stream().collect(Collectors.groupingBy(PublicDTO::getId,Collectors.reducing(BinaryOperator.maxBy(comparator)))); + } + + + /** + * 生成谐波污区图污染指标表 + */ + private void createMeasurement(List list, long time){ + List records = new ArrayList(); + list.forEach(item->{ + Map tags = new HashMap<>(); + Map fields = new HashMap<>(); + tags.put("line_id",item.getId()); + fields.put("freq",item.getData1()); + fields.put("freq_dev",item.getData2()); + fields.put("unbalance",item.getData3()); + fields.put("ineg",item.getData4()); + fields.put("harmonic_v",item.getData5()); + fields.put("harmonic_i",item.getData6()); + fields.put("inuharm",item.getData7()); + fields.put("flicker",item.getData8()); + Point point = influxDbUtils.pointBuilder("harmonic_pollution", time, TimeUnit.MILLISECONDS,tags, fields); + BatchPoints batchPoints = BatchPoints.database(DATABASE).tag("line_id", item.getId()).retentionPolicy("").consistency(InfluxDB.ConsistencyLevel.ALL).build(); + batchPoints.point(point); + records.add(batchPoints.lineProtocol()); + }); + influxDbUtils.batchInsert(DATABASE,"", InfluxDB.ConsistencyLevel.ALL, records); + } +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/handler/TestJob.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/handler/TestJob.java new file mode 100644 index 000000000..7365be328 --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/handler/TestJob.java @@ -0,0 +1,35 @@ +package com.njcn.executor.handler; + +import com.njcn.user.api.UserFeignClient; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + + +/** + * @author hongawen + * @version 1.0.0 + * @date 2022年03月22日 16:44 + */ +@Slf4j +@Component +@AllArgsConstructor +public class TestJob { + + private final UserFeignClient userFeignClient; + + + /** + * 1、简单任务示例(Bean模式) + */ + @XxlJob("demoJobHandler") + public void demoJobHandler() { + String command = XxlJobHelper.getJobParam(); + System.out.println("前台传递的参数:" + command); +// HttpResult root = userFeignClient.getUserByName("root"); +// log.error(root.getData().toString()); +// System.out.println(root); + } +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/dto/HarmonicDTO.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/dto/HarmonicDTO.java new file mode 100644 index 000000000..be5bd40ef --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/dto/HarmonicDTO.java @@ -0,0 +1,20 @@ +package com.njcn.executor.pojo.dto; + +import lombok.Data; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/4/13 16:57 + */ +@Data +public class HarmonicDTO { + + private String id; + + private Integer real; + + private Integer due; +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/dto/PollutionDTO.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/dto/PollutionDTO.java new file mode 100644 index 000000000..a651d5ed0 --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/dto/PollutionDTO.java @@ -0,0 +1,59 @@ +package com.njcn.executor.pojo.dto; + +import lombok.Data; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/4/11 16:29 + */ +@Data +public class PollutionDTO { + + /** + * 监测点id + */ + private String id; + + /** + * 频率偏差污染值 + */ + private Double data1 = 0.0; + + /** + * 电压偏差污染值 + */ + private Double data2 = 0.0; + + /** + * 三相电压不平衡度污染值 + */ + private Double data3 = 0.0; + + /** + * 负序电流污染值 + */ + private Double data4 = 0.0; + + /** + * 谐波电压污染值 + */ + private Double data5 = 0.0; + + /** + * 谐波电流污染值 + */ + private Double data6 = 0.0; + + /** + * 间谐波电压含有率污染值 + */ + private Double data7 = 0.0; + + /** + * 长时电压闪变污染值 + */ + private Double data8 = 0.0; +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataFlicker.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataFlicker.java new file mode 100644 index 000000000..bc52cce88 --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataFlicker.java @@ -0,0 +1,43 @@ +package com.njcn.executor.pojo.vo; + +import lombok.Data; +import org.influxdb.annotation.Column; +import org.influxdb.annotation.Measurement; + +import java.time.Instant; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/5/11 16:08 + */ +@Data +@Measurement(name = "data_flicker") +public class DataFlicker { + + @Column(name = "time") + private Instant time; + + @Column(name = "line_id") + private String lineId; + + @Column(name = "phasic_type") + private String phaseType; + + @Column(name = "quality_flag") + private String qualityFlag; + + @Column(name = "value_type") + private String valueType; + + @Column(name = "fluc") + private Double fluc; + + @Column(name = "plt") + private Double plt; + + @Column(name = "pst") + private Double pst; +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataFluc.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataFluc.java new file mode 100644 index 000000000..2f7bde38f --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataFluc.java @@ -0,0 +1,41 @@ +package com.njcn.executor.pojo.vo; + +import lombok.Data; +import org.influxdb.annotation.Column; +import org.influxdb.annotation.Measurement; + +import java.time.Instant; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/5/11 16:33 + */ +@Data +@Measurement(name = "data_fluc") +public class DataFluc { + + @Column(name = "time") + private Instant time; + + @Column(name = "line_id") + private String lineId; + + @Column(name = "phasic_type") + private String phaseType; + + @Column(name = "quality_flag") + private String qualityFlag; + + @Column(name = "value_type") + private String valueType; + + @Column(name = "fluc") + private Double fluc; + + @Column(name = "fluccf") + private Double fluccf; + +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataHarmPhasicI.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataHarmPhasicI.java new file mode 100644 index 000000000..3147173ff --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataHarmPhasicI.java @@ -0,0 +1,185 @@ +package com.njcn.executor.pojo.vo; + +import lombok.Data; +import org.influxdb.annotation.Column; +import org.influxdb.annotation.Measurement; + +import java.time.Instant; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/5/12 9:13 + */ +@Data +@Measurement(name = "data_harmphasic_i") +public class DataHarmPhasicI { + + @Column(name = "time") + private Instant time; + + @Column(name = "line_id") + private String lineId; + + @Column(name = "phasic_type") + private String phaseType; + + @Column(name = "quality_flag") + private String qualityFlag; + + @Column(name = "value_type") + private String valueType; + + @Column(name = "i_1") + private Double i1; + + @Column(name = "i_2") + private Double i2; + + @Column(name = "i_3") + private Double i3; + + @Column(name = "i_4") + private Double i4; + + @Column(name = "i_5") + private Double i5; + + @Column(name = "i_6") + private Double i6; + + @Column(name = "i_7") + private Double i7; + + @Column(name = "i_8") + private Double i8; + + @Column(name = "i_9") + private Double i9; + + @Column(name = "i_10") + private Double i10; + + @Column(name = "i_11") + private Double i11; + + @Column(name = "i_12") + private Double i12; + + @Column(name = "i_13") + private Double i13; + + @Column(name = "i_14") + private Double i14; + + @Column(name = "i_15") + private Double i15; + + @Column(name = "i_16") + private Double i16; + + @Column(name = "i_17") + private Double i17; + + @Column(name = "i_18") + private Double i18; + + @Column(name = "i_19") + private Double i19; + + @Column(name = "i_20") + private Double i20; + + @Column(name = "i_21") + private Double i21; + + @Column(name = "i_22") + private Double i22; + + @Column(name = "i_23") + private Double i23; + + @Column(name = "i_24") + private Double i24; + + @Column(name = "i_25") + private Double i25; + + @Column(name = "i_26") + private Double i26; + + @Column(name = "i_27") + private Double i27; + + @Column(name = "i_28") + private Double i28; + + @Column(name = "i_29") + private Double i29; + + @Column(name = "i_30") + private Double i30; + + @Column(name = "i_31") + private Double i31; + + @Column(name = "i_32") + private Double i32; + + @Column(name = "i_33") + private Double i33; + + @Column(name = "i_34") + private Double i34; + + @Column(name = "i_35") + private Double i35; + + @Column(name = "i_36") + private Double i36; + + @Column(name = "i_37") + private Double i37; + + @Column(name = "i_38") + private Double i38; + + @Column(name = "i_39") + private Double i39; + + @Column(name = "i_40") + private Double i40; + + @Column(name = "i_41") + private Double i41; + + @Column(name = "i_42") + private Double i42; + + @Column(name = "i_43") + private Double i43; + + @Column(name = "i_44") + private Double i44; + + @Column(name = "i_45") + private Double i45; + + @Column(name = "i_46") + private Double i46; + + @Column(name = "i_47") + private Double i47; + + @Column(name = "i_48") + private Double i48; + + @Column(name = "i_49") + private Double i49; + + @Column(name = "i_50") + private Double i50; + +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataHarmPhasicV.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataHarmPhasicV.java new file mode 100644 index 000000000..e30e8e2d3 --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataHarmPhasicV.java @@ -0,0 +1,185 @@ +package com.njcn.executor.pojo.vo; + +import lombok.Data; +import org.influxdb.annotation.Column; +import org.influxdb.annotation.Measurement; + +import java.time.Instant; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/5/12 9:13 + */ +@Data +@Measurement(name = "data_harmphasic_v") +public class DataHarmPhasicV { + + @Column(name = "time") + private Instant time; + + @Column(name = "line_id") + private String lineId; + + @Column(name = "phasic_type") + private String phaseType; + + @Column(name = "quality_flag") + private String qualityFlag; + + @Column(name = "value_type") + private String valueType; + + @Column(name = "v_1") + private Double v1; + + @Column(name = "v_2") + private Double v2; + + @Column(name = "v_3") + private Double v3; + + @Column(name = "v_4") + private Double v4; + + @Column(name = "v_5") + private Double v5; + + @Column(name = "v_6") + private Double v6; + + @Column(name = "v_7") + private Double v7; + + @Column(name = "v_8") + private Double v8; + + @Column(name = "v_9") + private Double v9; + + @Column(name = "v_10") + private Double v10; + + @Column(name = "v_11") + private Double v11; + + @Column(name = "v_12") + private Double v12; + + @Column(name = "v_13") + private Double v13; + + @Column(name = "v_14") + private Double v14; + + @Column(name = "v_15") + private Double v15; + + @Column(name = "v_16") + private Double v16; + + @Column(name = "v_17") + private Double v17; + + @Column(name = "v_18") + private Double v18; + + @Column(name = "v_19") + private Double v19; + + @Column(name = "v_20") + private Double v20; + + @Column(name = "v_21") + private Double v21; + + @Column(name = "v_22") + private Double v22; + + @Column(name = "v_23") + private Double v23; + + @Column(name = "v_24") + private Double v24; + + @Column(name = "v_25") + private Double v25; + + @Column(name = "v_26") + private Double v26; + + @Column(name = "v_27") + private Double v27; + + @Column(name = "v_28") + private Double v28; + + @Column(name = "v_29") + private Double v29; + + @Column(name = "v_30") + private Double v30; + + @Column(name = "v_31") + private Double v31; + + @Column(name = "v_32") + private Double v32; + + @Column(name = "v_33") + private Double v33; + + @Column(name = "v_34") + private Double v34; + + @Column(name = "v_35") + private Double v35; + + @Column(name = "v_36") + private Double v36; + + @Column(name = "v_37") + private Double v37; + + @Column(name = "v_38") + private Double v38; + + @Column(name = "v_39") + private Double v39; + + @Column(name = "v_40") + private Double v40; + + @Column(name = "v_41") + private Double v41; + + @Column(name = "v_42") + private Double v42; + + @Column(name = "v_43") + private Double v43; + + @Column(name = "v_44") + private Double v44; + + @Column(name = "v_45") + private Double v45; + + @Column(name = "v_46") + private Double v46; + + @Column(name = "v_47") + private Double v47; + + @Column(name = "v_48") + private Double v48; + + @Column(name = "v_49") + private Double v49; + + @Column(name = "v_50") + private Double v50; + +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataHarmPowerP.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataHarmPowerP.java new file mode 100644 index 000000000..bb9f19d7f --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataHarmPowerP.java @@ -0,0 +1,193 @@ +package com.njcn.executor.pojo.vo; + +import lombok.Data; +import org.influxdb.annotation.Column; +import org.influxdb.annotation.Measurement; + +import java.time.Instant; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/5/12 9:13 + */ +@Data +@Measurement(name = "data_harmpower_p") +public class DataHarmPowerP { + + @Column(name = "time") + private Instant time; + + @Column(name = "line_id") + private String lineId; + + @Column(name = "phasic_type") + private String phaseType; + + @Column(name = "quality_flag") + private String qualityFlag; + + @Column(name = "value_type") + private String valueType; + + @Column(name = "df") + private Double df; + + @Column(name = "pf") + private Double pf; + + @Column(name = "p") + private Double p; + + @Column(name = "p_1") + private Double p1; + + @Column(name = "p_2") + private Double p2; + + @Column(name = "p_3") + private Double p3; + + @Column(name = "p_4") + private Double p4; + + @Column(name = "p_5") + private Double p5; + + @Column(name = "p_6") + private Double p6; + + @Column(name = "p_7") + private Double p7; + + @Column(name = "p_8") + private Double p8; + + @Column(name = "p_9") + private Double p9; + + @Column(name = "p_10") + private Double p10; + + @Column(name = "p_11") + private Double p11; + + @Column(name = "p_12") + private Double p12; + + @Column(name = "p_13") + private Double p13; + + @Column(name = "p_14") + private Double p14; + + @Column(name = "p_15") + private Double p15; + + @Column(name = "p_16") + private Double p16; + + @Column(name = "p_17") + private Double p17; + + @Column(name = "p_18") + private Double p18; + + @Column(name = "p_19") + private Double p19; + + @Column(name = "p_20") + private Double p20; + + @Column(name = "p_21") + private Double p21; + + @Column(name = "p_22") + private Double p22; + + @Column(name = "p_23") + private Double p23; + + @Column(name = "p_24") + private Double p24; + + @Column(name = "p_25") + private Double p25; + + @Column(name = "p_26") + private Double p26; + + @Column(name = "p_27") + private Double p27; + + @Column(name = "p_28") + private Double p28; + + @Column(name = "p_29") + private Double p29; + + @Column(name = "p_30") + private Double p30; + + @Column(name = "p_31") + private Double p31; + + @Column(name = "p_32") + private Double p32; + + @Column(name = "p_33") + private Double p33; + + @Column(name = "p_34") + private Double p34; + + @Column(name = "p_35") + private Double p35; + + @Column(name = "p_36") + private Double p36; + + @Column(name = "p_37") + private Double p37; + + @Column(name = "p_38") + private Double p38; + + @Column(name = "p_39") + private Double p39; + + @Column(name = "p_40") + private Double p40; + + @Column(name = "p_41") + private Double p41; + + @Column(name = "p_42") + private Double p42; + + @Column(name = "p_43") + private Double p43; + + @Column(name = "p_44") + private Double p44; + + @Column(name = "p_45") + private Double p45; + + @Column(name = "p_46") + private Double p46; + + @Column(name = "p_47") + private Double p47; + + @Column(name = "p_48") + private Double p48; + + @Column(name = "p_49") + private Double p49; + + @Column(name = "p_50") + private Double p50; +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataHarmPowerQ.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataHarmPowerQ.java new file mode 100644 index 000000000..387c25a8f --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataHarmPowerQ.java @@ -0,0 +1,188 @@ +package com.njcn.executor.pojo.vo; + +import lombok.Data; +import org.influxdb.annotation.Column; +import org.influxdb.annotation.Measurement; + +import java.time.Instant; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/5/12 9:13 + */ +@Data +@Measurement(name = "data_harmpower_q") +public class DataHarmPowerQ { + + @Column(name = "time") + private Instant time; + + @Column(name = "line_id") + private String lineId; + + @Column(name = "phasic_type") + private String phaseType; + + @Column(name = "quality_flag") + private String qualityFlag; + + @Column(name = "value_type") + private String valueType; + + @Column(name = "q") + private Double q; + + @Column(name = "q_1") + private Double q1; + + @Column(name = "q_2") + private Double q2; + + @Column(name = "q_3") + private Double q3; + + @Column(name = "q_4") + private Double q4; + + @Column(name = "q_5") + private Double q5; + + @Column(name = "q_6") + private Double q6; + + @Column(name = "q_7") + private Double q7; + + @Column(name = "q_8") + private Double q8; + + @Column(name = "q_9") + private Double q9; + + @Column(name = "q_10") + private Double q10; + + @Column(name = "q_11") + private Double q11; + + @Column(name = "q_12") + private Double q12; + + @Column(name = "q_13") + private Double q13; + + @Column(name = "q_14") + private Double q14; + + @Column(name = "q_15") + private Double q15; + + @Column(name = "q_16") + private Double q16; + + @Column(name = "q_17") + private Double q17; + + @Column(name = "q_18") + private Double q18; + + @Column(name = "q_19") + private Double q19; + + @Column(name = "q_20") + private Double q20; + + @Column(name = "q_21") + private Double q21; + + @Column(name = "q_22") + private Double q22; + + @Column(name = "q_23") + private Double q23; + + @Column(name = "q_24") + private Double q24; + + @Column(name = "q_25") + private Double q25; + + @Column(name = "q_26") + private Double q26; + + @Column(name = "q_27") + private Double q27; + + @Column(name = "q_28") + private Double q28; + + @Column(name = "q_29") + private Double q29; + + @Column(name = "q_30") + private Double q30; + + @Column(name = "q_31") + private Double q31; + + @Column(name = "q_32") + private Double q32; + + @Column(name = "q_33") + private Double q33; + + @Column(name = "q_34") + private Double q34; + + @Column(name = "q_35") + private Double q35; + + @Column(name = "q_36") + private Double q36; + + @Column(name = "q_37") + private Double q37; + + @Column(name = "q_38") + private Double q38; + + @Column(name = "q_39") + private Double q39; + + @Column(name = "q_40") + private Double q40; + + @Column(name = "q_41") + private Double q41; + + @Column(name = "q_42") + private Double q42; + + @Column(name = "q_43") + private Double q43; + + @Column(name = "q_44") + private Double q44; + + @Column(name = "q_45") + private Double q45; + + @Column(name = "q_46") + private Double q46; + + @Column(name = "q_47") + private Double q47; + + @Column(name = "q_48") + private Double q48; + + @Column(name = "q_49") + private Double q49; + + @Column(name = "q_50") + private Double q50; + +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataHarmPowerS.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataHarmPowerS.java new file mode 100644 index 000000000..2d606b710 --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataHarmPowerS.java @@ -0,0 +1,188 @@ +package com.njcn.executor.pojo.vo; + +import lombok.Data; +import org.influxdb.annotation.Column; +import org.influxdb.annotation.Measurement; + +import java.time.Instant; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/5/12 9:13 + */ +@Data +@Measurement(name = "data_harmpower_s") +public class DataHarmPowerS { + + @Column(name = "time") + private Instant time; + + @Column(name = "line_id") + private String lineId; + + @Column(name = "phasic_type") + private String phaseType; + + @Column(name = "quality_flag") + private String qualityFlag; + + @Column(name = "value_type") + private String valueType; + + @Column(name = "s") + private Double s; + + @Column(name = "s_1") + private Double s1; + + @Column(name = "s_2") + private Double s2; + + @Column(name = "s_3") + private Double s3; + + @Column(name = "s_4") + private Double s4; + + @Column(name = "s_5") + private Double s5; + + @Column(name = "s_6") + private Double s6; + + @Column(name = "s_7") + private Double s7; + + @Column(name = "s_8") + private Double s8; + + @Column(name = "s_9") + private Double s9; + + @Column(name = "s_10") + private Double s10; + + @Column(name = "s_11") + private Double s11; + + @Column(name = "s_12") + private Double s12; + + @Column(name = "s_13") + private Double s13; + + @Column(name = "s_14") + private Double s14; + + @Column(name = "s_15") + private Double s15; + + @Column(name = "s_16") + private Double s16; + + @Column(name = "s_17") + private Double s17; + + @Column(name = "s_18") + private Double s18; + + @Column(name = "s_19") + private Double s19; + + @Column(name = "s_20") + private Double s20; + + @Column(name = "s_21") + private Double s21; + + @Column(name = "s_22") + private Double s22; + + @Column(name = "s_23") + private Double s23; + + @Column(name = "s_24") + private Double s24; + + @Column(name = "s_25") + private Double s25; + + @Column(name = "s_26") + private Double s26; + + @Column(name = "s_27") + private Double s27; + + @Column(name = "s_28") + private Double s28; + + @Column(name = "s_29") + private Double s29; + + @Column(name = "s_30") + private Double s30; + + @Column(name = "s_31") + private Double s31; + + @Column(name = "s_32") + private Double s32; + + @Column(name = "s_33") + private Double s33; + + @Column(name = "s_34") + private Double s34; + + @Column(name = "s_35") + private Double s35; + + @Column(name = "s_36") + private Double s36; + + @Column(name = "s_37") + private Double s37; + + @Column(name = "s_38") + private Double s38; + + @Column(name = "s_39") + private Double s39; + + @Column(name = "s_40") + private Double s40; + + @Column(name = "s_41") + private Double s41; + + @Column(name = "s_42") + private Double s42; + + @Column(name = "s_43") + private Double s43; + + @Column(name = "s_44") + private Double s44; + + @Column(name = "s_45") + private Double s45; + + @Column(name = "s_46") + private Double s46; + + @Column(name = "s_47") + private Double s47; + + @Column(name = "s_48") + private Double s48; + + @Column(name = "s_49") + private Double s49; + + @Column(name = "s_50") + private Double s50; + +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataHarmRateI.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataHarmRateI.java new file mode 100644 index 000000000..0ad696fbb --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataHarmRateI.java @@ -0,0 +1,18 @@ +package com.njcn.executor.pojo.vo; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.influxdb.annotation.Measurement; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/5/12 11:27 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Measurement(name = "data_harmrate_i") +public class DataHarmRateI extends DataHarmPhasicI{ +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataHarmRateV.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataHarmRateV.java new file mode 100644 index 000000000..4dea175f5 --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataHarmRateV.java @@ -0,0 +1,18 @@ +package com.njcn.executor.pojo.vo; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.influxdb.annotation.Measurement; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/5/12 11:27 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Measurement(name = "data_harmrate_v") +public class DataHarmRateV extends DataHarmPhasicV{ +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataI.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataI.java new file mode 100644 index 000000000..63e6befec --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataI.java @@ -0,0 +1,203 @@ +package com.njcn.executor.pojo.vo; + +import lombok.Data; +import org.influxdb.annotation.Column; +import org.influxdb.annotation.Measurement; + +import java.time.Instant; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/5/11 15:13 + */ +@Data +@Measurement(name = "data_i") +public class DataI { + + @Column(name = "time") + private Instant time; + + @Column(name = "line_id") + private String lineId; + + @Column(name = "phasic_type") + private String phaseType; + + @Column(name = "quality_flag") + private String qualityFlag; + + @Column(name = "value_type") + private String valueType; + + @Column(name = "i_neg") + private Double iNeg; + + @Column(name = "i_pos") + private Double iPos; + + @Column(name = "i_thd") + private Double iThd; + + @Column(name = "i_unbalance") + private Double iUnbalance; + + @Column(name = "i_zero") + private Double iZero; + + @Column(name = "rms") + private Double rms; + + @Column(name = "i_1") + private Double i1; + + @Column(name = "i_2") + private Double i2; + + @Column(name = "i_3") + private Double i3; + + @Column(name = "i_4") + private Double i4; + + @Column(name = "i_5") + private Double i5; + + @Column(name = "i_6") + private Double i6; + + @Column(name = "i_7") + private Double i7; + + @Column(name = "i_8") + private Double i8; + + @Column(name = "i_9") + private Double i9; + + @Column(name = "i_10") + private Double i10; + + @Column(name = "i_11") + private Double i11; + + @Column(name = "i_12") + private Double i12; + + @Column(name = "i_13") + private Double i13; + + @Column(name = "i_14") + private Double i14; + + @Column(name = "i_15") + private Double i15; + + @Column(name = "i_16") + private Double i16; + + @Column(name = "i_17") + private Double i17; + + @Column(name = "i_18") + private Double i18; + + @Column(name = "i_19") + private Double i19; + + @Column(name = "i_20") + private Double i20; + + @Column(name = "i_21") + private Double i21; + + @Column(name = "i_22") + private Double i22; + + @Column(name = "i_23") + private Double i23; + + @Column(name = "i_24") + private Double i24; + + @Column(name = "i_25") + private Double i25; + + @Column(name = "i_26") + private Double i26; + + @Column(name = "i_27") + private Double i27; + + @Column(name = "i_28") + private Double i28; + + @Column(name = "i_29") + private Double i29; + + @Column(name = "i_30") + private Double i30; + + @Column(name = "i_31") + private Double i31; + + @Column(name = "i_32") + private Double i32; + + @Column(name = "i_33") + private Double i33; + + @Column(name = "i_34") + private Double i34; + + @Column(name = "i_35") + private Double i35; + + @Column(name = "i_36") + private Double i36; + + @Column(name = "i_37") + private Double i37; + + @Column(name = "i_38") + private Double i38; + + @Column(name = "i_39") + private Double i39; + + @Column(name = "i_40") + private Double i40; + + @Column(name = "i_41") + private Double i41; + + @Column(name = "i_42") + private Double i42; + + @Column(name = "i_43") + private Double i43; + + @Column(name = "i_44") + private Double i44; + + @Column(name = "i_45") + private Double i45; + + @Column(name = "i_46") + private Double i46; + + @Column(name = "i_47") + private Double i47; + + @Column(name = "i_48") + private Double i48; + + @Column(name = "i_49") + private Double i49; + + @Column(name = "i_50") + private Double i50; + +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataInHarmI.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataInHarmI.java new file mode 100644 index 000000000..b282cc511 --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataInHarmI.java @@ -0,0 +1,20 @@ +package com.njcn.executor.pojo.vo; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.influxdb.annotation.Measurement; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/5/12 11:27 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Measurement(name = "data_inharm_i") +public class DataInHarmI extends DataHarmPhasicI{ + + +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataInHarmRateI.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataInHarmRateI.java new file mode 100644 index 000000000..9f836633e --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataInHarmRateI.java @@ -0,0 +1,20 @@ +package com.njcn.executor.pojo.vo; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.influxdb.annotation.Measurement; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/5/12 11:27 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Measurement(name = "data_inharmrate_i") +public class DataInHarmRateI extends DataHarmPhasicI{ + + +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataInHarmRateV.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataInHarmRateV.java new file mode 100644 index 000000000..920fc6aed --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataInHarmRateV.java @@ -0,0 +1,20 @@ +package com.njcn.executor.pojo.vo; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.influxdb.annotation.Measurement; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/5/12 11:27 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Measurement(name = "data_inharmrate_v") +public class DataInHarmRateV extends DataHarmPhasicV{ + + +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataInHarmV.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataInHarmV.java new file mode 100644 index 000000000..f5245ae3d --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataInHarmV.java @@ -0,0 +1,186 @@ +package com.njcn.executor.pojo.vo; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.influxdb.annotation.Column; +import org.influxdb.annotation.Measurement; + +import java.time.Instant; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/5/12 11:27 + */ +@Data +@Measurement(name = "data_inharm_v") +public class DataInHarmV { + + @Column(name = "time") + private Instant time; + + @Column(name = "line_id") + private String lineId; + + @Column(name = "phasic_type") + private String phaseType; + + @Column(name = "quality_flag") + private String qualityFlag; + + @Column(name = "value_type") + private String valueType; + + @Column(name = "v_1") + private Double v1; + + @Column(name = "v_2") + private Double v2; + + @Column(name = "v_3") + private Double v3; + + @Column(name = "v_4") + private Double v4; + + @Column(name = "v_5") + private Double v5; + + @Column(name = "v_6") + private Double v6; + + @Column(name = "v_7") + private Double v7; + + @Column(name = "v_8") + private Double v8; + + @Column(name = "v_9") + private Double v9; + + @Column(name = "v_10") + private Double v10; + + @Column(name = "v_11") + private Double v11; + + @Column(name = "v_12") + private Double v12; + + @Column(name = "v_13") + private Double v13; + + @Column(name = "v_14") + private Double v14; + + @Column(name = "v_15") + private Double v15; + + @Column(name = "v_16") + private Double v16; + + @Column(name = "v_17") + private Double v17; + + @Column(name = "v_18") + private Double v18; + + @Column(name = "v_19") + private Double v19; + + @Column(name = "v_20") + private Double v20; + + @Column(name = "v_21") + private Double v21; + + @Column(name = "v_22") + private Double v22; + + @Column(name = "v_23") + private Double v23; + + @Column(name = "v_24") + private Double v24; + + @Column(name = "v_25") + private Double v25; + + @Column(name = "v_26") + private Double v26; + + @Column(name = "v_27") + private Double v27; + + @Column(name = "v_28") + private Double v28; + + @Column(name = "v_29") + private Double v29; + + @Column(name = "v_30") + private Double v30; + + @Column(name = "v_31") + private Double v31; + + @Column(name = "v_32") + private Double v32; + + @Column(name = "v_33") + private Double v33; + + @Column(name = "v_34") + private Double v34; + + @Column(name = "v_35") + private Double v35; + + @Column(name = "v_36") + private Double v36; + + @Column(name = "v_37") + private Double v37; + + @Column(name = "v_38") + private Double v38; + + @Column(name = "v_39") + private Double v39; + + @Column(name = "v_40") + private Double v40; + + @Column(name = "v_41") + private Double v41; + + @Column(name = "v_42") + private Double v42; + + @Column(name = "v_43") + private Double v43; + + @Column(name = "v_44") + private Double v44; + + @Column(name = "v_45") + private Double v45; + + @Column(name = "v_46") + private Double v46; + + @Column(name = "v_47") + private Double v47; + + @Column(name = "v_48") + private Double v48; + + @Column(name = "v_49") + private Double v49; + + @Column(name = "v_50") + private Double v50; + +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataPlt.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataPlt.java new file mode 100644 index 000000000..c2c4c06bf --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataPlt.java @@ -0,0 +1,42 @@ +package com.njcn.executor.pojo.vo; + +import lombok.Data; +import org.influxdb.annotation.Column; +import org.influxdb.annotation.Measurement; + +import java.time.Instant; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/4/12 16:01 + */ +@Data +@Measurement(name = "data_plt") +public class DataPlt { + + @Column(name = "time") + private Instant time; + + @Column(name = "line_id") + private String lineId; + + @Column(name = "phasic_type") + private String phaseType; + + @Column(name = "value_type") + private String valueType; + + @Column(name = "quality_flag") + private String qualityFlag; + + @Column(name = "plt") + private Double plt; + + //自定义字段-闪变总计算次数 + @Column(name = "flicker_all_time") + private Integer flickerAllTime; + +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataV.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataV.java new file mode 100644 index 000000000..ae52ee172 --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DataV.java @@ -0,0 +1,221 @@ +package com.njcn.executor.pojo.vo; + +import lombok.Data; +import org.influxdb.annotation.Column; +import org.influxdb.annotation.Measurement; + +import java.time.Instant; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/4/7 10:00 + */ +@Data +@Measurement(name = "data_v") +public class DataV{ + + @Column(name = "time") + private Instant time; + + @Column(name = "freq") + private Double freq; + + @Column(name = "freq_dev") + private Double freqDev; + + @Column(name = "quality_flag") + private String qualityFlag; + + @Column(name = "rms") + private Double rms; + + @Column(name = "rms_lvr") + private Double rmsLvr; + + @Column(name = "vl_dev") + private Double vlDev; + + @Column(name = "vu_dev") + private Double vuDev; + + @Column(name = "v_1") + private Double v1; + + @Column(name = "v_2") + private Double v2; + + @Column(name = "v_3") + private Double v3; + + @Column(name = "v_4") + private Double v4; + + @Column(name = "v_5") + private Double v5; + + @Column(name = "v_6") + private Double v6; + + @Column(name = "v_7") + private Double v7; + + @Column(name = "v_8") + private Double v8; + + @Column(name = "v_9") + private Double v9; + + @Column(name = "v_10") + private Double v10; + + @Column(name = "v_11") + private Double v11; + + @Column(name = "v_12") + private Double v12; + + @Column(name = "v_13") + private Double v13; + + @Column(name = "v_14") + private Double v14; + + @Column(name = "v_15") + private Double v15; + + @Column(name = "v_16") + private Double v16; + + @Column(name = "v_17") + private Double v17; + + @Column(name = "v_18") + private Double v18; + + @Column(name = "v_19") + private Double v19; + + @Column(name = "v_20") + private Double v20; + + @Column(name = "v_21") + private Double v21; + + @Column(name = "v_22") + private Double v22; + + @Column(name = "v_23") + private Double v23; + + @Column(name = "v_24") + private Double v24; + + @Column(name = "v_25") + private Double v25; + + @Column(name = "v_26") + private Double v26; + + @Column(name = "v_27") + private Double v27; + + @Column(name = "v_28") + private Double v28; + + @Column(name = "v_29") + private Double v29; + + @Column(name = "v_30") + private Double v30; + + @Column(name = "v_31") + private Double v31; + + @Column(name = "v_32") + private Double v32; + + @Column(name = "v_33") + private Double v33; + + @Column(name = "v_34") + private Double v34; + + @Column(name = "v_35") + private Double v35; + + @Column(name = "v_36") + private Double v36; + + @Column(name = "v_37") + private Double v37; + + @Column(name = "v_38") + private Double v38; + + @Column(name = "v_39") + private Double v39; + + @Column(name = "v_40") + private Double v40; + + @Column(name = "v_41") + private Double v41; + + @Column(name = "v_42") + private Double v42; + + @Column(name = "v_43") + private Double v43; + + @Column(name = "v_44") + private Double v44; + + @Column(name = "v_45") + private Double v45; + + @Column(name = "v_46") + private Double v46; + + @Column(name = "v_47") + private Double v47; + + @Column(name = "v_48") + private Double v48; + + @Column(name = "v_49") + private Double v49; + + @Column(name = "v_50") + private Double v50; + + @Column(name = "v_neg") + private Double vNeg; + + @Column(name = "v_pos") + private Double vPos; + + @Column(name = "v_thd") + private Double vThd; + + @Column(name = "v_unbalance") + private Double vUnbalance; + + @Column(name = "v_zero") + private Double vZero; + + @Column(name = "line_id") + private String lineId; + + @Column(name = "phasic_type") + private String phaseType; + + @Column(name = "value_type") + private String valueType; + + //自定义字段-总计算次数 + @Column(name = "all_time") + private Integer allTime; +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DayHarmrateV.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DayHarmrateV.java new file mode 100644 index 000000000..ac621ed37 --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DayHarmrateV.java @@ -0,0 +1,184 @@ +package com.njcn.executor.pojo.vo; + +import lombok.Data; +import org.influxdb.annotation.Column; +import org.influxdb.annotation.Measurement; + +import java.time.Instant; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/4/8 11:56 + */ +@Data +@Measurement(name = "day_harmrate_v") +public class DayHarmrateV { + + @Column(name = "time") + private Instant time; + + @Column(name = "line_id") + private String lineId; + + @Column(name = "phasic_type") + private String phaseType; + + @Column(name = "value_type") + private String valueType; + + @Column(name = "quality_flag") + private String qualityFlag; + + @Column(name = "v_1") + private double v1; + + @Column(name = "v_2") + private double v2; + + @Column(name = "v_3") + private double v3; + + @Column(name = "v_4") + private double v4; + + @Column(name = "v_5") + private double v5; + + @Column(name = "v_6") + private double v6; + + @Column(name = "v_7") + private double v7; + + @Column(name = "v_8") + private double v8; + + @Column(name = "v_9") + private double v9; + + @Column(name = "v_10") + private double v10; + + @Column(name = "v_11") + private double v11; + + @Column(name = "v_12") + private double v12; + + @Column(name = "v_13") + private double v13; + + @Column(name = "v_14") + private double v14; + + @Column(name = "v_15") + private double v15; + + @Column(name = "v_16") + private double v16; + + @Column(name = "v_17") + private double v17; + + @Column(name = "v_18") + private double v18; + + @Column(name = "v_19") + private double v19; + + @Column(name = "v_20") + private double v20; + + @Column(name = "v_21") + private double v21; + + @Column(name = "v_22") + private double v22; + + @Column(name = "v_23") + private double v23; + + @Column(name = "v_24") + private double v24; + + @Column(name = "v_25") + private double v25; + + @Column(name = "v_26") + private double v26; + + @Column(name = "v_27") + private double v27; + + @Column(name = "v_28") + private double v28; + + @Column(name = "v_29") + private double v29; + + @Column(name = "v_30") + private double v30; + + @Column(name = "v_31") + private double v31; + + @Column(name = "v_32") + private double v32; + + @Column(name = "v_33") + private double v33; + + @Column(name = "v_34") + private double v34; + + @Column(name = "v_35") + private double v35; + + @Column(name = "v_36") + private double v36; + + @Column(name = "v_37") + private double v37; + + @Column(name = "v_38") + private double v38; + + @Column(name = "v_39") + private double v39; + + @Column(name = "v_40") + private double v40; + + @Column(name = "v_41") + private double v41; + + @Column(name = "v_42") + private double v42; + + @Column(name = "v_43") + private double v43; + + @Column(name = "v_44") + private double v44; + + @Column(name = "v_45") + private double v45; + + @Column(name = "v_46") + private double v46; + + @Column(name = "v_47") + private double v47; + + @Column(name = "v_48") + private double v48; + + @Column(name = "v_49") + private double v49; + + @Column(name = "v_50") + private double v50; +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DayI.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DayI.java new file mode 100644 index 000000000..e7f7723e9 --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DayI.java @@ -0,0 +1,20 @@ +package com.njcn.executor.pojo.vo; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.influxdb.annotation.Measurement; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/4/11 17:08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Measurement(name = "day_i") +public class DayI extends DataI{ + + +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DayInharmV.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DayInharmV.java new file mode 100644 index 000000000..c2a71044c --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DayInharmV.java @@ -0,0 +1,185 @@ +package com.njcn.executor.pojo.vo; + +import lombok.Data; +import org.influxdb.annotation.Column; +import org.influxdb.annotation.Measurement; + +import java.time.Instant; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/4/12 15:42 + */ +@Data +@Measurement(name = "day_inharm_v") +public class DayInharmV { + + @Column(name = "time") + private Instant time; + + @Column(name = "line_id") + private String lineId; + + @Column(name = "phasic_type") + private String phaseType; + + @Column(name = "value_type") + private String valueType; + + @Column(name = "quality_flag") + private String qualityFlag; + + @Column(name = "v_1") + private double v1; + + @Column(name = "v_2") + private double v2; + + @Column(name = "v_3") + private double v3; + + @Column(name = "v_4") + private double v4; + + @Column(name = "v_5") + private double v5; + + @Column(name = "v_6") + private double v6; + + @Column(name = "v_7") + private double v7; + + @Column(name = "v_8") + private double v8; + + @Column(name = "v_9") + private double v9; + + @Column(name = "v_10") + private double v10; + + @Column(name = "v_11") + private double v11; + + @Column(name = "v_12") + private double v12; + + @Column(name = "v_13") + private double v13; + + @Column(name = "v_14") + private double v14; + + @Column(name = "v_15") + private double v15; + + @Column(name = "v_16") + private double v16; + + @Column(name = "v_17") + private double v17; + + @Column(name = "v_18") + private double v18; + + @Column(name = "v_19") + private double v19; + + @Column(name = "v_20") + private double v20; + + @Column(name = "v_21") + private double v21; + + @Column(name = "v_22") + private double v22; + + @Column(name = "v_23") + private double v23; + + @Column(name = "v_24") + private double v24; + + @Column(name = "v_25") + private double v25; + + @Column(name = "v_26") + private double v26; + + @Column(name = "v_27") + private double v27; + + @Column(name = "v_28") + private double v28; + + @Column(name = "v_29") + private double v29; + + @Column(name = "v_30") + private double v30; + + @Column(name = "v_31") + private double v31; + + @Column(name = "v_32") + private double v32; + + @Column(name = "v_33") + private double v33; + + @Column(name = "v_34") + private double v34; + + @Column(name = "v_35") + private double v35; + + @Column(name = "v_36") + private double v36; + + @Column(name = "v_37") + private double v37; + + @Column(name = "v_38") + private double v38; + + @Column(name = "v_39") + private double v39; + + @Column(name = "v_40") + private double v40; + + @Column(name = "v_41") + private double v41; + + @Column(name = "v_42") + private double v42; + + @Column(name = "v_43") + private double v43; + + @Column(name = "v_44") + private double v44; + + @Column(name = "v_45") + private double v45; + + @Column(name = "v_46") + private double v46; + + @Column(name = "v_47") + private double v47; + + @Column(name = "v_48") + private double v48; + + @Column(name = "v_49") + private double v49; + + @Column(name = "v_50") + private double v50; + +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DayPlt.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DayPlt.java new file mode 100644 index 000000000..77f089154 --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DayPlt.java @@ -0,0 +1,23 @@ +package com.njcn.executor.pojo.vo; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.influxdb.annotation.Column; +import org.influxdb.annotation.Measurement; + +import java.time.Instant; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/4/12 16:01 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Measurement(name = "day_plt") +public class DayPlt extends DataPlt{ + + +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DayV.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DayV.java new file mode 100644 index 000000000..0e8db5697 --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/DayV.java @@ -0,0 +1,22 @@ +package com.njcn.executor.pojo.vo; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.influxdb.annotation.Column; +import org.influxdb.annotation.Measurement; + +import java.time.Instant; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/4/7 10:00 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Measurement(name = "day_v") +public class DayV extends DataV{ + +} diff --git a/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/LimitRate.java b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/LimitRate.java new file mode 100644 index 000000000..01578561e --- /dev/null +++ b/pqs-job/job-executor/src/main/java/com/njcn/executor/pojo/vo/LimitRate.java @@ -0,0 +1,244 @@ +package com.njcn.executor.pojo.vo; + +import lombok.Data; +import org.influxdb.annotation.Column; +import org.influxdb.annotation.Measurement; + +import java.time.Instant; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/4/21 20:20 + */ +@Data +@Measurement(name = "limit_rate") +public class LimitRate { + + @Column(name = "time") + private Instant time; + + @Column(name = "line_id") + private String lineId; + + @Column(name = "phasic_type") + private String phasicType; + + @Column(name = "all_time") + private Integer allTime; + + @Column(name = "flicker_overtime") + private Integer flickerOverTime; + + @Column(name = "flicker_all_time") + private Integer flickerAllTime; + + @Column(name = "freq_dev_overtime") + private Integer freqDevOverTime; + + @Column(name = "voltage_dev_overtime") + private Integer voltageDevOverTime; + + @Column(name = "ubalance_overtime") + private Integer uBalanceOverTime; + + @Column(name = "uaberrance_overtime") + private Integer uAberranceOverTime; + + @Column(name = "i_neg_overtime") + private Integer iNegOverTime; + + @Column(name = "uharm_2_overtime") + private Integer uHarm2OverTime; + + @Column(name = "uharm_3_overtime") + private Integer uHarm3OverTime; + + @Column(name = "uharm_4_overtime") + private Integer uHarm4OverTime; + + @Column(name = "uharm_5_overtime") + private Integer uHarm5OverTime; + + @Column(name = "uharm_6_overtime") + private Integer uHarm6OverTime; + + @Column(name = "uharm_7_overtime") + private Integer uHarm7OverTime; + + @Column(name = "uharm_8_overtime") + private Integer uHarm8OverTime; + + @Column(name = "uharm_9_overtime") + private Integer uHarm9OverTime; + + @Column(name = "uharm_10_overtime") + private Integer uHarm10OverTime; + + @Column(name = "uharm_11_overtime") + private Integer uHarm11OverTime; + + @Column(name = "uharm_12_overtime") + private Integer uHarm12OverTime; + + @Column(name = "uharm_13_overtime") + private Integer uHarm13OverTime; + + @Column(name = "uharm_14_overtime") + private Integer uHarm14OverTime; + + @Column(name = "uharm_15_overtime") + private Integer uHarm15OverTime; + + @Column(name = "uharm_16_overtime") + private Integer uHarm16OverTime; + + @Column(name = "uharm_17_overtime") + private Integer uHarm17OverTime; + + @Column(name = "uharm_18_overtime") + private Integer uHarm18OverTime; + + @Column(name = "uharm_19_overtime") + private Integer uHarm19OverTime; + + @Column(name = "uharm_20_overtime") + private Integer uHarm20OverTime; + + @Column(name = "uharm_21_overtime") + private Integer uHarm21OverTime; + + @Column(name = "uharm_22_overtime") + private Integer uHarm22OverTime; + + @Column(name = "uharm_23_overtime") + private Integer uHarm23OverTime; + + @Column(name = "uharm_24_overtime") + private Integer uHarm24OverTime; + + @Column(name = "uharm_25_overtime") + private Integer uHarm25OverTime; + + @Column(name = "iharm_2_overtime") + private Integer iHarm2OverTime; + + @Column(name = "iharm_3_overtime") + private Integer iHarm3OverTime; + + @Column(name = "iharm_4_overtime") + private Integer iHarm4OverTime; + + @Column(name = "iharm_5_overtime") + private Integer iHarm5OverTime; + + @Column(name = "iharm_6_overtime") + private Integer iHarm6OverTime; + + @Column(name = "iharm_7_overtime") + private Integer iHarm7OverTime; + + @Column(name = "iharm_8_overtime") + private Integer iHarm8OverTime; + + @Column(name = "iharm_9_overtime") + private Integer iHarm9OverTime; + + @Column(name = "iharm_10_overtime") + private Integer iHarm10OverTime; + + @Column(name = "iharm_11_overtime") + private Integer iHarm11OverTime; + + @Column(name = "iharm_12_overtime") + private Integer iHarm12OverTime; + + @Column(name = "iharm_13_overtime") + private Integer iHarm13OverTime; + + @Column(name = "iharm_14_overtime") + private Integer iHarm14OverTime; + + @Column(name = "iharm_15_overtime") + private Integer iHarm15OverTime; + + @Column(name = "iharm_16_overtime") + private Integer iHarm16OverTime; + + @Column(name = "iharm_17_overtime") + private Integer iHarm17OverTime; + + @Column(name = "iharm_18_overtime") + private Integer iHarm18OverTime; + + @Column(name = "iharm_19_overtime") + private Integer iHarm19OverTime; + + @Column(name = "iharm_20_overtime") + private Integer iHarm20OverTime; + + @Column(name = "iharm_21_overtime") + private Integer iHarm21OverTime; + + @Column(name = "iharm_22_overtime") + private Integer iHarm22OverTime; + + @Column(name = "iharm_23_overtime") + private Integer iHarm23OverTime; + + @Column(name = "iharm_24_overtime") + private Integer iHarm24OverTime; + + @Column(name = "iharm_25_overtime") + private Integer iHarm25OverTime; + + @Column(name = "inuharm_1_overtime") + private Integer inuHarm1OverTime; + + @Column(name = "inuharm_2_overtime") + private Integer inuHarm2OverTime; + + @Column(name = "inuharm_3_overtime") + private Integer inuHarm3OverTime; + + @Column(name = "inuharm_4_overtime") + private Integer inuHarm4OverTime; + + @Column(name = "inuharm_5_overtime") + private Integer inuHarm5OverTime; + + @Column(name = "inuharm_6_overtime") + private Integer inuHarm6OverTime; + + @Column(name = "inuharm_7_overtime") + private Integer inuHarm7OverTime; + + @Column(name = "inuharm_8_overtime") + private Integer inuHarm8OverTime; + + @Column(name = "inuharm_9_overtime") + private Integer inuHarm9OverTime; + + @Column(name = "inuharm_10_overtime") + private Integer inuHarm10OverTime; + + @Column(name = "inuharm_11_overtime") + private Integer inuHarm11OverTime; + + @Column(name = "inuharm_12_overtime") + private Integer inuHarm12OverTime; + + @Column(name = "inuharm_13_overtime") + private Integer inuHarm13OverTime; + + @Column(name = "inuharm_14_overtime") + private Integer inuHarm14OverTime; + + @Column(name = "inuharm_15_overtime") + private Integer inuHarm15OverTime; + + @Column(name = "inuharm_16_overtime") + private Integer inuHarm16OverTime; +} diff --git a/pqs-job/job-executor/src/main/resources/bootstrap.yml b/pqs-job/job-executor/src/main/resources/bootstrap.yml new file mode 100644 index 000000000..0dbf4bde3 --- /dev/null +++ b/pqs-job/job-executor/src/main/resources/bootstrap.yml @@ -0,0 +1,60 @@ +#当前服务的基本信息 +microservice: + ename: @artifactId@ + name: '@name@' + version: @version@ +server: + port: 10218 +#feign接口开启服务熔断降级处理 +feign: + sentinel: + enabled: true +spring: + application: + name: @artifactId@ + #nacos注册中心以及配置中心的指定 + cloud: + nacos: + discovery: + server-addr: @nacos.url@ + namespace: @nacos.namespace@ + config: + server-addr: @nacos.url@ + namespace: @nacos.namespace@ + file-extension: yaml + shared-configs: + - data-id: share-config.yaml + refresh: true + - data-Id: share-config-datasource-db.yaml + refresh: true + main: + allow-bean-definition-overriding: true + + +#项目日志的配置 +logging: + config: http://@nacos.url@/nacos/v1/cs/configs?tenant=@nacos.namespace@&group=DEFAULT_GROUP&dataId=logback.xml + level: + root: info + +#调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册; +xxl: + job: + admin: + addresses: http://@server.url@:10217/job-admin + #执行器通讯TOKEN [选填]:非空时启用; + accessToken: + executor: + #执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册 + appname: executor + #执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。 + address: + #执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务"; + ip: @server.url@ + #执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口; + port: 10219 + #执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径; + logpath: /data/applogs/xxl-job/jobhandler + #执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能; + logretentiondays: 30 + diff --git a/pqs-job/pom.xml b/pqs-job/pom.xml new file mode 100644 index 000000000..06b3115e6 --- /dev/null +++ b/pqs-job/pom.xml @@ -0,0 +1,26 @@ + + + + pqs + com.njcn + 1.0.0 + + 4.0.0 + pqs-job + 分布式任务调度 + + job-admin + job-executor + + pom + + + 8 + 8 + + + + + \ No newline at end of file diff --git a/pqs-system/pom.xml b/pqs-system/pom.xml new file mode 100644 index 000000000..f2a479a4f --- /dev/null +++ b/pqs-system/pom.xml @@ -0,0 +1,24 @@ + + + + pqs + com.njcn + 1.0.0 + + 4.0.0 + pqs-system + pom + 系统配置服务聚合 + + system-boot + system-api + + + + 8 + 8 + + + \ No newline at end of file diff --git a/pqs-system/system-api/pom.xml b/pqs-system/system-api/pom.xml new file mode 100644 index 000000000..6bb46e629 --- /dev/null +++ b/pqs-system/system-api/pom.xml @@ -0,0 +1,38 @@ + + + + pqs-system + com.njcn + 1.0.0 + + 4.0.0 + system-api + 系统配置服务对外接口 + + + 8 + 8 + + + + + + com.njcn + common-core + ${project.version} + + + com.njcn + common-db + ${project.version} + + + com.njcn + common-microservice + ${project.version} + + + + \ No newline at end of file diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/api/AreaFeignClient.java b/pqs-system/system-api/src/main/java/com/njcn/system/api/AreaFeignClient.java new file mode 100644 index 000000000..2f9057e4c --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/api/AreaFeignClient.java @@ -0,0 +1,63 @@ +package com.njcn.system.api; + +import com.njcn.common.pojo.constant.ServerInfo; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.system.api.fallback.AreaFeignClientFallbackFactory; +import com.njcn.system.pojo.dto.AreaTreeDTO; +import com.njcn.system.pojo.po.Area; +import io.swagger.annotations.ApiParam; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @author denghuajun + * @version 1.0.0 + * @date 2022年01月05日 15:11 + */ +@FeignClient(value = ServerInfo.SYSTEM,path = "/area",fallbackFactory = AreaFeignClientFallbackFactory.class) +public interface AreaFeignClient { + + /** + * 根据行政区域id查询详情 + * + * @param id 行政区域id + * @return 行政区域基本信息 + */ + @GetMapping("/selectIdArea/{id}") + HttpResult selectIdArea(@PathVariable("id") String id); + + /** + * 根据行政区域id查询详情 + * + * @param list 行政区域id集合 + * @return 行政区域基本信息 + */ + @PostMapping("/areaNameByList") + HttpResult> areaNameByList(@RequestBody List list); + + /** + * 查询所有的行政区域树 + */ + @PostMapping("/areaDeptTree") + HttpResult> areaDeptTree(@RequestParam("id")String id , @RequestParam("type")Integer type); + + /** + * 根据区域id获取省份信息 + */ + @PostMapping("/areaPro") + HttpResult areaPro(@RequestParam("id")String id , @RequestParam("type")Integer type); + + + + /** + * 根据行政区域名称查询详细 + * + * @param name 行政区域名称 + * @return 行政区域详情 + */ + @GetMapping("/selectAreaByName/{name}") + HttpResult selectAreaByName(@PathVariable("name") String name); + +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/api/ConfigFeignClient.java b/pqs-system/system-api/src/main/java/com/njcn/system/api/ConfigFeignClient.java new file mode 100644 index 000000000..6ffcfc738 --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/api/ConfigFeignClient.java @@ -0,0 +1,27 @@ +package com.njcn.system.api; + +import com.njcn.common.pojo.constant.ServerInfo; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.system.api.fallback.ConfigFeignClientFallbackFactory; +import com.njcn.system.pojo.po.Config; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; + +/** + * @author denghuajun + * @version 1.0.0 + * @date 2022年01月05日 15:11 + */ +@FeignClient(value = ServerInfo.SYSTEM, path = "/config", fallbackFactory = ConfigFeignClientFallbackFactory.class) +public interface ConfigFeignClient { + + /** + * 获取系统配置 + * + * @return 配置信息 + */ + @GetMapping("/getSysConfig") + HttpResult getSysConfig(); + + +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/api/DicDataFeignClient.java b/pqs-system/system-api/src/main/java/com/njcn/system/api/DicDataFeignClient.java new file mode 100644 index 000000000..64952535c --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/api/DicDataFeignClient.java @@ -0,0 +1,59 @@ +package com.njcn.system.api; + + +import com.njcn.common.pojo.constant.ServerInfo; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.system.api.fallback.DicDataFeignClientFallbackFactory; + +import com.njcn.system.pojo.po.DictData; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import java.awt.image.RenderedImage; +import java.util.List; + + +/** + * pqs + * + * @author cdf + * @date 2021/6/24 + */ +@FeignClient(value = ServerInfo.SYSTEM, path = "/dictData", fallbackFactory = DicDataFeignClientFallbackFactory.class) +public interface DicDataFeignClient { + + @GetMapping("/getDicDataById") + HttpResult getDicDataById(@RequestParam("dicIndex") String dicIndex); + + @GetMapping("/getDicDataByTypeName") + HttpResult> getDicDataByTypeName(@RequestParam("dictTypeName") String dictTypeName); + + @GetMapping("/getDicDataByName") + HttpResult getDicDataByName(@RequestParam("dicName") String dicName); + + @GetMapping("/getLoadTypeBySys") + HttpResult> getLoadTypeBySys(); + + /** + * 后台新增字典数据 + * + * @param dicTypeName 类型名称 + * @param dicDataName 数据名称 + * @return 新增后的字典数据 + */ + @GetMapping("/addDicData") + HttpResult addDicData(@RequestParam("dicTypeName") String dicTypeName, @RequestParam("dicDataName") String dicDataName); + + /** + * 根据字典类型名称&数据名称获取字典数据 + * + * @param dicTypeName 字典类型名称 + * @param dicDataName 字典数据名称 + * @return 字典数据 + */ + @GetMapping("/getDicDataByNameAndTypeName") + HttpResult getDicDataByNameAndTypeName(@RequestParam("dicTypeName") String dicTypeName, @RequestParam("dicDataName") String dicDataName); +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/api/ThemeFeignClient.java b/pqs-system/system-api/src/main/java/com/njcn/system/api/ThemeFeignClient.java new file mode 100644 index 000000000..75fb2b16b --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/api/ThemeFeignClient.java @@ -0,0 +1,25 @@ +package com.njcn.system.api; + +import com.njcn.common.pojo.constant.ServerInfo; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.system.api.fallback.AreaFeignClientFallbackFactory; +import com.njcn.system.pojo.po.Theme; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; + + +/** + * @author 徐扬 + */ +@FeignClient(value = ServerInfo.SYSTEM,path = "/theme",fallbackFactory = AreaFeignClientFallbackFactory.class) +public interface ThemeFeignClient { + + /** + * 功能描述: 获取当前主题 + * @return + * @author xy + * @date 2022/2/14 11:30 + */ + @GetMapping("/getTheme") + HttpResult getTheme(); +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/api/fallback/AreaFeignClientFallbackFactory.java b/pqs-system/system-api/src/main/java/com/njcn/system/api/fallback/AreaFeignClientFallbackFactory.java new file mode 100644 index 000000000..ac72ecd20 --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/api/fallback/AreaFeignClientFallbackFactory.java @@ -0,0 +1,72 @@ +package com.njcn.system.api.fallback; + +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.system.api.AreaFeignClient; +import com.njcn.system.pojo.dto.AreaTreeDTO; +import com.njcn.system.pojo.po.Area; +import com.njcn.system.utils.SystemEnumUtil; +import feign.hystrix.FallbackFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author denghuajun + * @version 1.0.0 + * @date 2022年01月05日 15:08 + */ +@Slf4j +@Component +public class AreaFeignClientFallbackFactory implements FallbackFactory { + + + /** + * 输出远程请求接口异常日志 + * @param cause RPC请求异常 + */ + @Override + public AreaFeignClient create(Throwable cause) { + //判断抛出异常是否为解码器抛出的业务异常 + Enum exceptionEnum = CommonResponseEnum.SERVICE_FALLBACK; + if(cause.getCause() instanceof BusinessException){ + BusinessException businessException = (BusinessException) cause.getCause(); + exceptionEnum = SystemEnumUtil.getExceptionEnum(businessException.getResult()); + } + Enum finalExceptionEnum = exceptionEnum; + return new AreaFeignClient() { + @Override + public HttpResult selectIdArea(String id) { + log.error("{}异常,降级处理,异常为:{}","根据行政区域id查询详情",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + + @Override + public HttpResult> areaNameByList(List list) { + log.error("{}异常,降级处理,异常为:{}","根据行政区域id集合查询名称",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + + @Override + public HttpResult> areaDeptTree(String id, Integer type) { + log.error("{}异常,降级处理,异常为:{}","查询区域详情",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + + @Override + public HttpResult areaPro(String id, Integer type) { + log.error("{}异常,降级处理,异常为:{}","根据区域id查询省份信息",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + + @Override + public HttpResult selectAreaByName(String name) { + log.error("{}异常,降级处理,异常为:{}","根据行政区域名称查询详细",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + + }; + } +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/api/fallback/ConfigFeignClientFallbackFactory.java b/pqs-system/system-api/src/main/java/com/njcn/system/api/fallback/ConfigFeignClientFallbackFactory.java new file mode 100644 index 000000000..0369a43c5 --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/api/fallback/ConfigFeignClientFallbackFactory.java @@ -0,0 +1,45 @@ +package com.njcn.system.api.fallback; + +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.system.api.ConfigFeignClient; +import com.njcn.system.pojo.po.Config; +import com.njcn.system.utils.SystemEnumUtil; +import feign.hystrix.FallbackFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author denghuajun + * @version 1.0.0 + * @date 2022年01月05日 15:08 + */ +@Slf4j +@Component +public class ConfigFeignClientFallbackFactory implements FallbackFactory { + + + /** + * 输出远程请求接口异常日志 + * @param cause RPC请求异常 + */ + @Override + public ConfigFeignClient create(Throwable cause) { + //判断抛出异常是否为解码器抛出的业务异常 + Enum exceptionEnum = CommonResponseEnum.SERVICE_FALLBACK; + if(cause.getCause() instanceof BusinessException){ + BusinessException businessException = (BusinessException) cause.getCause(); + exceptionEnum = SystemEnumUtil.getExceptionEnum(businessException.getResult()); + } + Enum finalExceptionEnum = exceptionEnum; + return new ConfigFeignClient() { + @Override + public HttpResult getSysConfig() { + log.error("{}异常,降级处理,异常为:{}","获取系统配置",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + + }; + } +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/api/fallback/DicDataFeignClientFallbackFactory.java b/pqs-system/system-api/src/main/java/com/njcn/system/api/fallback/DicDataFeignClientFallbackFactory.java new file mode 100644 index 000000000..49ff568f9 --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/api/fallback/DicDataFeignClientFallbackFactory.java @@ -0,0 +1,71 @@ +package com.njcn.system.api.fallback; + + +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.system.api.DicDataFeignClient; +import com.njcn.system.pojo.po.DictData; +import com.njcn.system.utils.SystemEnumUtil; +import feign.hystrix.FallbackFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年09月09日 15:19 + */ +@Slf4j +@Component +public class DicDataFeignClientFallbackFactory implements FallbackFactory { + @Override + public DicDataFeignClient create(Throwable cause) { + //判断抛出异常是否为解码器抛出的业务异常 + Enum exceptionEnum = CommonResponseEnum.SERVICE_FALLBACK; + if(cause.getCause() instanceof BusinessException){ + BusinessException businessException = (BusinessException) cause.getCause(); + exceptionEnum = SystemEnumUtil.getExceptionEnum(businessException.getResult()); + } + Enum finalExceptionEnum = exceptionEnum; + return new DicDataFeignClient() { + @Override + public HttpResult getDicDataById(String dicIndex) { + log.error("{}异常,降级处理,异常为:{}","根据字典索引获取字典数据",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + + @Override + public HttpResult> getDicDataByTypeName(String dictTypeName) { + log.error("{}异常,降级处理,异常为:{}","根据字典类型名称获取字典数据集合",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + + @Override + public HttpResult getDicDataByName(String dicName) { + log.error("{}异常,降级处理,异常为:{}","根据字典名称获取字典数据",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + + @Override + public HttpResult> getLoadTypeBySys() { + log.error("{}异常,降级处理,异常为:{}","根据系统类型获取不同指标参数",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + + @Override + public HttpResult addDicData(String dicTypeName, String dicDataName) { + log.error("{}异常,降级处理,异常为:{}","后台新增字典数据",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + + @Override + public HttpResult getDicDataByNameAndTypeName(String typeName, String dicDataName) { + log.error("{}异常,降级处理,异常为:{}","根据字典类型名称&数据名称获取字典数据",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + }; + } +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/api/fallback/ThemeFeignClientFallbackFactory.java b/pqs-system/system-api/src/main/java/com/njcn/system/api/fallback/ThemeFeignClientFallbackFactory.java new file mode 100644 index 000000000..676b4baae --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/api/fallback/ThemeFeignClientFallbackFactory.java @@ -0,0 +1,45 @@ +package com.njcn.system.api.fallback; + +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.system.api.ThemeFeignClient; +import com.njcn.system.pojo.po.Theme; +import com.njcn.system.utils.SystemEnumUtil; +import feign.hystrix.FallbackFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author denghuajun + * @version 1.0.0 + * @date 2022年01月05日 15:08 + */ +@Slf4j +@Component +public class ThemeFeignClientFallbackFactory implements FallbackFactory { + + + /** + * 输出远程请求接口异常日志 + * @param cause RPC请求异常 + * @return + */ + @Override + public ThemeFeignClient create(Throwable cause) { + //判断抛出异常是否为解码器抛出的业务异常 + Enum exceptionEnum = CommonResponseEnum.SERVICE_FALLBACK; + if(cause.getCause() instanceof BusinessException){ + BusinessException businessException = (BusinessException) cause.getCause(); + exceptionEnum = SystemEnumUtil.getExceptionEnum(businessException.getResult()); + } + Enum finalExceptionEnum = exceptionEnum; + return new ThemeFeignClient() { + @Override + public HttpResult getTheme() { + log.error("{}异常,降级处理,异常为:{}","获取当前主题",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + }; + } +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/enums/AreaEnum.java b/pqs-system/system-api/src/main/java/com/njcn/system/enums/AreaEnum.java new file mode 100644 index 000000000..92017ab71 --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/enums/AreaEnum.java @@ -0,0 +1,13 @@ +package com.njcn.system.enums; + +import lombok.Getter; + +/** + * @author denghuajun + * @date 2022/1/10 + * A00500~A00520 行政区域枚举 + */ +@Getter +public enum AreaEnum { + +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataEnum.java b/pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataEnum.java new file mode 100644 index 000000000..86e899e05 --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataEnum.java @@ -0,0 +1,36 @@ +package com.njcn.system.enums; + +import lombok.Getter; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2021/8/5 21:56 + */ +@Getter +public enum DicDataEnum { + + /** + * 字典数据名称 + */ + PLPC_ENUM("频率偏差", "PLPC"), + DYPC_ENUM("电压偏差", "DYPC"), + SXDYBPHD_ENUM("三相电压不平衡度", "SXDYBPHD"), + XBDY_ENUM("谐波电压", "XBDY"), + CSSB_ENUM("长时闪变", "CSSB"), + XBDL_ENUM("谐波电流", "XBDL"), + FXDL_ENUM("负序电流", "FXDL"), + JXBDY_ENUM("间谐波电压", "JXBDY"); + + private final String name; + + private final String code; + + DicDataEnum(String name, String code){ + this.name=name; + this.code = code; + } + +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataTypeEnum.java b/pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataTypeEnum.java new file mode 100644 index 000000000..e475e02e4 --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataTypeEnum.java @@ -0,0 +1,48 @@ +package com.njcn.system.enums; + +import lombok.Getter; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2021/8/5 21:56 + */ +@Getter +public enum DicDataTypeEnum { + /** + * 字典类型名称 + */ + FRONT_TYPE("前置类型"), + DEV_TYPE("终端类型"), + DEV_FUN("终端功能"), + DEV_STATUS("终端状态"), + DEV_LEVEL("终端等级"), + DEV_CONNECT("接线方式"), + DEV_MANUFACTURER("制造厂商"), + DEV_VOLTAGE("电压等级"), + EVENT_REASON("暂降原因"), + EVENT_TYPE("暂降类型"), + BUSINESS_TYPE("行业类型"), + INTERFERENCE_SOURCE_TYPE("干扰源类型"), + ALARM_TYPE("告警类型"), + DEV_OPS("运维日志"), + INDICATOR_TYPE("指标类型"), + COMMUNICATE_TYPE("通讯类型"), + RATE_TYPE("费率类型"), + ELE_LOAD_TYPE("用能负荷类型"), + ELE_STATISTICAL_TYPE("用能统计类型"), + LINE_MARK("监测点评分等级") + + ; + + + + private final String name; + + DicDataTypeEnum(String name){ + this.name=name; + } + +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/enums/SystemResponseEnum.java b/pqs-system/system-api/src/main/java/com/njcn/system/enums/SystemResponseEnum.java new file mode 100644 index 000000000..8cf271917 --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/enums/SystemResponseEnum.java @@ -0,0 +1,33 @@ +package com.njcn.system.enums; + +import lombok.Getter; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年12月20日 09:56 + */ +@Getter +public enum SystemResponseEnum { + + /** + * 系统模块异常响应码的范围: + * A00350 ~ A00449 + */ + SYSTEM_COMMON_ERROR("A00350","系统模块异常"), + DICT_TYPE_NAME_REPEAT("A00351", "字典类型名称重复"), + DICT_DATA_NAME_REPEAT("A00352", "字典数据名称重复"), + AREA_CODE_REPEAT("A00353","行政区域编码重复"), + LOAD_TYPE_EMPTY("A00354","用能负荷数据为空"), + LINE_MARK_EMPTY("A00355","字典监测点评分等级数据为空") + ; + + private final String code; + + private final String message; + + SystemResponseEnum(String code, String message) { + this.code = code; + this.message = message; + } +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/enums/ThemeEnum.java b/pqs-system/system-api/src/main/java/com/njcn/system/enums/ThemeEnum.java new file mode 100644 index 000000000..dbda5e496 --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/enums/ThemeEnum.java @@ -0,0 +1,34 @@ +package com.njcn.system.enums; + +import lombok.Getter; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/1/12 14:17 + */ +@Getter +public enum ThemeEnum { + + /** + * 系统主题 + */ + SAME_THEME_NAME("A0102", "主题名称重复"), + + LOGO_FILE_BLANK("A0102", "logo图片为空"), + + FAVICON_FILE_BLANK("A0102", "favicon图片为空") + ; + + private final String code; + + private final String message; + + ThemeEnum(String code, String message) { + this.code = code; + this.message = message; + } + +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/pojo/constant/SystemType.java b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/constant/SystemType.java new file mode 100644 index 000000000..380125a30 --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/constant/SystemType.java @@ -0,0 +1,15 @@ +package com.njcn.system.pojo.constant; + +/** + * @author 徐扬 + */ +public interface SystemType { + + /** + * 系统类型:0-省级系统;1-企业系统;2-数据中心 + */ + int PROVINCIAL_SYSTEM = 0; + int ENTERPRISE_SYSTEM = 1; + int DATA_CENTER = 2; + +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/pojo/constant/ThemeState.java b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/constant/ThemeState.java new file mode 100644 index 000000000..b60907f55 --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/constant/ThemeState.java @@ -0,0 +1,21 @@ +package com.njcn.system.pojo.constant; + + +/** + * @author 徐扬 + */ +public interface ThemeState { + + /** + * 主题状态 0-删除;1-正常;默认正常 + */ + int DELETE = 0; + int NORMAL = 1; + + /** + * 激活状态 0-未激活;1-激活;默认未激活 + */ + int INACTIVATED = 0; + int ACTIVATION = 1; + +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/pojo/dto/AreaTreeDTO.java b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/dto/AreaTreeDTO.java new file mode 100644 index 000000000..51e965c62 --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/dto/AreaTreeDTO.java @@ -0,0 +1,20 @@ +package com.njcn.system.pojo.dto; + +import com.njcn.web.pojo.dto.BaseDTO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author denghuajun + * @date 2022/1/10 10:33 + * + */ +@Data +public class AreaTreeDTO extends BaseDTO { + @ApiModelProperty("是否被绑定") + private Integer isFalse = 0; + @ApiModelProperty("子节点") + private List children; +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/pojo/enums/StatisticsEnum.java b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/enums/StatisticsEnum.java new file mode 100644 index 000000000..050e4bf0d --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/enums/StatisticsEnum.java @@ -0,0 +1,48 @@ +package com.njcn.system.pojo.enums; + + +import lombok.Getter; + +import java.util.Arrays; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2022年03月18日 13:27 + */ +@Getter +public enum StatisticsEnum { + + /** + * 统计类型字典枚举 + */ + POWER_NETWORK("网络拓扑", "Power_Network"), + VOLTAGE_LEVEL("电压等级", "Voltage_Level"), + LOAD_TYPE("干扰源类型", "Load_Type"), + MANUFACTURER("终端厂家", "Manufacturer"), + REPORT_TYPE("上报类型", "Report_Type"); + + private final String name; + + private final String code; + + StatisticsEnum(String name, String code) { + this.name = name; + this.code = code; + } + + + /** + * 没有匹配到,则默认为网络拓扑 + * @param code 统计类型code + * @return 统计枚举实例 + */ + public static StatisticsEnum getStatisticsEnumByCode(String code) { + return Arrays.stream(StatisticsEnum.values()) + .filter(statisticsEnum -> statisticsEnum.getCode().equalsIgnoreCase(code)) + .findAny() + .orElse(POWER_NETWORK); + } + + +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/pojo/param/AreaParam.java b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/param/AreaParam.java new file mode 100644 index 000000000..6b6a728d8 --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/param/AreaParam.java @@ -0,0 +1,87 @@ +package com.njcn.system.pojo.param; + +import com.njcn.common.pojo.constant.PatternRegex; +import com.njcn.web.constant.ValidMessage; +import com.njcn.web.pojo.param.BaseParam; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.*; +import java.math.BigDecimal; + +/** + * @author denghuajun + * @version 1.0.0 + * @date 2022年1月5日 8:59 + */ +@Data +public class AreaParam { + + @ApiModelProperty("父节点") + @NotBlank(message = ValidMessage.PID_NOT_BLANK) + @Pattern(regexp = PatternRegex.SYSTEMS_ID, message = ValidMessage.PID_FORMAT_ERROR) + private String pid; + + + @ApiModelProperty("名称") + @NotBlank(message = ValidMessage.NAME_NOT_BLANK) + @Pattern(regexp = PatternRegex.ALL_CHAR_1_20, message = ValidMessage.NAME_FORMAT_ERROR) + private String name; + + @ApiModelProperty("简称") + @NotBlank(message = ValidMessage.NAME_NOT_BLANK) + @Pattern(regexp = PatternRegex.ALL_CHAR_1_20, message = ValidMessage.NAME_FORMAT_ERROR) + private String shortName; + + + @ApiModelProperty("排序(编号)") + @NotBlank(message = ValidMessage.CODE_NOT_BLANK) + @Pattern(regexp = PatternRegex.ALL_CHAR_1_20, message = ValidMessage.CODE_FORMAT_ERROR) + private String areaCode; + + + + @ApiModelProperty("区域类型 0-省级区域;1-企业区域; ") + private Integer type; + + @ApiModelProperty("中心点经度") + private BigDecimal lng; + + @ApiModelProperty("中心点纬度") + private BigDecimal lat; + + + + + + /** + * 更新操作实体 + */ + + @Data + @EqualsAndHashCode(callSuper = true) + public static class AreaUpdateParam extends AreaParam { + + + @ApiModelProperty("id") + @NotBlank(message = ValidMessage.ID_NOT_BLANK) + @Pattern(regexp = PatternRegex.SYSTEM_ID, message = ValidMessage.ID_FORMAT_ERROR) + private String id; + + } + + /** + * 分页查询实体 + */ + @Data + @EqualsAndHashCode(callSuper = true) + public static class QueryParam extends BaseParam { + /** + * 区域类型 0-省级区域;1-企业区域 + */ + private Integer type; + + } + +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/pojo/param/DictDataParam.java b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/param/DictDataParam.java new file mode 100644 index 000000000..1f0f9d865 --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/param/DictDataParam.java @@ -0,0 +1,93 @@ +package com.njcn.system.pojo.param; + +import com.njcn.common.pojo.constant.PatternRegex; +import com.njcn.web.constant.ValidMessage; +import com.njcn.web.pojo.param.BaseParam; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.*; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年12月17日 15:49 + */ +@Data +public class DictDataParam { + + + @ApiModelProperty("字典类型id") + @NotBlank(message = ValidMessage.DICT_TYPE_ID_NOT_BLANK) + @Pattern(regexp = PatternRegex.SYSTEM_ID, message = ValidMessage.DICT_TYPE_ID_FORMAT_ERROR) + private String typeId; + + + @ApiModelProperty("名称") + @NotBlank(message = ValidMessage.NAME_NOT_BLANK) + @Pattern(regexp = PatternRegex.DIC_REGEX, message = ValidMessage.NAME_FORMAT_ERROR) + private String name; + + + @ApiModelProperty("编码") + @NotBlank(message = ValidMessage.CODE_NOT_BLANK) + @Pattern(regexp = PatternRegex.DIC_REGEX, message = ValidMessage.CODE_FORMAT_ERROR) + private String code; + + + @ApiModelProperty("排序") + @NotNull(message = ValidMessage.SORT_NOT_NULL) + @Min(value = 0, message = ValidMessage.SORT_FORMAT_ERROR) + @Max(value = 999, message = ValidMessage.SORT_FORMAT_ERROR) + private Integer sort; + + + @ApiModelProperty("事件等级:0-普通;1-中等;2-严重(默认为0)") + private Integer level; + + @ApiModelProperty("与高级算法内部Id描述对应") + private Integer algoDescribe; + + + /** + * 更新操作实体 + */ + @Data + @EqualsAndHashCode(callSuper = true) + public static class DictDataUpdateParam extends DictDataParam { + + /** + * 表Id + */ + @ApiModelProperty("id") + @NotBlank(message = ValidMessage.ID_NOT_BLANK) + @Pattern(regexp = PatternRegex.SYSTEM_ID, message = ValidMessage.ID_FORMAT_ERROR) + private String id; + } + + /** + * 分页查询实体 + */ + @Data + @EqualsAndHashCode(callSuper = true) + public static class DictDataQueryParam extends BaseParam { + + + + } + + /** + * 根据字典类型id分页查询字典数据 + */ + @Data + @EqualsAndHashCode(callSuper = true) + public static class DicTypeIdQueryParam extends BaseParam { + @ApiModelProperty("字典类型id") + @NotBlank(message = ValidMessage.DICT_TYPE_ID_NOT_BLANK) + @Pattern(regexp = PatternRegex.SYSTEM_ID, message = ValidMessage.DICT_TYPE_ID_FORMAT_ERROR) + private String typeId; + + } + +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/pojo/param/DictTypeParam.java b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/param/DictTypeParam.java new file mode 100644 index 000000000..37949c977 --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/param/DictTypeParam.java @@ -0,0 +1,83 @@ +package com.njcn.system.pojo.param; + +import com.njcn.common.pojo.constant.PatternRegex; +import com.njcn.web.constant.ValidMessage; +import com.njcn.web.pojo.param.BaseParam; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.*; + + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年12月17日 09:40 + */ +@Data +public class DictTypeParam { + + @ApiModelProperty("名称") + @NotBlank(message = ValidMessage.NAME_NOT_BLANK) + @Pattern(regexp = PatternRegex.DIC_REGEX, message = ValidMessage.NAME_FORMAT_ERROR) + private String name; + + @ApiModelProperty("编码") + @NotBlank(message = ValidMessage.CODE_NOT_BLANK) + @Pattern(regexp = PatternRegex.ALL_CHAR_1_20, message = ValidMessage.CODE_FORMAT_ERROR) + private String code; + + + @ApiModelProperty("排序") + @NotNull(message = ValidMessage.SORT_NOT_NULL) + @Min(value = 0, message = ValidMessage.SORT_FORMAT_ERROR) + @Max(value = 999, message = ValidMessage.SORT_FORMAT_ERROR) + private Integer sort; + + + @ApiModelProperty("开启等级:0-不开启;1-开启,默认不开启") + @NotNull(message = ValidMessage.OPEN_LEVEL_NOT_NULL) + @Min(value = 0, message = ValidMessage.OPEN_LEVEL_FORMAT_ERROR) + @Max(value = 1, message = ValidMessage.OPEN_LEVEL_FORMAT_ERROR) + private Integer openLevel; + + + @ApiModelProperty("开启算法描述:0-不开启;1-开启,默认不开启") + @NotNull(message = ValidMessage.OPEN_DESCRIBE_NOT_NULL) + @Min(value = 0, message = ValidMessage.OPEN_DESCRIBE_FORMAT_ERROR) + @Max(value = 1, message = ValidMessage.OPEN_DESCRIBE_FORMAT_ERROR) + private Integer openDescribe; + + + @ApiModelProperty("描述") + private String remark; + + /** + * 更新操作实体 + */ + @Data + @EqualsAndHashCode(callSuper = true) + public static class DictTypeUpdateParam extends DictTypeParam { + + + @ApiModelProperty("id") + @NotBlank(message = ValidMessage.ID_NOT_BLANK) + @Pattern(regexp = PatternRegex.SYSTEM_ID, message = ValidMessage.ID_FORMAT_ERROR) + private String id; + + } + + /** + * 分页查询实体 + */ + @Data + @EqualsAndHashCode(callSuper = true) + public static class DictTypeQueryParam extends BaseParam { + + + } + +} + + diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/pojo/param/MxGraphParam.java b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/param/MxGraphParam.java new file mode 100644 index 000000000..539bb9d98 --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/param/MxGraphParam.java @@ -0,0 +1,34 @@ +package com.njcn.system.pojo.param; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * pqs + * + * @author cdf + * @date 2022/1/26 + */ +@Data +@ApiModel +public class MxGraphParam { + + @ApiModelProperty(name = "title",value = "组态标题",required = true) + @NotBlank(message = "组态标题不可为空") + private String title; + + @ApiModelProperty(name = "mxContent",value = "组态内容",required = true) + @NotBlank(message = "内容不可为空") + private String mxContent; + + @ApiModelProperty(name = "bgImage",value = "组态背景图") + private String bgImage; + + @ApiModelProperty(name = "sort",value = "排序",required = true) + @NotNull(message = "排序不可为空") + private Integer sort; +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/pojo/param/ThemeParam.java b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/param/ThemeParam.java new file mode 100644 index 000000000..afaafbeb1 --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/param/ThemeParam.java @@ -0,0 +1,63 @@ +package com.njcn.system.pojo.param; + +import com.njcn.common.pojo.constant.PatternRegex; +import com.njcn.web.constant.ValidMessage; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/1/12 13:45 + */ +@Data +public class ThemeParam { + + @ApiModelProperty("主题名称") + @NotBlank(message = ValidMessage.NAME_NOT_BLANK) + @Pattern(regexp = PatternRegex.NORMAL, message = ValidMessage.NAME_FORMAT_ERROR) + private String name; + + @ApiModelProperty("主题描述") + @NotBlank(message = ValidMessage.REMARK_NOT_BLANK) + @Pattern(regexp = PatternRegex.NORMAL, message = ValidMessage.REMARK_FORMAT_ERROR) + private String remark; + + @ApiModelProperty("主题颜色") + @NotBlank(message = ValidMessage.COLOR_NOT_BLANK) + @Pattern(regexp = PatternRegex.COLOR_REGEX, message = ValidMessage.COLOR_FORMAT_ERROR) + private String color; + + @ApiModelProperty("logo图片") + @NotNull(message = ValidMessage.LOGO_NOT_BLANK) + private MultipartFile logoFile; + + @ApiModelProperty("favicon图标") + @NotNull(message = ValidMessage.FAVICON_NOT_BLANK) + private MultipartFile faviconFile; + + /** + * 用户更新操作实体 + * + * 需要填写的参数:用户的id + */ + @Data + @EqualsAndHashCode(callSuper = true) + public static class ThemeUpdateParam extends ThemeParam { + + @ApiModelProperty("主题表Id") + @NotBlank(message = ValidMessage.ID_NOT_BLANK) + @Pattern(regexp = PatternRegex.SYSTEM_ID, message = ValidMessage.ID_FORMAT_ERROR) + private String id; + } + +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/Area.java b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/Area.java new file mode 100644 index 000000000..593350077 --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/Area.java @@ -0,0 +1,72 @@ +package com.njcn.system.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.njcn.db.bo.BaseEntity; +import java.math.BigDecimal; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * + * @author hongawen + * @since 2021-12-13 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_area") +public class Area extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * 区域Id + */ + private String id; + + /** + * 父节点(0为根节点) + */ + private String pid; + + /** + * 上层所有节点 + */ + private String pids; + + /** + * 区域名称 + */ + private String name; + + /** + * 简称 + */ + private String shortName; + + /** + * 排序(编号) + */ + private String areaCode; + + /** + * 区域类型 0-省级区域;1-企业区域; + */ + private Integer type; + + /** + * 中心点经度 + */ + private BigDecimal lng; + + /** + * 中心点纬度 + */ + private BigDecimal lat; + + /** + * 区域状态 0-删除;1-正常;默认正常 + */ + private Integer state; + +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/Config.java b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/Config.java new file mode 100644 index 000000000..ac7ddee96 --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/Config.java @@ -0,0 +1,52 @@ +package com.njcn.system.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.njcn.db.bo.BaseEntity; +import java.math.BigDecimal; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * + * @author hongawen + * @since 2021-12-13 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_config") +public class Config extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * 配置Id + */ + private String id; + + /** + * 系统类型:0-省级系统;1-企业系统;2-数据中心 + */ + private Integer type; + + /** + * 数据上报(以逗号分割,比如:冀北,网公司)默认为空 + */ + private String dataReport; + + /** + * 审计日志大小(MB) + */ + private BigDecimal logSize; + + /** + * 审计日志存储时间(1-6个月,默认3个月) + */ + private Boolean logTime; + + /** + * 状态:0-删除 1-正常 + */ + private Integer state; + +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/DictData.java b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/DictData.java new file mode 100644 index 000000000..53cc4088f --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/DictData.java @@ -0,0 +1,61 @@ +package com.njcn.system.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.njcn.db.bo.BaseEntity; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * + * @author hongawen + * @since 2021-12-13 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_dict_data") +public class DictData extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * 字典数据表Id + */ + private String id; + + /** + * 字典类型表Id + */ + private String typeId; + + /** + * 名称 + */ + private String name; + + /** + * 编码 + */ + private String code; + + /** + * 排序 + */ + private Integer sort; + + /** + * 事件等级:0-普通;1-中等;2-严重(默认为0) + */ + private Integer level; + + /** + * 与高级算法内部Id描述对应; + */ + private Integer algoDescribe; + + /** + * 状态:0-删除 1-正常 + */ + private Integer state; + +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/DictType.java b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/DictType.java new file mode 100644 index 000000000..e75aba87d --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/DictType.java @@ -0,0 +1,63 @@ +package com.njcn.system.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.njcn.db.bo.BaseEntity; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * + * @author hongawen + * @since 2021-12-13 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_dict_type") +public class DictType extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * 字典类型表Id + */ + private String id; + + /** + * 名称 + */ + private String name; + + /** + * 编码 + */ + private String code; + + /** + * 排序 + */ + private Integer sort; + + /** + * 开启等级:0-不开启;1-开启,默认不开启 + */ + private Integer openLevel; + + + /** + * 开启描述:0-不开启;1-开启,默认不开启 + */ + private Integer openDescribe; + + + /** + * 描述 + */ + private String remark; + + /** + * 状态:0-删除 1-正常 + */ + private Integer state; + +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/MxGraph.java b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/MxGraph.java new file mode 100644 index 000000000..8f2c563e7 --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/MxGraph.java @@ -0,0 +1,29 @@ +package com.njcn.system.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.njcn.db.bo.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * pqs + * 组态表 + * @author cdf + * @date 2022/1/26 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_mxgraph") +public class MxGraph extends BaseEntity { + private String id; + + private String title; + + private String mxContent; + + private String bgImage; + + private Integer sort; + + private Integer state; +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/Resource.java b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/Resource.java new file mode 100644 index 000000000..dcac4ef9d --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/Resource.java @@ -0,0 +1,52 @@ +package com.njcn.system.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.njcn.db.bo.BaseEntity; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * + * @author hongawen + * @since 2021-12-13 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_resource") +public class Resource extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * 资源Id + */ + private String id; + + /** + * 名称 + */ + private String name; + + /** + * 资源类型(关联字典表) + */ + private String type; + + /** + * 路径 + */ + private String url; + + /** + * 描述 + */ + private String remark; + + /** + * 状态:0-删除 1-正常 + */ + private Integer state; + + +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/Task.java b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/Task.java new file mode 100644 index 000000000..eb143cc08 --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/Task.java @@ -0,0 +1,51 @@ +package com.njcn.system.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.njcn.db.bo.BaseEntity; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * + * @author hongawen + * @since 2021-12-13 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_task") +public class Task extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * 任务Id + */ + private String id; + + /** + * 名称 + */ + private String name; + + /** + * 触发器策略(触发器执行时间) + */ + private String strategy; + + /** + * 任务是否执行(0-停止,1-执行) + */ + private Boolean execute; + + /** + * 描述 + */ + private String remark; + + /** + * 状态:0-删除 1-正常 + */ + private Integer state; + +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/Theme.java b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/Theme.java new file mode 100644 index 000000000..26d0fd94b --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/po/Theme.java @@ -0,0 +1,61 @@ +package com.njcn.system.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.njcn.db.bo.BaseEntity; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * + * @author hongawen + * @since 2021-12-13 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_theme") +public class Theme extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * 主题Id + */ + private String id; + + /** + * 主题名称 + */ + private String name; + + /** + * logo名称 + */ + private String logoUrl; + + /** + * favicon名称 + */ + private String faviconUrl; + + /** + * 主题颜色 + */ + private String color; + + /** + * 0-未激活 1-激活,所有数据只有一条数据处于激活状态 + */ + private Integer active; + + /** + * 主题描述 + */ + private String remark; + + /** + * 状态:0-删除 1-正常 + */ + private Integer state; + +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/pojo/vo/AreaTreeVO.java b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/vo/AreaTreeVO.java new file mode 100644 index 000000000..58f9a149c --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/vo/AreaTreeVO.java @@ -0,0 +1,43 @@ +package com.njcn.system.pojo.vo; + +import com.njcn.web.pojo.vo.AreaIdVO; +import com.njcn.web.pojo.vo.BaseVO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Arrays; +import java.util.List; + +/** + * @author denghuajun + * @date 2022/1/6 10:03 + * + */ +@Data +public class AreaTreeVO extends BaseVO { + + @ApiModelProperty("上层所有节点") + private String pids; + + @ApiModelProperty("区域名称") + private String name; + + @ApiModelProperty("简称") + private String shortName; + + @ApiModelProperty("排序(编号)") + private String areaCode; + + + @ApiModelProperty("中心点经度") + private BigDecimal lng; + + @ApiModelProperty("中心点纬度") + private BigDecimal lat; + + + @ApiModelProperty("子节点详细信息") + private List children ; + +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/pojo/vo/DictDataCache.java b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/vo/DictDataCache.java new file mode 100644 index 000000000..0ab3520f0 --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/vo/DictDataCache.java @@ -0,0 +1,30 @@ +package com.njcn.system.pojo.vo; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2022年03月24日 16:06 + */ +@Data +public class DictDataCache implements Serializable { + + private String id; + + private String name; + + private String code; + + private int sort; + + private String typeId; + + private String typeName; + + private String typeCode; + + +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/pojo/vo/DictDataVO.java b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/vo/DictDataVO.java new file mode 100644 index 000000000..ee8e710fd --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/pojo/vo/DictDataVO.java @@ -0,0 +1,58 @@ +package com.njcn.system.pojo.vo; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年12月20日 15:52 + */ +@Data +public class DictDataVO implements Serializable { + + + private static final long serialVersionUID = 1L; + + /** + * 字典数据表Id + */ + private String id; + + /** + * 字典类型表名称 + */ + private String typeName; + + /** + * 名称 + */ + private String name; + + /** + * 编码 + */ + private String code; + + /** + * 排序 + */ + private Integer sort; + + /** + * 事件等级:0-普通;1-中等;2-严重(默认为0) + */ + private Integer level; + + /** + * 与高级算法内部Id描述对应; + */ + private Integer algoDescribe; + + /** + * 状态:0-删除 1-正常 + */ + private Integer state; + +} diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/utils/SystemEnumUtil.java b/pqs-system/system-api/src/main/java/com/njcn/system/utils/SystemEnumUtil.java new file mode 100644 index 000000000..69da4403b --- /dev/null +++ b/pqs-system/system-api/src/main/java/com/njcn/system/utils/SystemEnumUtil.java @@ -0,0 +1,49 @@ +package com.njcn.system.utils; + +import cn.hutool.core.util.StrUtil; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.EnumUtils; +import com.njcn.system.enums.SystemResponseEnum; + +import javax.validation.constraints.NotNull; +import java.util.Objects; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年12月20日 10:03 + */ +public class SystemEnumUtil { + + + /** + * 获取UserResponseEnum实例 + */ + public static SystemResponseEnum getSystemEnumResponseEnumByMessage(@NotNull Object value) { + SystemResponseEnum systemResponseEnum; + try { + String message = value.toString(); + if(message.indexOf(StrUtil.C_COMMA)>0){ + value = message.substring(message.indexOf(StrUtil.C_COMMA)+1); + } + systemResponseEnum = EnumUtils.valueOf(SystemResponseEnum.class, value, SystemResponseEnum.class.getMethod(BusinessException.GET_MESSAGE_METHOD)); + return Objects.isNull(systemResponseEnum) ? SystemResponseEnum.SYSTEM_COMMON_ERROR : systemResponseEnum; + } catch (NoSuchMethodException e) { + throw new BusinessException(CommonResponseEnum.INTERNAL_ERROR); + } + } + + public static Enum getExceptionEnum(HttpResult result){ + //如果返回错误,且为内部错误,则直接抛出异常 + CommonResponseEnum commonResponseEnum = EnumUtils.getCommonResponseEnumByCode(result.getCode()); + if (commonResponseEnum == CommonResponseEnum.SYSTEM_RESPONSE_ENUM) { + return getSystemEnumResponseEnumByMessage(result.getMessage()); + } + return commonResponseEnum; + } + + + +} diff --git a/pqs-system/system-boot/Dockerfile b/pqs-system/system-boot/Dockerfile new file mode 100644 index 000000000..395942857 --- /dev/null +++ b/pqs-system/system-boot/Dockerfile @@ -0,0 +1,5 @@ +FROM openjdk:8-jdk-alpine +ADD target/systemboot.jar systemboot.jar +ENTRYPOINT ["java","-jar","/systemboot.jar"] +EXPOSE 10207 +RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone \ No newline at end of file diff --git a/pqs-system/system-boot/pom.xml b/pqs-system/system-boot/pom.xml new file mode 100644 index 000000000..cd7061667 --- /dev/null +++ b/pqs-system/system-boot/pom.xml @@ -0,0 +1,93 @@ + + + + pqs-system + com.njcn + 1.0.0 + + 4.0.0 + system-boot + 系统配置服务模块 + + 8 + 8 + + + + + com.njcn + system-api + ${project.version} + + + com.njcn + user-api + ${project.version} + + + com.njcn + common-web + ${project.version} + + + com.njcn + common-swagger + ${project.version} + + + + + systemboot + + + org.springframework.boot + spring-boot-maven-plugin + + + package + + repackage + + + + + + + com.spotify + docker-maven-plugin + 1.0.0 + + + build-image + ${docker.operate} + + build + + + + + + http://${docker.repostory} + + ${docker.repostory}/${docker.registry.name}/${project.artifactId} + + latest + + ${docker.url} + ${basedir}/ + + + /ROOT + ${project.build.directory} + ${project.build.finalName}.jar + + + + + + + + + \ No newline at end of file diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/SystemBootMain.java b/pqs-system/system-boot/src/main/java/com/njcn/system/SystemBootMain.java new file mode 100644 index 000000000..b1ad05045 --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/SystemBootMain.java @@ -0,0 +1,22 @@ +package com.njcn.system; + +import lombok.extern.slf4j.Slf4j; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; + +/** + * @author hongawen + * @version 1.0.0 + * @createTime 2021年05月14日 15:14 + */ +@Slf4j +@MapperScan("com.njcn.**.mapper") +@EnableFeignClients(basePackages = "com.njcn") +@SpringBootApplication(scanBasePackages = "com.njcn") +public class SystemBootMain { + public static void main(String[] args) { + SpringApplication.run(SystemBootMain.class, args); + } +} diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/controller/AreaController.java b/pqs-system/system-boot/src/main/java/com/njcn/system/controller/AreaController.java new file mode 100644 index 000000000..9bcf09685 --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/controller/AreaController.java @@ -0,0 +1,261 @@ +package com.njcn.system.controller; + + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.constant.OperateType; +import com.njcn.common.pojo.enums.common.LogEnum; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.common.utils.LogUtil; +import com.njcn.system.pojo.dto.AreaTreeDTO; +import com.njcn.system.pojo.param.AreaParam; +import com.njcn.system.pojo.po.Area; +import com.njcn.system.pojo.vo.AreaTreeVO; +import com.njcn.system.service.IAreaService; +import io.swagger.annotations.*; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import com.njcn.web.controller.BaseController; + +import java.util.List; + +/** + *

    + * 前端控制器(行政区域) + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@Slf4j +@RestController +@RequestMapping("/area") +@Api(tags = "行政区域管理") +@AllArgsConstructor +public class AreaController extends BaseController { + + private final IAreaService areaService; + + /** + * 分页查询行政区域 + */ + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/list") + @ApiOperation("查询企业区域") + @ApiImplicitParam(name = "queryParam", value = "查询参数", required = true) + public HttpResult> list(@RequestBody @Validated AreaParam.QueryParam queryParam) { + String methodDescribe = getMethodDescribe("list"); + LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, queryParam); + Page result = areaService.listDictData(queryParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + + /** + * 根据行政区域id详情 + * + * @param id 行政区域id + * @return 行政区域详情 + */ + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @GetMapping("/selectIdArea/{id}") + @ApiOperation("根据行政区域id查询详情") + @ApiImplicitParam(name = "id", value = "查询参数", required = true) + public HttpResult selectIdArea(@PathVariable("id") String id) { + String methodDescribe = getMethodDescribe("selectIdArea"); + LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, id); + Area result = areaService.selectIdArea(id); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + + + /** + * 根据行政区域id详情 + * + * @param list 行政区域id集合 + * @return 行政区域详情 + */ + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/areaNameByList") + @ApiOperation("根据行政区域id集合查询名称") + @ApiImplicitParam(name = "list", value = "查询参数", required = true) + public HttpResult> areaNameByList(@RequestBody List list) { + String methodDescribe = getMethodDescribe("areaNameByList"); + LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, list); + List result = areaService.selectAreaByList(list); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + + + /** + * 获取行政区域树(所有行政区域) + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/areaTree") + @ApiOperation("行政区域树") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "区域id", required = false), + @ApiImplicitParam(name = "type", value = "区域类型", required = true) + }) + public HttpResult areaTree(@RequestParam(required = false) @ApiParam("id") String id, @RequestParam("type") Integer type) { + String methodDescribe = getMethodDescribe("areaTree"); + List result = areaService.areaTree(id, type); + if (!result.isEmpty()) { + try { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } catch (Exception e) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.NO_DATA, null, methodDescribe); + } + } + + /** + * 新增企业区域 + * + * @param areaParam 企业区域 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.ADD) + @PostMapping("/add") + @ApiOperation("新增企业区域") + @ApiImplicitParam(name = "areaParam", value = "企业区域数据", required = true) + public HttpResult add(@RequestBody @Validated AreaParam areaParam) { + String methodDescribe = getMethodDescribe("add"); + LogUtil.njcnDebug(log, "{},字典类型数据为:{}", methodDescribe, areaParam); + boolean result = areaService.addAreaParam(areaParam); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe); + } + } + + /** + * 修改企业区域 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.UPDATE) + @PostMapping("/update") + @ApiOperation("修改企业区域") + @ApiImplicitParam(name = "updateParam", value = "企业区域", required = true) + public HttpResult update(@RequestBody @Validated AreaParam.AreaUpdateParam updateParam) { + String methodDescribe = getMethodDescribe("update"); + LogUtil.njcnDebug(log, "{},字典数据为:{}", methodDescribe, updateParam); + boolean result = areaService.updateArea(updateParam); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe); + } + } + + /** + * 根据选中的行政区域id查询是否含有子节点 + * + * @param ids 行政区域ids + * @return 行政区域查看所有子节点 + */ + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/selectPid") + @ApiOperation("根据行政区域id查询") + @ApiImplicitParam(name = "ids", value = "查询参数", required = true) + public HttpResult selectPid(@RequestBody List ids) { + String methodDescribe = getMethodDescribe("selectPid"); + LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, ids); + List result = areaService.selectPid(ids); + if (result.size() > 0) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.DELETE_PID_EXIST, null, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.DELETE_PID_UNEXIST, null, methodDescribe); + } + + } + + /** + * 批量删除企业区域 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.DELETE) + @PostMapping("/delete") + @ApiOperation("删除企业区域") + @ApiImplicitParam(name = "ids", value = "企业区域索引", required = true) + public HttpResult delete(@RequestBody List ids) { + String methodDescribe = getMethodDescribe("delete"); + LogUtil.njcnDebug(log, "{},企业区域数据为:{}", methodDescribe, ids); + boolean result = areaService.deleteArea(ids); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe); + } + } + + /** + * 获取行政区域树(所有行政区域) + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/areaDeptTree") + @ApiOperation("获取新增部门区域树") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "区域id", required = false), + @ApiImplicitParam(name = "type", value = "区域类型", required = true) + }) + public HttpResult> areaDeptTree(@RequestParam(required = false) @ApiParam("id") String id, @RequestParam("type") Integer type) { + String methodDescribe = getMethodDescribe("areaDeptTree"); + List result = areaService.areaDeptTree(id, type); + if (!result.isEmpty()) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.NO_DATA, null, methodDescribe); + } + } + + /** + * 根据区域id获取省份 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/areaPro") + @ApiOperation("根据区域id获取省份") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "区域id", required = false), + @ApiImplicitParam(name = "type", value = "区域类型", required = true) + }) + public HttpResult areaPro(@RequestParam(required = false) @ApiParam("id") String id, @RequestParam("type") Integer type) { + String methodDescribe = getMethodDescribe("areaDeptTree"); + Area result = areaService.areaPro(id, type); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + + /** + * 获取所在的区域树 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/getDeptIdAreaTree") + @ApiOperation("根据登录用户获取所在的区域树") + public HttpResult> getDeptIdAreaTree() { + String methodDescribe = getMethodDescribe("getDeptIdAreaTree"); + List result = areaService.getDeptIdAreaTree(); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + + /** + * 根据行政区域名称查询详细 + * + * @param name 行政区域名称 + * @return 行政区域详情 + */ + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @GetMapping("/selectAreaByName/{name}") + @ApiOperation("根据行政区域名称查询详细") + @ApiImplicitParam(name = "name", value = "查询参数", required = true) + public HttpResult selectAreaByName(@PathVariable("name") String name) { + String methodDescribe = getMethodDescribe("selectAreaByName"); + LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, name); + Area result = areaService.selectAreaByName(name); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } +} + diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/controller/ConfigController.java b/pqs-system/system-boot/src/main/java/com/njcn/system/controller/ConfigController.java new file mode 100644 index 000000000..be67bfb68 --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/controller/ConfigController.java @@ -0,0 +1,61 @@ +package com.njcn.system.controller; + + +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.enums.common.DataStateEnum; +import com.njcn.common.pojo.enums.common.LogEnum; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.common.utils.LogUtil; +import com.njcn.system.pojo.po.Config; +import com.njcn.system.service.IConfigService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; +import com.njcn.web.controller.BaseController; + +import java.util.Objects; + +/** + *

    + * 前端控制器 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@Slf4j +@Api(tags = "系统配置操作") +@RestController +@RequestMapping("/config") +@RequiredArgsConstructor +public class ConfigController extends BaseController { + + private final IConfigService iConfigService; + + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @GetMapping("/getSysConfig") + @ApiOperation("获取系统配置") + public HttpResult getSysConfig() { + String methodDescribe = getMethodDescribe("getSysConfig"); + LogUtil.njcnDebug(log, "{}", methodDescribe, methodDescribe); + Config config = iConfigService.lambdaQuery() + .eq(Config::getState, DataStateEnum.ENABLE.getCode()) + .one(); + if (Objects.isNull(config)) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.NO_DATA, null, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, config, methodDescribe); + } + } + + +} + diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/controller/DictDataController.java b/pqs-system/system-boot/src/main/java/com/njcn/system/controller/DictDataController.java new file mode 100644 index 000000000..497df0248 --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/controller/DictDataController.java @@ -0,0 +1,213 @@ +package com.njcn.system.controller; + + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.constant.OperateType; +import com.njcn.common.pojo.enums.common.LogEnum; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.common.utils.LogUtil; +import com.njcn.system.pojo.param.DictDataParam; +import com.njcn.system.pojo.po.DictData; +import com.njcn.system.pojo.po.DictType; +import com.njcn.system.pojo.vo.DictDataVO; +import com.njcn.system.service.IDictDataService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import com.njcn.web.controller.BaseController; +import springfox.documentation.annotations.ApiIgnore; + +import java.util.Arrays; +import java.util.List; + +/** + *

    + * 前端控制器 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@Validated +@Slf4j +@Api(tags = "字典数据操作") +@RestController +@RequestMapping("/dictData") +@RequiredArgsConstructor +public class DictDataController extends BaseController { + + private final IDictDataService dictDataService; + + /** + * 分页查询字典类型数据 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/list") + @ApiOperation("查询字典数据") + @ApiImplicitParam(name = "queryParam", value = "查询参数", required = true) + public HttpResult> list(@RequestBody @Validated DictDataParam.DictDataQueryParam queryParam) { + String methodDescribe = getMethodDescribe("list"); + LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, queryParam); + Page result = dictDataService.listDictData(queryParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + + /** + * 新增字典数据 + * + * @param dictDataParam 字典数据 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.ADD) + @PostMapping("/add") + @ApiOperation("新增字典数据") + @ApiImplicitParam(name = "dictDataParam", value = "字典数据", required = true) + public HttpResult add(@RequestBody @Validated DictDataParam dictDataParam) { + String methodDescribe = getMethodDescribe("add"); + LogUtil.njcnDebug(log, "{},字典数据为:{}", methodDescribe, dictDataParam); + boolean result = dictDataService.addDictData(dictDataParam); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe); + } + } + + /** + * 修改字典数据 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.UPDATE) + @PostMapping("/update") + @ApiOperation("修改字典数据") + @ApiImplicitParam(name = "updateParam", value = "字典数据", required = true) + public HttpResult update(@RequestBody @Validated DictDataParam.DictDataUpdateParam updateParam) { + String methodDescribe = getMethodDescribe("update"); + LogUtil.njcnDebug(log, "{},字典数据为:{}", methodDescribe, updateParam); + boolean result = dictDataService.updateDictData(updateParam); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe); + } + } + + + /** + * 批量删除字典数据 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.UPDATE) + @PostMapping("/delete") + @ApiOperation("删除字典数据") + @ApiImplicitParam(name = "ids", value = "字典索引", required = true, dataTypeClass = List.class) + public HttpResult delete(@RequestBody List ids) { + String methodDescribe = getMethodDescribe("delete"); + LogUtil.njcnDebug(log, "{},字典ID数据为:{}", methodDescribe, String.join(StrUtil.COMMA, ids)); + boolean result = dictDataService.deleteDictData(ids); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe); + } + } + + /** + * 根据字典类型id分页查询字典数据 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/getTypeIdData") + @ApiOperation("根据字典类型id查询字典数据") + @ApiImplicitParam(name = "queryParam", value = "查询参数", required = true) + public HttpResult> getTypeIdData(@RequestBody @Validated DictDataParam.DicTypeIdQueryParam queryParam) { + String methodDescribe = getMethodDescribe("list"); + LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, queryParam); + Page result = dictDataService.getTypeIdData(queryParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @GetMapping("/getDicDataById") + @ApiOperation("根据字典id查询字典数据") + @ApiImplicitParam(name = "dicIndex", value = "查询参数", required = true) + public HttpResult getDicDataById(@RequestParam("dicIndex") String dicIndex) { + String methodDescribe = getMethodDescribe("getDicDataById"); + DictData result = dictDataService.getDicDataById(dicIndex); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @GetMapping("/getDicDataByTypeName") + @ApiOperation("根据字典类型名称查询字典数据") + @ApiImplicitParam(name = "dictTypeName", value = "查询参数", required = true) + public HttpResult> getDicDataByTypeName(@RequestParam("dictTypeName") String dictTypeName) { + String methodDescribe = getMethodDescribe("getDicDataByTypeName"); + List result = dictDataService.getDicDataByTypeName(dictTypeName); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @GetMapping("/getDicDataByName") + @ApiOperation("根据字典名称查询字典数据") + @ApiImplicitParam(name = "dicName", value = "查询参数", required = true) + public HttpResult getDicDataByName(@RequestParam("dicName") String dicName) { + String methodDescribe = getMethodDescribe("getDicDataByName"); + DictData result = dictDataService.getDicDataByName(dicName); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + + /** + * 根据系统类型获取不同指标参数 + */ + @OperateInfo + @GetMapping("/getLoadTypeBySys") + @ApiOperation("根据系统类型获取不同指标参数") + @ApiIgnore + public HttpResult> getLoadTypeBySys() { + String methodDescribe = getMethodDescribe("getLoadTypeBySys"); + List list = dictDataService.getLoadTypeBySys(); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); + } + + + /** + * 后台新增字典数据 + * + * @param dicTypeName 类型名称 + * @param dicDataName 数据名称 + * @return 新增后的字典数据 + */ + @ApiIgnore + @OperateInfo + @GetMapping("/addDicData") + @ApiOperation("后台新增字典数据") + public HttpResult addDicData(String dicTypeName, String dicDataName) { + String methodDescribe = getMethodDescribe("addDicData"); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, dictDataService.addDictData(dicTypeName,dicDataName), methodDescribe); + } + + /** + * 根据字典类型名称&数据名称获取字典数据 + * + * @param dicTypeName 字典类型名称 + * @param dicDataName 字典数据名称 + * @return 字典数据 + */ + @ApiIgnore + @OperateInfo + @GetMapping("/getDicDataByNameAndTypeName") + @ApiOperation("根据字典类型名称&数据名称获取字典数据") + public HttpResult getDicDataByNameAndTypeName(String dicTypeName, String dicDataName) { + String methodDescribe = getMethodDescribe("getDicDataByNameAndTypeName"); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, dictDataService.getDicDataByNameAndTypeName(dicTypeName,dicDataName), methodDescribe); + } + + +} + diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/controller/DictTypeController.java b/pqs-system/system-boot/src/main/java/com/njcn/system/controller/DictTypeController.java new file mode 100644 index 000000000..2e6f8fffb --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/controller/DictTypeController.java @@ -0,0 +1,139 @@ +package com.njcn.system.controller; + + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.constant.OperateType; +import com.njcn.common.pojo.dto.SimpleDTO; +import com.njcn.common.pojo.dto.SimpleTreeDTO; +import com.njcn.common.pojo.enums.common.LogEnum; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.common.utils.LogUtil; +import com.njcn.system.pojo.param.DictTypeParam; +import com.njcn.system.pojo.po.DictType; +import com.njcn.system.service.IDictTypeService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import com.njcn.web.controller.BaseController; + +import java.util.List; + +/** + *

    + * 前端控制器 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@Slf4j +@Api(tags = "字典类型表操作") +@RestController +@RequestMapping("/dictType") +@RequiredArgsConstructor +public class DictTypeController extends BaseController { + + private final IDictTypeService dictTypeService; + + + /** + * 分页查询字典类型数据 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/list") + @ApiOperation("查询字典类型") + @ApiImplicitParam(name = "queryParam", value = "查询参数", required = true) + public HttpResult> list(@RequestBody @Validated DictTypeParam.DictTypeQueryParam queryParam) { + String methodDescribe = getMethodDescribe("list"); + LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, queryParam); + Page result = dictTypeService.listDictTypes(queryParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + + + /** + * 新增字典类型 + * + * @param dictTypeParam 字典类型数据 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.ADD) + @PostMapping("/add") + @ApiOperation("新增字典类型") + @ApiImplicitParam(name = "dictTypeParam", value = "字典类型数据", required = true) + public HttpResult add(@RequestBody @Validated DictTypeParam dictTypeParam) { + String methodDescribe = getMethodDescribe("add"); + LogUtil.njcnDebug(log, "{},字典类型数据为:{}", methodDescribe, dictTypeParam); + boolean result = dictTypeService.addDictType(dictTypeParam); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe); + } + } + + /** + * 修改字典类型 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.UPDATE) + @PostMapping("/update") + @ApiOperation("修改字典类型") + @ApiImplicitParam(name = "updateParam", value = "字典类型数据", required = true) + public HttpResult update(@RequestBody @Validated DictTypeParam.DictTypeUpdateParam updateParam) { + String methodDescribe = getMethodDescribe("update"); + LogUtil.njcnDebug(log, "{},字典类型数据为:{}", methodDescribe, updateParam); + boolean result = dictTypeService.updateDictType(updateParam); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe); + } + } + + + /** + * 批量删除字典类型 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.DELETE) + @PostMapping("/delete") + @ApiOperation("删除字典类型") + @ApiImplicitParam(name = "ids", value = "字典索引", required = true) + public HttpResult delete(@RequestBody List ids) { + String methodDescribe = getMethodDescribe("delete"); + LogUtil.njcnDebug(log, "{},字典ID数据为:{}", methodDescribe, String.join(StrUtil.COMMA, ids)); + boolean result = dictTypeService.deleteDictType(ids); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe); + } + } + + /** + * 获取所有字典数据基础信息 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @GetMapping("/dictDataCache") + @ApiOperation("获取所有字典数据基础信息") + public HttpResult> dictDataCache() { + String methodDescribe = getMethodDescribe("dictDataCache"); + LogUtil.njcnDebug(log, "{},获取所有字典数据基础信息", methodDescribe); + List dictData = dictTypeService.dictDataCache(); + if (CollectionUtil.isNotEmpty(dictData)) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, dictData, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.NO_DATA, null, methodDescribe); + } + } + +} + diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/controller/MxGraphController.java b/pqs-system/system-boot/src/main/java/com/njcn/system/controller/MxGraphController.java new file mode 100644 index 000000000..932a2c895 --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/controller/MxGraphController.java @@ -0,0 +1,98 @@ +package com.njcn.system.controller; + +import cn.hutool.core.collection.CollectionUtil; +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.enums.common.LogEnum; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.common.utils.LogUtil; +import com.njcn.system.pojo.param.MxGraphParam; +import com.njcn.system.pojo.po.MxGraph; +import com.njcn.system.service.IMxGraphService; +import com.njcn.web.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + * pqs + * 组态管理 + * @author cdf + * @date 2022/1/26 + */ +@RestController +@Slf4j +@Api(tags = "组态管理") +@RequestMapping("/king") +@AllArgsConstructor +public class MxGraphController extends BaseController { + + private final IMxGraphService iMxGraphService; + + /** + * 新增组态 + * @author cdf + * @date 2022/1/26 + */ + @OperateInfo(info = LogEnum.SYSTEM_MEDIUM) + @PostMapping("/addKingView") + @ApiOperation("新增组态") + @ApiImplicitParam(name = "mxGraphParam", value = "组件实体", required = true) + HttpResult addKingView(@RequestBody @Validated MxGraphParam mxGraphParam){ + String methodDescribe = getMethodDescribe("addKingView"); + boolean result = iMxGraphService.addKingView(mxGraphParam); + LogUtil.njcnDebug(log, "{},组态实体:{}", methodDescribe, mxGraphParam); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe); + } + } + + /** + * 查询 + * @author cdf + * @date 2022/1/26 + */ + @OperateInfo(info = LogEnum.SYSTEM_MEDIUM) + @GetMapping("/getKingViewList") + @ApiOperation("查询组态") + HttpResult getKingViewList(){ + String methodDescribe = getMethodDescribe("getKingViewList"); + List result = iMxGraphService.getKingViewList(); + if (CollectionUtil.isNotEmpty(result)) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, result, methodDescribe); + } + } + + /** + * 通过id查询 + * @author cdf + * @date 2022/1/26 + */ + @OperateInfo(info = LogEnum.SYSTEM_MEDIUM) + @GetMapping("/getKingViewById") + @ApiOperation("查询组态") + HttpResult getKingViewById(@RequestParam("id") String id){ + String methodDescribe = getMethodDescribe("getKingViewById"); + MxGraph result = iMxGraphService.getKingViewById(id); + if (Objects.nonNull(result)) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, result, methodDescribe); + } + } + + + +} diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/controller/ResourceController.java b/pqs-system/system-boot/src/main/java/com/njcn/system/controller/ResourceController.java new file mode 100644 index 000000000..f38d0b7c4 --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/controller/ResourceController.java @@ -0,0 +1,22 @@ +package com.njcn.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; +import com.njcn.web.controller.BaseController; + +/** + *

    + * 前端控制器 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@RestController +@RequestMapping("/resource") +public class ResourceController extends BaseController { + +} + diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/controller/TaskController.java b/pqs-system/system-boot/src/main/java/com/njcn/system/controller/TaskController.java new file mode 100644 index 000000000..760712587 --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/controller/TaskController.java @@ -0,0 +1,22 @@ +package com.njcn.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; +import com.njcn.web.controller.BaseController; + +/** + *

    + * 前端控制器 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@RestController +@RequestMapping("/task") +public class TaskController extends BaseController { + +} + diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/controller/ThemeController.java b/pqs-system/system-boot/src/main/java/com/njcn/system/controller/ThemeController.java new file mode 100644 index 000000000..bbfb9a207 --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/controller/ThemeController.java @@ -0,0 +1,125 @@ +package com.njcn.system.controller; + + +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.constant.OperateType; +import com.njcn.common.pojo.enums.common.LogEnum; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.common.utils.LogUtil; +import com.njcn.system.pojo.param.ThemeParam; +import com.njcn.system.pojo.po.Theme; +import com.njcn.system.service.IThemeService; +import com.njcn.web.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.annotations.Param; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +/** + *

    + * 前端控制器 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@Validated +@Slf4j +@RestController +@RequestMapping("/theme") +@Api(tags = "主题管理") +@AllArgsConstructor +public class ThemeController extends BaseController { + + private final IThemeService themeService; + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @GetMapping("/getAllThemes") + @ApiOperation("主题列表") + public HttpResult> getAllThemes(){ + String methodDescribe = getMethodDescribe("getAllThemes"); + List list = themeService.getAllThemes(); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,list,methodDescribe); + } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @GetMapping("/getTheme") + @ApiOperation("当前主题") + public HttpResult getTheme(){ + String methodDescribe = getMethodDescribe("getTheme"); + Theme theme = themeService.getTheme(); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,theme,methodDescribe); + } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON,operateType = OperateType.ADD) + @PostMapping("/addTheme") + @ApiOperation("新增主题") + public HttpResult addTheme(@Validated ThemeParam theme) { + String methodDescribe = getMethodDescribe("addTheme"); + boolean result = themeService.addTheme(theme); + if (result){ + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe); + } + } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON,operateType = OperateType.UPDATE) + @PutMapping("/updateTheme") + @ApiOperation("修改主题") + public HttpResult updateTheme(@Validated ThemeParam.ThemeUpdateParam theme) { + String methodDescribe = getMethodDescribe("updateTheme"); + boolean result = themeService.updateTheme(theme); + if (result){ + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe); + } + } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON,operateType = OperateType.DELETE) + @DeleteMapping("/deleteTheme") + @ApiOperation("删除主题") + @ApiImplicitParam(name = "id", value = "主题id", required = true) + public HttpResult deleteTheme(@RequestParam @Validated String id) { + String methodDescribe = getMethodDescribe("deleteTheme"); + LogUtil.njcnDebug(log, "{},删除的主题id为:{}", methodDescribe, id); + boolean result = themeService.deleteTheme(id); + if (result){ + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe); + } + } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON,operateType = OperateType.UPDATE) + @PutMapping("/activateTheme") + @ApiOperation("激活主题") + @ApiImplicitParam(name = "id", value = "主题id", required = true) + public HttpResult activateTheme(@RequestParam @Validated String id) { + String methodDescribe = getMethodDescribe("activateTheme"); + LogUtil.njcnDebug(log, "{},启用的主题id为:{}", methodDescribe, id); + boolean result = themeService.activateTheme(id); + if (result){ + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe); + } + } + + + +} + diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/AreaMapper.java b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/AreaMapper.java new file mode 100644 index 000000000..60ee6dbf2 --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/AreaMapper.java @@ -0,0 +1,71 @@ +package com.njcn.system.mapper; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.njcn.system.pojo.dto.AreaTreeDTO; +import com.njcn.system.pojo.po.Area; +import com.njcn.system.pojo.vo.AreaTreeVO; +import io.swagger.annotations.ApiModelProperty; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

    + * Mapper 接口 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface AreaMapper extends BaseMapper { + + /** + * + * @return 行政区域树(首次) + */ + List getAreaTree(@Param("id")String id,@Param("type") Integer type,@Param("state")Integer state); + + /** + * + * @return 行政区域树(首次) + */ + List getAreaIdTree(@Param("type") Integer type,@Param("state")Integer state); + + /** + * 查询父节点的所有上层节点 + * @param id + * @return 父节点的所有上层节点 + */ + String getIdString(@Param("id")String id); + + /** + * + * @param ids id + * @param state 状态 + * @return 返回的结果 + */ + List selectPid(@Param("ids")List ids,@Param("state")Integer state); + + /** + * + * @param ids id + * @param state 状态 + * @return 返回的结果 + */ + List getPid(@Param("ids")List ids,@Param("state")Integer state); + + /** + * + * @return 行政区域树(首次) + */ + List getAreaDeptTree(@Param("type") Integer type, @Param("state")Integer state); + + /** + * 查询所有区域 + * @return + */ + List getAreaAll(); + +} diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/ConfigMapper.java b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/ConfigMapper.java new file mode 100644 index 000000000..fc16262c8 --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/ConfigMapper.java @@ -0,0 +1,16 @@ +package com.njcn.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.njcn.system.pojo.po.Config; + +/** + *

    + * Mapper 接口 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface ConfigMapper extends BaseMapper { + +} diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/DictDataMapper.java b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/DictDataMapper.java new file mode 100644 index 000000000..f5b724cc9 --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/DictDataMapper.java @@ -0,0 +1,47 @@ +package com.njcn.system.mapper; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.njcn.system.pojo.po.DictData; +import com.njcn.system.pojo.po.DictType; +import com.njcn.system.pojo.vo.DictDataVO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

    + * Mapper 接口 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface DictDataMapper extends BaseMapper { + + /** + * 分页查询字典数据 + * @param page 分页数据 + * @param queryWrapper 查询条件 + * @return 字典数据 + */ + Page page(@Param("page")Page page, @Param("ew")QueryWrapper queryWrapper); + + /** + * @param dictypeName 字典类型名称 + * @return 根据字典类型名称查询字典数据 + */ + List getDicDataByTypeName(@Param("dictypeName")String dictypeName); + + DictData getDicDataByName(@Param("dicName")String dicName); + + /** + * 根据字典类型名称&数据名称获取字典数据 + * + * @param dicTypeName 字典类型名称 + * @param dicDataName 字典数据名称 + * @return 字典数据 + */ + DictData getDicDataByNameAndTypeName(@Param("dicTypeName")String dicTypeName, @Param("dicDataName")String dicDataName); +} diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/DictTypeMapper.java b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/DictTypeMapper.java new file mode 100644 index 000000000..84d30047f --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/DictTypeMapper.java @@ -0,0 +1,25 @@ +package com.njcn.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.njcn.system.pojo.po.DictData; +import com.njcn.system.pojo.po.DictType; +import com.njcn.system.pojo.vo.DictDataCache; + +import java.util.List; + +/** + *

    + * Mapper 接口 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface DictTypeMapper extends BaseMapper { + + /** + * 查询所有的字典简单信息 + * @return 字典信息 + */ + List dictDataCache(); +} diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/MxGraphMapper.java b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/MxGraphMapper.java new file mode 100644 index 000000000..6f9a9b037 --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/MxGraphMapper.java @@ -0,0 +1,13 @@ +package com.njcn.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.njcn.system.pojo.po.MxGraph; + +/** + * pqs + * + * @author cdf + * @date 2022/1/26 + */ +public interface MxGraphMapper extends BaseMapper { +} diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/ResourceMapper.java b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/ResourceMapper.java new file mode 100644 index 000000000..a187d6705 --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/ResourceMapper.java @@ -0,0 +1,16 @@ +package com.njcn.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.njcn.system.pojo.po.Resource; + +/** + *

    + * Mapper 接口 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface ResourceMapper extends BaseMapper { + +} diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/TaskMapper.java b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/TaskMapper.java new file mode 100644 index 000000000..e4126568e --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/TaskMapper.java @@ -0,0 +1,16 @@ +package com.njcn.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.njcn.system.pojo.po.Task; + +/** + *

    + * Mapper 接口 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface TaskMapper extends BaseMapper { + +} diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/ThemeMapper.java b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/ThemeMapper.java new file mode 100644 index 000000000..7fce6c8c7 --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/ThemeMapper.java @@ -0,0 +1,16 @@ +package com.njcn.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.njcn.system.pojo.po.Theme; + +/** + *

    + * Mapper 接口 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface ThemeMapper extends BaseMapper { + +} diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/AreaMapper.xml b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/AreaMapper.xml new file mode 100644 index 000000000..b5d0f4239 --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/AreaMapper.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/ConfigMapper.xml b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/ConfigMapper.xml new file mode 100644 index 000000000..d138f6edd --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/ConfigMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/DictDataMapper.xml b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/DictDataMapper.xml new file mode 100644 index 000000000..8a5686862 --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/DictDataMapper.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/DictTypeMapper.xml b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/DictTypeMapper.xml new file mode 100644 index 000000000..6d72e0ba9 --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/DictTypeMapper.xml @@ -0,0 +1,23 @@ + + + + + + + diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/ResourceMapper.xml b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/ResourceMapper.xml new file mode 100644 index 000000000..d28a33b19 --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/ResourceMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/TaskMapper.xml b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/TaskMapper.xml new file mode 100644 index 000000000..97a49e1e1 --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/TaskMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/ThemeMapper.xml b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/ThemeMapper.xml new file mode 100644 index 000000000..035adce5a --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/ThemeMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/service/IAreaService.java b/pqs-system/system-boot/src/main/java/com/njcn/system/service/IAreaService.java new file mode 100644 index 000000000..2c418f22a --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/service/IAreaService.java @@ -0,0 +1,106 @@ +package com.njcn.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.system.pojo.dto.AreaTreeDTO; +import com.njcn.system.pojo.param.AreaParam; +import com.njcn.system.pojo.param.DictTypeParam; +import com.njcn.system.pojo.po.Area; +import com.njcn.system.pojo.vo.AreaTreeVO; + +import java.util.List; + +/** + *

    + * 服务类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface IAreaService extends IService { + + /** + * 根据前台传递参数,分页查询行政区域信息 + * + * @param queryParam 查询参数 + * @return 行政区域列表 + */ + Page listDictData(AreaParam.QueryParam queryParam); + + /** + * 根据行政区域id查询详情 + * + * @param id 行政区域id + * @return 行政区域详情详情 + */ + Area selectIdArea(String id); + + /** + * 根据行政区域id查询详情 + * + * @param list 行政区域id集合 + * @return 行政区域详情详情 + */ + List selectAreaByList(List list); + + /** + * + */ + List selectPid(List ids); + + /** + * 行政区域树 + * + * @param type 区域类型 + * @return 树形结构 + */ + List areaTree(String id, Integer type); + + /** + * 新增企业区域 + * @param areaParam 企业区域 + * @return 新增结果 + */ + boolean addAreaParam(AreaParam areaParam); + + /** + * 修改企业区域 + * @param updateParam 企业区域数据 + * @return 操作结果 + */ + boolean updateArea(AreaParam.AreaUpdateParam updateParam); + + /** + * 批量逻辑删除企业区域数据 + * @param ids 企业区域id集合 + * @return 操作结果 + */ + boolean deleteArea(List ids); + + /** + * 行政区域树 + * + * @param type 区域类型 + * @return 树形结构 + */ + List areaDeptTree(String id, Integer type); + + /** + * 根据区域id获取省份信息 + * + * @param type 区域类型 + * @return 树形结构 + */ + Area areaPro(String id, Integer type); + + List getDeptIdAreaTree(); + + /** + * 根据行政区域名称查询详细 + * + * @param name 行政区域名称 + * @return 行政区域详情 + */ + Area selectAreaByName(String name); +} diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/service/IConfigService.java b/pqs-system/system-boot/src/main/java/com/njcn/system/service/IConfigService.java new file mode 100644 index 000000000..a05f09f85 --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/service/IConfigService.java @@ -0,0 +1,16 @@ +package com.njcn.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.system.pojo.po.Config; + +/** + *

    + * 服务类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface IConfigService extends IService { + +} diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/service/IDictDataService.java b/pqs-system/system-boot/src/main/java/com/njcn/system/service/IDictDataService.java new file mode 100644 index 000000000..3fec09e81 --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/service/IDictDataService.java @@ -0,0 +1,102 @@ +package com.njcn.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.system.pojo.param.DictDataParam; +import com.njcn.system.pojo.po.DictData; +import com.njcn.system.pojo.po.DictType; +import com.njcn.system.pojo.vo.DictDataVO; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + +/** + *

    + * 服务类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface IDictDataService extends IService { + + /** + * 根据前台传递参数,分页查询字典数据 + * @param queryParam 查询参数 + * @return 字典列表 + */ + Page listDictData(DictDataParam.DictDataQueryParam queryParam); + + /** + * 新增数据字典 + * @param dictDataParam 字典数据 + * @return 操作结果 + */ + boolean addDictData(DictDataParam dictDataParam); + + /** + * 更新字典数据 + * @param updateParam 字典数据 + * @return 操作结果 + */ + boolean updateDictData(DictDataParam.DictDataUpdateParam updateParam); + + /** + * 批量逻辑删除字典数据 + * @param ids 字典id集合 + * @return 操作结果 + */ + boolean deleteDictData(List ids); + + /** + * 根据字典类型id查询字典信息 + */ + Page getTypeIdData(DictDataParam.DicTypeIdQueryParam queryParam); + + /** + * + * @param dicIndex 字典id + * @return 根据字典id查询字典数据 + */ + DictData getDicDataById(String dicIndex); + + /** + * + * @param dictypeName 字典类型名称 + * @return 根据字典类型名称查询字典数据 + */ + List getDicDataByTypeName(String dictypeName); + + /** + * + * @param dicName 字典名称 + * @return 根据字典名称查询字典数据 + */ + DictData getDicDataByName(String dicName); + + /** + * 根据系统获取指标参数 + * @return 操作结果 + */ + List getLoadTypeBySys(); + + /** + * 根据字典类型名称&数据名称获取字典数据 + * + * @param dicTypeName 字典类型名称 + * @param dicDataName 字典数据名称 + * @return 字典数据 + */ + DictData getDicDataByNameAndTypeName(String dicTypeName, String dicDataName); + + /** + * 后台新增字典数据 + * @param dicTypeName 类型名称 + * @param dicDataName 数据名称 + * @return 新增后的字典数据 + */ + DictData addDictData(String dicTypeName, String dicDataName); + +} diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/service/IDictTypeService.java b/pqs-system/system-boot/src/main/java/com/njcn/system/service/IDictTypeService.java new file mode 100644 index 000000000..6eaf35075 --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/service/IDictTypeService.java @@ -0,0 +1,67 @@ +package com.njcn.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.common.pojo.dto.SimpleDTO; +import com.njcn.common.pojo.dto.SimpleTreeDTO; +import com.njcn.system.pojo.param.DictTypeParam; +import com.njcn.system.pojo.po.DictType; + +import java.util.List; + +/** + * @author hongawen + * @since 2021-12-13 + */ +public interface IDictTypeService extends IService { + + /** + * 根据前台传递参数,分页查询字典类型数据 + * @param queryParam 查询参数 + * @return 字典列表 + */ + Page listDictTypes(DictTypeParam.DictTypeQueryParam queryParam); + + /** + * 新增字典类型数据 + * + * @param dictTypeParam 字典类型数据 + * @return 操作结果 + */ + boolean addDictType(DictTypeParam dictTypeParam); + + /** + * 修改字典类型 + * + * @param updateParam 字典类型数据 + * @return 操作结果 + */ + boolean updateDictType(DictTypeParam.DictTypeUpdateParam updateParam); + + /** + * 批量逻辑删除字典类型数据 + * @param ids id集合 + * @return 操作结果 + */ + boolean deleteDictType(List ids); + + /** + * 获取所有字典数据基础信息 + * @return 返回所有字典数据 + */ + List dictDataCache(); + + /** + * 根据名称获取字典类型数据 + * @param dicTypeName 类型名称 + * @return 类型数据 + */ + DictType getByName(String dicTypeName); + + /** + * 根据名称新增字典类型数据 + * @param dicTypeName 类型名称 + * @return 类型数据 + */ + DictType addByName(String dicTypeName); +} diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/service/IMxGraphService.java b/pqs-system/system-boot/src/main/java/com/njcn/system/service/IMxGraphService.java new file mode 100644 index 000000000..e82eee6dc --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/service/IMxGraphService.java @@ -0,0 +1,33 @@ +package com.njcn.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.system.pojo.param.MxGraphParam; +import com.njcn.system.pojo.po.MxGraph; + +import java.util.List; + +/** + * pqs + * + * @author cdf + * @date 2022/1/26 + */ +public interface IMxGraphService extends IService { + + /** + * 新增组态 + * @author cdf + * @date 2022/1/26 + */ + boolean addKingView(MxGraphParam mxGraphParam); + + /** + * + * @author cdf + * @date 2022/1/26 + */ + List getKingViewList(); + + + MxGraph getKingViewById(String id); +} diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/service/IResourceService.java b/pqs-system/system-boot/src/main/java/com/njcn/system/service/IResourceService.java new file mode 100644 index 000000000..12087d779 --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/service/IResourceService.java @@ -0,0 +1,16 @@ +package com.njcn.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.system.pojo.po.Resource; + +/** + *

    + * 服务类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface IResourceService extends IService { + +} diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/service/ITaskService.java b/pqs-system/system-boot/src/main/java/com/njcn/system/service/ITaskService.java new file mode 100644 index 000000000..7386461dd --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/service/ITaskService.java @@ -0,0 +1,16 @@ +package com.njcn.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.system.pojo.po.Task; + +/** + *

    + * 服务类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface ITaskService extends IService { + +} diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/service/IThemeService.java b/pqs-system/system-boot/src/main/java/com/njcn/system/service/IThemeService.java new file mode 100644 index 000000000..5b5f60a4c --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/service/IThemeService.java @@ -0,0 +1,88 @@ +package com.njcn.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.system.pojo.param.ThemeParam; +import com.njcn.system.pojo.po.Theme; +import com.sun.org.apache.xpath.internal.operations.Bool; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +/** + *

    + * 服务类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface IThemeService extends IService { + + /** + * 功能描述: 新增主题 + * TODO + * + * @param themeParam + * @return java.lang.Boolean + * @author xy + * @date 2022/1/12 14:13 + */ + boolean addTheme(ThemeParam themeParam); + + /** + * 功能描述: 修改主题 + * TODO + * + * @param themeParam + * @return boolean + * @author xy + * @date 2022/1/13 11:30 + */ + boolean updateTheme(ThemeParam.ThemeUpdateParam themeParam); + + /** + * 功能描述: 获取所有主题 + * TODO + * + * @param + * @return java.util.List + * @author xy + * @date 2022/1/12 15:38 + */ + List getAllThemes(); + + /** + * 功能描述: 获取当前主题 + * TODO + * + * @param + * @return com.njcn.system.pojo.po.Theme + * @author xy + * @date 2022/1/12 15:39 + */ + Theme getTheme(); + + /** + * 功能描述: 删除主题 + * TODO + * + * @param id + * @return boolean + * @author xy + * @date 2022/1/12 16:48 + */ + boolean deleteTheme(String id); + + /** + * 功能描述: 激活主题 + * TODO + * + * @param id + * @return boolean + * @author xy + * @date 2022/1/12 16:48 + */ + boolean activateTheme(String id); + + +} diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/AreaServiceImpl.java b/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/AreaServiceImpl.java new file mode 100644 index 000000000..7ff04fab2 --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/AreaServiceImpl.java @@ -0,0 +1,280 @@ +package com.njcn.system.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.njcn.common.pojo.enums.common.DataStateEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.system.enums.SystemResponseEnum; +import com.njcn.system.mapper.AreaMapper; +import com.njcn.system.pojo.dto.AreaTreeDTO; +import com.njcn.system.pojo.param.AreaParam; +import com.njcn.system.pojo.po.Area; +import com.njcn.system.pojo.vo.AreaTreeVO; +import com.njcn.system.service.IAreaService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.user.api.DeptFeignClient; +import com.njcn.user.pojo.po.Dept; +import com.njcn.web.factory.PageFactory; +import com.njcn.web.utils.RequestUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +/** + *

    + * 服务实现类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class AreaServiceImpl extends ServiceImpl implements IAreaService { + + private final DeptFeignClient deptFeignClient; + + @Override + public Page listDictData(AreaParam.QueryParam queryParam) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (ObjectUtil.isNotNull(queryParam)) { + //查询参数不为空,进行条件填充 + if (StrUtil.isNotBlank(queryParam.getSearchValue())) { + //部门根据名称模糊查询 + queryWrapper + .and(param -> param.like("sys_area.name", queryParam.getSearchValue())); + } + } + queryWrapper.ne("sys_area.state", DataStateEnum.DELETED.getCode()); + queryWrapper.ge("sys_area.type", queryParam.getType()); + //初始化分页数据 + return this.baseMapper.selectPage(new Page<>(PageFactory.getPageNum(queryParam), PageFactory.getPageSize(queryParam)), queryWrapper); + } + + @Override + public Area selectIdArea(String id) { + return this.baseMapper.selectById(id); + } + + @Override + public List selectAreaByList(List list) { + return this.lambdaQuery().in(Area::getId, list).list(); + } + + @Override + public List selectPid(List ids) { + return this.baseMapper.selectPid(ids, DataStateEnum.ENABLE.getCode()); + } + + @Override + public List areaTree(String id, Integer type) { + List areaTreeVOList = new ArrayList<>(); + if (id.equals("") || id == null) { + /** + * 用于首次访问区域。此处需要获取当前用户所绑定的部门下的行政区域id + * 现在默认为0 + */ + id = deptFeignClient.getAreaIdByDeptId(RequestUtil.getDeptIndex()).getData(); + } + List areaTreeVOS = new ArrayList<>(); + if (type == 1) { + areaTreeVOList = this.baseMapper.getAreaIdTree(type, DataStateEnum.ENABLE.getCode()); + List finalAreaTreeVOList = areaTreeVOList; + areaTreeVOS = areaTreeVOList.stream().filter(deptTreeVO -> + deptTreeVO.getPid().equals("0") + ).map((deptFirst) -> { + //map映射方法改变结果,调用getChildrens()方法,把一级部门deptFirst和所有数据allDept作为参数传递,查询所有下级部门 + deptFirst.setChildren(getChildrens(deptFirst, finalAreaTreeVOList)); + return deptFirst; + }).collect(Collectors.toList()); + } else { + areaTreeVOS = this.baseMapper.getAreaTree(id, type, DataStateEnum.ENABLE.getCode()); + ; + } + return areaTreeVOS; + } + + /** + * 递归查找所有企业的下级 + * + * @return + */ + private List getChildrens(AreaTreeVO areaTreeVO, List allArea) { + List chilrdenList = allArea.stream().filter(area -> { + //在全部数据中,找到和一级部门deptFirst的valueId相等的parentId + return area.getPid().equals(areaTreeVO.getId()); + }).map(deptId -> { + //递归查询找到下级部门 + deptId.setChildren(getChildrens(deptId, allArea)); + return deptId; + }).collect(Collectors.toList()); + return chilrdenList; + } + + @Override + public boolean addAreaParam(AreaParam areaParam) { + checkAreaCode(areaParam, false); + Area area = new Area(); + BeanUtil.copyProperties(areaParam, area); + if (areaParam.getPid().equals("0")) { + //上层节点 + area.setPids("0"); + } else { + String pids = "," + areaParam.getPid(); + String pid = this.baseMapper.getIdString(area.getPid()); + //上层节点 + area.setPids(pid + pids); + } + //默认为正常状态 + area.setState(DataStateEnum.ENABLE.getCode()); + return this.save(area); + } + + @Override + public boolean updateArea(AreaParam.AreaUpdateParam updateParam) { + checkAreaCode(updateParam, true); + Area area = new Area(); + if (updateParam.getPid().equals("0")) { + //上层节点 + area.setPids("0"); + } else { + String pids = "," + updateParam.getPid(); + String pid = this.baseMapper.getIdString(area.getPid()); + //上层节点 + area.setPids(pid + pids); + } + BeanUtil.copyProperties(updateParam, area); + return this.updateById(area); + } + + @Override + public boolean deleteArea(List ids) { + /** + * 查询子节点 + */ + List list = this.baseMapper.selectPid(ids, DataStateEnum.ENABLE.getCode()); + /** + * 将子节点叶添加到需要删除中 + */ + if (list.size() > 0) { + for (Area area : list) { + ids.add(area.getId()); + } + } + return this.lambdaUpdate().set(Area::getState, DataStateEnum.DELETED.getCode()).in(Area::getId, ids).update(); + } + + @Override + public List areaDeptTree(String id, Integer type) { + List areaTreeVOList = new ArrayList<>(); + List areaTreeVOS = new ArrayList<>(); + if (id.equals("") || id == null) { + /** + * 用于首次访问区域。此处需要获取当前用户所绑定的部门下的行政区域id + * 现在默认为0 + */ + + id = deptFeignClient.getAreaIdByDeptId(RequestUtil.getDeptIndex()).getData(); + } + areaTreeVOList = this.baseMapper.getAreaDeptTree(type, DataStateEnum.ENABLE.getCode()); + List finalAreaTreeVOList = areaTreeVOList; + String finalId = id; + areaTreeVOS = areaTreeVOList.stream().filter(deptTreeVO -> + deptTreeVO.getPid().equals(finalId) + ).map((deptFirst) -> { + //map映射方法改变结果,调用getChildrens()方法,把一级部门deptFirst和所有数据allDept作为参数传递,查询所有下级部门 + deptFirst.setChildren(getChildrens(deptFirst, finalAreaTreeVOList)); + return deptFirst; + }).collect(Collectors.toList()); + + return areaTreeVOS; + } + + @Override + public Area areaPro(String id, Integer type) { + QueryWrapper areaQueryWrapper = new QueryWrapper<>(); + areaQueryWrapper.eq("sys_area.id", id); + areaQueryWrapper.eq("sys_area.type", type); + areaQueryWrapper.eq("sys_area.state", DataStateEnum.ENABLE.getCode()); + Area area = this.baseMapper.selectOne(areaQueryWrapper); + if (!area.getPid().equals("0")) { + id = area.getPid(); + area = areaPro(id, type); + } + return area; + } + + @Override + public List getDeptIdAreaTree() { + + //获取当前系统登录的部门信息 + String areaId = deptFeignClient.getAreaIdByDeptId(RequestUtil.getDeptIndex()).getData(); + List areaTreeVOS = this.baseMapper.getAreaAll(); + List areaTreeVOLists = areaTreeVOS.stream().filter(areaTreeVO -> + areaTreeVO.getId().equals(areaId) + ).map((areaFirst) -> { + //map映射方法改变结果,调用getChildrens()方法,把一级部门deptFirst和所有数据allDept作为参数传递,查询所有下级部门 + areaFirst.setChildren(getChildrens(areaFirst, areaTreeVOS)); + return areaFirst; + }).collect(Collectors.toList()); + return areaTreeVOLists; + } + + @Override + public Area selectAreaByName(String name) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(Area::getName, name); + return this.baseMapper.selectOne(lambdaQueryWrapper); + } + + /** + * 递归查找所有企业的下级 + * + * @return + */ + private List getChildrens(AreaTreeDTO areaTreeVO, List allArea) { + List chilrdenList = allArea.stream().filter(area -> { + //在全部数据中,找到和一级部门deptFirst的valueId相等的parentId + return area.getPid().equals(areaTreeVO.getId()); + }).map(deptId -> { + //递归查询找到下级部门 + deptId.setChildren(getChildrens(deptId, allArea)); + return deptId; + }).collect(Collectors.toList()); + return chilrdenList; + } + + /** + * 校验参数,检查是否存在相同编码的企业区域 + */ + private void checkAreaCode(AreaParam areaParam, boolean isExcludeSelf) { + LambdaQueryWrapper dictTypeLambdaQueryWrapper = new LambdaQueryWrapper<>(); + dictTypeLambdaQueryWrapper + .eq(Area::getAreaCode, areaParam.getAreaCode()) + .eq(Area::getState, DataStateEnum.ENABLE.getCode()); + //更新的时候,需排除当前记录 + if (isExcludeSelf) { + if (areaParam instanceof AreaParam.AreaUpdateParam) { + dictTypeLambdaQueryWrapper.ne(Area::getId, ((AreaParam.AreaUpdateParam) areaParam).getId()); + } + } + int countByAccount = this.count(dictTypeLambdaQueryWrapper); + //大于等于1个则表示重复 + if (countByAccount >= 1) { + throw new BusinessException(SystemResponseEnum.AREA_CODE_REPEAT); + } + } + + +} diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/ConfigServiceImpl.java b/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/ConfigServiceImpl.java new file mode 100644 index 000000000..b430b5787 --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/ConfigServiceImpl.java @@ -0,0 +1,20 @@ +package com.njcn.system.service.impl; + +import com.njcn.system.mapper.ConfigMapper; +import com.njcn.system.pojo.po.Config; +import com.njcn.system.service.IConfigService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

    + * 服务实现类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@Service +public class ConfigServiceImpl extends ServiceImpl implements IConfigService { + +} diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/DictDataServiceImpl.java b/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/DictDataServiceImpl.java new file mode 100644 index 000000000..977ec8228 --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/DictDataServiceImpl.java @@ -0,0 +1,201 @@ +package com.njcn.system.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.njcn.common.pojo.enums.common.DataStateEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.db.constant.DbConstant; +import com.njcn.system.enums.DicDataEnum; +import com.njcn.system.enums.DicDataTypeEnum; +import com.njcn.system.enums.SystemResponseEnum; +import com.njcn.system.mapper.DictDataMapper; +import com.njcn.system.pojo.constant.SystemType; +import com.njcn.system.pojo.param.DictDataParam; +import com.njcn.system.pojo.po.Config; +import com.njcn.system.pojo.po.DictData; +import com.njcn.system.pojo.po.DictType; +import com.njcn.system.pojo.vo.DictDataVO; +import com.njcn.system.service.IConfigService; +import com.njcn.system.service.IDictDataService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.system.service.IDictTypeService; +import com.njcn.web.factory.PageFactory; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @author hongawen + * @since 2021-12-13 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class DictDataServiceImpl extends ServiceImpl implements IDictDataService { + + private final IConfigService iConfigService; + + private final IDictTypeService dictTypeService; + + @Override + public Page listDictData(DictDataParam.DictDataQueryParam queryParam) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (ObjectUtil.isNotNull(queryParam)) { + //查询参数不为空,进行条件填充 + if (StrUtil.isNotBlank(queryParam.getSearchValue())) { + //字典类型表,仅提供名称、编码模糊查询 + queryWrapper + .and(param -> param.like("sys_dict_data.name", queryParam.getSearchValue()) + .or().like("sys_dict_data.code", queryParam.getSearchValue())); + } + //排序 + if (ObjectUtil.isAllNotEmpty(queryParam.getSortBy(), queryParam.getOrderBy())) { + queryWrapper.orderBy(true, queryParam.getOrderBy().equals(DbConstant.ASC), StrUtil.toUnderlineCase(queryParam.getSortBy())); + } else { + //没有排序参数,默认根据sort字段排序,没有排序字段的,根据updateTime更新时间排序 + queryWrapper.orderBy(true, true, "sys_dict_data.sort"); + } + } + queryWrapper.ne("sys_dict_data.state", DataStateEnum.DELETED.getCode()); + //初始化分页数据 + return this.baseMapper.page(new Page<>(PageFactory.getPageNum(queryParam), PageFactory.getPageSize(queryParam)), queryWrapper); + } + + @Override + public boolean addDictData(DictDataParam dictDataParam) { + checkDicDataName(dictDataParam, false); + DictData dictData = new DictData(); + BeanUtil.copyProperties(dictDataParam, dictData); + //默认为正常状态 + dictData.setState(DataStateEnum.ENABLE.getCode()); + return this.save(dictData); + } + + @Override + public boolean updateDictData(DictDataParam.DictDataUpdateParam updateParam) { + checkDicDataName(updateParam, true); + DictData dictData = new DictData(); + BeanUtil.copyProperties(updateParam, dictData); + return this.updateById(dictData); + } + + @Override + public boolean deleteDictData(List ids) { + return this.lambdaUpdate() + .set(DictData::getState, DataStateEnum.DELETED.getCode()) + .in(DictData::getId, ids) + .update(); + } + + @Override + public Page getTypeIdData(DictDataParam.DicTypeIdQueryParam queryParam) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (ObjectUtil.isNotNull(queryParam)) { + //查询参数不为空,进行条件填充 + if (StrUtil.isNotBlank(queryParam.getSearchValue())) { + //字典类型表,仅提供名称、编码模糊查询 + queryWrapper + .and(param -> param.like("sys_dict_data.name", queryParam.getSearchValue()) + .or().like("sys_dict_data.code", queryParam.getSearchValue())); + } + //排序 + if (ObjectUtil.isAllNotEmpty(queryParam.getSortBy(), queryParam.getOrderBy())) { + queryWrapper.orderBy(true, queryParam.getOrderBy().equals(DbConstant.ASC), StrUtil.toUnderlineCase(queryParam.getSortBy())); + } else { + //没有排序参数,默认根据sort字段排序,没有排序字段的,根据updateTime更新时间排序 + queryWrapper.orderBy(true, true, "sys_dict_data.sort"); + } + } + queryWrapper.ne("sys_dict_data.state", DataStateEnum.DELETED.getCode()); + queryWrapper.eq("sys_dict_data.type_id", queryParam.getTypeId()); + //初始化分页数据 + return this.baseMapper.page(new Page<>(PageFactory.getPageNum(queryParam), PageFactory.getPageSize(queryParam)), queryWrapper); + } + + @Override + public DictData getDicDataById(String dicIndex) { + + return this.baseMapper.selectById(dicIndex); + } + + @Override + public List getDicDataByTypeName(String dictTypeName) { + return this.baseMapper.getDicDataByTypeName(dictTypeName); + } + + @Override + public DictData getDicDataByName(String dicName) { + return this.baseMapper.getDicDataByName(dicName); + } + + @Override + public List getLoadTypeBySys() { + List list = new ArrayList<>(); + Config config = iConfigService.lambdaQuery() + .eq(Config::getState, DataStateEnum.ENABLE.getCode()) + .one(); + if (Objects.equals(config.getType(), SystemType.ENTERPRISE_SYSTEM)) { + List dataList = this.baseMapper.getDicDataByTypeName(DicDataTypeEnum.INDICATOR_TYPE.getName()); + return dataList.stream().filter(item -> Objects.equals(item.getName(), DicDataEnum.XBDY_ENUM.getName()) || Objects.equals(item.getName(), DicDataEnum.XBDL_ENUM.getName())).collect(Collectors.toList()); + } else { + list = this.baseMapper.getDicDataByTypeName(DicDataTypeEnum.INDICATOR_TYPE.getName()).stream().sorted(Comparator.comparing(DictData::getSort)).collect(Collectors.toList()); + } + return list; + } + + @Override + public DictData getDicDataByNameAndTypeName(String dicTypeName, String dicDataName) { + return this.baseMapper.getDicDataByNameAndTypeName(dicTypeName,dicDataName); + } + + @Override + public DictData addDictData(String dicTypeName, String dicDataName) { + //根据type名称获取index,如果不存在该字典类型,则新增该字典类型 + DictType dictType = dictTypeService.getByName(dicTypeName); + if (Objects.isNull(dictType)) { + dictType = dictTypeService.addByName(dicTypeName); + } + DictData dictData = new DictData(); + dictData.setTypeId(dictType.getId()); + dictData.setName(dicDataName); + dictData.setCode(dicDataName); + dictData.setSort(0); + dictData.setLevel(0); + dictData.setState(DataStateEnum.ENABLE.getCode()); + this.save(dictData); + return dictData; + } + + /** + * 校验参数,检查是否存在相同名称的字典类型 + */ + private void checkDicDataName(DictDataParam dictDataParam, boolean isExcludeSelf) { + LambdaQueryWrapper dictDataLambdaQueryWrapper = new LambdaQueryWrapper<>(); + dictDataLambdaQueryWrapper + .eq(DictData::getName, dictDataParam.getName()) + .eq(DictData::getTypeId, dictDataParam.getTypeId()) + .eq(DictData::getState, DataStateEnum.ENABLE.getCode()); + //更新的时候,需排除当前记录 + if (isExcludeSelf) { + if (dictDataParam instanceof DictDataParam.DictDataUpdateParam) { + dictDataLambdaQueryWrapper.ne(DictData::getId, ((DictDataParam.DictDataUpdateParam) dictDataParam).getId()); + } + } + int countByAccount = this.count(dictDataLambdaQueryWrapper); + //大于等于1个则表示重复 + if (countByAccount >= 1) { + throw new BusinessException(SystemResponseEnum.DICT_DATA_NAME_REPEAT); + } + } +} diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/DictTypeServiceImpl.java b/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/DictTypeServiceImpl.java new file mode 100644 index 000000000..fbc08523c --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/DictTypeServiceImpl.java @@ -0,0 +1,157 @@ +package com.njcn.system.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.njcn.common.pojo.dto.SimpleDTO; +import com.njcn.common.pojo.dto.SimpleTreeDTO; +import com.njcn.common.pojo.enums.common.DataStateEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.db.constant.DbConstant; +import com.njcn.system.enums.SystemResponseEnum; +import com.njcn.system.mapper.DictTypeMapper; +import com.njcn.system.pojo.param.DictTypeParam; +import com.njcn.system.pojo.po.DictData; +import com.njcn.system.pojo.po.DictType; +import com.njcn.system.pojo.vo.DictDataCache; +import com.njcn.system.service.IDictTypeService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.web.factory.PageFactory; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author hongawen + * @since 2021-12-13 + */ +@Service +@RequiredArgsConstructor +public class DictTypeServiceImpl extends ServiceImpl implements IDictTypeService { + + @Override + public Page listDictTypes(DictTypeParam.DictTypeQueryParam queryParam) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (ObjectUtil.isNotNull(queryParam)) { + //查询参数不为空,进行条件填充 + if (StrUtil.isNotBlank(queryParam.getSearchValue())) { + //字典类型表,仅提供名称、编码模糊查询 + queryWrapper + .and(param -> param.like("sys_dict_type.name", queryParam.getSearchValue()) + .or().like("sys_dict_type.code", queryParam.getSearchValue()) + ); + } + //排序 + if (ObjectUtil.isAllNotEmpty(queryParam.getSortBy(), queryParam.getOrderBy())) { + queryWrapper.orderBy(true, queryParam.getOrderBy().equals(DbConstant.ASC), StrUtil.toUnderlineCase(queryParam.getSortBy())); + } else { + //没有排序参数,默认根据sort字段排序,没有排序字段的,根据updateTime更新时间排序 + queryWrapper.orderBy(true, true, "sys_dict_type.sort"); + } + } + queryWrapper.ne("sys_dict_type.state", DataStateEnum.DELETED.getCode()); + return this.baseMapper.selectPage(new Page<>(PageFactory.getPageNum(queryParam), PageFactory.getPageSize(queryParam)), queryWrapper); + } + + @Override + public boolean addDictType(DictTypeParam dictTypeParam) { + checkDicTypeName(dictTypeParam, false); + DictType dictType = new DictType(); + BeanUtil.copyProperties(dictTypeParam, dictType); + //默认为正常状态 + dictType.setState(DataStateEnum.ENABLE.getCode()); + return this.save(dictType); + } + + @Override + public boolean updateDictType(DictTypeParam.DictTypeUpdateParam updateParam) { + checkDicTypeName(updateParam, true); + DictType dictType = new DictType(); + BeanUtil.copyProperties(updateParam, dictType); + return this.updateById(dictType); + } + + @Override + public boolean deleteDictType(List ids) { + return this.lambdaUpdate() + .set(DictType::getState, DataStateEnum.DELETED.getCode()) + .in(DictType::getId, ids) + .update(); + } + + + @Override + public List dictDataCache() { + List allDictData = this.baseMapper.dictDataCache(); + Map> dictDataCacheMap = allDictData.stream() + .collect(Collectors.groupingBy(dictDataCache -> dictDataCache.getTypeId())); + List dictTypeList = dictDataCacheMap.keySet().stream().map(typeId -> { + SimpleTreeDTO simpleTreeDTO = new SimpleTreeDTO(); + List dictDataCaches = dictDataCacheMap.get(typeId); + List simpleDTOs = dictDataCaches.stream().map(dictDataCache -> { + simpleTreeDTO.setCode(dictDataCache.getTypeCode()); + simpleTreeDTO.setId(dictDataCache.getTypeId()); + simpleTreeDTO.setName(dictDataCache.getTypeName()); + SimpleDTO simpleDTO = new SimpleDTO(); + simpleDTO.setCode(dictDataCache.getCode()); + simpleDTO.setId(dictDataCache.getId()); + simpleDTO.setName(dictDataCache.getName()); + simpleDTO.setSort(dictDataCache.getSort()); + return simpleDTO; + }).collect(Collectors.toList()); + + simpleTreeDTO.setChildren(simpleDTOs); + return simpleTreeDTO; + }).collect(Collectors.toList()); + return dictTypeList; + } + + @Override + public DictType getByName(String dicTypeName) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(DictType::getName, dicTypeName) + .eq(DictType::getState, DataStateEnum.ENABLE.getCode()); + return this.baseMapper.selectOne(lambdaQueryWrapper); + } + + @Override + public DictType addByName(String dicTypeName) { + DictType dictType = new DictType(); + dictType.setName(dicTypeName); + dictType.setCode(dicTypeName); + dictType.setSort(0); + dictType.setOpenDescribe(0); + dictType.setOpenLevel(0); + dictType.setState(DataStateEnum.ENABLE.getCode()); + this.save(dictType); + return dictType; + } + + /** + * 校验参数,检查是否存在相同名称的字典类型 + */ + private void checkDicTypeName(DictTypeParam dictTypeParam, boolean isExcludeSelf) { + LambdaQueryWrapper dictTypeLambdaQueryWrapper = new LambdaQueryWrapper<>(); + dictTypeLambdaQueryWrapper + .eq(DictType::getName, dictTypeParam.getName()) + .eq(DictType::getState, DataStateEnum.ENABLE.getCode()); + //更新的时候,需排除当前记录 + if (isExcludeSelf) { + if (dictTypeParam instanceof DictTypeParam.DictTypeUpdateParam) { + dictTypeLambdaQueryWrapper.ne(DictType::getId, ((DictTypeParam.DictTypeUpdateParam) dictTypeParam).getId()); + } + } + int countByAccount = this.count(dictTypeLambdaQueryWrapper); + //大于等于1个则表示重复 + if (countByAccount >= 1) { + throw new BusinessException(SystemResponseEnum.DICT_TYPE_NAME_REPEAT); + } + } +} diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/MxGraphServiceImpl.java b/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/MxGraphServiceImpl.java new file mode 100644 index 000000000..d424c646c --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/MxGraphServiceImpl.java @@ -0,0 +1,47 @@ +package com.njcn.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.common.pojo.enums.common.DataStateEnum; +import com.njcn.system.mapper.MxGraphMapper; +import com.njcn.system.pojo.param.MxGraphParam; +import com.njcn.system.pojo.po.MxGraph; +import com.njcn.system.service.IMxGraphService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * pqs + * + * @author cdf + * @date 2022/1/26 + */ +@Service +@RequiredArgsConstructor +public class MxGraphServiceImpl extends ServiceImpl implements IMxGraphService { + + private final MxGraphMapper mxGraphMapper; + + @Override + public boolean addKingView(MxGraphParam mxGraphParam) { + MxGraph mxGraph = new MxGraph(); + BeanUtils.copyProperties(mxGraphParam,mxGraph); + mxGraph.setState(DataStateEnum.ENABLE.getCode()); + return this.save(mxGraph); + } + + @Override + public List getKingViewList() { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.orderByAsc(MxGraph::getSort); + return this.list(lambdaQueryWrapper); + } + + @Override + public MxGraph getKingViewById(String id) { + return this.getById(id); + } +} diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/ResourceServiceImpl.java b/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/ResourceServiceImpl.java new file mode 100644 index 000000000..5369db26a --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/ResourceServiceImpl.java @@ -0,0 +1,20 @@ +package com.njcn.system.service.impl; + +import com.njcn.system.mapper.ResourceMapper; +import com.njcn.system.pojo.po.Resource; +import com.njcn.system.service.IResourceService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

    + * 服务实现类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@Service +public class ResourceServiceImpl extends ServiceImpl implements IResourceService { + +} diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/TaskServiceImpl.java b/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/TaskServiceImpl.java new file mode 100644 index 000000000..fe6a0d4f4 --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/TaskServiceImpl.java @@ -0,0 +1,20 @@ +package com.njcn.system.service.impl; + +import com.njcn.system.mapper.TaskMapper; +import com.njcn.system.pojo.po.Task; +import com.njcn.system.service.ITaskService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

    + * 服务实现类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@Service +public class TaskServiceImpl extends ServiceImpl implements ITaskService { + +} diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/ThemeServiceImpl.java b/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/ThemeServiceImpl.java new file mode 100644 index 000000000..403a87a62 --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/ThemeServiceImpl.java @@ -0,0 +1,139 @@ +package com.njcn.system.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.common.pojo.enums.common.DataStateEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.system.enums.SystemResponseEnum; +import com.njcn.system.enums.ThemeEnum; +import com.njcn.system.mapper.ThemeMapper; +import com.njcn.system.pojo.constant.ThemeState; +import com.njcn.system.pojo.param.DictDataParam; +import com.njcn.system.pojo.param.ThemeParam; +import com.njcn.system.pojo.po.DictData; +import com.njcn.system.pojo.po.Theme; +import com.njcn.system.service.IThemeService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import sun.misc.BASE64Encoder; + +import java.io.IOException; +import java.util.List; +import java.util.Objects; + +/** + *

    + * 服务实现类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@Service +public class ThemeServiceImpl extends ServiceImpl implements IThemeService { + + @Override + public boolean addTheme(ThemeParam themeParam) { + checkThemeParam(themeParam,false); + Theme theme = new Theme(); + theme.setName(themeParam.getName()); + theme.setColor(themeParam.getColor()); + theme.setActive(ThemeState.INACTIVATED); + theme.setRemark(themeParam.getRemark()); + theme.setState(ThemeState.NORMAL); + theme.setLogoUrl(generateBase64(themeParam.getLogoFile())); + theme.setFaviconUrl(generateBase64(themeParam.getFaviconFile())); + return this.save(theme); + } + + @Override + public boolean updateTheme(ThemeParam.ThemeUpdateParam themeParam) { + checkThemeParam(themeParam,true); + Theme theme = new Theme(); + theme.setLogoUrl(generateBase64(themeParam.getLogoFile())); + theme.setFaviconUrl(generateBase64(themeParam.getFaviconFile())); + BeanUtil.copyProperties(themeParam, theme); + return this.updateById(theme); + } + + @Override + public List getAllThemes() { + return this.lambdaQuery().eq(Theme::getState,ThemeState.NORMAL).select().list(); + } + + @Override + public Theme getTheme() { + return this.lambdaQuery() + .eq(Theme::getActive,ThemeState.ACTIVATION).one(); + } + + @Override + public boolean deleteTheme(String id) { + return this.lambdaUpdate() + .set(Theme::getState, ThemeState.DELETE) + .in(Theme::getId,id) + .update(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean activateTheme(String id) { + this.lambdaUpdate() + .eq(Theme::getActive,ThemeState.ACTIVATION) + .set(Theme::getActive, ThemeState.INACTIVATED) + .update(); + return this.lambdaUpdate() + .set(Theme::getActive, ThemeState.ACTIVATION) + .in(Theme::getId,id) + .update(); + } + + /** + * 校验参数, + * 1.检查是否存在相同名称的主题 + * 2.检查图片是否为空 + */ + private void checkThemeParam(ThemeParam themeParam, boolean isExcludeSelf) { + if (themeParam.getLogoFile().isEmpty()) { + throw new BusinessException(ThemeEnum.LOGO_FILE_BLANK); + } + if (themeParam.getFaviconFile().isEmpty()) { + throw new BusinessException(ThemeEnum.FAVICON_FILE_BLANK); + } + LambdaQueryWrapper themeLambdaQueryWrapper = new LambdaQueryWrapper<>(); + themeLambdaQueryWrapper + .eq(Theme::getName, themeParam.getName()) + .eq(Theme::getState, ThemeState.NORMAL); + //更新的时候,需排除当前记录 + if (isExcludeSelf) { + if (themeParam instanceof ThemeParam.ThemeUpdateParam) { + themeLambdaQueryWrapper.ne(Theme::getId, ((ThemeParam.ThemeUpdateParam) themeParam).getId()); + } + } + int countByAccount = this.count(themeLambdaQueryWrapper); + //大于等于1个则表示重复 + if (countByAccount >= 1) { + throw new BusinessException(ThemeEnum.SAME_THEME_NAME); + } + } + + /** + * MultipartFile转换成base64 + */ + public static String generateBase64(MultipartFile file){ + String base64EncoderImg= null; + try { + BASE64Encoder bEncoder=new BASE64Encoder(); + String[] suffixArra=file.getOriginalFilename().split("\\."); + String preffix="data:image/jpg;base64,".replace("jpg", suffixArra[suffixArra.length - 1]); + base64EncoderImg = preffix + bEncoder.encode(file.getBytes()).replaceAll("[\\s*\t\n\r]", ""); + } catch (IOException e) { + e.getMessage(); + } + return base64EncoderImg; + } + + +} diff --git a/pqs-system/system-boot/src/main/resources/bootstrap.yml b/pqs-system/system-boot/src/main/resources/bootstrap.yml new file mode 100644 index 000000000..787ffe193 --- /dev/null +++ b/pqs-system/system-boot/src/main/resources/bootstrap.yml @@ -0,0 +1,48 @@ +#当前服务的基本信息 +microservice: + ename: @artifactId@ + name: '@name@' + version: @version@ + sentinel: + url: @sentinel.url@ + gateway: + url: @gateway.url@ +server: + port: 10207 +#feign接口开启服务熔断降级处理 +feign: + sentinel: + enabled: true +spring: + application: + name: @artifactId@ + #nacos注册中心以及配置中心的指定 + cloud: + nacos: + discovery: + server-addr: @nacos.url@ + namespace: @nacos.namespace@ + config: + server-addr: @nacos.url@ + namespace: @nacos.namespace@ + file-extension: yaml + shared-configs: + - data-id: share-config.yaml + refresh: true + - data-Id: share-config-datasource-db.yaml + refresh: true + main: + allow-bean-definition-overriding: true + + + +#项目日志的配置 +logging: + config: http://@nacos.url@/nacos/v1/cs/configs?tenant=@nacos.namespace@&group=DEFAULT_GROUP&dataId=logback.xml + level: + root: info + +#mybatis配置信息 +mybatis-plus: + #别名扫描 + type-aliases-package: com.njcn.system.pojo diff --git a/pqs-system/system-boot/src/test/java/com/njcn/BaseJunitTest.java b/pqs-system/system-boot/src/test/java/com/njcn/BaseJunitTest.java new file mode 100644 index 000000000..f09206f91 --- /dev/null +++ b/pqs-system/system-boot/src/test/java/com/njcn/BaseJunitTest.java @@ -0,0 +1,18 @@ +package com.njcn; + +import com.njcn.system.SystemBootMain; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.web.WebAppConfiguration; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年12月10日 15:05 + */ +@RunWith(SpringRunner.class) +@WebAppConfiguration +@SpringBootTest(classes = SystemBootMain.class) +public class BaseJunitTest { +} diff --git a/pqs-system/system-boot/src/test/java/com/njcn/DictDataTest.java b/pqs-system/system-boot/src/test/java/com/njcn/DictDataTest.java new file mode 100644 index 000000000..7ef0fd86a --- /dev/null +++ b/pqs-system/system-boot/src/test/java/com/njcn/DictDataTest.java @@ -0,0 +1,24 @@ +package com.njcn; + +import com.njcn.system.service.IDictTypeService; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年12月14日 12:55 + */ +public class DictDataTest extends BaseJunitTest{ + + @Autowired + private IDictTypeService dictTypeService; + + + + @Test + public void test(){ + dictTypeService.dictDataCache(); + } + +} diff --git a/pqs-user/pom.xml b/pqs-user/pom.xml new file mode 100644 index 000000000..471c76d09 --- /dev/null +++ b/pqs-user/pom.xml @@ -0,0 +1,24 @@ + + + + pqs + com.njcn + 1.0.0 + + 4.0.0 + pqs-user + pom + 用户服务模块聚合 + + user-api + user-boot + + + + 8 + 8 + + + \ No newline at end of file diff --git a/pqs-user/user-api/pom.xml b/pqs-user/user-api/pom.xml new file mode 100644 index 000000000..2e7cc342a --- /dev/null +++ b/pqs-user/user-api/pom.xml @@ -0,0 +1,42 @@ + + + + pqs-user + com.njcn + 1.0.0 + + 4.0.0 + user-api + 用户模块对外接口 + + + 8 + 8 + + + + + com.njcn + common-core + ${project.version} + + + com.njcn + common-db + ${project.version} + + + com.njcn + common-microservice + ${project.version} + + + com.njcn + common-poi + ${project.version} + + + + \ No newline at end of file diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/api/AuthClientFeignClient.java b/pqs-user/user-api/src/main/java/com/njcn/user/api/AuthClientFeignClient.java new file mode 100644 index 000000000..4c1a9bed2 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/api/AuthClientFeignClient.java @@ -0,0 +1,29 @@ +package com.njcn.user.api; + +import com.njcn.common.pojo.constant.ServerInfo; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.user.api.fallback.AuthClientFeignClientFallbackFactory; +import com.njcn.user.pojo.po.AuthClient; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; + + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年12月15日 13:27 + */ +@FeignClient(value = ServerInfo.USER, path = "/authClient", fallbackFactory = AuthClientFeignClientFallbackFactory.class) +public interface AuthClientFeignClient { + + + /** + * 根据客户端名称获取客户端信息 + * @param clientName 客户端名称 + * @return 客户端信息 + */ + @GetMapping("/getAuthClientByName/{clientName}") + HttpResult getAuthClientByName(@PathVariable("clientName") String clientName); + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/api/DeptFeignClient.java b/pqs-user/user-api/src/main/java/com/njcn/user/api/DeptFeignClient.java new file mode 100644 index 000000000..84f09a1c8 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/api/DeptFeignClient.java @@ -0,0 +1,48 @@ +package com.njcn.user.api; + +import com.njcn.common.pojo.constant.ServerInfo; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.user.api.fallback.DeptFeignClientFallbackFactory; +import com.njcn.user.pojo.dto.DeptDTO; +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; + +import java.util.List; + +/** + * @author denghuajun + * @date 2022/1/11 + * 部门相关业务对外接口 + */ +@FeignClient(value = ServerInfo.USER, path = "/dept", fallbackFactory = DeptFeignClientFallbackFactory.class) +public interface DeptFeignClient { + + /** + * 根据条件获取后代部门索引 + * @param id 部门id + * @param type 指定部门类型 + * @return 后代部门索引 + */ + @PostMapping("/getDeptDescendantIndexes") + HttpResult> getDeptDescendantIndexes(@RequestParam("id") String id, @RequestParam("type") List type); + + /** + * 根据区域获取部门id + * @param area + * @author xy + * @return + */ + @GetMapping("/getDeptIdByArea") + HttpResult getDeptIdByArea(@RequestParam("area") String area); + + /** + * 根据部门id获取区域id + * @param deptId + * @author denghuajun + * @return + */ + @GetMapping("/getAreaIdByDeptId") + HttpResult getAreaIdByDeptId(@RequestParam("deptId") String deptId); +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/api/UserFeignClient.java b/pqs-user/user-api/src/main/java/com/njcn/user/api/UserFeignClient.java new file mode 100644 index 000000000..ee55085d6 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/api/UserFeignClient.java @@ -0,0 +1,45 @@ +package com.njcn.user.api; + +import com.njcn.common.pojo.constant.ServerInfo; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.user.api.fallback.UserFeignClientFallbackFactory; +import com.njcn.user.pojo.dto.UserDTO; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PutMapping; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年05月08日 15:11 + */ +@FeignClient(value = ServerInfo.USER,path = "/user",fallbackFactory = UserFeignClientFallbackFactory.class) +public interface UserFeignClient { + + /** + * 根据登录名查询用户信息 + * + * @param loginName 登录名 + * @return 用户基本信息 + */ + @GetMapping("/getUserByName/{loginName}") + HttpResult getUserByName(@PathVariable("loginName") String loginName); + + /** + * 认证后根据用户名判断用户状态 + * @param loginName 登录名 + * @return 校验结果 + */ + @GetMapping("/judgeUserStatus/{loginName}") + HttpResult judgeUserStatus(@PathVariable("loginName") String loginName); + + /** + * 更新用户登录认证密码错误次数 + * + * @param loginName 登录名 + * @return null + */ + @PutMapping("/updateUserLoginErrorTimes/{loginName}") + HttpResult updateUserLoginErrorTimes(@PathVariable("loginName") String loginName); +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/api/fallback/AuthClientFeignClientFallbackFactory.java b/pqs-user/user-api/src/main/java/com/njcn/user/api/fallback/AuthClientFeignClientFallbackFactory.java new file mode 100644 index 000000000..7a35d5f01 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/api/fallback/AuthClientFeignClientFallbackFactory.java @@ -0,0 +1,43 @@ +package com.njcn.user.api.fallback; + +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.user.api.AuthClientFeignClient; +import com.njcn.user.pojo.po.AuthClient; +import com.njcn.user.utils.UserEnumUtil; +import feign.hystrix.FallbackFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年12月15日 13:28 + */ +@Slf4j +@Component +public class AuthClientFeignClientFallbackFactory implements FallbackFactory { + + /** + * 输出远程请求接口异常日志 + * @param throwable RPC请求异常 + */ + @Override + public AuthClientFeignClient create(Throwable throwable) { + //判断抛出异常是否为解码器抛出的业务异常 + Enum exceptionEnum = CommonResponseEnum.SERVICE_FALLBACK; + if(throwable.getCause() instanceof BusinessException){ + BusinessException businessException = (BusinessException) throwable.getCause(); + exceptionEnum = UserEnumUtil.getExceptionEnum(businessException.getResult()); + } + Enum finalExceptionEnum = exceptionEnum; + return new AuthClientFeignClient() { + @Override + public HttpResult getAuthClientByName(String clientName) { + log.error("{}异常,降级处理,异常为:{}","根据客户端名称获取客户端信息",throwable.toString()); + throw new BusinessException(finalExceptionEnum); + } + }; + } +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/api/fallback/DeptFeignClientFallbackFactory.java b/pqs-user/user-api/src/main/java/com/njcn/user/api/fallback/DeptFeignClientFallbackFactory.java new file mode 100644 index 000000000..1526f7639 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/api/fallback/DeptFeignClientFallbackFactory.java @@ -0,0 +1,60 @@ +package com.njcn.user.api.fallback; + +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.user.api.DeptFeignClient; +import com.njcn.user.pojo.dto.DeptDTO; +import com.njcn.user.utils.UserEnumUtil; +import feign.hystrix.FallbackFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author denghuajun + * @version 1.0.0 + * @date 2022年01月11日 10:21 + */ +@Slf4j +@Component +public class DeptFeignClientFallbackFactory implements FallbackFactory { + + + /** + * 输出远程请求接口异常日志 + * + * @param cause RPC请求异常 + */ + @Override + public DeptFeignClient create(Throwable cause) { + //判断抛出异常是否为解码器抛出的业务异常 + Enum exceptionEnum = CommonResponseEnum.SERVICE_FALLBACK; + if (cause.getCause() instanceof BusinessException) { + BusinessException businessException = (BusinessException) cause.getCause(); + exceptionEnum = UserEnumUtil.getExceptionEnum(businessException.getResult()); + } + Enum finalExceptionEnum = exceptionEnum; + return new DeptFeignClient() { + + @Override + public HttpResult> getDeptDescendantIndexes(String id, List type) { + log.error("{}异常,降级处理,异常为:{}", "根据条件获取后代部门索引", cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + + @Override + public HttpResult getDeptIdByArea(String area) { + log.error("{}异常,降级处理,异常为:{}", "根据区域索引获取部门索引", cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + + @Override + public HttpResult getAreaIdByDeptId(String deptId) { + log.error("{}异常,降级处理,异常为:{}", "根据部门索引获取区域索引", cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + }; + } +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/api/fallback/UserFeignClientFallbackFactory.java b/pqs-user/user-api/src/main/java/com/njcn/user/api/fallback/UserFeignClientFallbackFactory.java new file mode 100644 index 000000000..d2be9261d --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/api/fallback/UserFeignClientFallbackFactory.java @@ -0,0 +1,57 @@ +package com.njcn.user.api.fallback; + +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.user.api.UserFeignClient; +import com.njcn.user.pojo.dto.UserDTO; +import com.njcn.user.utils.UserEnumUtil; +import feign.hystrix.FallbackFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年08月24日 10:21 + */ +@Slf4j +@Component +public class UserFeignClientFallbackFactory implements FallbackFactory { + + + /** + * 输出远程请求接口异常日志 + * @param cause RPC请求异常 + */ + @Override + public UserFeignClient create(Throwable cause) { + //判断抛出异常是否为解码器抛出的业务异常 + Enum exceptionEnum = CommonResponseEnum.SERVICE_FALLBACK; + if(cause.getCause() instanceof BusinessException){ + BusinessException businessException = (BusinessException) cause.getCause(); + exceptionEnum = UserEnumUtil.getExceptionEnum(businessException.getResult()); + } + Enum finalExceptionEnum = exceptionEnum; + return new UserFeignClient() { + @Override + public HttpResult getUserByName(String loginName) { + log.error("{}异常,降级处理,异常为:{}","根据登录名查询用户信息",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + + @Override + public HttpResult judgeUserStatus(String loginName) { + log.error("{}异常,降级处理,异常为:{}","认证后根据用户名判断用户状态",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + + @Override + public HttpResult updateUserLoginErrorTimes(String loginName) { + log.error("{}异常,降级处理,异常为:{}","更新用户登录认证密码错误次数",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + + }; + } +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/enums/UserResponseEnum.java b/pqs-user/user-api/src/main/java/com/njcn/user/enums/UserResponseEnum.java new file mode 100644 index 000000000..14b9a5471 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/enums/UserResponseEnum.java @@ -0,0 +1,96 @@ +package com.njcn.user.enums; + +import lombok.Getter; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年04月13日 10:50 + */ +@Getter +public enum UserResponseEnum { + + /** + * A0100 ~ A0199 用于用户模块的枚举 + *

    + * 大致可以分为: + * 登录失败状态码 A0101 + 各种登录失败的原因 + * 注册失败状态码 A0103 + 各种注册失败的原因 + * 用户权限升级失败(暂时用于app账号不同角色升级) A0103 + 各种升级app权限失败的原因 + * token校验失败 A0104 + 各种token失败的原因 + * client校验失败 A0105 + 各种客户端失败的原因 + */ + LOGIN_USERNAME_NOT_FOUND("A0101", "用户不存在"), + LOGIN_USERNAME_INVALID("A0101", "用户名非法"), + LOGIN_PHONE_NOT_FOUND("A0101", "手机号不存在"), + LOGIN_WRONG_PWD("A0101", "用户名密码错误"), + LOGIN_WRONG_PHONE_CODE("A0101", "短信验证码错误"), + LOGIN_WRONG_CODE("A0101", "验证码错误"), + LOGIN_USER_DELETE("A0101", "账号已被注销"), + LOGIN_USER_LOCKED("A0101", "账号已被锁定"), + LOGIN_USER_UNAUDITED("A0101", "账号未审核"), + NEED_MODIFY_PASSWORD("A0101", "密码需修改"), + LOGIN_USER_SLEEP("A0101", "账号已休眠"), + LOGIN_USER_PASSWORD_EXPIRED("A0101", "账号密码过期"), + LOGIN_FIRST_LOGIN("A0101", "账号首次登录"), + NEED_MODIFY_PWD("A0101", "密码失效,请重置"), + LACK_USER_STRATEGY("A0101", "缺失用户策略配置"), + UNSUPPORTED_GRANT_TYPE("A0101", "非法认证方式"), + INVALID_IP("A0101", "非法IP访问系统"), + INVALID_TIME("A0101", "用户当前时间段禁止访问"), + PASSWORD_TRANSPORT_ERROR("A0101", "密码传输完整性被破坏"), + SPECIAL_PASSWORD("A0101", "密码需要包含特殊字符字母数字,长度为8-16"), + REPEAT_PASSWORD("A0101", "新密码与旧密码不能一致"), + + REGISTER_PHONE_FAIL("A0102", "该号码已注册,请检查phone字段"), + REGISTER_LOGIN_NAME_FAIL("A0102", "该账号已注册"), + REGISTER_PHONE_WRONG("A0102", "手机号非法"), + REGISTER_PASSWORD_WRONG("A0102", "账号密码非法"), + REGISTER_LOGIN_NAME_EXIST("A0102", "该登录名已存在,请检查loginName字段"), + REGISTER_HOMEPAGE_NAME_EXIST("A0102", "该驾驶舱名已存在,请检查name字段"), + FUNCTION_PATH_EXIST("A0102", "菜单路径已存在,请检查path字段"), + COMPONENT_NAME_EXIST("A0102", "组件名已存在,请检查name字段"), + + + UPDATE_ROLE_REFERRAL_CODE_ERROR("A0103", "推荐码非法"), + + PARSE_TOKEN_FORBIDDEN_JWT("A0104", "token已被禁止访问"), + REFRESH_TOKEN_EXPIRE_JWT("A0104", "refresh_token已过期"), + + CLIENT_AUTHENTICATION_FAILED("A0105", "客户端认证失败"), + NOT_FOUND_CLIENT("A0105", "客户端不存在"), + + DEPT_MISSING("A0106", "未找到此部门"), + + DEPT_NODATA("A0107", "部门下暂无用户"), + + BIND_USER_DATA("A0108", "已绑定用户,先解绑用户"), + + CHILD_DEPT_DATA("A0109", "已绑定子部门,先解绑部门"), + + BIND_MONITOR_DATA("A0110", "已绑定监测点,先解绑监测点"), + + NO_MENU_DATA("A0111","未找到菜单"), + + CHILD_DATA("A0112","数据已绑子节点"), + + BIND_ROLE_DATA("A0113","已有角色绑定,请先解绑"), + + NO_ROLE_DATA("A0114","未找到此角色"), + + BIND_FUNCTION_DATA("A0115","已绑定资源,先解绑资源"), + + DEPT_NAME_REPEAT("A0116","部门名称重复"), + + ROLE_NAME_REPEAT("A0117","角色名称重复"); + + private final String code; + + private final String message; + + UserResponseEnum(String code, String message) { + this.code = code; + this.message = message; + } + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/enums/UserStatusEnum.java b/pqs-user/user-api/src/main/java/com/njcn/user/enums/UserStatusEnum.java new file mode 100644 index 000000000..9677b883a --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/enums/UserStatusEnum.java @@ -0,0 +1,32 @@ +package com.njcn.user.enums; + +import lombok.Getter; + +/** + * @author hongawen + * @version 1.0.0 + * @createTime 2021年05月25日 15:40 + */ +@Getter +public enum UserStatusEnum { + + /** + * 用户状态0:删除;1:正常;2:锁定;3:待审核;4:休眠;5:密码过期 + */ + DESTROY(0, "用户已注销"), + NORMAL(1, "正常"), + LOCKED(2, "用户已经被锁定"), + UNCHECK(3, "用户未审核"), + SLEEP(4, "用户已休眠"), + OVERDUE(5, "用户密码已经过期"); + + private final int code; + + private final String message; + + UserStatusEnum(int code, String message) { + this.code=code; + this.message=message; + } + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/ComponentState.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/ComponentState.java new file mode 100644 index 000000000..930abdbe5 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/ComponentState.java @@ -0,0 +1,19 @@ +package com.njcn.user.pojo.constant; + +/** + * @author 徐扬 + */ +public interface ComponentState { + + /** + * 状态 0-删除;1-正常;默认正常 + */ + int DELETE = 0; + + int ENABLE = 1; + + /** + * 顶层父类的pid + */ + String FATHER_PID = "0"; +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/DeptState.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/DeptState.java new file mode 100644 index 000000000..8b3def582 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/DeptState.java @@ -0,0 +1,15 @@ +package com.njcn.user.pojo.constant; + +/** + * @author denghuajun + * @date 2021/12/28 + * + */ +public interface DeptState { + + /** + * 部门状态 0-删除;1-正常;默认正常 + */ + int DELETE = 0; + int ENABLE = 1; +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/DeptType.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/DeptType.java new file mode 100644 index 000000000..4da885ea4 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/DeptType.java @@ -0,0 +1,16 @@ +package com.njcn.user.pojo.constant; + +/** + * @author denghuajun + * @date 2021/12/28 + * + */ +public interface DeptType { + + /** + * 部门类型 0-非自定义;1-web自定义;2-App自定义 + */ + int UNCUSTOM = 0; + int WEBCUSTOM = 1; + int APPCUSTOM = 2; +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/FunctionState.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/FunctionState.java new file mode 100644 index 000000000..c5069bdd5 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/FunctionState.java @@ -0,0 +1,36 @@ +package com.njcn.user.pojo.constant; + +/** + * @author 徐扬 + */ +public interface FunctionState { + + /** + * 权限资源状态 0-删除;1-正常;默认正常 + */ + int DELETE = 0; + + int ENABLE = 1; + + /** + * 顶层父类的pid + */ + String FATHER_PID = "0"; + + /** + * 驾驶舱父类名称 + */ + String DRIVER_NAME = "/home"; + + /** + * 权限资源类型 0-菜单、1-按钮、2-公共资源、3-服务间调用资源 + */ + int MENU = 0; + + int BUTTON = 1; + + int PUBLIC = 2; + + int IN_SERVICE = 3; + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/HomePageState.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/HomePageState.java new file mode 100644 index 000000000..178bf191f --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/HomePageState.java @@ -0,0 +1,19 @@ +package com.njcn.user.pojo.constant; + +/** + * @author 徐扬 + */ +public interface HomePageState { + + /** + * 状态 0-删除;1-正常;默认正常 + */ + int DELETE = 0; + + int ENABLE = 1; + + /** + * 默认首页 用户的id + */ + String DEFAULT_USER_ID = "0"; +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/RoleType.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/RoleType.java new file mode 100644 index 000000000..8da01d897 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/RoleType.java @@ -0,0 +1,16 @@ +package com.njcn.user.pojo.constant; + +/** + * @author 徐扬 + */ +public interface RoleType { + + /** + * 角色类型 0:超级管理员;1:管理员;2:用户 + */ + int SUPER_ADMINISTRATOR = 0; + + int ADMINISTRATOR = 1; + + int USER = 2; +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/UserDefaultPassword.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/UserDefaultPassword.java new file mode 100644 index 000000000..8acaffd48 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/UserDefaultPassword.java @@ -0,0 +1,13 @@ +package com.njcn.user.pojo.constant; + +/** + * @author 徐扬 + */ +public interface UserDefaultPassword { + + /** + * 新增用户初始密码 + */ + String DEFAULT_PASSWORD = "123456"; + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/UserState.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/UserState.java new file mode 100644 index 000000000..5061b0244 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/UserState.java @@ -0,0 +1,41 @@ +package com.njcn.user.pojo.constant; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年12月15日 15:00 + */ +public interface UserState { + + /** + * 用户状态 0:删除;1:正常;2:锁定;3:待审核;4:休眠;5:密码过期 + */ + int DELETE = 0; + int ENABLE = 1; + int LOCKED = 2; + int UNCHECK = 3; + int SLEEP = 4; + int OVERDUE = 5; + + + + /** + * 数据来源:0-外部推送 1-正常新增 + */ + int OUT_ORIGIN = 0; + int NORMAL_ORIGIN = 1; + + + /** + * 密码状态:0-不需要修改 1-需要修改 + */ + int NEEDLESS = 0; + int NEED = 1; + + + /** + * 初始密码错误次数 + */ + int ERROR_PASSWORD_TIMES = 0; + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/UserType.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/UserType.java new file mode 100644 index 000000000..f69705697 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/UserType.java @@ -0,0 +1,28 @@ +package com.njcn.user.pojo.constant; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年12月15日 19:39 + */ +public interface UserType { + + /** + * 用户类型 0:临时用户;1:正式用户 + */ + int CASUAL = 0; + + int OFFICIAL = 1; + + /** + * 用户权限类型 0:超级管理员;1:管理员;2:用户 + */ + int SUPER_ADMINISTRATOR = 0; + + int ADMINISTRATOR = 1; + + int USER = 2; + + String SUPER_ADMIN = "root"; + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/UserValidMessage.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/UserValidMessage.java new file mode 100644 index 000000000..ed2b443fb --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/constant/UserValidMessage.java @@ -0,0 +1,73 @@ +package com.njcn.user.pojo.constant; + +/** + * @author xy + * @date 2021/12/29 15:10 + */ +public interface UserValidMessage { + + String ID_NOT_BLANK = "id不能为空,请检查id参数"; + + String USERNAME_NOT_BLANK = "名称不能为空,请检查name参数"; + + String USERNAME_FORMAT_ERROR = "用户名格式错误,需中英文1-16,请检查name参数"; + + String LOGIN_NAME_NOT_BLANK = "登录名不能为空,请检查loginName参数"; + + String LOGIN_NAME_FORMAT_ERROR = "登录名格式错误,需3-16位的英文字母和数字,请检查loginName参数"; + + String PASSWORD_NOT_BLANK = "密码不能为空,请检查password参数"; + + String PASSWORD_FORMAT_ERROR = "密码格式错误,需包含特殊字符字母数字,长度为8-16,请检查password参数"; + + String DEPT_NOT_BLANK = "部门不能为空,请检查deptId参数"; + + String PHONE_FORMAT_ERROR = "电话号码格式错误,请检查phone参数"; + + String EMAIL_FORMAT_ERROR = "邮箱格式错误,请检查email参数"; + + String LIMIT_IP_START_NOT_BLANK = "起始IP不能为空,请检查limitIpStart参数"; + + String LIMIT_IP_START_FORMAT_ERROR = "起始IP格式错误,请检查limitIpStart参数"; + + String LIMIT_IP_END_NOT_BLANK = "结束IP不能为空,请检查limitIpEnd参数"; + + String LIMIT_IP_END_FORMAT_ERROR = "结束IP格式错误,请检查limitIpEnd参数"; + + String LIMIT_TIME_NOT_BLANK = "时间段不能为空,请检查limitTime参数"; + + String CASUAL_USER_NOT_BLANK = "类型不能为空"; + + String SMS_NOTICE_NOT_BLANK = "短信通知不能为空,请检查smsNotice参数"; + + String EMAIL_NOTICE_NOT_BLANK = "邮件通知不能为空,请检查emailNotice参数"; + + String PARAM_FORMAT_ERROR = "参数值非法"; + + String ROLE_NOT_BLANK = "角色不能为空,请检查role参数"; + + String PID_NOT_BLANK = "父节点不能为空,请检查pid参数"; + + String CODE_NOT_BLANK = "资源标识不能为空,请检查code参数"; + + String PATH_NOT_BLANK = "资源路径不能为空,请检查path参数"; + + String PATH_FORMAT_ERROR = "路径格式错误,请检查path参数"; + + String SORT_NOT_BLANK = "排序不能为空,请检查sort参数"; + + String TYPE_NOT_BLANK = "资源类型不能为空,请检查type参数"; + + String LAYOUT_NOT_BLANK = "模板不能为空,请检查layout参数"; + + String FUNCTION_ID_NOT_BLANK = "资源id不能为空,请检查functionId参数"; + + String FUNCTION_ID_FORMAT_ERROR = "资源id格式错误,请检查functionId参数"; + + String FUNCTION_GROUP_NOT_BLANK = "功能数组不能为空,请检查functionGroup参数"; + + String FUNCTION_GROUP_FORMAT_ERROR = "功能数组格式错误,请检查functionGroup参数"; + + String COMPONENT_CODE_NOT_BLANK = "功能组件表示不能为空,请检查code参数"; + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/dto/ComponentDTO.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/dto/ComponentDTO.java new file mode 100644 index 000000000..8a6fc08d2 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/dto/ComponentDTO.java @@ -0,0 +1,46 @@ +package com.njcn.user.pojo.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/1/19 14:56 + */ +@Data +public class ComponentDTO implements Serializable { + + @ApiModelProperty("组件Id") + private String id; + + @ApiModelProperty("资源id") + private String functionId; + + @ApiModelProperty("节点") + private String pid; + + @ApiModelProperty("功能组件名称") + private String name; + + @ApiModelProperty("功能数组") + private String functionGroup; + + @ApiModelProperty("排序") + private Integer sort; + + @ApiModelProperty("功能组件表示") + private String code; + + @ApiModelProperty("路径") + private String path; + + @ApiModelProperty("子级") + List children; + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/dto/DeptDTO.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/dto/DeptDTO.java new file mode 100644 index 000000000..032d8e0e8 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/dto/DeptDTO.java @@ -0,0 +1,37 @@ +package com.njcn.user.pojo.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2022年02月11日 14:08 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class DeptDTO implements Serializable { + + private String id; + + private String pid; + + private String pids; + + private String name; + + private String area; + + private String remark; + + /** + * 部门类型 0-非自定义;1-web自定义;2-App自定义;3-web测试 + */ + private Integer type; + + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/dto/UserDTO.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/dto/UserDTO.java new file mode 100644 index 000000000..1ee1558b4 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/dto/UserDTO.java @@ -0,0 +1,47 @@ +package com.njcn.user.pojo.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年05月08日 15:12 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserDTO { + + private String userIndex; + + private String username; + + private String nickname; + + private String password; + + /** + * 角色集合 + */ + private List roleName; + + /** + * sm4加密秘钥 + */ + private String secretKey; + + /** + * sm4中间过程校验 + */ + private String standBy; + + private String deptIndex; + + private Integer type; + + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/dto/excel/UserExcel.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/dto/excel/UserExcel.java new file mode 100644 index 000000000..65bfaf131 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/dto/excel/UserExcel.java @@ -0,0 +1,46 @@ +package com.njcn.user.pojo.dto.excel; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2022年04月06日 16:13 + */ +@Data +public class UserExcel implements Serializable { + + private String id; + + @Excel(name = "用户名", width = 20) + private String name; + + @Excel(name = "登录名", width = 20) + private String loginName; + + @Excel(name = "角色", width = 20) + private String role; + + @Excel(name = "部门", width = 20) + private String deptName; + + @Excel(name = "手机", width = 20) + private String phone; + + @Excel(name = "注册时间", format = "yyyy-MM-dd HH:mm:ss", width = 20) + private LocalDateTime registerTime; + + @Excel(name = "最后登录时间", format = "yyyy-MM-dd HH:mm:ss", width = 20) + private LocalDateTime loginTime; + + @Excel(name = "用户类型", replace = {"临时用户_0", "正式用户_1"}, width = 20) + private Integer casualUser; + + @Excel(name = "状态", replace = {"注销_0", "正常_1", "锁定_2", "待审核_3", "休眠_4", "密码过期_5"}, width = 20) + private Integer state; + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/ComponentParam.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/ComponentParam.java new file mode 100644 index 000000000..8a1d71cfb --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/ComponentParam.java @@ -0,0 +1,74 @@ +package com.njcn.user.pojo.param; + +import com.njcn.common.pojo.constant.PatternRegex; +import com.njcn.user.pojo.constant.UserValidMessage; +import com.njcn.web.constant.ValidMessage; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.hibernate.validator.constraints.Range; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; +import java.util.List; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/1/19 9:16 + */ +@Data +public class ComponentParam { + + @ApiModelProperty("资源id") + @NotBlank(message = UserValidMessage.FUNCTION_ID_NOT_BLANK) + private String functionId; + + @ApiModelProperty("节点") + @NotBlank(message = UserValidMessage.PID_NOT_BLANK) + private String pid; + + @ApiModelProperty("功能组件名称") + @NotBlank(message = UserValidMessage.USERNAME_NOT_BLANK) + @Pattern(regexp = PatternRegex.FUNCTION_NAME, message = UserValidMessage.PATH_FORMAT_ERROR) + private String name; + + @ApiModelProperty("功能数组") + @NotEmpty(message = UserValidMessage.FUNCTION_GROUP_NOT_BLANK) + private List functionGroup; + + @ApiModelProperty("排序") + @NotNull(message = UserValidMessage.SORT_NOT_BLANK) + @Range(min = 0, max = 999, message = UserValidMessage.PARAM_FORMAT_ERROR) + private Integer sort; + + @ApiModelProperty("功能组件表示") + @NotBlank(message = UserValidMessage.COMPONENT_CODE_NOT_BLANK) + private String code; + + @ApiModelProperty("路径") + private String path; + + + /** + * 组件更新操作实体 + * 需要填写的参数:组件的id + */ + @Data + @EqualsAndHashCode(callSuper = true) + public static class ComponentUpdateParam extends ComponentParam { + + @ApiModelProperty("组件Id") + @NotBlank(message = ValidMessage.ID_NOT_BLANK) + @Pattern(regexp = PatternRegex.SYSTEM_ID, message = ValidMessage.ID_FORMAT_ERROR) + private String id; + } + + + + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/DeptParam.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/DeptParam.java new file mode 100644 index 000000000..99c504636 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/DeptParam.java @@ -0,0 +1,75 @@ +package com.njcn.user.pojo.param; + +import com.njcn.common.pojo.constant.PatternRegex; +import com.njcn.web.constant.ValidMessage; +import com.njcn.web.pojo.param.BaseParam; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.*; + +/** + * @author denghuajun + * @date 2021/12/28 14:39 + * 部门 + */ +@Data +public class DeptParam { + + @ApiModelProperty("父节点") + @NotBlank(message = ValidMessage.PID_NOT_BLANK) + private String pid; + + @ApiModelProperty("行政区域id") + @NotBlank(message = ValidMessage.AREA_NOT_BLANK) + @Pattern(regexp = PatternRegex.SYSTEMS_ID, message = ValidMessage.AREA_FORMAT_ERROR) + private String area; + + + @ApiModelProperty("名称") + @NotBlank(message = ValidMessage.NAME_NOT_BLANK) + @Pattern(regexp = PatternRegex.DEPT_NAME_REGEX, message = ValidMessage.NAME_FORMAT_ERROR) + private String name; + + @ApiModelProperty("排序") + @NotNull(message = ValidMessage.SORT_NOT_NULL) + @Min(value = 0, message = ValidMessage.SORT_FORMAT_ERROR) + @Max(value = 999, message = ValidMessage.SORT_FORMAT_ERROR) + private Integer sort; + + @ApiModelProperty("部门类型 0-非自定义;1-web自定义;2-App自定义") + private Integer type; + + @ApiModelProperty("描述") + private String remark; + + + + /** + * 更新操作实体 + */ + @Data + @EqualsAndHashCode(callSuper = true) + public static class DeptUpdateParam extends DeptParam { + + /** + * 表Id + */ + @ApiModelProperty("id") + @NotBlank(message = ValidMessage.ID_NOT_BLANK) + @Pattern(regexp = PatternRegex.SYSTEM_ID, message = ValidMessage.ID_FORMAT_ERROR) + private String id; + } + + /** + * 分页查询实体 + */ + @Data + @EqualsAndHashCode(callSuper = true) + public static class QueryParam extends BaseParam { + + + + } +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/FunctionParam.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/FunctionParam.java new file mode 100644 index 000000000..66bf43b9c --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/FunctionParam.java @@ -0,0 +1,74 @@ +package com.njcn.user.pojo.param; + +import com.njcn.common.pojo.constant.PatternRegex; +import com.njcn.user.pojo.constant.UserValidMessage; +import com.njcn.web.constant.ValidMessage; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.hibernate.validator.constraints.Range; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/1/17 10:25 + */ +@Data +public class FunctionParam { + + @ApiModelProperty("节点") + @NotBlank(message = UserValidMessage.PID_NOT_BLANK) + private String pid; + + @ApiModelProperty("名称") + @NotBlank(message = UserValidMessage.USERNAME_NOT_BLANK) + @Pattern(regexp = PatternRegex.FUNCTION_NAME, message = ValidMessage.NAME_FORMAT_ERROR) + private String name; + + @ApiModelProperty("资源标识") + @NotBlank(message = UserValidMessage.CODE_NOT_BLANK) + private String code; + + @ApiModelProperty("路径") + @NotBlank(message = UserValidMessage.PATH_NOT_BLANK) + @Pattern(regexp = PatternRegex.FUNCTION_URL, message = UserValidMessage.PATH_FORMAT_ERROR) + private String path; + + @ApiModelProperty("图标") + private String icon; + + @ApiModelProperty("排序") + @NotNull(message = UserValidMessage.SORT_NOT_BLANK) + @Range(min = 0, max = 999, message = UserValidMessage.PARAM_FORMAT_ERROR) + private Integer sort; + + @ApiModelProperty("资源类型") + @NotNull(message = UserValidMessage.TYPE_NOT_BLANK) + @Range(min = 0, max = 3, message = UserValidMessage.PARAM_FORMAT_ERROR) + private Integer type; + + @ApiModelProperty("描述") + private String remark; + + /** + * 资源更新操作实体 + * 需要填写的参数:资源的id + */ + @Data + @EqualsAndHashCode(callSuper = true) + public static class FunctionUpdateParam extends FunctionParam { + + @ApiModelProperty("资源Id") + @NotBlank(message = UserValidMessage.FUNCTION_ID_NOT_BLANK) + @Pattern(regexp = PatternRegex.SYSTEM_ID, message = UserValidMessage.FUNCTION_ID_FORMAT_ERROR) + private String id; + } + + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/HomePageParam.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/HomePageParam.java new file mode 100644 index 000000000..733ba7bda --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/HomePageParam.java @@ -0,0 +1,62 @@ +package com.njcn.user.pojo.param; + +import com.njcn.common.pojo.constant.PatternRegex; +import com.njcn.user.pojo.constant.UserValidMessage; +import com.njcn.web.constant.ValidMessage; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.hibernate.validator.constraints.Range; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/1/18 16:14 + */ +@Data +public class HomePageParam { + + @ApiModelProperty("自定义页面名称") + private String name; + + @ApiModelProperty("布局模板") + @NotBlank(message = UserValidMessage.LAYOUT_NOT_BLANK) + private String layout; + + @ApiModelProperty("路径") + @NotBlank(message = UserValidMessage.PATH_NOT_BLANK) + private String path; + + @ApiModelProperty("排序") + @NotNull(message = UserValidMessage.SORT_NOT_BLANK) + @Range(min = 0, max = 999, message = UserValidMessage.PARAM_FORMAT_ERROR) + private Integer sort; + + @ApiModelProperty("图标") + private String icon; + + /** + * 首页操作实体 + * 需要填写的参数:首页的id + */ + @Data + @EqualsAndHashCode(callSuper = true) + public static class HomePageUpdateParam extends HomePageParam { + + @ApiModelProperty("首页Id") + @NotBlank(message = UserValidMessage.ID_NOT_BLANK) + @Pattern(regexp = PatternRegex.SYSTEM_ID, message = ValidMessage.ID_FORMAT_ERROR) + private String id; + } + + + + + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/RoleParam.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/RoleParam.java new file mode 100644 index 000000000..2f33cd4a1 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/RoleParam.java @@ -0,0 +1,83 @@ +package com.njcn.user.pojo.param; + +import com.njcn.common.pojo.constant.PatternRegex; +import com.njcn.web.constant.ValidMessage; +import com.njcn.web.pojo.param.BaseParam; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.*; +import java.util.List; + +/** + * @author denghuajun + * @date 2022/01/17 14:39 + * 角色 + */ +@Data +public class RoleParam { + + + + @ApiModelProperty("名称") + @NotBlank(message = ValidMessage.NAME_NOT_BLANK) + @Pattern(regexp = PatternRegex.DEPT_NAME_REGEX, message = ValidMessage.NAME_FORMAT_ERROR) + private String name; + + @ApiModelProperty("角色代码") + @NotNull(message = ValidMessage.CODE_NOT_BLANK) + private String code; + + /** + * 角色类型 0:超级管理员;1:管理员;2:普通用户 + */ + @ApiModelProperty("角色类型") + private Integer type; + + @ApiModelProperty("角色描述") + private String remark; + + + + + + + /** + * 更新操作实体 + */ + @Data + @EqualsAndHashCode(callSuper = true) + public static class RoleUpdateParam extends RoleParam { + + /** + * 表Id + */ + @ApiModelProperty("id") + @NotBlank(message = ValidMessage.ID_NOT_BLANK) + @Pattern(regexp = PatternRegex.SYSTEM_ID, message = ValidMessage.ID_FORMAT_ERROR) + private String id; + } + + /** + * 分页查询实体 + */ + @Data + @EqualsAndHashCode(callSuper = true) + public static class QueryParam extends BaseParam { + + /** + * 权限类型 + */ + private Integer type; + } + /** + * 角色的相关关联 + */ + @Data + public static class RoleFunctionComponent { + private String id; + private List idList; + + } +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/UserParam.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/UserParam.java new file mode 100644 index 000000000..dfa264a61 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/UserParam.java @@ -0,0 +1,128 @@ +package com.njcn.user.pojo.param; + +import com.njcn.common.pojo.constant.PatternRegex; +import com.njcn.user.pojo.constant.UserValidMessage; +import com.njcn.web.constant.ValidMessage; +import com.njcn.web.pojo.param.BaseParam; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.hibernate.validator.constraints.Range; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; +import java.util.List; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2021/12/29 14:56 + */ +@Data +public class UserParam { + + @ApiModelProperty("用户名") + @NotBlank(message = UserValidMessage.USERNAME_NOT_BLANK) + @Pattern(regexp = PatternRegex.USERNAME_REGEX, message = UserValidMessage.USERNAME_FORMAT_ERROR) + private String name; + + @ApiModelProperty("部门id") + private String deptId; + + @ApiModelProperty("电话号码") + @Pattern(regexp = PatternRegex.PHONE_REGEX_OR_NULL, message = UserValidMessage.PHONE_FORMAT_ERROR) + private String phone; + + @ApiModelProperty("邮箱") + @Pattern(regexp = PatternRegex.EMAIL_REGEX_OR_NULL, message = UserValidMessage.EMAIL_FORMAT_ERROR) + private String email; + + @ApiModelProperty("起始IP") + @NotBlank(message = UserValidMessage.LIMIT_IP_START_NOT_BLANK) + @Pattern(regexp = PatternRegex.IP_REGEX, message = UserValidMessage.LIMIT_IP_START_FORMAT_ERROR) + private String limitIpStart; + + @ApiModelProperty("结束IP") + @NotBlank(message = UserValidMessage.LIMIT_IP_END_NOT_BLANK) + @Pattern(regexp = PatternRegex.IP_REGEX, message = UserValidMessage.LIMIT_IP_END_FORMAT_ERROR) + private String limitIpEnd; + + @ApiModelProperty("时间段") + @NotBlank(message = UserValidMessage.LIMIT_TIME_NOT_BLANK) + private String limitTime; + + @ApiModelProperty("用户类型") + @NotNull(message = UserValidMessage.CASUAL_USER_NOT_BLANK) + @Range(min = 0, max = 1, message = UserValidMessage.PARAM_FORMAT_ERROR) + private Integer casualUser; + + @ApiModelProperty("用户权限类型") + @NotNull(message = UserValidMessage.CASUAL_USER_NOT_BLANK) + @Range(min = 0, max = 2, message = UserValidMessage.PARAM_FORMAT_ERROR) + private Integer type; + + @ApiModelProperty("短信通知") + @NotNull(message = UserValidMessage.SMS_NOTICE_NOT_BLANK) + @Range(min = 0, max = 1, message = UserValidMessage.PARAM_FORMAT_ERROR) + private Integer smsNotice; + + @ApiModelProperty("邮件通知") + @NotNull(message = UserValidMessage.EMAIL_NOTICE_NOT_BLANK) + @Range(min = 0, max = 1, message = UserValidMessage.PARAM_FORMAT_ERROR) + private Integer emailNotice; + + @ApiModelProperty("角色") + @NotEmpty(message = UserValidMessage.ROLE_NOT_BLANK) + private List role; + + /** + * 用户新增操作实体 + * + * 需要填写的参数:登录名、密码 + */ + @Data + @EqualsAndHashCode(callSuper = true) + public static class UserAddParam extends UserParam { + + @ApiModelProperty("登录名") + @NotBlank(message = UserValidMessage.LOGIN_NAME_NOT_BLANK) + @Pattern(regexp = PatternRegex.LOGIN_NAME_REGEX, message = UserValidMessage.LOGIN_NAME_FORMAT_ERROR) + private String loginName; + } + + + /** + * 用户更新操作实体 + * + * 需要填写的参数:用户的id + */ + @Data + @EqualsAndHashCode(callSuper = true) + public static class UserUpdateParam extends UserParam { + + @ApiModelProperty("用户表Id") + @NotBlank(message = UserValidMessage.ID_NOT_BLANK) + @Pattern(regexp = PatternRegex.SYSTEM_ID, message = ValidMessage.ID_FORMAT_ERROR) + private String id; + } + + /** + * 分页查询实体 + */ + @Data + @EqualsAndHashCode(callSuper = true) + public static class UserQueryParam extends BaseParam { + + @ApiModelProperty("用户类型") + @NotNull(message = UserValidMessage.CASUAL_USER_NOT_BLANK) + @Range(min = -1, max = 1, message = UserValidMessage.PARAM_FORMAT_ERROR) + private Integer casualUser; + } + + + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/UserPasswordParam.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/UserPasswordParam.java new file mode 100644 index 000000000..6082b3b3f --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/UserPasswordParam.java @@ -0,0 +1,27 @@ +package com.njcn.user.pojo.param; + +import com.njcn.user.pojo.constant.UserValidMessage; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/3/22 13:31 + */ +@Data +public class UserPasswordParam { + + @ApiModelProperty("用户名") + @NotBlank(message = UserValidMessage.USERNAME_NOT_BLANK) + private String name; + + + @ApiModelProperty("密码") + @NotBlank(message = UserValidMessage.PASSWORD_NOT_BLANK) + private String password; +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/AuthClient.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/AuthClient.java new file mode 100644 index 000000000..fb6239ea2 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/AuthClient.java @@ -0,0 +1,85 @@ +package com.njcn.user.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.njcn.db.bo.BaseEntity; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author hongawen + * @since 2021-12-15 + */ +@Data +@TableName("sys_auth_client") +public class AuthClient { + + private static final long serialVersionUID = 1L; + + /** + * 认证客户端Id + */ + private String id; + + /** + * 客户端名称 + */ + private String name; + + /** + * 资源Id列表 + */ + private String resourceIds; + + /** + * 客户端秘钥 + */ + private String clientSecret; + + /** + * 域 + */ + private String scope; + + /** + * 授权方式 + */ + private String authorizedGrantTypes; + + /** + * 回调地址 + */ + private String webServerRedirectUri; + + /** + * 权限列表 + */ + private String authorities; + + /** + * 认证令牌时效 + */ + private Integer accessTokenValidity; + + /** + * 刷新令牌时效 + */ + private Integer refreshTokenValidity; + + /** + * 扩展信息 + */ + private String additionalInformation; + + /** + * 是否自动放行 0-不放行 1-放行 + */ + private Boolean autoApprove; + + /** + * 状态:0-删除 1-正常 + */ + private Integer state; + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/Component.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/Component.java new file mode 100644 index 000000000..9b419682e --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/Component.java @@ -0,0 +1,71 @@ +package com.njcn.user.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.njcn.db.bo.BaseEntity; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * + * @author hongawen + * @since 2021-12-13 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_component") +public class Component extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * 组件Id + */ + private String id; + + /** + * 资源Id + */ + private String functionId; + + /** + * 父节点Id + */ + private String pid; + + /** + * 上层所有节点Id + */ + private String pids; + + /** + * 功能组件名称 + */ + private String name; + + /** + * 功能组件表示 + */ + private String code; + + /** + * 组件路径 + */ + private String path; + + /** + * 功能数组 + */ + private String functionGroup; + + /** + * 排序 + */ + private Integer sort; + + /** + * 状态:0-删除 1-正常 + */ + private Integer state; + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/Dept.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/Dept.java new file mode 100644 index 000000000..755c1d111 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/Dept.java @@ -0,0 +1,65 @@ +package com.njcn.user.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.njcn.db.bo.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * + * @author hongawen + * @since 2021-12-13 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_dept") +public class Dept extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * 部门表Id + */ + private String id; + + /** + * 父节点Id(0为根节点) + */ + private String pid; + + /** + * 上层所有节点Id + */ + private String pids; + + /** + * 部门名称 + */ + private String name; + + /** + * (sys_Area)行政区域Id,自定义部门无需填写部门 + */ + private String area; + + /** + * 部门类型 0-非自定义;1-web自定义;2-App自定义;3-web测试 + */ + private Integer type; + + /** + * 排序 + */ + private Integer sort; + + /** + * 部门描述 + */ + private String remark; + + /** + * 部门状态 0-删除;1-正常;默认正常 + */ + private Integer state; + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/Function.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/Function.java new file mode 100644 index 000000000..0c4c47119 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/Function.java @@ -0,0 +1,76 @@ +package com.njcn.user.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.njcn.db.bo.BaseEntity; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * + * @author hongawen + * @since 2021-12-13 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_function") +public class Function extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * 资源表Id + */ + private String id; + + /** + * 父节点(0为根节点) + */ + private String pid; + + /** + * 所有上层节点 + */ + private String pids; + + /** + * 名称 + */ + private String name; + + /** + * 资源标识 + */ + private String code; + + /** + * 路径 + */ + private String path; + + /** + * 图标(没有图标则默认为null) + */ + private String icon; + + /** + * 排序 + */ + private Integer sort; + + /** + * 资源类型:0-菜单、1-按钮、2-公共资源、3-服务间调用资源 + */ + private Integer type; + + /** + * 资源描述 + */ + private String remark; + + /** + * 资源状态:0-删除 1-正常(默认为正常) + */ + private Integer state; + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/HomePage.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/HomePage.java new file mode 100644 index 000000000..b11f699eb --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/HomePage.java @@ -0,0 +1,61 @@ +package com.njcn.user.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.njcn.db.bo.BaseEntity; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * + * @author hongawen + * @since 2021-12-13 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_home_page") +public class HomePage extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * 主页面Id + */ + private String id; + + /** + * 用户Id + */ + private String userId; + + /** + * 自定义页面名称 + */ + private String name; + + /** + * 布局魔板 + */ + private String layout; + + /** + * 路径 + */ + private String path; + + /** + * 排序 + */ + private Integer sort; + + /** + * 状态:0-删除 1-正常 + */ + private Integer state; + + /** + * 图标 + */ + private String icon; + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/Role.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/Role.java new file mode 100644 index 000000000..6e23c8fec --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/Role.java @@ -0,0 +1,50 @@ +package com.njcn.user.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.njcn.db.bo.BaseEntity; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * + * @author hongawen + * @since 2021-12-13 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_role") +public class Role extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * 角色表Id + */ + private String id; + + /** + * 角色名称 + */ + private String name; + + /** + * 角色代码,有需要用做匹配时候用(关联字典表id) + */ + private String code; + + /** + * 角色描述 + */ + private String remark; + + /** + * 角色状态0-删除;1-正常;默认正常 + */ + private Integer state; + + /** + * 角色类型0-超级管理员 1-其他管理员 2-其他用户 + */ + private Integer type; +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/RoleComponent.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/RoleComponent.java new file mode 100644 index 000000000..3bd83fdbf --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/RoleComponent.java @@ -0,0 +1,29 @@ +package com.njcn.user.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableName; + +import lombok.Data; + +/** + * + * @author hongawen + * @since 2021-12-13 + */ +@Data +@TableName("sys_role_component") +public class RoleComponent { + + private static final long serialVersionUID = 1L; + + /** + * 角色Id + */ + private String roleId; + + /** + * 组件Id + */ + private String componentId; + + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/RoleFunction.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/RoleFunction.java new file mode 100644 index 000000000..37d047964 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/RoleFunction.java @@ -0,0 +1,29 @@ +package com.njcn.user.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableName; + +import lombok.Data; + +/** + * + * @author hongawen + * @since 2021-12-13 + */ +@Data +@TableName("sys_role_function") +public class RoleFunction { + + private static final long serialVersionUID = 1L; + + /** + * 角色Id + */ + private String roleId; + + /** + * 资源Id + */ + private String functionId; + + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/User.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/User.java new file mode 100644 index 000000000..3148df1d8 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/User.java @@ -0,0 +1,146 @@ +package com.njcn.user.pojo.po; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.njcn.db.bo.BaseEntity; + +import java.time.LocalDateTime; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author hongawen + * @since 2021-12-13 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_user") +public class User extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * 用户ID + */ + private String id; + + /** + * 用户名 + */ + private String name; + + /** + * 登录名 + */ + private String loginName; + + /** + * 密码 + */ + private String password; + + /** + * 部门Id + */ + private String deptId; + + /** + * 电话号码 + */ + private String phone; + + /** + * 邮箱 + */ + private String email; + + /** + * 用户状态0-删除;1-正常;2-锁定;3-待审核;4-休眠;5-密码过期 + */ + private Integer state; + + /** + * 用户类型 0:超级管理员;1:管理员;2:普通用户 + */ + private Integer type; + + /** + * 数据来源:0-外部推送;1-正常新增;默认正常新增 + */ + private Integer origin; + + /** + * 用户类型:0-临时用户 1-正式用户 + */ + private Integer casualUser; + + /** + * 密码状态:0-不需要修改 1-需要修改 + */ + private Integer pwdState; + + /** + * 短信通知(0-不通知;1-通知)默认不通知 + */ + private Integer smsNotice; + + /** + * 邮件通知(0-不通知;1-通知)默认不通知 + */ + private Integer emailNotice; + + /** + * 推荐码 + */ + private String referralCode; + + /** + * 注册时间 + */ + private LocalDateTime registerTime; + + /** + * 密码有效期字段(初始化的时候跟注册时间一样) + */ + private LocalDateTime pwdValidity; + + /** + * 最后一次登录时间 + */ + private LocalDateTime loginTime; + + /** + * 限制登录起始IP + */ + private String limitIpStart; + + /** + * 限制登录结束IP + */ + private String limitIpEnd; + + /** + * 限制登录时间段(用'-'分割) + */ + private String limitTime; + + /** + * 密码错误次数 + */ + private Integer loginErrorTimes; + + /** + * 首次密码错误时间(半个小时错误次数超过N次数则锁定,解锁后密码错误次数、首次密码错误时间重置) + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime firstErrorTime; + + /** + * 用户密码错误锁定时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime lockTime; + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/UserRole.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/UserRole.java new file mode 100644 index 000000000..452f0bff3 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/UserRole.java @@ -0,0 +1,29 @@ +package com.njcn.user.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableName; + +import lombok.Data; + +/** + * + * @author hongawen + * @since 2021-12-13 + */ +@Data +@TableName("sys_user_role") +public class UserRole { + + private static final long serialVersionUID = 1L; + + /** + * 用户Id + */ + private String userId; + + /** + * 角色Id + */ + private String roleId; + + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/UserSet.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/UserSet.java new file mode 100644 index 000000000..277a9379a --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/UserSet.java @@ -0,0 +1,39 @@ +package com.njcn.user.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableName; + +import lombok.Data; + +/** + * + * @author hongawen + * @since 2021-12-13 + */ +@Data +@TableName("sys_user_set") +public class UserSet { + + private static final long serialVersionUID = 1L; + + /** + * 用户配置表Id + */ + private String id; + + /** + * 用户Id + */ + private String userId; + + /** + * 工作秘钥 + */ + private String secretKey; + + /** + * SM4-1值 + */ + private String standBy; + + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/UserStrategy.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/UserStrategy.java new file mode 100644 index 000000000..381438a73 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/UserStrategy.java @@ -0,0 +1,71 @@ +package com.njcn.user.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.njcn.db.bo.BaseEntity; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * + * @author hongawen + * @since 2021-12-13 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_user_strategy") +public class UserStrategy extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * 用户策略Id + */ + private String id; + + /** + * 密码有效期(1-6月,默认3个月) + */ + private Integer limitPwdDate; + + /** + * 密码错误次数限定(3-20次,默认5次) + */ + private Integer limitPwdTimes; + + /** + * 验证密码错误次数时间范围(5-60分钟,默认30分钟) + */ + private Integer lockPwdCheck; + + /** + * 用户锁定时间(30-60分钟,默认30分钟) + */ + private Integer lockPwdTime; + + /** + * 用户休眠(1-180天,默认90天,临时用户默认3天) + */ + private Integer sleep; + + /** + * 用户注销(1-360天,正常用户默认180天,临时用户默认7天) + */ + private Integer logout; + + /** + * 最大并发数(10-99,默认50) + */ + private Integer maxNum; + + /** + * 类型:0-临时用户 1-正常用户 + */ + private Integer type; + + /** + * 状态:0-删除 1-正常 + */ + private Integer state; + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/ComponentVO.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/ComponentVO.java new file mode 100644 index 000000000..76fa22727 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/ComponentVO.java @@ -0,0 +1,46 @@ +package com.njcn.user.pojo.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/1/19 14:56 + */ +@Data +public class ComponentVO implements Serializable { + + @ApiModelProperty("组件Id") + private String id; + + @ApiModelProperty("资源id") + private String functionId; + + @ApiModelProperty("节点") + private String pid; + + @ApiModelProperty("功能组件名称") + private String name; + + @ApiModelProperty("功能数组") + private List functionGroup; + + @ApiModelProperty("排序") + private Integer sort; + + @ApiModelProperty("功能组件表示") + private String code; + + @ApiModelProperty("路径") + private String path; + + @ApiModelProperty("子级") + List children; + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/DeptAllTreeVO.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/DeptAllTreeVO.java new file mode 100644 index 000000000..d7a6dbe49 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/DeptAllTreeVO.java @@ -0,0 +1,19 @@ +package com.njcn.user.pojo.vo; + +import com.njcn.web.pojo.vo.BaseVO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author denghuajun + * @version 1.0.0 + * @date 2022年04月15日 11:28 + */ +@Data +public class DeptAllTreeVO extends BaseVO { + + @ApiModelProperty("子节点详细信息") + private List children; +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/DeptTreeVO.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/DeptTreeVO.java new file mode 100644 index 000000000..914ca2a96 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/DeptTreeVO.java @@ -0,0 +1,38 @@ +package com.njcn.user.pojo.vo; + +import com.njcn.web.pojo.vo.BaseVO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author denghuajun + * @date 2022/1/4 + * + */ +@Data +public class DeptTreeVO extends BaseVO { + + @ApiModelProperty("行政区域id") + private String area; + + @ApiModelProperty("行政区域name") + private String areaName; + + @ApiModelProperty("状态") + private Integer state; + + @ApiModelProperty("部门类型") + private Integer type; + + @ApiModelProperty("部门描述") + private String remark; + + @ApiModelProperty("排序") + private Integer sort; + + @ApiModelProperty("子节点详细信息") + private List children; + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/DeptVO.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/DeptVO.java new file mode 100644 index 000000000..9fc690ba6 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/DeptVO.java @@ -0,0 +1,64 @@ +package com.njcn.user.pojo.vo; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author denghuajun + * @date 2021/12/28 10:50 + * 部门管理VO + */ +@Data +public class DeptVO implements Serializable { + + + private static final long serialVersionUID = 1L; + + /** + * 部门表Id + */ + private String id; + + /** + * 父节点Id(0为根节点) + */ + private String pid; + + /** + * 上层所有节点Id + */ + private String pids; + + /** + * 部门名称 + */ + private String name; + + /** + * 行政区域name + */ + private String areaName; + + /** + * 部门类型 0-非自定义;1-web自定义;2-App自定义 + */ + private Integer type; + + /** + * 排序 + */ + private Integer sort; + + /** + * 部门描述 + */ + private String remark; + + /** + * 部门状态 0-删除;1-正常;默认正常 + */ + private Integer state; + + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/FunctionVO.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/FunctionVO.java new file mode 100644 index 000000000..334e2c8fb --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/FunctionVO.java @@ -0,0 +1,52 @@ +package com.njcn.user.pojo.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/1/17 17:02 + */ +@Data +public class FunctionVO implements Serializable { + + @ApiModelProperty("资源Id") + private String id; + + @ApiModelProperty("节点") + private String pid; + + @ApiModelProperty("名称") + private String title; + + @ApiModelProperty("资源标识") + private String code; + + @ApiModelProperty("routeName") + private String routeName; + + @ApiModelProperty("路径") + private String routePath; + + @ApiModelProperty("图标") + private String icon; + + @ApiModelProperty("排序") + private Integer sort; + + @ApiModelProperty("资源类型") + private Integer type; + + @ApiModelProperty("描述") + private String remark; + + @ApiModelProperty("子级") + List children; + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/RoleVO.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/RoleVO.java new file mode 100644 index 000000000..b7f729c00 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/RoleVO.java @@ -0,0 +1,44 @@ +package com.njcn.user.pojo.vo; + +import lombok.Data; + +/** + * @author denghuajun + * @date 2022/1/17 + * + */ +@Data +public class RoleVO { + private static final long serialVersionUID = 1L; + + /** + * 角色表Id + */ + private String id; + + /** + * 角色名称 + */ + private String name; + + /** + * 角色代码,有需要用做匹配时候用(关联字典表id) + */ + private String code; + + + /** + * 角色描述 + */ + private String remark; + + /** + * 角色状态0-删除;1-正常;默认正常 + */ + private Integer state; + + /** + * 角色类型0-超级管理员 1-其他管理员 2-其他用户 + */ + private Integer type; +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/UserVO.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/UserVO.java new file mode 100644 index 000000000..ea2247a5c --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/UserVO.java @@ -0,0 +1,43 @@ +package com.njcn.user.pojo.vo; + +import com.njcn.user.pojo.param.UserParam; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2021/12/29 14:31 + */ +@Data +public class UserVO extends UserParam implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("用户Id") + private String id; + + @ApiModelProperty("登录名") + private String loginName; + + @ApiModelProperty("状态") + private Integer state; + + @ApiModelProperty("注册时间") + private String registerTime; + + @ApiModelProperty("登录时间") + private String loginTime; + + @ApiModelProperty("部门名称") + private String deptName; + + @ApiModelProperty("角色id") + private List roleList; + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/utils/UserEnumUtil.java b/pqs-user/user-api/src/main/java/com/njcn/user/utils/UserEnumUtil.java new file mode 100644 index 000000000..3beb6391d --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/utils/UserEnumUtil.java @@ -0,0 +1,59 @@ +package com.njcn.user.utils; + +import cn.hutool.core.util.StrUtil; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.EnumUtils; +import com.njcn.user.enums.UserResponseEnum; +import com.njcn.user.enums.UserStatusEnum; + +import javax.validation.constraints.NotNull; +import java.util.Objects; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年05月26日 17:17 + */ +public class UserEnumUtil { + + /** + * 获取UserResponseEnum实例 + */ + public static UserResponseEnum getUserResponseEnumByMessage(@NotNull Object value) { + UserResponseEnum userResponseEnum; + try { + String message = value.toString(); + if(message.indexOf(StrUtil.C_COMMA)>0){ + value = message.substring(message.indexOf(StrUtil.C_COMMA)+1); + } + userResponseEnum = EnumUtils.valueOf(UserResponseEnum.class, value, UserResponseEnum.class.getMethod(BusinessException.GET_MESSAGE_METHOD)); + return Objects.isNull(userResponseEnum) ? UserResponseEnum.LOGIN_WRONG_PWD : userResponseEnum; + } catch (NoSuchMethodException e) { + throw new BusinessException(CommonResponseEnum.INTERNAL_ERROR); + } + } + + /** + * 获取UserStatusEnum实例 + */ + public static UserStatusEnum getUserStatusEnumByCode(Object value) { + UserStatusEnum userStatusEnum; + try { + userStatusEnum = EnumUtils.valueOf(UserStatusEnum.class, value, UserStatusEnum.class.getMethod(BusinessException.GET_CODE_METHOD)); + return Objects.isNull(userStatusEnum) ? UserStatusEnum.NORMAL : userStatusEnum; + } catch (NoSuchMethodException e) { + throw new BusinessException(CommonResponseEnum.INTERNAL_ERROR); + } + } + + public static Enum getExceptionEnum(HttpResult result){ + //如果返回错误,且为内部错误,则直接抛出异常 + CommonResponseEnum commonResponseEnum = EnumUtils.getCommonResponseEnumByCode(result.getCode()); + if (commonResponseEnum == CommonResponseEnum.USER_RESPONSE_ENUM) { + return getUserResponseEnumByMessage(result.getMessage()); + } + return commonResponseEnum; + } +} diff --git a/pqs-user/user-boot/Dockerfile b/pqs-user/user-boot/Dockerfile new file mode 100644 index 000000000..8e3a7083a --- /dev/null +++ b/pqs-user/user-boot/Dockerfile @@ -0,0 +1,6 @@ +FROM openjdk:8-jdk-alpine +ADD target/userboot.jar userboot.jar +ENTRYPOINT ["java","-jar","/userboot.jar"] +EXPOSE 10201 +RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone + diff --git a/pqs-user/user-boot/pom.xml b/pqs-user/user-boot/pom.xml new file mode 100644 index 000000000..66b06304d --- /dev/null +++ b/pqs-user/user-boot/pom.xml @@ -0,0 +1,114 @@ + + + + pqs-user + com.njcn + 1.0.0 + + 4.0.0 + user-boot + 用户服务模块 + + + 8 + 8 + UTF-8 + + + + + com.njcn + user-api + ${project.version} + + + com.njcn + system-api + ${project.version} + + + com.njcn + device-api + ${project.version} + + + + com.njcn + common-web + ${project.version} + + + com.njcn + common-swagger + ${project.version} + + + + + userboot + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.0 + + -Xlint:unchecked + + + + org.springframework.boot + spring-boot-maven-plugin + + + package + + repackage + + + + + + + com.spotify + docker-maven-plugin + 1.0.0 + + + + build-image + ${docker.operate} + + build + + + + + + http://${docker.repostory} + + ${docker.repostory}/${docker.registry.name}/${project.artifactId} + + + latest + + + ${docker.url} + ${basedir}/ + + + + /ROOT + + ${project.build.directory} + + ${project.build.finalName}.jar + + + + + + + + \ No newline at end of file diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/UserBootApplication.java b/pqs-user/user-boot/src/main/java/com/njcn/user/UserBootApplication.java new file mode 100644 index 000000000..c667daea9 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/UserBootApplication.java @@ -0,0 +1,25 @@ +package com.njcn.user; + +import lombok.extern.slf4j.Slf4j; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; + + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年12月09日 20:59 + */ +@Slf4j +@MapperScan("com.njcn.**.mapper") +@EnableFeignClients(basePackages = "com.njcn") +@SpringBootApplication(scanBasePackages = "com.njcn") +public class UserBootApplication { + + public static void main(String[] args) { + SpringApplication.run(UserBootApplication.class, args); + } + +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/controller/AuthClientController.java b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/AuthClientController.java new file mode 100644 index 000000000..843103cba --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/AuthClientController.java @@ -0,0 +1,60 @@ +package com.njcn.user.controller; + + +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.common.utils.LogUtil; +import com.njcn.user.enums.UserResponseEnum; +import com.njcn.user.pojo.po.AuthClient; +import com.njcn.user.service.IAuthClientService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; +import com.njcn.web.controller.BaseController; + +import java.util.Objects; + +/** + * + * @author hongawen + * @since 2021-12-15 + */ +@Slf4j +@Validated +@Api(tags = "客户端信息管理") +@AllArgsConstructor +@RestController +@RequestMapping("/authClient") +public class AuthClientController extends BaseController { + + private final IAuthClientService authClientService; + + + @OperateInfo + @GetMapping("/getAuthClientByName/{clientName}") + @ApiOperation("根据客户端名查询信息") + @ApiImplicitParam(name = "clientName", value = "客户端名称", required = true) + public HttpResult getAuthClientByName(@PathVariable("clientName") String clientName) { + String methodDescribe = getMethodDescribe("getAuthClientByName"); + LogUtil.njcnDebug(log, "{},客户端为:{}", methodDescribe, clientName); + AuthClient authClient = authClientService.getAuthClientByName(clientName); + if (Objects.isNull(authClient)) { + throw new BusinessException(UserResponseEnum.NOT_FOUND_CLIENT); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, authClient, methodDescribe); + } + } + +} + diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/controller/ComponentController.java b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/ComponentController.java new file mode 100644 index 000000000..a720a0eb8 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/ComponentController.java @@ -0,0 +1,119 @@ +package com.njcn.user.controller; + + +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.constant.OperateType; +import com.njcn.common.pojo.enums.common.LogEnum; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.common.utils.LogUtil; +import com.njcn.user.pojo.param.ComponentParam; +import com.njcn.user.pojo.vo.ComponentVO; +import com.njcn.user.service.IComponentService; +import com.njcn.web.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

    + * 前端控制器 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@Validated +@Slf4j +@RestController +@RequestMapping("/component") +@Api(tags = "组件信息管理") +@AllArgsConstructor +public class ComponentController extends BaseController { + + private final IComponentService componentService; + + /** + * 新增组件 + * @param componentParam 组件数据 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.ADD) + @PostMapping("/add") + @ApiOperation("新增组件") + @ApiImplicitParam(name = "componentParam", value = "组件数据", required = true) + public HttpResult add(@RequestBody @Validated ComponentParam componentParam) { + String methodDescribe = getMethodDescribe("add"); + LogUtil.njcnDebug(log, "{},用户数据为:{}", methodDescribe, componentParam); + boolean result = componentService.addComponent(componentParam); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe); + } + } + + /** + * 删除组件 + * @param id 组件id + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.DELETE) + @DeleteMapping("/delete") + @ApiOperation("删除组件") + @ApiImplicitParam(name = "id", value = "组件id", required = true) + public HttpResult delete(@RequestParam @Validated String id) { + String methodDescribe = getMethodDescribe("delete"); + LogUtil.njcnDebug(log, "{},组件id为:{}", methodDescribe, id); + boolean result = componentService.deleteComponent(id); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe); + } + } + + /** + * 修改组件 + * @param componentParam 组件数据 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.UPDATE) + @PutMapping("/update") + @ApiOperation("修改组件") + @ApiImplicitParam(name = "componentParam", value = "组件数据", required = true) + public HttpResult update(@RequestBody @Validated ComponentParam.ComponentUpdateParam componentParam) { + String methodDescribe = getMethodDescribe("update"); + LogUtil.njcnDebug(log, "{},更新的菜单信息为:{}", methodDescribe,componentParam); + boolean result = componentService.updateComponent(componentParam); + if (result){ + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe); + } + } + + @OperateInfo + @GetMapping("/componentTree") + @ApiOperation("组件树") + public HttpResult> getComponentTree(){ + String methodDescribe = getMethodDescribe("getComponentTree"); + List list = componentService.getComponentTree(); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,list,methodDescribe); + } + + @OperateInfo + @GetMapping("/userComponentTree") + @ApiOperation("用户组件树") + public HttpResult> getUserComponentTree(){ + String methodDescribe = getMethodDescribe("getUserComponentTree"); + List list = componentService.getUserComponentTree(); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,list,methodDescribe); + } + +} + diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/controller/DeptController.java b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/DeptController.java new file mode 100644 index 000000000..198ed8440 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/DeptController.java @@ -0,0 +1,260 @@ +package com.njcn.user.controller; + + +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.constant.OperateType; +import com.njcn.common.pojo.enums.common.LogEnum; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.common.utils.LogUtil; +import com.njcn.system.pojo.dto.AreaTreeDTO; +import com.njcn.user.pojo.dto.DeptDTO; +import com.njcn.user.pojo.param.DeptParam; +import com.njcn.user.pojo.vo.DeptAllTreeVO; +import com.njcn.user.pojo.vo.DeptTreeVO; +import com.njcn.user.pojo.vo.DeptVO; +import com.njcn.user.service.IDeptService; +import com.njcn.web.pojo.param.DeptLineParam; +import com.njcn.web.utils.ControllerUtil; +import io.swagger.annotations.*; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import com.njcn.web.controller.BaseController; +import springfox.documentation.annotations.ApiIgnore; + +import java.util.List; +import java.util.Objects; + +/** + *

    + * 前端控制器(部门信息) + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@Validated +@Slf4j +@RestController +@RequestMapping("/dept") +@Api(tags = "部门管理") +@AllArgsConstructor +public class DeptController extends BaseController { + + private final IDeptService deptService; + + /** + * 分页查询部门信息 + */ + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/list") + @ApiOperation("查询部门信息") + @ApiImplicitParam(name = "queryParam", value = "查询参数", required = true) + public HttpResult> list(@RequestBody @Validated DeptParam.QueryParam queryParam) { + String methodDescribe = getMethodDescribe("list"); + LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, queryParam); + Page result = deptService.listDept(queryParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/getAreaTree") + @ApiOperation("查询区域树") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id",value = "区域id",required = false), + @ApiImplicitParam(name = "type", value = "区域类型", required = true) + }) + public HttpResult getAreaTree(@RequestParam(required = false)@ApiParam("id")String id , @RequestParam("type") Integer type) { + String methodDescribe = getMethodDescribe("getAreaTree"); + List result = deptService.getAreaTree(id,type); + if (!result.isEmpty()) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe); + } + } + + /** + * 新增部门 + * + * @param deptParam 部门信息 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.ADD) + @PostMapping("/add") + @ApiOperation("新增部门信息") + @ApiImplicitParam(name = "deptParam", value = "部门信息数据", required = true) + public HttpResult add(@RequestBody @Validated DeptParam deptParam) { + String methodDescribe = getMethodDescribe("add"); + LogUtil.njcnDebug(log, "{},部门信息数据为:{}", methodDescribe, deptParam); + boolean result = deptService.addDept(deptParam); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe); + } + } + + /** + * 修改部门信息 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.UPDATE) + @PostMapping("/update") + @ApiOperation("修改部门信息") + @ApiImplicitParam(name = "updateParam", value = "部门信息", required = true) + public HttpResult update(@RequestBody @Validated DeptParam.DeptUpdateParam updateParam) { + String methodDescribe = getMethodDescribe("update"); + LogUtil.njcnDebug(log, "{},字典数据为:{}", methodDescribe, updateParam); + boolean result = deptService.updateDept(updateParam); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe); + } + } + + /** + * 批量删除部门信息 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.DELETE) + @PostMapping("/delete") + @ApiOperation("删除部门信息") + @ApiImplicitParam(name = "ids", value = "部门索引", required = true) + public HttpResult delete(@RequestBody List ids) { + String methodDescribe = getMethodDescribe("delete"); + LogUtil.njcnDebug(log, "{},部门信息数据为:{}", methodDescribe, ids); + boolean result = deptService.deleteDept(ids); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe); + } + } + + /** + * 判断是否有关联信息 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/selectPid") + @ApiOperation("是否有关联信息") + @ApiImplicitParam(name = "ids", value = "部门索引", required = true) + public HttpResult selectPid(@RequestBody List ids) { + String methodDescribe = getMethodDescribe("selectPid"); + LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, ids); + boolean result = deptService.selectPid(ids); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.DELETE_PID_EXIST, null, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.DELETE_PID_UNEXIST, null, methodDescribe); + } + } + + /** + * 获取部门树 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/deptTree") + @ApiOperation("部门信息树") + public HttpResult deptTree() { + String methodDescribe = getMethodDescribe("deptTree"); + List result = deptService.deptTree(); + if (!result.isEmpty()) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } else { + + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.NO_DATA, null, methodDescribe); + } + } + + + /** + * 根据条件获取后代部门索引 + * + */ + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/getDeptDescendantIndexes") + @ApiOperation("获取后代部门索引") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "部门id", required = true), + @ApiImplicitParam(name = "type", value = "部门类型", required = true) + }) + public HttpResult> getDeptDescendantIndexes(@RequestParam("id") String id, @RequestParam("type") List type) { + String methodDescribe = getMethodDescribe("getDeptDescendantIndexes"); + List deptInfos = deptService.getDeptDescendantIndexes(id,type); + if (CollectionUtil.isEmpty(deptInfos)) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.NO_DATA, null, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, deptInfos, methodDescribe); + } + } + + /** + * 功能描述: 根据区域索引获取部门索引 + * + * @return + * @author xy + * @date 2022/2/14 15:04 + */ + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @GetMapping("/getDeptIdByArea") + @ApiOperation("根据区域索引获取部门索引") + @ApiIgnore + @ApiImplicitParams({ + @ApiImplicitParam(name = "area", value = "区域id", required = true) + }) + public HttpResult getDeptIdByArea(@RequestParam("area") String area) { + String methodDescribe = getMethodDescribe("getDeptIdByArea"); + String deptId = deptService.getDeptIdByArea(area); + if (Objects.isNull(deptId)) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.NO_DATA, null, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, deptId, methodDescribe); + } + } + + /** + * 功能描述: 根据区域索引获取部门索引 + * + * @return + * @author denghuajun + * @date 2022/2/24 15:04 + */ + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @GetMapping("/getAreaIdByDeptId") + @ApiOperation("根据区域索引获取部门索引") + @ApiImplicitParam(name = "deptId", value = "部门id", required = true) + public HttpResult getAreaIdByDeptId(@RequestParam("deptId") String deptId) { + String methodDescribe = getMethodDescribe("getAreaIdByDeptId"); + String areaId = deptService.getAreaIdByDeptId(deptId); + if (Objects.isNull(areaId)) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.NO_DATA, null, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, areaId, methodDescribe); + } + } + + + /** + * 根据登录用户获取部门树 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/loginDeptTree") + @ApiOperation("根据登录用户获取部门树") + public HttpResult loginDeptTree() { + String methodDescribe = getMethodDescribe("loginDeptTree"); + List result = deptService.loginDeptTree(); + if (!result.isEmpty()) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } else { + + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.NO_DATA, null, methodDescribe); + } + } + +} + diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/controller/FunctionController.java b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/FunctionController.java new file mode 100644 index 000000000..2a3d06d29 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/FunctionController.java @@ -0,0 +1,158 @@ +package com.njcn.user.controller; + + +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.constant.OperateType; +import com.njcn.common.pojo.enums.common.LogEnum; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.common.utils.LogUtil; +import com.njcn.user.pojo.param.FunctionParam; +import com.njcn.user.pojo.param.RoleParam; +import com.njcn.user.pojo.po.Function; +import com.njcn.user.pojo.vo.FunctionVO; +import com.njcn.user.service.IFunctionService; +import com.njcn.user.service.IRoleFunctionService; +import com.njcn.web.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

    + * 前端控制器 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@Validated +@Slf4j +@RestController +@RequestMapping("/function") +@Api(tags = "菜单信息管理") +@AllArgsConstructor +public class FunctionController extends BaseController { + + private final IFunctionService functionService; + + private final IRoleFunctionService roleFunctionService; + + /** + * 新增资源 + * @param functionParam 资源数据 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.ADD) + @PostMapping("/add") + @ApiOperation("新增菜单") + @ApiImplicitParam(name = "functionParam", value = "菜单数据", required = true) + public HttpResult add(@RequestBody @Validated FunctionParam functionParam) { + String methodDescribe = getMethodDescribe("add"); + LogUtil.njcnDebug(log, "{},菜单数据为:{}", methodDescribe, functionParam); + boolean result = functionService.addFunction(functionParam); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe); + } + } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.UPDATE) + @PutMapping("/update") + @ApiOperation("修改菜单") + @ApiImplicitParam(name = "functionParam", value = "菜单数据", required = true) + public HttpResult update(@RequestBody @Validated FunctionParam.FunctionUpdateParam functionParam) { + String methodDescribe = getMethodDescribe("update"); + LogUtil.njcnDebug(log, "{},更新的菜单信息为:{}", methodDescribe,functionParam); + boolean result = functionService.updateFunction(functionParam); + if (result){ + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe); + } + } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.DELETE) + @DeleteMapping("/delete") + @ApiOperation("删除菜单") + @ApiImplicitParam(name = "id", value = "菜单id", required = true) + public HttpResult delete(@RequestParam @Validated String id) { + String methodDescribe = getMethodDescribe("delete"); + LogUtil.njcnDebug(log, "{},删除的菜单id为:{}", methodDescribe,id); + boolean result = functionService.deleteFunction(id); + if (result){ + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe); + } + } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @GetMapping("/functionTree") + @ApiOperation("菜单树") + public HttpResult> getFunctionTree() { + String methodDescribe = getMethodDescribe("getFunctionTree"); + List list = functionService.getFunctionTree(); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,list,methodDescribe); + } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @GetMapping("/getFunctionById") + @ApiOperation("菜单详情") + @ApiImplicitParam(name = "id", value = "菜单id", required = true) + public HttpResult getFunctionById(String id){ + String methodDescribe = getMethodDescribe("getFunctionById"); + LogUtil.njcnDebug(log, "{},菜单id为:{}", methodDescribe,id); + Function function = functionService.getFunctionById(id); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,function,methodDescribe); + } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @GetMapping("/getButtonById") + @ApiOperation("获取按钮") + @ApiImplicitParam(name = "id", value = "菜单id", required = true) + public HttpResult> getButtonById(String id){ + String methodDescribe = getMethodDescribe("getButtonById"); + LogUtil.njcnDebug(log, "{},菜单id为:{}", methodDescribe,id); + List list = functionService.getButtonsById(id); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,list,methodDescribe); + } + + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @GetMapping("/getRouteMenu") + @ApiOperation("路由菜单") + public HttpResult> getRouteMenu(){ + String methodDescribe = getMethodDescribe("getRouteMenu"); + List list = functionService.getRouteMenu(); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,list,methodDescribe); + } + + @OperateInfo(operateType = OperateType.UPDATE) + @PostMapping("/assignFunctionByRoleIndexes") + @ApiOperation("角色分配菜单") + @ApiImplicitParam(name = "roleFunctionComponent", value = "角色信息", required = true) + public HttpResult assignFunctionByRoleIndexes(@RequestBody @Validated RoleParam.RoleFunctionComponent roleFunctionComponent) { + String methodDescribe = getMethodDescribe("assignFunctionByRoleIndexes"); + LogUtil.njcnDebug(log, "{},传入的角色id和资源id集合为:{}", methodDescribe,roleFunctionComponent); + boolean result = functionService.updateRoleComponent(roleFunctionComponent); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @GetMapping("/userFunctionTree") + @ApiOperation("用户菜单树") + public HttpResult> getUserFunctionTree() { + String methodDescribe = getMethodDescribe("getUserFunctionTree"); + List list = functionService.getUserFunctionTree(); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,list,methodDescribe); + } +} + diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/controller/HomePageController.java b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/HomePageController.java new file mode 100644 index 000000000..77e693e90 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/HomePageController.java @@ -0,0 +1,117 @@ +package com.njcn.user.controller; + + +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.constant.OperateType; +import com.njcn.common.pojo.enums.common.LogEnum; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.common.utils.LogUtil; +import com.njcn.user.pojo.param.HomePageParam; +import com.njcn.user.pojo.po.HomePage; +import com.njcn.user.service.IHomePageService; +import com.njcn.web.controller.BaseController; +import com.njcn.web.utils.RequestUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

    + * 前端控制器 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@Validated +@Slf4j +@RestController +@RequestMapping("/homePage") +@Api(tags = "驾驶舱配置管理") +@AllArgsConstructor +public class HomePageController extends BaseController { + + private final IHomePageService homePageService; + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/add") + @ApiOperation("新增驾驶舱") + @ApiImplicitParam(name = "homePage", value = "驾驶舱实体", required = true) + public HttpResult add(@RequestBody HomePageParam homePage){ + String methodDescribe = getMethodDescribe("add"); + LogUtil.njcnDebug(log, "{},驾驶舱实体为:{}", methodDescribe,homePage); + boolean result = homePageService.add(homePage); + if (result){ + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true,methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false,methodDescribe); + } + } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON,operateType = OperateType.DELETE) + @DeleteMapping("/delete") + @ApiOperation("删除驾驶舱") + @ApiImplicitParam(name = "id", value = "驾驶舱id", required = true) + public HttpResult delete(@RequestParam String id){ + String methodDescribe = getMethodDescribe("delete"); + LogUtil.njcnDebug(log, "{},驾驶舱实体为:{}", methodDescribe,id); + boolean result = homePageService.delete(id); + if (result){ + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true,methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false,methodDescribe); + } + } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON,operateType = OperateType.UPDATE) + @PutMapping("/update") + @ApiOperation("修改驾驶舱") + @ApiImplicitParam(name = "homePageUpdate", value = "驾驶舱实体", required = true) + public HttpResult update(@RequestBody @Validated HomePageParam.HomePageUpdateParam homePageUpdate){ + String methodDescribe = getMethodDescribe("update"); + LogUtil.njcnDebug(log, "{},修改的驾驶舱实体:{}", methodDescribe,homePageUpdate); + boolean result = homePageService.update(homePageUpdate); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,result,methodDescribe); + } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @GetMapping("/getHomePages") + @ApiOperation("用户驾驶舱") + public HttpResult> getHomePages(){ + String methodDescribe = getMethodDescribe("getHomePages"); + List list = homePageService.getHomePagesByUserId(RequestUtil.getUserIndex()); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,list,methodDescribe); + } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @GetMapping("/getHomePageById") + @ApiOperation("驾驶舱详情") + @ApiImplicitParam(name = "id", value = "驾驶舱id", required = true) + public HttpResult getHomePageById(String id){ + String methodDescribe = getMethodDescribe("getHomePageById"); + LogUtil.njcnDebug(log, "{},传入的ID为:{}", methodDescribe,id); + HomePage homePage = homePageService.getHomePageById(id); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,homePage,methodDescribe); + } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @GetMapping("/getUsedHomePage") + @ApiOperation("已使用驾驶舱") + @ApiImplicitParam(name = "path", value = "驾驶舱路径", required = true) + public HttpResult> getUsedHomePage(String path){ + String methodDescribe = getMethodDescribe("getUsedHomePage"); + LogUtil.njcnDebug(log, "{},传入的驾驶舱路径为:{}", methodDescribe,path); + List list = homePageService.getUsedHomePage(path); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,list,methodDescribe); + } + +} + diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/controller/RoleComponentController.java b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/RoleComponentController.java new file mode 100644 index 000000000..4305cc98e --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/RoleComponentController.java @@ -0,0 +1,75 @@ +package com.njcn.user.controller; + + +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.constant.OperateType; +import com.njcn.common.pojo.enums.common.LogEnum; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.common.utils.LogUtil; +import com.njcn.user.pojo.param.RoleParam; +import com.njcn.user.pojo.po.RoleComponent; +import com.njcn.user.service.IRoleComponentService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import com.njcn.web.controller.BaseController; + +import java.util.List; + +/** + *

    + * 前端控制器 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@Validated +@Slf4j +@RestController +@RequestMapping("/roleComponent") +@Api(tags = "角色组件管理") +@AllArgsConstructor +public class RoleComponentController extends BaseController { + + private final IRoleComponentService roleComponentService; + + /** + * 根据角色id查询相关联的组件 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/selectRoleComponent") + @ApiOperation("角色组件树") + @ApiImplicitParam(name = "idList", value = "角色索引集合", required = true) + public HttpResult selectRoleComponent(@RequestParam("idList") List idList) { + String methodDescribe = getMethodDescribe("selectRoleComponent"); + LogUtil.njcnDebug(log, "{},传入的角色id集合:{}", methodDescribe, idList); + List result = roleComponentService.selectRoleComponent(idList); + if (result.isEmpty()) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.NO_DATA, result, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + } + + @OperateInfo(operateType = OperateType.UPDATE) + @PostMapping("/assignComponentsByRoleIndex") + @ApiOperation("角色分配组件") + @ApiImplicitParam(name = "roleFunctionComponent", value = "角色信息", required = true) + public HttpResult assignComponentsByRoleIndex(@RequestBody @Validated RoleParam.RoleFunctionComponent roleFunctionComponent) { + String methodDescribe = getMethodDescribe("assignComponentsByRoleIndex"); + LogUtil.njcnDebug(log, "{},传入的角色Guid:{},传入的组件集合为:{}", methodDescribe,roleFunctionComponent); + boolean result = roleComponentService.updateRoleComponent(roleFunctionComponent); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + +} + diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/controller/RoleController.java b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/RoleController.java new file mode 100644 index 000000000..6109f6aae --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/RoleController.java @@ -0,0 +1,149 @@ +package com.njcn.user.controller; + + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.constant.OperateType; +import com.njcn.common.pojo.enums.common.LogEnum; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.common.utils.LogUtil; +import com.njcn.user.pojo.param.DeptParam; +import com.njcn.user.pojo.param.RoleParam; +import com.njcn.user.pojo.po.Role; +import com.njcn.user.pojo.vo.RoleVO; +import com.njcn.user.service.IRoleService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import com.njcn.web.controller.BaseController; + +import java.util.List; + +/** + *

    + * 前端控制器 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@Validated +@Slf4j +@RestController +@RequestMapping("/role") +@Api(tags = "角色管理") +@AllArgsConstructor +public class RoleController extends BaseController { + + private final IRoleService roleService; + + /** + * 分页查询角色信息 + */ + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/list") + @ApiOperation("查询角色信息") + @ApiImplicitParam(name = "queryParam", value = "查询参数", required = true) + public HttpResult> list(@RequestBody @Validated RoleParam.QueryParam queryParam) { + String methodDescribe = getMethodDescribe("list"); + LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, queryParam); + Page result = roleService.listRole(queryParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + + /** + * 新增角色 + * + * @param roleParam 角色新增 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.ADD) + @PostMapping("/add") + @ApiOperation("新增角色信息") + @ApiImplicitParam(name = "roleParam", value = "角色信息数据", required = true) + public HttpResult add(@RequestBody @Validated RoleParam roleParam) { + String methodDescribe = getMethodDescribe("add"); + LogUtil.njcnDebug(log, "{},角色信息数据为:{}", methodDescribe, roleParam); + boolean result = roleService.addRole(roleParam); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe); + } + } + + /** + * 修改角色信息 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.UPDATE) + @PostMapping("/update") + @ApiOperation("修改角色信息") + @ApiImplicitParam(name = "updateParam", value = "角色信息", required = true) + public HttpResult update(@RequestBody @Validated RoleParam.RoleUpdateParam updateParam) { + String methodDescribe = getMethodDescribe("update"); + LogUtil.njcnDebug(log, "{},角色信息数据为:{}", methodDescribe, updateParam); + boolean result = roleService.updateRole(updateParam); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe); + } + } + + /** + * 批量删除角色信息 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.DELETE) + @PostMapping("/delete") + @ApiOperation("删除角色信息") + @ApiImplicitParam(name = "ids", value = "角色索引", required = true) + public HttpResult delete(@RequestBody List ids) { + String methodDescribe = getMethodDescribe("delete"); + LogUtil.njcnDebug(log, "{},角色信息数据为:{}", methodDescribe, ids); + boolean result = roleService.deleteRole(ids); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe); + } + } + + /** + * 根据角色id查询相关联的资源和组件 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/selectFunctionComponent") + @ApiOperation("根据角色id查询相关联的资源和组件") + @ApiImplicitParam(name = "ids", value = "角色索引", required = true) + public HttpResult selectFunctionComponent(@RequestBody List ids) { + String methodDescribe = getMethodDescribe("selectFunctionComponent"); + LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, ids); + boolean result = roleService.selectRelevance(ids); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.DELETE_PID_EXIST, null, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.DELETE_PID_UNEXIST, null, methodDescribe); + } + } + + /** + * 根据权限类型查询相关角色 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/selectRoleDetail") + @ApiOperation("根据权限类型查询相关角色") + @ApiImplicitParam(name = "id", value = "权限类型索引", required = true) + public HttpResult selectRoleDetail(@RequestParam("id") Integer id) { + String methodDescribe = getMethodDescribe("list"); + LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, id); + List result = roleService.selectRoleDetail(id); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } +} + diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/controller/RoleFunctionController.java b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/RoleFunctionController.java new file mode 100644 index 000000000..8293f3784 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/RoleFunctionController.java @@ -0,0 +1,56 @@ +package com.njcn.user.controller; + + +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.common.utils.LogUtil; +import com.njcn.user.service.IRoleFunctionService; +import com.njcn.web.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

    + * 前端控制器 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@Validated +@Slf4j +@RestController +@RequestMapping("/roleFunction") +@Api(tags = "角色资源管理") +@AllArgsConstructor +public class RoleFunctionController extends BaseController { + private final IRoleFunctionService roleFunctionService; + + @OperateInfo + @PostMapping("/getFunctionsByRoleIndex") + @ApiOperation("根据角色id查询相关联的资源") + @ApiImplicitParam(name = "id", value = "角色id", required = true) + public HttpResult> getFunctionsByRoleIndex(@RequestParam("id") String id) { + String methodDescribe = getMethodDescribe("getFunctionsByRoleIndex"); + LogUtil.njcnDebug(log, "{},传入的角色id:{}", methodDescribe,id); + List list = roleFunctionService.getFunctionsByRoleIndex(id); + if(list.isEmpty()){ + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.NO_DATA, list, methodDescribe); + }else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); + } + } +} + diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/controller/UserController.java b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/UserController.java new file mode 100644 index 000000000..e60017039 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/UserController.java @@ -0,0 +1,337 @@ +package com.njcn.user.controller; + + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.constant.LogInfo; +import com.njcn.common.pojo.constant.OperateType; +import com.njcn.common.pojo.constant.SecurityConstants; +import com.njcn.common.pojo.enums.common.LogEnum; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.common.utils.LogUtil; +import com.njcn.common.utils.sm.DesUtils; +import com.njcn.common.utils.sm.Sm2; +import com.njcn.poi.util.PoiUtil; +import com.njcn.redis.utils.RedisUtil; +import com.njcn.user.enums.UserResponseEnum; +import com.njcn.user.pojo.dto.UserDTO; +import com.njcn.user.pojo.param.UserParam; +import com.njcn.user.pojo.param.UserPasswordParam; +import com.njcn.user.pojo.vo.UserVO; +import com.njcn.user.service.IUserService; +import com.njcn.web.controller.BaseController; +import com.njcn.web.utils.RequestUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import springfox.documentation.annotations.ApiIgnore; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.security.NoSuchAlgorithmException; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +/** + *

    + * 前端控制器 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@Validated +@Slf4j +@RestController +@RequestMapping("/user") +@Api(tags = "用户信息管理") +@AllArgsConstructor +public class UserController extends BaseController { + + private final IUserService userService; + + private final RedisUtil redisUtil; + + @OperateInfo + @GetMapping("/getUserByName/{loginName}") + @ApiOperation("根据登录名查询用户信息") + @ApiImplicitParam(name = "loginName", value = "登录名", required = true) + public HttpResult getUserByName(@PathVariable String loginName) { + RequestUtil.saveLoginName(loginName); + String methodDescribe = getMethodDescribe("getUserByName"); + LogUtil.njcnDebug(log, "{},登录名为:{}", methodDescribe, loginName); + UserDTO user = userService.getUserByName(loginName); + if (Objects.isNull(user)) { + throw new BusinessException(UserResponseEnum.LOGIN_WRONG_PWD); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, user, methodDescribe); + } + } + + @OperateInfo + @GetMapping("/judgeUserStatus/{loginName}") + @ApiOperation("认证后根据用户名判断用户状态") + @ApiImplicitParam(name = "loginName", value = "登录名", required = true) + public HttpResult judgeUserStatus(@PathVariable String loginName) { + RequestUtil.saveLoginName(loginName); + String methodDescribe = getMethodDescribe("judgeUserStatus"); + LogUtil.njcnDebug(log, "{},登录名为:{}", methodDescribe, loginName); + userService.judgeUserStatus(loginName); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + } + + + /** + * 新增用户 + * + * @param addUserParam 用户数据 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.ADD) + @PostMapping("/add") + @ApiOperation("新增用户") + @ApiImplicitParam(name = "addUserParam", value = "新增用户", required = true) + public HttpResult add(@RequestBody @Validated UserParam.UserAddParam addUserParam) { + String methodDescribe = getMethodDescribe("add"); + LogUtil.njcnDebug(log, "{},用户数据为:{}", methodDescribe, addUserParam); + boolean result = userService.addUser(addUserParam); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe); + } + } + + /** + * 删除用户 + * + * @param id 用户id + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.DELETE) + @DeleteMapping("/delete") + @ApiOperation("删除用户") + @ApiImplicitParam(name = "id", value = "用户id", required = true) + public HttpResult delete(@RequestParam @Validated String id) { + String methodDescribe = getMethodDescribe("delete"); + LogUtil.njcnDebug(log, "{},用户id为:{}", methodDescribe, id); + boolean result = userService.deleteUser(id); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe); + } + } + + /** + * 修改用户 + * + * @param updateUserParam 用户数据 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.UPDATE) + @PutMapping("/update") + @ApiOperation("修改用户") + @ApiImplicitParam(name = "updateUserParam", value = "修改用户", required = true) + public HttpResult update(@RequestBody @Validated UserParam.UserUpdateParam updateUserParam) { + String methodDescribe = getMethodDescribe("update"); + LogUtil.njcnDebug(log, "{},用户数据为:{}", methodDescribe, updateUserParam); + boolean result = userService.updateUser(updateUserParam); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe); + } + } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/list") + @ApiOperation("列表分页") + @ApiImplicitParam(name = "queryParam", value = "查询参数", required = true) + public HttpResult> getUserList(@RequestBody @Validated UserParam.UserQueryParam queryParam) { + String methodDescribe = getMethodDescribe("getUserList"); + LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, queryParam); + Page list = userService.userList(queryParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); + } + + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/exportUser") + @ApiOperation("用户数据") + @ApiImplicitParam(name = "queryParam", value = "查询参数", required = true) + public HttpResult exportUser(@RequestBody @Validated UserParam.UserQueryParam queryParam) { + String methodDescribe = getMethodDescribe("exportUser"); + LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, queryParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, userService.exportUser(queryParam,methodDescribe), methodDescribe); + } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON,operateType = OperateType.DOWNLOAD) + @GetMapping("/exportUserExcel") + @ApiOperation("导出用户数据") + @ApiImplicitParam(name = "filePath", value = "报表路径", required = true) + public void exportUserExcel(String filePath, HttpServletResponse response) { + PoiUtil.exportFileByAbsolutePath(filePath,response); + } + + + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/checkUserList") + @ApiOperation("审核用户列表") + @ApiImplicitParam(name = "queryParam", value = "查询参数", required = true) + public HttpResult> getCheckList(@RequestBody @Validated UserParam.UserQueryParam queryParam) { + String methodDescribe = getMethodDescribe("getCheckList"); + LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, queryParam); + Page list = userService.checkUserList(queryParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); + } + + /** + * 根据用户id获取用户详情 + * + * @param id 用户id + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @GetMapping("/getUserById") + @ApiOperation("用户详情") + @ApiImplicitParam(name = "id", value = "用户id", required = true) + public HttpResult getUserById(@RequestParam @Validated String id) { + String methodDescribe = getMethodDescribe("getUserById"); + LogUtil.njcnDebug(log, "{},用户id为:{}", methodDescribe, id); + UserVO userVO = userService.getUserById(id); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, userVO, methodDescribe); + } + + /** + * 审核用户 + * + * @param list 用户id集合 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.UPDATE) + @PutMapping("/check") + @ApiOperation("审核用户") + @ApiImplicitParam(name = "list", value = "用户id集合", required = true) + public HttpResult check(@RequestBody @Validated List list) { + String methodDescribe = getMethodDescribe("check"); + LogUtil.njcnDebug(log, "{},用户id集合为:{}", methodDescribe, list); + boolean result = userService.checkUser(list); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe); + } + } + + /** + * 修改密码 + * + * @param id 用户id + * @param newPassword 用户新密码 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.UPDATE) + @PutMapping("/updatePassword") + @ApiOperation("修改密码") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "用户id", required = true), + @ApiImplicitParam(name = "newPassword", value = "用户新密码", required = true) + }) + public HttpResult updatePassword(String id, String newPassword) { + String methodDescribe = getMethodDescribe("updatePassword"); + LogUtil.njcnDebug(log, "{},用户id:{},修改的用户密码为:{}", methodDescribe, id, newPassword); + boolean result = userService.updatePassword(id, newPassword); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe); + } + } + + @OperateInfo + @GetMapping("/generateSm2Key") + @ApiOperation("根据登录名获取公钥") + @ApiImplicitParam(name = "loginName", value = "登录名", required = true) + public HttpResult generateSm2Key(String loginName, @ApiIgnore HttpServletRequest request) { + if (StrUtil.isBlankIfStr(loginName)) { + RequestUtil.saveLoginName(LogInfo.UNKNOWN_USER); + throw new BusinessException(UserResponseEnum.LOGIN_USERNAME_INVALID); + } + String methodDescribe = getMethodDescribe("generateSm2Key"); + loginName = DesUtils.aesDecrypt(loginName); + RequestUtil.saveLoginName(loginName); + Map keyMap; + try { + keyMap = Sm2.getSm2CipHer(); + } catch (NoSuchAlgorithmException e) { + throw new BusinessException(CommonResponseEnum.SM2_CIPHER_ERROR); + } + String publicKey = keyMap.get("publicKey"); + String privateKey = keyMap.get("privateKey"); + String ip = request.getHeader(SecurityConstants.REQUEST_HEADER_KEY_CLIENT_REAL_IP); + //秘钥先删除再添加 + redisUtil.delete(loginName + ip); + // 保存私钥到 redis + redisUtil.saveByKeyWithExpire(loginName + ip, privateKey, 5*60L); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, publicKey, methodDescribe); + } + + @OperateInfo(operateType = OperateType.UPDATE) + @PutMapping("/updateUserLoginErrorTimes/{loginName}") + @ApiOperation("更新用户登录认证密码错误次数") + @ApiImplicitParam(name = "loginName", value = "登录名", required = true) + public HttpResult updateUserLoginErrorTimes(@PathVariable String loginName) { + RequestUtil.saveLoginName(loginName); + String methodDescribe = getMethodDescribe("updateUserLoginErrorTimes"); + LogUtil.njcnDebug(log, "{},登录名为:{}", methodDescribe, loginName); + String result = userService.updateUserLoginErrorTimes(loginName); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + + + /** + * 密码二次确认 + * @param password 确认密码 + */ + @OperateInfo + @GetMapping("/passwordConfirm") + @ApiOperation("密码二次确认") + @ApiImplicitParam(name = "password", value = "确认密码") + public HttpResult passwordConfirm(String password) { + String methodDescribe = getMethodDescribe("passwordConfirm"); + LogUtil.njcnDebug(log, "{},用户输入的密码:{}", methodDescribe, password); + boolean result = userService.passwordConfirm(password); + if (result){ + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe); + } + } + + /** + * 首次登录修改密码 + * + * @param userPasswordParam 用户信息 + */ + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.UPDATE) + @PutMapping("/updateFirstPassword") + @ApiOperation("首次登录修改密码") + @ApiImplicitParam(name = "userPasswordParam", value = "加密用户信息", required = true) + public HttpResult updateFirstPassword(@RequestBody @Validated UserPasswordParam userPasswordParam, @ApiIgnore HttpServletRequest request) { + RequestUtil.saveLoginName(DesUtils.aesDecrypt(userPasswordParam.getName())); + String methodDescribe = getMethodDescribe("updateFirstPassword"); + LogUtil.njcnDebug(log, "{},加密用户信息为:{}", methodDescribe, userPasswordParam); + String ip = request.getHeader(SecurityConstants.REQUEST_HEADER_KEY_CLIENT_REAL_IP); + boolean result = userService.updateFirstPassword(userPasswordParam.getName(), userPasswordParam.getPassword(), ip); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } + +} + diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/controller/UserRoleController.java b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/UserRoleController.java new file mode 100644 index 000000000..c12da308c --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/UserRoleController.java @@ -0,0 +1,22 @@ +package com.njcn.user.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; +import com.njcn.web.controller.BaseController; + +/** + *

    + * 前端控制器 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@RestController +@RequestMapping("/userRole") +public class UserRoleController extends BaseController { + +} + diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/controller/UserSetController.java b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/UserSetController.java new file mode 100644 index 000000000..49f88cc17 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/UserSetController.java @@ -0,0 +1,22 @@ +package com.njcn.user.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; +import com.njcn.web.controller.BaseController; + +/** + *

    + * 前端控制器 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@RestController +@RequestMapping("/userSet") +public class UserSetController extends BaseController { + +} + diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/controller/UserStrategyController.java b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/UserStrategyController.java new file mode 100644 index 000000000..6a0674e87 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/UserStrategyController.java @@ -0,0 +1,22 @@ +package com.njcn.user.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; +import com.njcn.web.controller.BaseController; + +/** + *

    + * 前端控制器 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@RestController +@RequestMapping("/userStrategy") +public class UserStrategyController extends BaseController { + +} + diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/init/InitPermissionRoles.java b/pqs-user/user-boot/src/main/java/com/njcn/user/init/InitPermissionRoles.java new file mode 100644 index 000000000..112e1dd86 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/init/InitPermissionRoles.java @@ -0,0 +1,26 @@ +package com.njcn.user.init; + +import com.njcn.user.service.IFunctionService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.CommandLineRunner; +import org.springframework.stereotype.Component; + + +/** + * @author hongawen + * + * 容器启动完成时加载角色权限规则至Redis缓存 + */ +@Slf4j +@Component +@AllArgsConstructor +public class InitPermissionRoles implements CommandLineRunner { + + private final IFunctionService functionService; + + @Override + public void run(String... args) { + functionService.refreshRolesFunctionsCache(); + } +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/AuthClientMapper.java b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/AuthClientMapper.java new file mode 100644 index 000000000..cc4dfdc3e --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/AuthClientMapper.java @@ -0,0 +1,16 @@ +package com.njcn.user.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.njcn.user.pojo.po.AuthClient; + +/** + *

    + * Mapper 接口 + *

    + * + * @author hongawen + * @since 2021-12-15 + */ +public interface AuthClientMapper extends BaseMapper { + +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/ComponentMapper.java b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/ComponentMapper.java new file mode 100644 index 000000000..fd9a4e1e3 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/ComponentMapper.java @@ -0,0 +1,25 @@ +package com.njcn.user.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.njcn.user.pojo.dto.ComponentDTO; +import com.njcn.user.pojo.po.Component; +import com.njcn.user.pojo.vo.ComponentVO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

    + * Mapper 接口 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface ComponentMapper extends BaseMapper { + + List getAllComponent(); + + List getComponentByList(@Param("list")List list); + +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/DeptMapper.java b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/DeptMapper.java new file mode 100644 index 000000000..e31856e9e --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/DeptMapper.java @@ -0,0 +1,94 @@ +package com.njcn.user.mapper; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.njcn.user.pojo.dto.DeptDTO; +import com.njcn.user.pojo.po.Dept; +import com.njcn.user.pojo.vo.DeptAllTreeVO; +import com.njcn.user.pojo.vo.DeptTreeVO; +import com.njcn.user.pojo.vo.DeptVO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

    + * Mapper 接口 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface DeptMapper extends BaseMapper { + + /** + * 分页查询字典数据 + * @param page 分页数据 + * @param queryWrapper 查询条件 + * @return 字典数据 + */ + Page page(@Param("page")Page page, @Param("ew") QueryWrapper queryWrapper); + +// /** +// * 查询部门排序最后一位 +// * @return 排序最后一位 +// */ +// Integer getSortNum(); + + /** + * 查询父节点的所有上层节点 + * @param id + * @return 父节点的所有上层节点 + */ + String getIdString(@Param("id")String id); + + /** + * + * @return 部门树 + */ + List getDeptTree(@Param("id")String id, @Param("type")List type); + + /** + * + * @return 部门树 + */ + List getAllDeptTree(@Param("id")String id, @Param("type")List type); + + /** + * + * @param state 部门状态 + * @return 查询已经绑定的行政区域 + */ + List deptArea(@Param("state")Integer state); + + /** + * + * @param ids 部门集合 + * @param state 状态 + * @return 查询 + */ + List selectPid(@Param("ids")List ids,@Param("state")Integer state); + + /** + * 删除部门和监测点的绑定 + * @param ids 部门集合 + * @return + */ + Boolean deleteDeptLine(@Param("ids")List ids); + + /** + * 删除部门和用户的绑定 + * @param ids 部门集合 + * @return + */ + Boolean deleteUserDept(@Param("ids")List ids); + + /** + * 根据条件获取后代部门索引 + * @param id 部门id + * @param type 指定部门类型 + * @return 后代部门索引 + */ + List getDeptDescendantIndexes(@Param("id")String id, @Param("type")List type); +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/FunctionMapper.java b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/FunctionMapper.java new file mode 100644 index 000000000..77a40e38a --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/FunctionMapper.java @@ -0,0 +1,26 @@ +package com.njcn.user.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.njcn.user.pojo.po.Function; +import com.njcn.user.pojo.vo.FunctionVO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

    + * Mapper 接口 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface FunctionMapper extends BaseMapper { + + List getAllFunctions(); + + List getFunctionsByList(@Param("list")List functionList); + + List getUserFunctionsByList(@Param("list")List functionList); + +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/HomePageMapper.java b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/HomePageMapper.java new file mode 100644 index 000000000..8f5d1c013 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/HomePageMapper.java @@ -0,0 +1,16 @@ +package com.njcn.user.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.njcn.user.pojo.po.HomePage; + +/** + *

    + * Mapper 接口 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface HomePageMapper extends BaseMapper { + +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/RoleComponentMapper.java b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/RoleComponentMapper.java new file mode 100644 index 000000000..37f21167f --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/RoleComponentMapper.java @@ -0,0 +1,25 @@ +package com.njcn.user.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.njcn.user.pojo.po.Component; +import com.njcn.user.pojo.po.RoleComponent; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

    + * Mapper 接口 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface RoleComponentMapper extends BaseMapper { + /** + * 根据角色id集合查询是否绑定 + * @param ids + * @return + */ + List selectRoleComponet(@Param("ids")List ids); +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/RoleFunctionMapper.java b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/RoleFunctionMapper.java new file mode 100644 index 000000000..dc517f091 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/RoleFunctionMapper.java @@ -0,0 +1,25 @@ +package com.njcn.user.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.njcn.user.pojo.po.Component; +import com.njcn.user.pojo.po.RoleFunction; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

    + * Mapper 接口 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface RoleFunctionMapper extends BaseMapper { + /** + * 根据角色id集合查询是否绑定 + * @param ids + * @return + */ + List selectRoleFunction(@Param("ids")List ids); +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/RoleMapper.java b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/RoleMapper.java new file mode 100644 index 000000000..7e0a0e3bd --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/RoleMapper.java @@ -0,0 +1,53 @@ +package com.njcn.user.mapper; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.njcn.user.pojo.po.Role; +import com.njcn.user.pojo.vo.RoleVO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

    + * Mapper 接口 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface RoleMapper extends BaseMapper { + + + /** + * 分页查询字典数据 + * @param page 分页数据 + * @param queryWrapper 查询条件 + * @return 字典数据 + */ + Page page(@Param("page")Page page, @Param("ew") QueryWrapper queryWrapper); + + + + /** + * 删除角色和用户的绑定 + * @param ids + * @return + */ + Boolean deleteUserRole(@Param("ids")List ids); + + /** + * 删除角色和资源的绑定 + * @param ids + * @return + */ + Boolean deleteFunctionRole(@Param("ids")List ids); + + /** + * 删除角色和组件的绑定 + * @param ids + * @return + */ + Boolean deleteComponentRole(@Param("ids")List ids); +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/UserMapper.java b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/UserMapper.java new file mode 100644 index 000000000..693709175 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/UserMapper.java @@ -0,0 +1,59 @@ +package com.njcn.user.mapper; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.njcn.user.pojo.dto.excel.UserExcel; +import com.njcn.user.pojo.po.User; +import com.njcn.user.pojo.vo.UserVO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

    + * Mapper 接口 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface UserMapper extends BaseMapper { + + /** + * 根据部门ids集合查询是否有用户绑定 + * + * @param ids 部门id集合 + * @param state 用户状态 + * @return 绑定的结果 + */ + List selectDeptsId(@Param("ids") List ids, @Param("state") Integer state); + + /** + * 分页查询用户数据 + * + * @param page 分页数据 + * @param queryWrapper 查询条件 + * @param state 用户状态 + * @param type 用户类型 + * @return 用户数据 + */ + Page page(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper, @Param("state") Integer state, @Param("type") Integer type); + + /** + * 审核用户列表 + * + * @param page 分页数据 + * @param queryWrapper 查询条件 + * @return 用户数据 + */ + Page checkPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + /** + * 查询需要导出的用户数据 + * + * @param queryWrapper 查询条件 + * @return 查询出的用户数据 + */ + List queryExportUser(@Param("ew") QueryWrapper queryWrapper); +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/UserRoleMapper.java b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/UserRoleMapper.java new file mode 100644 index 000000000..b25390f88 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/UserRoleMapper.java @@ -0,0 +1,24 @@ +package com.njcn.user.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.njcn.user.pojo.po.UserRole; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

    + * Mapper 接口 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface UserRoleMapper extends BaseMapper { + /** + * 根据角色id集合查询是否绑定 + * @param ids + * @return + */ + List selectUserRole(@Param("ids")List ids); +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/UserSetMapper.java b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/UserSetMapper.java new file mode 100644 index 000000000..7fed3a65d --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/UserSetMapper.java @@ -0,0 +1,16 @@ +package com.njcn.user.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.njcn.user.pojo.po.UserSet; + +/** + *

    + * Mapper 接口 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface UserSetMapper extends BaseMapper { + +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/UserStrategyMapper.java b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/UserStrategyMapper.java new file mode 100644 index 000000000..1af615c2c --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/UserStrategyMapper.java @@ -0,0 +1,16 @@ +package com.njcn.user.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.njcn.user.pojo.po.UserStrategy; + +/** + *

    + * Mapper 接口 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface UserStrategyMapper extends BaseMapper { + +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/AuthClientMapper.xml b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/AuthClientMapper.xml new file mode 100644 index 000000000..cca826115 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/AuthClientMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/ComponentMapper.xml b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/ComponentMapper.xml new file mode 100644 index 000000000..2758aeba9 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/ComponentMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/DeptMapper.xml b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/DeptMapper.xml new file mode 100644 index 000000000..1c268948e --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/DeptMapper.xml @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + DELETE FROM pq_dept_line where id in + + #{item} + + + + + update sys_user set Dept_Id = "" where Dept_Id in + + #{item} + + + + + + + diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/FunctionMapper.xml b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/FunctionMapper.xml new file mode 100644 index 000000000..e8961c322 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/FunctionMapper.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/HomePageMapper.xml b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/HomePageMapper.xml new file mode 100644 index 000000000..888647e8b --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/HomePageMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/RoleComponentMapper.xml b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/RoleComponentMapper.xml new file mode 100644 index 000000000..0ed630a62 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/RoleComponentMapper.xml @@ -0,0 +1,13 @@ + + + + + diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/RoleFunctionMapper.xml b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/RoleFunctionMapper.xml new file mode 100644 index 000000000..1b620512c --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/RoleFunctionMapper.xml @@ -0,0 +1,13 @@ + + + + + diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/RoleMapper.xml b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/RoleMapper.xml new file mode 100644 index 000000000..117205a06 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/RoleMapper.xml @@ -0,0 +1,35 @@ + + + + + + + + + DELETE FROM sys_user_role where role_id in + + #{item} + + + + + DELETE FROM sys_role_function where role_id in + + #{item} + + + + + DELETE FROM sys_role_component where role_id in + + #{item} + + + diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/UserMapper.xml b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/UserMapper.xml new file mode 100644 index 000000000..bddd144d8 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/UserMapper.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/UserRoleMapper.xml b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/UserRoleMapper.xml new file mode 100644 index 000000000..cd6cf1ea7 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/UserRoleMapper.xml @@ -0,0 +1,13 @@ + + + + + diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/UserSetMapper.xml b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/UserSetMapper.xml new file mode 100644 index 000000000..e70794485 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/UserSetMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/UserStrategyMapper.xml b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/UserStrategyMapper.xml new file mode 100644 index 000000000..904ef7698 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/mapper/mapping/UserStrategyMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/IAuthClientService.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IAuthClientService.java new file mode 100644 index 000000000..7d8b9be08 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IAuthClientService.java @@ -0,0 +1,22 @@ +package com.njcn.user.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.user.pojo.po.AuthClient; + +/** + *

    + * 服务类 + *

    + * + * @author hongawen + * @since 2021-12-15 + */ +public interface IAuthClientService extends IService { + + /** + * 根据客户端名称获取客户端 + * @param clientName 客户端名称 + * @return . + */ + AuthClient getAuthClientByName(String clientName); +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/IComponentService.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IComponentService.java new file mode 100644 index 000000000..51df319fe --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IComponentService.java @@ -0,0 +1,69 @@ +package com.njcn.user.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.user.pojo.param.ComponentParam; +import com.njcn.user.pojo.po.Component; +import com.njcn.user.pojo.vo.ComponentVO; + +import java.util.List; + +/** + *

    + * 服务类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface IComponentService extends IService { + + /** + * 功能描述: 新增组件 + * + * @param componentParam + * @return boolean + * @author xy + * @date 2022/1/19 9:55 + */ + boolean addComponent(ComponentParam componentParam); + + /** + * 功能描述: 删除组件 + * + * @param id + * @return boolean + * @author xy + * @date 2022/1/19 9:55 + */ + boolean deleteComponent(String id); + + /** + * 功能描述: 修改组件 + * + * @param componentParam + * @return boolean + * @author xy + * @date 2022/1/19 9:55 + */ + boolean updateComponent(ComponentParam.ComponentUpdateParam componentParam); + + /** + * 功能描述: 获取组件树 + * + * @param + * @return com.njcn.user.pojo.po.Component + * @author xy + * @date 2022/1/19 14:45 + */ + List getComponentTree(); + + + /** + * 功能描述: 获取用户组件树 + * @param + * @return java.util.List + * @author xy + * @date 2022/1/24 12:33 + */ + List getUserComponentTree(); +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/IDeptService.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IDeptService.java new file mode 100644 index 000000000..45d2a7d82 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IDeptService.java @@ -0,0 +1,134 @@ +package com.njcn.user.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.system.pojo.dto.AreaTreeDTO; +import com.njcn.user.pojo.dto.DeptDTO; +import com.njcn.user.pojo.param.DeptParam; +import com.njcn.user.pojo.po.Dept; +import com.njcn.user.pojo.vo.DeptAllTreeVO; +import com.njcn.user.pojo.vo.DeptTreeVO; +import com.njcn.user.pojo.vo.DeptVO; +import com.njcn.web.pojo.param.DeptLineParam; + +import java.util.List; + +/** + *

    + * 服务类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface IDeptService extends IService { + + /** + * 根据前台传递参数,分页查询部门信息 + * + * @param queryParam 查询参数 + * @return 部门列表 + */ + Page listDept(DeptParam.QueryParam queryParam); + + /** + * 新增部门 + * + * @param deptParam 部门信息 + * @return 操作结果 + */ + boolean addDept(DeptParam deptParam); + + /** + * 修改部门信息 + * + * @param updateParam 部门数据 + * @return 操作结果 + */ + boolean updateDept(DeptParam.DeptUpdateParam updateParam); + + /** + * 批量逻辑删除部门数据 + * + * @param ids 字典id集合 + * @return 操作结果 + */ + boolean deleteDept(List ids); + + + /** + * 部门树 + * @return 结果 + */ + List deptTree(); + + /** + * 根据登录用户获取区域树 + * @return 结果 + */ + List loginDeptTree(); + + /** + * 已经绑定的区域 + * @return 已经绑定的区域 + */ + List deptArea(); + + /** + * 行政树 + * @param id id + * @param type type + * @return 结果 + */ + List getAreaTree(String id, Integer type); + + /** + * 获取省份ids + * @param ids ids + * @return 结果 + */ + boolean selectPid(List ids); + + /** + * 根据部门id获取部门名称 + * @param id + * @return java.lang.String + * @author xy + */ + String getNameByDeptId(String id); + + /** + * 根据条件获取后代部门索引 + * @param id 部门id + * @param type 指定部门类型 + * @return 后代部门索引 + */ + List getDeptDescendantIndexes(String id, List type); + + /** + * 根据区域索引获取部门索引 + * @param area + * @return java.lang.String + * @author xy + * @date 2022/2/14 15:08 + */ + String getDeptIdByArea(String area); + + /** + * 根据部门索引获取区域索引 + * @param deptId + * @return java.lang.String + * @author denghuajun + * @date 2022/2/24 15:08 + */ + String getAreaIdByDeptId(String deptId); + + /** + * 功能描述: 获取顶层部门的id + * @param + * @return java.lang.String + * @author xy + * @date 2022/3/28 9:32 + */ + String getTopDeptId(); +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/IFunctionService.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IFunctionService.java new file mode 100644 index 000000000..dccf2a6f1 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IFunctionService.java @@ -0,0 +1,116 @@ +package com.njcn.user.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.user.pojo.param.FunctionParam; +import com.njcn.user.pojo.param.RoleParam; +import com.njcn.user.pojo.po.Function; +import com.njcn.user.pojo.vo.FunctionVO; + +import java.util.List; + +/** + *

    + * 服务类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface IFunctionService extends IService { + + /** + * 刷新用户权限信息到缓存中 + */ + void refreshRolesFunctionsCache(); + + /** + * 功能描述:新增资源 + * + * @param functionParam 资源参数 + * @return boolean + * @author xy + * @date 2022/1/17 11:19 + */ + boolean addFunction(FunctionParam functionParam); + + /** + * 功能描述: 修改菜单 + * + * @param functionParam + * @return boolean + * @author xy + * @date 2022/1/17 14:23 + */ + boolean updateFunction(FunctionParam.FunctionUpdateParam functionParam); + + /** + * 功能描述:删除菜单 + * + * @param id + * @return boolean + * @author xy + * @date 2022/1/17 16:53 + */ + boolean deleteFunction(String id); + + /** + * 功能描述: 获取菜单树 + * + * @param + * @return java.util.List + * @author xy + * @date 2022/1/17 17:04 + */ + List getFunctionTree(); + + /** + * 功能描述: 根据id获取菜单详情 + * + * @param id + * @return com.njcn.user.pojo.po.Function + * @author xy + * @date 2022/1/17 17:39 + */ + Function getFunctionById(String id); + + /** + * 功能描述: 根据菜单id获取按钮 + * + * @param id + * @return java.util.List + * @author xy + * @date 2022/1/17 17:40 + */ + List getButtonsById(String id); + + /** + * 功能描述: 获取路由菜单 + * + * @param + * @return java.util.List + * @author xy + * @date 2022/1/18 13:47 + */ + List getRouteMenu(); + + /** + * 功能描述: 角色分配菜单 + * + * @param roleFunctionComponent + * @return java.util.List + * @author xy + * @date 2022/2/17 17:00 + */ + Boolean updateRoleComponent(RoleParam.RoleFunctionComponent roleFunctionComponent); + + /** + * 功能描述: 获取用户菜单树 + * + * @param + * @return java.util.List + * @author xy + * @date 2022/2/21 11:29 + */ + List getUserFunctionTree(); + +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/IHomePageService.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IHomePageService.java new file mode 100644 index 000000000..07bf89d10 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IHomePageService.java @@ -0,0 +1,80 @@ +package com.njcn.user.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.user.pojo.param.HomePageParam; +import com.njcn.user.pojo.po.HomePage; + +import java.util.List; + +/** + *

    + * 服务类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface IHomePageService extends IService { + + /** + * 功能描述: 新增驾驶舱 + * + * @param homePageParam + * @return boolean + * @author xy + * @date 2022/1/18 16:54 + */ + boolean add(HomePageParam homePageParam); + + /** + * 功能描述: 删除驾驶舱 + * + * @param id + * @return boolean + * @author xy + * @date 2022/1/18 16:54 + */ + boolean delete(String id); + + /** + * 功能描述: 修改驾驶舱 + * + * @param homePageUpdate + * @return boolean + * @author xy + * @date 2022/1/18 16:54 + */ + boolean update(HomePageParam.HomePageUpdateParam homePageUpdate); + + + /** + * 功能描述: 获取用户的首页模式 + * + * @param id + * @return java.util.List + * @author xy + * @date 2022/1/18 15:33 + */ + List getHomePagesByUserId(String id); + + /** + * 功能描述:根据驾驶舱id获取详情 + * + * @param id + * @return com.njcn.user.pojo.po.HomePage + * @author xy + * @date 2022/1/18 17:29 + */ + HomePage getHomePageById(String id); + + /** + * 功能描述:查看已使用的驾驶舱路径 + * + * @param path + * @return java.util.List + * @author xy + * @date 2022/1/18 17:34 + */ + List getUsedHomePage(String path); + +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/IRoleComponentService.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IRoleComponentService.java new file mode 100644 index 000000000..9f86ad8f6 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IRoleComponentService.java @@ -0,0 +1,32 @@ +package com.njcn.user.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.user.pojo.param.RoleParam; +import com.njcn.user.pojo.po.RoleComponent; + +import java.util.List; + +/** + *

    + * 服务类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface IRoleComponentService extends IService { + + /** + * 功能描述: 根据角色id获取组件 + * + * @param idList + * @return java.util.List + * @author xy + * @date 2022/1/24 12:41 + */ + List selectRoleComponent(List idList); + + boolean updateRoleComponent(RoleParam.RoleFunctionComponent roleFunctionComponent); + + +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/IRoleFunctionService.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IRoleFunctionService.java new file mode 100644 index 000000000..69211fa04 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IRoleFunctionService.java @@ -0,0 +1,28 @@ +package com.njcn.user.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.user.pojo.po.RoleFunction; + +import java.util.List; + +/** + *

    + * 服务类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface IRoleFunctionService extends IService { + List getFunctionsByRoleIndex(String id); + + /** + * 功能描述: 根据角色集合获取菜单方法 + * + * @param roleList + * @return java.util.List + * @author xy + * @date 2022/1/18 14:22 + */ + List getFunctionsByList(List roleList); +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/IRoleService.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IRoleService.java new file mode 100644 index 000000000..f21a9d4f3 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IRoleService.java @@ -0,0 +1,81 @@ +package com.njcn.user.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.user.pojo.param.RoleParam; +import com.njcn.user.pojo.po.Role; +import com.njcn.user.pojo.vo.RoleVO; + +import java.util.List; + +/** + *

    + * 服务类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface IRoleService extends IService { + + /** + * 根据用户id获取角色名 + * @param id 用户id + * @return 角色名集合 + */ + List getRoleNameByUserId(String id); + + /** + * 根据用户id获取角色名称 name + * @param id 用户id + * @return 角色名集合 + */ + List getNameByUserId(String id); + + /** + * 根据用户id获取角色id + * @param id 用户id + * @return 角色名集合 + */ + List getIdByUserId(String id); + + /** + * 分页查询角色列表 + * @param queryParam + * @return + */ + Page listRole(RoleParam.QueryParam queryParam); + + /** + * 根据权限类型分页查询角色列表 + * @param id + * @return + */ + List selectRoleDetail(Integer id); + + /** + * 新增部门 + * + * @param deptParam 角色信息 + * @return 操作结果 + */ + boolean addRole(RoleParam deptParam); + + /** + * 修改部门信息 + * + * @param updateParam 角色数据 + * @return 操作结果 + */ + boolean updateRole(RoleParam.RoleUpdateParam updateParam); + + /** + * 批量逻辑删除角色数据 + * + * @param ids 角色id集合 + * @return 操作结果 + */ + boolean deleteRole(List ids); + + Boolean selectRelevance(List ids); +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/IUserRoleService.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IUserRoleService.java new file mode 100644 index 000000000..997d211a6 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IUserRoleService.java @@ -0,0 +1,48 @@ +package com.njcn.user.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.user.pojo.po.UserRole; + +import java.util.List; + +/** + *

    + * 服务类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface IUserRoleService extends IService { + + /** + * 根据用户索引获取 用户--角色关系数据 + * @param id 用户ID + * @return 关系数据 + */ + List getUserRoleByUserId(String id); + + /** + * 功能描述:新增用户和角色的关系 + * TODO + * + * @param id + * @param roles + * @return boolean + * @author xy + * @date 2021/12/30 16:24 + */ + boolean addUserRole(String id,List roles); + + /** + * 功能描述:修改用户和角色的关系 + * TODO + * + * @param id + * @param roles + * @return boolean + * @author xy + * @date 2022/1/13 14:14 + */ + boolean updateUserRole(String id,List roles); +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/IUserService.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IUserService.java new file mode 100644 index 000000000..3d6215c8d --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IUserService.java @@ -0,0 +1,161 @@ +package com.njcn.user.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.user.pojo.param.UserParam; +import com.njcn.user.pojo.po.User; +import com.njcn.user.pojo.dto.UserDTO; +import com.njcn.user.pojo.vo.UserVO; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/** + *

    + * 服务类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface IUserService extends IService { + + /** + * 根据登录名获取用户信息 + * @param loginName 登录名 + * @return 用户信息 + */ + UserDTO getUserByName(String loginName); + + /** + * 认证结束后,判断用户状态是否能正常访问系统 + * @param loginName 登录名 + */ + void judgeUserStatus(String loginName); + + /** + * 功能描述: 新增用户 + * TODO + * 1.sys_user_set表生成工作秘钥和SM4密码 + * 2.sys_user新增用户 + * 3.sys_user_role新增用户和角色关系 + * @param addUserParam + * @return boolean + * @author xy + * @date 2021/12/30 11:42 + */ + boolean addUser(UserParam.UserAddParam addUserParam); + + /** + * 功能描述:更新用户 + * TODO + * @param updateUserParam + * @return boolean + * @author xy + * @date 2022/1/13 13:38 + */ + boolean updateUser(UserParam.UserUpdateParam updateUserParam); + + /** + * 功能描述:删除用户 + * TODO + * + * @param id + * @return boolean + * @author xy + * @date 2022/1/13 16:31 + */ + boolean deleteUser(String id); + + /** + * 功能描述:审核用户 + * TODO + * + * @param list + * @return boolean + * @author xy + * @date 2022/1/13 16:31 + */ + boolean checkUser(List list); + + /** + * 功能描述:根据用户id获取用户详情 + * TODO + * + * @param id + * @return com.njcn.user.pojo.vo.UserVO + * @author xy + * @date 2022/1/13 17:10 + */ + UserVO getUserById(String id); + + /** + * 功能描述:根据查询条件分页查询列表 + * TODO + * + * @param queryParam + * @return com.baomidou.mybatisplus.extension.plugins.pagination.Page + * @author xy + * @date 2022/1/14 9:26 + */ + Page userList(UserParam.UserQueryParam queryParam); + + /** + * 功能描述:查询待审核用户列表 + * TODO + * + * @return com.baomidou.mybatisplus.extension.plugins.pagination.Page + * @author xy + * @date 2022/1/14 9:26 + */ + Page checkUserList(UserParam.UserQueryParam queryParam); + + /** + * 功能描述: 修改用户密码 + * TODO + * + * @param id + * @param password + * @return boolean + * @author xy + * @date 2022/1/14 15:21 + */ + boolean updatePassword(String id,String password); + + /** + * 功能描述:修改用户登录认证密码错误次数 + * @param loginName 登录名 + * @return boolean + * @author xy + */ + String updateUserLoginErrorTimes(String loginName); + + /** + * 功能描述:密码二次确认 + * @param password + * @return boolean + * @author xy + * @date 2022/1/19 16:37 + */ + boolean passwordConfirm(String password); + + /** + * 功能描述:首次登录修改密码 + * + * @param loginName 登录名 + * @param password 密码 + * @param ip ip + * @return boolean + * @author xy + * @date 2022/3/1 15:39 + */ + boolean updateFirstPassword(String loginName, String password, String ip); + + /** + * 根据前端条件,查询用户数据,并保存在本地 + * + * @param queryParam 导出用户列表的条件参数 + * @return 用户列表表格的绝对路径 + */ + String exportUser(UserParam.UserQueryParam queryParam,String methodDescribe); +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/IUserSetService.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IUserSetService.java new file mode 100644 index 000000000..bcacf8d8f --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IUserSetService.java @@ -0,0 +1,72 @@ +package com.njcn.user.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.user.pojo.param.UserParam; +import com.njcn.user.pojo.po.UserSet; + +/** + *

    + * 服务类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface IUserSetService extends IService { + + /** + * 功能描述: + * 新增用户时,去用户配置表存储工作秘钥和SM4密码 + * + * @param addUserParam + * @return com.njcn.user.pojo.po.UserSet + * @author xy + * @date 2021/12/30 16:03 + */ + UserSet addUserSet(UserParam.UserAddParam addUserParam); + + /** + * 功能描述: 登陆后 修改用户密码 + * + * @param id 用户id + * @param newPassword 新密码 + * @return java.lang.String + * @author xy + * @date 2022/1/21 12:39 + */ + String updatePassword(String id,String newPassword); + + /** + * 功能描述: 未登录 修改用户密码 + * + * @param id 用户id + * @param newPassword 新密码 + * @param name 用户名 + * @param ip ip + * @return java.lang.String + * @author xy + * @date 2022/1/21 12:39 + */ + String updateFirstPassword(String id, String newPassword, String name, String ip); + + + /** + * 功能描述: + * + * @param password + * @return java.lang.String + * @author xy + * @date 2022/1/19 16:58 + */ + String getDecryptPassword(String password); + + /** + * 功能描述: 获取当前用户配置信息 + * + * @param userId 用户id + * @return com.njcn.user.pojo.po.UserSet + * @author xy + * @date 2022/1/19 17:03 + */ + UserSet getUserSetByUserId(String userId); +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/IUserStrategyService.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IUserStrategyService.java new file mode 100644 index 000000000..9ea3e1b47 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IUserStrategyService.java @@ -0,0 +1,22 @@ +package com.njcn.user.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.user.pojo.po.UserStrategy; + +/** + *

    + * 服务类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +public interface IUserStrategyService extends IService { + + /** + * 查询用户策略数据 + * @return 用户策略信息 + * @param casualUser + */ + UserStrategy getUserStrategy(Integer casualUser); +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/AuthClientServiceImpl.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/AuthClientServiceImpl.java new file mode 100644 index 000000000..baf8b5797 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/AuthClientServiceImpl.java @@ -0,0 +1,34 @@ +package com.njcn.user.service.impl; + +import com.njcn.common.pojo.enums.common.DataStateEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.system.api.AreaFeignClient; +import com.njcn.system.pojo.po.Area; +import com.njcn.user.mapper.AuthClientMapper; +import com.njcn.user.pojo.po.AuthClient; +import com.njcn.user.service.IAuthClientService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + + +/** + *

    + * 服务实现类 + *

    + * + * @author hongawen + * @since 2021-12-15 + */ +@Service +@RequiredArgsConstructor +public class AuthClientServiceImpl extends ServiceImpl implements IAuthClientService { + + @Override + public AuthClient getAuthClientByName(String clientName) { + return lambdaQuery() + .eq(AuthClient::getName,clientName) + .eq(AuthClient::getState,DataStateEnum.ENABLE.getCode()) + .one(); + } +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/ComponentServiceImpl.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/ComponentServiceImpl.java new file mode 100644 index 000000000..a97cbf977 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/ComponentServiceImpl.java @@ -0,0 +1,155 @@ +package com.njcn.user.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.user.enums.UserResponseEnum; +import com.njcn.user.mapper.ComponentMapper; +import com.njcn.user.pojo.constant.ComponentState; +import com.njcn.user.pojo.constant.FunctionState; +import com.njcn.user.pojo.dto.ComponentDTO; +import com.njcn.user.pojo.param.ComponentParam; +import com.njcn.user.pojo.po.Component; +import com.njcn.user.pojo.vo.ComponentVO; +import com.njcn.user.service.IComponentService; +import com.njcn.user.service.IRoleComponentService; +import com.njcn.user.service.IRoleService; +import com.njcn.web.utils.RequestUtil; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + *

    + * 服务实现类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@AllArgsConstructor +@Service +public class ComponentServiceImpl extends ServiceImpl implements IComponentService { + + private final ComponentMapper componentMapper; + + private final IRoleService roleService; + + private final IRoleComponentService roleComponentService; + + @Override + public boolean addComponent(ComponentParam componentParam) { + checkComponentParam(componentParam,false); + Component component = new Component(); + BeanUtil.copyProperties(componentParam, component); + String functionGroup = componentParam.getFunctionGroup().stream().map(String::valueOf).collect(Collectors.joining(",")); + component.setFunctionGroup(functionGroup); + component.setState(ComponentState.ENABLE); + if (Objects.equals(componentParam.getPid(), FunctionState.FATHER_PID)){ + component.setPids(FunctionState.FATHER_PID); + } else { + Component fatherComponent = this.lambdaQuery().eq(Component::getId,componentParam.getPid()).one(); + if (Objects.equals(fatherComponent.getPid(),FunctionState.FATHER_PID)){ + component.setPids(componentParam.getPid()); + } else { + String pidS = fatherComponent.getPids(); + component.setPids(pidS+","+componentParam.getPid()); + } + } + return this.save(component); + } + + @Override + public boolean deleteComponent(String id) { + return this.lambdaUpdate() + .set(Component::getState, ComponentState.DELETE) + .in(Component::getId, id) + .update(); + } + + @Override + public boolean updateComponent(ComponentParam.ComponentUpdateParam componentParam) { + checkComponentParam(componentParam,true); + Component component = new Component(); + BeanUtil.copyProperties(componentParam, component); + String functionGroup = componentParam.getFunctionGroup().stream().map(String::valueOf).collect(Collectors.joining(",")); + component.setFunctionGroup(functionGroup); + return this.updateById(component); + } + + @Override + public List getComponentTree() { + List list = new ArrayList<>(); + List componentList = componentMapper.getAllComponent(); + componentList.forEach(item->{ + ComponentVO componentVO = new ComponentVO(); + BeanUtil.copyProperties(item, componentVO); + componentVO.setFunctionGroup(Arrays.stream(item.getFunctionGroup().split(",")).map(s -> Integer.valueOf(s.trim())).collect(Collectors.toList())); + list.add(componentVO); + }); + return list.stream() + .filter(fun -> Objects.equals(ComponentState.FATHER_PID,fun.getPid())) + .peek(funS -> funS.setChildren(getChildCategoryList(funS, list))) + .collect(Collectors.toList()); + } + + @Override + public List getUserComponentTree() { + List result = new ArrayList<>(); + List componentVOList = new ArrayList<>(); + List roleList = roleService.getIdByUserId(RequestUtil.getUserIndex()); + if (!CollectionUtils.isEmpty(roleList)){ + List componentList = roleComponentService.selectRoleComponent(roleList); + if (!CollectionUtils.isEmpty(componentList)){ + List list = componentMapper.getComponentByList(componentList); + list.forEach(item->{ + ComponentVO componentVO = new ComponentVO(); + BeanUtil.copyProperties(item, componentVO); + componentVO.setFunctionGroup(Arrays.stream(item.getFunctionGroup().split(",")).map(s -> Integer.valueOf(s.trim())).collect(Collectors.toList())); + componentVOList.add(componentVO); + }); + result = componentVOList.stream() + .filter(fun -> Objects.equals(ComponentState.FATHER_PID,fun.getPid())) + .peek(funS -> funS.setChildren(getChildCategoryList(funS, componentVOList))) + .collect(Collectors.toList()); + } + } + return result; + } + + /** + * 递归组装组件表 + */ + private List getChildCategoryList(ComponentVO currMenu, List categories) { + return categories.stream().filter(o -> Objects.equals(o.getPid(),currMenu.getId())) + .peek(o -> o.setChildren(getChildCategoryList(o, categories))) + .collect(Collectors.toList()); + } + + /** + * 校验参数, + * 1.检查是否存在相同名称的组件 + */ + private void checkComponentParam(ComponentParam componentParam, boolean isExcludeSelf) { + LambdaQueryWrapper componentLambdaQueryWrapper = new LambdaQueryWrapper<>(); + componentLambdaQueryWrapper + .eq(Component::getName, componentParam.getName()) + .eq(Component::getState, ComponentState.ENABLE); + //更新的时候,需排除当前记录 + if (isExcludeSelf) { + if (componentParam instanceof ComponentParam.ComponentUpdateParam) { + componentLambdaQueryWrapper.ne(Component::getId, ((ComponentParam.ComponentUpdateParam) componentParam).getId()); + } + } + int countByAccount = this.count(componentLambdaQueryWrapper); + //大于等于1个则表示重复 + if (countByAccount >= 1) { + throw new BusinessException(UserResponseEnum.COMPONENT_NAME_EXIST); + } + } +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/DeptServiceImpl.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/DeptServiceImpl.java new file mode 100644 index 000000000..5c5b25797 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/DeptServiceImpl.java @@ -0,0 +1,313 @@ +package com.njcn.user.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.njcn.common.pojo.enums.common.DataStateEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.db.constant.DbConstant; +import com.njcn.device.api.DeptLineFeignClient; +import com.njcn.system.api.AreaFeignClient; +import com.njcn.system.pojo.dto.AreaTreeDTO; +import com.njcn.user.enums.UserResponseEnum; +import com.njcn.user.enums.UserStatusEnum; +import com.njcn.user.mapper.DeptMapper; +import com.njcn.user.mapper.UserMapper; +import com.njcn.user.pojo.dto.DeptDTO; +import com.njcn.user.pojo.param.DeptParam; +import com.njcn.user.pojo.po.Dept; +import com.njcn.user.pojo.po.User; +import com.njcn.user.pojo.vo.DeptAllTreeVO; +import com.njcn.user.pojo.vo.DeptTreeVO; +import com.njcn.user.pojo.vo.DeptVO; +import com.njcn.user.service.IDeptService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.web.factory.PageFactory; +import com.njcn.web.pojo.param.DeptLineParam; +import com.njcn.web.utils.RequestUtil; +import com.njcn.web.utils.WebUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + *

    + * 服务实现类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class DeptServiceImpl extends ServiceImpl implements IDeptService { + + private final AreaFeignClient areaFeignClient; + + private final DeptLineFeignClient deptLineFeignClient; + + private final UserMapper userMapper; + + @Override + public Page listDept(DeptParam.QueryParam queryParam) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (ObjectUtil.isNotNull(queryParam)) { + //查询参数不为空,进行条件填充 + if (StrUtil.isNotBlank(queryParam.getSearchValue())) { + //部门根据名称模糊查询 + queryWrapper + .and(param -> param.like("sys_dept.name", queryParam.getSearchValue())); + } + //排序 + if (ObjectUtil.isAllNotEmpty(queryParam.getSortBy(), queryParam.getOrderBy())) { + queryWrapper.orderBy(true, queryParam.getOrderBy().equals(DbConstant.ASC), StrUtil.toUnderlineCase(queryParam.getSortBy())); + } else { + //没有排序参数,默认根据sort字段排序,没有排序字段的,根据updateTime更新时间排序 + queryWrapper.orderBy(true, queryParam.getOrderBy().equals(DbConstant.ASC), "sys_dept.sort"); + } + } + queryWrapper.ne("sys_dept.state", DataStateEnum.DELETED.getCode()); + //初始化分页数据 + return this.baseMapper.page(new Page<>(PageFactory.getPageNum(queryParam), PageFactory.getPageSize(queryParam)), queryWrapper); + } + + + @Override + public boolean addDept(DeptParam deptParam) { + checkDicDataCode(deptParam, false); + Dept dept = new Dept(); + BeanUtil.copyProperties(deptParam, dept); + if (deptParam.getPid().equals("-1")) { + //上层节点 + dept.setPids("0"); + } else { + String pids = "," + deptParam.getPid(); + String pid = this.baseMapper.getIdString(deptParam.getPid()); + //上层节点 + dept.setPids(pid + pids); + } + //默认为正常状态 + dept.setState(DataStateEnum.ENABLE.getCode()); + return this.save(dept); + } + + @Override + public boolean updateDept(DeptParam.DeptUpdateParam updateParam) { + checkDicDataCode(updateParam, true); + Dept dept = new Dept(); + BeanUtil.copyProperties(updateParam, dept); + return this.updateById(dept); + } + + @Override + public boolean deleteDept(List ids) { + LambdaQueryWrapper queryWrapperDept = new LambdaQueryWrapper<>(); + queryWrapperDept.eq(Dept::getState, DataStateEnum.ENABLE.getCode()); + //查询出所有部门 + List deptList = this.baseMapper.selectList(queryWrapperDept); + List allIds = new ArrayList<>(); + for (String id : ids) { + for (Dept dept : deptList) { + if (dept.getId().equalsIgnoreCase(id) || dept.getPids().indexOf(id) > 0){ + allIds.add(dept.getId()); + } + } + } + allIds = allIds.stream().distinct().collect(Collectors.toList()); + /** + * 删除部门和监测点的绑定 + */ + this.baseMapper.deleteDeptLine(allIds); + /** + * 清空用户和部门的绑定关系 + */ + this.baseMapper.deleteUserDept(allIds); + return this.lambdaUpdate().set(Dept::getState, DataStateEnum.DELETED.getCode()).in(Dept::getId, allIds).update(); + } + + @Override + public List deptTree() { + List deptType = WebUtil.filterDeptType(); + String deptIndex = RequestUtil.getDeptIndex(); + List deptList = this.baseMapper.getDeptTree(deptIndex, deptType); + return deptList.stream() + .filter(deptVO -> deptVO.getId().equals(deptIndex)) + .peek(deptFirst -> { + deptFirst.setChildren(getChildren(deptFirst, deptList)); + if (deptFirst.getType() == 0) { + deptFirst.setName(deptFirst.getAreaName()); + } + }) + .collect(Collectors.toList()); + } + + @Override + public List loginDeptTree() { + List deptType = WebUtil.filterDeptType(); + String deptIndex = RequestUtil.getDeptIndex(); + List deptList = this.baseMapper.getAllDeptTree(deptIndex, deptType); + return deptList.stream() + .filter(deptVO -> deptVO.getId().equals(deptIndex)) + .peek(deptFirst -> { + deptFirst.setChildren(getChildrens(deptFirst, deptList)); + }) + .collect(Collectors.toList()); + } + + @Override + public List deptArea() { + return this.baseMapper.deptArea(DataStateEnum.ENABLE.getCode()); + } + + @Override + public List getAreaTree(String id, Integer type) { + List areaTreeVO = deptArea(); + HttpResult> areaTreeDTOS = areaFeignClient.areaDeptTree(id, type); + List list = areaTreeDTOS.getData(); + for (AreaTreeDTO areaTreeVOList : list) { + if (areaTreeVO.contains(areaTreeVOList.getId())) { + areaTreeVOList.setName(areaTreeVOList.getName() + "(已被绑定)"); + areaTreeVOList.setIsFalse(1); + } + if (areaTreeVOList.getChildren().size() != 0) { + for (AreaTreeDTO treeDTO : areaTreeVOList.getChildren()) { + if (areaTreeVO.contains(treeDTO.getId())) { + treeDTO.setName(treeDTO.getName() + "(已被绑定)"); + treeDTO.setIsFalse(1); + } + if (treeDTO.getChildren().size() != 0) { + for (AreaTreeDTO areaTreeDTO : treeDTO.getChildren()) { + if (areaTreeVO.contains(areaTreeDTO.getId())) { + areaTreeDTO.setName(areaTreeDTO.getName() + "(已被绑定)"); + areaTreeDTO.setIsFalse(1); + } + if (areaTreeDTO.getChildren().size() != 0) { + for (AreaTreeDTO dto : areaTreeDTO.getChildren()) { + if (areaTreeVO.contains(dto.getId())) { + dto.setName(dto.getName() + "(已被绑定)"); + dto.setIsFalse(1); + } + } + } + } + } + } + } + } + return list; + } + + @Override + public boolean selectPid(List ids) { + /** + * 判断是否有子节点 + */ + List dept = this.baseMapper.selectPid(ids, DataStateEnum.ENABLE.getCode()); + /** + * 判断是否存在绑定关系 + */ + HttpResult deptLineVOHttpResult = deptLineFeignClient.selectDeptBindLines(ids); + /** + * 用户是否关联 + */ + List userList = userMapper.selectDeptsId(ids, DataStateEnum.ENABLE.getCode()); + + if (dept.size() > 0 || deptLineVOHttpResult.getData() || userList.size() > 0) { + return true; + } else { + return false; + } + } + + @Override + public String getNameByDeptId(String id) { + if (!Objects.isNull(lambdaQuery().eq(Dept::getId, id).one())) { + return lambdaQuery().eq(Dept::getId, id).one().getName(); + } + return ""; + } + + @Override + public List getDeptDescendantIndexes(String id, List type) { + return this.baseMapper.getDeptDescendantIndexes(id, type); + } + + @Override + public String getDeptIdByArea(String area) { + Dept dept = lambdaQuery().eq(Dept::getArea, area).eq(Dept::getState, UserStatusEnum.NORMAL.getCode()).one(); + if (!Objects.isNull(dept)) { + return dept.getId(); + } else { + return ""; + } + } + + @Override + public String getAreaIdByDeptId(String deptId) { + Dept dept = lambdaQuery().eq(Dept::getId, deptId).eq(Dept::getState, UserStatusEnum.NORMAL.getCode()).one(); + if (!Objects.isNull(dept)) { + return dept.getArea(); + } else { + return ""; + } + } + + @Override + public String getTopDeptId() { + return this.lambdaQuery().eq(Dept::getPid,"0").one().getId(); + } + + /** + * 校验参数,检查是否存在相同编码的部门 + */ + private void checkDicDataCode(DeptParam deptParam, boolean isExcludeSelf) { + LambdaQueryWrapper deptLambdaQueryWrapper = new LambdaQueryWrapper<>(); + deptLambdaQueryWrapper + .eq(Dept::getName, deptParam.getName()) + .eq(Dept::getState, DataStateEnum.ENABLE.getCode()); + //更新的时候,需排除当前记录 + if (isExcludeSelf) { + if (deptParam instanceof DeptParam.DeptUpdateParam) { + deptLambdaQueryWrapper.ne(Dept::getId, ((DeptParam.DeptUpdateParam) deptParam).getId()); + } + } + int countByAccount = this.count(deptLambdaQueryWrapper); + //大于等于1个则表示重复 + if (countByAccount >= 1) { + throw new BusinessException(UserResponseEnum.DEPT_NAME_REPEAT); + } + } + + /** + * 递归查找所有部门的下级部门 + */ + private List getChildren(DeptTreeVO deptFirst, List allDept) { + return allDept.stream().filter(dept -> dept.getPid().equals(deptFirst.getId())) + .peek(deptVo -> { + deptVo.setChildren(getChildren(deptVo, allDept)); + if (deptVo.getType() == 0) { + deptVo.setName(deptVo.getAreaName()); + } + }).collect(Collectors.toList()); + } + + /** + * 递归查找所有部门的下级部门 + */ + private List getChildrens(DeptAllTreeVO deptFirst, List allDept) { + return allDept.stream().filter(dept -> dept.getPid().equals(deptFirst.getId())) + .peek(deptVo -> { + deptVo.setChildren(getChildrens(deptVo, allDept)); + }).collect(Collectors.toList()); + } +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/FunctionServiceImpl.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/FunctionServiceImpl.java new file mode 100644 index 000000000..100400e02 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/FunctionServiceImpl.java @@ -0,0 +1,303 @@ +package com.njcn.user.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.common.pojo.constant.SecurityConstants; +import com.njcn.common.pojo.enums.common.DataStateEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.redis.pojo.enums.RedisKeyEnum; +import com.njcn.redis.utils.RedisUtil; +import com.njcn.user.enums.UserResponseEnum; +import com.njcn.user.mapper.FunctionMapper; +import com.njcn.user.mapper.RoleFunctionMapper; +import com.njcn.user.pojo.constant.FunctionState; +import com.njcn.user.pojo.constant.UserType; +import com.njcn.user.pojo.param.FunctionParam; +import com.njcn.user.pojo.param.RoleParam; +import com.njcn.user.pojo.po.*; +import com.njcn.user.pojo.vo.FunctionVO; +import com.njcn.user.service.*; +import com.njcn.web.utils.RequestUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.*; +import java.util.stream.Collectors; + +/** + *

    + * 服务实现类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class FunctionServiceImpl extends ServiceImpl implements IFunctionService { + + private final RedisUtil redisUtil; + + private final IRoleService roleService; + + private final IRoleFunctionService roleFunctionService; + + private final FunctionMapper functionMapper; + + private final IUserRoleService userRoleService; + + private final IHomePageService homePageService; + + private final RoleFunctionMapper roleFunctionMapper; + + /** + * 将系统中角色--资源对应数据缓存到redis + * 先清除,再缓存 + */ + @Override + public void refreshRolesFunctionsCache() { + redisUtil.delete(RedisKeyEnum.ROLE_FUNCTION_KEY.getKey()); + redisUtil.delete(RedisKeyEnum.PUBLIC_FUNCTIONS_KEY.getKey()); + //缓存公共资源 + List publicFunctions = lambdaQuery() + .eq(Function::getType, 2) + .eq(Function::getState, DataStateEnum.ENABLE.getCode()) + .list(); + redisUtil.saveByKey( + RedisKeyEnum.PUBLIC_FUNCTIONS_KEY.getKey() + , publicFunctions.stream().map(Function::getPath).collect(Collectors.toList()) + ); + + //缓存每个角色对应的资源 + Map> roleFunctionInfo = new HashMap<>(8); + List roles = roleService.lambdaQuery() + .eq(Role::getState, DataStateEnum.ENABLE.getCode()) + .list(); + + roles.forEach(role -> { + //根据当前角色列表获取其所对应的所有资源 + List roleFunctions = roleFunctionService.lambdaQuery() + .eq(RoleFunction::getRoleId, role.getId()) + .list(); + //根据角色权限关系表获取权限的uri + if (CollectionUtil.isEmpty(roleFunctions)) { + roleFunctionInfo.put(SecurityConstants.AUTHORITY_PREFIX+role.getCode(), null); + } else { + List functions = lambdaQuery() + .in(Function::getId, roleFunctions.stream().map(RoleFunction::getFunctionId).collect(Collectors.toList())) + .eq(Function::getState, DataStateEnum.ENABLE.getCode()) + .list(); + roleFunctionInfo.put(SecurityConstants.AUTHORITY_PREFIX+role.getCode(), functions.stream().map(Function::getPath).collect(Collectors.toList())); + } + }); + redisUtil.saveByKey(RedisKeyEnum.ROLE_FUNCTION_KEY.getKey(), roleFunctionInfo); + } + + @Override + public boolean addFunction(FunctionParam functionParam) { + checkFunctionParam(functionParam,false); + Function function = new Function(); + BeanUtil.copyProperties(functionParam, function); + function.setState(FunctionState.ENABLE); + if (Objects.equals(functionParam.getPid(),FunctionState.FATHER_PID)){ + function.setPids(FunctionState.FATHER_PID); + } else { + Function fatherFaction = this.lambdaQuery().eq(Function::getId,functionParam.getPid()).one(); + if (Objects.equals(fatherFaction.getPid(),FunctionState.FATHER_PID)){ + function.setPids(functionParam.getPid()); + } else { + String pidS = fatherFaction.getPids(); + function.setPids(pidS+","+functionParam.getPid()); + } + } + boolean result = this.save(function); + if (result){ + //刷新redis里面的资源权限 + refreshRolesFunctionsCache(); + } + return result; + } + + @Override + public boolean updateFunction(FunctionParam.FunctionUpdateParam functionParam) { + checkFunctionParam(functionParam,true); + Function function = new Function(); + BeanUtil.copyProperties(functionParam, function); + boolean result = this.updateById(function); + if (result){ + refreshRolesFunctionsCache(); + } + return result; + } + + @Override + public boolean deleteFunction(String id) { + boolean result = this.lambdaUpdate() + .set(Function::getState, FunctionState.DELETE) + .in(Function::getId,id) + .update(); + if (result){ + refreshRolesFunctionsCache(); + } + return result; + } + + @Override + public List getFunctionTree() { + List list = functionMapper.getAllFunctions(); + return list.stream() + .filter(fun -> Objects.equals(FunctionState.FATHER_PID,fun.getPid())) + .peek(funS -> funS.setChildren(getChildCategoryList(funS, list))) + .sorted(Comparator.comparingInt(FunctionVO::getSort)) + .collect(Collectors.toList()); + } + + @Override + public Function getFunctionById(String id) { + return this.lambdaQuery().eq(Function::getId,id).one(); + } + + @Override + public List getButtonsById(String id) { + return this.lambdaQuery().eq(Function::getPid,id).eq(Function::getType,FunctionState.BUTTON).eq(Function::getState,FunctionState.ENABLE).list(); + } + + @Override + public List getRouteMenu() { + List result = new ArrayList<>(); + List functionList = new ArrayList<>(); + if (Objects.equals(RequestUtil.getUsername(),UserType.SUPER_ADMIN)){ + //查询所有菜单 + functionList = this.lambdaQuery().eq(Function::getState, FunctionState.ENABLE).list().stream().map(Function::getId).distinct().collect(Collectors.toList()); + } else { + List roleList = userRoleService.getUserRoleByUserId(RequestUtil.getUserIndex()).stream().map(UserRole::getRoleId).distinct().collect(Collectors.toList()); + functionList = roleFunctionService.getFunctionsByList(roleList); + } + if (CollectionUtils.isEmpty(functionList)){ + return result; + } + List functionVOList = functionMapper.getFunctionsByList(functionList); + result = functionVOList.stream() + .filter(fun -> Objects.equals(FunctionState.FATHER_PID,fun.getPid())) + .peek(funS -> funS.setChildren(getChildCategoryList(funS, functionVOList))) + .sorted(Comparator.comparingInt(FunctionVO::getSort)) + .collect(Collectors.toList()); + //组装驾驶舱 + setDriverChildren(result); + return result; + } + + @Override + public Boolean updateRoleComponent(RoleParam.RoleFunctionComponent roleFunctionComponent) { + deleteComponentsByRoleIndex(roleFunctionComponent.getId()); + if (!roleFunctionComponent.getIdList().isEmpty()){ + RoleFunction roleFunction = new RoleFunction(); + roleFunction.setRoleId(roleFunctionComponent.getId()); + roleFunctionComponent.getIdList().forEach( + pojo->{ + roleFunction.setFunctionId(pojo); + roleFunctionMapper.insert(roleFunction); + }); + } + refreshRolesFunctionsCache(); + return true; + } + + @Override + public List getUserFunctionTree() { + List result = new ArrayList<>(); + List functionList = new ArrayList<>(); + if (Objects.equals(RequestUtil.getUsername(), UserType.SUPER_ADMIN)){ + //查询所有菜单 + functionList = this.lambdaQuery().eq(Function::getState, FunctionState.ENABLE).list().stream().map(Function::getId).distinct().collect(Collectors.toList()); + } else { + List roleList = userRoleService.getUserRoleByUserId(RequestUtil.getUserIndex()).stream().map(UserRole::getRoleId).distinct().collect(Collectors.toList()); + functionList = roleFunctionService.getFunctionsByList(roleList); + } + List functionVOList = functionMapper.getUserFunctionsByList(functionList); + result = functionVOList.stream() + .filter(fun -> Objects.equals(FunctionState.FATHER_PID,fun.getPid())) + .peek(funS -> funS.setChildren(getChildCategoryList(funS, functionVOList))) + .sorted(Comparator.comparingInt(FunctionVO::getSort)) + .collect(Collectors.toList()); + //组装驾驶舱 + setDriverChildren(result); + return result; + } + + /** + * 根据角色删除资源 + * @param roleIndex + */ + public void deleteComponentsByRoleIndex(String roleIndex) { + QueryWrapper roleFunctionQueryWrapper = new QueryWrapper<>(); + roleFunctionQueryWrapper.eq("sys_role_function.role_id",roleIndex); + roleFunctionMapper.delete(roleFunctionQueryWrapper); + } + + /** + * 根据当前分类找出子类,递归找出子类的子类 + */ + private List getChildCategoryList(FunctionVO currMenu, List categories) { + return categories.stream().filter(o -> Objects.equals(o.getPid(),currMenu.getId())) + .peek(o -> o.setChildren(getChildCategoryList(o, categories))) + .sorted(Comparator.comparingInt(FunctionVO::getSort)) + .collect(Collectors.toList()); + } + + /** + * 组装驾驶舱子级 + * @param list + */ + private void setDriverChildren(List list) { + List homePages = homePageService.getHomePagesByUserId(RequestUtil.getUserIndex()); + list.forEach(item->{ + if (Objects.equals(item.getRoutePath(),FunctionState.DRIVER_NAME)){ + homePages.forEach(po->{ + FunctionVO functionVO = new FunctionVO(); + functionVO.setId(po.getId()); + functionVO.setPid(item.getId()); + functionVO.setTitle(po.getName()); + functionVO.setCode(item.getCode()); + functionVO.setRouteName(po.getPath().substring(po.getPath().lastIndexOf("/")+1)); + functionVO.setRoutePath(po.getPath()); + functionVO.setIcon(po.getIcon()); + functionVO.setSort(po.getSort()); + functionVO.setType(item.getType()); + functionVO.setRemark(po.getName()); + functionVO.setChildren(new ArrayList<>()); + item.getChildren().add(functionVO); + }); + } + }); + } + + /** + * 校验参数, + * 1.检查是否存在相同名称的菜单 + */ + private void checkFunctionParam(FunctionParam functionParam, boolean isExcludeSelf) { + LambdaQueryWrapper functionLambdaQueryWrapper = new LambdaQueryWrapper<>(); + functionLambdaQueryWrapper + .eq(Function::getPath, functionParam.getPath()) + .eq(Function::getState, FunctionState.ENABLE); + //更新的时候,需排除当前记录 + if (isExcludeSelf) { + if (functionParam instanceof FunctionParam.FunctionUpdateParam) { + functionLambdaQueryWrapper.ne(Function::getId, ((FunctionParam.FunctionUpdateParam) functionParam).getId()); + } + } + int countByAccount = this.count(functionLambdaQueryWrapper); + //大于等于1个则表示重复 + if (countByAccount >= 1) { + throw new BusinessException(UserResponseEnum.FUNCTION_PATH_EXIST); + } + } + +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/HomePageServiceImpl.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/HomePageServiceImpl.java new file mode 100644 index 000000000..d9dc8f73d --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/HomePageServiceImpl.java @@ -0,0 +1,103 @@ +package com.njcn.user.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.common.pojo.enums.common.DataStateEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.system.enums.SystemResponseEnum; +import com.njcn.system.pojo.param.DictTypeParam; +import com.njcn.system.pojo.po.DictType; +import com.njcn.user.enums.UserResponseEnum; +import com.njcn.user.mapper.HomePageMapper; +import com.njcn.user.pojo.constant.HomePageState; +import com.njcn.user.pojo.param.HomePageParam; +import com.njcn.user.pojo.po.HomePage; +import com.njcn.user.service.IHomePageService; +import com.njcn.web.utils.RequestUtil; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + *

    + * 服务实现类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@Service +public class HomePageServiceImpl extends ServiceImpl implements IHomePageService { + + @Override + public boolean add(HomePageParam homePageParam) { + checkHomePageName(homePageParam,false); + String component = homePageParam.getLayout().replace(""","\""); + HomePage homePage = new HomePage(); + BeanUtil.copyProperties(homePageParam, homePage); + homePage.setUserId(RequestUtil.getUserIndex()); + homePage.setState(HomePageState.ENABLE); + homePage.setLayout(component); + return this.save(homePage); + } + + @Override + public boolean delete(String id) { + return this.lambdaUpdate() + .set(HomePage::getState, HomePageState.DELETE) + .in(HomePage::getId, id) + .update(); + } + + @Override + public boolean update(HomePageParam.HomePageUpdateParam homePageUpdate) { + checkHomePageName(homePageUpdate,true); + HomePage homePage = new HomePage(); + BeanUtil.copyProperties(homePageUpdate, homePage); + return this.updateById(homePage); + } + + @Override + public List getHomePagesByUserId(String id) { + List userList = new ArrayList<>(); + userList.add(id); + userList.add(HomePageState.DEFAULT_USER_ID); + return this.lambdaQuery().in(HomePage::getUserId,userList).eq(HomePage::getState, HomePageState.ENABLE).orderByAsc(HomePage::getSort).list(); + } + + @Override + public HomePage getHomePageById(String id) { + return this.lambdaQuery().in(HomePage::getId,id).one(); + } + + @Override + public List getUsedHomePage(String path) { + return this.lambdaQuery().in(HomePage::getUserId,RequestUtil.getUserIndex()).eq(HomePage::getState,HomePageState.ENABLE).likeRight(HomePage::getPath,path).list().stream().map(HomePage::getPath).distinct().collect(Collectors.toList()); + } + + /** + * 校验参数,检查是否存在相同名称的首页 + */ + private void checkHomePageName(HomePageParam homePageParam, boolean isExcludeSelf) { + LambdaQueryWrapper homePageLambdaQueryWrapper = new LambdaQueryWrapper<>(); + homePageLambdaQueryWrapper + .eq(HomePage::getName,homePageParam.getName()) + .eq(HomePage::getState, HomePageState.ENABLE); + //更新的时候,需排除当前记录 + if(isExcludeSelf){ + if(homePageParam instanceof HomePageParam.HomePageUpdateParam){ + homePageLambdaQueryWrapper.ne(HomePage::getId,((HomePageParam.HomePageUpdateParam) homePageParam).getId()); + } + } + int countByAccount = this.count(homePageLambdaQueryWrapper); + //大于等于1个则表示重复 + if (countByAccount >= 1) { + throw new BusinessException(UserResponseEnum.REGISTER_HOMEPAGE_NAME_EXIST); + } + } + +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/RoleComponentServiceImpl.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/RoleComponentServiceImpl.java new file mode 100644 index 000000000..6eb4ae8f8 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/RoleComponentServiceImpl.java @@ -0,0 +1,57 @@ +package com.njcn.user.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.njcn.user.mapper.RoleComponentMapper; +import com.njcn.user.pojo.param.RoleParam; +import com.njcn.user.pojo.po.RoleComponent; +import com.njcn.user.service.IRoleComponentService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + *

    + * 服务实现类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@Service +public class RoleComponentServiceImpl extends ServiceImpl implements IRoleComponentService { + + @Override + public List selectRoleComponent(List idList) { + return this.lambdaQuery().in(RoleComponent::getRoleId,idList).list().stream().map(RoleComponent::getComponentId).collect(Collectors.toList()); + } + + @Override + public boolean updateRoleComponent(RoleParam.RoleFunctionComponent roleFunctionComponent) { + deleteComponentsByRoleIndex(roleFunctionComponent.getId()); + if (!roleFunctionComponent.getIdList().isEmpty()){ + RoleComponent roleComponent = new RoleComponent(); + roleComponent.setRoleId(roleFunctionComponent.getId()); + roleFunctionComponent.getIdList().forEach( + pojo->{ + roleComponent.setComponentId(pojo); + this.baseMapper.insert(roleComponent); + }); + } + return true; + } + + /** + * 根据角色删除组件 + * @param roleIndex + * @return + */ + public boolean deleteComponentsByRoleIndex(String roleIndex) { + QueryWrapper roleComponentQueryWrapper = new QueryWrapper<>(); + roleComponentQueryWrapper.eq("sys_role_component.role_id",roleIndex); + int row = this.baseMapper.delete(roleComponentQueryWrapper); + return row > 0; + } +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/RoleFunctionServiceImpl.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/RoleFunctionServiceImpl.java new file mode 100644 index 000000000..ebc4ac52c --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/RoleFunctionServiceImpl.java @@ -0,0 +1,39 @@ +package com.njcn.user.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.user.mapper.RoleFunctionMapper; +import com.njcn.user.pojo.po.RoleFunction; +import com.njcn.user.service.IRoleFunctionService; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + *

    + * 服务实现类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@Service +public class RoleFunctionServiceImpl extends ServiceImpl implements IRoleFunctionService { + + @Override + public List getFunctionsByRoleIndex(String id) { + List functionList = new ArrayList<>(); + QueryWrapper componentQueryWrapper = new QueryWrapper<>(); + componentQueryWrapper.eq("sys_role_function.role_id",id); + functionList = this.baseMapper.selectList(componentQueryWrapper).stream().map(RoleFunction::getFunctionId).collect(Collectors.toList()); + return functionList; + } + + @Override + public List getFunctionsByList(List roleList) { + return this.lambdaQuery().in(RoleFunction::getRoleId,roleList).list().stream().map(RoleFunction::getFunctionId).distinct().collect(Collectors.toList()); + } + +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/RoleServiceImpl.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/RoleServiceImpl.java new file mode 100644 index 000000000..abea2b74f --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/RoleServiceImpl.java @@ -0,0 +1,216 @@ +package com.njcn.user.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.njcn.common.pojo.enums.common.DataStateEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.user.enums.UserResponseEnum; +import com.njcn.user.mapper.RoleComponentMapper; +import com.njcn.user.mapper.RoleFunctionMapper; +import com.njcn.user.mapper.RoleMapper; +import com.njcn.user.mapper.UserRoleMapper; +import com.njcn.user.pojo.constant.RoleType; +import com.njcn.user.pojo.param.RoleParam; +import com.njcn.user.pojo.po.Role; +import com.njcn.user.pojo.po.RoleComponent; +import com.njcn.user.pojo.po.RoleFunction; +import com.njcn.user.pojo.po.UserRole; +import com.njcn.user.pojo.vo.RoleVO; +import com.njcn.user.service.IRoleService; +import com.njcn.user.service.IUserRoleService; +import com.njcn.web.factory.PageFactory; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + *

    + * 服务实现类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@Service +@RequiredArgsConstructor +public class RoleServiceImpl extends ServiceImpl implements IRoleService { + + private final IUserRoleService userRoleService; + + private final UserRoleMapper userRoleMapper; + + private final RoleFunctionMapper roleFunctionMapper; + + private final RoleComponentMapper roleComponentMapper; + + @Override + public List getRoleNameByUserId(String id) { + List userRoles = userRoleService.getUserRoleByUserId(id); + if (CollectionUtils.isEmpty(userRoles)) { + return new ArrayList<>(); + } + List roles = this.lambdaQuery() + .select(Role::getCode) + .eq(Role::getState, DataStateEnum.ENABLE.getCode()) + .in(Role::getId, userRoles.stream() + .map(UserRole::getRoleId) + .collect(Collectors.toList()) + ).list(); + return roles + .stream() + .map(Role::getCode) + .distinct() + .collect(Collectors.toList()); + } + + @Override + public List getNameByUserId(String id) { + List userRoles = userRoleService.getUserRoleByUserId(id); + if (CollectionUtils.isEmpty(userRoles)) { + return new ArrayList<>(); + } + List roles = this.lambdaQuery() + .select(Role::getName) + .eq(Role::getState, DataStateEnum.ENABLE.getCode()) + .in(Role::getId, userRoles.stream() + .map(UserRole::getRoleId) + .collect(Collectors.toList()) + ).list(); + return roles + .stream() + .map(Role::getName) + .distinct() + .collect(Collectors.toList()); + } + + @Override + public List getIdByUserId(String id) { + return userRoleService.getUserRoleByUserId(id).stream().map(UserRole::getRoleId).distinct().collect(Collectors.toList()); + } + + @Override + public Page listRole(RoleParam.QueryParam queryParam) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (ObjectUtil.isNotNull(queryParam)) { + //查询参数不为空,进行条件填充 + if (StrUtil.isNotBlank(queryParam.getSearchValue())) { + //部门根据名称模糊查询 + queryWrapper + .and(param -> param.like("sys_role.name", queryParam.getSearchValue())); + } + } + queryWrapper.ne("sys_role.state", DataStateEnum.DELETED.getCode()); + if (queryParam.getType().equals(0)){ + queryWrapper.in("sys_role.type", queryParam.getType(),1); + }else if(queryParam.getType().equals(1)){ + queryWrapper.eq("sys_role.type",2); + } + //初始化分页数据 + return this.baseMapper.page(new Page<>(PageFactory.getPageNum(queryParam), PageFactory.getPageSize(queryParam)), queryWrapper); + } + + @Override + public List selectRoleDetail(Integer id) { + List role = new ArrayList<>(); + if (Objects.equals(id, RoleType.SUPER_ADMINISTRATOR)){ + role.add(RoleType.ADMINISTRATOR); + } else { + role.add(RoleType.USER); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.ne("sys_role.state", DataStateEnum.DELETED.getCode()); + queryWrapper.in("sys_role.type",role).orderByAsc("sys_role.type"); + List roleVOList = this.baseMapper.selectList(queryWrapper); + return roleVOList; + } + + @Override + public boolean addRole(RoleParam roleParam) { + checkDicDataCode(roleParam, false); + Role role = new Role(); + BeanUtil.copyProperties(roleParam, role); + //默认为正常状态 + role.setState(DataStateEnum.ENABLE.getCode()); + return this.save(role); + } + + @Override + public boolean updateRole(RoleParam.RoleUpdateParam updateParam) { + checkDicDataCode(updateParam, true); + Role role = new Role(); + BeanUtil.copyProperties(updateParam, role); + return this.updateById(role); + } + + @Override + public boolean deleteRole(List ids) { + /** + * 删除角色和用户的绑定 + */ + this.baseMapper.deleteUserRole(ids); + + /** + * 删除角色和资源的绑定 + */ + this.baseMapper.deleteFunctionRole(ids); + + /** + * 删除角色和组件的绑定 + */ + this.baseMapper.deleteComponentRole(ids); + return this.lambdaUpdate().set(Role::getState, DataStateEnum.DELETED.getCode()).in(Role::getId, ids).update(); + } + + @Override + public Boolean selectRelevance(List ids) { + /** + * 判断角色是否和用户绑定 + */ + List userRoleList = this.userRoleMapper.selectUserRole(ids); + /** + * 判断角色是否和资源绑定 + */ + List roleFunctionList = this.roleFunctionMapper.selectRoleFunction(ids); + /** + * 判断角色是否和组件绑定 + */ + List roleComponentList = this.roleComponentMapper.selectRoleComponet(ids); + + if (userRoleList.size() > 0 || roleComponentList.size() > 0 || roleFunctionList.size() > 0) { + return true; + } else { + return false; + } + } + + /** + * 校验参数,检查是否存在相同编码的角色代码 + */ + private void checkDicDataCode(RoleParam roleParam, boolean isExcludeSelf) { + LambdaQueryWrapper roleLambdaQueryWrapper = new LambdaQueryWrapper<>(); + roleLambdaQueryWrapper + .eq(Role::getName, roleParam.getName()) + .eq(Role::getState, DataStateEnum.ENABLE.getCode()); + //更新的时候,需排除当前记录 + if (isExcludeSelf) { + if (roleParam instanceof RoleParam.RoleUpdateParam) { + roleLambdaQueryWrapper.ne(Role::getId, ((RoleParam.RoleUpdateParam) roleParam).getId()); + } + } + int countByAccount = this.count(roleLambdaQueryWrapper); + //大于等于1个则表示重复 + if (countByAccount >= 1) { + throw new BusinessException(UserResponseEnum.ROLE_NAME_REPEAT); + } + } +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/UserRoleServiceImpl.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/UserRoleServiceImpl.java new file mode 100644 index 000000000..ebdd71e10 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/UserRoleServiceImpl.java @@ -0,0 +1,97 @@ +package com.njcn.user.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; +import com.njcn.user.mapper.UserMapper; +import com.njcn.user.mapper.UserRoleMapper; +import com.njcn.user.pojo.po.UserRole; +import com.njcn.user.service.IUserRoleService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.util.*; +import java.util.stream.Collectors; + +/** + *

    + * 服务实现类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@Service +@AllArgsConstructor +public class UserRoleServiceImpl extends ServiceImpl implements IUserRoleService { + + private final UserRoleMapper userRoleMapper; + + @Override + public List getUserRoleByUserId(String id) { + return this.lambdaQuery().eq(UserRole::getUserId, id).list(); + } + + @Override + public boolean addUserRole(String id, List roles) { + boolean result = false; + if (!CollectionUtil.isEmpty(roles)){ + UserRole userRole = new UserRole(); + userRole.setUserId(id); + roles.forEach(pojo->{ + userRole.setRoleId(pojo); + this.save(userRole); + }); + result = true; + } + return result; + } + + @Override + @Transactional(rollbackFor = {Exception.class}) + public boolean updateUserRole(String id, List roles) { + //删除原有关系 + List userRoleList= this.lambdaQuery().eq(UserRole::getUserId, id).list().stream().map(UserRole::getRoleId).collect(Collectors.toList()); + LambdaQueryWrapper lambdaQuery = Wrappers.lambdaQuery(); + if (!CollectionUtils.isEmpty(userRoleList)){ + lambdaQuery.eq(UserRole::getUserId, id).in(UserRole::getRoleId,userRoleList); + userRoleMapper.delete(lambdaQuery); + } + //新增关系 + roles.forEach(role->{ + UserRole userRole = new UserRole(); + userRole.setUserId(id); + userRole.setRoleId(role); + this.save(userRole); + }); +// //查出原有的关系 +// List userRoleList= this.lambdaQuery().eq(UserRole::getUserId, id).list().stream().map(UserRole::getRoleId).collect(Collectors.toList()); +// //存储共有的集合 +// List allRole = roles.stream().filter(userRoleList::contains).collect(Collectors.toList()); +// userRoleList.removeAll(allRole); +// //要删除的的集合 +// Set deleteRole = new HashSet<>(userRoleList); +// roles.removeAll(allRole); +// //要新增的集合 +// Set addRole = new HashSet<>(roles); +// LambdaQueryWrapper lambdaQuery = Wrappers.lambdaQuery(); +// if (!CollectionUtils.isEmpty(deleteRole)){ +// lambdaQuery.eq(UserRole::getUserId, id).in(UserRole::getRoleId,deleteRole); +// userRoleMapper.delete(lambdaQuery); +// } +// if (!CollectionUtils.isEmpty(addRole)){ +// addRole.forEach(role->{ +// UserRole userRole = new UserRole(); +// userRole.setUserId(id); +// userRole.setRoleId(role); +// this.save(userRole); +// }); +// } + return true; + } +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/UserServiceImpl.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/UserServiceImpl.java new file mode 100644 index 000000000..84b8ddde6 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/UserServiceImpl.java @@ -0,0 +1,532 @@ +package com.njcn.user.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.CharUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.common.config.GeneralInfo; +import com.njcn.common.pojo.constant.LogInfo; +import com.njcn.common.pojo.enums.common.DataStateEnum; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.common.utils.PubUtils; +import com.njcn.common.utils.sm.DesUtils; +import com.njcn.common.utils.sm.Sm4Utils; +import com.njcn.db.constant.DbConstant; +import com.njcn.poi.excel.ExcelUtil; +import com.njcn.poi.pojo.bo.BaseLineProExcelBody; +import com.njcn.user.enums.UserResponseEnum; +import com.njcn.user.enums.UserStatusEnum; +import com.njcn.user.mapper.UserMapper; +import com.njcn.user.pojo.constant.UserState; +import com.njcn.user.pojo.constant.UserType; +import com.njcn.user.pojo.dto.UserDTO; +import com.njcn.user.pojo.dto.excel.UserExcel; +import com.njcn.user.pojo.param.UserParam; +import com.njcn.user.pojo.po.User; +import com.njcn.user.pojo.po.UserSet; +import com.njcn.user.pojo.po.UserStrategy; +import com.njcn.user.pojo.vo.UserVO; +import com.njcn.user.service.*; +import com.njcn.web.factory.PageFactory; +import com.njcn.web.utils.RequestUtil; +import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.validation.constraints.NotNull; +import java.io.File; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +/** + *

    + * 服务实现类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@Service +@RequiredArgsConstructor +public class UserServiceImpl extends ServiceImpl implements IUserService { + + private final IRoleService roleService; + + private final IUserSetService userSetService; + + private final IUserRoleService userRoleService; + + private final IUserStrategyService userStrategyService; + + private final IDeptService deptService; + + private final GeneralInfo generalInfo; + + @Override + public UserDTO getUserByName(String loginName) { + User user = getUserByLoginName(loginName); + if (Objects.isNull(user)) { + return null; + } + List roleNames = roleService.getRoleNameByUserId(user.getId()); + UserSet userSet = userSetService.lambdaQuery().eq(UserSet::getUserId, user.getId()).one(); + return new UserDTO(user.getId(), user.getLoginName(), user.getName(), user.getPassword(), roleNames, userSet.getSecretKey(), userSet.getStandBy(), user.getDeptId(), user.getType()); + } + + @Override + public void judgeUserStatus(String loginName) { + User user = getUserByLoginName(loginName); + if (Objects.isNull(user)) { + throw new BusinessException(UserResponseEnum.LOGIN_WRONG_PWD); + } + //超级管理员则不做任何逻辑判断 + if (user.getType() == 0) { + return; + } + //根据用户类型获取对应用户策略 + UserStrategy userStrategy = userStrategyService.lambdaQuery() + .eq(UserStrategy::getType, user.getCasualUser()) + .eq(UserStrategy::getState, DataStateEnum.ENABLE.getCode()) + .one(); + switch (user.getState()) { + case UserState.LOCKED: + LocalDateTime lockTime = user.getLockTime(); + lockTime = lockTime.plusMinutes(userStrategy.getLockPwdTime()); + LocalDateTime nowTime = LocalDateTime.now(); + //判断是否满足锁定时间 + if (nowTime.isBefore(lockTime)) { + throw new BusinessException(UserResponseEnum.LOGIN_USER_LOCKED); + } + break; + case UserState.DELETE: + //用户已注销 + throw new BusinessException(UserResponseEnum.LOGIN_USER_DELETE); + case UserState.UNCHECK: + //用户未审核 + throw new BusinessException(UserResponseEnum.LOGIN_USER_UNAUDITED); + case UserState.SLEEP: + //用户已休眠 + throw new BusinessException(UserResponseEnum.LOGIN_USER_SLEEP); + case UserState.OVERDUE: + //用户密码已过期 + throw new BusinessException(UserResponseEnum.LOGIN_USER_PASSWORD_EXPIRED); + default: + if (user.getPwdState() == 1) { + throw new BusinessException(UserResponseEnum.NEED_MODIFY_PWD); + } + //用户状态正常,判断其他细节 + judgeFirstLogin(user, userStrategy); + } + //所有验证通过后,更新用户登录时间,以及错误登录记录的信息归零。 + user.setState(UserState.ENABLE); + user.setLoginErrorTimes(0); + user.setLoginTime(LocalDateTime.now()); + user.setFirstErrorTime(null); + user.setLockTime(null); + this.baseMapper.updateById(user); + } + + @Override + @Transactional(rollbackFor = {Exception.class}) + public boolean addUser(UserParam.UserAddParam addUserParam) { + /** + * 检查注册用户的数据是否有重复 + * 1.登录名不能相同 + * 2.手机号不能相同 但手机号可以不填 + */ + if (!Objects.isNull(getUserByLoginName(addUserParam.getLoginName()))) { + throw new BusinessException(UserResponseEnum.REGISTER_LOGIN_NAME_EXIST); + } + if (StringUtils.isNotBlank(addUserParam.getPhone()) && !Objects.isNull(getUserByPhone(addUserParam.getPhone(), false, null))) { + throw new BusinessException(UserResponseEnum.REGISTER_PHONE_FAIL); + } + //sys_user_set表新增数据 + UserSet userSet = userSetService.addUserSet(addUserParam); + //sys_user表新增数据 + User user = cloneUserBoToUser(addUserParam, userSet); + //sys_user_role表新增数据 + boolean result = userRoleService.addUserRole(user.getId(), addUserParam.getRole()); + if (result) { + return true; + } else { + return false; + } + } + + @Override + @Transactional(rollbackFor = {Exception.class}) + public boolean updateUser(UserParam.UserUpdateParam updateUserParam) { + if (StringUtils.isNotBlank(updateUserParam.getPhone()) && !Objects.isNull(getUserByPhone(updateUserParam.getPhone(), true, updateUserParam.getId()))) { + throw new BusinessException(UserResponseEnum.REGISTER_PHONE_FAIL); + } + User user = new User(); + BeanUtil.copyProperties(updateUserParam, user); + //修改用户角色表 + userRoleService.updateUserRole(updateUserParam.getId(), updateUserParam.getRole()); + return this.updateById(user); + } + + @Override + public boolean deleteUser(String id) { + return this.lambdaUpdate() + .set(User::getState, UserState.DELETE) + .in(User::getId, id) + .update(); + } + + @Override + public boolean checkUser(List list) { + return this.lambdaUpdate() + .set(User::getState, UserState.ENABLE) + .in(User::getId, list) + .update(); + } + + @Override + public UserVO getUserById(String id) { + UserVO userVO = new UserVO(); + User user = lambdaQuery().eq(User::getId, id).one(); + if (Objects.isNull(user)) { + return null; + } + BeanUtil.copyProperties(user, userVO); + userVO.setDeptName(deptService.getNameByDeptId(user.getDeptId())); + userVO.setRoleList(roleService.getIdByUserId(id)); + userVO.setRole(roleService.getNameByUserId(id)); + return userVO; + } + + @Override + public Page userList(UserParam.UserQueryParam queryParam) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + Page page = new Page<>(); + Integer type = this.lambdaQuery().eq(User::getId, RequestUtil.getUserIndex()).one().getType(); + if (Objects.equals(UserType.SUPER_ADMINISTRATOR, type)) { + type = UserType.ADMINISTRATOR; + } else if (Objects.equals(UserType.ADMINISTRATOR, type)) { + type = UserType.USER; + } else if (Objects.equals(UserType.USER, type)) { + return page; + } + if (ObjectUtil.isNotNull(queryParam)) { + //查询参数不为空,进行条件填充 + if (StrUtil.isNotBlank(queryParam.getSearchValue())) { + //用户表提供用户名、登录名 模糊查询 + queryWrapper + .and(param -> param.like("sys_user.name", queryParam.getSearchValue()) + .or().like("sys_user.login_Name", queryParam.getSearchValue())); + } + //排序 + if (ObjectUtil.isAllNotEmpty(queryParam.getSortBy(), queryParam.getOrderBy())) { + queryWrapper.orderBy(true, queryParam.getOrderBy().equalsIgnoreCase(DbConstant.ASC), StrUtil.toUnderlineCase(queryParam.getSortBy())); + } else { + //默认根据最后登录时间排序 + queryWrapper.orderBy(true, false, "sys_user.login_time"); + } + } + queryWrapper.eq("sys_user.type", type); + page = this.baseMapper.page(new Page<>(PageFactory.getPageNum(queryParam), PageFactory.getPageSize(queryParam)), queryWrapper, queryParam.getSearchState(), queryParam.getCasualUser()); + page.getRecords().forEach(item -> { + item.setRoleList(roleService.getIdByUserId(item.getId())); + item.setRole(roleService.getNameByUserId(item.getId())); + }); + return page; + } + + @Override + public Page checkUserList(UserParam.UserQueryParam queryParam) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + Page page = new Page<>(); + Integer type = this.lambdaQuery().eq(User::getId, RequestUtil.getUserIndex()).one().getType(); + if (Objects.equals(UserType.SUPER_ADMINISTRATOR, type)) { + type = UserType.ADMINISTRATOR; + } else if (Objects.equals(UserType.ADMINISTRATOR, type)) { + type = UserType.USER; + } else if (Objects.equals(UserType.USER, type)) { + return page; + } + if (ObjectUtil.isNotNull(queryParam)) { + //查询参数不为空,进行条件填充 + if (StrUtil.isNotBlank(queryParam.getSearchValue())) { + //用户表提供用户名、登录名 模糊查询 + queryWrapper + .and(param -> param.like("sys_user.name", queryParam.getSearchValue()) + .or().like("sys_user.login_Name", queryParam.getSearchValue())); + } + //排序 + if (ObjectUtil.isAllNotEmpty(queryParam.getSortBy(), queryParam.getOrderBy())) { + queryWrapper.orderBy(true, queryParam.getOrderBy().equalsIgnoreCase(DbConstant.ASC), StrUtil.toUnderlineCase(queryParam.getSortBy())); + } else { + //默认根据注册时间排序 + queryWrapper.orderBy(true, queryParam.getOrderBy().equalsIgnoreCase(DbConstant.ASC), "sys_user.register_Time"); + } + } + queryWrapper.eq("sys_user.type", type).eq("sys_user.state", UserState.UNCHECK); + page = this.baseMapper.checkPage(new Page<>(PageFactory.getPageNum(queryParam), PageFactory.getPageSize(queryParam)), queryWrapper); + page.getRecords().forEach(item -> { + item.setRole(roleService.getNameByUserId(item.getId())); + }); + return page; + } + + @Override + public boolean updatePassword(String id, String password) { + String secretPassword = userSetService.updatePassword(id, password); + User user = lambdaQuery().eq(User::getId, id).one(); + user.setPassword(secretPassword); + return this.updateById(user); + } + + @Override + public String updateUserLoginErrorTimes(String loginName) { + User user = this.lambdaQuery().eq(User::getLoginName, loginName).one(); + LocalDateTime now = LocalDateTime.now(); + if (Objects.nonNull(user)) { + UserStrategy userStrategy = userStrategyService.getUserStrategy(user.getCasualUser()); + Integer loginErrorTimes = user.getLoginErrorTimes(); + ++loginErrorTimes; + if (Objects.isNull(user.getFirstErrorTime())) { + //首次错误,错误1次、记录第一次错误时间 + user.setLoginErrorTimes(loginErrorTimes); + user.setFirstErrorTime(LocalDateTime.now()); + } else if (loginErrorTimes <= userStrategy.getLimitPwdTimes()) { + //如果次数在策略之内,还未被锁定 + LocalDateTime firstErrorTime = user.getFirstErrorTime(); + firstErrorTime = firstErrorTime.plusMinutes(userStrategy.getLockPwdCheck()); + if (now.isAfter(firstErrorTime)) { + //重置密码错误次数、时间等记录 + user.setLoginErrorTimes(1); + user.setFirstErrorTime(LocalDateTime.now()); + } else { + user.setLoginErrorTimes(loginErrorTimes); + } + } else { + user.setLockTime(LocalDateTime.now()); + user.setState(UserStatusEnum.LOCKED.getCode()); + user.setLoginErrorTimes(loginErrorTimes); + this.baseMapper.updateById(user); + return UserResponseEnum.LOGIN_USER_LOCKED.getMessage(); + } + this.baseMapper.updateById(user); + } + return CommonResponseEnum.SUCCESS.getMessage(); + } + + @Override + public boolean passwordConfirm(String password) { + //当前用户加密密码 + String secretPassword = this.lambdaQuery().eq(User::getId, RequestUtil.getUserIndex()).one().getPassword(); + String decryptPassword = userSetService.getDecryptPassword(password); + UserSet userSet = userSetService.getUserSetByUserId(RequestUtil.getUserIndex()); + String secretKey = userSet.getSecretKey(); + Sm4Utils sm4 = new Sm4Utils(secretKey); + String mPwd = sm4.encryptData_ECB(decryptPassword); + //二次确认加密密码 + String secondSecretPassword = sm4.encryptData_ECB(mPwd + secretKey); + return Objects.equals(secretPassword, secondSecretPassword); + } + + @Override + @Transactional(rollbackFor = {Exception.class}) + public boolean updateFirstPassword(String secretName, String password, String ip) { + String loginName = DesUtils.aesDecrypt(secretName); + User user = this.lambdaQuery().eq(User::getLoginName, loginName).one(); + String secretPassword = userSetService.updateFirstPassword(user.getId(), password, loginName, ip); + user.setPassword(secretPassword); + user.setPwdState(UserState.NEEDLESS); + return this.updateById(user); + } + + @Override + public String exportUser(UserParam.UserQueryParam queryParam, String methodDescribe) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + List userExcels; + String fileName = methodDescribe + ".xlsx"; + String targetDir = generalInfo.getBusinessTempPath() + File.separator + RequestUtil.getUserIndex(); + File parentDir = new File(targetDir); + if(!parentDir.exists()){ + parentDir.mkdirs(); + } + File excel = new File(targetDir, fileName); + Integer type = this.lambdaQuery().eq(User::getId, RequestUtil.getUserIndex()).one().getType() + 1; + if (ObjectUtil.isNotNull(queryParam)) { + //查询参数不为空,进行条件填充 + if (StrUtil.isNotBlank(queryParam.getSearchValue())) { + //用户表提供用户名、登录名 模糊查询 + queryWrapper + .and(param -> param.like("sys_user.name", queryParam.getSearchValue()) + .or().like("sys_user.login_Name", queryParam.getSearchValue())); + } + //排序 + if (ObjectUtil.isAllNotEmpty(queryParam.getSortBy(), queryParam.getOrderBy())) { + queryWrapper.orderBy(true, queryParam.getOrderBy().equalsIgnoreCase(DbConstant.ASC), StrUtil.toUnderlineCase(queryParam.getSortBy())); + } else { + //默认根据最后登录时间排序 + queryWrapper.orderBy(true, false, "sys_user.login_time"); + } + } + queryWrapper.eq("sys_user.type", type); + userExcels = this.baseMapper.queryExportUser(queryWrapper); + if (CollectionUtil.isEmpty(userExcels)) { + userExcels = new ArrayList<>(); + } else { + userExcels = userExcels.stream().peek(userExcel -> { + userExcel.setRole(String.join(",", roleService.getNameByUserId(userExcel.getId()))); + }).collect(Collectors.toList()); + } + ExcelUtil.exportExcelWithTargetFile(excel, UserExcel.class, userExcels); + return FileUtil.getAbsolutePath(excel); + } + + /** + * 根据登录名查询用户 + * + * @param loginName 登录名 + * @return 用户信息 + */ + private User getUserByLoginName(String loginName) { + return lambdaQuery() + .eq(User::getLoginName, loginName) + .one(); + } + + /** + * 根据手机号查询用户 + * + * @param phone 手机号码 + * @return 用户信息 + */ + private User getUserByPhone(String phone, boolean result, String id) { + if (result) { + return lambdaQuery() + .eq(User::getPhone, phone) + .ne(User::getId, id) + .one(); + } else { + return lambdaQuery() + .eq(User::getPhone, phone) + .one(); + } + } + + + /** + * 判断是否需要修改密码 + */ + private void judgeFirstLogin(@NotNull User user, UserStrategy userStrategy) { + if (user.getPwdState() == 1) { + throw new BusinessException(UserResponseEnum.NEED_MODIFY_PWD); + } else { + judgeIp(user, userStrategy); + } + } + + /** + * 判断用户是否在合理的IP内登录 + */ + private void judgeIp(@NotNull User user, UserStrategy userStrategy) { + String ipSection = user.getLimitIpStart() + "-" + user.getLimitIpEnd(); + if (RequestUtil.getRealIp().equalsIgnoreCase(LogInfo.UNKNOWN_IP)) { + //feign接口可能获取的IP是空的 + throw new BusinessException(UserResponseEnum.INVALID_IP); + } else if (!PubUtils.ipExistsInRange(RequestUtil.getRealIp(), ipSection)) { + throw new BusinessException(UserResponseEnum.INVALID_IP); + } else { + judgeLimitTime(user, userStrategy); + } + judgeLimitTime(user, userStrategy); + } + + /** + * 判断用户是否在允许的时间段内登录 + */ + private void judgeLimitTime(@NotNull User user, UserStrategy userStrategy) { + int nowHour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY); + String[] limitTime = user.getLimitTime().split(StrUtil.DASHED); + if (nowHour >= Integer.parseInt(limitTime[0]) && nowHour < Integer.parseInt(limitTime[1])) { + judgePwdTimeValidity(user, userStrategy); + } else { + throw new BusinessException(UserResponseEnum.INVALID_TIME); + } + } + + /** + * 判断用户密码是否已经过期 + */ + private void judgePwdTimeValidity(@NotNull User user, UserStrategy userStrategy) { + LocalDateTime pwdValidity = user.getPwdValidity(); + pwdValidity = pwdValidity.plusMonths(userStrategy.getLimitPwdDate()); + if (LocalDateTime.now().isBefore(pwdValidity)) { + judgeLeisurePwd(user, userStrategy); + } else { + //将用户状态置为过期 + user.setState(UserState.OVERDUE); + this.baseMapper.updateById(user); + throw new BusinessException(UserResponseEnum.LOGIN_USER_PASSWORD_EXPIRED); + } + + } + + /** + * 判断用户闲置 + */ + private void judgeLeisurePwd(@NotNull User user, UserStrategy userStrategy) { + LocalDateTime now = LocalDateTime.now(); + LocalDateTime sleepTime = user.getLoginTime().plusDays(userStrategy.getSleep()); + LocalDateTime logoutTime = user.getLoginTime().plusDays(userStrategy.getLogout()); + if (now.isAfter(sleepTime) && now.isBefore(logoutTime)) { + //将用户状态置为休眠 + user.setState(UserState.SLEEP); + this.baseMapper.updateById(user); + throw new BusinessException(UserResponseEnum.LOGIN_USER_SLEEP); + } else if (now.isAfter(logoutTime)) { + //将用户状态置为注销 + user.setState(UserState.DELETE); + this.baseMapper.updateById(user); + throw new BusinessException(UserResponseEnum.LOGIN_USER_DELETE); + } + } + + + /** + * sys_user表新增数据 + * + * @param addUserParam 新增用户信息 + * @param userSet 用户配置信息 + * @return + */ + private User cloneUserBoToUser(UserParam.UserAddParam addUserParam, UserSet userSet) { + User user = new User(); + BeanUtil.copyProperties(addUserParam, user); + //设置用户id + user.setId(userSet.getUserId()); + //对密码做处理 SM4加密(SM4_1密码+工作秘钥) + String secretKey = userSet.getSecretKey(); + Sm4Utils sm4 = new Sm4Utils(secretKey); + user.setPassword(sm4.encryptData_ECB(userSet.getStandBy() + secretKey)); + //新建用户为管理员时,默认部门为顶级部门 + if (Objects.equals(addUserParam.getType(), UserType.ADMINISTRATOR)) { + user.setDeptId(deptService.getTopDeptId()); + } + //填写一些默认值 + user.setState(UserState.UNCHECK); + user.setOrigin(UserState.NORMAL_ORIGIN); + user.setCasualUser(UserType.OFFICIAL); + user.setPwdState(UserState.NEED); + user.setRegisterTime(LocalDateTime.now()); + user.setLoginTime(LocalDateTime.now()); + user.setPwdValidity(LocalDateTime.now()); + user.setLoginErrorTimes(UserState.ERROR_PASSWORD_TIMES); + user.setReferralCode(PubUtils.randomCode(6)); + this.save(user); + return user; + } +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/UserSetServiceImpl.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/UserSetServiceImpl.java new file mode 100644 index 000000000..809d56b7a --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/UserSetServiceImpl.java @@ -0,0 +1,159 @@ +package com.njcn.user.service.impl; + +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.njcn.common.pojo.constant.PatternRegex; +import com.njcn.common.pojo.constant.SecurityConstants; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.common.utils.PubUtils; +import com.njcn.common.utils.sm.Sm2; +import com.njcn.common.utils.sm.Sm4Utils; +import com.njcn.redis.utils.RedisUtil; +import com.njcn.user.enums.UserResponseEnum; +import com.njcn.user.mapper.UserMapper; +import com.njcn.user.mapper.UserSetMapper; +import com.njcn.user.pojo.constant.UserDefaultPassword; +import com.njcn.user.pojo.constant.UserState; +import com.njcn.user.pojo.param.UserParam; +import com.njcn.user.pojo.po.User; +import com.njcn.user.pojo.po.UserSet; +import com.njcn.user.service.IUserSetService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.web.utils.RequestUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import java.util.Objects; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + *

    + * 服务实现类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@Service +@RequiredArgsConstructor +public class UserSetServiceImpl extends ServiceImpl implements IUserSetService { + + private final RedisUtil redisUtil; + + private final UserMapper userMapper; + + @Override + public UserSet addUserSet(UserParam.UserAddParam addUserParam) { + UserSet userSet = new UserSet(); + String userId = IdUtil.simpleUUID(); + userSet.setUserId(userId); + String secretKey = PubUtils.randomCode(16); + userSet.setSecretKey(secretKey); + Sm4Utils sm4 = new Sm4Utils(secretKey); + //SM4加密初始默认密码 + String strSm4 = sm4.encryptData_ECB(UserDefaultPassword.DEFAULT_PASSWORD); + userSet.setStandBy(strSm4); + this.save(userSet); + return userSet; + } + + @Override + public String updatePassword(String id,String newPassword) { + String password = getSecretPassword(newPassword); + return updatePsd(id,password); + } + + @Override + public String updateFirstPassword(String id, String newPassword, String name, String ip) { + String password = getSecretPasswordNotLogin(newPassword, name, ip); + return updatePsd(id,password); + } + + @Override + public String getDecryptPassword(String password) { + return getSecretPassword(password); + } + + @Override + public UserSet getUserSetByUserId(String userId) { + return this.lambdaQuery().eq(UserSet::getUserId,userId).one(); + } + + /** + * 修改密码公共方法 + * @param id + * @param password + * @return + */ + private String updatePsd(String id, String password) { + Sm4Utils sm4; + String psd,strSm4; + String standard = PatternRegex.PASSWORD_REGEX; + Pattern pattern = Pattern.compile(standard); + Matcher m=pattern.matcher(password); + if (!m.find()){ + throw new BusinessException(UserResponseEnum.SPECIAL_PASSWORD); + } + UserSet userSet = this.lambdaQuery().eq(UserSet::getUserId, id).one(); + QueryWrapper userQueryWrapper = new QueryWrapper<>(); + userQueryWrapper.eq("sys_user.id",id); + User user = userMapper.selectOne(userQueryWrapper); + String secretPassword = user.getPassword(); + if (Objects.isNull(userSet)){ + UserSet newUserSet = new UserSet(); + String secretKey = PubUtils.randomCode(16); + newUserSet.setSecretKey(secretKey); + sm4 = new Sm4Utils(secretKey); + strSm4 = sm4.encryptData_ECB(password); + newUserSet.setStandBy(strSm4); + newUserSet.setUserId(id); + this.save(newUserSet); + psd = sm4.encryptData_ECB(strSm4 + secretKey); + } else { + sm4 = new Sm4Utils(userSet.getSecretKey()); + strSm4 = sm4.encryptData_ECB(password); + psd = sm4.encryptData_ECB(strSm4 + userSet.getSecretKey()); + } + if (Objects.equals(secretPassword,psd)){ + throw new BusinessException(UserResponseEnum.REPEAT_PASSWORD); + } + return psd; + } + + /** + * 未登录 + * 前端密文密码解码 + */ + private String getSecretPasswordNotLogin(String password, String name, String ip) { + String privateKey = redisUtil.getStringByKey(name + ip); + //秘钥用完即删 + redisUtil.delete(name + ip); + //对SM2解密面进行验证 + password = Sm2.getPasswordSM2Verify(privateKey, password); + if (StrUtil.isBlankIfStr(password)) { + throw new BusinessException(UserResponseEnum.PASSWORD_TRANSPORT_ERROR); + } + return password; + } + + /** + * 登陆后 + * 前端密文密码解码 + */ + private String getSecretPassword(String password) { + String loginName = RequestUtil.getUsername(); + String ip = RequestUtil.getRequest().getHeader(SecurityConstants.REQUEST_HEADER_KEY_CLIENT_REAL_IP); + String privateKey = redisUtil.getStringByKey(loginName + ip); + //秘钥用完即删 + redisUtil.delete(loginName + ip); + //对SM2解密面进行验证 + password = Sm2.getPasswordSM2Verify(privateKey, password); + if (StrUtil.isBlankIfStr(password)) { + throw new BusinessException(UserResponseEnum.PASSWORD_TRANSPORT_ERROR); + } + return password; + } +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/UserStrategyServiceImpl.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/UserStrategyServiceImpl.java new file mode 100644 index 000000000..56e755e9b --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/UserStrategyServiceImpl.java @@ -0,0 +1,36 @@ +package com.njcn.user.service.impl; + +import com.njcn.common.pojo.enums.common.DataStateEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.user.enums.UserResponseEnum; +import com.njcn.user.mapper.UserStrategyMapper; +import com.njcn.user.pojo.po.UserStrategy; +import com.njcn.user.service.IUserStrategyService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +import java.util.Objects; + +/** + *

    + * 服务实现类 + *

    + * + * @author hongawen + * @since 2021-12-13 + */ +@Service +public class UserStrategyServiceImpl extends ServiceImpl implements IUserStrategyService { + + @Override + public UserStrategy getUserStrategy(Integer casualUser) { + UserStrategy userStrategy = this.lambdaQuery() + .eq(UserStrategy::getState, DataStateEnum.ENABLE.getCode()) + .eq(UserStrategy::getType, casualUser) + .one(); + if (Objects.isNull(userStrategy)) { + throw new BusinessException(UserResponseEnum.LACK_USER_STRATEGY); + } + return userStrategy; + } +} diff --git a/pqs-user/user-boot/src/main/resources/bootstrap.yml b/pqs-user/user-boot/src/main/resources/bootstrap.yml new file mode 100644 index 000000000..a353b4735 --- /dev/null +++ b/pqs-user/user-boot/src/main/resources/bootstrap.yml @@ -0,0 +1,49 @@ +#当前服务的基本信息 +microservice: + ename: @artifactId@ + name: '@name@' + version: @version@ + sentinel: + url: @sentinel.url@ + gateway: + url: @gateway.url@ +server: + port: 10201 +#feign接口开启服务熔断降级处理 +feign: + sentinel: + enabled: true + +spring: + application: + name: @artifactId@ + #nacos注册中心以及配置中心的指定 + cloud: + nacos: + discovery: + server-addr: @nacos.url@ + namespace: @nacos.namespace@ + config: + server-addr: @nacos.url@ + namespace: @nacos.namespace@ + file-extension: yaml + shared-configs: + - data-id: share-config.yaml + refresh: true + - data-Id: share-config-datasource-db.yaml + refresh: true + main: + allow-bean-definition-overriding: true + + +#项目日志的配置 +logging: + config: http://@nacos.url@/nacos/v1/cs/configs?tenant=@nacos.namespace@&group=DEFAULT_GROUP&dataId=logback.xml + level: + root: info + + +#mybatis配置信息 +mybatis-plus: + #别名扫描 + type-aliases-package: com.njcn.user.pojo diff --git a/pqs-user/user-boot/src/test/java/com/njcn/BaseJunitTest.java b/pqs-user/user-boot/src/test/java/com/njcn/BaseJunitTest.java new file mode 100644 index 000000000..994ba4d6f --- /dev/null +++ b/pqs-user/user-boot/src/test/java/com/njcn/BaseJunitTest.java @@ -0,0 +1,18 @@ +package com.njcn; + +import com.njcn.user.UserBootApplication; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.web.WebAppConfiguration; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年12月10日 15:05 + */ +@RunWith(SpringRunner.class) +@WebAppConfiguration +@SpringBootTest(classes = UserBootApplication.class) +public class BaseJunitTest { +} diff --git a/pqs-user/user-boot/src/test/java/com/njcn/UserTest.java b/pqs-user/user-boot/src/test/java/com/njcn/UserTest.java new file mode 100644 index 000000000..5bfd082e3 --- /dev/null +++ b/pqs-user/user-boot/src/test/java/com/njcn/UserTest.java @@ -0,0 +1,25 @@ +package com.njcn; + +import lombok.SneakyThrows; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年12月14日 12:55 + */ +public class UserTest extends BaseJunitTest{ + + + + @SneakyThrows + @Test + public void test(){ + + + System.out.println("hello"); + + } + +} diff --git a/pqs.ipr b/pqs.ipr new file mode 100644 index 000000000..0d8690cf2 --- /dev/null +++ b/pqs.ipr @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pqs.iws b/pqs.iws new file mode 100644 index 000000000..03c854e98 --- /dev/null +++ b/pqs.iws @@ -0,0 +1,418 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +