ustcyc
2025-01-07 5fd51c437819f1c9d027a936db4ba2ee7cd2e053
升级架构
已添加81个文件
已修改66个文件
8778 ■■■■■ 文件已修改
.gitignore 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
README.md 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-admin/lib/fel.jar 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-admin/src/main/java/com/zhitan/web/controller/auxiliaryinput/ProductOutputController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-admin/src/main/java/com/zhitan/web/controller/benchmarkmanage/EnergyBenchmarkManageController.java 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-admin/src/main/java/com/zhitan/web/controller/carbonemission/CarbonEmissionController.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-admin/src/main/java/com/zhitan/web/controller/costmanagement/CostElectricityInputController.java 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-admin/src/main/java/com/zhitan/web/controller/costmanagement/CostPriceRelevancyController.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-admin/src/main/java/com/zhitan/web/controller/costmanagement/CostPriceTacticsController.java 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-admin/src/main/java/com/zhitan/web/controller/costmanagement/CostPriceTacticsTestController.java 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-admin/src/main/java/com/zhitan/web/controller/costmanagement/DeviationAnalysisController.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-admin/src/main/java/com/zhitan/web/controller/energydatastatistics/EnergyDataStatisticsController.java 178 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-admin/src/main/java/com/zhitan/web/controller/gatewaysetting/GatewaySettingController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-admin/src/main/java/com/zhitan/web/controller/homepage/HomePageController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-admin/src/main/java/com/zhitan/web/controller/monitor/SysLogininforController.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-admin/src/main/java/com/zhitan/web/controller/monitor/SysOperlogController.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-admin/src/main/java/com/zhitan/web/controller/peakvalley/PeakValleyController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-admin/src/main/java/com/zhitan/web/controller/powerDistribution/PowerDistributionController.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-admin/src/main/java/com/zhitan/web/controller/singlelogin/SingleLoginController.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-admin/src/main/java/com/zhitan/web/controller/spikesandvalleys/SpikesAndValleysSchemeController.java 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysDictDataController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysPostController.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysRoleController.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysUserController.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-admin/src/main/resources/application-dev.yml 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-admin/src/main/resources/application-prod.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-common/src/main/java/com/zhitan/common/core/domain/entity/SysRole.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-common/src/main/java/com/zhitan/common/core/domain/entity/SysUser.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-common/src/main/java/com/zhitan/common/enums/ElectricityTypeEnum.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-common/src/main/java/com/zhitan/common/utils/DateUtils.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-framework/src/main/java/com/zhitan/framework/config/MyBatisInterceptor.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-framework/src/main/java/com/zhitan/framework/config/SecurityConfig.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-framework/src/main/java/com/zhitan/framework/mqtt/MqttMessageCallback.java 87 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-framework/src/main/java/com/zhitan/framework/security/single/SingleAuthenticationProvider.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-framework/src/main/java/com/zhitan/framework/security/single/SingleAuthenticationToken.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-framework/src/main/java/com/zhitan/framework/web/service/PermissionService.java 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-framework/src/main/java/com/zhitan/framework/web/service/SysLoginService.java 62 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-framework/src/main/java/com/zhitan/framework/web/service/UserDetailsServiceImpl.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/pom.xml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/basicdata/domain/MeterImplement.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/basicdata/mapper/MeterImplementMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/basicdata/services/IMeterImplementService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/basicdata/services/impl/MeterImplementServiceImpl.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/benchmarkmanage/domain/EnergyBenchmarkManage.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/benchmarkmanage/mapper/EnergyBenchmarkManageMapper.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/benchmarkmanage/service/IEnergyBenchmarkManageService.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/benchmarkmanage/service/impl/EnergyBenchmarkManageServiceImpl.java 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/carbonemission/domain/CarbonEmission.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/carbonemission/domain/dto/CarbonEmissionDTO.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/carbonemission/domain/vo/CarbonEmissionRankVO.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/carbonemission/domain/vo/carbonEmissionYQVO.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/carbonemission/service/ICarbonEmissionService.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/carbonemission/service/impl/CarbonEmissionServiceImpl.java 290 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/consumptionanalysis/service/impl/ConsumptionAnalysisServiceImpl.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/costmanagement/domain/CostElectricityInput.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/costmanagement/domain/CostPriceRelevancy.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/costmanagement/domain/CostPriceTactics.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/costmanagement/domain/CostPriceTacticsItem.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/costmanagement/domain/vo/CostPriceRelevancyVo.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/costmanagement/domain/vo/CostPriceTacticsVo.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/costmanagement/domain/vo/DeviationAnalysisDTO.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/costmanagement/domain/vo/ElectricityDataOut.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/costmanagement/domain/vo/ElectricityDataOutItem.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/costmanagement/domain/vo/ElectricityPriceDateVo.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/costmanagement/domain/vo/StatisticsData.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/costmanagement/domain/vo/StatisticsDataOutItem.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/costmanagement/domain/vo/StatisticsInfoListOut.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/costmanagement/mapper/CostElectricityInputMapper.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/costmanagement/mapper/CostPriceRelevancyMapper.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/costmanagement/mapper/CostPriceTacticsItemMapper.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/costmanagement/mapper/CostPriceTacticsMapper.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/costmanagement/service/DeviationAnalysisService.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/costmanagement/service/ICostElectricityInputService.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/costmanagement/service/ICostPriceRelevancyService.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/costmanagement/service/ICostPriceTacticsItemService.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/costmanagement/service/ICostPriceTacticsService.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/costmanagement/service/impl/CostElectricityInputServiceImpl.java 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/costmanagement/service/impl/CostPriceRelevancyServiceImpl.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/costmanagement/service/impl/CostPriceTacticsItemServiceImpl.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/costmanagement/service/impl/CostPriceTacticsServiceImpl.java 201 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/costmanagement/service/impl/DeviationAnalysisServiceServiceImpl.java 572 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/energydata/mapper/EnergyDataStatisticMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/energydata/service/IEnergyDataStatisticService.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/energydata/service/impl/EnergyDataStatisticServiceImpl.java 1208 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/energydata/vo/EnergyChainYoyVO.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/energydata/vo/FactoryEnergyConsumptionItemVo.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/energydata/vo/FactoryEnergyConsumptionVo.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/energydata/vo/PurchaseConsumptionVo.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/gatewaysetting/domain/GatewaySetting.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/home/service/HomePageServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/model/mapper/EnergyIndexMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/peakvalley/domain/ElectricityPrice.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/peakvalley/domain/ElectricityPriceDate.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/peakvalley/PeakValleyDayVO.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/peakvalley/mapper/ElectricityPriceDateMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/peakvalley/mapper/ElectricityPriceMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/peakvalley/mapper/PeakValleyMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/peakvalley/service/IElectricityPriceDateService.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/peakvalley/service/IPeakValleyService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/peakvalley/service/impl/ElectricityPriceDateServiceImpl.java 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/peakvalley/service/impl/PeakValleyServiceImpl.java 78 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/powerDistribution/domain/PowerDistribution.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/powerDistribution/mapper/PowerDistributionMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/powerDistribution/services/IPowerDistributionService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/powerDistribution/services/impl/PowerDistributionServiceImpl.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/singlelogin/service/ISingleLoginService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/singlelogin/service/impl/SingleLoginServiceImpl.java 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/spikesandvalleys/domain/SpikesAndValleysItem.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/spikesandvalleys/domain/SpikesAndValleysScheme.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/spikesandvalleys/domain/vo/SpikesAndValleysSchemeVo.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/spikesandvalleys/mapper/SpikesAndValleysItemMapper.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/spikesandvalleys/mapper/SpikesAndValleysSchemeMapper.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/spikesandvalleys/service/ISpikesAndValleysSchemeService.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/spikesandvalleys/service/impl/SpikesAndValleysSchemeServiceImpl.java 176 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/system/domain/SysOperLog.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/system/domain/SysPost.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/system/service/ISysDictDataService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/system/service/ISysLoginInfoService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/system/service/ISysOperLogService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/system/service/ISysPostService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/system/service/ISysRoleService.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/system/service/ISysUserService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/system/service/impl/SysDictDataServiceImpl.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/system/service/impl/SysLoginInfoServiceImpl.java 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/system/service/impl/SysOperLogServiceImpl.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/system/service/impl/SysPostServiceImpl.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/system/service/impl/SysRoleServiceImpl.java 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/system/service/impl/SysUserServiceImpl.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/resources/mapper/basicdata/MeterImplementMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/resources/mapper/benchmarkmanage/EnergyBenchmarkManageMapper.xml 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/resources/mapper/costmanagement/CostElectricityInputMapper.xml 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/resources/mapper/costmanagement/CostPriceRelevancyMapper.xml 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/resources/mapper/costmanagement/CostPriceTacticsItemMapper.xml 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/resources/mapper/costmanagement/CostPriceTacticsMapper.xml 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/resources/mapper/dataitem/DataItemMapper.xml 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/resources/mapper/energyData/EnergyDataMapper.xml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/resources/mapper/energydatastatistics/EnergyDataStatisticMapper.xml 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/resources/mapper/model/EnergyIndexMapper.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/resources/mapper/peakvalley/ElectricityDataItemMapper.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/resources/mapper/peakvalley/ElectricityPriceDateMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/resources/mapper/powerDistribution/powerDistributionMapper.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/resources/mapper/spikesandvalleys/SpikesAndValleysItemMapper.xml 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/resources/mapper/spikesandvalleys/SpikesAndValleysSchemeMapper.xml 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/resources/mapper/system/SysUserMapper.xml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gitignore
@@ -1,23 +1,49 @@
# Compiled class file
*.class
######################################################################
# Build Tools
# Log file
.gradle
/build/
!gradle/wrapper/gradle-wrapper.jar
target/
!.mvn/wrapper/maven-wrapper.jar
######################################################################
# IDE
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### JRebel ###
rebel.xml
### NetBeans ###
nbproject/private/
build/*
nbbuild/
dist/
nbdist/
.nb-gradle/
######################################################################
# Others
*.log
*.xml.versionsBackup
*.swp
# BlueJ files
*.ctxt
!*/build/*.java
!*/build/*.html
!*/build/*.xml
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
uploadPath
README.md
@@ -1,74 +0,0 @@
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">企业能源管理平台</h1>
<h4 align="center">基于SpringBoot和若依框架开发</h4>
#### ä»‹ç»
通过物联网技术,采集企业水、电、气、热等能耗数据,帮企业建立能源管理体系,找到跑冒滴漏,从而为企业节能提供依据。
进一步为企业实现碳跟踪、碳盘查、碳交易、谈汇报的全生命过程。 ä¸ºä¸­å›½ç¢³è¾¾å³°-碳中和做出贡献。
针对客户场景:政府、园区、企业、工矿、公共建筑等。
框架:基于SpringBoot的若依框架 æ˜“读易懂、界面简洁美观。
关系数据库:influxdb
时序数据库:mysql æˆ–者 postgredb
中间件:redis,mq
#### æ•°æ®é©±åŠ¨çš„è®¡ç®—æ¨¡åž‹å’Œä¸šåŠ¡æ¨¡åž‹é…ç½®
支持动态点位配置、数据模型、业务模型等。
#### ä¸šåŠ¡æž¶æž„
![输入图片说明](readme/业务架构.png)
#### æŠ€æœ¯æž¶æž„【未来规划】
![输入图片说明](readme/技术架构.png)
#### äº®ç‚¹åŠŸèƒ½
![输入图片说明](readme/亮点功能.png)
#### åŠŸèƒ½è§„åˆ’
1.  é¦–页看板
2.  å®žæ—¶æ•°æ®ç›‘测
2.1.  å®žæ—¶æ•°æ®æŸ¥çœ‹
2.2.  ç»„态图分析(svg å›¾ç»‘定)
3. åŽ†å²æ•°æ®åˆ†æž
4. ç»¼åˆæŒ‡æ ‡åˆ†æž
   4.1.  ç»¼åˆæŒ‡æ ‡åˆ†æžï¼ˆæ—¥ï¼‰
   4.2.  ç»¼åˆæŒ‡æ ‡åˆ†æžï¼ˆæœˆï¼‰
   4.3.  ç»¼åˆæŒ‡æ ‡åˆ†æžï¼ˆå¹´ï¼‰
5. é‡ç‚¹è®¾å¤‡åˆ†æž
   5.1.  é‡ç‚¹è®¾å¤‡åˆ†æžï¼ˆæ—¥ï¼‰
   5.2.  é‡ç‚¹è®¾å¤‡åˆ†æžï¼ˆæœˆï¼‰
   5.3.  é‡ç‚¹è®¾å¤‡åˆ†æžï¼ˆå¹´ï¼‰
6. å·¥åºèƒ½è€—分析
   6.1.  å·¥åºèƒ½è€—分析(日)
   6.2.  å·¥åºèƒ½è€—分析(月)
   6.3.  å·¥åºèƒ½è€—分析(年)
7. å°–峰平谷分析
   7.1.  å°–峰平谷配置
   7.2.  å°–峰平谷数据
8. èƒ½è€—对比分析(各能源品种)
   8.1.  ç”µåŒçŽ¯æ¯”åˆ†æž
   8.2.  æ°´åŒçŽ¯æ¯”åˆ†æž
9. æ™ºèƒ½æŠ¥è­¦
   9.1.  æŠ¥è­¦åˆ†æž
   9.2.  æŠ¥è­¦é…ç½®
10. å•耗分析
11. è®¡åˆ’与实绩
12. ç”¨èƒ½è€ƒæ ¸
13. ç”¨èƒ½å¯¹æ ‡
14. æ•°æ®è¡¥å½•
15. èŠ‚èƒ½é¡¹ç›®ç®¡ç†
16. èƒ½æºå¹³è¡¡åˆ†æž
17. èƒ½æºå¯¹æ ‡åˆ†æž
18. æ¨¡åž‹é…ç½®ç®¡ç†ï¼ˆè®¡ç®—模型等)
19. åŸºç¡€æ•°æ®ç®¡ç†ï¼ˆå­—典、能源类型等)
20. ç³»ç»Ÿç®¡ç†ï¼ˆç”¨æˆ·ã€è§’色、权限等)
#### UI展示(待完善)
#### æ¼”示账号(待完善)
#### å‚与贡献
1.  Fork æœ¬ä»“库
2.  æ–°å»º Feat_xxx åˆ†æ”¯
3.  æäº¤ä»£ç 
4.  æ–°å»º Pull Request
zhitan-admin/lib/fel.jar
Binary files differ
zhitan-admin/src/main/java/com/zhitan/web/controller/auxiliaryinput/ProductOutputController.java
@@ -108,7 +108,6 @@
    @GetMapping("/meter/list")
    public TableDataInfo meterList(ProductOutput productOutput, @RequestParam Long pageNum, @RequestParam Long pageSize)
    {
//        startPage();
        productOutput.setDataType("2");
        Page<ProductOutput> list = auxiliaryInputService.selectProductOutputPage(productOutput,pageNum,pageSize);
        return getDataTable(list);
@@ -180,7 +179,6 @@
    @GetMapping("/energyindex/list")
    public TableDataInfo energyIndexList(ProductOutput productOutput, @RequestParam Long pageNum, @RequestParam Long pageSize)
    {
        startPage();
        productOutput.setDataType("3");
        Page<ProductOutput> list = auxiliaryInputService.selectProductOutputPage(productOutput,pageNum,pageSize);
        return getDataTable(list);
@@ -253,7 +251,6 @@
//    @GetMapping("/energyYield/list")
//    public TableDataInfo energyYieldList(ProductOutput productOutput, @RequestParam Long pageNum, @RequestParam Long pageSize)
//    {
////        startPage();
//        productOutput.setDataType("5");
//        productOutput.setTimeType("MONTH");
//        Page<ProductOutput> list = auxiliaryInputService.selectProductOutputPage(productOutput,pageNum,pageSize);
@@ -347,7 +344,6 @@
//    @GetMapping("/energyPlanYield/list")
//    public TableDataInfo energyPlanYieldList(ProductOutput productOutput, @RequestParam Long pageNum, @RequestParam Long pageSize)
//    {
////        startPage();
//        productOutput.setDataType("4");
//        productOutput.setTimeType("MONTH");
//        Page<ProductOutput> list = auxiliaryInputService.selectProductOutputPage(productOutput,pageNum,pageSize);
@@ -442,7 +438,6 @@
//    @GetMapping("/energySettlement/list")
//    public TableDataInfo energySettlementList(ProductOutput productOutput, @RequestParam Long pageNum, @RequestParam Long pageSize)
//    {
////        startPage();
//        productOutput.setDataType("6");
//        productOutput.setTimeType("MONTH");
//        Page<ProductOutput> list = auxiliaryInputService.selectProductOutputPage(productOutput,pageNum,pageSize);
zhitan-admin/src/main/java/com/zhitan/web/controller/benchmarkmanage/EnergyBenchmarkManageController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,148 @@
package com.zhitan.web.controller.benchmarkmanage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhitan.benchmarkmanage.domain.EnergyBenchmarkManage;
import com.zhitan.benchmarkmanage.service.IEnergyBenchmarkManageService;
import com.zhitan.common.annotation.Log;
import com.zhitan.common.core.controller.BaseController;
import com.zhitan.common.core.domain.AjaxResult;
import com.zhitan.common.core.domain.model.LoginUser;
import com.zhitan.common.core.page.TableDataInfo;
import com.zhitan.common.enums.BusinessType;
import com.zhitan.common.utils.ServletUtils;
import com.zhitan.common.utils.StringUtils;
import com.zhitan.common.utils.poi.ExcelUtil;
import com.zhitan.framework.web.service.TokenService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.UUID;
/**
 * æ ‡æ†å€¼ç®¡ç†Controller
 *
 * @author ZhiTan
 * @date 2024-11-12
 */
@RestController
@RequestMapping("/benchmarkManage")
public class EnergyBenchmarkManageController extends BaseController
{
    @Resource
    private IEnergyBenchmarkManageService energyBenchmarkManageService;
    @Autowired
    private TokenService tokenService;
    /**
     * æŸ¥è¯¢æ ‡æ†å€¼ç®¡ç†åˆ—表
     */
    @PreAuthorize("@ss.hasPermi('system:benchmarkManage:list')")
    @GetMapping("/list")
    public TableDataInfo list(EnergyBenchmarkManage energyBenchmarkManage, @RequestParam Long pageNum, @RequestParam Long pageSize)
    {
        //        startPage();
        Page<EnergyBenchmarkManage> list = energyBenchmarkManageService.selectBenchmarkManagePage(energyBenchmarkManage,pageNum,pageSize);
        return getDataTable(list);
    }
    /**
     * å¯¼å‡ºæ ‡æ†å€¼ç®¡ç†åˆ—表
     */
    @PreAuthorize("@ss.hasPermi('system:benchmarkManage:export')")
    @Log(title = "标杆值管理", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, EnergyBenchmarkManage energyBenchmarkManage)
    {
        List<EnergyBenchmarkManage> list = energyBenchmarkManageService.selectEnergyBenchmarkManageList(energyBenchmarkManage);
        ExcelUtil<EnergyBenchmarkManage> util = new ExcelUtil<EnergyBenchmarkManage>(EnergyBenchmarkManage.class);
        util.exportExcel(response, list, "标杆值管理数据");
    }
    /**
     * èŽ·å–æ ‡æ†å€¼ç®¡ç†è¯¦ç»†ä¿¡æ¯
     */
    @PreAuthorize("@ss.hasPermi('system:benchmarkManage:query')")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") String id)
    {
        return success(energyBenchmarkManageService.selectEnergyBenchmarkManageById(id));
    }
    /**
     * æ–°å¢žæ ‡æ†å€¼ç®¡ç†
     */
    @PreAuthorize("@ss.hasPermi('system:benchmarkManage:add')")
    @Log(title = "标杆值管理", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody EnergyBenchmarkManage energyBenchmarkManage)
    {
        if (StringUtils.isBlank(energyBenchmarkManage.getCode())) {
            return error("请输入标杆编号!");
        }
        //校验唯一
        EnergyBenchmarkManage queryParams=new EnergyBenchmarkManage();
        queryParams.setCode(energyBenchmarkManage.getCode());
        List<EnergyBenchmarkManage> codeReptList = energyBenchmarkManageService.getList(queryParams);
        if (null!=codeReptList && !codeReptList.isEmpty()) {
            return error("标杆编号重复!");
        }
        queryParams=new EnergyBenchmarkManage();
        queryParams.setType(energyBenchmarkManage.getType());
        queryParams.setGrade(energyBenchmarkManage.getGrade());
        List<EnergyBenchmarkManage> dataReptList = energyBenchmarkManageService.getList(queryParams);
        if (null!=dataReptList && !dataReptList.isEmpty()) {
            return error("标杆信息已维护!");
        }
        energyBenchmarkManage.setId(UUID.randomUUID().toString());
        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
        energyBenchmarkManage.setCreateBy(loginUser.getUsername());
        return toAjax(energyBenchmarkManageService.insertEnergyBenchmarkManage(energyBenchmarkManage));
    }
    /**
     * ä¿®æ”¹æ ‡æ†å€¼ç®¡ç†
     */
    @PreAuthorize("@ss.hasPermi('system:benchmarkManage:edit')")
    @Log(title = "标杆值管理", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody EnergyBenchmarkManage energyBenchmarkManage)
    {
        if (StringUtils.isBlank(energyBenchmarkManage.getCode())) {
            return error("请输入标杆编号!");
        }
        EnergyBenchmarkManage queryParams=new EnergyBenchmarkManage();
        queryParams.setCode(energyBenchmarkManage.getCode());
        List<EnergyBenchmarkManage> codeReptList = energyBenchmarkManageService.getList(queryParams);
        if (null!=codeReptList && !codeReptList.isEmpty()) {
            return error("标杆编号重复!");
        }
        queryParams=new EnergyBenchmarkManage();
        queryParams.setType(energyBenchmarkManage.getType());
        queryParams.setGrade(energyBenchmarkManage.getGrade());
        List<EnergyBenchmarkManage> dataReptList = energyBenchmarkManageService.getList(queryParams);
        if (null!=dataReptList && !dataReptList.isEmpty()) {
            return error("标杆信息已维护!");
        }
        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
        energyBenchmarkManage.setUpdateBy(loginUser.getUsername());
        return toAjax(energyBenchmarkManageService.updateEnergyBenchmarkManage(energyBenchmarkManage));
    }
    /**
     * åˆ é™¤æ ‡æ†å€¼ç®¡ç†
     */
    @PreAuthorize("@ss.hasPermi('system:benchmarkManage:remove')")
    @Log(title = "标杆值管理", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable String[] ids)
    {
        return toAjax(energyBenchmarkManageService.deleteEnergyBenchmarkManageByIds(ids));
    }
}
zhitan-admin/src/main/java/com/zhitan/web/controller/carbonemission/CarbonEmissionController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
package com.zhitan.web.controller.carbonemission;
import com.zhitan.basicdata.domain.FacilityAnnex;
import com.zhitan.carbonemission.domain.dto.CarbonEmissionDTO;
import com.zhitan.carbonemission.domain.vo.carbonEmissionYQVO;
import com.zhitan.carbonemission.service.ICarbonEmissionService;
import com.zhitan.common.core.controller.BaseController;
import com.zhitan.common.core.domain.AjaxResult;
import com.zhitan.common.core.page.TableDataInfo;
import com.zhitan.common.utils.poi.ExcelUtil;
import com.zhitan.web.controller.basicdata.FacilityAnnexController;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.HttpMediaTypeException;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
 * ç¢³æŽ’放核算Controller
 *
 * @author lsk
 * @date 2024-10-29
 */
@RestController
@RequestMapping("/carbonEmission")
public class CarbonEmissionController  extends BaseController
{
    @Resource
    private ICarbonEmissionService carbonEmissionService;
    private static final Logger log = LoggerFactory.getLogger(CarbonEmissionController.class);
    @GetMapping("/up")
    public AjaxResult up(CarbonEmissionDTO carbonEmissionDTO)
    {
        final Map<String, Object> upCarbonEmission = carbonEmissionService.getUpCarbonEmission(carbonEmissionDTO);
        return AjaxResult.success(upCarbonEmission);
    }
    @GetMapping("/middle")
    public AjaxResult middle(CarbonEmissionDTO carbonEmissionDTO)
    {
        final List<carbonEmissionYQVO>  carbonEmissionYQVO = carbonEmissionService.getMiddleCarbonEmission(carbonEmissionDTO);
        return AjaxResult.success(carbonEmissionYQVO);
    }
    @PostMapping("/export")
    @ResponseBody
    public void export(HttpServletResponse response, CarbonEmissionDTO carbonEmissionDTO)
    {
        List<carbonEmissionYQVO>  carbonEmissionYQVO = carbonEmissionService.getMiddleCarbonEmission(carbonEmissionDTO);
        ExcelUtil<carbonEmissionYQVO> util = new ExcelUtil<carbonEmissionYQVO>(carbonEmissionYQVO.class);
        util.exportExcel(response,carbonEmissionYQVO, "碳排放量同环比");
    }
}
zhitan-admin/src/main/java/com/zhitan/web/controller/costmanagement/CostElectricityInputController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,123 @@
package com.zhitan.web.controller.costmanagement;
import java.math.BigDecimal;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhitan.common.core.domain.model.LoginUser;
import com.zhitan.common.core.page.TableDataInfo;
import com.zhitan.common.utils.ServletUtils;
import com.zhitan.framework.web.service.TokenService;
import com.zhitan.spikesandvalleys.domain.vo.SpikesAndValleysSchemeVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import javax.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.zhitan.common.annotation.Log;
import com.zhitan.common.core.controller.BaseController;
import com.zhitan.common.core.domain.AjaxResult;
import com.zhitan.common.enums.BusinessType;
import com.zhitan.costmanagement.domain.CostElectricityInput;
import com.zhitan.costmanagement.service.ICostElectricityInputService;
import com.zhitan.common.utils.poi.ExcelUtil;
/**
 * ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘Controller
 *
 * @author ZhiTan
 * @date 2024-11-08
 */
@RestController
@RequestMapping("/cost/input")
public class CostElectricityInputController extends BaseController
{
    @Resource
    private ICostElectricityInputService costElectricityInputService;
    @Autowired
    private TokenService tokenService;
    /**
     * æŸ¥è¯¢ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘åˆ—è¡¨
     */
    @PreAuthorize("@ss.hasPermi('system:Input:list')")
    @GetMapping("/list")
    public TableDataInfo list(CostElectricityInput costElectricityInput,Long pageNum, Long pageSize)
    {
//        startPage();
//        List<CostElectricityInput> list = costElectricityInputService.selectCostElectricityInputList(costElectricityInput);
        Page<CostElectricityInput> page =  costElectricityInputService.selectCostElectricityInputList(costElectricityInput, pageNum, pageSize);
        return getDataTable(page);
    }
    /**
     * å¯¼å‡ºã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘åˆ—è¡¨
     */
//    @PreAuthorize("@ss.hasPermi('system:Input:export')")
//    @Log(title = "【请填写功能名称】", businessType = BusinessType.EXPORT)
//    @PostMapping("/export")
//    public void export(HttpServletResponse response, CostElectricityInput costElectricityInput)
//    {
//        List<CostElectricityInput> list = costElectricityInputService.selectCostElectricityInputList(costElectricityInput);
//        ExcelUtil<CostElectricityInput> util = new ExcelUtil<CostElectricityInput>(CostElectricityInput.class);
//        util.exportExcel(response, list, "【请填写功能名称】数据");
//    }
    /**
     * èŽ·å–ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘è¯¦ç»†ä¿¡æ¯
     */
    @PreAuthorize("@ss.hasPermi('system:Input:query')")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") String id)
    {
        return success(costElectricityInputService.selectCostElectricityInputById(id));
    }
    /**
     * æ–°å¢žã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     */
    @PreAuthorize("@ss.hasPermi('system:Input:add')")
    @Log(title = "【请填写功能名称】", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody CostElectricityInput costElectricityInput) throws Exception {
        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
        costElectricityInput.setCreateBy(loginUser.getUsername());
        //校验尖峰平谷电量相加是否=总用电
        BigDecimal total = costElectricityInput.getFlatElectricity().add(costElectricityInput.getSharpElectricity()).
                add(costElectricityInput.getPeakElectricity()).add(costElectricityInput.getValleyElectricity());
        if(total.compareTo(costElectricityInput.getElectricityNum())!=0){
                return AjaxResult.error("尖峰平谷电量相加不等于总用电量");
        }
        return toAjax(costElectricityInputService.insertCostElectricityInput(costElectricityInput));
    }
    /**
     * ä¿®æ”¹ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     */
    @PreAuthorize("@ss.hasPermi('system:Input:edit')")
    @Log(title = "【请填写功能名称】", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody CostElectricityInput costElectricityInput) throws Exception {
        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
        costElectricityInput.setUpdateBy(loginUser.getUsername());
        return toAjax(costElectricityInputService.updateCostElectricityInput(costElectricityInput));
    }
    /**
     * åˆ é™¤ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     */
    @PreAuthorize("@ss.hasPermi('system:Input:remove')")
    @Log(title = "【请填写功能名称】", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable String[] ids)
    {
        return toAjax(costElectricityInputService.deleteCostElectricityInputByIds(ids));
    }
}
zhitan-admin/src/main/java/com/zhitan/web/controller/costmanagement/CostPriceRelevancyController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,112 @@
package com.zhitan.web.controller.costmanagement;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhitan.common.core.page.TableDataInfo;
import com.zhitan.costmanagement.domain.CostElectricityInput;
import com.zhitan.framework.web.service.TokenService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import javax.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.zhitan.common.annotation.Log;
import com.zhitan.common.core.controller.BaseController;
import com.zhitan.common.core.domain.AjaxResult;
import com.zhitan.common.enums.BusinessType;
import com.zhitan.costmanagement.domain.CostPriceRelevancy;
import com.zhitan.costmanagement.service.ICostPriceRelevancyService;
import com.zhitan.common.utils.poi.ExcelUtil;
/**
 * å•价关联Controller
 *
 * @author ZhiTan
 * @date 2024-11-09
 */
@RestController
@RequestMapping("/cost/relevancy")
public class CostPriceRelevancyController extends BaseController
{
    @Resource
    private ICostPriceRelevancyService costPriceRelevancyService;
    @Autowired
    private TokenService tokenService;
    /**
     * æŸ¥è¯¢å•价关联列表
     */
    @PreAuthorize("@ss.hasPermi('costmanagement:relevancy:list')")
    @GetMapping("/list")
    public TableDataInfo list(CostPriceRelevancy costPriceRelevancy,Long pageNum, Long pageSize)
    {
        startPage();
        Page<CostPriceRelevancy> page =  costPriceRelevancyService.selectCostPriceRelevancyList(costPriceRelevancy, pageNum, pageSize);
        return getDataTable(page);
    }
//    /**
//     * å¯¼å‡ºå•价关联列表
//     */
//    @PreAuthorize("@ss.hasPermi('costmanagement:relevancy:export')")
//    @Log(title = "单价关联", businessType = BusinessType.EXPORT)
//    @PostMapping("/export")
//    public void export(HttpServletResponse response, CostPriceRelevancy costPriceRelevancy)
//    {
//        List<CostPriceRelevancy> list = costPriceRelevancyService.selectCostPriceRelevancyList(costPriceRelevancy);
//        ExcelUtil<CostPriceRelevancy> util = new ExcelUtil<CostPriceRelevancy>(CostPriceRelevancy.class);
//        util.exportExcel(response, list, "单价关联数据");
//    }
    /**
     * èŽ·å–å•ä»·å…³è”è¯¦ç»†ä¿¡æ¯
     */
    @PreAuthorize("@ss.hasPermi('costmanagement:relevancy:query')")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") String id)
    {
        return success(costPriceRelevancyService.selectCostPriceRelevancyById(id));
    }
    /**
     * æ–°å¢žå•价关联
     */
    @PreAuthorize("@ss.hasPermi('costmanagement:relevancy:add')")
    @Log(title = "单价关联", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody CostPriceRelevancy costPriceRelevancy)
    {
        return toAjax(costPriceRelevancyService.insertCostPriceRelevancy(costPriceRelevancy));
    }
    /**
     * ä¿®æ”¹å•价关联
     */
    @PreAuthorize("@ss.hasPermi('costmanagement:relevancy:edit')")
    @Log(title = "单价关联", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody CostPriceRelevancy costPriceRelevancy)
    {
        return toAjax(costPriceRelevancyService.updateCostPriceRelevancy(costPriceRelevancy));
    }
    /**
     * åˆ é™¤å•价关联
     */
    @PreAuthorize("@ss.hasPermi('costmanagement:relevancy:remove')")
    @Log(title = "单价关联", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable String[] ids)
    {
        return toAjax(costPriceRelevancyService.deleteCostPriceRelevancyByIds(ids));
    }
}
zhitan-admin/src/main/java/com/zhitan/web/controller/costmanagement/CostPriceTacticsController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,121 @@
package com.zhitan.web.controller.costmanagement;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhitan.common.annotation.Log;
import com.zhitan.common.core.controller.BaseController;
import com.zhitan.common.core.domain.AjaxResult;
import com.zhitan.common.core.domain.model.LoginUser;
import com.zhitan.common.core.page.TableDataInfo;
import com.zhitan.common.enums.BusinessType;
import com.zhitan.common.utils.ServletUtils;
import com.zhitan.costmanagement.domain.CostPriceTactics;
import com.zhitan.costmanagement.domain.vo.CostPriceTacticsVo;
import com.zhitan.costmanagement.service.ICostPriceTacticsService;
import com.zhitan.framework.web.service.TokenService;
import com.zhitan.peakvalley.service.IElectricityPriceDateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
 * æˆæœ¬ç­–ç•¥Controller
 *
 * @author ZhiTan
 * @date 2024-11-08
 */
@RestController
@RequestMapping("/cost/tactics")
public class CostPriceTacticsController extends BaseController
{
    @Resource
    private ICostPriceTacticsService costPriceTacticsService;
    @Autowired
    private TokenService tokenService;
    @Resource
    private IElectricityPriceDateService electricityPriceDateService;
    /**
     * æŸ¥è¯¢æˆæœ¬ç­–略列表
     */
    @PreAuthorize("@ss.hasPermi('costmanagement:tactics:list')")
    @GetMapping("/list")
    public TableDataInfo list(CostPriceTactics costPriceTactics,Long pageNum, Long pageSize)
    {
        Page<CostPriceTacticsVo> page =  costPriceTacticsService.selectCostPriceTacticsList(costPriceTactics, pageNum, pageSize);
        return getDataTable(page);
    }
    /**
     * æŸ¥è¯¢æˆæœ¬ç­–略列表
     */
    @PreAuthorize("@ss.hasPermi('costmanagement:tactics:list')")
    @GetMapping("/allList")
    public AjaxResult allList()
    {
        List<CostPriceTacticsVo> list =  costPriceTacticsService.selectCostPriceTacticsListAll();
        return AjaxResult.success(list);
    }
//    /**
//     * å¯¼å‡ºæˆæœ¬ç­–略列表
//     */
//    @PreAuthorize("@ss.hasPermi('costmanagement:tactics:export')")
//    @Log(title = "成本策略", businessType = BusinessType.EXPORT)
//    @PostMapping("/export")
//    public void export(HttpServletResponse response, CostPriceTactics costPriceTactics)
//    {
//        List<CostPriceTactics> list = costPriceTacticsService.selectCostPriceTacticsList(costPriceTactics);
//        ExcelUtil<CostPriceTactics> util = new ExcelUtil<CostPriceTactics>(CostPriceTactics.class);
//        util.exportExcel(response, list, "成本策略数据");
//    }
    /**
     * èŽ·å–æˆæœ¬ç­–ç•¥è¯¦ç»†ä¿¡æ¯
     */
    @PreAuthorize("@ss.hasPermi('costmanagement:tactics:query')")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") String id)
    {
        return success(costPriceTacticsService.selectCostPriceTacticsById(id));
    }
    /**
     * æ–°å¢žæˆæœ¬ç­–ç•¥
     */
    @PreAuthorize("@ss.hasPermi('costmanagement:tactics:add')")
    @Log(title = "成本策略", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody CostPriceTacticsVo costPriceTacticsVo) throws Exception {
        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
        costPriceTacticsVo.setCreateBy(loginUser.getUsername());
        return toAjax(costPriceTacticsService.insertCostPriceTactics(costPriceTacticsVo));
    }
    /**
     * ä¿®æ”¹æˆæœ¬ç­–ç•¥
     */
    @PreAuthorize("@ss.hasPermi('costmanagement:tactics:edit')")
    @Log(title = "成本策略", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody CostPriceTacticsVo costPriceTacticsVo)
    {
        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
        costPriceTacticsVo.setUpdateBy(loginUser.getUsername());
        return toAjax(costPriceTacticsService.updateCostPriceTactics(costPriceTacticsVo));
    }
    /**
     * åˆ é™¤æˆæœ¬ç­–ç•¥
     */
    @PreAuthorize("@ss.hasPermi('costmanagement:tactics:remove')")
    @Log(title = "成本策略", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable String[] ids)
    {
        return toAjax(costPriceTacticsService.deleteCostPriceTacticsByIds(ids));
    }
}
zhitan-admin/src/main/java/com/zhitan/web/controller/costmanagement/CostPriceTacticsTestController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,117 @@
//package com.zhitan.web.controller.costmanagement;
//
//import java.util.List;
//
//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
//import com.zhitan.common.core.domain.model.LoginUser;
//import com.zhitan.common.core.page.TableDataInfo;
//import com.zhitan.common.utils.ServletUtils;
//import com.zhitan.costmanagement.domain.vo.ElectricityPriceDateVo;
//import com.zhitan.framework.web.service.TokenService;
//import com.zhitan.peakvalley.domain.ElectricityPriceDate;
//import com.zhitan.peakvalley.service.IElectricityPriceDateService;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.security.access.prepost.PreAuthorize;
//import javax.annotation.Resource;
//import org.springframework.web.bind.annotation.GetMapping;
//import org.springframework.web.bind.annotation.PostMapping;
//import org.springframework.web.bind.annotation.PutMapping;
//import org.springframework.web.bind.annotation.DeleteMapping;
//import org.springframework.web.bind.annotation.PathVariable;
//import org.springframework.web.bind.annotation.RequestBody;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RestController;
//import com.zhitan.common.annotation.Log;
//import com.zhitan.common.core.controller.BaseController;
//import com.zhitan.common.core.domain.AjaxResult;
//import com.zhitan.common.enums.BusinessType;
//import com.zhitan.costmanagement.service.ICostPriceTacticsService;
//
///**
// * æˆæœ¬ç­–ç•¥Controller
// *
// * @author ZhiTan
// * @date 2024-11-08
// */
//@RestController
//@RequestMapping("/cost/tactics")
//public class CostPriceTacticsTestController extends BaseController
//{
//    @Resource
//    private ICostPriceTacticsService costPriceTacticsService;
//    @Autowired
//    private TokenService tokenService;
//    @Resource
//    private IElectricityPriceDateService electricityPriceDateService;
//
//
//    /**
//     * æŸ¥è¯¢æˆæœ¬ç­–略列表
//     */
//    @PreAuthorize("@ss.hasPermi('costmanagement:tactics:list')")
//    @GetMapping("/list")
//    public TableDataInfo list(ElectricityPriceDate electricityPriceDate, Long pageNum, Long pageSize)
//    {
//        Page<ElectricityPriceDateVo> page =  electricityPriceDateService.selectElectricityPriceDatePageTactics(electricityPriceDate, pageNum, pageSize);
//
//        return getDataTable(page);
//    }
//    /**
//     * æŸ¥è¯¢æˆæœ¬ç­–略列表
//     */
//    @PreAuthorize("@ss.hasPermi('costmanagement:tactics:list')")
//    @GetMapping("/allList")
//    public AjaxResult allList()
//    {
//        List<ElectricityPriceDate> list =  electricityPriceDateService.selectElectricityPriceDatePageTacticsAll();
//        return AjaxResult.success(list);
//    }
//
//
//
//    /**
//     * èŽ·å–æˆæœ¬ç­–ç•¥è¯¦ç»†ä¿¡æ¯
//     */
//    @PreAuthorize("@ss.hasPermi('costmanagement:tactics:query')")
//    @GetMapping(value = "/{id}")
//    public AjaxResult getInfo(@PathVariable("id") String id)
//    {
//        return success(electricityPriceDateService.selectCostPriceTacticsById(id));
//    }
//
//    /**
//     * æ–°å¢žæˆæœ¬ç­–ç•¥
//     */
//    @PreAuthorize("@ss.hasPermi('costmanagement:tactics:add')")
//    @Log(title = "成本策略", businessType = BusinessType.INSERT)
//    @PostMapping
//    public AjaxResult add(@RequestBody ElectricityPriceDateVo electricityPriceDateVo) throws Exception {
//        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
//        electricityPriceDateVo.setCreateBy(loginUser.getUsername());
//        return toAjax(electricityPriceDateService.insertCostPriceTactics(electricityPriceDateVo));
//    }
//
//    /**
//     * ä¿®æ”¹æˆæœ¬ç­–ç•¥
//     */
//    @PreAuthorize("@ss.hasPermi('costmanagement:tactics:edit')")
//    @Log(title = "成本策略", businessType = BusinessType.UPDATE)
//    @PutMapping
//    public AjaxResult edit(@RequestBody ElectricityPriceDateVo electricityPriceDateVo)
//    {
//        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
//        electricityPriceDateVo.setUpdateBy(loginUser.getUsername());
//        return toAjax(electricityPriceDateService.updateCostPriceTactics(electricityPriceDateVo));
//    }
//
//    /**
//     * åˆ é™¤æˆæœ¬ç­–ç•¥
//     */
//    @PreAuthorize("@ss.hasPermi('costmanagement:tactics:remove')")
//    @Log(title = "成本策略", businessType = BusinessType.DELETE)
//    @DeleteMapping("/{ids}")
//    public AjaxResult remove(@PathVariable String[] ids)
//    {
//        return toAjax(electricityPriceDateService.deleteCostPriceTacticsByIds(ids));
//    }
//}
zhitan-admin/src/main/java/com/zhitan/web/controller/costmanagement/DeviationAnalysisController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,79 @@
package com.zhitan.web.controller.costmanagement;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhitan.common.annotation.Log;
import com.zhitan.common.core.controller.BaseController;
import com.zhitan.common.core.domain.AjaxResult;
import com.zhitan.common.core.domain.model.LoginUser;
import com.zhitan.common.core.page.TableDataInfo;
import com.zhitan.common.enums.BusinessType;
import com.zhitan.common.utils.ServletUtils;
import com.zhitan.costmanagement.domain.CostElectricityInput;
import com.zhitan.costmanagement.domain.vo.*;
import com.zhitan.costmanagement.service.DeviationAnalysisService;
import com.zhitan.costmanagement.service.ICostElectricityInputService;
import com.zhitan.framework.web.service.TokenService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘Controller
 *
 * @author ZhiTan
 * @date 2024-11-08
 */
@RestController
@RequestMapping("/cost/statistics")
public class DeviationAnalysisController extends BaseController
{
    @Resource
    private ICostElectricityInputService costElectricityInputService;
    @Autowired
    private TokenService tokenService;
    @Autowired
    private DeviationAnalysisService deviationAnalysisService;
    /**
     * æŸ¥è¯¢æˆæœ¬ç­–略列表
     */
    @GetMapping("/statistics")
    public AjaxResult statistics(DeviationAnalysisDTO dto) throws ParseException {
        Map<String,Object>result = new HashMap<>();
        StatisticsDataOutItem  statisticsDataItem = deviationAnalysisService.getStatisticsDataItem(dto);
        ElectricityDataOutItem electricityDataItem = deviationAnalysisService.getElectricityDataItem(dto);
        result.put("CostElectricityData",electricityDataItem);
        result.put("CostStatisticsData",statisticsDataItem);
        return AjaxResult.success(result);
    }
    @GetMapping("/test")
    public AjaxResult test(DeviationAnalysisDTO dto) throws ParseException {
        deviationAnalysisService.getStatisticsInfoList(dto);
        return AjaxResult.success(deviationAnalysisService.getStatisticsInfoList2(dto));
    }
    @GetMapping("/getStatisticsInfoList")
    public AjaxResult getStatisticsInfoList(DeviationAnalysisDTO dto) throws ParseException {
        return AjaxResult.success(deviationAnalysisService.getStatisticsInfoList(dto));
    }
    @GetMapping("/getStatisticsInfoEcharts")
    public AjaxResult echarts(DeviationAnalysisDTO dto) throws ParseException {
        Map<String,Object>result = new HashMap<>();
        result = deviationAnalysisService.getEcharst(dto);
        return AjaxResult.success(result);
    }
}
zhitan-admin/src/main/java/com/zhitan/web/controller/energydatastatistics/EnergyDataStatisticsController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,178 @@
package com.zhitan.web.controller.energydatastatistics;
import com.zhitan.common.annotation.Anonymous;
import com.zhitan.common.core.controller.BaseController;
import com.zhitan.common.core.domain.AjaxResult;
import com.zhitan.consumptionanalysis.domain.vo.RankingEnergyData;
import com.zhitan.energydata.service.IEnergyDataStatisticService;
import com.zhitan.energydata.vo.FactoryEnergyConsumptionVo;
import com.zhitan.energydata.vo.PurchaseConsumptionVo;
import com.zhitan.home.domain.vo.HomePeakValleyVO;
import com.zhitan.home.service.impl.IHomePageService;
import com.zhitan.peakvalley.domain.dto.PeakValleyDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
import java.util.List;
/**
 * æ’邦能源数据综合分析
 *
 * @author ZhiTan
 * @date 2024-10-30
 */
@RestController
@RequestMapping("/energydatahomepage")
@Anonymous
public class EnergyDataStatisticsController extends BaseController
{
    @Autowired
    public IHomePageService homepageService;
    @Autowired
    private IEnergyDataStatisticService statisticService;
    /**
     * @description: å½“日能耗统计
     * @return
     */
    @GetMapping("/energyConsumptionSummation/day")
    public AjaxResult energyConsumptionSummationDay() {
        try {
            String timeType = "DAY";
            String modelCode = "COMPREHENSIVE_CODE";
            return AjaxResult.success(homepageService.energyConsumptionSummation(timeType,modelCode));
        } catch (Exception ex) {
            logger.error("获取出错!", ex);
            return AjaxResult.error("获取出错!");
        }
    }
    /**
     * ç”µåŒçŽ¯æ¯”åˆ†æž
     * @param timeType:month、year
     * @return
     */
    @GetMapping("/energyConsumptionSummation")
    public AjaxResult energyConsumptionSummation(String timeType) {
        try {
            String modelCode = "COMPREHENSIVE_CODE";
            return AjaxResult.success(statisticService.energyConsumptionSummation(timeType,modelCode));
        } catch (Exception ex) {
            logger.error("获取出错!", ex);
            return AjaxResult.error("获取出错!");
        }
    }
    /**
     * @description: å„厂区当月能耗统计
     * @return
     */
    @GetMapping("/factoryEnergyConsumption")
    public AjaxResult factoryEnergyConsumption() {
        try {
            String timeType = "MONTH";
            String modelCode = "COMPREHENSIVE_CODE";
            FactoryEnergyConsumptionVo vo=statisticService.factoryEnergyConsumption(timeType,modelCode);
            return AjaxResult.success(vo);
        } catch (Exception ex) {
            logger.error("获取出错!", ex);
            return AjaxResult.error("获取出错!");
        }
    }
    /**
     * ç”¨ç”µè¶‹åŠ¿åˆ†æž---按年:往前推12个月,每个月统计
     * @return
     */
    @GetMapping("/segmentAnalysis/year")
    public AjaxResult segmentAnalysisMonth() {
        PeakValleyDTO dto =new PeakValleyDTO();
        dto.setModelCode("COMPREHENSIVE_CODE");
        dto.setTimeType("YEAR");
        dto.setQueryTime(new Date());
        return AjaxResult.success(statisticService.segmentAnalysisMonth(dto));
    }
    /**
     * ç”¨ç”µè¶‹åŠ¿ç»Ÿè®¡---按月
     * @return
     */
    @GetMapping("/segmentAnalysis/month")
    public AjaxResult segmentAnalysisDay() {
        PeakValleyDTO dto =new PeakValleyDTO();
        dto.setModelCode("COMPREHENSIVE_CODE");
        dto.setTimeType("MONTH");
        dto.setQueryTime(new Date());
        return AjaxResult.success(statisticService.segmentAnalysisDay(dto));
    }
    /**
     * ç”¨ç”µè¶‹åŠ¿ç»Ÿè®¡---按日
     * @return
     */
    @GetMapping("/segmentAnalysis/day")
    public AjaxResult segmentAnalysisHour() {
        PeakValleyDTO dto =new PeakValleyDTO();
        dto.setModelCode("COMPREHENSIVE_CODE");
        dto.setTimeType("DAY");
        dto.setQueryTime(new Date());
        return AjaxResult.success(statisticService.segmentAnalysisHour(dto));
    }
    /**
     * @description: è´­å…¥å’Œæ¶ˆè€—对比
     * @return
     */
    @GetMapping("/purchaseConsumption")
    public AjaxResult purchaseConsumption() {
        String timeType="MONTH";
        String modelCode = "COMPREHENSIVE_CODE";
        List<PurchaseConsumptionVo> consumptionAnalysisVO = statisticService.purchaseConsumption(modelCode,timeType);
        return AjaxResult.success(consumptionAnalysisVO);
    }
    /**
     * @description: ç§‘室能耗排名
     * @return
     */
    @GetMapping("/energyConsumptionRanking")
    public AjaxResult energyConsumptionRanking(String timeType) {
        String modelCode = "COMPREHENSIVE_CODE";
        List<RankingEnergyData> consumptionAnalysisVO = statisticService.energyConsumptionRanking(modelCode,timeType);
        return AjaxResult.success(consumptionAnalysisVO);
    }
    /**
     * @description: èƒ½æºæˆæœ¬å æ¯”
     * @return
     */
    @GetMapping("/costProp")
    public AjaxResult costProp(String timeType) {
        String modelCode = "COMPREHENSIVE_CODE";
        List<PurchaseConsumptionVo> consumptionAnalysisVO = statisticService.costProp(modelCode, timeType);
        return AjaxResult.success(consumptionAnalysisVO);
    }
    /**
     * @description: å°–峰平谷占比
     * @param timeType
     */
    @GetMapping("/peakValley")
    public AjaxResult peakValley(String timeType) {
        try {
            String modelcode = "COMPREHENSIVE_CODE";
            List<HomePeakValleyVO> vo = homepageService.peakValley(timeType,modelcode);
            return AjaxResult.success(vo);
        } catch (Exception ex) {
            logger.error("获取出错!", ex);
            return AjaxResult.error("获取出错!");
        }
    }
}
zhitan-admin/src/main/java/com/zhitan/web/controller/gatewaysetting/GatewaySettingController.java
@@ -44,7 +44,6 @@
    @GetMapping("/list")
    public TableDataInfo list(GatewaySetting gatewaySetting,@RequestParam Long pageNum,@RequestParam Long pageSize)
    {
//        startPage();
        Page<GatewaySetting> list = gatewaySettingService.selectGatewaySettingPage(gatewaySetting,pageNum,pageSize);
        return getDataTable(list);
    }
zhitan-admin/src/main/java/com/zhitan/web/controller/homepage/HomePageController.java
@@ -35,7 +35,8 @@
   @GetMapping("/energyConsumptionSummation")
   public AjaxResult energyConsumptionSummation(String timeType) {
       try {
           String modelcode = "Composite_Indicators";
//           String modelcode = "Composite_Indicators";
           String modelcode = "COMPREHENSIVE_CODE";
           return AjaxResult.success(homepageService.energyConsumptionSummation(timeType,modelcode));
       } catch (Exception ex) {
           logger.error("获取出错!", ex);
@@ -54,7 +55,7 @@
    @GetMapping("/energyConsumptionTrend")
    public AjaxResult energyConsumptionTrend(String timeType) {
        try {
            String modelcode = "Composite_Indicators";
            String modelcode = "COMPREHENSIVE_CODE";
            HomeEnergyConsumptionTrendVO vo = homepageService.energyConsumptionTrend(timeType,modelcode);
            return AjaxResult.success(vo);
@@ -74,7 +75,7 @@
    @GetMapping("/energyConsumptionRanking")
    public AjaxResult energyConsumptionRanking(String timeType) {
        try {
            String modelcode = "Composite_Indicators";
            String modelcode = "COMPREHENSIVE_CODE";
            List<RankingEnergyData> consumptionAnalysisVO = homepageService.energyConsumptionRanking(modelcode,timeType);
            return AjaxResult.success(consumptionAnalysisVO);
        } catch (Exception ex) {
@@ -94,7 +95,7 @@
    public AjaxResult peakValley(String timeType) {
        try {
//            String modelcode = "Composite_Indicators";
            String modelcode = "PEAK_VALLEY";
            String modelcode = "COMPREHENSIVE_CODE";
            List<HomePeakValleyVO> vo = homepageService.peakValley(timeType,modelcode);
            return AjaxResult.success(vo);
        } catch (Exception ex) {
zhitan-admin/src/main/java/com/zhitan/web/controller/monitor/SysLogininforController.java
@@ -1,15 +1,6 @@
package com.zhitan.web.controller.monitor;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import javax.annotation.Resource;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.DeleteMapping;
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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhitan.common.annotation.Log;
import com.zhitan.common.core.controller.BaseController;
import com.zhitan.common.core.domain.AjaxResult;
@@ -19,6 +10,12 @@
import com.zhitan.framework.web.service.SysPasswordService;
import com.zhitan.system.domain.SysLoginInfo;
import com.zhitan.system.service.ISysLoginInfoService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
 * ç³»ç»Ÿè®¿é—®è®°å½•
@@ -37,10 +34,9 @@
    @PreAuthorize("@ss.hasPermi('monitor:logininfor:list')")
    @GetMapping("/list")
    public TableDataInfo list(SysLoginInfo logininfor)
    public TableDataInfo list(SysLoginInfo logininfor,Long pageNum, Long pageSize)
    {
        startPage();
        List<SysLoginInfo> list = logininforService.selectLogininforList(logininfor);
        Page<SysLoginInfo> list = logininforService.selectLogininforPage(logininfor,pageNum,pageSize);
        return getDataTable(list);
    }
zhitan-admin/src/main/java/com/zhitan/web/controller/monitor/SysOperlogController.java
@@ -1,15 +1,6 @@
package com.zhitan.web.controller.monitor;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import javax.annotation.Resource;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.DeleteMapping;
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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhitan.common.annotation.Log;
import com.zhitan.common.core.controller.BaseController;
import com.zhitan.common.core.domain.AjaxResult;
@@ -18,6 +9,12 @@
import com.zhitan.common.utils.poi.ExcelUtil;
import com.zhitan.system.domain.SysOperLog;
import com.zhitan.system.service.ISysOperLogService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
 * æ“ä½œæ—¥å¿—记录
@@ -33,10 +30,9 @@
    @PreAuthorize("@ss.hasPermi('monitor:operlog:list')")
    @GetMapping("/list")
    public TableDataInfo list(SysOperLog operLog)
    public TableDataInfo list(SysOperLog operLog, Long pageNum, Long pageSize)
    {
        startPage();
        List<SysOperLog> list = operLogService.selectOperLogList(operLog);
        Page<SysOperLog> list = operLogService.selectOperLogPage(operLog,pageNum,pageSize);
        return getDataTable(list);
    }
zhitan-admin/src/main/java/com/zhitan/web/controller/peakvalley/PeakValleyController.java
@@ -60,6 +60,7 @@
    @ApiOperation(value = "获取尖峰平谷分时统计")
    public AjaxResult segmentAnalysisDay(PeakValleyDTO dto) {
        return AjaxResult.success(rulesService.segmentAnalysisDay(dto));
//        return AjaxResult.success(rulesService.segmentAnalysisDayCustomize(dto));
    }
zhitan-admin/src/main/java/com/zhitan/web/controller/powerDistribution/PowerDistributionController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,125 @@
package com.zhitan.web.controller.powerDistribution;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhitan.basicdata.domain.MeterImplement;
import com.zhitan.basicdata.services.IMeterImplementService;
import com.zhitan.common.core.controller.BaseController;
import com.zhitan.common.core.domain.AjaxResult;
import com.zhitan.powerDistribution.domain.PowerDistribution;
import com.zhitan.powerDistribution.services.IPowerDistributionService;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@RestController
@RequestMapping("/powerDistribution")
public class PowerDistributionController extends BaseController {
    @Resource
    private IPowerDistributionService powerDistributionService;
    @Resource
    private IMeterImplementService meterImplementService;
    /**
     * é…ç”µå®¤åˆ—表
     *
     * @param powerDistribution
     * @return
     */
    @GetMapping("/list")
    public AjaxResult list(PowerDistribution powerDistribution) {
        List<PowerDistribution> list = powerDistributionService.selectPowerDistributionList(powerDistribution);
        return AjaxResult.success(list);
    }
    /**
     * é…ç”µå®¤åˆ—表分页查询
     *
     * @param powerDistribution
     * @param pageNo
     * @param pageSize
     * @return
     */
    @GetMapping("/pageList")
    public AjaxResult pageList(PowerDistribution powerDistribution,
                               @RequestParam(required = false, defaultValue = "1") int pageNo,
                               @RequestParam(required = false, defaultValue = "10") int pageSize) {
        Page<PowerDistribution> page = new Page<>(pageNo, pageSize);
        IPage<PowerDistribution> pageList = powerDistributionService.pageList(powerDistribution, page);
        return AjaxResult.success(pageList);
    }
    /**
     * æŸ¥çœ‹é…ç”µå®¤è¯¦æƒ…
     *
     * @param id
     * @return
     */
    @GetMapping("/getDetail")
    public AjaxResult getDetail(@RequestParam("id") String id) {
        PowerDistribution powerDistribution = powerDistributionService.getById(id);
        return AjaxResult.success(powerDistribution);
    }
    /**
     * æ–°å¢žé…ç”µå®¤
     *
     * @param powerDistribution
     * @return
     */
    @PostMapping("/add")
    public AjaxResult addPowerDistribution(@RequestBody PowerDistribution powerDistribution) {
        List<PowerDistribution> checkList = powerDistributionService.list(new QueryWrapper<PowerDistribution>().eq("code", powerDistribution.getCode()));
        if (CollectionUtils.isNotEmpty(checkList)) {
            return AjaxResult.error("配电室编码不能重复,请重新输入");
        }
        return AjaxResult.success(powerDistributionService.save(powerDistribution));
    }
    /**
     * ç¼–辑配电室
     *
     * @param powerDistribution
     * @return
     */
    @PostMapping("/edit")
    public AjaxResult edit(@RequestBody PowerDistribution powerDistribution) {
        List<PowerDistribution> checkList = powerDistributionService.list(new QueryWrapper<PowerDistribution>().ne("id", powerDistribution.getId()).eq("code", powerDistribution.getCode()));
        if (CollectionUtils.isNotEmpty(checkList)) {
            return AjaxResult.error("配电室编码不能重复,请重新输入");
        }
        return AjaxResult.success(powerDistributionService.updateById(powerDistribution));
    }
    /**
     * åˆ é™¤é…ç”µå®¤
     *
     * @param ids
     * @return
     */
    @DeleteMapping("/remove")
    public AjaxResult remove(@RequestParam("ids") String[] ids) {
        List<String> idList = new ArrayList<>();
        List<String> errorList = new ArrayList<>();
        for (String id : ids) {
            List<MeterImplement> meterList = meterImplementService.listMeterImplByInstallLocation(id);
            if (CollectionUtils.isEmpty(meterList)) {
                idList.add(id);
            } else {
                errorList.add(id);
            }
        }
        if (CollectionUtils.isNotEmpty(errorList)) {
            return AjaxResult.error("此配电室已在计量器具中配置,不能删除");
        } else {
            return AjaxResult.success(powerDistributionService.deleteByIds(idList));
        }
    }
}
zhitan-admin/src/main/java/com/zhitan/web/controller/singlelogin/SingleLoginController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,53 @@
package com.zhitan.web.controller.singlelogin;
import com.zhitan.common.annotation.Anonymous;
import com.zhitan.common.constant.Constants;
import com.zhitan.common.core.domain.AjaxResult;
import com.zhitan.common.core.domain.entity.SysUser;
import com.zhitan.common.utils.StringUtils;
import com.zhitan.framework.web.service.SysLoginService;
import com.zhitan.singlelogin.service.ISingleLoginService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
 * å•点登录接口对接
 *
 * @author zhitan
 */
@RestController
public class SingleLoginController
{
    @Resource
    private ISingleLoginService singleLoginService;
    @Resource
    private SysLoginService loginService;
    /**
     * ç™»å½•方法
     *
     * @param token ç™»å½•信息
     * @return ç»“æžœ
     */
    @Anonymous
    @GetMapping("/singleLogin")
    public AjaxResult singleLogin(@RequestParam String token)
    {
        AjaxResult ajax = AjaxResult.success();
        if(StringUtils.isEmpty(token)){
            return AjaxResult.error("token不能为空");
        }
        SysUser user = singleLoginService.singleLogin(token);
        if(null == user){
            return AjaxResult.error("登录失败");
        }
        // ç”Ÿæˆä»¤ç‰Œ
        String newtoken = loginService.loginNoCode(user.getUserName());
        ajax.put(Constants.TOKEN, newtoken);
        return ajax;
    }
}
zhitan-admin/src/main/java/com/zhitan/web/controller/spikesandvalleys/SpikesAndValleysSchemeController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,122 @@
package com.zhitan.web.controller.spikesandvalleys;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhitan.alarm.domain.LimitType;
import com.zhitan.common.core.domain.model.LoginUser;
import com.zhitan.common.core.page.TableDataInfo;
import com.zhitan.common.utils.ServletUtils;
import com.zhitan.framework.web.service.TokenService;
import com.zhitan.spikesandvalleys.domain.SpikesAndValleysScheme;
import com.zhitan.spikesandvalleys.domain.vo.SpikesAndValleysSchemeVo;
import com.zhitan.spikesandvalleys.service.ISpikesAndValleysSchemeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import javax.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.zhitan.common.annotation.Log;
import com.zhitan.common.core.controller.BaseController;
import com.zhitan.common.core.domain.AjaxResult;
import com.zhitan.common.enums.BusinessType;
import com.zhitan.common.utils.poi.ExcelUtil;
/**
 * å°–峰平谷时间段明细Controller
 *
 * @author ZhiTan
 * @date 2024-10-29
 */
@RestController
@RequestMapping("/system/scheme")
public class SpikesAndValleysSchemeController extends BaseController
{
    @Resource
    private ISpikesAndValleysSchemeService spikesAndValleysSchemeService;
    @Autowired
    private TokenService tokenService;
    /**
     * æŸ¥è¯¢å°–峰平谷时间段明细列表
     */
    @PreAuthorize("@ss.hasPermi('system:scheme:list')")
    @GetMapping("/list")
    public TableDataInfo list(SpikesAndValleysScheme spikesAndValleysScheme, Long pageNum, Long pageSize)
    {
//        startPage();
        Page<SpikesAndValleysSchemeVo> page =  spikesAndValleysSchemeService.selectSpikesAndValleysSchemeList(spikesAndValleysScheme, pageNum, pageSize);
        return getDataTable(page);
    }
//    /**
//     * å¯¼å‡ºå°–峰平谷时间段明细列表
//     */
//    @PreAuthorize("@ss.hasPermi('system:scheme:export')")
//    @Log(title = "尖峰平谷时间段明细", businessType = BusinessType.EXPORT)
//    @PostMapping("/export")
//    public void export(HttpServletResponse response, SpikesAndValleysScheme spikesAndValleysScheme)
//    {
//        List<SpikesAndValleysScheme> list = spikesAndValleysSchemeService.selectSpikesAndValleysSchemeList(spikesAndValleysScheme);
//        ExcelUtil<SpikesAndValleysScheme> util = new ExcelUtil<SpikesAndValleysScheme>(SpikesAndValleysScheme.class);
//        util.exportExcel(response, list, "尖峰平谷时间段明细数据");
//    }
    /**
     * èŽ·å–å°–å³°å¹³è°·æ—¶é—´æ®µæ˜Žç»†è¯¦ç»†ä¿¡æ¯
     */
    @PreAuthorize("@ss.hasPermi('system:scheme:query')")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") String id)
    {
        return success(spikesAndValleysSchemeService.selectSpikesAndValleysSchemeById(id));
    }
    /**
     * æ–°å¢žå°–峰平谷时间段明细
     */
    @PreAuthorize("@ss.hasPermi('system:scheme:add')")
    @Log(title = "尖峰平谷时间段明细", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody SpikesAndValleysSchemeVo spikesAndValleysScheme)
    {
        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
        spikesAndValleysScheme.setCreateBy(loginUser.getUsername());
        return toAjax(spikesAndValleysSchemeService.insertSpikesAndValleysScheme(spikesAndValleysScheme));
    }
    /**
     * ä¿®æ”¹å°–峰平谷时间段明细
     */
    @PreAuthorize("@ss.hasPermi('system:scheme:edit')")
    @Log(title = "尖峰平谷时间段明细", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody SpikesAndValleysSchemeVo spikesAndValleysScheme)
    {
        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
        spikesAndValleysScheme.setUpdateBy(loginUser.getUsername());
        return toAjax(spikesAndValleysSchemeService.updateSpikesAndValleysScheme(spikesAndValleysScheme));
    }
    /**
     * åˆ é™¤å°–峰平谷时间段明细
     */
    @PreAuthorize("@ss.hasPermi('system:scheme:remove')")
    @Log(title = "尖峰平谷时间段明细", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable String[] ids)
    {
        return toAjax(spikesAndValleysSchemeService.deleteSpikesAndValleysSchemeByIds(ids));
    }
}
zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysDictDataController.java
@@ -1,5 +1,6 @@
package com.zhitan.web.controller.system;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhitan.common.annotation.Log;
import com.zhitan.common.core.controller.BaseController;
import com.zhitan.common.core.domain.AjaxResult;
@@ -36,10 +37,9 @@
    @PreAuthorize("@ss.hasPermi('system:dict:list')")
    @GetMapping("/list")
    public TableDataInfo list(SysDictData dictData)
    public TableDataInfo list(SysDictData dictData,Long pageNum, Long pageSize)
    {
        startPage();
        List<SysDictData> list = dictDataService.selectDictDataList(dictData);
        Page<SysDictData> list = dictDataService.selectDictDataPage(dictData,pageNum,pageSize);
        return getDataTable(list);
    }
zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysPostController.java
@@ -1,18 +1,6 @@
package com.zhitan.web.controller.system;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import javax.annotation.Resource;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
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.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhitan.common.annotation.Log;
import com.zhitan.common.core.controller.BaseController;
import com.zhitan.common.core.domain.AjaxResult;
@@ -21,6 +9,13 @@
import com.zhitan.common.utils.poi.ExcelUtil;
import com.zhitan.system.domain.SysPost;
import com.zhitan.system.service.ISysPostService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
 * å²—位信息操作处理
@@ -39,10 +34,9 @@
     */
    @PreAuthorize("@ss.hasPermi('system:post:list')")
    @GetMapping("/list")
    public TableDataInfo list(SysPost post)
    public TableDataInfo list(SysPost post,Long pageNum,Long pageSize)
    {
        startPage();
        List<SysPost> list = postService.selectPostList(post);
        Page<SysPost> list = postService.selectPostPage(post,pageNum,pageSize);
        return getDataTable(list);
    }
    
zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysRoleController.java
@@ -1,18 +1,6 @@
package com.zhitan.web.controller.system;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import javax.annotation.Resource;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
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.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhitan.common.annotation.Log;
import com.zhitan.common.core.controller.BaseController;
import com.zhitan.common.core.domain.AjaxResult;
@@ -30,6 +18,13 @@
import com.zhitan.system.service.ISysDeptService;
import com.zhitan.system.service.ISysRoleService;
import com.zhitan.system.service.ISysUserService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
 * è§’色信息
@@ -57,10 +52,9 @@
    @PreAuthorize("@ss.hasPermi('system:role:list')")
    @GetMapping("/list")
    public TableDataInfo list(SysRole role)
    public TableDataInfo list(SysRole role, Long pageNum, Long pageSize)
    {
        startPage();
        List<SysRole> list = roleService.selectRoleList(role);
        Page<SysRole> list = roleService.selectRolePage(role, pageNum, pageSize);
        return getDataTable(list);
    }
@@ -208,7 +202,6 @@
    @GetMapping("/authUser/unallocatedList")
    public TableDataInfo unallocatedList(SysUser user)
    {
        startPage();
        List<SysUser> list = userService.selectUnallocatedList(user);
        return getDataTable(list);
    }
zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysUserController.java
@@ -1,21 +1,6 @@
package com.zhitan.web.controller.system;
import java.util.List;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.ArrayUtils;
import javax.annotation.Resource;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
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.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhitan.common.annotation.Log;
import com.zhitan.common.core.controller.BaseController;
import com.zhitan.common.core.domain.AjaxResult;
@@ -31,6 +16,16 @@
import com.zhitan.system.service.ISysPostService;
import com.zhitan.system.service.ISysRoleService;
import com.zhitan.system.service.ISysUserService;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.stream.Collectors;
/**
 * ç”¨æˆ·ä¿¡æ¯
@@ -58,10 +53,9 @@
     */
    @PreAuthorize("@ss.hasPermi('system:user:list')")
    @GetMapping("/list")
    public TableDataInfo list(SysUser user)
    public TableDataInfo list(SysUser user, Long pageNum, Long pageSize)
    {
        startPage();
        List<SysUser> list = userService.selectUserList(user);
        Page<SysUser> list = userService.selectUserPage(user,pageNum,pageSize);
        return getDataTable(list);
    }
zhitan-admin/src/main/resources/application-dev.yml
zhitan-admin/src/main/resources/application-prod.yml
@@ -6,7 +6,7 @@
    druid:
      # ä¸»åº“数据源
      master:
        url: jdbc:postgresql://127.0.0.1:5432/energy
        url: jdbc:postgresql://127.0.0.1:5432/energy_ml
        username: root
        password: 123456
      # ä»Žåº“数据源
zhitan-common/src/main/java/com/zhitan/common/core/domain/entity/SysRole.java
@@ -1,16 +1,17 @@
package com.zhitan.common.core.domain.entity;
import java.util.Set;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.zhitan.common.annotation.Excel;
import com.zhitan.common.core.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.zhitan.common.core.domain.BaseEntity;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.Set;
/**
 * è§’色表 sys_role
@@ -57,15 +58,19 @@
    private String delFlag;
    /** ç”¨æˆ·æ˜¯å¦å­˜åœ¨æ­¤è§’色标识 é»˜è®¤ä¸å­˜åœ¨ */
    @TableField(exist = false)
    private boolean flag = false;
    /** èœå•组 */
    @TableField(exist = false)
    private Long[] menuIds;
    /** éƒ¨é—¨ç»„(数据权限) */
    @TableField(exist = false)
    private Long[] deptIds;
    /** è§’色菜单权限 */
    @TableField(exist = false)
    private Set<String> permissions;
    public SysRole()
zhitan-common/src/main/java/com/zhitan/common/core/domain/entity/SysUser.java
@@ -1,17 +1,20 @@
package com.zhitan.common.core.domain.entity;
import java.util.Date;
import java.util.List;
import javax.validation.constraints.*;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.zhitan.common.annotation.Excel;
import com.zhitan.common.annotation.Excels;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.zhitan.common.core.domain.BaseEntity;
import com.zhitan.common.xss.Xss;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.util.Date;
import java.util.List;
/**
 * ç”¨æˆ·å¯¹è±¡ sys_user
@@ -78,19 +81,26 @@
        @Excel(name = "部门名称", targetAttr = "deptName", type = Excel.Type.EXPORT),
        @Excel(name = "部门负责人", targetAttr = "leader", type = Excel.Type.EXPORT)
    })
    @TableField(exist = false)
    private SysDept dept;
    /** è§’色对象 */
    @TableField(exist = false)
    private List<SysRole> roles;
    /** è§’色组 */
    @TableField(exist = false)
    private Long[] roleIds;
    /** å²—位组 */
    @TableField(exist = false)
    private Long[] postIds;
    /** è§’色ID */
    @TableField(exist = false)
    private Long roleId;
    private String singleUser;
    public SysUser()
    {
@@ -300,6 +310,14 @@
        this.roleId = roleId;
    }
    public String getSingleUser() {
        return singleUser;
    }
    public void setSingleUser(String singleUser) {
        this.singleUser = singleUser;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
zhitan-common/src/main/java/com/zhitan/common/enums/ElectricityTypeEnum.java
@@ -9,7 +9,9 @@
    SHARP("尖"),
    PEAK("å³°"),
    FLAT("å¹³"),
    VALLEY("è°·");
    VALLEY("è°·"),
    DEEP("深谷");
    private final String desc;
zhitan-common/src/main/java/com/zhitan/common/utils/DateUtils.java
@@ -193,4 +193,28 @@
        ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
        return Date.from(zdt.toInstant());
    }
    /**
     *  èŽ·å–æŒ‡å®šæ—¥æœŸé¢æœˆä»½çš„å¤©æ•°ï¼Œå¹¶è½¬æ¢æˆæ•°ç»„
     * @param date æ—¥æœŸ
     * @return æ—¥æœŸæ•°ç»„
     */
    public static String[] getDays(Date date) {
        if (date == null) {
            throw new IllegalArgumentException("日期参数不能为空");
        }
        // å°† Date è½¬æ¢ä¸º LocalDate
        LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
        int daysInMonth = localDate.lengthOfMonth();
        String[] strings = new String[daysInMonth];
        for (int i = 1; i <= daysInMonth; i++) {
            // ä½¿ç”¨String.format简化零填充
            strings[i - 1] = String.format("%02d", i);
        }
        return strings;
    }
}
zhitan-framework/src/main/java/com/zhitan/framework/config/MyBatisInterceptor.java
@@ -1,6 +1,6 @@
package com.zhitan.framework.config;
import com.sun.istack.internal.NotNull;
import com.zhitan.common.core.domain.model.LoginUser;
import com.zhitan.common.utils.ReflectionUtils;
import com.zhitan.common.utils.SecurityUtils;
@@ -13,6 +13,7 @@
import org.apache.ibatis.plugin.*;
import org.springframework.stereotype.Component;
import javax.validation.constraints.NotNull;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.Date;
zhitan-framework/src/main/java/com/zhitan/framework/config/SecurityConfig.java
@@ -4,9 +4,7 @@
import com.zhitan.framework.security.filter.JwtAuthenticationTokenFilter;
import com.zhitan.framework.security.handle.AuthenticationEntryPointImpl;
import com.zhitan.framework.security.handle.LogoutSuccessHandlerImpl;
import javax.annotation.Resource;
import com.zhitan.framework.security.single.SingleAuthenticationProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.http.HttpMethod;
import org.springframework.security.authentication.AuthenticationManager;
@@ -22,8 +20,7 @@
import org.springframework.security.web.authentication.logout.LogoutFilter;
import org.springframework.web.filter.CorsFilter;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
/**
 * spring security配置
@@ -55,6 +52,12 @@
     */
    @Resource
    private JwtAuthenticationTokenFilter authenticationTokenFilter;
    /**
     * token认证过滤器
     */
    @Resource
    private SingleAuthenticationProvider singleAuthenticationProvider;
    /**
     * è·¨åŸŸè¿‡æ»¤å™¨
@@ -143,5 +146,6 @@
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder());
        auth.authenticationProvider(singleAuthenticationProvider);
    }
}
zhitan-framework/src/main/java/com/zhitan/framework/mqtt/MqttMessageCallback.java
@@ -1,6 +1,11 @@
package com.zhitan.framework.mqtt;
import cn.hutool.core.date.DateTime;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.zhitan.framework.mqtt.domain.EletricData;
import com.zhitan.realtimedata.data.influxdb.InfluxDBRepository;
import com.zhitan.realtimedata.domain.TagValue;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
@@ -8,9 +13,16 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@Component
@Slf4j
public class MqttMessageCallback implements MqttCallback {
    private ExecutorService executorService = Executors.newFixedThreadPool(10); // åˆ›å»ºä¸€ä¸ªçº¿ç¨‹æ± 
    @Autowired
    private InfluxDBRepository repository;
@@ -24,23 +36,66 @@
    }
    @Override
    public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception {
        log.info("接收到消息具体信息---->{}",new String(mqttMessage.getPayload()));
//        final String msg = new String(mqttMessage.getPayload());
//        JSONObject jsonObject = JSON.parseObject(msg);
//        final String values = jsonObject.getString("values");
//        final List<EletricData> eletricData = JSON.parseArray(values, EletricData.class);
//        List<TagValue> tagValueList = new ArrayList<>();
//        //结合业务 ç¼–写具体信息即可
//        eletricData.forEach(ele->{
//            final String key = ele.getKey();
//            TagValue tagValue = new TagValue();
//            tagValue.setDataTime(new DateTime(ele.getTime()));
//            tagValue.setValue(ele.getVaule());
//            tagValue.setTagCode(key.substring(key.lastIndexOf(".") + 1));
//            tagValueList.add(tagValue);
//        });
//        repository.store(tagValueList);
        executorService.submit(new Runnable() {
            @Override
            public void run() {
                final String msg = new String(mqttMessage.getPayload());
                JSONObject jsonObject = JSON.parseObject(msg);
                final String values = jsonObject.getString("values");
                final List<EletricData> eletricData = JSON.parseArray(values, EletricData.class);
                List<TagValue> tagValueList = new ArrayList<>();
                //EMS.HB.High.9_42302035834_Voltagec
                //9 æ˜¯é…ç”µç®±ï¼Œ42302035834是电表号
                //结合业务 ç¼–写具体信息即可
                eletricData.forEach(ele->{
                    final String key = ele.getKey();
                    TagValue tagValue = new TagValue();
                    tagValue.setDataTime(new DateTime(ele.getTime()));
                    tagValue.setValue(ele.getVaule());
                    final String eNoIndex = key.substring(key.indexOf("_") + 1);
                    String tagValueString = formateTag(eNoIndex);
                    tagValue.setTagCode(tagValueString);
                    tagValueList.add(tagValue);
                });
                repository.store(tagValueList);
    }
        });
//
    }
    //将电表号和指标 42302035834_Voltagec  è½¬æ¢æˆæˆ‘们系统的
    private String formateTag(String tag) {
        final String[] tags = tag.split("_");
        String index = tags[1];
        String tagValue = tags[0] + "_";
        switch (index){
            case "PowFactorT":  //功率因数
                tagValue += "PowFactorT";
                break;
            case "Imp":  //正向电能
                tagValue += "ActiveZT";
                break;
//            case "spare":  //
//                tagValue += "";
//                break;
//            case "CurrentD":  //
//                tagValue += "CurrentD";
//                break;
//            case "EXP":  //反向电能
//                tagValue += "";
//                break;
//            case "Total":  //电能总和
//                tagValue += "";
//                break;
            default:
                tagValue = tag;
        }
        return tagValue;
    }
    @Override
    public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
    }
zhitan-framework/src/main/java/com/zhitan/framework/security/single/SingleAuthenticationProvider.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,45 @@
package com.zhitan.framework.security.single;
import com.zhitan.framework.web.service.UserDetailsServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Component;
import java.util.Collections;
@Component
public class SingleAuthenticationProvider implements AuthenticationProvider {
    @Autowired
    private UserDetailsServiceImpl userDetailsService;
    /**
     * è®¤è¯é€»è¾‘
     */
    @Override
    public Authentication authenticate(Authentication authentication) throws AuthenticationException {
        SingleAuthenticationToken SingleAuthenticationToken = (SingleAuthenticationToken) authentication;
        String username = (String) SingleAuthenticationToken.getPrincipal();
        UserDetails user = userDetailsService.loadUserByUsername(username);
        SingleAuthenticationToken result = new SingleAuthenticationToken(user, Collections.emptyList());
        /*
        Details ä¸­åŒ…含了 ip地址、 sessionId ç­‰ç­‰å±žæ€§ ä¹Ÿå¯ä»¥å­˜å‚¨ä¸€äº›è‡ªå·±æƒ³è¦æ”¾è¿›åŽ»çš„å†…å®¹
        */
        result.setDetails(SingleAuthenticationToken.getDetails());
        return result;
    }
    /**
     *UserIdAuthenticationToken交给UserIdAuthenticationProvider处理
     * @param aClass
     * @return
     */
    @Override
    public boolean supports(Class<?> aClass) {
        return SingleAuthenticationToken.class.isAssignableFrom(aClass);
    }
}
zhitan-framework/src/main/java/com/zhitan/framework/security/single/SingleAuthenticationToken.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
package com.zhitan.framework.security.single;
import org.springframework.security.authentication.AbstractAuthenticationToken;
import org.springframework.security.core.GrantedAuthority;
import java.util.Collection;
public class SingleAuthenticationToken extends AbstractAuthenticationToken {
    private final Object principal;
    public SingleAuthenticationToken(Object principal) {
        super(null);
        this.principal = principal;
        this.setAuthenticated(false);
    }
    public SingleAuthenticationToken(Object principal, Collection<? extends GrantedAuthority> authorities) {
        super(authorities);
        this.principal = principal;
        super.setAuthenticated(true);
    }
    @Override
    public Object getCredentials() {
        return null;
    }
    @Override
    public Object getPrincipal() {
        return this.principal;
    }
    @Override
    public void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException {
        if (isAuthenticated) {
            throw new IllegalArgumentException(
                    "Cannot set this token to trusted - use constructor which takes a GrantedAuthority list instead");
        }
        super.setAuthenticated(false);
    }
    @Override
    public void eraseCredentials() {
        super.eraseCredentials();
    }
}
zhitan-framework/src/main/java/com/zhitan/framework/web/service/PermissionService.java
@@ -1,15 +1,15 @@
package com.zhitan.framework.web.service;
import java.util.Set;
import com.zhitan.framework.security.context.PermissionContextHolder;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import com.zhitan.common.constant.Constants;
import com.zhitan.common.core.domain.entity.SysRole;
import com.zhitan.common.core.domain.model.LoginUser;
import com.zhitan.common.utils.SecurityUtils;
import com.zhitan.common.utils.StringUtils;
import com.zhitan.framework.security.context.PermissionContextHolder;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.Set;
/**
 * é¦–创 è‡ªå®šä¹‰æƒé™å®žçŽ°ï¼Œss取自SpringSecurity首字母
@@ -27,18 +27,17 @@
     */
    public boolean hasPermi(String permission)
    {
        return true;
//        if (StringUtils.isEmpty(permission))
//        {
//            return false;
//        }
//        LoginUser loginUser = SecurityUtils.getLoginUser();
//        if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getPermissions()))
//        {
//            return false;
//        }
//        PermissionContextHolder.setContext(permission);
//        return hasPermissions(loginUser.getPermissions(), permission);
        if (StringUtils.isEmpty(permission))
        {
            return false;
        }
        LoginUser loginUser = SecurityUtils.getLoginUser();
        if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getPermissions()))
        {
            return false;
        }
        PermissionContextHolder.setContext(permission);
        return hasPermissions(loginUser.getPermissions(), permission);
    }
    /**
zhitan-framework/src/main/java/com/zhitan/framework/web/service/SysLoginService.java
@@ -1,15 +1,5 @@
package com.zhitan.framework.web.service;
import javax.annotation.Resource;
import com.zhitan.framework.manager.AsyncManager;
import com.zhitan.framework.manager.factory.AsyncFactory;
import com.zhitan.framework.security.context.AuthenticationContextHolder;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Component;
import com.zhitan.common.constant.CacheConstants;
import com.zhitan.common.constant.Constants;
import com.zhitan.common.constant.UserConstants;
@@ -17,17 +7,24 @@
import com.zhitan.common.core.domain.model.LoginUser;
import com.zhitan.common.core.redis.RedisCache;
import com.zhitan.common.exception.ServiceException;
import com.zhitan.common.exception.user.BlackListException;
import com.zhitan.common.exception.user.CaptchaException;
import com.zhitan.common.exception.user.CaptchaExpireException;
import com.zhitan.common.exception.user.UserNotExistsException;
import com.zhitan.common.exception.user.UserPasswordNotMatchException;
import com.zhitan.common.exception.user.*;
import com.zhitan.common.utils.DateUtils;
import com.zhitan.common.utils.MessageUtils;
import com.zhitan.common.utils.StringUtils;
import com.zhitan.common.utils.ip.IpUtils;
import com.zhitan.framework.manager.AsyncManager;
import com.zhitan.framework.manager.factory.AsyncFactory;
import com.zhitan.framework.security.context.AuthenticationContextHolder;
import com.zhitan.framework.security.single.SingleAuthenticationToken;
import com.zhitan.system.service.ISysConfigService;
import com.zhitan.system.service.ISysUserService;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
 * ç™»å½•校验方法
@@ -178,4 +175,39 @@
        sysUser.setLoginDate(DateUtils.getNowDate());
        userService.updateUserProfile(sysUser);
    }
    /**
     * ç™»å½•验证
     * @param username
     * @return ç»“æžœ
     */
    public String loginNoCode(String username)
    {
        // ç”¨æˆ·éªŒè¯
        Authentication authentication = null;
        try
        {
            authentication = authenticationManager
                    .authenticate(new SingleAuthenticationToken(username));
        }
        catch (Exception e)
        {
            if (e instanceof BadCredentialsException)
            {
                AsyncManager.me().execute(AsyncFactory.recordLoginInfo(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
                throw new UserPasswordNotMatchException();
            }
            else
            {
                AsyncManager.me().execute(AsyncFactory.recordLoginInfo(username, Constants.LOGIN_FAIL, e.getMessage()));
                throw new ServiceException(e.getMessage());
            }
        }
        AsyncManager.me().execute(AsyncFactory.recordLoginInfo(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
        LoginUser loginUser = (LoginUser) authentication.getPrincipal();
        recordLoginInfo(loginUser.getUserId());
        // ç”Ÿæˆtoken
        return tokenService.createToken(loginUser);
    }
}
zhitan-framework/src/main/java/com/zhitan/framework/web/service/UserDetailsServiceImpl.java
@@ -1,12 +1,5 @@
package com.zhitan.framework.web.service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.Resource;
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;
import com.zhitan.common.core.domain.entity.SysUser;
import com.zhitan.common.core.domain.model.LoginUser;
import com.zhitan.common.enums.UserStatus;
@@ -14,6 +7,14 @@
import com.zhitan.common.utils.MessageUtils;
import com.zhitan.common.utils.StringUtils;
import com.zhitan.system.service.ISysUserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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;
import javax.annotation.Resource;
/**
 * ç”¨æˆ·éªŒè¯å¤„理
@@ -54,7 +55,7 @@
            throw new ServiceException(MessageUtils.message("user.blocked"));
        }
        passwordService.validate(user);
//        passwordService.validate(user);
        return createLoginUser(user);
    }
zhitan-system/pom.xml
@@ -22,7 +22,12 @@
            <groupId>com.zhitan</groupId>
            <artifactId>zhitan-common</artifactId>
        </dependency>
        <!-- hutool工具类 -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.2.4</version>
        </dependency>
    </dependencies>
</project>
zhitan-system/src/main/java/com/zhitan/basicdata/domain/MeterImplement.java
@@ -116,6 +116,19 @@
    @Excel(name = "允许最大功率")
    private String maxAllowablePower;
    @TableField(exist = false)
    private String installLocationName;
    public String getInstallLocationName() {
        return installLocationName;
    }
    public void setInstallLocationName(String installLocationName) {
        this.installLocationName = installLocationName;
    }
    public String getGatewayId() {
        return gatewayId;
    }
zhitan-system/src/main/java/com/zhitan/basicdata/mapper/MeterImplementMapper.java
@@ -86,4 +86,6 @@
    List<MeterImplement> listMeterImplementByIds(@Param("meterIdList") List<String> meterIdList);
    MeterImplement selectByNodeIdIndexId(@Param("nodeId") String nodeId, @Param("indexId") String indexId);
    List<MeterImplement> listMeterImplByInstallLocation(@Param("installactionLocation") String installactionLocation);
}
zhitan-system/src/main/java/com/zhitan/basicdata/services/IMeterImplementService.java
@@ -95,4 +95,6 @@
    List<MeterImplement> listMeterImplementByIds(List<String> meterIdList);
    Page<MeterImplement> selectMeterImplementPage(MeterImplement meterImplement, Long pageNum, Long pageSize);
    List<MeterImplement> listMeterImplByInstallLocation(String id);
}
zhitan-system/src/main/java/com/zhitan/basicdata/services/impl/MeterImplementServiceImpl.java
@@ -19,6 +19,8 @@
import com.zhitan.model.domain.EnergyIndex;
import com.zhitan.model.mapper.DaqTemplateMapper;
import com.zhitan.model.mapper.EnergyIndexMapper;
import com.zhitan.powerDistribution.domain.PowerDistribution;
import com.zhitan.powerDistribution.mapper.PowerDistributionMapper;
import com.zhitan.system.mapper.SysDictDataMapper;
import com.zhitan.system.service.impl.SysUserServiceImpl;
import org.slf4j.Logger;
@@ -27,6 +29,7 @@
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
/**
 * è®¡é‡å™¨å…·æ¡£æ¡ˆç»´æŠ¤Service业务层处理
@@ -48,6 +51,9 @@
    @Autowired
    private SysDictDataMapper dictDataMapper;
    @Autowired
    private PowerDistributionMapper distributionMapper;
    private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class);
    @Autowired
@@ -343,12 +349,43 @@
    @Override
    public Page<MeterImplement> selectMeterImplementPage(MeterImplement meterImplement, Long pageNum, Long pageSize) {
        Page<MeterImplement> meterImplementPage =new Page<>();
        LambdaQueryWrapper<MeterImplement> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(StringUtils.isNotEmpty(meterImplement.getCode()),MeterImplement::getCode,meterImplement.getCode());
        queryWrapper.like(StringUtils.isNotEmpty(meterImplement.getMeterName()),MeterImplement::getMeterName,meterImplement.getMeterName());
        queryWrapper.eq(StringUtils.isNotEmpty(meterImplement.getMeterType()),MeterImplement::getMeterType,meterImplement.getMeterType());
        queryWrapper.orderByDesc(MeterImplement::getCreateTime);
        final Page<MeterImplement> meterImplementPage = meterImplementMapper.selectPage(new Page<>(pageNum, pageSize), queryWrapper);
//        é…ç”µå®¤è¡¨ï¼šPowerDistribution
        if  (StringUtils.isNotBlank(meterImplement.getInstallactionLocation())){
            LambdaQueryWrapper<PowerDistribution> installLocationWrapper = new LambdaQueryWrapper<>();
            installLocationWrapper.like(StringUtils.isNotEmpty(meterImplement.getInstallactionLocation()),PowerDistribution::getName,meterImplement.getInstallactionLocation());
            List<PowerDistribution> installList=distributionMapper.selectList(installLocationWrapper);
            if (!installList.isEmpty()){
                queryWrapper.in(MeterImplement::getInstallactionLocation,installList.stream().map(PowerDistribution::getId).collect(Collectors.toList()));
            }else{
        return meterImplementPage;
    }
}
        meterImplementPage=meterImplementMapper.selectPage(new Page<>(pageNum, pageSize), queryWrapper);
        if  (meterImplementPage.getTotal() > 0){
            meterImplementPage.getRecords().forEach(v->{
                PowerDistribution distribution=distributionMapper.selectById(v.getInstallactionLocation());
                if (null!=distribution && StringUtils.isNotEmpty(distribution.getName())) {
                    v.setInstallLocationName(distribution.getName());
                }
            });
        }
        return meterImplementPage;
    }
    @Override
    public List<MeterImplement> listMeterImplByInstallLocation(String installLocation) {
        return meterImplementMapper.listMeterImplByInstallLocation(installLocation);
    }
}
zhitan-system/src/main/java/com/zhitan/benchmarkmanage/domain/EnergyBenchmarkManage.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
package com.zhitan.benchmarkmanage.domain;
import com.baomidou.mybatisplus.annotation.TableName;
import com.zhitan.common.annotation.Excel;
import com.zhitan.common.core.domain.BaseEntity;
import lombok.Data;
/**
 * æ ‡æ†å€¼ç®¡ç†å¯¹è±¡ energy_benchmark_manage
 *
 * @author ZhiTan
 * @date 2024-11-12
 */
@TableName("energy_benchmark_manage")
@Data
public class EnergyBenchmarkManage extends BaseEntity {
    private static final long serialVersionUID = 1L;
    /** uuid主键 */
    private String id;
    /** æ ‡æ†ç¼–码 */
    @Excel(name = "标杆编码")
    private String code;
    /** æ ‡æ†ç±»åž‹ */
    @Excel(name = "标杆类型")
    private String type;
    /** æ ‡æ†ç­‰çº§ */
    @Excel(name = "标杆等级")
    private String grade;
    /** æ ‡æ†å€¼ */
    @Excel(name = "标杆值")
    private String value;
    /** å›½æ ‡ç¼–号 */
    @Excel(name = "国标编号")
    private String nationalNum;
}
zhitan-system/src/main/java/com/zhitan/benchmarkmanage/mapper/EnergyBenchmarkManageMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,64 @@
package com.zhitan.benchmarkmanage.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zhitan.benchmarkmanage.domain.EnergyBenchmarkManage;
import java.util.List;
/**
 * æ ‡æ†å€¼ç®¡ç†Mapper接口
 *
 * @author ZhiTan
 * @date 2024-11-12
 */
public interface EnergyBenchmarkManageMapper extends BaseMapper<EnergyBenchmarkManage> {
    /**
     * æŸ¥è¯¢æ ‡æ†å€¼ç®¡ç†
     *
     * @param id æ ‡æ†å€¼ç®¡ç†ä¸»é”®
     * @return æ ‡æ†å€¼ç®¡ç†
     */
    public EnergyBenchmarkManage selectEnergyBenchmarkManageById(String id);
    /**
     * æŸ¥è¯¢æ ‡æ†å€¼ç®¡ç†åˆ—表
     *
     * @param energyBenchmarkManage æ ‡æ†å€¼ç®¡ç†
     * @return æ ‡æ†å€¼ç®¡ç†é›†åˆ
     */
    public List<EnergyBenchmarkManage> selectEnergyBenchmarkManageList(EnergyBenchmarkManage energyBenchmarkManage);
    /**
     * æ–°å¢žæ ‡æ†å€¼ç®¡ç†
     *
     * @param energyBenchmarkManage æ ‡æ†å€¼ç®¡ç†
     * @return ç»“æžœ
     */
    public int insertEnergyBenchmarkManage(EnergyBenchmarkManage energyBenchmarkManage);
    /**
     * ä¿®æ”¹æ ‡æ†å€¼ç®¡ç†
     *
     * @param energyBenchmarkManage æ ‡æ†å€¼ç®¡ç†
     * @return ç»“æžœ
     */
    public int updateEnergyBenchmarkManage(EnergyBenchmarkManage energyBenchmarkManage);
    /**
     * åˆ é™¤æ ‡æ†å€¼ç®¡ç†
     *
     * @param id æ ‡æ†å€¼ç®¡ç†ä¸»é”®
     * @return ç»“æžœ
     */
    public int deleteEnergyBenchmarkManageById(String id);
    /**
     * æ‰¹é‡åˆ é™¤æ ‡æ†å€¼ç®¡ç†
     *
     * @param ids éœ€è¦åˆ é™¤çš„æ•°æ®ä¸»é”®é›†åˆ
     * @return ç»“æžœ
     */
    public int deleteEnergyBenchmarkManageByIds(String[] ids);
    List<EnergyBenchmarkManage> getList(EnergyBenchmarkManage queryParams);
}
zhitan-system/src/main/java/com/zhitan/benchmarkmanage/service/IEnergyBenchmarkManageService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,75 @@
package com.zhitan.benchmarkmanage.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zhitan.benchmarkmanage.domain.EnergyBenchmarkManage;
import java.util.List;
/**
 * æ ‡æ†å€¼ç®¡ç†Service接口
 *
 * @author ZhiTan
 * @date 2024-11-12
 */
public interface IEnergyBenchmarkManageService extends IService<EnergyBenchmarkManage> {
    /**
     * æŸ¥è¯¢æ ‡æ†å€¼ç®¡ç†
     *
     * @param id æ ‡æ†å€¼ç®¡ç†ä¸»é”®
     * @return æ ‡æ†å€¼ç®¡ç†
     */
    public EnergyBenchmarkManage selectEnergyBenchmarkManageById(String id);
    /**
     * æŸ¥è¯¢æ ‡æ†å€¼ç®¡ç†åˆ—表
     *
     * @param energyBenchmarkManage æ ‡æ†å€¼ç®¡ç†
     * @return æ ‡æ†å€¼ç®¡ç†é›†åˆ
     */
    public List<EnergyBenchmarkManage> selectEnergyBenchmarkManageList(EnergyBenchmarkManage energyBenchmarkManage);
    /**
     * æ–°å¢žæ ‡æ†å€¼ç®¡ç†
     *
     * @param energyBenchmarkManage æ ‡æ†å€¼ç®¡ç†
     * @return ç»“æžœ
     */
    public int insertEnergyBenchmarkManage(EnergyBenchmarkManage energyBenchmarkManage);
    /**
     * ä¿®æ”¹æ ‡æ†å€¼ç®¡ç†
     *
     * @param energyBenchmarkManage æ ‡æ†å€¼ç®¡ç†
     * @return ç»“æžœ
     */
    public int updateEnergyBenchmarkManage(EnergyBenchmarkManage energyBenchmarkManage);
    /**
     * æ‰¹é‡åˆ é™¤æ ‡æ†å€¼ç®¡ç†
     *
     * @param ids éœ€è¦åˆ é™¤çš„æ ‡æ†å€¼ç®¡ç†ä¸»é”®é›†åˆ
     * @return ç»“æžœ
     */
    public int deleteEnergyBenchmarkManageByIds(String[] ids);
    /**
     * åˆ é™¤æ ‡æ†å€¼ç®¡ç†ä¿¡æ¯
     *
     * @param id æ ‡æ†å€¼ç®¡ç†ä¸»é”®
     * @return ç»“æžœ
     */
    public int deleteEnergyBenchmarkManageById(String id);
    /**
     * åˆ†é¡µæŸ¥è¯¢æ•°æ®
     * @param energyBenchmarkManage
     * @param pageNum
     * @param pageSize
     * @return
     */
    Page<EnergyBenchmarkManage> selectBenchmarkManagePage(EnergyBenchmarkManage energyBenchmarkManage, Long pageNum, Long pageSize);
    List<EnergyBenchmarkManage> getList(EnergyBenchmarkManage queryParams);
}
zhitan-system/src/main/java/com/zhitan/benchmarkmanage/service/impl/EnergyBenchmarkManageServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,111 @@
package com.zhitan.benchmarkmanage.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zhitan.benchmarkmanage.domain.EnergyBenchmarkManage;
import com.zhitan.benchmarkmanage.mapper.EnergyBenchmarkManageMapper;
import com.zhitan.benchmarkmanage.service.IEnergyBenchmarkManageService;
import com.zhitan.common.utils.DateUtils;
import com.zhitan.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
/**
 * æ ‡æ†å€¼ç®¡ç†Service业务层处理
 *
 * @author ZhiTan
 * @date 2024-11-12
 */
@Service
public class EnergyBenchmarkManageServiceImpl extends ServiceImpl<EnergyBenchmarkManageMapper, EnergyBenchmarkManage> implements IEnergyBenchmarkManageService {
    @Autowired
    private EnergyBenchmarkManageMapper energyBenchmarkManageMapper;
    /**
     * æŸ¥è¯¢æ ‡æ†å€¼ç®¡ç†
     *
     * @param id æ ‡æ†å€¼ç®¡ç†ä¸»é”®
     * @return æ ‡æ†å€¼ç®¡ç†
     */
    @Override
    public EnergyBenchmarkManage selectEnergyBenchmarkManageById(String id) {
        return energyBenchmarkManageMapper.selectEnergyBenchmarkManageById(id);
    }
    /**
     * æŸ¥è¯¢æ ‡æ†å€¼ç®¡ç†åˆ—表
     *
     * @param energyBenchmarkManage æ ‡æ†å€¼ç®¡ç†
     * @return æ ‡æ†å€¼ç®¡ç†
     */
    @Override
    public List<EnergyBenchmarkManage> selectEnergyBenchmarkManageList(EnergyBenchmarkManage energyBenchmarkManage) {
        return energyBenchmarkManageMapper.selectEnergyBenchmarkManageList(energyBenchmarkManage);
    }
    /**
     * æ–°å¢žæ ‡æ†å€¼ç®¡ç†
     *
     * @param energyBenchmarkManage æ ‡æ†å€¼ç®¡ç†
     * @return ç»“æžœ
     */
    @Override
    public int insertEnergyBenchmarkManage(EnergyBenchmarkManage energyBenchmarkManage) {
        energyBenchmarkManage.setCreateTime(DateUtils.getNowDate());
        return energyBenchmarkManageMapper.insertEnergyBenchmarkManage(energyBenchmarkManage);
    }
    /**
     * ä¿®æ”¹æ ‡æ†å€¼ç®¡ç†
     *
     * @param energyBenchmarkManage æ ‡æ†å€¼ç®¡ç†
     * @return ç»“æžœ
     */
    @Override
    public int updateEnergyBenchmarkManage(EnergyBenchmarkManage energyBenchmarkManage) {
        energyBenchmarkManage.setUpdateTime(DateUtils.getNowDate());
        return energyBenchmarkManageMapper.updateEnergyBenchmarkManage(energyBenchmarkManage);
    }
    /**
     * æ‰¹é‡åˆ é™¤æ ‡æ†å€¼ç®¡ç†
     *
     * @param ids éœ€è¦åˆ é™¤çš„æ ‡æ†å€¼ç®¡ç†ä¸»é”®
     * @return ç»“æžœ
     */
    @Override
    public int deleteEnergyBenchmarkManageByIds(String[] ids) {
        return energyBenchmarkManageMapper.deleteEnergyBenchmarkManageByIds(ids);
    }
    /**
     * åˆ é™¤æ ‡æ†å€¼ç®¡ç†ä¿¡æ¯
     *
     * @param id æ ‡æ†å€¼ç®¡ç†ä¸»é”®
     * @return ç»“æžœ
     */
    @Override
    public int deleteEnergyBenchmarkManageById(String id) {
        return energyBenchmarkManageMapper.deleteEnergyBenchmarkManageById(id);
    }
    @Override
    public Page<EnergyBenchmarkManage> selectBenchmarkManagePage(EnergyBenchmarkManage energyBenchmarkManage, Long pageNum, Long pageSize) {
        LambdaQueryWrapper<EnergyBenchmarkManage> queryWrapper=new LambdaQueryWrapper<EnergyBenchmarkManage>();
        queryWrapper.like(StringUtils.isNotEmpty(energyBenchmarkManage.getCode()),EnergyBenchmarkManage::getCode,energyBenchmarkManage.getCode());
        queryWrapper.eq(StringUtils.isNotEmpty(energyBenchmarkManage.getType()),EnergyBenchmarkManage::getType,energyBenchmarkManage.getType());
        queryWrapper.eq(StringUtils.isNotEmpty(energyBenchmarkManage.getGrade()),EnergyBenchmarkManage::getGrade,energyBenchmarkManage.getGrade());
        queryWrapper.orderByDesc(EnergyBenchmarkManage::getCreateTime);
        return energyBenchmarkManageMapper.selectPage(new Page<EnergyBenchmarkManage>(pageNum, pageSize), queryWrapper);
    }
    @Override
    public List<EnergyBenchmarkManage> getList(EnergyBenchmarkManage queryParams) {
        return energyBenchmarkManageMapper.getList(queryParams);
    }
}
zhitan-system/src/main/java/com/zhitan/carbonemission/domain/CarbonEmission.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,56 @@
package com.zhitan.carbonemission.domain;
import com.zhitan.common.enums.Quality;
import com.zhitan.common.enums.TimeType;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
 * å‘¨æœŸæ•°æ®é¡¹.
 */
@Data
@ApiModel(value = "dataItem对象-计算碳排放用")
public class CarbonEmission implements Serializable {
  private static final long serialVersionUID = -2777479013884125925L;
  @ApiModelProperty(value = "指标id")
  private String indexId;
  @ApiModelProperty(value = "指标库id")
  private String indexStorageId;
  @ApiModelProperty(value = "指标code")
  private String indexCode;
  @ApiModelProperty(value = "指标名称")
  private String indexName;
  @ApiModelProperty(value = "开始时间")
  private Date beginTime;
  @ApiModelProperty(value = "结束时间")
  private Date endTime;
  @ApiModelProperty(value = "日期")
  private Date dataTime;
  @ApiModelProperty(value = "日期字符串")
  private String dataTimeStr;
  @ApiModelProperty(value = "时间类型编码")
  private String timeCode;
  @ApiModelProperty(value = "时间类型")
  private TimeType timeType;
  @ApiModelProperty(value = "值")
  private Double value;
  @ApiModelProperty(value = "质量")
  private Quality quality;
  @ApiModelProperty(value = "")
  private String unitId;
  @ApiModelProperty(value = "创建时间")
  private Date createTime;
  @ApiModelProperty(value = "更新时间")
  private Date updateTime;
  @ApiModelProperty(value = "备注")
  private String remark;
  @ApiModelProperty(value = "能源类型")
  private String energyId;
  @ApiModelProperty(value = "节点名称")
  private String nodeName;
}
zhitan-system/src/main/java/com/zhitan/carbonemission/domain/dto/CarbonEmissionDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.zhitan.carbonemission.domain.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.zhitan.common.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
/**
 *  ç¢³æŽ’放核算
 *
 * @author lsk
 * @date 2024-10-29 17:55
 */
@Getter
@Setter
public class CarbonEmissionDTO {
    @ApiModelProperty(value = "节点id")
    private String nodeId;
    @ApiModelProperty(value = "时间类型:年、月、日")
    private String timeType;
    @ApiModelProperty(value = "查询时间")
    private Date dataTime;
    @ApiModelProperty(value = "排放类型")
    private String emissionType;
}
zhitan-system/src/main/java/com/zhitan/carbonemission/domain/vo/CarbonEmissionRankVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.zhitan.carbonemission.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class CarbonEmissionRankVO {
    @ApiModelProperty(value = "节点名称")
    private String nodeName;
    @ApiModelProperty(value = "全部碳排放量")
    private Double allValue;
    @ApiModelProperty(value = "水消耗量")
    private Double water;
    @ApiModelProperty(value = "电消耗量")
    private Double steam;
    @ApiModelProperty(value = "用电量")
    private Double electric;
    @ApiModelProperty(value = "同比")
    private String yoyEnery;
    @ApiModelProperty(value = "类型名称")
    private String allEneryType;
    @ApiModelProperty(value = "总用量")
    private Double totalEnery;
}
zhitan-system/src/main/java/com/zhitan/carbonemission/domain/vo/carbonEmissionYQVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.zhitan.carbonemission.domain.vo;
import com.zhitan.common.annotation.Excel;
import lombok.Data;
@Data
public class carbonEmissionYQVO {
    @Excel(name = "日期")
    private String xAxis;
    @Excel(name = "碳排放量")
    private String yAxis;
    @Excel(name = "同比")
    private String YOY;
    @Excel(name = "环比")
    private String QOQ;
    public carbonEmissionYQVO() {
    }
    public carbonEmissionYQVO(String xAxis, String yAxis, String YOY, String QOQ) {
        this.xAxis = xAxis;
        this.yAxis = yAxis;
        this.YOY = YOY;
        this.QOQ = QOQ;
    }
}
zhitan-system/src/main/java/com/zhitan/carbonemission/service/ICarbonEmissionService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.zhitan.carbonemission.service;
import com.zhitan.carbonemission.domain.dto.CarbonEmissionDTO;
import com.zhitan.carbonemission.domain.vo.carbonEmissionYQVO;
import java.util.List;
import java.util.Map;
/**
 * ç¢³æŽ’放核算
 *
 * @author lsk
 * @date 2024-10-29
 */
public interface ICarbonEmissionService {
    /**
     * è®¡ç®—碳排放量 - é¡¶éƒ¨ä¸Žåº•部
     *
     * @param carbonEmissionDTO è¾“入参数
     * @return ç¢³æŽ’放量
     */
    Map<String,Object> getUpCarbonEmission(CarbonEmissionDTO carbonEmissionDTO);
    /**
     * è®¡ç®—碳排放量 - ä¸­é—´å±‚
     *
     * @param carbonEmissionDTO è¾“入参数
     * @return ç¢³æŽ’放量
     */
    List<carbonEmissionYQVO> getMiddleCarbonEmission(CarbonEmissionDTO carbonEmissionDTO);
}
zhitan-system/src/main/java/com/zhitan/carbonemission/service/impl/CarbonEmissionServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,290 @@
package com.zhitan.carbonemission.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.zhitan.basicdata.domain.SysEnergy;
import com.zhitan.basicdata.mapper.SysEnergyMapper;
import com.zhitan.carbonemission.domain.CarbonEmission;
import com.zhitan.carbonemission.domain.dto.CarbonEmissionDTO;
import com.zhitan.carbonemission.domain.vo.CarbonEmissionRankVO;
import com.zhitan.carbonemission.domain.vo.carbonEmissionYQVO;
import com.zhitan.carbonemission.service.ICarbonEmissionService;
import com.zhitan.common.utils.DateUtils;
import com.zhitan.common.utils.StringUtils;
import com.zhitan.dataitem.mapper.DataItemMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.text.DecimalFormat;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
 * ã€ç¢³æŽ’放核算】Service业务层处理
 *
 * @author lsk
 * @date 2024-10-29
 */
@Service
public class CarbonEmissionServiceImpl implements ICarbonEmissionService {
    @Resource
    private DataItemMapper dataItemMapper;
    @Resource
    private SysEnergyMapper sysEnergyMapper;
    private final static String[] YEAR = {"01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"};
    private final static String[] DAY = {"00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23"};
    //获取页面上部分的碳排放
    @Override
    public Map<String, Object> getUpCarbonEmission(CarbonEmissionDTO carbonEmissionDTO) {
        Map<String, Object> stringObjectMap = new HashMap<>();
        validate(carbonEmissionDTO, "N");
        // èŽ·å–æŸ¥è¯¢æ—¶é—´çš„å¼€å§‹å’Œç»“æŸæ—¶é—´
        Date queryTime = carbonEmissionDTO.getDataTime();
        Date beginTime;
        Date endTime;
        switch (carbonEmissionDTO.getTimeType()) {
            case "DAY":
                beginTime = DateUtil.beginOfDay(queryTime);
                endTime = DateUtil.endOfDay(queryTime);
                break;
            case "MONTH":
                beginTime = DateUtil.beginOfMonth(queryTime);
                endTime = DateUtil.endOfMonth(queryTime);
                break;
            case "YEAR":
                beginTime = DateUtil.beginOfYear(queryTime);
                endTime = DateUtil.endOfYear(queryTime);
                break;
            default:
                throw new RuntimeException("时间类型错误");
        }
        Date lastTime = DateUtil.offsetMonth(beginTime, -12);
        Date lastEndTime = DateUtil.offsetMonth(endTime, -12);
        // èŽ·å–å½“å‰å¹´ä»½å’Œä¸Šä¸€å¹´ä»½çš„ç¢³æŽ’æ”¾æ•°æ®
        List<CarbonEmission> upCarbonEmission = dataItemMapper.getUpCarbonEmission(beginTime, endTime, carbonEmissionDTO.getTimeType(), carbonEmissionDTO.getNodeId());
        List<CarbonEmission> upLastCarbonEmission = dataItemMapper.getUpCarbonEmission(lastTime, lastEndTime, carbonEmissionDTO.getTimeType(), carbonEmissionDTO.getNodeId());
        List<SysEnergy> sysEnergies = sysEnergyMapper.selectList(null);
        if (ObjectUtil.isEmpty(sysEnergies)) {
            throw new RuntimeException("获取碳排放转换率时出错: ç³»ç»Ÿèƒ½æºæ•°æ®ä¸ºç©º");
        }
        // æž„建能源映射和碳排放数据映射
        Map<String, SysEnergy> energyMap = sysEnergies.stream().collect(Collectors.toMap(SysEnergy::getEnersno, Function.identity()));
        final List<String> energyType = sysEnergies.stream().map(SysEnergy::getEnersno).collect(Collectors.toList());
        double allValue = 0.0;
        double allLastValue = 0.0;
        List<CarbonEmissionRankVO> upData = new ArrayList<>();
        // è®¡ç®—每种能源的当前值和去年的值
        for (String s : energyType) {
            final double value = getValues(energyMap, upCarbonEmission,energyType);
            final double lastYearValueNum = getValues(energyMap, upLastCarbonEmission,energyType);
            allValue += value;
            allLastValue += lastYearValueNum;
            final CarbonEmissionRankVO carbonEmissionRankVO = new CarbonEmissionRankVO();
            carbonEmissionRankVO.setAllEneryType(energyMap.get(s).getEnername());
            carbonEmissionRankVO.setYoyEnery(String.format("%.2f", calculateYOY(value, lastYearValueNum)));
            carbonEmissionRankVO.setTotalEnery(value);
            upData.add(carbonEmissionRankVO);
        }
        CarbonEmissionRankVO carbonEmissionRankVOAll = new CarbonEmissionRankVO();
        carbonEmissionRankVOAll.setAllEneryType("总碳排放量");
        carbonEmissionRankVOAll.setYoyEnery(String.format("%.2f", calculateYOY(allValue, allLastValue)));
        carbonEmissionRankVOAll.setTotalEnery(allValue);
        upData.add(carbonEmissionRankVOAll);
        // è®¡ç®—下方的碳排放并排序
        List<CarbonEmissionRankVO> carbonEmissionRankVOS = calculateDownCarbonEmission(beginTime, endTime, carbonEmissionDTO, energyMap,sysEnergies);
        carbonEmissionRankVOS.sort(Comparator.comparing(CarbonEmissionRankVO::getAllValue).reversed());
        stringObjectMap.put("down", carbonEmissionRankVOS);
        stringObjectMap.put("upData", upData);
        return stringObjectMap;
    }
    // è®¡ç®—同比增长率
    private double calculateYOY(double current, double last) {
        if(last !=0.0) {
            return (current - last) / last * 100;
        }
        return 0;
//        return (current - last) / (last == 0.0 ? 1 : last) * 100;
    }
    // è®¡ç®—下方的碳排放
    private List<CarbonEmissionRankVO> calculateDownCarbonEmission(Date beginTime, Date endTime, CarbonEmissionDTO carbonEmissionDTO, Map<String, SysEnergy> energyMap,List<SysEnergy> sysEnergies) {
        List<CarbonEmission> downCarbonEmission = dataItemMapper.getDownCarbonEmission(beginTime, endTime, carbonEmissionDTO.getTimeType(), carbonEmissionDTO.getNodeId());
        List<CarbonEmissionRankVO> carbonEmissionRankVOS = new ArrayList<>();
        final List<String> energyType = sysEnergies.stream().map(SysEnergy::getEnersno).collect(Collectors.toList());
        if (CollectionUtils.isNotEmpty(downCarbonEmission)) {
            DecimalFormat df = new DecimalFormat("#.00");
            Map<String, List<CarbonEmission>> nodeNameMap = downCarbonEmission.stream().collect(Collectors.groupingBy(CarbonEmission::getNodeName));
            nodeNameMap.forEach((k, v) -> {
                CarbonEmissionRankVO rankVO = new CarbonEmissionRankVO();
                rankVO.setNodeName(k);
                double totalValues = 0.0;
                // è®¡ç®—每种能源的值
                for (String s : energyType) {
                    SysEnergy sysEnergy = energyMap.get(s);
                    if (sysEnergy == null || ObjectUtil.isEmpty(sysEnergy.getCoefficient())) {
                        throw new RuntimeException("获取碳排放转换率时出错: ç³»ç»Ÿèƒ½æºæ•°æ®ä¸­ä¸å­˜åœ¨" + s + "能源类型");
                    }
                    double value = v.stream().filter(ec -> ec.getEnergyId().equals(s))
                        .mapToDouble(CarbonEmission::getValue)
                        .sum();
                    double calculatedValue = Double.parseDouble(df.format(sysEnergy.getCoefficient().doubleValue() * value));
                    switch (s) {
                        case "water":
                            rankVO.setWater(calculatedValue);
                            break;
                        case "steam":
                            rankVO.setSteam(calculatedValue);
                            break;
                        case "electric":
                            rankVO.setElectric(calculatedValue);
                            break;
                    }
                    totalValues += calculatedValue;
                }
                rankVO.setAllValue(totalValues);
                carbonEmissionRankVOS.add(rankVO);
            });
        }
        return carbonEmissionRankVOS;
    }
    @Override
    public List<carbonEmissionYQVO> getMiddleCarbonEmission(CarbonEmissionDTO carbonEmissionDTO) {
        validate(carbonEmissionDTO, "Y");
        // è¯¥æ–¹æ³•用于计算碳排放总值并返回结果
        Map<String, Object> stringObjectMap = new HashMap<>();
        Date beginTime;
        Date endTime;
        final String timeType = carbonEmissionDTO.getTimeType();
        final Date dataTime = carbonEmissionDTO.getDataTime();
        String timeTypeStr;
        String[] XAxis;
        switch (timeType) {
            case "DAY":
                timeTypeStr = "HOUR";
                XAxis = DAY;
                beginTime = DateUtil.beginOfDay(dataTime);
                endTime = DateUtil.endOfDay(dataTime);
                break;
            case "MONTH":
                timeTypeStr = "DAY";
                XAxis = DateUtils.getDays(dataTime);
                beginTime = DateUtil.beginOfMonth(dataTime);
                endTime = DateUtil.endOfMonth(dataTime);
                break;
            case "YEAR":
                timeTypeStr = "MONTH";
                XAxis = YEAR;
                beginTime = DateUtil.beginOfYear(dataTime);
                endTime = DateUtil.endOfYear(dataTime);
                break;
            default:
                throw new RuntimeException("时间类型错误");
        }
        Date lastTime = DateUtil.offsetMonth(beginTime, -12);
        Date lastEndTime = DateUtil.offsetMonth(endTime, -12);
        List<SysEnergy> sysEnergies = sysEnergyMapper.selectList(null);
        if (ObjectUtil.isEmpty(sysEnergies)) {
            throw new RuntimeException("获取碳排放转换率时出错: ç³»ç»Ÿèƒ½æºæ•°æ®ä¸ºç©º");
        }
        // æž„建能源映射和碳排放数据映射
        Map<String, SysEnergy> energyMap = sysEnergies.stream().collect(Collectors.toMap(SysEnergy::getEnersno, Function.identity()));
        final List<String> energyType = sysEnergies.stream().map(SysEnergy::getEnersno).collect(Collectors.toList());
        final List<CarbonEmission> middleCarbonEmission = dataItemMapper.getMiddleCarbonEmission(beginTime, endTime, timeTypeStr, carbonEmissionDTO.getNodeId(), carbonEmissionDTO.getEmissionType());
        final List<CarbonEmission> lastMiddleCarbonEmission = dataItemMapper.getMiddleCarbonEmission(lastTime, lastEndTime, timeTypeStr, carbonEmissionDTO.getNodeId(), carbonEmissionDTO.getEmissionType());
        final Map<String, List<CarbonEmission>> collect = middleCarbonEmission.stream().collect(Collectors.groupingBy(CarbonEmission::getDataTimeStr));
        final Map<String, List<CarbonEmission>> lastCollect = lastMiddleCarbonEmission.stream().collect(Collectors.groupingBy(CarbonEmission::getDataTimeStr));
        List<carbonEmissionYQVO> carbonEmissionYQVOS = new ArrayList<>();
        for (int i = 0; i < XAxis.length; i++) {
            // å½“前时间段的碳排放数据
            final List<CarbonEmission> carbonEmissions = collect.get(XAxis[i]);
            // ä¸Šä¸€æ—¶é—´æ®µçš„碳排放数据
            final List<CarbonEmission> lastCarbonEmissions = lastCollect.get(XAxis[i]);
            // æ€»å€¼
            double totalValue = getValues(energyMap, carbonEmissions,energyType);
            // ä¸Šä¸€æ—¶é—´æ®µçš„æ€»å€¼
            double totalLastValue = getValues(energyMap, lastCarbonEmissions,energyType);
            // å‰ä¸€æ¬¡çš„æ€»å€¼
            double totalFrontValue = (i == 0) ? 0.0 : getValues(energyMap, collect.get(XAxis[i - 1]),energyType);
            final carbonEmissionYQVO carbonEmissionYQVO = new carbonEmissionYQVO(XAxis[i] ,  String.format("%.2f", totalValue) ,String.format("%.2f", calculateYOY(totalValue, totalLastValue)) , String.format("%.2f", calculateYOY(totalValue, totalFrontValue)));
            carbonEmissionYQVOS.add(carbonEmissionYQVO);
        }
        return carbonEmissionYQVOS;
    }
    // éªŒè¯ CarbonEmissionDTO å¯¹è±¡çš„各项属性是否有效
    public static void validate(CarbonEmissionDTO carbonEmissionDTO, String type) {
        if (ObjectUtil.isNull(carbonEmissionDTO.getDataTime())) {
            throw new RuntimeException("请选择时间");
        }
        if (StringUtils.isEmpty(carbonEmissionDTO.getTimeType())) {
            throw new RuntimeException("请选择时间类型");
        }
        if (ObjectUtil.isEmpty(carbonEmissionDTO.getNodeId())) {
            throw new RuntimeException("请选择节点");
        }
        if ("Y".equals(type) && ObjectUtil.isEmpty(carbonEmissionDTO.getEmissionType())) {
            throw new RuntimeException("请选择排放类型");
        }
    }
    public static double getValues(Map<String, SysEnergy> energyMap, List<CarbonEmission> carbonEmissions,List<String> energyType) {
        if (CollectionUtils.isEmpty(carbonEmissions)) {
            return 0.0;
        }
        // åˆå§‹åŒ–总值
        double allValue = 0.0;
        // æŒ‰èƒ½æºID分组
        final Map<String, List<CarbonEmission>> energyValueMap = carbonEmissions.stream()
                .collect(Collectors.groupingBy(CarbonEmission::getEnergyId));
//        final List<String> energyType = sysEnergies.stream().map(SysEnergy::getEnersno).collect(Collectors.toList());
// è®¡ç®—每种能源的当前值
        for (String s : energyType) {
            SysEnergy sysEnergy = energyMap.get(s);
            // ç¡®ä¿èƒ½æºå­˜åœ¨ä¸”系数不为空
            if (sysEnergy == null || sysEnergy.getCoefficient() == null) {
                throw new RuntimeException("获取碳排放转换率时出错: ç³»ç»Ÿèƒ½æºæ•°æ®ä¸­ä¸å­˜åœ¨æˆ–系数为空" + s + "能源类型");
            }
            // èŽ·å–å¯¹åº”èƒ½æºçš„å€¼
            double value = energyValueMap.getOrDefault(s, Collections.emptyList()).stream()
                    .mapToDouble(CarbonEmission::getValue)
                    .sum();
            // ç›´æŽ¥è®¡ç®—总值,避免冗余的转换
            allValue += sysEnergy.getCoefficient().doubleValue() * value;
        }
        // æ ¼å¼åŒ–最终结果
        return Double.parseDouble(new DecimalFormat("#.00").format(allValue));
    }
}
zhitan-system/src/main/java/com/zhitan/consumptionanalysis/service/impl/ConsumptionAnalysisServiceImpl.java
@@ -402,7 +402,7 @@
        final LambdaQueryWrapper<SysEnergy> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.in(CollectionUtils.isNotEmpty(eneryIdList),SysEnergy::getEnersno,eneryIdList);
        final List<SysEnergy> sysEnergies = sysEnergyMapper.selectList(queryWrapper);
        final Map<String, Object> energyCoefficientMap = sysEnergies.stream().collect(Collectors.toMap(SysEnergy::getEnersno, SysEnergy::getCoefficient));
        final Map<String, BigDecimal> energyCoefficientMap = sysEnergies.stream().collect(Collectors.toMap(SysEnergy::getEnersno, SysEnergy::getCoefficient));
        final Map<String, String> energyNameMap = sysEnergies.stream().collect(Collectors.toMap(SysEnergy::getEnersno,SysEnergy::getEnername));
        final Map<String, String> indexIdEnergyIdMap = new HashMap<>();
        nodeIndexInforList.forEach(n->{
@@ -528,7 +528,7 @@
                    final String indexId = dataItem.getIndexId();
                    final String energyId = indexIdEnergyIdMap.get(indexId);
                    
                    final BigDecimal coefficient = (BigDecimal) energyCoefficientMap.get(energyId);
                    final BigDecimal coefficient = energyCoefficientMap.get(energyId);
                    if(coefficient == null){
                        throw new RuntimeException("能源类型" + energyId + "没有配置折标系数,无法计算");
                    }
@@ -549,7 +549,7 @@
                    final String indexId = dataItem.getIndexId();
                    final String energyId = indexIdEnergyIdMap.get(indexId);
                    final BigDecimal coefficient = (BigDecimal) energyCoefficientMap.get(energyId);
                    final BigDecimal coefficient = energyCoefficientMap.get(energyId);
                    if(coefficient == null){
                        throw new RuntimeException("能源类型" + energyId + "没有配置折标系数,无法计算");
                    }
@@ -613,7 +613,7 @@
        indexDataItemMap.forEach((indexId,value)->{
            final String energyId = indexIdEnergyIdMap.get(indexId);
            final BigDecimal coefficient = (BigDecimal) energyCoefficientMap.get(energyId);
            final BigDecimal coefficient = energyCoefficientMap.get(energyId);
            if(coefficient == null){
                throw new RuntimeException("能源类型" + energyId + "没有配置折标系数,无法计算");
            }
@@ -722,7 +722,7 @@
        final LambdaQueryWrapper<SysEnergy> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.in(CollectionUtils.isNotEmpty(eneryIdList),SysEnergy::getEnersno,eneryIdList);
        final List<SysEnergy> sysEnergies = sysEnergyMapper.selectList(queryWrapper);
        final Map<String, Object> energyCoefficientMap = sysEnergies.stream().collect(Collectors.toMap(SysEnergy::getEnersno, SysEnergy::getCoefficient));
        final Map<String, BigDecimal> energyCoefficientMap = sysEnergies.stream().collect(Collectors.toMap(SysEnergy::getEnersno, SysEnergy::getCoefficient));
        final Map<String, String> indexIdEnergyIdMap = new HashMap<>();
        nodeIndexInforList.forEach(n->{
            final String indexId = n.getIndexId();
@@ -775,7 +775,7 @@
                    final String indexId = dataItem.getIndexId();
                    final String energyId = indexIdEnergyIdMap.get(indexId);
                    final BigDecimal coefficient = (BigDecimal) energyCoefficientMap.get(energyId);
                    final BigDecimal coefficient = energyCoefficientMap.get(energyId);
                    if(coefficient == null){
                        throw new RuntimeException("能源类型" + energyId + "没有配置折标系数,无法计算");
                    }
@@ -811,7 +811,7 @@
        indexDataItemMap.forEach((indexId,value)->{
            final String energyId = indexIdEnergyIdMap.get(indexId);
            final BigDecimal coefficient = (BigDecimal) energyCoefficientMap.get(energyId);
            final BigDecimal coefficient = energyCoefficientMap.get(energyId);
            if(coefficient == null){
                throw new RuntimeException("能源类型" + energyId + "没有配置折标系数,无法计算");
            }
@@ -854,7 +854,7 @@
        queryWrapper.in(CollectionUtils.isNotEmpty(eneryIdList),SysEnergy::getEnersno,eneryIdList);
        final List<SysEnergy> sysEnergies = sysEnergyMapper.selectList(queryWrapper);
        //能源编号和能源折标系数
        final Map<String, Object> energyCoefficientMap = sysEnergies.stream().collect(Collectors.toMap(SysEnergy::getEnersno, SysEnergy::getCoefficient));
        final Map<String, BigDecimal> energyCoefficientMap = sysEnergies.stream().collect(Collectors.toMap(SysEnergy::getEnersno, SysEnergy::getCoefficient));
        //index和能源
        final Map<String, String> indexIdEnergyIdMap = new HashMap<>();
        nodeIndexInforList.forEach(n->{
@@ -899,7 +899,7 @@
            indexIdList.forEach(indexId->{
                final List<DataItem> dataItems = dataItemMap.get(indexId);
                final String energyId = indexIdEnergyIdMap.get(indexId);
                final BigDecimal coefficient = (BigDecimal) energyCoefficientMap.get(energyId);
                final BigDecimal coefficient = energyCoefficientMap.get(energyId);
                
                if(CollectionUtils.isNotEmpty(dataItems) ){
                    BigDecimal sum = BigDecimal.valueOf(dataItems.stream()
@@ -999,7 +999,7 @@
        final LambdaQueryWrapper<SysEnergy> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.in(CollectionUtils.isNotEmpty(eneryIdList),SysEnergy::getEnersno,eneryIdList);
        final List<SysEnergy> sysEnergies = sysEnergyMapper.selectList(queryWrapper);
        final Map<String, Object> energyCoefficientMap = sysEnergies.stream().collect(Collectors.toMap(SysEnergy::getEnersno, SysEnergy::getCoefficient));
        final Map<String, BigDecimal> energyCoefficientMap = sysEnergies.stream().collect(Collectors.toMap(SysEnergy::getEnersno, SysEnergy::getCoefficient));
        final Map<String, String> indexIdEnergyIdMap = new HashMap<>();
        nodeIndexInforList.forEach(n->{
            final String indexId = n.getIndexId();
@@ -1063,7 +1063,7 @@
                    final String indexId = dataItem.getIndexId();
                    final String energyId = indexIdEnergyIdMap.get(indexId);
                    final BigDecimal coefficient = (BigDecimal) energyCoefficientMap.get(energyId);
                    final BigDecimal coefficient = energyCoefficientMap.get(energyId);
                    if(coefficient == null){
                        throw new RuntimeException("能源类型" + energyId + "没有配置折标系数,无法计算");
                    }
zhitan-system/src/main/java/com/zhitan/costmanagement/domain/CostElectricityInput.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
package com.zhitan.costmanagement.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.zhitan.common.core.domain.BaseEntity;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.zhitan.common.annotation.Excel;
import java.math.BigDecimal;
/**
 * ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘å¯¹è±¡ cost_electricity_Input
 *
 * @author ZhiTan
 * @date 2024-11-08
 */
@Data
@TableName("cost_electricity_Input")
public class CostElectricityInput extends BaseEntity {
    private static final long serialVersionUID = 1L;
    /** $column.columnComment */
    private String id;
    /** æ—¶é—´ç±»åž‹å­—典值timeType */
    @Excel(name = "时间类型字典值timeType")
    private String type;
    /** ç”µé‡ */
    @Excel(name = "电量")
    private BigDecimal electricityNum;
    /** æŸ¥è¯¢æ—¶é—´ */
    @Excel(name = "查询时间")
    private String time;
    /** ç”µè´¹ */
    @Excel(name = "电费")
    private BigDecimal electricityFee;
    /** åŠŸçŽ‡å› æ•° */
    @Excel(name = "功率因数")
    private BigDecimal powerFactor;
    /** å°–时段用电量 */
    @Excel(name = "尖时段用电量")
    private BigDecimal sharpElectricity;
    /** å³°æ—¶æ®µç”¨ç”µé‡ */
    @Excel(name = "峰时段用电量")
    private BigDecimal peakElectricity;
    /** å¹³æ—¶æ®µç”¨ç”µé‡ */
    @Excel(name = "平时段用电量")
    private BigDecimal flatElectricity;
    /** è°·æ—¶æ®µç”¨ç”µé‡ */
    @Excel(name = "谷时段用电量")
    private BigDecimal valleyElectricity;
}
zhitan-system/src/main/java/com/zhitan/costmanagement/domain/CostPriceRelevancy.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,51 @@
package com.zhitan.costmanagement.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.zhitan.common.core.domain.BaseEntity;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.zhitan.common.annotation.Excel;
/**
 * å•价关联对象 cost_price_relevancy
 *
 * @author ZhiTan
 * @date 2024-11-09
 */
@TableName("cost_price_relevancy")
@Data
public class CostPriceRelevancy extends BaseEntity {
    private static final long serialVersionUID = 1L;
    /** $column.columnComment */
    private String id;
    /** ç”¨èƒ½å•位 */
    @Excel(name = "用能单位")
    private String nodeId;
    /** å•ä»·ç­–ç•¥id */
    @Excel(name = "单价策略id")
    private String tacticsId;
    /** èƒ½æºå“ç§ */
    @Excel(name = "能源品种")
    private Integer energyType;
    /** æœ‰æ•ˆæœŸå¼€å§‹æ—¥æœŸ */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "有效期开始日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date effectiveBeginTime;
    /** æœ‰æ•ˆæœŸç»“束日期 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "有效期结束日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date effectiveEndTime;
}
zhitan-system/src/main/java/com/zhitan/costmanagement/domain/CostPriceTactics.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
package com.zhitan.costmanagement.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.zhitan.common.core.domain.BaseEntity;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.zhitan.common.annotation.Excel;
/**
 * æˆæœ¬ç­–略对象 cost_price_tactics
 *
 * @author ZhiTan
 * @date 2024-11-08
 */
@TableName("cost_price_tactics")
@Data
public class CostPriceTactics extends BaseEntity {
    private static final long serialVersionUID = 1L;
    /** $column.columnComment */
    private String id;
    /** æ˜¯å¦é˜¶æ¢¯ä»·æ ¼0否1是 */
    @Excel(name = "是否阶梯价格0否1是")
    private String type;
    /** ç­–略编码 */
    @Excel(name = "策略编码")
    private String tacticsNumber;
    /** ç­–略名称 */
    @Excel(name = "策略名称")
    private String tacticsName;
    /** èƒ½æºå“ç§ */
    @Excel(name = "能源品种")
    private Integer energyType;
}
zhitan-system/src/main/java/com/zhitan/costmanagement/domain/CostPriceTacticsItem.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,57 @@
package com.zhitan.costmanagement.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.zhitan.common.core.domain.BaseEntity;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.zhitan.common.annotation.Excel;
import java.math.BigDecimal;
/**
 * ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘å¯¹è±¡ cost_price_tactics_item
 *
 * @author ZhiTan
 * @date 2024-11-08
 */
@TableName("cost_price_tactics_item")
@Data
public class CostPriceTacticsItem extends BaseEntity {
    private static final long serialVersionUID = 1L;
    /** $column.columnComment */
    private String id;
    /** èŒƒå›´ç±»åž‹å­—典值cost_range_type */
    @Excel(name = "范围类型字典值cost_range_type")
    private String rangeType;
    /** ç­–略名称 */
    @Excel(name = "策略名称")
    private String tacticsNumber;
    /** å…³è”ç­–ç•¥id */
    @Excel(name = "关联策略id")
    private String tacticsId;
    /** å­—典值spikes_and_valleys */
    @Excel(name = "字典值spikes_and_valleys")
    private String electricityType;
    /** åŒºé—´èŒƒå›´æœ€å°å€¼ */
    @Excel(name = "区间范围最小值")
    private String slotsMin;
    /** åŒºé—´èŒƒå›´æœ€å¤§å€¼ */
    @Excel(name = "区间范围最大值")
    private String slotsMax;
    /** å•ä»· */
    @Excel(name = "单价")
    private BigDecimal price;
}
zhitan-system/src/main/java/com/zhitan/costmanagement/domain/vo/CostPriceRelevancyVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.zhitan.costmanagement.domain.vo;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.zhitan.common.annotation.Excel;
import com.zhitan.common.core.domain.BaseEntity;
import com.zhitan.costmanagement.domain.CostPriceRelevancy;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
 * å•价关联对象 cost_price_relevancy
 *
 * @author ZhiTan
 * @date 2024-11-09
 */
@Data
public class CostPriceRelevancyVo extends CostPriceRelevancy {
    private BigDecimal price;
    private String electricityType;
}
zhitan-system/src/main/java/com/zhitan/costmanagement/domain/vo/CostPriceTacticsVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.zhitan.costmanagement.domain.vo;
import com.baomidou.mybatisplus.annotation.TableName;
import com.zhitan.common.annotation.Excel;
import com.zhitan.common.core.domain.BaseEntity;
import com.zhitan.costmanagement.domain.CostPriceTactics;
import com.zhitan.costmanagement.domain.CostPriceTacticsItem;
import com.zhitan.spikesandvalleys.domain.SpikesAndValleysItem;
import lombok.Data;
import java.util.List;
/**
 * æˆæœ¬ç­–略对象 vo
 *
 *
 */
@Data
public class CostPriceTacticsVo extends CostPriceTactics {
    List<CostPriceTacticsItem> itemList;
}
zhitan-system/src/main/java/com/zhitan/costmanagement/domain/vo/DeviationAnalysisDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,50 @@
package com.zhitan.costmanagement.domain.vo;
import com.zhitan.common.enums.TimeType;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
 * å°–峰平谷数据列表实体类 electricityDataItem
 *
 * @author ruoyi
 * @date 2024-06-19
 */
@Data
public class DeviationAnalysisDTO {
    /**
     * æ¨¡åž‹ç¼–号
     */
    @ApiModelProperty(value = "模型编号")
    @NotBlank(message = "模型编号不能为空!")
    private String modelCode;
    /**
     * èŠ‚ç‚¹id
     */
    @ApiModelProperty(value = "节点id")
    @NotBlank(message = "节点id不能为空!")
    private String nodeId;
    /**
     * æ—¶é—´ç±»åž‹
     */
    @ApiModelProperty(value = "时间类型")
    @NotBlank(message = "时间类型不能为空!")
    private String timeType;
    private String date;
}
zhitan-system/src/main/java/com/zhitan/costmanagement/domain/vo/ElectricityDataOut.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.zhitan.costmanagement.domain.vo;
import lombok.Data;
/**
 * åå·®åˆ†æžè¿”回对象
 *
 * @author ZhiTan
 * @date 2024-11-08
 */
@Data
public class ElectricityDataOut {
}
zhitan-system/src/main/java/com/zhitan/costmanagement/domain/vo/ElectricityDataOutItem.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,54 @@
package com.zhitan.costmanagement.domain.vo;
import com.zhitan.common.annotation.Excel;
import lombok.Data;
import java.math.BigDecimal;
/**
 * åå·®åˆ†æžè¿”回对象
 *
 * @author ZhiTan
 * @date 2024-11-08
 */
@Data
public class ElectricityDataOutItem {
    private BigDecimal electricityNum=BigDecimal.ZERO;
    private BigDecimal electricityFee=BigDecimal.ZERO;
    private BigDecimal powerFactor=BigDecimal.ZERO;
    private BigDecimal electricityNumLast=BigDecimal.ZERO;
    private BigDecimal electricityFeeLast=BigDecimal.ZERO;
    private BigDecimal powerFactorLast=BigDecimal.ZERO;
    private BigDecimal electricityNumYoy=BigDecimal.ZERO;
    private BigDecimal electricityFeeYoy=BigDecimal.ZERO;
    private BigDecimal powerFactorYoy=BigDecimal.ZERO;
    private BigDecimal electricityNumQoq=BigDecimal.ZERO;
    private BigDecimal electricityFeeQoq=BigDecimal.ZERO;
    private BigDecimal powerFactorQoq=BigDecimal.ZERO;
    /** å°–时段用电量 */
    private BigDecimal sharpElectricity=BigDecimal.ZERO;
    /** å³°æ—¶æ®µç”¨ç”µé‡ */
    private BigDecimal peakElectricity=BigDecimal.ZERO;
    /** å¹³æ—¶æ®µç”¨ç”µé‡ */
    private BigDecimal flatElectricity=BigDecimal.ZERO;
    /** è°·æ—¶æ®µç”¨ç”µé‡ */
    private BigDecimal valleyElectricity=BigDecimal.ZERO;
}
zhitan-system/src/main/java/com/zhitan/costmanagement/domain/vo/ElectricityPriceDateVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.zhitan.costmanagement.domain.vo;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.zhitan.common.annotation.Excel;
import com.zhitan.common.core.domain.BaseEntity;
import com.zhitan.peakvalley.domain.ElectricityPrice;
import com.zhitan.peakvalley.domain.ElectricityPriceDate;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.util.Date;
import java.util.List;
/**
 * å°–峰平谷电价时间段对象 electricity_price_date
 *
 * @author ZhiTan
 * @date 2024-10-10
 */
@Data
public class ElectricityPriceDateVo extends ElectricityPriceDate {
   List<ElectricityPrice>itemList;
}
zhitan-system/src/main/java/com/zhitan/costmanagement/domain/vo/StatisticsData.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.zhitan.costmanagement.domain.vo;
import com.baomidou.mybatisplus.annotation.TableName;
import com.zhitan.common.annotation.Excel;
import com.zhitan.common.core.domain.BaseEntity;
import lombok.Data;
import java.math.BigDecimal;
/**
 * åå·®åˆ†æžè¿”回对象
 *
 * @author ZhiTan
 * @date 2024-11-08
 */
@Data
public class StatisticsData {
}
zhitan-system/src/main/java/com/zhitan/costmanagement/domain/vo/StatisticsDataOutItem.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,84 @@
package com.zhitan.costmanagement.domain.vo;
import com.zhitan.common.annotation.Excel;
import lombok.Data;
import lombok.Value;
import org.springframework.boot.context.properties.bind.DefaultValue;
import java.math.BigDecimal;
/**
 * åå·®åˆ†æžè¿”回对象
 *
 * @author ZhiTan
 * @date 2024-11-08
 */
@Data
public class StatisticsDataOutItem {
    private BigDecimal electricityNum=BigDecimal.ZERO;
    private BigDecimal electricityFee=BigDecimal.ZERO;
    private BigDecimal powerFactor=BigDecimal.ZERO;
    private BigDecimal electricityNumLast=BigDecimal.ZERO;
    private BigDecimal electricityFeeLast=BigDecimal.ZERO;
    private BigDecimal powerFactorLast=BigDecimal.ZERO;
    private BigDecimal electricityNumYoy=BigDecimal.ZERO;
    private BigDecimal electricityFeeYoy=BigDecimal.ZERO;
    private BigDecimal powerFactorYoy=BigDecimal.ZERO;
    private BigDecimal electricityNumQoq=BigDecimal.ZERO;
    private BigDecimal electricityFeeQoq=BigDecimal.ZERO;
    private BigDecimal powerFactorQoq=BigDecimal.ZERO;
    /** å°–时段用电量 */
    private BigDecimal sharpElectricity=BigDecimal.ZERO;
    /** å³°æ—¶æ®µç”¨ç”µé‡ */
    private BigDecimal peakElectricity=BigDecimal.ZERO;
    /** å¹³æ—¶æ®µç”¨ç”µé‡ */
    private BigDecimal flatElectricity=BigDecimal.ZERO;
    /** è°·æ—¶æ®µç”¨ç”µé‡ */
    private BigDecimal valleyElectricity=BigDecimal.ZERO;
    /** å°–时段用电量差值 */
    private BigDecimal sharpElectricityDiff=BigDecimal.ZERO;
    /** å³°æ—¶æ®µç”¨ç”µé‡å·®å€¼ */
    private BigDecimal peakElectricityDiff=BigDecimal.ZERO;
    /** å¹³æ—¶æ®µç”¨ç”µé‡å·®å€¼ */
    private BigDecimal flatElectricityDiff=BigDecimal.ZERO;
    /** è°·æ—¶æ®µç”¨ç”µé‡å·®å€¼ */
    private BigDecimal valleyElectricityDiff=BigDecimal.ZERO;
    private BigDecimal electricityNumDiff=BigDecimal.ZERO;
    private BigDecimal electricityFeeDiff=BigDecimal.ZERO;
    private BigDecimal powerFactorDiff=BigDecimal.ZERO;
}
zhitan-system/src/main/java/com/zhitan/costmanagement/domain/vo/StatisticsInfoListOut.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,47 @@
package com.zhitan.costmanagement.domain.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
 * åå·®åˆ†æžè¿”回对象
 *
 * @author ZhiTan
 * @date 2024-11-08
 */
@Data
public class StatisticsInfoListOut {
    private String nodeId;
    private BigDecimal electricityNum;
    private BigDecimal electricityFee;
    /** å°–时段用电量 */
    private BigDecimal sharpElectricity;
    /** å³°æ—¶æ®µç”¨ç”µé‡ */
    private BigDecimal peakElectricity;
    /** å¹³æ—¶æ®µç”¨ç”µé‡ */
    private BigDecimal flatElectricity;
    /** è°·æ—¶æ®µç”¨ç”µé‡ */
    private BigDecimal valleyElectricity;
    private BigDecimal electricityNumYoy;
    private BigDecimal electricityNumQoq;
    private BigDecimal electricityNumRadio;
    List<StatisticsInfoListOut>children;
}
zhitan-system/src/main/java/com/zhitan/costmanagement/mapper/CostElectricityInputMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
package com.zhitan.costmanagement.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zhitan.costmanagement.domain.CostElectricityInput;
/**
 * ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘Mapper接口
 *
 * @author ZhiTan
 * @date 2024-11-08
 */
public interface CostElectricityInputMapper extends BaseMapper<CostElectricityInput> {
    /**
     * æŸ¥è¯¢ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param id ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘ä¸»é”®
     * @return ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     */
    public CostElectricityInput selectCostElectricityInputById(String id);
    /**
     * æŸ¥è¯¢ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘åˆ—è¡¨
     *
     * @param costElectricityInput ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     * @return ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘é›†åˆ
     */
    public List<CostElectricityInput> selectCostElectricityInputList(CostElectricityInput costElectricityInput);
    /**
     * æ–°å¢žã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param costElectricityInput ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     * @return ç»“æžœ
     */
    public int insertCostElectricityInput(CostElectricityInput costElectricityInput);
    /**
     * ä¿®æ”¹ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param costElectricityInput ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     * @return ç»“æžœ
     */
    public int updateCostElectricityInput(CostElectricityInput costElectricityInput);
    /**
     * åˆ é™¤ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param id ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘ä¸»é”®
     * @return ç»“æžœ
     */
    public int deleteCostElectricityInputById(String id);
    /**
     * æ‰¹é‡åˆ é™¤ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param ids éœ€è¦åˆ é™¤çš„æ•°æ®ä¸»é”®é›†åˆ
     * @return ç»“æžœ
     */
    public int deleteCostElectricityInputByIds(String[] ids);
}
zhitan-system/src/main/java/com/zhitan/costmanagement/mapper/CostPriceRelevancyMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,75 @@
package com.zhitan.costmanagement.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zhitan.costmanagement.domain.CostPriceRelevancy;
import com.zhitan.costmanagement.domain.vo.CostPriceRelevancyVo;
import org.apache.ibatis.annotations.Param;
/**
 * å•价关联Mapper接口
 *
 * @author ZhiTan
 * @date 2024-11-09
 */
public interface CostPriceRelevancyMapper extends BaseMapper<CostPriceRelevancy> {
    /**
     * æŸ¥è¯¢å•价关联
     *
     * @param id å•价关联主键
     * @return å•价关联
     */
    public CostPriceRelevancy selectCostPriceRelevancyById(String id);
    /**
     * æŸ¥è¯¢å•价关联列表
     *
     * @param costPriceRelevancy å•价关联
     * @return å•价关联集合
     */
    public List<CostPriceRelevancy> selectCostPriceRelevancyList(CostPriceRelevancy costPriceRelevancy);
    /**
     * æ–°å¢žå•价关联
     *
     * @param costPriceRelevancy å•价关联
     * @return ç»“æžœ
     */
    public int insertCostPriceRelevancy(CostPriceRelevancy costPriceRelevancy);
    /**
     * ä¿®æ”¹å•价关联
     *
     * @param costPriceRelevancy å•价关联
     * @return ç»“æžœ
     */
    public int updateCostPriceRelevancy(CostPriceRelevancy costPriceRelevancy);
    /**
     * åˆ é™¤å•价关联
     *
     * @param id å•价关联主键
     * @return ç»“æžœ
     */
    public int deleteCostPriceRelevancyById(String id);
    /**
     * æ‰¹é‡åˆ é™¤å•价关联
     *
     * @param ids éœ€è¦åˆ é™¤çš„æ•°æ®ä¸»é”®é›†åˆ
     * @return ç»“æžœ
     */
    public int deleteCostPriceRelevancyByIds(String[] ids);
    /**
     * æŸ¥è¯¢èŒƒå›´å†…唯一的单价策略关联信息
     *
     */
    public CostPriceRelevancyVo selectCostPriceRelevancyByNodeId(@Param("nodeId") String nodeId,
                                                                 @Param("elType")String elType);
}
zhitan-system/src/main/java/com/zhitan/costmanagement/mapper/CostPriceTacticsItemMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
package com.zhitan.costmanagement.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zhitan.costmanagement.domain.CostPriceTacticsItem;
/**
 * ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘Mapper接口
 *
 * @author ZhiTan
 * @date 2024-11-08
 */
public interface CostPriceTacticsItemMapper extends BaseMapper<CostPriceTacticsItem> {
    /**
     * æŸ¥è¯¢ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param id ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘ä¸»é”®
     * @return ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     */
    public CostPriceTacticsItem selectCostPriceTacticsItemById(String id);
    /**
     * æŸ¥è¯¢ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘åˆ—è¡¨
     *
     * @param costPriceTacticsItem ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     * @return ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘é›†åˆ
     */
    public List<CostPriceTacticsItem> selectCostPriceTacticsItemList(CostPriceTacticsItem costPriceTacticsItem);
    /**
     * æ–°å¢žã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param costPriceTacticsItem ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     * @return ç»“æžœ
     */
    public int insertCostPriceTacticsItem(CostPriceTacticsItem costPriceTacticsItem);
    /**
     * ä¿®æ”¹ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param costPriceTacticsItem ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     * @return ç»“æžœ
     */
    public int updateCostPriceTacticsItem(CostPriceTacticsItem costPriceTacticsItem);
    /**
     * åˆ é™¤ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param id ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘ä¸»é”®
     * @return ç»“æžœ
     */
    public int deleteCostPriceTacticsItemById(String id);
    /**
     * æ‰¹é‡åˆ é™¤ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param ids éœ€è¦åˆ é™¤çš„æ•°æ®ä¸»é”®é›†åˆ
     * @return ç»“æžœ
     */
    public int deleteCostPriceTacticsItemByIds(String[] ids);
}
zhitan-system/src/main/java/com/zhitan/costmanagement/mapper/CostPriceTacticsMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
package com.zhitan.costmanagement.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zhitan.costmanagement.domain.CostPriceTactics;
import com.zhitan.costmanagement.domain.vo.CostPriceTacticsVo;
/**
 * æˆæœ¬ç­–ç•¥Mapper接口
 *
 * @author ZhiTan
 * @date 2024-11-08
 */
public interface CostPriceTacticsMapper extends BaseMapper<CostPriceTactics> {
    /**
     * æŸ¥è¯¢æˆæœ¬ç­–ç•¥
     *
     * @param id æˆæœ¬ç­–略主键
     * @return æˆæœ¬ç­–ç•¥
     */
    public CostPriceTactics selectCostPriceTacticsById(String id);
    /**
     * æŸ¥è¯¢æˆæœ¬ç­–略列表
     *
     * @param costPriceTactics æˆæœ¬ç­–ç•¥
     * @return æˆæœ¬ç­–略集合
     */
    public List<CostPriceTactics> selectCostPriceTacticsList(CostPriceTactics costPriceTactics);
    /**
     * æ–°å¢žæˆæœ¬ç­–ç•¥
     *
     * @param costPriceTactics æˆæœ¬ç­–ç•¥
     * @return ç»“æžœ
     */
    public int insertCostPriceTactics(CostPriceTactics costPriceTactics);
    /**
     * ä¿®æ”¹æˆæœ¬ç­–ç•¥
     *
     * @param costPriceTactics æˆæœ¬ç­–ç•¥
     * @return ç»“æžœ
     */
    public int updateCostPriceTactics(CostPriceTactics costPriceTactics);
    /**
     * åˆ é™¤æˆæœ¬ç­–ç•¥
     *
     * @param id æˆæœ¬ç­–略主键
     * @return ç»“æžœ
     */
    public int deleteCostPriceTacticsById(String id);
    /**
     * æ‰¹é‡åˆ é™¤æˆæœ¬ç­–ç•¥
     *
     * @param ids éœ€è¦åˆ é™¤çš„æ•°æ®ä¸»é”®é›†åˆ
     * @return ç»“æžœ
     */
    public int deleteCostPriceTacticsByIds(String[] ids);
    /**
     * æŸ¥è¯¢æ‰€æœ‰å•价策略列表
     *
     * @return æˆæœ¬ç­–略集合
     */
    public List<CostPriceTacticsVo> selectCostPriceTacticsListAll();
}
zhitan-system/src/main/java/com/zhitan/costmanagement/service/DeviationAnalysisService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
package com.zhitan.costmanagement.service;
import com.zhitan.costmanagement.domain.vo.DeviationAnalysisDTO;
import com.zhitan.costmanagement.domain.vo.ElectricityDataOutItem;
import com.zhitan.costmanagement.domain.vo.StatisticsDataOutItem;
import com.zhitan.costmanagement.domain.vo.StatisticsInfoListOut;
import java.text.ParseException;
import java.util.List;
import java.util.Map;
/**
 * æˆæœ¬ç­–ç•¥Service接口
 *
 * @author ZhiTan
 * @date 2024-11-08
 */
public interface DeviationAnalysisService  {
    StatisticsDataOutItem getStatisticsDataItem(DeviationAnalysisDTO dto) throws ParseException;
    ElectricityDataOutItem getElectricityDataItem(DeviationAnalysisDTO dto) throws ParseException;
    StatisticsInfoListOut getStatisticsInfoList(DeviationAnalysisDTO dto)throws ParseException;
    List<StatisticsInfoListOut> getStatisticsInfoNewList(DeviationAnalysisDTO dto)throws ParseException;
    StatisticsInfoListOut getStatisticsInfoList2(DeviationAnalysisDTO dto)throws ParseException;
    Map<String,Object>getEcharst(DeviationAnalysisDTO dto)throws ParseException;
}
zhitan-system/src/main/java/com/zhitan/costmanagement/service/ICostElectricityInputService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
package com.zhitan.costmanagement.service;
import java.util.List;
import com.zhitan.costmanagement.domain.CostElectricityInput;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
/**
 * ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘Service接口
 *
 * @author ZhiTan
 * @date 2024-11-08
 */
public interface ICostElectricityInputService extends IService<CostElectricityInput> {
    /**
     * æŸ¥è¯¢ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param id ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘ä¸»é”®
     * @return ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     */
    public CostElectricityInput selectCostElectricityInputById(String id);
    /**
     * æŸ¥è¯¢ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘åˆ—è¡¨
     *
     * @param costElectricityInput ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     * @return ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘é›†åˆ
     */
    public Page<CostElectricityInput> selectCostElectricityInputList(CostElectricityInput costElectricityInput,Long pageNum, Long pageSize);
    /**
     * æ–°å¢žã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param costElectricityInput ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     * @return ç»“æžœ
     */
    public int insertCostElectricityInput(CostElectricityInput costElectricityInput) throws Exception;
    /**
     * ä¿®æ”¹ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param costElectricityInput ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     * @return ç»“æžœ
     */
    public int updateCostElectricityInput(CostElectricityInput costElectricityInput) throws Exception;
    /**
     * æ‰¹é‡åˆ é™¤ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param ids éœ€è¦åˆ é™¤çš„【请填写功能名称】主键集合
     * @return ç»“æžœ
     */
    public int deleteCostElectricityInputByIds(String[] ids);
    /**
     * åˆ é™¤ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘ä¿¡æ¯
     *
     * @param id ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘ä¸»é”®
     * @return ç»“æžœ
     */
    public int deleteCostElectricityInputById(String id);
}
zhitan-system/src/main/java/com/zhitan/costmanagement/service/ICostPriceRelevancyService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
package com.zhitan.costmanagement.service;
import java.util.List;
import com.zhitan.costmanagement.domain.CostPriceRelevancy;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
/**
 * å•价关联Service接口
 *
 * @author ZhiTan
 * @date 2024-11-09
 */
public interface ICostPriceRelevancyService extends IService<CostPriceRelevancy> {
    /**
     * æŸ¥è¯¢å•价关联
     *
     * @param id å•价关联主键
     * @return å•价关联
     */
    public CostPriceRelevancy selectCostPriceRelevancyById(String id);
    /**
     * æŸ¥è¯¢å•价关联列表
     *
     * @param costPriceRelevancy å•价关联
     * @return å•价关联集合
     */
    public Page<CostPriceRelevancy> selectCostPriceRelevancyList(CostPriceRelevancy costPriceRelevancy,Long pageNum, Long pageSize);
    /**
     * æ–°å¢žå•价关联
     *
     * @param costPriceRelevancy å•价关联
     * @return ç»“æžœ
     */
    public int insertCostPriceRelevancy(CostPriceRelevancy costPriceRelevancy);
    /**
     * ä¿®æ”¹å•价关联
     *
     * @param costPriceRelevancy å•价关联
     * @return ç»“æžœ
     */
    public int updateCostPriceRelevancy(CostPriceRelevancy costPriceRelevancy);
    /**
     * æ‰¹é‡åˆ é™¤å•价关联
     *
     * @param ids éœ€è¦åˆ é™¤çš„单价关联主键集合
     * @return ç»“æžœ
     */
    public int deleteCostPriceRelevancyByIds(String[] ids);
    /**
     * åˆ é™¤å•价关联信息
     *
     * @param id å•价关联主键
     * @return ç»“æžœ
     */
    public int deleteCostPriceRelevancyById(String id);
}
zhitan-system/src/main/java/com/zhitan/costmanagement/service/ICostPriceTacticsItemService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
package com.zhitan.costmanagement.service;
import java.util.List;
import com.zhitan.costmanagement.domain.CostPriceTacticsItem;
import com.baomidou.mybatisplus.extension.service.IService;
/**
 * ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘Service接口
 *
 * @author ZhiTan
 * @date 2024-11-08
 */
public interface ICostPriceTacticsItemService extends IService<CostPriceTacticsItem> {
    /**
     * æŸ¥è¯¢ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param id ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘ä¸»é”®
     * @return ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     */
    public CostPriceTacticsItem selectCostPriceTacticsItemById(String id);
    /**
     * æŸ¥è¯¢ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘åˆ—è¡¨
     *
     * @param costPriceTacticsItem ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     * @return ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘é›†åˆ
     */
    public List<CostPriceTacticsItem> selectCostPriceTacticsItemList(CostPriceTacticsItem costPriceTacticsItem);
    /**
     * æ–°å¢žã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param costPriceTacticsItem ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     * @return ç»“æžœ
     */
    public int insertCostPriceTacticsItem(CostPriceTacticsItem costPriceTacticsItem);
    /**
     * ä¿®æ”¹ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param costPriceTacticsItem ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     * @return ç»“æžœ
     */
    public int updateCostPriceTacticsItem(CostPriceTacticsItem costPriceTacticsItem);
    /**
     * æ‰¹é‡åˆ é™¤ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param ids éœ€è¦åˆ é™¤çš„【请填写功能名称】主键集合
     * @return ç»“æžœ
     */
    public int deleteCostPriceTacticsItemByIds(String[] ids);
    /**
     * åˆ é™¤ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘ä¿¡æ¯
     *
     * @param id ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘ä¸»é”®
     * @return ç»“æžœ
     */
    public int deleteCostPriceTacticsItemById(String id);
}
zhitan-system/src/main/java/com/zhitan/costmanagement/service/ICostPriceTacticsService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,71 @@
package com.zhitan.costmanagement.service;
import java.util.List;
import com.zhitan.costmanagement.domain.CostPriceTactics;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zhitan.costmanagement.domain.vo.CostPriceTacticsVo;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
/**
 * æˆæœ¬ç­–ç•¥Service接口
 *
 * @author ZhiTan
 * @date 2024-11-08
 */
public interface ICostPriceTacticsService extends IService<CostPriceTactics> {
    /**
     * æŸ¥è¯¢æˆæœ¬ç­–ç•¥
     *
     * @param id æˆæœ¬ç­–略主键
     * @return æˆæœ¬ç­–ç•¥
     */
    public CostPriceTactics selectCostPriceTacticsById(String id);
    /**
     * æŸ¥è¯¢æˆæœ¬ç­–略列表
     *
     * @param costPriceTactics æˆæœ¬ç­–ç•¥
     * @return æˆæœ¬ç­–略集合
     */
    public Page<CostPriceTacticsVo> selectCostPriceTacticsList(CostPriceTactics costPriceTactics, Long pageNum, Long pageSize);
    /**
     * æŸ¥è¯¢æ‰€æœ‰å•价策略列表
     *
     * @return æˆæœ¬ç­–略集合
     */
    public List<CostPriceTacticsVo> selectCostPriceTacticsListAll();
    /**
     * æ–°å¢žæˆæœ¬ç­–ç•¥
     *
     * @param costPriceTacticsVo æˆæœ¬ç­–ç•¥
     * @return ç»“æžœ
     */
    public int insertCostPriceTactics(CostPriceTacticsVo costPriceTacticsVo) throws Exception;
    /**
     * ä¿®æ”¹æˆæœ¬ç­–ç•¥
     *
     * @param costPriceTacticsVo æˆæœ¬ç­–ç•¥
     * @return ç»“æžœ
     */
    public int updateCostPriceTactics(CostPriceTacticsVo costPriceTacticsVo);
    /**
     * æ‰¹é‡åˆ é™¤æˆæœ¬ç­–ç•¥
     *
     * @param ids éœ€è¦åˆ é™¤çš„æˆæœ¬ç­–略主键集合
     * @return ç»“æžœ
     */
    public int deleteCostPriceTacticsByIds(String[] ids);
    /**
     * åˆ é™¤æˆæœ¬ç­–略信息
     *
     * @param id æˆæœ¬ç­–略主键
     * @return ç»“æžœ
     */
    public int deleteCostPriceTacticsById(String id);
}
zhitan-system/src/main/java/com/zhitan/costmanagement/service/impl/CostElectricityInputServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,126 @@
package com.zhitan.costmanagement.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.List;
import java.util.UUID;
import com.zhitan.common.utils.DateUtils;
import com.zhitan.common.utils.StringUtils;
import com.zhitan.costmanagement.domain.CostPriceTactics;
import com.zhitan.spikesandvalleys.domain.SpikesAndValleysItem;
import com.zhitan.spikesandvalleys.domain.SpikesAndValleysScheme;
import com.zhitan.spikesandvalleys.domain.vo.SpikesAndValleysSchemeVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.zhitan.costmanagement.mapper.CostElectricityInputMapper;
import com.zhitan.costmanagement.domain.CostElectricityInput;
import com.zhitan.costmanagement.service.ICostElectricityInputService;
import org.springframework.transaction.annotation.Transactional;
/**
 * ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘Service业务层处理
 *
 * @author ZhiTan
 * @date 2024-11-08
 */
@Service
public class CostElectricityInputServiceImpl extends ServiceImpl<CostElectricityInputMapper, CostElectricityInput> implements ICostElectricityInputService {
    @Autowired
    private CostElectricityInputMapper costElectricityInputMapper;
    /**
     * æŸ¥è¯¢ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param id ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘ä¸»é”®
     * @return ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     */
    @Override
    public CostElectricityInput selectCostElectricityInputById(String id) {
        return costElectricityInputMapper.selectCostElectricityInputById(id);
    }
    /**
     * æŸ¥è¯¢ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘åˆ—è¡¨
     *
     * @param costElectricityInput ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     * @return ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     */
    @Override
    public Page<CostElectricityInput> selectCostElectricityInputList(CostElectricityInput costElectricityInput,Long pageNum, Long pageSize) {
        LambdaQueryWrapper<CostElectricityInput> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(StringUtils.isNotEmpty(costElectricityInput.getTime()),CostElectricityInput::getTime,costElectricityInput.getTime());
        queryWrapper.eq(StringUtils.isNotEmpty(costElectricityInput.getType()),CostElectricityInput::getType,costElectricityInput.getType());
        queryWrapper.orderByDesc(CostElectricityInput::getCreateTime);
        Page<CostElectricityInput> page = costElectricityInputMapper.selectPage(new Page<>(pageNum,pageSize),queryWrapper);
        return page;
    }
    /**
     * æ–°å¢žã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param costElectricityInput ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     * @return ç»“æžœ
     */
    @Override
    @Transactional
    public int insertCostElectricityInput(CostElectricityInput costElectricityInput) throws Exception {
        costElectricityInput.setCreateTime(DateUtils.getNowDate());
        costElectricityInput.setId(UUID.randomUUID().toString());
        CostElectricityInput search = costElectricityInputMapper.selectOne(new QueryWrapper<CostElectricityInput>().
                eq("type",costElectricityInput.getType()).eq("time",costElectricityInput.getTime()));
        if (search!=null){
            throw new Exception("该时间段已维护电量信息!");
        }
        return costElectricityInputMapper.insertCostElectricityInput(costElectricityInput);
    }
    /**
     * ä¿®æ”¹ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param costElectricityInput ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     * @return ç»“æžœ
     */
    @Override
    @Transactional
    public int updateCostElectricityInput(CostElectricityInput costElectricityInput) throws Exception {
        costElectricityInput.setUpdateTime(DateUtils.getNowDate());
        CostElectricityInput search = costElectricityInputMapper.selectOne(new QueryWrapper<CostElectricityInput>().
                eq("type",costElectricityInput.getType()).eq("time",costElectricityInput.getTime()));
        if (search!=null){
            throw new Exception("该时间段已维护电量信息!");
        }
        return costElectricityInputMapper.updateCostElectricityInput(costElectricityInput);
    }
    /**
     * æ‰¹é‡åˆ é™¤ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param ids éœ€è¦åˆ é™¤çš„【请填写功能名称】主键
     * @return ç»“æžœ
     */
    @Override
    @Transactional
    public int deleteCostElectricityInputByIds(String[] ids) {
        return costElectricityInputMapper.deleteCostElectricityInputByIds(ids);
    }
    /**
     * åˆ é™¤ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘ä¿¡æ¯
     *
     * @param id ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘ä¸»é”®
     * @return ç»“æžœ
     */
    @Override
    @Transactional
    public int deleteCostElectricityInputById(String id) {
        return costElectricityInputMapper.deleteCostElectricityInputById(id);
    }
}
zhitan-system/src/main/java/com/zhitan/costmanagement/service/impl/CostPriceRelevancyServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,105 @@
package com.zhitan.costmanagement.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.List;
import java.util.UUID;
import com.zhitan.common.utils.DateUtils;
import com.zhitan.common.utils.StringUtils;
import com.zhitan.costmanagement.domain.CostElectricityInput;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.zhitan.costmanagement.mapper.CostPriceRelevancyMapper;
import com.zhitan.costmanagement.domain.CostPriceRelevancy;
import com.zhitan.costmanagement.service.ICostPriceRelevancyService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
/**
 * å•价关联Service业务层处理
 *
 * @author ZhiTan
 * @date 2024-11-09
 */
@Service
public class CostPriceRelevancyServiceImpl extends ServiceImpl<CostPriceRelevancyMapper, CostPriceRelevancy> implements ICostPriceRelevancyService {
    @Autowired
    private CostPriceRelevancyMapper costPriceRelevancyMapper;
    /**
     * æŸ¥è¯¢å•价关联
     *
     * @param id å•价关联主键
     * @return å•价关联
     */
    @Override
    public CostPriceRelevancy selectCostPriceRelevancyById(String id) {
        return costPriceRelevancyMapper.selectCostPriceRelevancyById(id);
    }
    /**
     * æŸ¥è¯¢å•价关联列表
     *
     * @param costPriceRelevancy å•价关联
     * @return å•价关联
     */
    @Override
    public Page<CostPriceRelevancy> selectCostPriceRelevancyList(CostPriceRelevancy costPriceRelevancy,Long pageNum, Long pageSize) {
        LambdaQueryWrapper<CostPriceRelevancy> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(StringUtils.isNotEmpty(costPriceRelevancy.getNodeId()),CostPriceRelevancy::getNodeId,costPriceRelevancy.getNodeId());
      if(costPriceRelevancy.getEnergyType()!=null){
          queryWrapper.eq(StringUtils.isNotEmpty(costPriceRelevancy.getEnergyType().toString()),CostPriceRelevancy::getEnergyType,costPriceRelevancy.getEnergyType());
      }
         queryWrapper.orderByDesc(CostPriceRelevancy::getCreateTime);
        Page<CostPriceRelevancy> page = costPriceRelevancyMapper.selectPage(new Page<>(pageNum,pageSize),queryWrapper);
        return page;
    }
    /**
     * æ–°å¢žå•价关联
     *
     * @param costPriceRelevancy å•价关联
     * @return ç»“æžœ
     */
    @Override
    public int insertCostPriceRelevancy(CostPriceRelevancy costPriceRelevancy) {
        costPriceRelevancy.setCreateTime(DateUtils.getNowDate());
        costPriceRelevancy.setId(UUID.randomUUID().toString());
        return costPriceRelevancyMapper.insertCostPriceRelevancy(costPriceRelevancy);
    }
    /**
     * ä¿®æ”¹å•价关联
     *
     * @param costPriceRelevancy å•价关联
     * @return ç»“æžœ
     */
    @Override
    public int updateCostPriceRelevancy(CostPriceRelevancy costPriceRelevancy) {
        costPriceRelevancy.setUpdateTime(DateUtils.getNowDate());
        return costPriceRelevancyMapper.updateCostPriceRelevancy(costPriceRelevancy);
    }
    /**
     * æ‰¹é‡åˆ é™¤å•价关联
     *
     * @param ids éœ€è¦åˆ é™¤çš„单价关联主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteCostPriceRelevancyByIds(String[] ids) {
        return costPriceRelevancyMapper.deleteCostPriceRelevancyByIds(ids);
    }
    /**
     * åˆ é™¤å•价关联信息
     *
     * @param id å•价关联主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteCostPriceRelevancyById(String id) {
        return costPriceRelevancyMapper.deleteCostPriceRelevancyById(id);
    }
}
zhitan-system/src/main/java/com/zhitan/costmanagement/service/impl/CostPriceTacticsItemServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,90 @@
package com.zhitan.costmanagement.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.List;
        import com.zhitan.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.zhitan.costmanagement.mapper.CostPriceTacticsItemMapper;
import com.zhitan.costmanagement.domain.CostPriceTacticsItem;
import com.zhitan.costmanagement.service.ICostPriceTacticsItemService;
/**
 * ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘Service业务层处理
 *
 * @author ZhiTan
 * @date 2024-11-08
 */
@Service
public class CostPriceTacticsItemServiceImpl extends ServiceImpl<CostPriceTacticsItemMapper, CostPriceTacticsItem> implements ICostPriceTacticsItemService {
    @Autowired
    private CostPriceTacticsItemMapper costPriceTacticsItemMapper;
    /**
     * æŸ¥è¯¢ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param id ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘ä¸»é”®
     * @return ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     */
    @Override
    public CostPriceTacticsItem selectCostPriceTacticsItemById(String id) {
        return costPriceTacticsItemMapper.selectCostPriceTacticsItemById(id);
    }
    /**
     * æŸ¥è¯¢ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘åˆ—è¡¨
     *
     * @param costPriceTacticsItem ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     * @return ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     */
    @Override
    public List<CostPriceTacticsItem> selectCostPriceTacticsItemList(CostPriceTacticsItem costPriceTacticsItem) {
        return costPriceTacticsItemMapper.selectCostPriceTacticsItemList(costPriceTacticsItem);
    }
    /**
     * æ–°å¢žã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param costPriceTacticsItem ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     * @return ç»“æžœ
     */
    @Override
    public int insertCostPriceTacticsItem(CostPriceTacticsItem costPriceTacticsItem) {
        costPriceTacticsItem.setCreateTime(DateUtils.getNowDate());
        return costPriceTacticsItemMapper.insertCostPriceTacticsItem(costPriceTacticsItem);
    }
    /**
     * ä¿®æ”¹ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param costPriceTacticsItem ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     * @return ç»“æžœ
     */
    @Override
    public int updateCostPriceTacticsItem(CostPriceTacticsItem costPriceTacticsItem) {
        costPriceTacticsItem.setUpdateTime(DateUtils.getNowDate());
        return costPriceTacticsItemMapper.updateCostPriceTacticsItem(costPriceTacticsItem);
    }
    /**
     * æ‰¹é‡åˆ é™¤ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param ids éœ€è¦åˆ é™¤çš„【请填写功能名称】主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteCostPriceTacticsItemByIds(String[] ids) {
        return costPriceTacticsItemMapper.deleteCostPriceTacticsItemByIds(ids);
    }
    /**
     * åˆ é™¤ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘ä¿¡æ¯
     *
     * @param id ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘ä¸»é”®
     * @return ç»“æžœ
     */
    @Override
    public int deleteCostPriceTacticsItemById(String id) {
        return costPriceTacticsItemMapper.deleteCostPriceTacticsItemById(id);
    }
}
zhitan-system/src/main/java/com/zhitan/costmanagement/service/impl/CostPriceTacticsServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,201 @@
package com.zhitan.costmanagement.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
import com.zhitan.common.utils.DateUtils;
import com.zhitan.common.utils.StringUtils;
import com.zhitan.costmanagement.domain.CostPriceTacticsItem;
import com.zhitan.costmanagement.domain.vo.CostPriceTacticsVo;
import com.zhitan.costmanagement.mapper.CostPriceTacticsItemMapper;
import com.zhitan.spikesandvalleys.domain.SpikesAndValleysItem;
import com.zhitan.spikesandvalleys.domain.SpikesAndValleysScheme;
import com.zhitan.spikesandvalleys.domain.vo.SpikesAndValleysSchemeVo;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.zhitan.costmanagement.mapper.CostPriceTacticsMapper;
import com.zhitan.costmanagement.domain.CostPriceTactics;
import com.zhitan.costmanagement.service.ICostPriceTacticsService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.transaction.annotation.Transactional;
/**
 * æˆæœ¬ç­–ç•¥Service业务层处理
 *
 * @author ZhiTan
 * @date 2024-11-08
 */
@Service
public class CostPriceTacticsServiceImpl extends ServiceImpl<CostPriceTacticsMapper, CostPriceTactics> implements ICostPriceTacticsService {
    @Autowired
    private CostPriceTacticsMapper costPriceTacticsMapper;
    @Autowired
    private CostPriceTacticsItemMapper costPriceTacticsItemMapper;
    /**
     * æŸ¥è¯¢æˆæœ¬ç­–ç•¥
     *
     * @param id æˆæœ¬ç­–略主键
     * @return æˆæœ¬ç­–ç•¥
     */
    @Override
    public CostPriceTactics selectCostPriceTacticsById(String id) {
        CostPriceTacticsVo result = new CostPriceTacticsVo();
        CostPriceTactics info = costPriceTacticsMapper.selectCostPriceTacticsById(id);
        BeanUtil.copyProperties(info,result);
        LambdaQueryWrapper<CostPriceTacticsItem> queryWrapperItem = new LambdaQueryWrapper<>();
        queryWrapperItem.eq(CostPriceTacticsItem::getTacticsId,id);
        List<CostPriceTacticsItem> itemListOld = costPriceTacticsItemMapper.selectList(queryWrapperItem);
        result.setItemList(itemListOld);
        return result ;
    }
    /**
     * æŸ¥è¯¢æˆæœ¬ç­–略列表
     *
     * @param costPriceTactics æˆæœ¬ç­–ç•¥
     * @return æˆæœ¬ç­–ç•¥
     */
    @Override
    public Page<CostPriceTacticsVo> selectCostPriceTacticsList(CostPriceTactics costPriceTactics, Long pageNum, Long pageSize) {
        LambdaQueryWrapper<CostPriceTactics> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(StringUtils.isNotEmpty(costPriceTactics.getTacticsName()),CostPriceTactics::getTacticsName,costPriceTactics.getTacticsName());
        queryWrapper.like(StringUtils.isNotEmpty(costPriceTactics.getTacticsNumber()),CostPriceTactics::getTacticsNumber,costPriceTactics.getTacticsNumber());
        queryWrapper.eq(StringUtils.isNotEmpty(costPriceTactics.getType()),CostPriceTactics::getType,costPriceTactics.getType());
        queryWrapper.orderByDesc(CostPriceTactics::getCreateTime);
        Page<CostPriceTactics> page = costPriceTacticsMapper.selectPage(new Page<>(pageNum,pageSize),queryWrapper);
        IPage aa =  page.convert(s->{
            CostPriceTacticsVo v = new CostPriceTacticsVo();
            BeanUtil.copyProperties(s, v);
            LambdaQueryWrapper<CostPriceTacticsItem> queryWrapperItem = new LambdaQueryWrapper<>();
            queryWrapperItem.eq(CostPriceTacticsItem::getTacticsId,s.getId());
            List<CostPriceTacticsItem> itemListOld = costPriceTacticsItemMapper.selectList(queryWrapperItem);
            v.setItemList(itemListOld);
            return v;
        });
        return (Page<CostPriceTacticsVo>) aa;
    }
    @Override
    public List<CostPriceTacticsVo> selectCostPriceTacticsListAll() {
        return costPriceTacticsMapper.selectCostPriceTacticsListAll();
    }
    /**
     * æ–°å¢žæˆæœ¬ç­–ç•¥
     *
     * @param costPriceTacticsVo æˆæœ¬ç­–ç•¥
     * @return ç»“æžœ
     */
    @Override
    @Transactional
    public int insertCostPriceTactics(CostPriceTacticsVo costPriceTacticsVo) throws Exception {
        CostPriceTactics search = costPriceTacticsMapper.selectOne(new QueryWrapper<CostPriceTactics>().eq("tactics_number",costPriceTacticsVo.getTacticsNumber()));
        if (search!=null){
            throw new Exception("该策略编码已存在!");
        }
        costPriceTacticsVo.setCreateTime(DateUtils.getNowDate());
        costPriceTacticsVo.setId(UUID.randomUUID().toString());
        CostPriceTactics costPriceTactics = new CostPriceTactics();
        BeanUtil.copyProperties(costPriceTacticsVo,costPriceTactics);
        int result =  costPriceTacticsMapper.insert(costPriceTactics);
        //插入子表
        List<CostPriceTacticsItem> itemList =  costPriceTacticsVo.getItemList();
        itemList.stream().forEach(s->{
            s.setId(UUID.randomUUID().toString());
            s.setCreateTime(DateUtils.getNowDate());
            s.setCreateBy(costPriceTacticsVo.getCreateBy());
            s.setTacticsId(costPriceTacticsVo.getId());
            costPriceTacticsItemMapper.insert(s);
        });
        return result;
    }
    /**
     * ä¿®æ”¹æˆæœ¬ç­–ç•¥
     *
     * @param costPriceTacticsVo æˆæœ¬ç­–ç•¥
     * @return ç»“æžœ
     */
    @Override
    @Transactional
    public int updateCostPriceTactics(CostPriceTacticsVo costPriceTacticsVo) {
        costPriceTacticsVo.setUpdateTime(DateUtils.getNowDate());
        CostPriceTactics costPriceTactics = new CostPriceTactics();
        BeanUtil.copyProperties(costPriceTacticsVo,costPriceTactics);
        int result = costPriceTacticsMapper.updateCostPriceTactics(costPriceTactics);
        //删除子表
        LambdaQueryWrapper<CostPriceTacticsItem> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(CostPriceTacticsItem::getTacticsId,costPriceTactics.getId());
        List<CostPriceTacticsItem> itemListOld = costPriceTacticsItemMapper.selectList(queryWrapper);
        List<String>idList = itemListOld.stream().map(s->s.getId()).collect(Collectors.toList());
        String[] ids = idList.toArray(new String[idList.size()]);
        costPriceTacticsItemMapper.deleteCostPriceTacticsItemByIds(ids);
        //插入子表
        List<CostPriceTacticsItem> itemList =  costPriceTacticsVo.getItemList();
        itemList.stream().forEach(s->{
            s.setId(UUID.randomUUID().toString());
            s.setCreateTime(DateUtils.getNowDate());
            s.setCreateBy(costPriceTacticsVo.getCreateBy());
            s.setTacticsId(costPriceTacticsVo.getId());
            costPriceTacticsItemMapper.insert(s);
        });
        return result;
    }
    /**
     * æ‰¹é‡åˆ é™¤æˆæœ¬ç­–ç•¥
     *
     * @param ids éœ€è¦åˆ é™¤çš„æˆæœ¬ç­–略主键
     * @return ç»“æžœ
     */
    @Override
    @Transactional
    public int deleteCostPriceTacticsByIds(String[] ids) {
        //删除子表
        List<String> list = Arrays.asList(ids);
        list.stream().forEach(item->{
            LambdaQueryWrapper<CostPriceTacticsItem> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.eq(CostPriceTacticsItem::getTacticsId,item);
            List<CostPriceTacticsItem> itemListOld = costPriceTacticsItemMapper.selectList(queryWrapper);
            List<String>idList = itemListOld.stream().map(s->s.getId()).collect(Collectors.toList());
            String[] itemIds = idList.toArray(new String[idList.size()]);
            costPriceTacticsItemMapper.deleteCostPriceTacticsItemByIds(itemIds);
        });
        return costPriceTacticsMapper.deleteCostPriceTacticsByIds(ids);
    }
    /**
     * åˆ é™¤æˆæœ¬ç­–略信息
     *
     * @param id æˆæœ¬ç­–略主键
     * @return ç»“æžœ
     */
    @Override
    @Transactional
    public int deleteCostPriceTacticsById(String id) {
        LambdaQueryWrapper<CostPriceTacticsItem> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(CostPriceTacticsItem::getTacticsId,id);
        List<CostPriceTacticsItem> itemListOld = costPriceTacticsItemMapper.selectList(queryWrapper);
        List<String>idList = itemListOld.stream().map(s->s.getId()).collect(Collectors.toList());
        String[] itemIds = idList.toArray(new String[idList.size()]);
        costPriceTacticsItemMapper.deleteCostPriceTacticsItemByIds(itemIds);
        return costPriceTacticsMapper.deleteCostPriceTacticsById(id);
    }
}
zhitan-system/src/main/java/com/zhitan/costmanagement/service/impl/DeviationAnalysisServiceServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,572 @@
package com.zhitan.costmanagement.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zhitan.common.enums.ElectricityTypeEnum;
import com.zhitan.common.enums.TimeType;
import com.zhitan.costmanagement.domain.CostElectricityInput;
import com.zhitan.costmanagement.domain.vo.*;
import com.zhitan.costmanagement.mapper.CostElectricityInputMapper;
import com.zhitan.costmanagement.mapper.CostPriceRelevancyMapper;
import com.zhitan.costmanagement.service.DeviationAnalysisService;
import com.zhitan.model.domain.ModelNode;
import com.zhitan.model.domain.vo.ModelNodeIndexInfor;
import com.zhitan.model.mapper.ModelInfoMapper;
import com.zhitan.model.mapper.ModelNodeMapper;
import com.zhitan.peakvalley.domain.ElectricityDataItem;
import com.zhitan.peakvalley.mapper.PeakValleyMapper;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.ParseException;
import java.time.Year;
import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
import static com.zhitan.common.utils.DateUtils.YYYY;
import static com.zhitan.common.utils.DateUtils.YYYY_MM;
/**
 * ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘Service业务层处理
 *
 * @author ZhiTan
 * @date 2024-11-08
 */
@Service
public class DeviationAnalysisServiceServiceImpl implements DeviationAnalysisService {
    @Resource
    private CostElectricityInputMapper costElectricityInputMapper;
    @Resource
    private ModelNodeMapper modelNodeMapper;
    @Resource
    private ModelInfoMapper modelInfoMapper;
    @Resource
    private PeakValleyMapper electricityDataItemMapper;
    @Resource
    CostPriceRelevancyMapper costPriceRelevancyMapper;
    @Override
    public ElectricityDataOutItem getElectricityDataItem(DeviationAnalysisDTO dto) throws ParseException {
        ElectricityDataOutItem ed = new ElectricityDataOutItem();
        CostElectricityInput search = costElectricityInputMapper.selectOne(new QueryWrapper<CostElectricityInput>().
                eq("type",dto.getTimeType()).eq("time",dto.getDate()));
        if(search!=null){
            ed.setElectricityFee(search.getElectricityFee());
            ed.setElectricityNum(search.getElectricityNum());
            ed.setPowerFactor(search.getPowerFactor());
            ed.setSharpElectricity(search.getSharpElectricity());
            ed.setPeakElectricity(search.getPeakElectricity());
            ed.setFlatElectricity(search.getFlatElectricity());
            ed.setValleyElectricity(search.getValleyElectricity());
            //如果统计的是年,先获取上一年
            DateTimeFormatter df = DateTimeFormatter.ofPattern(YYYY_MM);
            String lastDate = "";
            if(TimeType.MONTH.name().equals(dto.getTimeType())){
                YearMonth yearMonth = YearMonth.parse(dto.getDate(), df);
                //如果统计的是月
                String lastMonth = yearMonth.minusMonths(1).format(df);
                CostElectricityInput searchMonth = costElectricityInputMapper.selectOne(new QueryWrapper<CostElectricityInput>().
                        eq("type",dto.getTimeType()).eq("time",lastMonth));
                ed.setElectricityFeeQoq(percentage(search.getElectricityFee(),searchMonth.getElectricityFee()));
                ed.setElectricityNumQoq(percentage(search.getElectricityNum(),searchMonth.getElectricityNum()));
                ed.setPowerFactorQoq(percentage(search.getPowerFactor(),searchMonth.getPowerFactor()));
                lastDate = yearMonth.minusYears(1).format(df);
            }else{
                df = DateTimeFormatter.ofPattern(YYYY);
                Year year = Year.parse(dto.getDate(), df);
                lastDate = year.minusYears(1).format(df);
            }
            CostElectricityInput searchLastYear = costElectricityInputMapper.selectOne(new QueryWrapper<CostElectricityInput>().
                    eq("type",dto.getTimeType()).eq("time",lastDate));
            if(searchLastYear!=null){
                ed.setElectricityFeeYoy(percentage(search.getElectricityFee(),searchLastYear.getElectricityFee()));
                ed.setElectricityNumYoy(percentage(search.getElectricityNum(),searchLastYear.getElectricityNum()));
                ed.setPowerFactorYoy(percentage(search.getPowerFactor(),searchLastYear.getPowerFactor()));
            }else{
                ed.setElectricityFeeYoy(new BigDecimal(100));
                ed.setElectricityNumYoy(new BigDecimal(100));
                ed.setPowerFactorYoy(new BigDecimal(100));
            }
        }
        return ed;
    }
    @Override
    public StatisticsInfoListOut getStatisticsInfoList(DeviationAnalysisDTO dto) throws ParseException {
        StatisticsInfoListOut out = new StatisticsInfoListOut();
        List<ModelNode>modelNodeList = modelNodeMapper.getModelNodeByModelCode(dto.getModelCode());
        List<ModelNode>modelNodeList2 = modelNodeList.stream().filter(s->s.getParentId()==null).collect(Collectors.toList());
        List<ModelNode>modelNodeList3 = modelNodeList.stream().filter(s->s.getParentId()!=null).collect(Collectors.toList());
        String nodeId = modelNodeList2.get(0).getNodeId();
        List<ModelNode>childList = modelNodeList3.stream().filter(t->nodeId.equals(t.getParentId())).collect(Collectors.toList());
        List<String>nodes = childList.stream().map(s->s.getNodeId()).collect(Collectors.toList());
        if(nodes!=null&& nodes.size()>0){
            out = computeInfoList(dto,nodes,modelNodeList,nodeId);
        }else{
            out.setNodeId(nodeId);
            List<StatisticsInfoListOut> child = new ArrayList<>();
            List<ModelNodeIndexInfor> nodeIndexInfoList = modelNodeMapper.selectIndexByModelCodeAndNodeId(dto.getModelCode(), nodeId);
            if (CollectionUtils.isNotEmpty(nodeIndexInfoList)) {
                Set<String> indexSet = nodeIndexInfoList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toSet());
                List<ElectricityDataItem> dataItemList = electricityDataItemMapper.getDataStatisticsDeviationAnalysis(indexSet, dto.getTimeType());
                StatisticsDataOutItem nowData = compute(dto.getTimeType(),dto.getDate(),nodeId,dataItemList);
                BeanUtil.copyProperties(nowData,out);
                out.setElectricityNumRadio(new BigDecimal(100));
                DateTimeFormatter df = DateTimeFormatter.ofPattern(YYYY_MM);
                String lastDate = "";
                if(TimeType.MONTH.name().equals(dto.getTimeType())){
                    //如果统计的是月
                    YearMonth yearMonth = YearMonth.parse(dto.getDate(), df);
                    lastDate = yearMonth.minusYears(1).format(df);
                    //如果统计的是月
                    String lastMonth = yearMonth.minusMonths(1).format(df);
                    StatisticsDataOutItem lastMonthData = compute(dto.getTimeType(),lastMonth,nodeId,dataItemList);
                    out.setElectricityNumQoq(percentage(out.getElectricityNum(),lastMonthData.getElectricityNum()));
                }else{
                    df = DateTimeFormatter.ofPattern(YYYY);
                    Year year = Year.parse(dto.getDate(), df);
                    lastDate = year.minusYears(1).format(df);
                }
                StatisticsDataOutItem lastYearData = compute(dto.getTimeType(),lastDate,nodeId,dataItemList);
                out.setElectricityNumYoy(percentage(out.getElectricityNum(),lastYearData.getElectricityNum()));
            }
            out.setChildren(child);
        }
        return out;
    }
    @Override
    public List<StatisticsInfoListOut> getStatisticsInfoNewList(DeviationAnalysisDTO dto) throws ParseException {
        List<StatisticsInfoListOut>result=new ArrayList<>();
        List<ModelNode>modelNodeList = modelNodeMapper.getModelNodeByModelCode(dto.getModelCode());
        List<ModelNode>modelNodeList2 = modelNodeList.stream().filter(s->s.getParentId()==null).collect(Collectors.toList());
        BigDecimal totalNum = new BigDecimal(0);
        String nodeIdP = modelNodeList2.get(0).getNodeId();
        for(ModelNode modelNode:modelNodeList){
            StatisticsInfoListOut out = new StatisticsInfoListOut();
            String nodeId = modelNode.getNodeId();
            List<ModelNodeIndexInfor> nodeIndexInfoList = modelNodeMapper.selectIndexByModelCodeAndNodeId(dto.getModelCode(), nodeId);
            if (CollectionUtils.isNotEmpty(nodeIndexInfoList)) {
                Set<String> indexSet = nodeIndexInfoList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toSet());
                List<ElectricityDataItem> dataItemList = electricityDataItemMapper.getDataStatisticsDeviationAnalysis(indexSet, dto.getTimeType());
                StatisticsDataOutItem nowData = compute(dto.getTimeType(),dto.getDate(),nodeId,dataItemList);
                BeanUtil.copyProperties(nowData,out);
                if (nodeIdP.equals(nodeId)) {
                    totalNum = nowData.getElectricityNum();
                }
                out.setElectricityNumRadio(nowData.getElectricityNum().divide(totalNum));
                DateTimeFormatter df = DateTimeFormatter.ofPattern(YYYY_MM);
                String lastDate = "";
                if(TimeType.MONTH.name().equals(dto.getTimeType())){
                    //如果统计的是月
                    YearMonth yearMonth = YearMonth.parse(dto.getDate(), df);
                    lastDate = yearMonth.minusYears(1).format(df);
                    //如果统计的是月
                    String lastMonth = yearMonth.minusMonths(1).format(df);
                    StatisticsDataOutItem lastMonthData = compute(dto.getTimeType(),lastMonth,nodeId,dataItemList);
                    out.setElectricityNumQoq(percentage(out.getElectricityNum(),lastMonthData.getElectricityNum()));
                }else{
                    df = DateTimeFormatter.ofPattern(YYYY);
                    Year year = Year.parse(dto.getDate(), df);
                    lastDate = year.minusYears(1).format(df);
                }
                StatisticsDataOutItem lastYearData = compute(dto.getTimeType(),lastDate,nodeId,dataItemList);
                out.setElectricityNumYoy(percentage(out.getElectricityNum(),lastYearData.getElectricityNum()));
            }
        }
        return result;
    }
    @Override
    public Map<String, Object> getEcharst(DeviationAnalysisDTO dto) throws ParseException {
        List<String>xData = new ArrayList<>();
        List<String>xData2 = new ArrayList<>();
        List<BigDecimal>yData = new ArrayList<>();
        Map<String, Object>result = new HashMap<>();
        List<ModelNodeIndexInfor> nodeIndexInfoList = modelNodeMapper.selectIndexByModelCodeAndNodeId(dto.getModelCode(), dto.getNodeId());
        if (CollectionUtils.isNotEmpty(nodeIndexInfoList)) {
            String dateStr = dto.getDate();
            Set<String> indexSet = nodeIndexInfoList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toSet());
            List<ElectricityDataItem> dataItemList = new ArrayList<>();
            if(TimeType.MONTH.name().equals(dto.getTimeType())){
                dateStr = "D"+dateStr.replace("-","");
                dataItemList = electricityDataItemMapper.getDataStatisticsDeviationAnalysis(indexSet, TimeType.DAY.name());
            }else{
                dateStr = "M"+dateStr;
                dataItemList = electricityDataItemMapper.getDataStatisticsDeviationAnalysis(indexSet, TimeType.MONTH.name());
            }
            String finalDateStr1 = dateStr;
            List<ElectricityDataItem>dataNow = new ArrayList<>();
            dataNow = dataItemList.stream().filter(s->s.getTimeCode().substring(0,7).equals(finalDateStr1)).collect(Collectors.toList());
            Map<String, List<ElectricityDataItem>> electricityDataMap = new HashMap<>();
            electricityDataMap = dataNow.stream()
                    .collect(Collectors.groupingBy(li -> DateUtil.formatDateTime(li.getDataTime())));
//            xData = dataNow.stream().map(s->DateUtil.formatDateTime(s.getDataTime())).collect(Collectors.toList());
            for(String date : electricityDataMap.keySet()){
                List<ElectricityDataItem> ylist = electricityDataMap.get(date);
                BigDecimal allNum = BigDecimal.ZERO;
                for(ElectricityDataItem i : ylist){
                    allNum = allNum.add(i.getElectricity());
                }
                yData.add(allNum);
                String mapKey = DateUtil.formatDate(DateUtil.parseDate(date));
                xData2.add(mapKey);
            }
        }
        result.put("xData",xData2);
        result.put("yData",yData);
        return result;
    }
    @Override
    public StatisticsDataOutItem getStatisticsDataItem(DeviationAnalysisDTO dto) throws ParseException {
        ElectricityDataOutItem electricityDataOutItem = this.getElectricityDataItem(dto);
        StatisticsDataOutItem result = new StatisticsDataOutItem();
//        // æŸ¥è¯¢ç‚¹ä½ä¿¡æ¯
        List<ModelNodeIndexInfor> nodeIndexInfoList = modelNodeMapper.selectIndexByModelCodeAndNodeId(dto.getModelCode(), dto.getNodeId());
        if (CollectionUtils.isNotEmpty(nodeIndexInfoList)) {
            Set<String> indexSet = nodeIndexInfoList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toSet());
            List<ElectricityDataItem> dataItemList = electricityDataItemMapper.getDataStatisticsDeviationAnalysis(indexSet, dto.getTimeType());
            StatisticsDataOutItem nowData = compute(dto.getTimeType(),dto.getDate(),dto.getNodeId(),dataItemList);
            BeanUtil.copyProperties(nowData,result);
            result.setPowerFactor(new BigDecimal(0.9).setScale(2, RoundingMode.HALF_UP));
            result.setPowerFactorQoq(new BigDecimal(0).setScale(2, RoundingMode.HALF_UP));
            result.setPowerFactorYoy(new BigDecimal(0.6).setScale(2, RoundingMode.HALF_UP));
            result.setPowerFactorDiff(result.getPowerFactor().subtract(electricityDataOutItem.getPowerFactor()));
            result.setElectricityNumDiff(result.getElectricityNum().subtract(electricityDataOutItem.getElectricityNum()));
            result.setElectricityFeeDiff(result.getElectricityFee().subtract(electricityDataOutItem.getElectricityFee()));
            result.setSharpElectricityDiff(result.getSharpElectricity().subtract(electricityDataOutItem.getSharpElectricity()));
            result.setPeakElectricityDiff(result.getPeakElectricity().subtract(electricityDataOutItem.getPeakElectricity()));
            result.setFlatElectricityDiff(result.getFlatElectricity().subtract(electricityDataOutItem.getFlatElectricity()));
            result.setValleyElectricityDiff(result.getValleyElectricity().subtract(electricityDataOutItem.getValleyElectricity()));
            DateTimeFormatter df = DateTimeFormatter.ofPattern(YYYY_MM);
            String lastDate = "";
            if(TimeType.MONTH.name().equals(dto.getTimeType())){
                //如果统计的是月
                YearMonth yearMonth = YearMonth.parse(dto.getDate(), df);
                //如果统计的是月
                String lastMonth = yearMonth.minusMonths(1).format(df);
                StatisticsDataOutItem lastMonthData = compute(dto.getTimeType(),lastMonth,dto.getNodeId(),dataItemList);
                result.setElectricityFeeQoq(percentage(result.getElectricityFee(),lastMonthData.getElectricityFee()));
                result.setElectricityNumQoq(percentage(result.getElectricityNum(),lastMonthData.getElectricityNum()));
                lastDate = yearMonth.minusYears(1).format(df);
//                result.setPowerFactorQoq(percentage(result.getPowerFactor(),lastMonthData.getPowerFactor()));
            }else{
                df = DateTimeFormatter.ofPattern(YYYY);
                Year year = Year.parse(dto.getDate(), df);
                lastDate = year.minusYears(1).format(df);
//                result.setPowerFactorQoq(percentage(result.getPowerFactor(),lastYearData.getPowerFactor()));
            }
            StatisticsDataOutItem lastYearData = compute(dto.getTimeType(),lastDate,dto.getNodeId(),dataItemList);
            result.setElectricityFeeYoy(percentage(result.getElectricityFee(),lastYearData.getElectricityFee()));
            result.setElectricityNumYoy(percentage(result.getElectricityNum(),lastYearData.getElectricityNum()));
        }
        return result;
    }
    //计算电费、耗电量
    private StatisticsDataOutItem compute(String timeType,String dateStr,String nodeId,List<ElectricityDataItem>dataItemList){
        StatisticsDataOutItem sd = new StatisticsDataOutItem();
        if(TimeType.MONTH.name().equals(timeType)){
            dateStr = "M"+dateStr.replace("-","");
        }else{
            dateStr = "Y"+dateStr;
        }
        String finalDateStr = dateStr;
        List<ElectricityDataItem>dataNow = new ArrayList<>();
        BigDecimal sharpFee = BigDecimal.ZERO;
        BigDecimal sharpPower = BigDecimal.ZERO;
        BigDecimal peakFee = BigDecimal.ZERO;
        BigDecimal peakPower = BigDecimal.ZERO;
        BigDecimal flatFee = BigDecimal.ZERO;
        BigDecimal flatPower = BigDecimal.ZERO;
        BigDecimal valleyFee = BigDecimal.ZERO;
        BigDecimal valleyPower = BigDecimal.ZERO;
        BigDecimal DeepFee = BigDecimal.ZERO;
        BigDecimal DeepPower = BigDecimal.ZERO;
        dataNow = dataItemList.stream().filter(s->s.getTimeCode().equals(finalDateStr)).collect(Collectors.toList());
        if (CollectionUtils.isNotEmpty(dataNow)) {
            for (ElectricityDataItem electricityDataItem : dataNow) {
                String electricityType = electricityDataItem.getElectricityType();
                if (ElectricityTypeEnum.SHARP.name().equals(electricityType)) {
                    sharpPower = sharpPower.add(electricityDataItem.getElectricity());
                } else if (ElectricityTypeEnum.PEAK.name().equals(electricityType)) {
                    peakPower = peakPower.add(electricityDataItem.getElectricity());
                } else if (ElectricityTypeEnum.FLAT.name().equals(electricityType)) {
                    flatPower = flatPower.add(electricityDataItem.getElectricity());
                } else if (ElectricityTypeEnum.VALLEY.name().equals(electricityType)){
                    valleyPower = valleyPower.add(electricityDataItem.getElectricity());
                }else if (ElectricityTypeEnum.DEEP.name().equals(electricityType)){
                    DeepPower = DeepPower.add(electricityDataItem.getElectricity());
                }
            }
            CostPriceRelevancyVo voS =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(nodeId,ElectricityTypeEnum.SHARP.name());
            if(voS!=null){
                sharpFee = voS.getPrice().multiply(sharpPower);
            }
            CostPriceRelevancyVo voP =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(nodeId,ElectricityTypeEnum.PEAK.name());
            if(voP!=null){
                peakFee = voP.getPrice().multiply(peakPower);
            }
            CostPriceRelevancyVo voF =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(nodeId,ElectricityTypeEnum.FLAT.name());
            if(voF!=null){
                flatFee = voF.getPrice().multiply(flatPower);
            }
            CostPriceRelevancyVo voV =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(nodeId, ElectricityTypeEnum.VALLEY.name());
            if(voV!=null){
                valleyFee = voV.getPrice().multiply(valleyPower);
            }
            CostPriceRelevancyVo voD =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(nodeId, ElectricityTypeEnum.DEEP.name());
            if(voV!=null){
                DeepFee = voV.getPrice().multiply(valleyPower);
            }
            BigDecimal allNum = sharpPower.add(peakPower).add(flatPower).add(valleyPower);
            BigDecimal allFee = sharpFee.add(peakFee).add(flatFee).add(valleyFee);
            sd.setSharpElectricity(sharpPower);
            sd.setPeakElectricity(peakPower);
            sd.setFlatElectricity(flatPower);
            sd.setValleyElectricity(valleyPower);
            sd.setElectricityFee(allFee);
            sd.setElectricityNum(allNum);
        }
        return sd;
    }
    /**
     * åŒçŽ¯æ¯”è®¡ç®—
     * @param thisData
     * @param lastData
     * @return
     */
    private BigDecimal percentage(BigDecimal thisData, BigDecimal lastData) {
        BigDecimal rate = new BigDecimal(100);
        if(lastData.compareTo(BigDecimal.ZERO)==1){
            BigDecimal differ = thisData.subtract(lastData);
            rate = differ.multiply(new BigDecimal(100)).divide(lastData,BigDecimal.ROUND_CEILING).setScale(2, RoundingMode.HALF_UP);
        }
        return rate;
    }
    private StatisticsInfoListOut computeInfoList(DeviationAnalysisDTO dto,List<String>nodes,List<ModelNode>modelNodeList,String nodeId){
        StatisticsInfoListOut out = new StatisticsInfoListOut();
        List<StatisticsInfoListOut> child = new ArrayList<>();
        List<ModelNodeIndexInfor> nodeIndexInfoList = modelNodeMapper.selectIndexByModelCodeAndNodeId(dto.getModelCode(), nodeId);
        if (CollectionUtils.isNotEmpty(nodeIndexInfoList)) {
            Set<String> indexSet = nodeIndexInfoList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toSet());
            List<ElectricityDataItem> dataItemList = electricityDataItemMapper.getDataStatisticsDeviationAnalysis(indexSet, dto.getTimeType());
            StatisticsDataOutItem nowData = compute(dto.getTimeType(),dto.getDate(),nodeId,dataItemList);
            BeanUtil.copyProperties(nowData,out);
            out.setElectricityNumRadio(new BigDecimal(100));
            out.setNodeId(nodeId);
            DateTimeFormatter df = DateTimeFormatter.ofPattern(YYYY_MM);
            String lastDate = "";
            if(TimeType.MONTH.name().equals(dto.getTimeType())){
                //如果统计的是月
                YearMonth yearMonth = YearMonth.parse(dto.getDate(), df);
                //如果统计的是月
                String lastMonth = yearMonth.minusMonths(1).format(df);
                StatisticsDataOutItem lastMonthData = compute(dto.getTimeType(),lastMonth,nodeId,dataItemList);
                out.setElectricityNumQoq(percentage(out.getElectricityNum(),lastMonthData.getElectricityNum()));
                lastDate = yearMonth.minusYears(1).format(df);
            }else{
                df = DateTimeFormatter.ofPattern(YYYY);
                Year year = Year.parse(dto.getDate(), df);
                lastDate = year.minusYears(1).format(df);
            }
            StatisticsDataOutItem lastYearData = compute(dto.getTimeType(),lastDate,nodeId,dataItemList);
            out.setElectricityNumYoy(percentage(out.getElectricityNum(),lastYearData.getElectricityNum()));
            if(nodes!=null&&nodes.size()>0){
                for(String node : nodes){
                    StatisticsInfoListOut out2 = new StatisticsInfoListOut();
                    out2.setNodeId(node);
                    List<ModelNodeIndexInfor> nodeIndexInfoList2 = modelNodeMapper.selectIndexByModelCodeAndNodeId(dto.getModelCode(), node);
                    if (CollectionUtils.isNotEmpty(nodeIndexInfoList2)) {
                        Set<String> indexSet2 = nodeIndexInfoList2.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toSet());
                        List<ElectricityDataItem> dataItemList2 = electricityDataItemMapper.getDataStatisticsDeviationAnalysis(indexSet2, dto.getTimeType());
                        StatisticsDataOutItem nowData2 = compute(dto.getTimeType(),dto.getDate(),node,dataItemList2);
                        BeanUtil.copyProperties(nowData2,out2);
                        out2.setElectricityNumRadio(new BigDecimal(100));
                        if(TimeType.MONTH.name().equals(dto.getTimeType())){
                            //如果统计的是月
                            YearMonth yearMonth = YearMonth.parse(dto.getDate(), df);
                            lastDate = yearMonth.minusYears(1).format(df);
                            //如果统计的是月
                            String lastMonth = yearMonth.minusMonths(1).format(df);
                            StatisticsDataOutItem lastMonthData = compute(dto.getTimeType(),lastMonth,node,dataItemList2);
                            out2.setElectricityNumQoq(percentage(out2.getElectricityNum(),lastMonthData.getElectricityNum()));
                        }else{
                            df = DateTimeFormatter.ofPattern(YYYY);
                            Year year = Year.parse(dto.getDate(), df);
                            lastDate = year.minusYears(1).format(df);
                        }
                        StatisticsDataOutItem lastYearData2 = compute(dto.getTimeType(),lastDate,dto.getNodeId(),dataItemList2);
                        out2.setElectricityNumYoy(percentage(out2.getElectricityNum(),lastYearData2.getElectricityNum()));
                    }
                    child.add(out2);
//                    List<ModelNode>childList = modelNodeList.stream().filter(s->s.getParentId().equals(node)).collect(Collectors.toList());
//                    List<String>node2s = childList.stream().map(s->s.getNodeId()).collect(Collectors.toList());
//                    if(){
//
//                    }
                }
            }
        }
        out.setChildren(child);
        return out;
    }
    @Override
    public StatisticsInfoListOut getStatisticsInfoList2(DeviationAnalysisDTO dto) throws ParseException {
        StatisticsInfoListOut out = new StatisticsInfoListOut();
        List<ModelNode>modelNodeList = modelNodeMapper.getModelNodeByModelCode(dto.getModelCode());
        List<ModelNode>modelNodeList2 = modelNodeList.stream().filter(s->s.getParentId()==null).collect(Collectors.toList());
        List<ModelNode>modelNodeList3 = modelNodeList.stream().filter(s->s.getParentId()!=null).collect(Collectors.toList());
        String nodeId = modelNodeList2.get(0).getNodeId();
        List<ModelNode>childList = modelNodeList3.stream().filter(t->nodeId.equals(t.getParentId())).collect(Collectors.toList());
        List<String>nodes = childList.stream().map(s->s.getNodeId()).collect(Collectors.toList());
        if(nodes!=null&& nodes.size()>0){
            out = computeInfoList(dto,nodes,modelNodeList,nodeId);
        }else{
            out.setNodeId(nodeId);
            List<StatisticsInfoListOut> child = new ArrayList<>();
            List<ModelNodeIndexInfor> nodeIndexInfoList = modelNodeMapper.selectIndexByModelCodeAndNodeId(dto.getModelCode(), nodeId);
            if (CollectionUtils.isNotEmpty(nodeIndexInfoList)) {
                Set<String> indexSet = nodeIndexInfoList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toSet());
                List<ElectricityDataItem> dataItemList = electricityDataItemMapper.getDataStatisticsDeviationAnalysis(indexSet, dto.getTimeType());
                StatisticsDataOutItem nowData = compute(dto.getTimeType(),dto.getDate(),nodeId,dataItemList);
                BeanUtil.copyProperties(nowData,out);
                out.setElectricityNumRadio(new BigDecimal(100));
                DateTimeFormatter df = DateTimeFormatter.ofPattern(YYYY_MM);
                String lastDate = "";
                if(TimeType.MONTH.name().equals(dto.getTimeType())){
                    //如果统计的是月
                    YearMonth yearMonth = YearMonth.parse(dto.getDate(), df);
                    lastDate = yearMonth.minusYears(1).format(df);
                    //如果统计的是月
                    String lastMonth = yearMonth.minusMonths(1).format(df);
                    StatisticsDataOutItem lastMonthData = compute(dto.getTimeType(),lastMonth,nodeId,dataItemList);
                    out.setElectricityNumQoq(percentage(out.getElectricityNum(),lastMonthData.getElectricityNum()));
                }else{
                    df = DateTimeFormatter.ofPattern(YYYY);
                    Year year = Year.parse(dto.getDate(), df);
                    lastDate = year.minusYears(1).format(df);
                }
                StatisticsDataOutItem lastYearData = compute(dto.getTimeType(),lastDate,nodeId,dataItemList);
                out.setElectricityNumYoy(percentage(out.getElectricityNum(),lastYearData.getElectricityNum()));
            }
            out.setChildren(child);
        }
        return out;
    }
    /**
     * é€’归建立树形结构 ï¼ˆç®—法)
     * @param lists
     * @param pid
     * @return
     */
//    private List<StatisticsInfoListOut> createTree(List<StatisticsInfoListOut> lists, int pid) {
//        List<StatisticsInfoListOut> tree = new ArrayList<>();
//        for (StatisticsInfoListOut catelog : lists) {
//            if (catelog.get() == pid) {
//                catelog.setChirldren(createTree(lists,catelog.getId()));
//                tree.add(catelog);
//            }
//        }
//        return tree;
//    }
}
zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java
@@ -1,5 +1,6 @@
package com.zhitan.dataitem.mapper;
import com.zhitan.carbonemission.domain.CarbonEmission;
import com.zhitan.common.enums.TimeType;
import com.zhitan.dataitem.domain.StagseDataEntry;
import com.zhitan.realtimedata.domain.DataItem;
@@ -75,4 +76,38 @@
     */
    BigDecimal getDataItemValueByIndexIds(@Param("timeCode") String timeCode, @Param("indexIds") List<String> indexIds);
    /**
     * æ ¹æ®indexId与时间范围查询碳排放数据,上半部分
     * @param beginTime
     * @param endTime
     * @param timeType
     * @param indexId
     * @return
     */
    List<CarbonEmission> getUpCarbonEmission(@Param("beginTime") Date beginTime, @Param("endTime") Date endTime,
                                             @Param("timeType") String timeType, @Param("indexId") String indexId);
    /**
     * æ ¹æ®indexId与时间范围查询碳排放数据,中间部分
     * @param beginTime
     * @param endTime
     * @param timeType
     * @param indexId
     * @return
     */
    List<CarbonEmission> getMiddleCarbonEmission(@Param("beginTime") Date beginTime, @Param("endTime") Date endTime,
                                             @Param("timeType") String timeType, @Param("indexId") String indexId,@Param("emissionType") String emissionType);
    /**
     * æ ¹æ®indexId与时间范围查询碳排放数据,下半部分
     * @param beginTime
     * @param endTime
     * @param timeType
     * @param indexId
     * @return
     */
    List<CarbonEmission> getDownCarbonEmission(@Param("beginTime") Date beginTime, @Param("endTime") Date endTime,
                                             @Param("timeType") String timeType, @Param("indexId") String indexId);
}
zhitan-system/src/main/java/com/zhitan/energydata/mapper/EnergyDataStatisticMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.zhitan.energydata.mapper;
import com.zhitan.model.domain.CalcFunction;
import com.zhitan.model.domain.vo.ModelNodeIndexInfor;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface EnergyDataStatisticMapper
{
    List<ModelNodeIndexInfor> getModelNodeIndexIdByFixedNodeIds(@Param("modelCode")String modelCode,@Param("fixedNodeIds") List<String> fixedNodeIds);
}
zhitan-system/src/main/java/com/zhitan/energydata/service/IEnergyDataStatisticService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
package com.zhitan.energydata.service;
import com.zhitan.consumptionanalysis.domain.vo.RankingEnergyData;
import com.zhitan.energydata.vo.EnergyChainYoyVO;
import com.zhitan.energydata.vo.FactoryEnergyConsumptionVo;
import com.zhitan.energydata.vo.PurchaseConsumptionVo;
import com.zhitan.peakvalley.domain.dto.PeakValleyDTO;
import com.zhitan.peakvalley.domain.vo.peakvalley.PeakValleyDayVO;
import com.zhitan.peakvalley.domain.vo.peakvalley.PeakValleyHourVO;
import java.util.List;
public interface IEnergyDataStatisticService {
  PeakValleyDayVO segmentAnalysisMonth(PeakValleyDTO dto);
  List<RankingEnergyData> energyConsumptionRanking(String modelCode, String timeType);
  FactoryEnergyConsumptionVo factoryEnergyConsumption(String timeType, String modelCode);
  List<PurchaseConsumptionVo> purchaseConsumption(String modelCode, String timeType );
  List<PurchaseConsumptionVo> costProp(String modelCode, String timeType);
  List<EnergyChainYoyVO> energyConsumptionSummation(String timeType, String modelCode);
  PeakValleyDayVO segmentAnalysisDay(PeakValleyDTO dto);
  PeakValleyHourVO segmentAnalysisHour(PeakValleyDTO dto);
}
zhitan-system/src/main/java/com/zhitan/energydata/service/impl/EnergyDataStatisticServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,1208 @@
package com.zhitan.energydata.service.impl;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zhitan.basicdata.domain.MeterImplement;
import com.zhitan.basicdata.domain.SysEnergy;
import com.zhitan.basicdata.mapper.MeterImplementMapper;
import com.zhitan.basicdata.mapper.SysEnergyMapper;
import com.zhitan.common.constant.CommonConst;
import com.zhitan.common.enums.ElectricityTypeEnum;
import com.zhitan.common.enums.TimeType;
import com.zhitan.common.utils.DateUtils;
import com.zhitan.common.utils.bean.BeanUtils;
import com.zhitan.consumptionanalysis.domain.vo.RankingEnergyData;
import com.zhitan.costmanagement.domain.CostElectricityInput;
import com.zhitan.costmanagement.domain.vo.CostPriceRelevancyVo;
import com.zhitan.costmanagement.mapper.CostElectricityInputMapper;
import com.zhitan.costmanagement.mapper.CostPriceRelevancyMapper;
import com.zhitan.dataitem.service.IDataItemService;
import com.zhitan.energydata.mapper.EnergyDataStatisticMapper;
import com.zhitan.energydata.service.IEnergyDataStatisticService;
import com.zhitan.energydata.vo.EnergyChainYoyVO;
import com.zhitan.energydata.vo.FactoryEnergyConsumptionItemVo;
import com.zhitan.energydata.vo.FactoryEnergyConsumptionVo;
import com.zhitan.energydata.vo.PurchaseConsumptionVo;
import com.zhitan.home.domain.vo.HomeEnergyStatisticsVO;
import com.zhitan.model.domain.EnergyIndex;
import com.zhitan.model.domain.ModelNode;
import com.zhitan.model.domain.vo.ModelNodeIndexInfor;
import com.zhitan.model.mapper.EnergyIndexMapper;
import com.zhitan.model.mapper.ModelNodeMapper;
import com.zhitan.model.service.IEnergyIndexService;
import com.zhitan.model.service.IModelNodeService;
import com.zhitan.peakvalley.domain.ElectricityDataItem;
import com.zhitan.peakvalley.domain.dto.PeakValleyDTO;
import com.zhitan.peakvalley.domain.vo.peakvalley.*;
import com.zhitan.peakvalley.mapper.PeakValleyMapper;
import com.zhitan.realtimedata.domain.DataItem;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
/**
 * æ’邦综合治理大屏接口实现类
 */
@Service
public class EnergyDataStatisticServiceImpl implements IEnergyDataStatisticService {
  @Autowired
  private ModelNodeMapper modelNodeMapper;
  @Autowired
  private PeakValleyMapper electricityDataItemMapper;
  @Autowired
  CostPriceRelevancyMapper costPriceRelevancyMapper;
  @Autowired
  CostElectricityInputMapper electricityInputMapper;
  @Autowired
  private  IDataItemService dataItemService;
  @Autowired
  private SysEnergyMapper sysEnergyMapper;
  @Autowired
  private  IModelNodeService modelNodeService;
  @Autowired
  private  IEnergyIndexService energyIndexService;
  @Autowired
  private EnergyDataStatisticMapper statisticMapper;
  @Autowired
  private EnergyIndexMapper energyIndexMapper;
  @Autowired
  private MeterImplementMapper meterImplementMapper;
  @Override
  public List<EnergyChainYoyVO> energyConsumptionSummation(String timeType, String modelcode) {
    Date currentTime = new Date();
//        Date currentTime = DateUtil.parseDateTime("2023-04-11 00:00:00");
    DateTime tongbiTime = DateUtil.offsetMonth(currentTime, -12);
    DateTime huanbiTime = DateUtil.offsetMonth(currentTime, -1);
    final List<EnergyChainYoyVO> resultData = new ArrayList<>();
    final List<HomeEnergyStatisticsVO> current = getEnergyTotalByTime(timeType, modelcode, currentTime);
    final List<HomeEnergyStatisticsVO> tongbi = getEnergyTotalByTime(timeType, modelcode, tongbiTime);
    final List<HomeEnergyStatisticsVO> huanbi = getEnergyTotalByTime(timeType, modelcode, huanbiTime);
    final Map<String, List<HomeEnergyStatisticsVO>> tongbiMap = tongbi.stream().collect(Collectors.groupingBy(HomeEnergyStatisticsVO::getEnergyNo));
    final Map<String, List<HomeEnergyStatisticsVO>> huanbiMap = huanbi.stream().collect(Collectors.groupingBy(HomeEnergyStatisticsVO::getEnergyNo));
    current.stream().forEach(vo->{
      EnergyChainYoyVO chainYoyVO = new EnergyChainYoyVO();
      final String energyNo = vo.getEnergyNo();
      final Double count = vo.getCount();
      final Double tongbiCount = tongbiMap.get(energyNo).stream().map(HomeEnergyStatisticsVO::getCount).mapToDouble(Double::doubleValue).sum();
      final Double huanbiCount = huanbiMap.get(energyNo).stream().map(HomeEnergyStatisticsVO::getCount).mapToDouble(Double::doubleValue).sum();
      vo.setTonCount(format2Double( vo.getCount() * Double.valueOf(vo.getCoefficient())));
      if (tongbiCount != 0) {
        vo.setTongbi(format2Double( (count - tongbiCount) / tongbiCount * 100));
      }else {
        vo.setTongbi(0D);
      }
      if (huanbiCount != 0) {
        vo.setHuanbi (format2Double((count - huanbiCount) / huanbiCount * 100));
      }else {
        vo.setHuanbi(0D);
      }
      BeanUtils.copyProperties(vo, chainYoyVO);
      chainYoyVO.setSamePeriodCount(BigDecimal.valueOf(tongbiCount));
      chainYoyVO.setCount(BigDecimal.valueOf(vo.getCount()));
      chainYoyVO.setTongbi(BigDecimal.valueOf(vo.getTongbi()));
      chainYoyVO.setHuanbi(BigDecimal.valueOf(vo.getHuanbi()));
      chainYoyVO.setTonCount(BigDecimal.valueOf(vo.getTonCount()));
      resultData.add(chainYoyVO);
    });
    return resultData;
  }
  /**
   * ç”¨ç”µè¶‹åŠ¿åˆ†æž--选择年
   * @param dto
   * @return
   */
  @Override
  public PeakValleyDayVO segmentAnalysisMonth(PeakValleyDTO dto) {
    PeakValleyDayVO peakValleyVO = new PeakValleyDayVO();
    List<PeakValleyDayDataVO> reportVOList = new ArrayList<>();
    //获取nodeId
    ModelNode modelNode = modelNodeService.getModelNodeByModelCodeByIndexCode(dto.getModelCode());
    dto.setNodeId(modelNode.getNodeId());
    // æŸ¥è¯¢æ—¶é—´èŒƒå›´
    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.DATE, 1);
    calendar.set(Calendar.HOUR, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    Date endTime =calendar.getTime();
    calendar.add(Calendar.MONTH, -12);
    Date startTime = calendar.getTime();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String timeType = dto.getTimeType();
    Map<String, List<ElectricityDataItem>> electricityDataMap = new HashMap<>();
    // æŸ¥è¯¢ç‚¹ä½ä¿¡æ¯
    List<ModelNodeIndexInfor> nodeIndexInfoList = modelNodeMapper.selectIndexByModelCodeAndNodeId(dto.getModelCode(), dto.getNodeId());
    if (CollectionUtils.isNotEmpty(nodeIndexInfoList)) {
      Set<String> indexSet = nodeIndexInfoList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toSet());
      List<ElectricityDataItem> dataItemList = electricityDataItemMapper.getDataStatistics(indexSet, startTime, endTime, timeType);
      electricityDataMap = dataItemList.stream()
              .collect(Collectors.groupingBy(li -> DateUtil.formatDateTime(li.getDataTime())));
    }
    while (!startTime.after(endTime)) {
      String mapKey = DateUtil.formatDateTime(startTime);
      List<ElectricityDataItem> dataItemList = electricityDataMap.get(mapKey);
      BigDecimal sharpFee = BigDecimal.ZERO;
      BigDecimal sharpPower = BigDecimal.ZERO;
      BigDecimal peakFee = BigDecimal.ZERO;
      BigDecimal peakPower = BigDecimal.ZERO;
      BigDecimal flatFee = BigDecimal.ZERO;
      BigDecimal flatPower = BigDecimal.ZERO;
      BigDecimal valleyFee = BigDecimal.ZERO;
      BigDecimal valleyPower = BigDecimal.ZERO;
      if (CollectionUtils.isNotEmpty(dataItemList)) {
        for (ElectricityDataItem electricityDataItem : dataItemList) {
          String electricityType = electricityDataItem.getElectricityType();
          if (ElectricityTypeEnum.SHARP.name().equals(electricityType)) {
//                        sharpFee = sharpFee.add(electricityDataItem.getCost());
            sharpPower = sharpPower.add(electricityDataItem.getElectricity());
          } else if (ElectricityTypeEnum.PEAK.name().equals(electricityType)) {
//                        peakFee = peakFee.add(electricityDataItem.getCost());
            peakPower = peakPower.add(electricityDataItem.getElectricity());
          } else if (ElectricityTypeEnum.FLAT.name().equals(electricityType)) {
//                        flatFee = flatFee.add(electricityDataItem.getCost());
            flatPower = flatPower.add(electricityDataItem.getElectricity());
          } else {
//                        valleyFee = valleyFee.add(electricityDataItem.getCost());
            valleyPower = valleyPower.add(electricityDataItem.getElectricity());
          }
        }
        //2024-11-12新增
        CostPriceRelevancyVo voS =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(),ElectricityTypeEnum.SHARP.name());
        if(voS!=null){
          sharpFee = voS.getPrice().multiply(sharpPower);
        }
        CostPriceRelevancyVo voP =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(),ElectricityTypeEnum.PEAK.name());
        if(voP!=null){
          peakFee = voP.getPrice().multiply(peakPower);
        }
        CostPriceRelevancyVo voF =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(),ElectricityTypeEnum.FLAT.name());
        if(voF!=null){
          flatFee = voF.getPrice().multiply(flatPower);
        }
        CostPriceRelevancyVo voV =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(), ElectricityTypeEnum.VALLEY.name());
        if(voV!=null){
          valleyFee = voV.getPrice().multiply(valleyPower);
        }
      }
      PeakValleyDayDataVO peakAndValleyReportVO = new PeakValleyDayDataVO(startTime, sharpFee, sharpPower,
              peakFee, peakPower, flatFee, flatPower, valleyFee, valleyPower);
      reportVOList.add(peakAndValleyReportVO);
      startTime = DateUtil.offsetMonth(startTime, 1);
    }
    List<PeakValleyLineChatVO> costList = new ArrayList<>();
    List<PeakValleyLineChatVO> powerConsumptionList = new ArrayList<>();
    PeakValleyDayTotalVO peakValleyDayTotalVO = new PeakValleyDayTotalVO();
    AtomicReference<BigDecimal> flatFreeCount = new AtomicReference<>(BigDecimal.ZERO);
    AtomicReference<BigDecimal> tipFreeCount = new AtomicReference<>(BigDecimal.ZERO);
    AtomicReference<BigDecimal> troughFreeCount = new AtomicReference<>(BigDecimal.ZERO);
    AtomicReference<BigDecimal> peakFreeCount = new AtomicReference<>(BigDecimal.ZERO);
    AtomicReference<BigDecimal> flatCount = new AtomicReference<>(BigDecimal.ZERO);
    AtomicReference<BigDecimal> tipCount = new AtomicReference<>(BigDecimal.ZERO);
    AtomicReference<BigDecimal> troughCount = new AtomicReference<>(BigDecimal.ZERO);
    AtomicReference<BigDecimal> peakCount = new AtomicReference<>(BigDecimal.ZERO);
    reportVOList.stream().forEach(r->{
      PeakValleyLineChatVO costVO = new PeakValleyLineChatVO();
      PeakValleyLineChatVO powerConsumptionVO = new PeakValleyLineChatVO();
      /**
       * ç”¨ç”µé‡
       */
      final BigDecimal peakPower = r.getPeakPower();
      final BigDecimal valleyPower = r.getValleyPower();
      final BigDecimal sharpPower = r.getSharpPower();
      final BigDecimal flatPower = r.getFlatPower();
      powerConsumptionVO.setXdata(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,r.getTime()));
      powerConsumptionVO.setYtip(sharpPower);
      powerConsumptionVO.setYpeak(peakPower);
      powerConsumptionVO.setYtrough(valleyPower);
      powerConsumptionVO.setYflat(flatPower);
      powerConsumptionList.add(powerConsumptionVO);
      /**
       * ç”¨ç”µè´¹ç”¨
       */
      final BigDecimal peakFee = r.getPeakFee();
      final BigDecimal valleyFee = r.getValleyFee();
      final BigDecimal sharpFee = r.getSharpFee();
      final BigDecimal flatFee = r.getFlatFee();
      costVO.setXdata(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,r.getTime()));
      costVO.setYtip(sharpFee);
      costVO.setYpeak(peakFee);
      costVO.setYtrough(valleyFee);
      costVO.setYflat(flatFee);
      costList.add(costVO);
      flatCount.set(flatCount.get().add(r.getFlatPower()));
      tipCount.set(tipCount.get().add(r.getSharpPower()));
      troughCount.set(troughCount.get().add(r.getValleyPower()));
      peakCount.set(peakCount.get().add(r.getPeakPower()));
      flatFreeCount.set(flatFreeCount.get().add(r.getFlatFee()));
      tipFreeCount.set(tipFreeCount.get().add(r.getSharpFee()));
      troughFreeCount.set(troughFreeCount.get().add(r.getValleyFee()));
      peakFreeCount.set(peakFreeCount.get().add(r.getPeakFee()));
    });
    peakValleyDayTotalVO.setPeakPowerCost(peakFreeCount.get().doubleValue());
    peakValleyDayTotalVO.setPeakPowerConsumption(peakCount.get().doubleValue());
    peakValleyDayTotalVO.setFlatPowerCost(flatFreeCount.get().doubleValue());
    peakValleyDayTotalVO.setFlatPowerConsumption(flatCount.get().doubleValue());
    peakValleyDayTotalVO.setTipPowerCost(tipFreeCount.get().doubleValue());
    peakValleyDayTotalVO.setTipPowerConsumption(tipCount.get().doubleValue());
    peakValleyDayTotalVO.setTroughPowerCost(troughFreeCount.get().doubleValue());
    peakValleyDayTotalVO.setTroughPowerConsumption(troughCount.get().doubleValue());
    BigDecimal powerTotal = peakCount.get().add(tipCount.get()).add(troughCount.get()).add(flatCount.get());
    if(powerTotal.compareTo(BigDecimal.ZERO) > 0) {
      peakValleyDayTotalVO.setPeakPowerProportion(peakCount.get().divide(powerTotal.multiply(new BigDecimal(0.01)), 2, RoundingMode.HALF_UP).doubleValue());
      peakValleyDayTotalVO.setFlatPowerProportion(flatCount.get().divide(powerTotal.multiply(new BigDecimal(0.01)), 2, RoundingMode.HALF_UP).doubleValue());
      peakValleyDayTotalVO.setTipPowerProportion(tipCount.get().divide(powerTotal.multiply(new BigDecimal(0.01)), 2, RoundingMode.HALF_UP).doubleValue());
      peakValleyDayTotalVO.setTroughPowerProportion(troughCount.get().divide(powerTotal.multiply(new BigDecimal(0.01)), 2, RoundingMode.HALF_UP).doubleValue());
    }else {
      peakValleyDayTotalVO.setPeakPowerProportion(0);
      peakValleyDayTotalVO.setFlatPowerProportion(0);
      peakValleyDayTotalVO.setTipPowerProportion(0);
      peakValleyDayTotalVO.setTroughPowerProportion(0);
    }
    BigDecimal freeTotal = peakFreeCount.get().add(tipFreeCount.get()).add(troughFreeCount.get()).add(flatFreeCount.get());
    if(freeTotal.compareTo(BigDecimal.ZERO) > 0) {
      peakValleyDayTotalVO.setPeakPowerCostProportion(peakFreeCount.get().divide(freeTotal.multiply(new BigDecimal(0.01)), 2, RoundingMode.HALF_UP).doubleValue());
      peakValleyDayTotalVO.setFlatPowerCostProportion(flatFreeCount.get().divide(freeTotal.multiply(new BigDecimal(0.01)), 2, RoundingMode.HALF_UP).doubleValue());
      peakValleyDayTotalVO.setTipPowerCostProportion(tipFreeCount.get().divide(freeTotal.multiply(new BigDecimal(0.01)), 2, RoundingMode.HALF_UP).doubleValue());
      peakValleyDayTotalVO.setTroughPowerCostProportion(troughFreeCount.get().divide(freeTotal.multiply(new BigDecimal(0.01)), 2, RoundingMode.HALF_UP).doubleValue());
    }else {
      peakValleyDayTotalVO.setPeakPowerCostProportion(0);
      peakValleyDayTotalVO.setFlatPowerCostProportion(0);
      peakValleyDayTotalVO.setTipPowerCostProportion(0);
      peakValleyDayTotalVO.setTroughPowerCostProportion(0);
    }
    peakValleyDayTotalVO.setTotalCost(powerTotal.doubleValue());
    peakValleyDayTotalVO.setTotalPowerConsumption(freeTotal.doubleValue());
    peakValleyVO.setTotalVO(peakValleyDayTotalVO);
    peakValleyVO.setCostList(costList);
    peakValleyVO.setPowerConsumptionList(powerConsumptionList);
    return peakValleyVO;
  }
  @Override
  public PeakValleyDayVO segmentAnalysisDay(PeakValleyDTO dto) {
    PeakValleyDayVO peakValleyVO = new PeakValleyDayVO();
    List<PeakValleyDayDataVO> reportVOList = new ArrayList<>();
    //获取nodeId
    ModelNode modelNode = modelNodeService.getModelNodeByModelCodeByIndexCode(dto.getModelCode());
    dto.setNodeId(modelNode.getNodeId());
    // æŸ¥è¯¢æ—¶é—´èŒƒå›´
    Date startTime = DateUtil.beginOfMonth(dto.getQueryTime());
    Date endTime = DateUtil.endOfMonth(startTime);
    String timeType = dto.getTimeType();
    Map<String, List<ElectricityDataItem>> electricityDataMap = new HashMap<>();
    // æŸ¥è¯¢ç‚¹ä½ä¿¡æ¯
    List<ModelNodeIndexInfor> nodeIndexInfoList = modelNodeMapper.selectIndexByModelCodeAndNodeId(dto.getModelCode(), dto.getNodeId());
    if (CollectionUtils.isNotEmpty(nodeIndexInfoList)) {
      Set<String> indexSet = nodeIndexInfoList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toSet());
      List<ElectricityDataItem> dataItemList = electricityDataItemMapper.getDataStatistics(indexSet, startTime, endTime, timeType);
      electricityDataMap = dataItemList.stream()
              .collect(Collectors.groupingBy(li -> DateUtil.formatDateTime(li.getDataTime())));
    }
    while (!startTime.after(endTime)) {
      String mapKey = DateUtil.formatDateTime(startTime);
      List<ElectricityDataItem> dataItemList = electricityDataMap.get(mapKey);
      BigDecimal sharpFee = BigDecimal.ZERO;
      BigDecimal sharpPower = BigDecimal.ZERO;
      BigDecimal peakFee = BigDecimal.ZERO;
      BigDecimal peakPower = BigDecimal.ZERO;
      BigDecimal flatFee = BigDecimal.ZERO;
      BigDecimal flatPower = BigDecimal.ZERO;
      BigDecimal valleyFee = BigDecimal.ZERO;
      BigDecimal valleyPower = BigDecimal.ZERO;
      if (CollectionUtils.isNotEmpty(dataItemList)) {
        for (ElectricityDataItem electricityDataItem : dataItemList) {
          String electricityType = electricityDataItem.getElectricityType();
          if (ElectricityTypeEnum.SHARP.name().equals(electricityType)) {
//                        sharpFee = sharpFee.add(electricityDataItem.getCost());
            sharpPower = sharpPower.add(electricityDataItem.getElectricity());
          } else if (ElectricityTypeEnum.PEAK.name().equals(electricityType)) {
//                        peakFee = peakFee.add(electricityDataItem.getCost());
            peakPower = peakPower.add(electricityDataItem.getElectricity());
          } else if (ElectricityTypeEnum.FLAT.name().equals(electricityType)) {
//                        flatFee = flatFee.add(electricityDataItem.getCost());
            flatPower = flatPower.add(electricityDataItem.getElectricity());
          } else {
//                        valleyFee = valleyFee.add(electricityDataItem.getCost());
            valleyPower = valleyPower.add(electricityDataItem.getElectricity());
          }
        }
        //2024-11-12新增
        CostPriceRelevancyVo voS =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(),ElectricityTypeEnum.SHARP.name());
        if(voS!=null){
          sharpFee = voS.getPrice().multiply(sharpPower);
        }
        CostPriceRelevancyVo voP =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(),ElectricityTypeEnum.PEAK.name());
        if(voP!=null){
          peakFee = voP.getPrice().multiply(peakPower);
        }
        CostPriceRelevancyVo voF =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(),ElectricityTypeEnum.FLAT.name());
        if(voF!=null){
          flatFee = voF.getPrice().multiply(flatPower);
        }
        CostPriceRelevancyVo voV =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(), ElectricityTypeEnum.VALLEY.name());
        if(voV!=null){
          valleyFee = voV.getPrice().multiply(valleyPower);
        }
//                CostPriceRelevancyVo voD =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(), ElectricityTypeEnum.DEEP.name());
//                if(voV!=null){
//                    DeepFee = voV.getPrice().multiply(valleyPower);
//                }
      }
      PeakValleyDayDataVO peakAndValleyReportVO = new PeakValleyDayDataVO(startTime, sharpFee, sharpPower,
              peakFee, peakPower, flatFee, flatPower, valleyFee, valleyPower);
      reportVOList.add(peakAndValleyReportVO);
      switch (TimeType.valueOf(timeType)) {
        case HOUR:
          startTime = DateUtil.offsetHour(startTime, 1);
          break;
        case DAY:
          startTime = DateUtil.offsetDay(startTime, 1);
          break;
        case MONTH:
          startTime = DateUtil.offsetMonth(startTime, 1);
          break;
        default:
          startTime = DateUtil.offsetMonth(startTime, 12);
          break;
      }
    }
    List<PeakValleyLineChatVO> costList = new ArrayList<>();
    List<PeakValleyLineChatVO> powerConsumptionList = new ArrayList<>();
    PeakValleyDayTotalVO peakValleyDayTotalVO = new PeakValleyDayTotalVO();
    AtomicReference<BigDecimal> flatFreeCount = new AtomicReference<>(BigDecimal.ZERO);
    AtomicReference<BigDecimal> tipFreeCount = new AtomicReference<>(BigDecimal.ZERO);
    AtomicReference<BigDecimal> troughFreeCount = new AtomicReference<>(BigDecimal.ZERO);
    AtomicReference<BigDecimal> peakFreeCount = new AtomicReference<>(BigDecimal.ZERO);
    AtomicReference<BigDecimal> flatCount = new AtomicReference<>(BigDecimal.ZERO);
    AtomicReference<BigDecimal> tipCount = new AtomicReference<>(BigDecimal.ZERO);
    AtomicReference<BigDecimal> troughCount = new AtomicReference<>(BigDecimal.ZERO);
    AtomicReference<BigDecimal> peakCount = new AtomicReference<>(BigDecimal.ZERO);
    reportVOList.stream().forEach(r->{
      PeakValleyLineChatVO costVO = new PeakValleyLineChatVO();
      PeakValleyLineChatVO powerConsumptionVO = new PeakValleyLineChatVO();
      /**
       * ç”¨ç”µé‡
       */
      final BigDecimal peakPower = r.getPeakPower();
      final BigDecimal valleyPower = r.getValleyPower();
      final BigDecimal sharpPower = r.getSharpPower();
      final BigDecimal flatPower = r.getFlatPower();
      powerConsumptionVO.setXdata(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,r.getTime()));
      powerConsumptionVO.setYtip(sharpPower);
      powerConsumptionVO.setYpeak(peakPower);
      powerConsumptionVO.setYtrough(valleyPower);
      powerConsumptionVO.setYflat(flatPower);
      powerConsumptionList.add(powerConsumptionVO);
      /**
       * ç”¨ç”µè´¹ç”¨
       */
      final BigDecimal peakFee = r.getPeakFee();
      final BigDecimal valleyFee = r.getValleyFee();
      final BigDecimal sharpFee = r.getSharpFee();
      final BigDecimal flatFee = r.getFlatFee();
      costVO.setXdata(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,r.getTime()));
      costVO.setYtip(sharpFee);
      costVO.setYpeak(peakFee);
      costVO.setYtrough(valleyFee);
      costVO.setYflat(flatFee);
      costList.add(costVO);
      flatCount.set(flatCount.get().add(r.getFlatPower()));
      tipCount.set(tipCount.get().add(r.getSharpPower()));
      troughCount.set(troughCount.get().add(r.getValleyPower()));
      peakCount.set(peakCount.get().add(r.getPeakPower()));
      flatFreeCount.set(flatFreeCount.get().add(r.getFlatFee()));
      tipFreeCount.set(tipFreeCount.get().add(r.getSharpFee()));
      troughFreeCount.set(troughFreeCount.get().add(r.getValleyFee()));
      peakFreeCount.set(peakFreeCount.get().add(r.getPeakFee()));
    });
    peakValleyDayTotalVO.setPeakPowerCost(peakFreeCount.get().doubleValue());
    peakValleyDayTotalVO.setPeakPowerConsumption(peakCount.get().doubleValue());
    peakValleyDayTotalVO.setFlatPowerCost(flatFreeCount.get().doubleValue());
    peakValleyDayTotalVO.setFlatPowerConsumption(flatCount.get().doubleValue());
    peakValleyDayTotalVO.setTipPowerCost(tipFreeCount.get().doubleValue());
    peakValleyDayTotalVO.setTipPowerConsumption(tipCount.get().doubleValue());
    peakValleyDayTotalVO.setTroughPowerCost(troughFreeCount.get().doubleValue());
    peakValleyDayTotalVO.setTroughPowerConsumption(troughCount.get().doubleValue());
    BigDecimal powerTotal = peakCount.get().add(tipCount.get()).add(troughCount.get()).add(flatCount.get());
    if(powerTotal.compareTo(BigDecimal.ZERO) > 0) {
      peakValleyDayTotalVO.setPeakPowerProportion(peakCount.get().divide(powerTotal.multiply(new BigDecimal(0.01)), 2, RoundingMode.HALF_UP).doubleValue());
      peakValleyDayTotalVO.setFlatPowerProportion(flatCount.get().divide(powerTotal.multiply(new BigDecimal(0.01)), 2, RoundingMode.HALF_UP).doubleValue());
      peakValleyDayTotalVO.setTipPowerProportion(tipCount.get().divide(powerTotal.multiply(new BigDecimal(0.01)), 2, RoundingMode.HALF_UP).doubleValue());
      peakValleyDayTotalVO.setTroughPowerProportion(troughCount.get().divide(powerTotal.multiply(new BigDecimal(0.01)), 2, RoundingMode.HALF_UP).doubleValue());
    }else {
      peakValleyDayTotalVO.setPeakPowerProportion(0);
      peakValleyDayTotalVO.setFlatPowerProportion(0);
      peakValleyDayTotalVO.setTipPowerProportion(0);
      peakValleyDayTotalVO.setTroughPowerProportion(0);
    }
    BigDecimal freeTotal = peakFreeCount.get().add(tipFreeCount.get()).add(troughFreeCount.get()).add(flatFreeCount.get());
    if(freeTotal.compareTo(BigDecimal.ZERO) > 0) {
      peakValleyDayTotalVO.setPeakPowerCostProportion(peakFreeCount.get().divide(freeTotal.multiply(new BigDecimal(0.01)), 2, RoundingMode.HALF_UP).doubleValue());
      peakValleyDayTotalVO.setFlatPowerCostProportion(flatFreeCount.get().divide(freeTotal.multiply(new BigDecimal(0.01)), 2, RoundingMode.HALF_UP).doubleValue());
      peakValleyDayTotalVO.setTipPowerCostProportion(tipFreeCount.get().divide(freeTotal.multiply(new BigDecimal(0.01)), 2, RoundingMode.HALF_UP).doubleValue());
      peakValleyDayTotalVO.setTroughPowerCostProportion(troughFreeCount.get().divide(freeTotal.multiply(new BigDecimal(0.01)), 2, RoundingMode.HALF_UP).doubleValue());
    }else {
      peakValleyDayTotalVO.setPeakPowerCostProportion(0);
      peakValleyDayTotalVO.setFlatPowerCostProportion(0);
      peakValleyDayTotalVO.setTipPowerCostProportion(0);
      peakValleyDayTotalVO.setTroughPowerCostProportion(0);
    }
//        peakValleyDayTotalVO.setTotalCost(powerTotal.doubleValue());
//        peakValleyDayTotalVO.setTotalPowerConsumption(freeTotal.doubleValue());
    peakValleyDayTotalVO.setTotalCost(freeTotal.doubleValue());
    peakValleyDayTotalVO.setTotalPowerConsumption(powerTotal.doubleValue());
    peakValleyVO.setTotalVO(peakValleyDayTotalVO);
    peakValleyVO.setCostList(costList);
    peakValleyVO.setPowerConsumptionList(powerConsumptionList);
    return peakValleyVO;
  }
  @Override
  public PeakValleyHourVO segmentAnalysisHour(PeakValleyDTO dto) {
    PeakValleyHourVO peakValleyVO = new PeakValleyHourVO();
    List<PeakValleyHourDataVO> reportVOList = new ArrayList<>();
    //获取nodeId
    ModelNode modelNode = modelNodeService.getModelNodeByModelCodeByIndexCode(dto.getModelCode());
    dto.setNodeId(modelNode.getNodeId());
    // æŸ¥è¯¢æ—¶é—´èŒƒå›´
    Date startTime = DateUtil.beginOfDay(dto.getQueryTime());
    Date endTime = DateUtil.endOfDay(startTime);
    String timeType = dto.getTimeType();
    Map<String, List<ElectricityDataItem>> electricityDataMap = new HashMap<>();
    // æŸ¥è¯¢ç‚¹ä½ä¿¡æ¯
    List<ModelNodeIndexInfor> nodeIndexInfoList = modelNodeMapper.selectIndexByModelCodeAndNodeId(dto.getModelCode(), dto.getNodeId());
    if (CollectionUtils.isNotEmpty(nodeIndexInfoList)) {
      Set<String> indexSet = nodeIndexInfoList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toSet());
      List<ElectricityDataItem> dataItemList = electricityDataItemMapper.getDataStatistics(indexSet, startTime, endTime, timeType);
      electricityDataMap = dataItemList.stream()
              .collect(Collectors.groupingBy(li -> DateUtil.formatDateTime(li.getDataTime())));
    }
    while (!startTime.after(endTime)) {
      String mapKey = DateUtil.formatDateTime(startTime);
      List<ElectricityDataItem> dataItemList = electricityDataMap.get(mapKey);
      BigDecimal sharpFee = BigDecimal.ZERO;
      BigDecimal sharpPower = BigDecimal.ZERO;
      BigDecimal peakFee = BigDecimal.ZERO;
      BigDecimal peakPower = BigDecimal.ZERO;
      BigDecimal flatFee = BigDecimal.ZERO;
      BigDecimal flatPower = BigDecimal.ZERO;
      BigDecimal valleyFee = BigDecimal.ZERO;
      BigDecimal valleyPower = BigDecimal.ZERO;
      if (CollectionUtils.isNotEmpty(dataItemList)) {
        for (ElectricityDataItem electricityDataItem : dataItemList) {
          String electricityType = electricityDataItem.getElectricityType();
          if (ElectricityTypeEnum.SHARP.name().equals(electricityType)) {
//                        sharpFee = sharpFee.add(electricityDataItem.getCost());
            sharpPower = sharpPower.add(electricityDataItem.getElectricity());
          } else if (ElectricityTypeEnum.PEAK.name().equals(electricityType)) {
//                        peakFee = peakFee.add(electricityDataItem.getCost());
            peakPower = peakPower.add(electricityDataItem.getElectricity());
          } else if (ElectricityTypeEnum.FLAT.name().equals(electricityType)) {
//                        flatFee = flatFee.add(electricityDataItem.getCost());
            flatPower = flatPower.add(electricityDataItem.getElectricity());
          } else {
//                        valleyFee = valleyFee.add(electricityDataItem.getCost());
            valleyPower = valleyPower.add(electricityDataItem.getElectricity());
          }
        }
        //2024-11-12新增
        CostPriceRelevancyVo voS =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(),ElectricityTypeEnum.SHARP.name());
        if(voS!=null){
          sharpFee = voS.getPrice().multiply(sharpPower);
        }
        CostPriceRelevancyVo voP =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(),ElectricityTypeEnum.PEAK.name());
        if(voP!=null){
          peakFee = voP.getPrice().multiply(peakPower);
        }
        CostPriceRelevancyVo voF =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(),ElectricityTypeEnum.FLAT.name());
        if(voF!=null){
          flatFee = voF.getPrice().multiply(flatPower);
        }
        CostPriceRelevancyVo voV =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(), ElectricityTypeEnum.VALLEY.name());
        if(voV!=null){
          valleyFee = voV.getPrice().multiply(valleyPower);
        }
      }
      PeakValleyHourDataVO peakAndValleyReportVO = new PeakValleyHourDataVO(startTime, sharpFee, sharpPower,
              peakFee, peakPower, flatFee, flatPower, valleyFee, valleyPower);
      reportVOList.add(peakAndValleyReportVO);
      switch (TimeType.valueOf(timeType)) {
        case HOUR:
          startTime = DateUtil.offsetHour(startTime, 1);
          break;
        case DAY:
          startTime = DateUtil.offsetDay(startTime, 1);
          break;
        case MONTH:
          startTime = DateUtil.offsetMonth(startTime, 1);
          break;
        default:
          startTime = DateUtil.offsetMonth(startTime, 12);
          break;
      }
    }
    peakValleyVO.setDataList(reportVOList);
    List<PeakValleyLineChatVO> peakValleyLineChatVOS = new ArrayList<>();
    AtomicReference<BigDecimal> flatCount = new AtomicReference<>(BigDecimal.ZERO);
    AtomicReference<BigDecimal> tipCount = new AtomicReference<>(BigDecimal.ZERO);
    AtomicReference<BigDecimal> troughCount = new AtomicReference<>(BigDecimal.ZERO);
    AtomicReference<BigDecimal> peakCount = new AtomicReference<>(BigDecimal.ZERO);
    reportVOList.stream().forEach(r->{
      PeakValleyLineChatVO lineChatVO = new PeakValleyLineChatVO();
      lineChatVO.setXdata(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,r.getTime()));
      lineChatVO.setYtip(r.getSharpPower());
      lineChatVO.setYflat(r.getFlatPower());
      lineChatVO.setYtrough(r.getValleyPower());
      lineChatVO.setYpeak(r.getPeakPower());
      peakValleyLineChatVOS.add(lineChatVO);
      BigDecimal flat  = flatCount.get().add(r.getFlatPower());
      flatCount.set(flat);
      BigDecimal tip  = tipCount.get().add(r.getSharpPower());
      tipCount.set(tip);
      BigDecimal trough  = troughCount.get().add(r.getValleyPower());
      troughCount.set(trough);
      BigDecimal peak  = peakCount.get().add(r.getPeakPower());
      peakCount.set(peak);
    });
    PeakValleyPieChatVO peakValleyPieChatVO = new PeakValleyPieChatVO();
    BigDecimal total = peakCount.get().add(tipCount.get()).add(troughCount.get()).add(flatCount.get()).multiply(new BigDecimal(0.01));
    if(total.compareTo(BigDecimal.ZERO) > 0) {
      peakValleyPieChatVO.setPeak(peakCount.get().divide(total, 2, RoundingMode.HALF_UP).toString());
      peakValleyPieChatVO.setFlat(flatCount.get().divide(total, 2, RoundingMode.HALF_UP).toString());
      peakValleyPieChatVO.setTip(tipCount.get().divide(total, 2, RoundingMode.HALF_UP).toString());
      peakValleyPieChatVO.setTrough(troughCount.get().divide(total, 2, RoundingMode.HALF_UP).toString());
    }else {
      peakValleyPieChatVO.setPeak("0");
      peakValleyPieChatVO.setFlat("0");
      peakValleyPieChatVO.setTip("0");
      peakValleyPieChatVO.setTrough("0");
    }
    peakValleyVO.setPieChat(peakValleyPieChatVO);
    peakValleyVO.setLineChat(peakValleyLineChatVOS);
    return peakValleyVO;
  }
  /**
   * èƒ½è€—科室排名前10
   * @param modelCode
   * @param timeType
   * @return
   */
  @Override
  public List<RankingEnergyData> energyConsumptionRanking(String modelCode, String timeType) {
    List<RankingEnergyData> energyDataList = new ArrayList<>();
    String nodeCategory = "2";
    LambdaQueryWrapper<ModelNode> modelNodeLambdaQueryWrapper = new LambdaQueryWrapper<>();
    modelNodeLambdaQueryWrapper.eq(ModelNode::getModelCode,modelCode);
    modelNodeLambdaQueryWrapper.eq(ModelNode::getNodeCategory,nodeCategory);
    List<ModelNode> modelNodeList = modelNodeMapper.selectList(modelNodeLambdaQueryWrapper);
    if(CollectionUtils.isEmpty(modelNodeList)){
      return energyDataList;
    }
    final List<String> nodeIds = modelNodeList.stream().map(ModelNode::getNodeId).collect(Collectors.toList());
    List<ModelNodeIndexInfor> nodeIndexInforList = modelNodeMapper.selectIndexByNodeIds(modelCode ,nodeIds);
    final Map<String, String> nodeNameMap = new HashMap<>();
    nodeIndexInforList.forEach(n->{
      final String id = n.getNodeId();
      final String name = n.getName();
      if(!nodeNameMap.containsKey(id)){
        nodeNameMap.put(id,name);
      }
    });
    // æŒ‰ç…§ç‚¹ä½è¿›è¡Œåˆ†ç»„
    Map<String, List<ModelNodeIndexInfor>> nodeIndexMap = nodeIndexInforList.stream().collect(
            Collectors.groupingBy(ModelNodeIndexInfor::getNodeId));
    final List<String> eneryIdList = nodeIndexInforList.stream().map(ModelNodeIndexInfor::getEnergyId).distinct().collect(Collectors.toList());
    final LambdaQueryWrapper<SysEnergy> queryWrapper = new LambdaQueryWrapper<>();
    queryWrapper.in(CollectionUtils.isNotEmpty(eneryIdList),SysEnergy::getEnersno,eneryIdList);
    final List<SysEnergy> sysEnergies = sysEnergyMapper.selectList(queryWrapper);
    //能源编号和能源折标系数
    final Map<String, Object> energyCoefficientMap = sysEnergies.stream().collect(Collectors.toMap(SysEnergy::getEnersno, SysEnergy::getCoefficient));
    //index和能源
    final Map<String, String> indexIdEnergyIdMap = new HashMap<>();
    nodeIndexInforList.forEach(n->{
      final String indexId = n.getIndexId();
      final String energyId = n.getEnergyId();
      if(!indexIdEnergyIdMap.containsKey(indexId)){
        indexIdEnergyIdMap.put(indexId,energyId);
      }
    });
    List<String> indexIds = nodeIndexInforList.stream().filter(l -> StringUtils.isNotEmpty(l.getIndexId())).map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
    Date queryTime = new Date();
    Date beginTime;
    Date endTime;
    String shixuTimeType;
    if (TimeType.DAY.name().equals(timeType)) {
      beginTime = DateUtil.beginOfDay(queryTime);
      endTime = DateUtil.endOfDay(queryTime);
      shixuTimeType = TimeType.HOUR.name();
      // æœˆ
    } else if (TimeType.MONTH.name().equals(timeType)) {
      beginTime = DateUtil.beginOfMonth(queryTime);
      endTime = DateUtil.endOfMonth(queryTime);
      shixuTimeType = TimeType.DAY.name();
      // å¹´
    } else {
      beginTime = DateUtil.beginOfYear(queryTime);
      endTime = DateUtil.endOfYear(queryTime);
      shixuTimeType = TimeType.MONTH.name();
    }
    // æ ¹æ®indexId查询dataItem
    List<DataItem> dataItemList = new ArrayList<>();
    if(CollectionUtils.isNotEmpty(indexIds)) {
      dataItemList = dataItemService.getDataItemTimeRangeInforByIndexIds(beginTime, endTime, shixuTimeType, indexIds);
    }
    Map<String, List<DataItem>> dataItemMap = dataItemList.stream().collect(Collectors.groupingBy(DataItem::getIndexId));
    Map<String,BigDecimal> resultMap = new HashMap<>();
    nodeIndexMap.forEach((key, value) -> {
      // æ‰¾å‡ºindexIds
      List<String> indexIdList = value.stream().map(ModelNodeIndexInfor::getIndexId).filter(Objects::nonNull).collect(Collectors.toList());
      if (null!=indexIdList &&!indexIdList.isEmpty()){
        indexIdList.forEach(indexId -> {
          final List<DataItem> dataItems = dataItemMap.get(indexId);
          final String energyId = indexIdEnergyIdMap.get(indexId);
          BigDecimal coefficient = (BigDecimal) energyCoefficientMap.get(energyId);
        if (coefficient == null && StringUtils.isBlank(energyId)) {
          EnergyIndex energyIndex = energyIndexMapper.selectEnergyIndexById(indexId);
          MeterImplement meterImplement = meterImplementMapper.selectMeterImplementById(energyIndex.getMeterId());
          coefficient = (BigDecimal) energyCoefficientMap.get(meterImplement.getEnergyType());
        }
          if (CollectionUtils.isNotEmpty(dataItems)) {
            BigDecimal sum = BigDecimal.valueOf(dataItems.stream()
                    .mapToDouble(DataItem::getValue).sum()).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP).multiply(coefficient);
            if (resultMap.containsKey(key)) {
              resultMap.put(key, resultMap.get(key).add(sum));
            } else {
              resultMap.put(key, sum);
            }
          }
        });
      }
    });
    resultMap.forEach((key,value)->{
      RankingEnergyData rankingEnergyData = new RankingEnergyData();
      rankingEnergyData.setNodeId(key);
      rankingEnergyData.setNodeName(nodeNameMap.get(key));
      rankingEnergyData.setEnergyConsumption(value.doubleValue());
      energyDataList.add(rankingEnergyData);
    });
    Collections.sort(energyDataList, Comparator.comparingDouble((RankingEnergyData item) -> item.getEnergyConsumption()).reversed());
    // èŽ·å–å‰10条记录
    List<RankingEnergyData> top5Items = energyDataList.subList(0, Math.min(10, energyDataList.size()));
    return top5Items;
  }
  /**
   * å„个车间能耗分析
   * @param timeType
   * @param modelCode
   * @return
   */
  @Override
  public FactoryEnergyConsumptionVo factoryEnergyConsumption(String timeType, String modelCode) {
    ModelNode modelNode = modelNodeService.getModelNodeByModelCodeByIndexCode(modelCode);
    //顶部本月综合能耗
    FactoryEnergyConsumptionVo energyConsumptionVo=new FactoryEnergyConsumptionVo();
    final List<EnergyChainYoyVO> current = energyConsumptionSummation(timeType, modelCode);
    //本月能耗费用
    BigDecimal monthEnergyAmount=getTotalConsumption(modelCode,modelNode.getNodeId(),timeType);
    energyConsumptionVo.setMonthEnergyAmount(monthEnergyAmount);
    //各个车间能耗
    final List<FactoryEnergyConsumptionItemVo> factoryCurrent = factoryEnergyConData(timeType, modelCode);
    EnergyChainYoyVO homeEnergyStatisticsVO = current.get(0);
    energyConsumptionVo.setItemVoList(factoryCurrent);//
    energyConsumptionVo.setMonthConsumption(homeEnergyStatisticsVO.getCount());
    energyConsumptionVo.setCEmission(BigDecimal.ZERO);
    energyConsumptionVo.setUseEnergyIndex(BigDecimal.ZERO);
    return energyConsumptionVo;
  }
  /**
   * è´­å…¥æ¶ˆè€—对比
   * @param modelCode
   * @param timeType
   * @return
   */
  @Override
  public List<PurchaseConsumptionVo> purchaseConsumption(String modelCode, String timeType) {
    ModelNode modelNode = modelNodeService.getModelNodeByModelCodeByIndexCode(modelCode);
    List<PurchaseConsumptionVo> voList=new ArrayList<>();
    String queryTime=null;
    if (TimeType.DAY.name().equals(timeType)) {
      queryTime=DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,new Date());
      // æœˆ
    } else if (TimeType.MONTH.name().equals(timeType)) {
      queryTime=DateUtils.parseDateToStr(DateUtils.YYYY_MM,new Date());
      // å¹´
    } else {
      queryTime=DateUtils.parseDateToStr(DateUtils.YYYY,new Date());
    }
    //获取购入量
    LambdaQueryWrapper<CostElectricityInput> queryWrapper = new LambdaQueryWrapper<>();
    queryWrapper.like(CostElectricityInput::getType,timeType);
    queryWrapper.like(CostElectricityInput::getTime,queryTime);
    List<CostElectricityInput> list=electricityInputMapper.selectList(queryWrapper);
    //获取消耗量
    BigDecimal totalConsumption=getTotalConsumption(modelCode,modelNode.getNodeId(),timeType);
    //写入实体类
    PurchaseConsumptionVo vo=new PurchaseConsumptionVo();
    vo.setEnergyNo("electric");
    vo.setEnergyName("电");
    vo.setConsumptionSum(totalConsumption.divide(BigDecimal.valueOf(1000),RoundingMode.HALF_UP));
    if (!list.isEmpty()){
      vo.setPurchaseSum(list.get(0).getElectricityFee().divide(BigDecimal.valueOf(1000),RoundingMode.HALF_UP));
    }else{
      vo.setPurchaseSum(BigDecimal.ZERO);
    }
    voList.add(vo);
    return voList;
  }
  /**
   * èƒ½æºæˆæœ¬å æ¯”
   * @param modelCode
   * @param timeType
   * @return
   */
  @Override
  public List<PurchaseConsumptionVo> costProp(String modelCode, String timeType) {
    List<PurchaseConsumptionVo> list=new ArrayList<>();
    ModelNode modelNode = modelNodeService.getModelNodeByModelCodeByIndexCode(modelCode);
    BigDecimal totalConsumption=getTotalConsumption(modelCode, modelNode.getNodeId(), timeType);
    PurchaseConsumptionVo vo=new PurchaseConsumptionVo();
    vo.setEnergyNo("electric");
    vo.setEnergyName("电");
    vo.setConsumptionSum(totalConsumption.divide(BigDecimal.valueOf(10000),RoundingMode.HALF_UP));
    list.add(vo);
    return list;
  }
  /**
   * æ ¹æ®å°–峰平谷获取消耗电量金额
   * @param modelCode
   * @param nodeId
   * @param timeType
   * @return
   */
  public BigDecimal getTotalConsumption(String modelCode,String nodeId,String timeType){
    BigDecimal totalConsumption = BigDecimal.ZERO;
    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    Date queryTime =calendar.getTime();
    Date startTime =new Date();
    Date endTime =new Date();
    if (TimeType.DAY.name().equals(timeType)) {
      startTime = DateUtil.beginOfDay(queryTime);
      endTime = DateUtil.endOfDay(queryTime);
      // æœˆ
    } else if (TimeType.MONTH.name().equals(timeType)) {
      calendar.set(Calendar.DATE, 1);
      startTime = DateUtil.beginOfMonth(queryTime);
      endTime = DateUtil.endOfMonth(queryTime);
      // å¹´
    } else {
      calendar.set(Calendar.DATE, 1);
      startTime = DateUtil.beginOfYear(queryTime);
      endTime = DateUtil.endOfYear(queryTime);
    }
    Map<String, List<ElectricityDataItem>> electricityDataMap = new HashMap<>();
// æŸ¥è¯¢ç‚¹ä½ä¿¡æ¯
    List<ModelNodeIndexInfor> nodeIndexInfoList = modelNodeMapper.selectIndexByModelCodeAndNodeId(modelCode, nodeId);
    if (CollectionUtils.isNotEmpty(nodeIndexInfoList)) {
      Set<String> indexSet = nodeIndexInfoList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toSet());
      List<ElectricityDataItem> dataItemList = electricityDataItemMapper.getDataStatistics(indexSet, startTime,endTime , timeType);
      electricityDataMap = dataItemList.stream()
              .collect(Collectors.groupingBy(li -> DateUtil.formatDateTime(li.getDataTime())));
    }
    while (!startTime.after(endTime)) {
      String mapKey = DateUtil.formatDateTime(startTime);
      List<ElectricityDataItem> dataItemList = electricityDataMap.get(mapKey);
      BigDecimal sharpFee = BigDecimal.ZERO;
      BigDecimal sharpPower = BigDecimal.ZERO;
      BigDecimal peakFee = BigDecimal.ZERO;
      BigDecimal peakPower = BigDecimal.ZERO;
      BigDecimal flatFee = BigDecimal.ZERO;
      BigDecimal flatPower = BigDecimal.ZERO;
      BigDecimal valleyFee = BigDecimal.ZERO;
      BigDecimal valleyPower = BigDecimal.ZERO;
      if (CollectionUtils.isNotEmpty(dataItemList)) {
        for (ElectricityDataItem electricityDataItem : dataItemList) {
          String electricityType = electricityDataItem.getElectricityType();
          if (ElectricityTypeEnum.SHARP.name().equals(electricityType)) {
            sharpPower = sharpPower.add(electricityDataItem.getElectricity());
          } else if (ElectricityTypeEnum.PEAK.name().equals(electricityType)) {
            peakPower = peakPower.add(electricityDataItem.getElectricity());
          } else if (ElectricityTypeEnum.FLAT.name().equals(electricityType)) {
            flatPower = flatPower.add(electricityDataItem.getElectricity());
          } else {
            valleyPower = valleyPower.add(electricityDataItem.getElectricity());
          }
        }
        //2024-11-12新增
        CostPriceRelevancyVo voS =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(nodeId,ElectricityTypeEnum.SHARP.name());
        if(voS!=null){
          sharpFee = voS.getPrice().multiply(sharpPower);
        }
        CostPriceRelevancyVo voP =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(nodeId,ElectricityTypeEnum.PEAK.name());
        if(voP!=null){
          peakFee = voP.getPrice().multiply(peakPower);
        }
        CostPriceRelevancyVo voF =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(nodeId,ElectricityTypeEnum.FLAT.name());
        if(voF!=null){
          flatFee = voF.getPrice().multiply(flatPower);
        }
        CostPriceRelevancyVo voV =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(nodeId, ElectricityTypeEnum.VALLEY.name());
        if(voV!=null){
          valleyFee = voV.getPrice().multiply(valleyPower);
        }
      }
      totalConsumption = totalConsumption.add(sharpFee).add(peakFee).add(flatFee).add(valleyFee);
      if (TimeType.DAY.name().equals(timeType)) {
        startTime = DateUtil.offsetDay(startTime, 1);
        // æœˆ
      } else if (TimeType.MONTH.name().equals(timeType)) {
        startTime = DateUtil.offsetMonth(startTime, 1);
        // å¹´
      } else {
        startTime = DateUtil.offsetMonth(startTime, 12);
      }
    }
    return totalConsumption;
  }
  /**
   * æ ¹æ®åŽ‚åŒºã€èƒ½æºç±»åž‹åˆ†ç»„èŽ·å–æ¯ä¸ªåŽ‚åŒºã€æ¯ç§èƒ½æºç±»åž‹çš„æ¶ˆè€—é‡
   * @param timeType
   * @param modelCode
   * @return
   */
  public List<FactoryEnergyConsumptionItemVo> factoryEnergyConData(String timeType, String modelCode){
    List<FactoryEnergyConsumptionItemVo> energyDataList=new ArrayList<>();
    //厂区固定为当前6个
    List<String> fixedNodeIds=new ArrayList<>();
    fixedNodeIds.add("d9a155d2-b2dd-4a70-a00b-f8ab5be91f00");//冶一
    fixedNodeIds.add("58dcb139-c943-41fe-a764-7cf79f987c9f");//冶二
    fixedNodeIds.add("dca20897-5977-40ae-a28a-88a6acdee335");//冶三
    fixedNodeIds.add("4912c751-0611-4f4b-afce-0f58629512b7");//精炼
    fixedNodeIds.add("8eef471f-880c-4636-a428-620a4d2ccd5d");//矿业
    fixedNodeIds.add("6d6a0412-7c6d-4654-9cb3-0079655e23e5");//恒邦新材料
    LambdaQueryWrapper<ModelNode> nodeLambdaQueryWrapper = new LambdaQueryWrapper<>();
    nodeLambdaQueryWrapper.eq(ModelNode::getModelCode,modelCode);
    nodeLambdaQueryWrapper.in(ModelNode::getNodeId,fixedNodeIds);
    List<ModelNode> nodeList=modelNodeMapper.selectList(nodeLambdaQueryWrapper);
    if  (nodeList.isEmpty()){
      throw new RuntimeException("未查询到6个厂区信息!");
    }
    Map<String,ModelNode> nodeMap=nodeList.stream().collect(Collectors.toMap(ModelNode::getNodeId,x->x));
    List<ModelNodeIndexInfor> indexList=statisticMapper.getModelNodeIndexIdByFixedNodeIds(modelCode,fixedNodeIds);
    // æ ¹æ®åŽ‚åŒºåˆ†ç»„
    Map<String, List<ModelNodeIndexInfor>> nodeIndexMap = indexList.stream().collect(
            Collectors.groupingBy(ModelNodeIndexInfor::getNodeId));
    //查询所有能源类型
    final List<String> eneryIdList = indexList.stream().map(ModelNodeIndexInfor::getEnergyId).distinct().collect(Collectors.toList());
    final LambdaQueryWrapper<SysEnergy> queryWrapper = new LambdaQueryWrapper<>();
    queryWrapper.in(CollectionUtils.isNotEmpty(eneryIdList),SysEnergy::getEnersno,eneryIdList);
    //index和能源
    final Map<String, String> indexIdEnergyIdMap = new HashMap<>();
    indexList.forEach(n->{
      final String indexId = n.getIndexId();
      final String energyId = n.getEnergyId();
      if(!indexIdEnergyIdMap.containsKey(indexId)){
        indexIdEnergyIdMap.put(indexId,energyId);
      }
    });
    List<String> indexIds = indexList.stream().filter(l -> StringUtils.isNotEmpty(l.getIndexId())).map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
//        Date queryTime = new Date();
    Date queryTime = new Date();
    Date beginTime;
    Date endTime;
    String shixuTimeType;
    if (TimeType.DAY.name().equals(timeType)) {
      beginTime = DateUtil.beginOfDay(queryTime);
      endTime = DateUtil.endOfDay(queryTime);
      shixuTimeType = TimeType.HOUR.name();
      // æœˆ
    } else if (TimeType.MONTH.name().equals(timeType)) {
      beginTime = DateUtil.beginOfMonth(queryTime);
      endTime = DateUtil.endOfMonth(queryTime);
      shixuTimeType = TimeType.DAY.name();
      // å¹´
    } else {
      beginTime = DateUtil.beginOfYear(queryTime);
      endTime = DateUtil.endOfYear(queryTime);
      shixuTimeType = TimeType.MONTH.name();
    }
    // æ ¹æ®indexId查询dataItem
    List<DataItem> dataItemList = new ArrayList<>();
    if(CollectionUtils.isNotEmpty(indexIds)) {
      dataItemList = dataItemService.getDataItemTimeRangeInforByIndexIds(beginTime, endTime, shixuTimeType, indexIds);
    }
    Map<String, List<DataItem>> dataItemMap = dataItemList.stream().collect(Collectors.groupingBy(DataItem::getIndexId));
    final List<SysEnergy> sysEnergies = sysEnergyMapper.selectList(queryWrapper);
    //能源编号和能源折标系数
    final Map<String, SysEnergy> energyCoefficientMap = sysEnergies.stream().collect(Collectors.toMap(SysEnergy::getEnersno,x->x));
    //获取数据:nodeMap
//    nodeIndexMap.forEach((key, value) -> {
    nodeMap.forEach((key,nodeItem)->{
      if  (!nodeIndexMap.containsKey(key)){
        FactoryEnergyConsumptionItemVo voData = new FactoryEnergyConsumptionItemVo();
        voData.setNodeId(key);
        voData.setNodeName(nodeItem.getName());
        BigDecimal kgceCount=BigDecimal.ZERO;
        BigDecimal kgceTonCount=BigDecimal.ZERO;
        voData.setKgceCount(kgceCount);
        voData.setKgceTonCount(kgceTonCount);
        voData.setEnergyItemList(new ArrayList<>());
        energyDataList.add(voData);
        return;
      }
      //node和index关联集合
      List<ModelNodeIndexInfor> value=nodeIndexMap.get(key);
      List<HomeEnergyStatisticsVO> itemVo=new ArrayList<>();
      //根据能源类型分组
      Map<String, List<ModelNodeIndexInfor>> sysEnergyIds = value.stream().collect(
              Collectors.groupingBy(ModelNodeIndexInfor::getEnergyId));
      if (!sysEnergyIds.isEmpty()) {
        //遍历
        for (Map.Entry<String, List<ModelNodeIndexInfor>> entry : sysEnergyIds.entrySet()) {
          String energyIndex = entry.getKey();
          List<ModelNodeIndexInfor> energyValue = entry.getValue();
          if (energyCoefficientMap.containsKey(energyIndex)) {
            SysEnergy sysEnergy = energyCoefficientMap.get(energyIndex);
            HomeEnergyStatisticsVO item = new HomeEnergyStatisticsVO();
            item.setEnergyNo(sysEnergy.getEnersno());
            item.setEnergyName(sysEnergy.getEnername());
            item.setEnergyUnit(sysEnergy.getMuid());
            item.setCoefficient(sysEnergy.getCoefficient().toString());
            BigDecimal totalConsumption = BigDecimal.ZERO;
            BigDecimal totalCount = BigDecimal.ZERO;
            //合计值
            for (ModelNodeIndexInfor valueItem:entry.getValue()){
              List<DataItem> dataItems = dataItemMap.get(valueItem.getIndexId());
              if (CollectionUtils.isNotEmpty(dataItems)) {
                BigDecimal sum = BigDecimal.valueOf(dataItems.stream()
                        .mapToDouble(DataItem::getValue).sum()).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP).multiply(sysEnergy.getCoefficient());
                totalConsumption = totalConsumption.add(sum);
                totalCount = totalCount.add(BigDecimal.valueOf(dataItems.stream()
                        .mapToDouble(DataItem::getValue).sum()).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP));
              }
              ;
            }
            item.setTonCount(totalConsumption.doubleValue());
            item.setCount(totalCount.doubleValue());
            itemVo.add(item);
          }
        }
      };
      FactoryEnergyConsumptionItemVo voData = new FactoryEnergyConsumptionItemVo();
      voData.setNodeId(key);
      voData.setNodeName(nodeItem.getName());
      BigDecimal kgceCount=BigDecimal.ZERO;
      BigDecimal kgceTonCount=BigDecimal.ZERO;
      if (!itemVo.isEmpty()){
        kgceCount=BigDecimal.valueOf(itemVo.stream().mapToDouble(HomeEnergyStatisticsVO::getCount).sum()).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
        kgceTonCount=BigDecimal.valueOf(itemVo.stream().mapToDouble(HomeEnergyStatisticsVO::getTonCount).sum()).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
      }
      voData.setKgceCount(kgceCount);
      voData.setKgceTonCount(kgceTonCount);
      voData.setEnergyItemList(itemVo);
      energyDataList.add(voData);
    });
    return energyDataList;
  }
  private List<HomeEnergyStatisticsVO> getEnergyTotalByTime(String timeType, String modelCode, Date queryTime) {
    List<HomeEnergyStatisticsVO> voList = new ArrayList<>();
    Date beginTime;
    Date endTime;
    String shixuTimeType;
    if (TimeType.DAY.name().equals(timeType)) {
      beginTime = DateUtil.beginOfDay(queryTime);
      endTime = DateUtil.endOfDay(beginTime);
      shixuTimeType = TimeType.HOUR.name();
      // æœˆ
    } else if (TimeType.MONTH.name().equals(timeType)) {
      beginTime = DateUtil.beginOfMonth(queryTime);
      endTime = DateUtil.endOfMonth(beginTime);
      shixuTimeType = TimeType.DAY.name();
      // å¹´
    } else {
      beginTime = DateUtil.beginOfYear(queryTime);
      endTime = DateUtil.endOfYear(beginTime);
      shixuTimeType = TimeType.MONTH.name();
    }
    // æŸ¥è¯¢æ‰€æœ‰èƒ½æºç±»åž‹
    List<SysEnergy> sysEnergies = sysEnergyMapper.selectSysEnergyList(new SysEnergy());
    voList = sysEnergies.stream().map(dict -> {
      HomeEnergyStatisticsVO vo = new HomeEnergyStatisticsVO();
      vo.setEnergyName(dict.getEnername());
      vo.setEnergyNo(dict.getEnersno());
      vo.setEnergyUnit(dict.getMuid());
      vo.setCount(0D);
      vo.setTonCount(0D);
      vo.setCoefficient(dict.getCoefficient().toString());
      return vo;
    }).sorted(Comparator.comparing(HomeEnergyStatisticsVO::getEnergyName)).collect(Collectors.toList());
    // é€šè¿‡code获取modelnode对应index信息
    ModelNode modelNode = modelNodeService.getModelNodeByModelCodeByIndexCode(modelCode);
    if (ObjectUtils.isEmpty(modelNode)) {
      return voList;
    }
    List<ModelNodeIndexInfor> inforList = modelNodeService.getModelNodeIndexIdRelationInforByNodeId(modelNode.getNodeId());
    List<String> indexIds = inforList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
    // é€šè¿‡indexIds找data_Item数据
    List<DataItem> itemList = dataItemService.getDataItemTimeRangeInforByIndexIds(beginTime, endTime, shixuTimeType, indexIds);
    // æŸ¥è¯¢ç‚¹ä½è¯¦ç»†ä¿¡æ¯
    List<EnergyIndex> energyIndexInforList = energyIndexService.getEnergyIndexByIds(indexIds);
    // èŽ·å–ç‚¹ä½èƒ½æºç±»åž‹
    Map<String, List<String>> energyTypeMap = energyIndexInforList.stream()
            .filter(l -> StringUtils.isNotEmpty(l.getEnergyId())).collect(Collectors.groupingBy(
                    EnergyIndex::getEnergyId, Collectors.mapping(EnergyIndex::getIndexId, Collectors.toList())
            ));
    for (HomeEnergyStatisticsVO ratioVO : voList) {
      List<String> indexs = energyTypeMap.get(ratioVO.getEnergyNo());
      if (CollectionUtils.isEmpty(indexs)) {
        ratioVO.setCount(0D);
      }else {
        // æ‰¾åˆ°åˆè®¡å€¼
        double doubleCount = itemList.stream().filter(li -> indexs.contains(li.getIndexId())).mapToDouble(DataItem::getValue).sum();
        ratioVO.setCount(format2Double(doubleCount));
      }
    }
    return voList;
  }
  private double format2Double(double averageEnergy) {
    // åˆ›å»ºDecimalFormat对象,设置保留两位小数
    DecimalFormat df = new DecimalFormat("#.00");
    // æ ¼å¼åŒ–结果
    String formattedResult = df.format(averageEnergy);
    return Double.valueOf(formattedResult);
  }
}
zhitan-system/src/main/java/com/zhitan/energydata/vo/EnergyChainYoyVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,53 @@
package com.zhitan.energydata.vo;
import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
@Getter
@Setter
public class EnergyChainYoyVO {
    /**
     * èƒ½æºç±»åž‹ç¼–号
     */
    private String energyNo;
    /**
     * èƒ½æºç±»åž‹åç§°
     */
    private String energyName;
    /**
     * èƒ½æºå•位
     */
    private String energyUnit;
    /**
     * åˆè®¡å€¼
     */
    private BigDecimal samePeriodCount;
    /**
     * åˆè®¡å€¼
     */
    private BigDecimal count;
    /**
     * åŒæ¯”
     */
    private BigDecimal tongbi;
    /**
     * çŽ¯æ¯”
     */
    private BigDecimal huanbi;
    /** ç­‰ä»·æŠ˜æ ‡ç³»æ•° */
    private String coefficient;
    /**
     * è½¬æ¢ä¸ºå¨æ ‡ç…¤
     */
    private BigDecimal tonCount;
}
zhitan-system/src/main/java/com/zhitan/energydata/vo/FactoryEnergyConsumptionItemVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.zhitan.energydata.vo;
import com.zhitan.home.domain.vo.HomeEnergyStatisticsVO;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class FactoryEnergyConsumptionItemVo {
    /**
     * åŽ‚åŒºä¸»é”®
     */
    private String nodeId;
    /**
     * åŽ‚åŒºåç§°
     */
    private String nodeName;
    private BigDecimal kgceCount;
    private BigDecimal kgceTonCount;
    List<HomeEnergyStatisticsVO> energyItemList;
}
zhitan-system/src/main/java/com/zhitan/energydata/vo/FactoryEnergyConsumptionVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
package com.zhitan.energydata.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class FactoryEnergyConsumptionVo {
    /**
     * æœ¬æœˆç»¼åˆèƒ½è€—
     */
    private BigDecimal monthConsumption;
    /**
     * èƒ½è€—费用
     */
    private BigDecimal monthEnergyAmount;
    /**
     * ç¢³æŽ’放
     */
    private BigDecimal cEmission;
    /**
     * ç”¨èƒ½å®ŒæˆæŒ‡æ ‡
     */
    private BigDecimal useEnergyIndex;
    /**
     * å„厂区数据
     *
     */
    private List<FactoryEnergyConsumptionItemVo> itemVoList;
}
zhitan-system/src/main/java/com/zhitan/energydata/vo/PurchaseConsumptionVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
package com.zhitan.energydata.vo;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class PurchaseConsumptionVo {
    /**
     * èƒ½æºç±»åž‹ç¼–号
     */
    private String energyNo;
    /**
     * èƒ½æºç±»åž‹åç§°
     */
    private String energyName;
    /**
     * èƒ½æºå•位
     */
    private String energyUnit;
    /**
     * è´­å…¥æˆæœ¬
     */
    private BigDecimal purchaseSum;
    /**
     * æ¶ˆè€—成本
     */
    private BigDecimal consumptionSum;
}
zhitan-system/src/main/java/com/zhitan/gatewaysetting/domain/GatewaySetting.java
@@ -39,7 +39,7 @@
    private String installLocation;
    /** ip地址 */
    @Excel(name = "ip地址")
    @Excel(name = "IP地址")
    private String ipAdd;
    /** è¿è¡ŒçŠ¶æ€ï¼šæœªçŸ¥ã€ç¦»çº¿ã€åœ¨çº¿ */
@@ -48,7 +48,7 @@
    /** å¿ƒè·³æ—¶é—´ */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "心跳时间", width = 30, dateFormat = "yyyy-MM-dd")
//    @Excel(name = "心跳时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date hbtTime;
    /** è®¡é‡å™¨å…·æ•°é‡ */
zhitan-system/src/main/java/com/zhitan/home/service/HomePageServiceImpl.java
@@ -237,7 +237,7 @@
                final List<ElectricityDataItem> electricityDataItems = electricityDataMap.get(vo.getTimeType());
                if(null != electricityDataItems) {
                    final double sum = electricityDataItems.stream().map(ElectricityDataItem::getElectricity).mapToDouble(BigDecimal::doubleValue).sum();
                    vo.setCount(sum);
                    vo.setCount(format2Double(sum));
                    if(totalElectric != 0) {
                        vo.setPercentage(format2Double(sum / totalElectric * 100));
                    }
@@ -390,8 +390,8 @@
            }
        });
        List<String> indexIds = nodeIndexInforList.stream().filter(l -> StringUtils.isNotEmpty(l.getIndexId())).map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
//        Date queryTime = new Date();
        Date queryTime = DateUtil.parseDateTime("2023-03-28 00:00:00");
        Date queryTime = new Date();
//        Date queryTime = DateUtil.parseDateTime("2023-03-28 00:00:00");
        Date beginTime;
        Date endTime;
        String shixuTimeType;
zhitan-system/src/main/java/com/zhitan/model/mapper/EnergyIndexMapper.java
@@ -98,4 +98,6 @@
  int insertNodeIndex(@Param("nodeId")String nodeId, @Param("indexId")String indexId);
  Page<EnergyIndex> selectEnergyIndexPage(@Param("page")Page<?> page, @Param("query") EnergyIndexQuery energyIndexQuery);
    List<EnergyIndex> getIndexByCode(@Param("code")String code, @Param("nodeId")String nodeId);
}
zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java
@@ -311,17 +311,8 @@
  @Override
  public List<EnergyIndex> getIndexByCode(String code, String nodeId) {
    final List<MeterImplement> settingDevice = modelNodeMapper.getSettingDevice(nodeId);
    if(CollectionUtils.isEmpty(settingDevice)){
       return new ArrayList<>();
    }
    final List<String> deviceIds = settingDevice.stream().map(MeterImplement::getId).collect(Collectors.toList());
    List<EnergyIndex> energyIndexList =  energyIndexMapper.getIndexByCode(code,nodeId);
    LambdaQueryWrapper<EnergyIndex> queryWrapper = new LambdaQueryWrapper<>();
    if(StringUtils.isNotEmpty(code)) {
      queryWrapper.like(EnergyIndex::getCode, code).or().like(EnergyIndex::getName, code);
    }
    queryWrapper.in(EnergyIndex::getMeterId,deviceIds);
    return energyIndexMapper.selectList(queryWrapper);
    return energyIndexList;
  }
}
zhitan-system/src/main/java/com/zhitan/peakvalley/domain/ElectricityPrice.java
@@ -46,12 +46,22 @@
    @Excel(name = "时段结束时间", width = 30, dateFormat = "HH:mm:ss")
    @NotNull(message = "时段结束时间不能为空")
    private Date stopTime;
//    @Excel(name = "范围类型字典值cost_range_type")
//    private String rangeType;
    /** ç”µä»· */
    @Excel(name = "电价")
    @NotEmpty(message = "电价不能为空")
    private BigDecimal effecticityPrice;
        
//    public String getRangeType() {
//        return rangeType;
//    }
//
//    public void setRangeType(String rangeType) {
//        this.rangeType = rangeType;
//    }
    public void setId(String id)
    {
        this.id = id;
zhitan-system/src/main/java/com/zhitan/peakvalley/domain/ElectricityPriceDate.java
@@ -32,6 +32,54 @@
    @Excel(name = "结束时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date endDate;
//    /** æ˜¯å¦é˜¶æ¢¯ä»·æ ¼0否1是 */
//    @Excel(name = "是否阶梯价格0否1是")
//    private String type;
//
//    /** ç­–略编码 */
//    @Excel(name = "策略编码")
//    private String tacticsNumber;
//
//    /** ç­–略名称 */
//    @Excel(name = "策略名称")
//    private String tacticsName;
//
//    /** èƒ½æºå“ç§ */
//    @Excel(name = "能源品种")
//    private Integer energyType;
//    public void setType(String type) {
//        this.type = type;
//    }
//
//    public void setTacticsNumber(String tacticsNumber) {
//        this.tacticsNumber = tacticsNumber;
//    }
//
//    public void setTacticsName(String tacticsName) {
//        this.tacticsName = tacticsName;
//    }
//
//    public void setEnergyType(Integer energyType) {
//        this.energyType = energyType;
//    }
//
//    public String getType() {
//        return type;
//    }
//
//    public String getTacticsNumber() {
//        return tacticsNumber;
//    }
//
//    public String getTacticsName() {
//        return tacticsName;
//    }
//
//    public Integer getEnergyType() {
//        return energyType;
//    }
    public void setId(String id)
    {
        this.id = id;
zhitan-system/src/main/java/com/zhitan/peakvalley/domain/vo/peakvalley/PeakValleyDayVO.java
@@ -1,5 +1,6 @@
package com.zhitan.peakvalley.domain.vo.peakvalley;
import com.zhitan.home.domain.vo.HomeEnergyConsumptionTrendVO;
import lombok.Getter;
import lombok.Setter;
@@ -15,4 +16,8 @@
    List<PeakValleyLineChatVO> costList;
    List<PeakValleyLineChatVO> powerConsumptionList;
    PeakValleyDayTotalVO totalVO;
    HomeEnergyConsumptionTrendVO costNewList;
    HomeEnergyConsumptionTrendVO powerNewList;
}
zhitan-system/src/main/java/com/zhitan/peakvalley/mapper/ElectricityPriceDateMapper.java
@@ -1,6 +1,7 @@
package com.zhitan.peakvalley.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zhitan.costmanagement.domain.vo.ElectricityPriceDateVo;
import com.zhitan.peakvalley.domain.ElectricityPriceDate;
import java.util.List;
@@ -59,4 +60,11 @@
     * @return ç»“æžœ
     */
    public int deleteElectricityPriceDateByIds(String[] ids);
    /**
     * å•价策略列表查询(不分页)
     *
     */
    List<ElectricityPriceDate> selectElectricityPriceDatePageTacticsAll();
}
zhitan-system/src/main/java/com/zhitan/peakvalley/mapper/ElectricityPriceMapper.java
@@ -59,4 +59,9 @@
     * @return ç»“æžœ
     */
    public int deleteElectricityPriceByIds(String[] ids);
}
zhitan-system/src/main/java/com/zhitan/peakvalley/mapper/PeakValleyMapper.java
@@ -27,4 +27,15 @@
     */
    List<ElectricityDataItem> getDataStatistics(@Param("indexIdSet") Set<String> indexIdSet, @Param("startTime") Date startTime,
                                                @Param("endTime") Date endTime, @Param("timeType") String timeType);
    /**
     * æŸ¥è¯¢å°–峰平谷统计数据(偏差分析)
     *
     * @param indexIdSet ç‚¹ä½id集合
     * @param timeType   æ—¶é—´ç±»åž‹
     * @return ç»“æžœ
     */
    List<ElectricityDataItem> getDataStatisticsDeviationAnalysis(@Param("indexIdSet") Set<String> indexIdSet,
                                                 @Param("timeType") String timeType);
}
zhitan-system/src/main/java/com/zhitan/peakvalley/service/IElectricityPriceDateService.java
@@ -2,6 +2,9 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zhitan.costmanagement.domain.CostPriceTactics;
import com.zhitan.costmanagement.domain.vo.CostPriceTacticsVo;
import com.zhitan.costmanagement.domain.vo.ElectricityPriceDateVo;
import com.zhitan.peakvalley.domain.ElectricityPriceDate;
import java.util.List;
@@ -62,4 +65,58 @@
    public int deleteElectricityPriceDateById(String id);
    Page<ElectricityPriceDate> selectElectricityPriceDatePage(ElectricityPriceDate electricityPriceDate, Long pageNum, Long pageSize);
//    /**
//     * å•价策略列表查询
//     *
//     */
//    Page<ElectricityPriceDateVo> selectElectricityPriceDatePageTactics(ElectricityPriceDate electricityPriceDate, Long pageNum, Long pageSize);
//    /**
//     * å•价策略列表查询(不分页)
//     *
//     */
//    List<ElectricityPriceDate> selectElectricityPriceDatePageTacticsAll();
//
//    /**
//     * æŸ¥è¯¢æˆæœ¬ç­–ç•¥
//     *
//     * @param id æˆæœ¬ç­–略主键
//     * @return æˆæœ¬ç­–ç•¥
//     */
//    public ElectricityPriceDateVo selectCostPriceTacticsById(String id);
//    /**
//     * æ–°å¢žæˆæœ¬ç­–ç•¥
//     *
//     * @param electricityPriceDateVo æˆæœ¬ç­–ç•¥
//     * @return ç»“æžœ
//     */
//    public int insertCostPriceTactics(ElectricityPriceDateVo electricityPriceDateVo) throws Exception;
//
//    /**
//     * ä¿®æ”¹æˆæœ¬ç­–ç•¥
//     *
//     * @param electricityPriceDateVo æˆæœ¬ç­–ç•¥
//     * @return ç»“æžœ
//     */
//    public int updateCostPriceTactics(ElectricityPriceDateVo electricityPriceDateVo);
//
//    /**
//     * æ‰¹é‡åˆ é™¤æˆæœ¬ç­–ç•¥
//     *
//     * @param ids éœ€è¦åˆ é™¤çš„æˆæœ¬ç­–略主键集合
//     * @return ç»“æžœ
//     */
//    public int deleteCostPriceTacticsByIds(String[] ids);
//
//    /**
//     * åˆ é™¤æˆæœ¬ç­–略信息
//     *
//     * @param id æˆæœ¬ç­–略主键
//     * @return ç»“æžœ
//     */
//    public int deleteCostPriceTacticsById(String id);
}
zhitan-system/src/main/java/com/zhitan/peakvalley/service/IPeakValleyService.java
@@ -42,4 +42,6 @@
    PeakValleyHourVO segmentAnalysisHour(PeakValleyDTO dto);
    List<PeakValleyHourDataVO> segmentAnalysisHourExport(PeakValleyDTO dto);
    PeakValleyDayVO segmentAnalysisDayCustomize(PeakValleyDTO dto);
}
zhitan-system/src/main/java/com/zhitan/peakvalley/service/impl/ElectricityPriceDateServiceImpl.java
@@ -1,18 +1,29 @@
package com.zhitan.peakvalley.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zhitan.common.utils.DateUtils;
import com.zhitan.common.utils.StringUtils;
import com.zhitan.common.utils.uuid.UUID;
import com.zhitan.costmanagement.domain.CostPriceTactics;
import com.zhitan.costmanagement.domain.CostPriceTacticsItem;
import com.zhitan.costmanagement.domain.vo.CostPriceTacticsVo;
import com.zhitan.costmanagement.domain.vo.ElectricityPriceDateVo;
import com.zhitan.peakvalley.domain.ElectricityPrice;
import com.zhitan.peakvalley.domain.ElectricityPriceDate;
import com.zhitan.peakvalley.mapper.ElectricityPriceDateMapper;
import com.zhitan.peakvalley.mapper.ElectricityPriceMapper;
import com.zhitan.peakvalley.service.IElectricityPriceDateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
 * å°–峰平谷电价时间段Service业务层处理
@@ -24,6 +35,10 @@
public class ElectricityPriceDateServiceImpl extends ServiceImpl<ElectricityPriceDateMapper, ElectricityPriceDate> implements IElectricityPriceDateService {
    @Autowired
    private ElectricityPriceDateMapper electricityPriceDateMapper;
    @Autowired
    private ElectricityPriceMapper electricityPriceMapper;
    /**
     * æŸ¥è¯¢å°–峰平谷电价时间段
@@ -103,4 +118,119 @@
        Page<ElectricityPriceDate> page = electricityPriceDateMapper.selectPage(new Page<ElectricityPriceDate>(pageNum, pageSize), wrapper);
        return page;
    }
//    @Override
//    public Page<ElectricityPriceDateVo> selectElectricityPriceDatePageTactics(ElectricityPriceDate electricityPriceDate, Long pageNum, Long pageSize) {
//        LambdaQueryWrapper<ElectricityPriceDate> queryWrapper = new LambdaQueryWrapper<>();
//        queryWrapper.like(StringUtils.isNotEmpty(electricityPriceDate.getTacticsName()),ElectricityPriceDate::getTacticsName,electricityPriceDate.getTacticsName());
//        queryWrapper.like(StringUtils.isNotEmpty(electricityPriceDate.getTacticsNumber()),ElectricityPriceDate::getTacticsNumber,electricityPriceDate.getTacticsNumber());
//
//        queryWrapper.eq(StringUtils.isNotEmpty(electricityPriceDate.getType()),ElectricityPriceDate::getType,electricityPriceDate.getType());
//        queryWrapper.orderByDesc(ElectricityPriceDate::getCreateTime);
//        Page<ElectricityPriceDate> page = electricityPriceDateMapper.selectPage(new Page<>(pageNum,pageSize),queryWrapper);
//        IPage aa =  page.convert(s->{
//            ElectricityPriceDateVo v = new ElectricityPriceDateVo();
//            BeanUtil.copyProperties(s, v);
//            LambdaQueryWrapper<ElectricityPrice> queryWrapperItem = new LambdaQueryWrapper<>();
//            queryWrapperItem.eq(ElectricityPrice::getParentId,s.getId());
//            List<ElectricityPrice> itemListOld = electricityPriceMapper.selectList(queryWrapperItem);
//            v.setItemList(itemListOld);
//            return v;
//        });
//
//        return (Page<ElectricityPriceDateVo>) aa;
//    }
//
//    @Override
//    public List<ElectricityPriceDate> selectElectricityPriceDatePageTacticsAll() {
//        return electricityPriceDateMapper.selectElectricityPriceDatePageTacticsAll();
//    }
//
//    @Override
//    public ElectricityPriceDateVo selectCostPriceTacticsById(String id) {
//        ElectricityPriceDateVo result = new ElectricityPriceDateVo();
//        ElectricityPriceDate info = electricityPriceDateMapper.selectElectricityPriceDateById(id);
//        BeanUtil.copyProperties(info,result);
//        LambdaQueryWrapper<ElectricityPrice> queryWrapperItem = new LambdaQueryWrapper<>();
//        queryWrapperItem.eq(ElectricityPrice::getParentId,id);
//        List<ElectricityPrice> itemListOld = electricityPriceMapper.selectList(queryWrapperItem);
//        result.setItemList(itemListOld);
//        return result ;
//    }
//
//    @Override
//    public int insertCostPriceTactics(ElectricityPriceDateVo electricityPriceDateVo) throws Exception {
//        ElectricityPriceDate search = electricityPriceDateMapper.selectOne(new QueryWrapper<ElectricityPriceDate>().eq("tactics_number",electricityPriceDateVo.getTacticsNumber()));
//        if (search!=null){
//            throw new Exception("该策略编码已存在!");
//        }
//        electricityPriceDateVo.setCreateTime(DateUtils.getNowDate());
//        electricityPriceDateVo.setId(java.util.UUID.randomUUID().toString());
//        ElectricityPriceDate electricityPriceDate = new ElectricityPriceDate();
//        BeanUtil.copyProperties(electricityPriceDateVo,electricityPriceDate);
//        int result =  electricityPriceDateMapper.insert(electricityPriceDate);
//        //插入子表
//        List<ElectricityPrice> itemList =  electricityPriceDateVo.getItemList();
//        itemList.stream().forEach(s->{
//            s.setId(java.util.UUID.randomUUID().toString());
//            s.setCreateTime(DateUtils.getNowDate());
//            s.setCreateBy(electricityPriceDateVo.getCreateBy());
//            s.setParentId(electricityPriceDateVo.getId());
//            electricityPriceMapper.insert(s);
//        });
//
//        return result;
//    }
//
//    @Override
//    public int updateCostPriceTactics(ElectricityPriceDateVo electricityPriceDateVo) {
//        electricityPriceDateVo.setUpdateTime(DateUtils.getNowDate());
//        ElectricityPriceDate electricityPriceDate = new ElectricityPriceDate();
//        BeanUtil.copyProperties(electricityPriceDateVo,electricityPriceDate);
//        int result = electricityPriceDateMapper.updateElectricityPriceDate(electricityPriceDate);
//        //删除子表
//        LambdaQueryWrapper<ElectricityPrice> queryWrapper = new LambdaQueryWrapper<>();
//        queryWrapper.eq(ElectricityPrice::getParentId,electricityPriceDate.getId());
//        List<ElectricityPrice> itemListOld = electricityPriceMapper.selectList(queryWrapper);
//        List<String>idList = itemListOld.stream().map(s->s.getId()).collect(Collectors.toList());
//        String[] ids = idList.toArray(new String[idList.size()]);
//        electricityPriceMapper.deleteElectricityPriceByIds(ids);
//        //插入子表
//        List<ElectricityPrice> itemList =  electricityPriceDateVo.getItemList();
//        itemList.stream().forEach(s->{
//            s.setId(java.util.UUID.randomUUID().toString());
//            s.setCreateTime(DateUtils.getNowDate());
//            s.setCreateBy(electricityPriceDateVo.getCreateBy());
//            s.setParentId(electricityPriceDateVo.getId());
//            electricityPriceMapper.insert(s);
//        });
//        return result;
//    }
//
//    @Override
//    public int deleteCostPriceTacticsByIds(String[] ids) {
//        //删除子表
//        List<String> list = Arrays.asList(ids);
//        list.stream().forEach(item->{
//            LambdaQueryWrapper<ElectricityPrice> queryWrapper = new LambdaQueryWrapper<>();
//            queryWrapper.eq(ElectricityPrice::getParentId,item);
//            List<ElectricityPrice> itemListOld = electricityPriceMapper.selectList(queryWrapper);
//            List<String>idList = itemListOld.stream().map(s->s.getId()).collect(Collectors.toList());
//            String[] itemIds = idList.toArray(new String[idList.size()]);
//            electricityPriceMapper.deleteElectricityPriceByIds(itemIds);
//        });
//
//        return electricityPriceDateMapper.deleteElectricityPriceDateByIds(ids);
//    }
//
//    @Override
//    public int deleteCostPriceTacticsById(String id) {
//        LambdaQueryWrapper<ElectricityPrice> queryWrapper = new LambdaQueryWrapper<>();
//        queryWrapper.eq(ElectricityPrice::getParentId,id);
//        List<ElectricityPrice> itemListOld = electricityPriceMapper.selectList(queryWrapper);
//        List<String>idList = itemListOld.stream().map(s->s.getId()).collect(Collectors.toList());
//        String[] itemIds = idList.toArray(new String[idList.size()]);
//        electricityPriceMapper.deleteElectricityPriceByIds(itemIds);
//        return electricityPriceDateMapper.deleteElectricityPriceDateById(id);
//    }
}
zhitan-system/src/main/java/com/zhitan/peakvalley/service/impl/PeakValleyServiceImpl.java
@@ -5,6 +5,8 @@
import com.zhitan.common.enums.ElectricityTypeEnum;
import com.zhitan.common.enums.TimeType;
import com.zhitan.common.utils.DateUtils;
import com.zhitan.costmanagement.domain.vo.CostPriceRelevancyVo;
import com.zhitan.costmanagement.mapper.CostPriceRelevancyMapper;
import com.zhitan.model.domain.vo.ModelNodeIndexInfor;
import com.zhitan.model.mapper.ModelNodeMapper;
import com.zhitan.peakvalley.domain.ElectricityDataItem;
@@ -35,7 +37,8 @@
    private ModelNodeMapper modelNodeMapper;
    @Resource
    private PeakValleyMapper electricityDataItemMapper;
    @Resource
    CostPriceRelevancyMapper costPriceRelevancyMapper;
    /**
     * æŸ¥è¯¢ç»Ÿè®¡æ•°æ®
@@ -154,19 +157,45 @@
                    String electricityType = electricityDataItem.getElectricityType();
                    if (ElectricityTypeEnum.SHARP.name().equals(electricityType)) {
                        sharpFee = sharpFee.add(electricityDataItem.getCost());
//                        sharpFee = sharpFee.add(electricityDataItem.getCost());
                        sharpPower = sharpPower.add(electricityDataItem.getElectricity());
                    } else if (ElectricityTypeEnum.PEAK.name().equals(electricityType)) {
                        peakFee = peakFee.add(electricityDataItem.getCost());
//                        peakFee = peakFee.add(electricityDataItem.getCost());
                        peakPower = peakPower.add(electricityDataItem.getElectricity());
                    } else if (ElectricityTypeEnum.FLAT.name().equals(electricityType)) {
                        flatFee = flatFee.add(electricityDataItem.getCost());
//                        flatFee = flatFee.add(electricityDataItem.getCost());
                        flatPower = flatPower.add(electricityDataItem.getElectricity());
                    } else {
                        valleyFee = valleyFee.add(electricityDataItem.getCost());
//                        valleyFee = valleyFee.add(electricityDataItem.getCost());
                        valleyPower = valleyPower.add(electricityDataItem.getElectricity());
                    }
                }
                //2024-11-12新增
                CostPriceRelevancyVo voS =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(),ElectricityTypeEnum.SHARP.name());
                if(voS!=null){
                    sharpFee = voS.getPrice().multiply(sharpPower);
                }
                CostPriceRelevancyVo voP =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(),ElectricityTypeEnum.PEAK.name());
                if(voP!=null){
                    peakFee = voP.getPrice().multiply(peakPower);
                }
                CostPriceRelevancyVo voF =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(),ElectricityTypeEnum.FLAT.name());
                if(voF!=null){
                    flatFee = voF.getPrice().multiply(flatPower);
                }
                CostPriceRelevancyVo voV =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(), ElectricityTypeEnum.VALLEY.name());
                if(voV!=null){
                    valleyFee = voV.getPrice().multiply(valleyPower);
                }
//                CostPriceRelevancyVo voD =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(), ElectricityTypeEnum.DEEP.name());
//                if(voV!=null){
//                    DeepFee = voV.getPrice().multiply(valleyPower);
//                }
            }
            PeakValleyDayDataVO peakAndValleyReportVO = new PeakValleyDayDataVO(startTime, sharpFee, sharpPower,
                    peakFee, peakPower, flatFee, flatPower, valleyFee, valleyPower);
@@ -278,8 +307,10 @@
            peakValleyDayTotalVO.setTroughPowerCostProportion(0);
        }
        
        peakValleyDayTotalVO.setTotalCost(powerTotal.doubleValue());
        peakValleyDayTotalVO.setTotalPowerConsumption(freeTotal.doubleValue());
//        peakValleyDayTotalVO.setTotalCost(powerTotal.doubleValue());
//        peakValleyDayTotalVO.setTotalPowerConsumption(freeTotal.doubleValue());
        peakValleyDayTotalVO.setTotalCost(freeTotal.doubleValue());
        peakValleyDayTotalVO.setTotalPowerConsumption(powerTotal.doubleValue());
        peakValleyVO.setTotalVO(peakValleyDayTotalVO);
        peakValleyVO.setCostList(costList);
        peakValleyVO.setPowerConsumptionList(powerConsumptionList);
@@ -324,19 +355,39 @@
                    String electricityType = electricityDataItem.getElectricityType();
                    if (ElectricityTypeEnum.SHARP.name().equals(electricityType)) {
                        sharpFee = sharpFee.add(electricityDataItem.getCost());
//                        sharpFee = sharpFee.add(electricityDataItem.getCost());
                        sharpPower = sharpPower.add(electricityDataItem.getElectricity());
                    } else if (ElectricityTypeEnum.PEAK.name().equals(electricityType)) {
                        peakFee = peakFee.add(electricityDataItem.getCost());
//                        peakFee = peakFee.add(electricityDataItem.getCost());
                        peakPower = peakPower.add(electricityDataItem.getElectricity());
                    } else if (ElectricityTypeEnum.FLAT.name().equals(electricityType)) {
                        flatFee = flatFee.add(electricityDataItem.getCost());
//                        flatFee = flatFee.add(electricityDataItem.getCost());
                        flatPower = flatPower.add(electricityDataItem.getElectricity());
                    } else {
                        valleyFee = valleyFee.add(electricityDataItem.getCost());
//                        valleyFee = valleyFee.add(electricityDataItem.getCost());
                        valleyPower = valleyPower.add(electricityDataItem.getElectricity());
                    }
                }
                //2024-11-12新增
                CostPriceRelevancyVo voS =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(),ElectricityTypeEnum.SHARP.name());
                if(voS!=null){
                    sharpFee = voS.getPrice().multiply(sharpPower);
                }
                CostPriceRelevancyVo voP =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(),ElectricityTypeEnum.PEAK.name());
                if(voP!=null){
                    peakFee = voP.getPrice().multiply(peakPower);
                }
                CostPriceRelevancyVo voF =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(),ElectricityTypeEnum.FLAT.name());
                if(voF!=null){
                    flatFee = voF.getPrice().multiply(flatPower);
                }
                CostPriceRelevancyVo voV =  costPriceRelevancyMapper.selectCostPriceRelevancyByNodeId(dto.getNodeId(), ElectricityTypeEnum.VALLEY.name());
                if(voV!=null){
                    valleyFee = voV.getPrice().multiply(valleyPower);
                }
            }
            PeakValleyHourDataVO peakAndValleyReportVO = new PeakValleyHourDataVO(startTime, sharpFee, sharpPower,
                    peakFee, peakPower, flatFee, flatPower, valleyFee, valleyPower);
@@ -472,4 +523,9 @@
       return reportVOList;
    }
    @Override
    public PeakValleyDayVO segmentAnalysisDayCustomize(PeakValleyDTO dto) {
        return null;
    }
}
zhitan-system/src/main/java/com/zhitan/powerDistribution/domain/PowerDistribution.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
package com.zhitan.powerDistribution.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.zhitan.common.core.domain.BaseEntity;
import lombok.Data;
/**
 * é…ç”µå®¤å®žä½“ç±»
 */
@Data
@TableName("power_distribution")
public class PowerDistribution extends BaseEntity {
    @TableId
    private String id;
    /**
     * åç§°
     */
    private String name;
    /**
     * ç¼–码
     */
    private String code;
    /**
     * è´Ÿè´£äºº
     */
    private String principals;
    /**
     * è´Ÿè´£äººç”µè¯
     */
    private String principalsTel;
}
zhitan-system/src/main/java/com/zhitan/powerDistribution/mapper/PowerDistributionMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
package com.zhitan.powerDistribution.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zhitan.powerDistribution.domain.PowerDistribution;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface PowerDistributionMapper extends BaseMapper<PowerDistribution> {
    int deletePowerDistributionByIds(@Param("ids") List<String> ids);
}
zhitan-system/src/main/java/com/zhitan/powerDistribution/services/IPowerDistributionService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.zhitan.powerDistribution.services;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zhitan.powerDistribution.domain.PowerDistribution;
import java.util.List;
public interface IPowerDistributionService extends IService<PowerDistribution> {
    List<PowerDistribution> selectPowerDistributionList(PowerDistribution powerDistribution);
    IPage<PowerDistribution> pageList(PowerDistribution powerDistribution, Page<PowerDistribution> page);
    int deleteByIds(List<String> ids);
}
zhitan-system/src/main/java/com/zhitan/powerDistribution/services/impl/PowerDistributionServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,66 @@
package com.zhitan.powerDistribution.services.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zhitan.basicdata.domain.MeterImplement;
import com.zhitan.basicdata.mapper.MeterImplementMapper;
import com.zhitan.common.utils.StringUtils;
import com.zhitan.powerDistribution.domain.PowerDistribution;
import com.zhitan.powerDistribution.mapper.PowerDistributionMapper;
import com.zhitan.powerDistribution.services.IPowerDistributionService;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@Service
public class PowerDistributionServiceImpl extends ServiceImpl<PowerDistributionMapper, PowerDistribution> implements IPowerDistributionService {
    @Resource
    private MeterImplementMapper meterImplementMapper;
    @Override
    public List<PowerDistribution> selectPowerDistributionList(PowerDistribution powerDistribution) {
        LambdaQueryWrapper<PowerDistribution> queryWrapper = new LambdaQueryWrapper<>();
        if(StringUtils.isNotEmpty(powerDistribution.getCode())){
            queryWrapper.like(PowerDistribution::getCode, powerDistribution.getCode());
        }
        if (StringUtils.isNotEmpty(powerDistribution.getName())){
            queryWrapper.like(PowerDistribution::getName, powerDistribution.getName());
        }
        if (StringUtils.isNotEmpty(powerDistribution.getPrincipals())){
            queryWrapper.like(PowerDistribution::getPrincipals, powerDistribution.getPrincipals());
        }
        if (StringUtils.isNotEmpty(powerDistribution.getPrincipalsTel())){
            queryWrapper.like(PowerDistribution::getPrincipalsTel, powerDistribution.getPrincipalsTel());
        }
        return list(queryWrapper);
    }
    @Override
    public Page<PowerDistribution> pageList(PowerDistribution powerDistribution, Page<PowerDistribution> page) {
        LambdaQueryWrapper<PowerDistribution> queryWrapper = new LambdaQueryWrapper<>();
        if(StringUtils.isNotEmpty(powerDistribution.getCode())){
            queryWrapper.like(PowerDistribution::getCode, powerDistribution.getCode());
        }
        if (StringUtils.isNotEmpty(powerDistribution.getName())){
            queryWrapper.like(PowerDistribution::getName, powerDistribution.getName());
        }
        if (StringUtils.isNotEmpty(powerDistribution.getPrincipals())){
            queryWrapper.like(PowerDistribution::getPrincipals, powerDistribution.getPrincipals());
        }
        if (StringUtils.isNotEmpty(powerDistribution.getPrincipalsTel())){
            queryWrapper.like(PowerDistribution::getPrincipalsTel, powerDistribution.getPrincipalsTel());
        }
        return page(page, queryWrapper);
    }
    @Override
    public int deleteByIds(List<String> idList) {
        return baseMapper.deletePowerDistributionByIds(idList);
    }
}
zhitan-system/src/main/java/com/zhitan/singlelogin/service/ISingleLoginService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.zhitan.singlelogin.service;
import com.zhitan.common.core.domain.entity.SysUser;
/**
 * description todu
 *
 * @author hmj
 * @date 2024-11-15 17:08
 */
public interface ISingleLoginService {
    SysUser singleLogin(String token);
}
zhitan-system/src/main/java/com/zhitan/singlelogin/service/impl/SingleLoginServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,103 @@
package com.zhitan.singlelogin.service.impl;
import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.google.common.collect.Lists;
import com.zhitan.common.core.domain.entity.SysRole;
import com.zhitan.common.core.domain.entity.SysUser;
import com.zhitan.common.utils.SecurityUtils;
import com.zhitan.singlelogin.service.ISingleLoginService;
import com.zhitan.system.domain.SysUserRole;
import com.zhitan.system.mapper.SysUserRoleMapper;
import com.zhitan.system.service.ISysRoleService;
import com.zhitan.system.service.ISysUserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Date;
/**
 * description todu
 *
 * @author hmj
 * @date 2024-11-15 17:10
 */
@Component
public class SingleLoginServiceImpl implements ISingleLoginService {
    private static final Logger log = LoggerFactory.getLogger(SingleLoginServiceImpl.class);
    @Value("${singleLoginUrl}")
    private String singleLoginUrl;
    @Resource
    private ISysUserService userService;
    @Resource
    private ISysRoleService roleService;
    @Resource
    private SysUserRoleMapper userRoleMapper;
    @Override
    public SysUser singleLogin(String token) {
        JSONObject jsonObject = checkToken(token);
        log.info("请求综合治理" + jsonObject.toString());
        if(jsonObject.containsKey("code") && jsonObject.getInt("code") == 200) {
            final SysUser user = JSONUtil.toBean(jsonObject.getJSONObject("user"), SysUser.class);
            user.setSingleUser(String.valueOf(user.getUserId()));
            user.setUserId(null);
            //检测一下用户存在不存在
            Long count = userService.checkThirdUserExist(user);
            if (count > 0 ) {
                return user;
            } else {
                //用户不存在时,将用户添加到数据库中
                //密码统一都是hrd123456
                user.setPassword(SecurityUtils.encryptPassword("hrd123456"));
                //创建者,标识J平台过来的用户
                user.setCreateBy("thirdPartGetAuth");
                //创建日期
                user.setCreateTime(new Date());
                int rows = userService.insertUser(user);
                if (rows > 0) {
                    SysRole queryRole = new SysRole();
                    queryRole.setRoleKey("zonghezhili");
                    SysRole sysRoles = roleService.getRoleByKey(queryRole);
                    if(null != sysRoles){
                        SysUserRole sysUserRole = new SysUserRole();
                        sysUserRole.setUserId(user.getUserId());
                        sysUserRole.setRoleId(sysRoles.getRoleId());
                        userRoleMapper.batchUserRole(Lists.newArrayList(sysUserRole));
                    }
                }
                return user;
            }
        }else {
            return null;
        }
    }
    /**
     * é€šè¿‡ç¬¬ä¸‰æ–¹å¹³å°æŽ¥å£ï¼Œé‰´å®štoken合法性,并返回userName等登录信息
     * è¿™ä¸ªæ–¹æ³•需要根据实际需要进行修改
     * @param token
     * @return
     */
    public JSONObject checkToken(String token) {
        String result = HttpRequest.get(singleLoginUrl)
                .header("Authorization","Bearer " + token)
                .execute()
                .body();
        JSONObject parseObj = JSONUtil.parseObj(result);
        return parseObj;
    }
}
zhitan-system/src/main/java/com/zhitan/spikesandvalleys/domain/SpikesAndValleysItem.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,49 @@
package com.zhitan.spikesandvalleys.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.zhitan.common.core.domain.BaseEntity;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.zhitan.common.annotation.Excel;
import java.math.BigDecimal;
/**
 * ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘å¯¹è±¡ spikes_and_valleys_item
 *
 * @author ZhiTan
 * @date 2024-10-29
 */
@TableName("spikes_and_valleys_item")
@Data
public class SpikesAndValleysItem extends BaseEntity {
    private static final long serialVersionUID = 1L;
    /** $column.columnComment */
    private String id;
    /** æ—¶æ®µ:尖峰平谷字典值1尖2å³°3å¹³4è°· */
    @Excel(name = "时段:尖峰平谷字典值1尖2å³°3å¹³4è°·")
    private String time;
    /** ç”µè´¹ */
    @Excel(name = "电费")
    private BigDecimal electrovalency;
    /** å¼€å§‹æ—¶é—´ */
    @Excel(name = "开始时间")
    private String startTime;
    /** ç»“束时间 */
    @Excel(name = "结束时间")
    private String endTime;
    /** $column.columnComment */
    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
    private String schemeId;
}
zhitan-system/src/main/java/com/zhitan/spikesandvalleys/domain/SpikesAndValleysScheme.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,94 @@
package com.zhitan.spikesandvalleys.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.zhitan.common.core.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.zhitan.common.annotation.Excel;
/**
 * å°–峰平谷时间段明细对象 spikes_and_valleys_scheme
 *
 * @author ZhiTan
 * @date 2024-10-29
 */
@TableName("spikes_and_valleys_scheme")
public class SpikesAndValleysScheme extends BaseEntity {
    private static final long serialVersionUID = 1L;
    /** $column.columnComment */
    private String id;
    /** æ–¹æ¡ˆåç§° */
    @Excel(name = "方案名称")
    private String schemeName;
    /** æ‰§è¡Œæ—¶é—´ */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "执行时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date executeTime;
    /** æ–¹æ¡ˆç±»åž‹1默认2后勤3外部 */
    @Excel(name = "方案类型1默认2后勤3外部")
    private String type;
    public void setId(String id)
    {
        this.id = id;
    }
    public String getId()
    {
        return id;
    }
    public void setSchemeName(String schemeName)
    {
        this.schemeName = schemeName;
    }
    public String getSchemeName()
    {
        return schemeName;
    }
    public void setExecuteTime(Date executeTime)
    {
        this.executeTime = executeTime;
    }
    public Date getExecuteTime()
    {
        return executeTime;
    }
    public void setType(String type)
    {
        this.type = type;
    }
    public String getType()
    {
        return type;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("id", getId())
            .append("createTime", getCreateTime())
            .append("createBy", getCreateBy())
            .append("updateTime", getUpdateTime())
            .append("updateBy", getUpdateBy())
            .append("remark", getRemark())
            .append("schemeName", getSchemeName())
            .append("executeTime", getExecuteTime())
            .append("type", getType())
        .toString();
    }
}
zhitan-system/src/main/java/com/zhitan/spikesandvalleys/domain/vo/SpikesAndValleysSchemeVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.zhitan.spikesandvalleys.domain.vo;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.zhitan.common.annotation.Excel;
import com.zhitan.common.core.domain.BaseEntity;
import com.zhitan.spikesandvalleys.domain.SpikesAndValleysItem;
import com.zhitan.spikesandvalleys.domain.SpikesAndValleysScheme;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.util.Date;
import java.util.List;
/**
 * å°–峰平谷时间段明细对象 spikes_and_valleys_scheme
 *
 * @author ZhiTan
 * @date 2024-10-29
 */
@Data
public class SpikesAndValleysSchemeVo extends SpikesAndValleysScheme {
    List<SpikesAndValleysItem> itemList;
}
zhitan-system/src/main/java/com/zhitan/spikesandvalleys/mapper/SpikesAndValleysItemMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
package com.zhitan.spikesandvalleys.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zhitan.spikesandvalleys.domain.SpikesAndValleysItem;
/**
 * ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘Mapper接口
 *
 * @author ZhiTan
 * @date 2024-10-29
 */
public interface SpikesAndValleysItemMapper extends BaseMapper<SpikesAndValleysItem> {
    /**
     * æŸ¥è¯¢ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param id ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘ä¸»é”®
     * @return ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     */
    public SpikesAndValleysItem selectSpikesAndValleysItemById(String id);
    /**
     * æŸ¥è¯¢ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘åˆ—è¡¨
     *
     * @param spikesAndValleysItem ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     * @return ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘é›†åˆ
     */
    public List<SpikesAndValleysItem> selectSpikesAndValleysItemList(SpikesAndValleysItem spikesAndValleysItem);
    /**
     * æ–°å¢žã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param spikesAndValleysItem ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     * @return ç»“æžœ
     */
    public int insertSpikesAndValleysItem(SpikesAndValleysItem spikesAndValleysItem);
    /**
     * ä¿®æ”¹ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param spikesAndValleysItem ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     * @return ç»“æžœ
     */
    public int updateSpikesAndValleysItem(SpikesAndValleysItem spikesAndValleysItem);
    /**
     * åˆ é™¤ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param id ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘ä¸»é”®
     * @return ç»“æžœ
     */
    public int deleteSpikesAndValleysItemById(String id);
    /**
     * æ‰¹é‡åˆ é™¤ã€è¯·å¡«å†™åŠŸèƒ½åç§°ã€‘
     *
     * @param ids éœ€è¦åˆ é™¤çš„æ•°æ®ä¸»é”®é›†åˆ
     * @return ç»“æžœ
     */
    public int deleteSpikesAndValleysItemByIds(String[] ids);
}
zhitan-system/src/main/java/com/zhitan/spikesandvalleys/mapper/SpikesAndValleysSchemeMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
package com.zhitan.spikesandvalleys.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zhitan.spikesandvalleys.domain.SpikesAndValleysScheme;
/**
 * å°–峰平谷时间段明细Mapper接口
 *
 * @author ZhiTan
 * @date 2024-10-29
 */
public interface SpikesAndValleysSchemeMapper extends BaseMapper<SpikesAndValleysScheme> {
    /**
     * æŸ¥è¯¢å°–峰平谷时间段明细
     *
     * @param id å°–峰平谷时间段明细主键
     * @return å°–峰平谷时间段明细
     */
    public SpikesAndValleysScheme selectSpikesAndValleysSchemeById(String id);
    /**
     * æŸ¥è¯¢å°–峰平谷时间段明细列表
     *
     * @param spikesAndValleysScheme å°–峰平谷时间段明细
     * @return å°–峰平谷时间段明细集合
     */
    public List<SpikesAndValleysScheme> selectSpikesAndValleysSchemeList(SpikesAndValleysScheme spikesAndValleysScheme);
    /**
     * æ–°å¢žå°–峰平谷时间段明细
     *
     * @param spikesAndValleysScheme å°–峰平谷时间段明细
     * @return ç»“æžœ
     */
    public int insertSpikesAndValleysScheme(SpikesAndValleysScheme spikesAndValleysScheme);
    /**
     * ä¿®æ”¹å°–峰平谷时间段明细
     *
     * @param spikesAndValleysScheme å°–峰平谷时间段明细
     * @return ç»“æžœ
     */
    public int updateSpikesAndValleysScheme(SpikesAndValleysScheme spikesAndValleysScheme);
    /**
     * åˆ é™¤å°–峰平谷时间段明细
     *
     * @param id å°–峰平谷时间段明细主键
     * @return ç»“æžœ
     */
    public int deleteSpikesAndValleysSchemeById(String id);
    /**
     * æ‰¹é‡åˆ é™¤å°–峰平谷时间段明细
     *
     * @param ids éœ€è¦åˆ é™¤çš„æ•°æ®ä¸»é”®é›†åˆ
     * @return ç»“æžœ
     */
    public int deleteSpikesAndValleysSchemeByIds(String[] ids);
}
zhitan-system/src/main/java/com/zhitan/spikesandvalleys/service/ISpikesAndValleysSchemeService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
package com.zhitan.spikesandvalleys.service;
import java.util.List;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zhitan.alarm.domain.LimitType;
import com.zhitan.spikesandvalleys.domain.SpikesAndValleysScheme;
import com.zhitan.spikesandvalleys.domain.vo.SpikesAndValleysSchemeVo;
/**
 * å°–峰平谷时间段明细Service接口
 *
 * @author ZhiTan
 * @date 2024-10-29
 */
public interface ISpikesAndValleysSchemeService extends IService<SpikesAndValleysScheme> {
    /**
     * æŸ¥è¯¢å°–峰平谷时间段明细
     *
     * @param id å°–峰平谷时间段明细主键
     * @return å°–峰平谷时间段明细
     */
    public SpikesAndValleysSchemeVo selectSpikesAndValleysSchemeById(String id);
    /**
     * æŸ¥è¯¢å°–峰平谷时间段明细列表
     *
     * @param spikesAndValleysScheme å°–峰平谷时间段明细
     * @return å°–峰平谷时间段明细集合
     */
    public Page<SpikesAndValleysSchemeVo> selectSpikesAndValleysSchemeList(SpikesAndValleysScheme spikesAndValleysScheme, Long pageNum, Long pageSize);
    /**
     * æ–°å¢žå°–峰平谷时间段明细
     *
     * @param spikesAndValleysScheme å°–峰平谷时间段明细
     * @return ç»“æžœ
     */
    public int insertSpikesAndValleysScheme(SpikesAndValleysSchemeVo spikesAndValleysScheme);
    /**
     * ä¿®æ”¹å°–峰平谷时间段明细
     *
     * @param spikesAndValleysScheme å°–峰平谷时间段明细
     * @return ç»“æžœ
     */
    public int updateSpikesAndValleysScheme(SpikesAndValleysSchemeVo spikesAndValleysScheme);
    /**
     * æ‰¹é‡åˆ é™¤å°–峰平谷时间段明细
     *
     * @param ids éœ€è¦åˆ é™¤çš„尖峰平谷时间段明细主键集合
     * @return ç»“æžœ
     */
    public int deleteSpikesAndValleysSchemeByIds(String[] ids);
    /**
     * åˆ é™¤å°–峰平谷时间段明细信息
     *
     * @param id å°–峰平谷时间段明细主键
     * @return ç»“æžœ
     */
    public int deleteSpikesAndValleysSchemeById(String id);
}
zhitan-system/src/main/java/com/zhitan/spikesandvalleys/service/impl/SpikesAndValleysSchemeServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,176 @@
package com.zhitan.spikesandvalleys.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
import com.zhitan.alarm.domain.LimitType;
import com.zhitan.common.utils.DateUtils;
import com.zhitan.common.utils.StringUtils;
import com.zhitan.spikesandvalleys.domain.SpikesAndValleysItem;
import com.zhitan.spikesandvalleys.domain.SpikesAndValleysScheme;
import com.zhitan.spikesandvalleys.domain.vo.SpikesAndValleysSchemeVo;
import com.zhitan.spikesandvalleys.mapper.SpikesAndValleysItemMapper;
import com.zhitan.spikesandvalleys.mapper.SpikesAndValleysSchemeMapper;
import com.zhitan.spikesandvalleys.service.ISpikesAndValleysSchemeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
 * å°–峰平谷时间段明细Service业务层处理
 *
 * @author ZhiTan
 * @date 2024-10-29
 */
@Service
public class SpikesAndValleysSchemeServiceImpl extends ServiceImpl<SpikesAndValleysSchemeMapper, SpikesAndValleysScheme> implements ISpikesAndValleysSchemeService {
    @Autowired
    private SpikesAndValleysSchemeMapper spikesAndValleysSchemeMapper;
    @Autowired
    private SpikesAndValleysItemMapper spikesAndValleysItemMapper;
    /**
     * æŸ¥è¯¢å°–峰平谷时间段明细
     *
     * @param id å°–峰平谷时间段明细主键
     * @return å°–峰平谷时间段明细
     */
    @Override
    public SpikesAndValleysSchemeVo selectSpikesAndValleysSchemeById(String id) {
        SpikesAndValleysSchemeVo result = new SpikesAndValleysSchemeVo();
        SpikesAndValleysScheme info = spikesAndValleysSchemeMapper.selectSpikesAndValleysSchemeById(id);
        BeanUtil.copyProperties(info,result);
        LambdaQueryWrapper<SpikesAndValleysItem> queryWrapperItem = new LambdaQueryWrapper<>();
        queryWrapperItem.eq(SpikesAndValleysItem::getSchemeId,id);
        List<SpikesAndValleysItem> itemListOld = spikesAndValleysItemMapper.selectList(queryWrapperItem);
        result.setItemList(itemListOld);
        return result ;
    }
    /**
     * æŸ¥è¯¢å°–峰平谷时间段明细列表
     *
     * @param spikesAndValleysScheme å°–峰平谷时间段明细
     * @return å°–峰平谷时间段明细
     */
    @Override
    public Page<SpikesAndValleysSchemeVo>  selectSpikesAndValleysSchemeList(SpikesAndValleysScheme spikesAndValleysScheme,Long pageNum, Long pageSize) {
        LambdaQueryWrapper<SpikesAndValleysScheme> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(StringUtils.isNotEmpty(spikesAndValleysScheme.getSchemeName()),SpikesAndValleysScheme::getSchemeName,spikesAndValleysScheme.getSchemeName());
        queryWrapper.eq(StringUtils.isNotEmpty(spikesAndValleysScheme.getType()),SpikesAndValleysScheme::getType,spikesAndValleysScheme.getType());
        queryWrapper.orderByDesc(SpikesAndValleysScheme::getCreateTime);
        Page<SpikesAndValleysScheme> page = spikesAndValleysSchemeMapper.selectPage(new Page<>(pageNum,pageSize),queryWrapper);
            IPage aa =  page.convert(s->{
            SpikesAndValleysSchemeVo v = new SpikesAndValleysSchemeVo();
            BeanUtil.copyProperties(s, v);
                LambdaQueryWrapper<SpikesAndValleysItem> queryWrapperItem = new LambdaQueryWrapper<>();
                queryWrapperItem.eq(SpikesAndValleysItem::getSchemeId,s.getId());
                List<SpikesAndValleysItem> itemListOld = spikesAndValleysItemMapper.selectList(queryWrapperItem);
                v.setItemList(itemListOld);
            return v;
        });
    return (Page<SpikesAndValleysSchemeVo>) aa;
    }
    /**
     * æ–°å¢žå°–峰平谷时间段明细
     *
     * @param spikesAndValleysSchemeVo å°–峰平谷时间段明细
     * @return ç»“æžœ
     */
    @Override
    @Transactional
    public int insertSpikesAndValleysScheme(SpikesAndValleysSchemeVo spikesAndValleysSchemeVo) {
        spikesAndValleysSchemeVo.setCreateTime(DateUtils.getNowDate());
        spikesAndValleysSchemeVo.setId(UUID.randomUUID().toString());
        SpikesAndValleysScheme spikesAndValleysScheme = new SpikesAndValleysScheme();
        BeanUtil.copyProperties(spikesAndValleysSchemeVo,spikesAndValleysScheme);
       int result =  spikesAndValleysSchemeMapper.insert(spikesAndValleysScheme);
        //插入子表
        List<SpikesAndValleysItem> itemList =  spikesAndValleysSchemeVo.getItemList();
        itemList.stream().forEach(s->{
            s.setId(UUID.randomUUID().toString());
            s.setCreateTime(DateUtils.getNowDate());
            s.setCreateBy(spikesAndValleysSchemeVo.getCreateBy());
            s.setSchemeId(spikesAndValleysScheme.getId());
            spikesAndValleysItemMapper.insert(s);
        });
        return result;
    }
    /**
     * ä¿®æ”¹å°–峰平谷时间段明细
     *
     * @param spikesAndValleysSchemeVo å°–峰平谷时间段明细
     * @return ç»“æžœ
     */
    @Override
    @Transactional
    public int updateSpikesAndValleysScheme(SpikesAndValleysSchemeVo spikesAndValleysSchemeVo) {
        spikesAndValleysSchemeVo.setUpdateTime(DateUtils.getNowDate());
        SpikesAndValleysScheme spikesAndValleysScheme = new SpikesAndValleysScheme();
        BeanUtil.copyProperties(spikesAndValleysSchemeVo,spikesAndValleysScheme);
        int result = spikesAndValleysSchemeMapper.updateSpikesAndValleysScheme(spikesAndValleysScheme);
        //删除子表
        LambdaQueryWrapper<SpikesAndValleysItem> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(SpikesAndValleysItem::getSchemeId,spikesAndValleysScheme.getId());
        List<SpikesAndValleysItem> itemListOld = spikesAndValleysItemMapper.selectList(queryWrapper);
        List<String>idList = itemListOld.stream().map(s->s.getId()).collect(Collectors.toList());
        String[] ids = idList.toArray(new String[idList.size()]);
        spikesAndValleysItemMapper.deleteSpikesAndValleysItemByIds(ids);
        //插入子表
        List<SpikesAndValleysItem> itemList =  spikesAndValleysSchemeVo.getItemList();
        itemList.stream().forEach(s->{
            s.setId(UUID.randomUUID().toString());
            s.setCreateTime(DateUtils.getNowDate());
            s.setCreateBy(spikesAndValleysSchemeVo.getCreateBy());
            s.setSchemeId(spikesAndValleysScheme.getId());
            spikesAndValleysItemMapper.insert(s);
        });
        return result;
    }
    /**
     * æ‰¹é‡åˆ é™¤å°–峰平谷时间段明细
     *
     * @param ids éœ€è¦åˆ é™¤çš„尖峰平谷时间段明细主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteSpikesAndValleysSchemeByIds(String[] ids) {
        //删除子表
        List<String> list = Arrays.asList(ids);
        list.stream().forEach(item->{
            LambdaQueryWrapper<SpikesAndValleysItem> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.eq(SpikesAndValleysItem::getSchemeId,item);
            List<SpikesAndValleysItem> itemListOld = spikesAndValleysItemMapper.selectList(queryWrapper);
            List<String>idList = itemListOld.stream().map(s->s.getId()).collect(Collectors.toList());
            String[] itemIds = idList.toArray(new String[idList.size()]);
            spikesAndValleysItemMapper.deleteSpikesAndValleysItemByIds(itemIds);
        });
        return spikesAndValleysSchemeMapper.deleteSpikesAndValleysSchemeByIds(ids);
    }
    /**
     * åˆ é™¤å°–峰平谷时间段明细信息
     *
     * @param id å°–峰平谷时间段明细主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteSpikesAndValleysSchemeById(String id) {
        return spikesAndValleysSchemeMapper.deleteSpikesAndValleysSchemeById(id);
    }
}
zhitan-system/src/main/java/com/zhitan/system/domain/SysOperLog.java
@@ -1,12 +1,13 @@
package com.zhitan.system.domain;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.zhitan.common.annotation.Excel;
import com.zhitan.common.annotation.Excel.ColumnType;
import com.zhitan.common.core.domain.BaseEntity;
import java.util.Date;
/**
 * æ“ä½œæ—¥å¿—记录表 oper_log
@@ -31,6 +32,7 @@
    private Integer businessType;
    /** ä¸šåŠ¡ç±»åž‹æ•°ç»„ */
    @TableField(exist = false)
    private Integer[] businessTypes;
    /** è¯·æ±‚方法 */
zhitan-system/src/main/java/com/zhitan/system/domain/SysPost.java
@@ -1,15 +1,16 @@
package com.zhitan.system.domain;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.zhitan.common.annotation.Excel;
import com.zhitan.common.annotation.Excel.ColumnType;
import com.zhitan.common.core.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
/**
 * å²—位表 sys_post
@@ -42,6 +43,7 @@
    private String status;
    /** ç”¨æˆ·æ˜¯å¦å­˜åœ¨æ­¤å²—位标识 é»˜è®¤ä¸å­˜åœ¨ */
    @TableField(exist = false)
    private boolean flag = false;
    public Long getPostId()
zhitan-system/src/main/java/com/zhitan/system/service/ISysDictDataService.java
@@ -1,7 +1,9 @@
package com.zhitan.system.service;
import java.util.List;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhitan.common.core.domain.entity.SysDictData;
import java.util.List;
/**
 * å­—å…¸ ä¸šåС层
@@ -67,4 +69,6 @@
     * @return å­—典数据集合信息
     */
    List<SysDictData> selectDictDataByType(String dictType);
    Page<SysDictData> selectDictDataPage(SysDictData dictData, Long pageNum, Long pageSize);
}
zhitan-system/src/main/java/com/zhitan/system/service/ISysLoginInfoService.java
@@ -1,7 +1,9 @@
package com.zhitan.system.service;
import java.util.List;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhitan.system.domain.SysLoginInfo;
import java.util.List;
/**
 * ç³»ç»Ÿè®¿é—®æ—¥å¿—情况信息 æœåС层
@@ -37,4 +39,6 @@
     * æ¸…空系统登录日志
     */
     void cleanLoginInfo();
    Page<SysLoginInfo> selectLogininforPage(SysLoginInfo logininfor, Long pageNum, Long pageSize);
}
zhitan-system/src/main/java/com/zhitan/system/service/ISysOperLogService.java
@@ -1,7 +1,9 @@
package com.zhitan.system.service;
import java.util.List;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhitan.system.domain.SysOperLog;
import java.util.List;
/**
 * æ“ä½œæ—¥å¿— æœåС层
@@ -45,4 +47,6 @@
     * æ¸…空操作日志
     */
     void cleanOperLog();
    Page<SysOperLog> selectOperLogPage(SysOperLog operLog, Long pageNum, Long pageSize);
}
zhitan-system/src/main/java/com/zhitan/system/service/ISysPostService.java
@@ -1,7 +1,9 @@
package com.zhitan.system.service;
import java.util.List;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhitan.system.domain.SysPost;
import java.util.List;
/**
 * å²—位信息 æœåС层
@@ -96,4 +98,6 @@
     * @return ç»“æžœ
     */
     int updatePost(SysPost post);
    Page<SysPost> selectPostPage(SysPost post, Long pageNum, Long pageSize);
}
zhitan-system/src/main/java/com/zhitan/system/service/ISysRoleService.java
@@ -1,9 +1,11 @@
package com.zhitan.system.service;
import java.util.List;
import java.util.Set;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhitan.common.core.domain.entity.SysRole;
import com.zhitan.system.domain.SysUserRole;
import java.util.List;
import java.util.Set;
/**
 * è§’色业务层
@@ -170,4 +172,8 @@
     * @return ç»“æžœ
     */
     int insertAuthUsers(Long roleId, Long[] userIds);
    Page<SysRole> selectRolePage(SysRole role, Long pageNum, Long pageSize);
    SysRole getRoleByKey(SysRole queryRole);
}
zhitan-system/src/main/java/com/zhitan/system/service/ISysUserService.java
@@ -1,7 +1,9 @@
package com.zhitan.system.service;
import java.util.List;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhitan.common.core.domain.entity.SysUser;
import java.util.List;
/**
 * ç”¨æˆ· ä¸šåС层
@@ -203,4 +205,8 @@
     * @return ç»“æžœ
     */
     String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName);
     Page<SysUser> selectUserPage(SysUser user, Long pageNum, Long pageSize);
     Long checkThirdUserExist(SysUser user);
}
zhitan-system/src/main/java/com/zhitan/system/service/impl/SysDictDataServiceImpl.java
@@ -1,14 +1,17 @@
package com.zhitan.system.service.impl;
import java.util.List;
import javax.annotation.Resource;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import com.zhitan.common.core.domain.entity.SysDictData;
import com.zhitan.common.utils.DictUtils;
import com.zhitan.common.utils.StringUtils;
import com.zhitan.system.mapper.SysDictDataMapper;
import com.zhitan.system.service.ISysDictDataService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
 * å­—å…¸ ä¸šåŠ¡å±‚å¤„ç†
@@ -115,4 +118,12 @@
    public List<SysDictData> selectDictDataByType(String dictType) {
        return dictDataMapper.selectDictDataByType(dictType);
    }
    @Override
    public Page<SysDictData> selectDictDataPage(SysDictData dictData, Long pageNum, Long pageSize) {
        LambdaQueryWrapper<SysDictData> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(StringUtils.isNotEmpty(dictData.getDictLabel()),SysDictData::getDictLabel,dictData.getDictLabel());
        queryWrapper.eq(StringUtils.isNotEmpty(dictData.getDictType()),SysDictData::getDictType,dictData.getDictType());
        queryWrapper.eq(StringUtils.isNotEmpty(dictData.getStatus()),SysDictData::getStatus,dictData.getStatus());
        return dictDataMapper.selectPage(new Page<>(pageNum,pageSize),queryWrapper);
    }
}
zhitan-system/src/main/java/com/zhitan/system/service/impl/SysLoginInfoServiceImpl.java
@@ -1,13 +1,17 @@
package com.zhitan.system.service.impl;
import java.util.List;
import javax.annotation.Resource;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import com.zhitan.common.utils.DateUtils;
import com.zhitan.common.utils.StringUtils;
import com.zhitan.system.domain.SysLoginInfo;
import com.zhitan.system.mapper.SysLoginInfoMapper;
import com.zhitan.system.service.ISysLoginInfoService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
 * ç³»ç»Ÿè®¿é—®æ—¥å¿—情况信息 æœåŠ¡å±‚å¤„ç†
@@ -64,4 +68,17 @@
    {
        loginInfoMapper.cleanLoginInfo();
    }
    @Override
    public Page<SysLoginInfo> selectLogininforPage(SysLoginInfo logininfor, Long pageNum, Long pageSize) {
        LambdaQueryWrapper<SysLoginInfo> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(StringUtils.isNotEmpty(logininfor.getUserName()),SysLoginInfo::getUserName,logininfor.getUserName());
        queryWrapper.like(StringUtils.isNotEmpty(logininfor.getIpaddr()),SysLoginInfo::getIpaddr,logininfor.getIpaddr());
        queryWrapper.eq(StringUtils.isNotEmpty(logininfor.getStatus()),SysLoginInfo::getStatus,logininfor.getStatus());
        if(logininfor.getParams().containsKey("beginTime")) {
            queryWrapper.between(SysLoginInfo::getCreateTime,
                    DateUtils.parseDate(logininfor.getParams().get("beginTime")),
                    DateUtils.parseDate(logininfor.getParams().get("endTime")));
        }
        return loginInfoMapper.selectPage(new Page<>(pageNum,pageSize),queryWrapper);
    }
}
zhitan-system/src/main/java/com/zhitan/system/service/impl/SysOperLogServiceImpl.java
@@ -1,13 +1,17 @@
package com.zhitan.system.service.impl;
import java.util.List;
import javax.annotation.Resource;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import com.zhitan.common.utils.DateUtils;
import com.zhitan.common.utils.StringUtils;
import com.zhitan.system.domain.SysOperLog;
import com.zhitan.system.mapper.SysOperLogMapper;
import com.zhitan.system.service.ISysOperLogService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
 * æ“ä½œæ—¥å¿— æœåŠ¡å±‚å¤„ç†
@@ -75,4 +79,20 @@
    {
        operLogMapper.cleanOperLog();
    }
    @Override
    public Page<SysOperLog> selectOperLogPage(SysOperLog operLog, Long pageNum, Long pageSize) {
        LambdaQueryWrapper<SysOperLog> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(StringUtils.isNotEmpty(operLog.getOperIp()), SysOperLog::getOperIp,operLog.getOperIp());
        queryWrapper.like(StringUtils.isNotEmpty(operLog.getTitle()),SysOperLog::getTitle,operLog.getTitle());
        queryWrapper.like(StringUtils.isNotEmpty(operLog.getOperName()),SysOperLog::getOperName,operLog.getOperName());
        queryWrapper.eq(null != operLog.getBusinessType(),SysOperLog::getBusinessType,operLog.getBusinessType());
        queryWrapper.eq(null != operLog.getStatus(), SysOperLog::getStatus,operLog.getStatus());
        if(operLog.getParams().containsKey("beginTime")) {
            queryWrapper.between(SysOperLog::getCreateTime,
                    DateUtils.parseDate(operLog.getParams().get("beginTime")),
                    DateUtils.parseDate(operLog.getParams().get("endTime")));
        }
        return operLogMapper.selectPage(new Page<>(pageNum,pageSize),queryWrapper);
    }
}
zhitan-system/src/main/java/com/zhitan/system/service/impl/SysPostServiceImpl.java
@@ -1,10 +1,8 @@
package com.zhitan.system.service.impl;
import java.util.List;
import javax.annotation.Resource;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import com.zhitan.common.constant.UserConstants;
import com.zhitan.common.exception.ServiceException;
import com.zhitan.common.utils.StringUtils;
@@ -12,6 +10,10 @@
import com.zhitan.system.mapper.SysPostMapper;
import com.zhitan.system.mapper.SysUserPostMapper;
import com.zhitan.system.service.ISysPostService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
 * å²—位信息 æœåŠ¡å±‚å¤„ç†
@@ -177,4 +179,14 @@
    {
        return postMapper.updatePost(post);
    }
    @Override
    public Page<SysPost> selectPostPage(SysPost post, Long pageNum, Long pageSize) {
        LambdaQueryWrapper<SysPost> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(StringUtils.isNotEmpty(post.getPostName()),SysPost::getPostName,post.getPostName());
        queryWrapper.like(StringUtils.isNotEmpty(post.getPostCode()),SysPost::getPostCode,post.getPostCode());
        queryWrapper.eq(StringUtils.isNotEmpty(post.getStatus()),SysPost::getStatus,post.getStatus());
        return postMapper.selectPage(new Page<>(pageNum,pageSize),queryWrapper);
    }
}
zhitan-system/src/main/java/com/zhitan/system/service/impl/SysRoleServiceImpl.java
@@ -1,20 +1,14 @@
package com.zhitan.system.service.impl;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.annotation.Resource;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.zhitan.common.annotation.DataScope;
import com.zhitan.common.constant.UserConstants;
import com.zhitan.common.core.domain.entity.SysRole;
import com.zhitan.common.core.domain.entity.SysUser;
import com.zhitan.common.exception.ServiceException;
import com.zhitan.common.utils.DateUtils;
import com.zhitan.common.utils.SecurityUtils;
import com.zhitan.common.utils.StringUtils;
import com.zhitan.common.utils.spring.SpringUtils;
@@ -26,6 +20,11 @@
import com.zhitan.system.mapper.SysRoleMenuMapper;
import com.zhitan.system.mapper.SysUserRoleMapper;
import com.zhitan.system.service.ISysRoleService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.*;
/**
 * è§’色 ä¸šåŠ¡å±‚å¤„ç†
@@ -423,4 +422,24 @@
        }
        return userRoleMapper.batchUserRole(list);
    }
    @Override
    public Page<SysRole> selectRolePage(SysRole role, Long pageNum, Long pageSize) {
        LambdaQueryWrapper<SysRole> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(StringUtils.isNotEmpty(role.getRoleName()),SysRole::getRoleName,role.getRoleName());
        queryWrapper.like(StringUtils.isNotEmpty(role.getRoleKey()),SysRole::getRoleKey,role.getRoleKey());
        queryWrapper.eq(StringUtils.isNotEmpty(role.getStatus()),SysRole::getStatus,role.getStatus());
        if(role.getParams().containsKey("beginTime")) {
            queryWrapper.between(SysRole::getCreateTime,
                    DateUtils.parseDate(role.getParams().get("beginTime")),
                    DateUtils.parseDate(role.getParams().get("endTime")));
        }
        return roleMapper.selectPage(new Page<SysRole>(pageNum,pageSize),queryWrapper);
    }
    @Override
    public SysRole getRoleByKey(SysRole queryRole) {
        LambdaQueryWrapper<SysRole> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(SysRole::getRoleKey,queryRole.getRoleKey());
        return roleMapper.selectOne(queryWrapper);
    }
}
zhitan-system/src/main/java/com/zhitan/system/service/impl/SysUserServiceImpl.java
@@ -1,24 +1,14 @@
package com.zhitan.system.service.impl;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import javax.validation.Validator;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import com.zhitan.common.annotation.DataScope;
import com.zhitan.common.constant.UserConstants;
import com.zhitan.common.core.domain.entity.SysRole;
import com.zhitan.common.core.domain.entity.SysUser;
import com.zhitan.common.exception.ServiceException;
import com.zhitan.common.utils.DateUtils;
import com.zhitan.common.utils.SecurityUtils;
import com.zhitan.common.utils.StringUtils;
import com.zhitan.common.utils.bean.BeanValidators;
@@ -26,13 +16,20 @@
import com.zhitan.system.domain.SysPost;
import com.zhitan.system.domain.SysUserPost;
import com.zhitan.system.domain.SysUserRole;
import com.zhitan.system.mapper.SysPostMapper;
import com.zhitan.system.mapper.SysRoleMapper;
import com.zhitan.system.mapper.SysUserMapper;
import com.zhitan.system.mapper.SysUserPostMapper;
import com.zhitan.system.mapper.SysUserRoleMapper;
import com.zhitan.system.mapper.*;
import com.zhitan.system.service.ISysConfigService;
import com.zhitan.system.service.ISysUserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import javax.validation.Validator;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
 * ç”¨æˆ· ä¸šåŠ¡å±‚å¤„ç†
@@ -491,4 +488,25 @@
        }
        return successMsg.toString();
    }
    @Override
    public Page<SysUser> selectUserPage(SysUser user, Long pageNum, Long pageSize) {
        LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(StringUtils.isNotEmpty(user.getUserName()),SysUser::getUserName,user.getUserName());
        queryWrapper.like(StringUtils.isNotEmpty(user.getPhoneNumber()),SysUser::getPhoneNumber,user.getPhoneNumber());
        queryWrapper.eq(StringUtils.isNotEmpty(user.getStatus()),SysUser::getStatus,user.getStatus());
        if(user.getParams().containsKey("beginTime")) {
            queryWrapper.between(SysUser::getCreateTime,
                    DateUtils.parseDate(user.getParams().get("beginTime")),
                    DateUtils.parseDate(user.getParams().get("endTime")));
        }
        final Page<SysUser> page = userMapper.selectPage(new Page<SysUser>(pageNum, pageSize),queryWrapper);
        return page;
    }
    @Override
    public Long checkThirdUserExist(SysUser user) {
        LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(SysUser::getUserName,user.getUserName());
        return userMapper.selectCount(queryWrapper);
    }
}
zhitan-system/src/main/resources/mapper/basicdata/MeterImplementMapper.xml
@@ -127,6 +127,12 @@
        JOIN node_index ni ON ni.node_id = nd.node_id
        where ni.node_id= #{nodeId} and index_id= #{indexId}
    </select>
    <select id="listMeterImplByInstallLocation" resultType="com.zhitan.basicdata.domain.MeterImplement">
        <include refid="selectMeterImplementVo"/>
        <where>
            installaction_location = #{installactionLocation}
        </where>
    </select>
    <insert id="insertMeterImplement" parameterType="MeterImplement">
        insert into meter_implement
zhitan-system/src/main/resources/mapper/benchmarkmanage/EnergyBenchmarkManageMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,108 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhitan.benchmarkmanage.mapper.EnergyBenchmarkManageMapper">
    <resultMap type="com.zhitan.benchmarkmanage.domain.EnergyBenchmarkManage" id="EnergyBenchmarkManageResult">
        <result property="id"    column="id"    />
        <result property="code"    column="code"    />
        <result property="type"    column="type"    />
        <result property="grade"    column="grade"    />
        <result property="value"    column="value"    />
        <result property="nationalNum"    column="national_num"    />
        <result property="createBy"    column="create_by"    />
        <result property="createTime"    column="create_time"    />
        <result property="updateBy"    column="update_by"    />
        <result property="updateTime"    column="update_time"    />
        <result property="remark"    column="remark"    />
    </resultMap>
    <sql id="selectEnergyBenchmarkManageVo">
        select id, code, type, grade, value, national_num, create_by, create_time, update_by, update_time, remark from energy_benchmark_manage
    </sql>
    <select id="selectEnergyBenchmarkManageList" parameterType="com.zhitan.benchmarkmanage.domain.EnergyBenchmarkManage" resultMap="EnergyBenchmarkManageResult">
        <include refid="selectEnergyBenchmarkManageVo"/>
        <where>
            <if test="code != null  and code != ''"> and code like concat('%', #{code}, '%')</if>
            <if test="type != null  and type != ''"> and type = #{type}</if>
            <if test="grade != null  and grade != ''"> and grade = #{grade}</if>
            <if test="value != null  and value != ''"> and value = #{value}</if>
            <if test="nationalNum != null  and nationalNum != ''"> and national_num like concat('%', #{nationalNum}, '%')</if>
        </where>
    </select>
    <select id="selectEnergyBenchmarkManageById" parameterType="String" resultMap="EnergyBenchmarkManageResult">
        <include refid="selectEnergyBenchmarkManageVo"/>
        where id = #{id}
    </select>
    <insert id="insertEnergyBenchmarkManage" parameterType="com.zhitan.benchmarkmanage.domain.EnergyBenchmarkManage">
        insert into energy_benchmark_manage
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null and id != ''">id,</if>
            <if test="code != null">code,</if>
            <if test="type != null">type,</if>
            <if test="grade != null">grade,</if>
            <if test="value != null">value,</if>
            <if test="nationalNum != null">national_num,</if>
            <if test="createBy != null">create_by,</if>
            <if test="createTime != null">create_time,</if>
            <if test="updateBy != null">update_by,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="remark != null">remark,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null and id != ''">#{id},</if>
            <if test="code != null">#{code},</if>
            <if test="type != null">#{type},</if>
            <if test="grade != null">#{grade},</if>
            <if test="value != null">#{value},</if>
            <if test="nationalNum != null">#{nationalNum},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="remark != null">#{remark},</if>
         </trim>
    </insert>
    <update id="updateEnergyBenchmarkManage" parameterType="com.zhitan.benchmarkmanage.domain.EnergyBenchmarkManage">
        update energy_benchmark_manage
        <trim prefix="SET" suffixOverrides=",">
            <if test="code != null">code = #{code},</if>
            <if test="type != null">type = #{type},</if>
            <if test="grade != null">grade = #{grade},</if>
            <if test="value != null">value = #{value},</if>
            <if test="nationalNum != null">national_num = #{nationalNum},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="remark != null">remark = #{remark},</if>
        </trim>
        where id = #{id}
    </update>
    <delete id="deleteEnergyBenchmarkManageById" parameterType="String">
        delete from energy_benchmark_manage where id = #{id}
    </delete>
    <delete id="deleteEnergyBenchmarkManageByIds" parameterType="String">
        delete from energy_benchmark_manage where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
    <select id="getList" parameterType="com.zhitan.benchmarkmanage.domain.EnergyBenchmarkManage" resultMap="EnergyBenchmarkManageResult">
        <include refid="selectEnergyBenchmarkManageVo"/>
        <where>
            <if test="id != null  and id != ''"> and id != #{id}</if>
            <if test="code != null  and code != ''"> and code = #{code}</if>
            <if test="type != null  and type != ''"> and type = #{type}</if>
            <if test="grade != null  and grade != ''"> and grade = #{grade}</if>
        </where>
    </select>
</mapper>
zhitan-system/src/main/resources/mapper/costmanagement/CostElectricityInputMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhitan.costmanagement.mapper.CostElectricityInputMapper">
    <resultMap type="CostElectricityInput" id="CostElectricityInputResult">
        <result property="id"    column="id"    />
        <result property="type"    column="type"    />
        <result property="createTime"    column="create_time"    />
        <result property="createBy"    column="create_by"    />
        <result property="updateTime"    column="update_time"    />
        <result property="updateBy"    column="update_by"    />
        <result property="remark"    column="remark"    />
        <result property="electricityNum"    column="electricity_num"    />
        <result property="time"    column="time"    />
        <result property="electricityFee"    column="electricity_fee"    />
        <result property="powerFactor"    column="power_factor"    />
        <result property="sharpElectricity"    column="sharp_electricity"    />
        <result property="peakElectricity"    column="peak_electricity"    />
        <result property="flatElectricity"    column="flat_electricity"    />
        <result property="valleyElectricity"    column="valley_electricity"    />
    </resultMap>
    <sql id="selectCostElectricityInputVo">
        select id, type, create_time, create_by, update_time, update_by, remark, electricity_num, time,
            electricity_fee, power_factor, sharp_electricity, peak_electricity, flat_electricity, valley_electricity
        from cost_electricity_input
    </sql>
    <select id="selectCostElectricityInputList" parameterType="CostElectricityInput" resultMap="CostElectricityInputResult">
        <include refid="selectCostElectricityInputVo"/>
        <where>
            <if test="type != null  and type != ''"> and type = #{type}</if>
            <if test="electricityNum != null  and electricityNum != ''"> and electricity_num = #{electricityNum}</if>
            <if test="time != null  and time != ''"> and time = #{time}</if>
            <if test="electricityFee != null  and electricityFee != ''"> and electricity_fee = #{electricityFee}</if>
            <if test="powerFactor != null  and powerFactor != ''"> and power_factor = #{powerFactor}</if>
            <if test="sharpElectricity != null  and sharpElectricity != ''"> and sharp_electricity = #{sharpElectricity}</if>
            <if test="peakElectricity != null  and peakElectricity != ''"> and peak_electricity = #{peakElectricity}</if>
            <if test="flatElectricity != null  and flatElectricity != ''"> and flat_electricity = #{flatElectricity}</if>
            <if test="valleyElectricity != null  and valleyElectricity != ''"> and valley_electricity = #{valleyElectricity}</if>
        </where>
    </select>
    <select id="selectCostElectricityInputById" parameterType="String" resultMap="CostElectricityInputResult">
        <include refid="selectCostElectricityInputVo"/>
        where id = #{id}
    </select>
    <insert id="insertCostElectricityInput" parameterType="CostElectricityInput">
        insert into cost_electricity_input
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null and id != ''">id,</if>
            <if test="type != null">type,</if>
            <if test="createTime != null">create_time,</if>
            <if test="createBy != null">create_by,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="updateBy != null">update_by,</if>
            <if test="remark != null">remark,</if>
            <if test="electricityNum != null">electricity_num,</if>
            <if test="time != null">time,</if>
            <if test="electricityFee != null">electricity_fee,</if>
            <if test="powerFactor != null">power_factor,</if>
            <if test="sharpElectricity != null">sharp_electricity,</if>
            <if test="peakElectricity != null">peak_electricity,</if>
            <if test="flatElectricity != null">flat_electricity,</if>
            <if test="valleyElectricity != null">valley_electricity,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null and id != ''">#{id},</if>
            <if test="type != null">#{type},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
            <if test="remark != null">#{remark},</if>
            <if test="electricityNum != null">#{electricityNum},</if>
            <if test="time != null">#{time},</if>
            <if test="electricityFee != null">#{electricityFee},</if>
            <if test="powerFactor != null">#{powerFactor},</if>
            <if test="sharpElectricity != null">#{sharpElectricity},</if>
            <if test="peakElectricity != null">#{peakElectricity},</if>
            <if test="flatElectricity != null">#{flatElectricity},</if>
            <if test="valleyElectricity != null">#{valleyElectricity},</if>
         </trim>
    </insert>
    <update id="updateCostElectricityInput" parameterType="CostElectricityInput">
        update cost_electricity_input
        <trim prefix="SET" suffixOverrides=",">
            <if test="type != null">type = #{type},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="remark != null">remark = #{remark},</if>
            <if test="electricityNum != null">electricity_num = #{electricityNum},</if>
            <if test="time != null">time = #{time},</if>
            <if test="electricityFee != null">electricity_fee = #{electricityFee},</if>
            <if test="powerFactor != null">power_factor = #{powerFactor},</if>
            <if test="sharpElectricity != null">sharp_electricity = #{sharpElectricity},</if>
            <if test="peakElectricity != null">peak_electricity = #{peakElectricity},</if>
            <if test="flatElectricity != null">flat_electricity = #{flatElectricity},</if>
            <if test="valleyElectricity != null">valley_electricity = #{valleyElectricity},</if>
        </trim>
        where id = #{id}
    </update>
    <delete id="deleteCostElectricityInputById" parameterType="String">
        delete from cost_electricity_input where id = #{id}
    </delete>
    <delete id="deleteCostElectricityInputByIds" parameterType="String">
        delete from cost_electricity_input where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
</mapper>
zhitan-system/src/main/resources/mapper/costmanagement/CostPriceRelevancyMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,113 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhitan.costmanagement.mapper.CostPriceRelevancyMapper">
    <resultMap type="CostPriceRelevancy" id="CostPriceRelevancyResult">
        <result property="id"    column="id"    />
        <result property="createTime"    column="create_time"    />
        <result property="createBy"    column="create_by"    />
        <result property="updateTime"    column="update_time"    />
        <result property="updateBy"    column="update_by"    />
        <result property="remark"    column="remark"    />
        <result property="nodeId"    column="node_id"    />
        <result property="tacticsId"    column="tactics_id"    />
        <result property="energyType"    column="energy_type"    />
        <result property="effectiveBeginTime"    column="effective_begin_time"    />
        <result property="effectiveEndTime"    column="effective_end_time"    />
    </resultMap>
    <sql id="selectCostPriceRelevancyVo">
        select id, create_time, create_by, update_time, update_by, remark, node_id, tactics_id,
        energy_type, effective_begin_time, effective_end_time from cost_price_relevancy
    </sql>
    <select id="selectCostPriceRelevancyList" parameterType="CostPriceRelevancy" resultMap="CostPriceRelevancyResult">
        <include refid="selectCostPriceRelevancyVo"/>
        <where>
            <if test="nodeId != null  and nodeId != ''"> and node_id = #{nodeId}</if>
            <if test="tacticsId != null  and tacticsId != ''"> and tactics_id = #{tacticsId}</if>
            <if test="energyType != null  and energyType != ''"> and energy_type = #{energyType}</if>
            <if test="effectiveBeginTime != null "> and effective_begin_time = #{effectiveBeginTime}</if>
            <if test="effectiveEndTime != null "> and effective_end_time = #{effectiveEndTime}</if>
        </where>
    </select>
    <select id="selectCostPriceRelevancyById" parameterType="String" resultMap="CostPriceRelevancyResult">
        <include refid="selectCostPriceRelevancyVo"/>
        where id = #{id}
    </select>
    <insert id="insertCostPriceRelevancy" parameterType="CostPriceRelevancy">
        insert into cost_price_relevancy
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null and id != ''">id,</if>
            <if test="createTime != null">create_time,</if>
            <if test="createBy != null">create_by,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="updateBy != null">update_by,</if>
            <if test="remark != null">remark,</if>
            <if test="nodeId != null">node_id,</if>
            <if test="tacticsId != null">tactics_id,</if>
            <if test="energyType != null">energy_type,</if>
            <if test="effectiveBeginTime != null">effective_begin_time,</if>
            <if test="effectiveEndTime != null">effective_end_time,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null and id != ''">#{id},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
            <if test="remark != null">#{remark},</if>
            <if test="nodeId != null">#{nodeId},</if>
            <if test="tacticsId != null">#{tacticsId},</if>
            <if test="energyType != null">#{energyType},</if>
            <if test="effectiveBeginTime != null">#{effectiveBeginTime},</if>
            <if test="effectiveEndTime != null">#{effectiveEndTime},</if>
         </trim>
    </insert>
    <update id="updateCostPriceRelevancy" parameterType="CostPriceRelevancy">
        update cost_price_relevancy
        <trim prefix="SET" suffixOverrides=",">
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="remark != null">remark = #{remark},</if>
            <if test="nodeId != null">node_id = #{nodeId},</if>
            <if test="tacticsId != null">tactics_id = #{tacticsId},</if>
            <if test="energyType != null">energy_type = #{energyType},</if>
            <if test="effectiveBeginTime != null">effective_begin_time = #{effectiveBeginTime},</if>
            <if test="effectiveEndTime != null">effective_end_time = #{effectiveEndTime},</if>
        </trim>
        where id = #{id}
    </update>
    <delete id="deleteCostPriceRelevancyById" parameterType="String">
        delete from cost_price_relevancy where id = #{id}
    </delete>
    <delete id="deleteCostPriceRelevancyByIds" parameterType="String">
        delete from cost_price_relevancy where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
    <select id="selectCostPriceRelevancyByNodeId" parameterType="String" resultType="com.zhitan.costmanagement.domain.vo.CostPriceRelevancyVo">
                 SELECT
                 item.electricity_type AS electricityType,
                 item.price
                 FROM
                 cost_price_relevancy re
                 INNER JOIN cost_price_tactics ta ON re.tactics_id = ta.ID
                 INNER JOIN cost_price_tactics_item item ON item.tactics_id = ta.ID
                 WHERE
                 re.node_id = #{nodeId}
                 and item.electricity_type=#{elType}
    </select>
</mapper>
zhitan-system/src/main/resources/mapper/costmanagement/CostPriceTacticsItemMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,108 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhitan.costmanagement.mapper.CostPriceTacticsItemMapper">
    <resultMap type="CostPriceTacticsItem" id="CostPriceTacticsItemResult">
        <result property="id"    column="id"    />
        <result property="createTime"    column="create_time"    />
        <result property="createBy"    column="create_by"    />
        <result property="updateTime"    column="update_time"    />
        <result property="updateBy"    column="update_by"    />
        <result property="remark"    column="remark"    />
        <result property="rangeType"    column="range_type"    />
        <result property="tacticsNumber"    column="tactics_number"    />
        <result property="tacticsId"    column="tactics_id"    />
        <result property="electricityType"    column="electricity_type"    />
        <result property="slotsMin"    column="slots_min"    />
        <result property="slotsMax"    column="slots_max"    />
        <result property="price"    column="price"    />
    </resultMap>
    <sql id="selectCostPriceTacticsItemVo">
        select id, create_time, create_by, update_time, update_by, remark, range_type, tactics_number, tactics_id, electricity_type, slots_min, slots_max, price from cost_price_tactics_item
    </sql>
    <select id="selectCostPriceTacticsItemList" parameterType="CostPriceTacticsItem" resultMap="CostPriceTacticsItemResult">
        <include refid="selectCostPriceTacticsItemVo"/>
        <where>
            <if test="rangeType != null  and rangeType != ''"> and range_type = #{rangeType}</if>
            <if test="tacticsNumber != null  and tacticsNumber != ''"> and tactics_number = #{tacticsNumber}</if>
            <if test="tacticsId != null  and tacticsId != ''"> and tactics_id = #{tacticsId}</if>
            <if test="electricityType != null  and electricityType != ''"> and electricity_type = #{electricityType}</if>
            <if test="slotsMin != null  and slotsMin != ''"> and slots_min = #{slotsMin}</if>
            <if test="slotsMax != null  and slotsMax != ''"> and slots_max = #{slotsMax}</if>
            <if test="price != null  and price != ''"> and price = #{price}</if>
        </where>
    </select>
    <select id="selectCostPriceTacticsItemById" parameterType="String" resultMap="CostPriceTacticsItemResult">
        <include refid="selectCostPriceTacticsItemVo"/>
        where id = #{id}
    </select>
    <insert id="insertCostPriceTacticsItem" parameterType="CostPriceTacticsItem">
        insert into cost_price_tactics_item
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null and id != ''">id,</if>
            <if test="createTime != null">create_time,</if>
            <if test="createBy != null">create_by,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="updateBy != null">update_by,</if>
            <if test="remark != null">remark,</if>
            <if test="rangeType != null">range_type,</if>
            <if test="tacticsNumber != null">tactics_number,</if>
            <if test="tacticsId != null">tactics_id,</if>
            <if test="electricityType != null">electricity_type,</if>
            <if test="slotsMin != null">slots_min,</if>
            <if test="slotsMax != null">slots_max,</if>
            <if test="price != null">price,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null and id != ''">#{id},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
            <if test="remark != null">#{remark},</if>
            <if test="rangeType != null">#{rangeType},</if>
            <if test="tacticsNumber != null">#{tacticsNumber},</if>
            <if test="tacticsId != null">#{tacticsId},</if>
            <if test="electricityType != null">#{electricityType},</if>
            <if test="slotsMin != null">#{slotsMin},</if>
            <if test="slotsMax != null">#{slotsMax},</if>
            <if test="price != null">#{price},</if>
         </trim>
    </insert>
    <update id="updateCostPriceTacticsItem" parameterType="CostPriceTacticsItem">
        update cost_price_tactics_item
        <trim prefix="SET" suffixOverrides=",">
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="remark != null">remark = #{remark},</if>
            <if test="rangeType != null">range_type = #{rangeType},</if>
            <if test="tacticsNumber != null">tactics_number = #{tacticsNumber},</if>
            <if test="tacticsId != null">tactics_id = #{tacticsId},</if>
            <if test="electricityType != null">electricity_type = #{electricityType},</if>
            <if test="slotsMin != null">slots_min = #{slotsMin},</if>
            <if test="slotsMax != null">slots_max = #{slotsMax},</if>
            <if test="price != null">price = #{price},</if>
        </trim>
        where id = #{id}
    </update>
    <delete id="deleteCostPriceTacticsItemById" parameterType="String">
        delete from cost_price_tactics_item where id = #{id}
    </delete>
    <delete id="deleteCostPriceTacticsItemByIds" parameterType="String">
        delete from cost_price_tactics_item where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
</mapper>
zhitan-system/src/main/resources/mapper/costmanagement/CostPriceTacticsMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,103 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhitan.costmanagement.mapper.CostPriceTacticsMapper">
    <resultMap type="CostPriceTactics" id="CostPriceTacticsResult">
        <result property="id"    column="id"    />
        <result property="type"    column="type"    />
        <result property="createTime"    column="create_time"    />
        <result property="createBy"    column="create_by"    />
        <result property="updateTime"    column="update_time"    />
        <result property="updateBy"    column="update_by"    />
        <result property="remark"    column="remark"    />
        <result property="tacticsNumber"    column="tactics_number"    />
        <result property="tacticsName"    column="tactics_name"    />
        <result property="energyType"    column="energy_type"    />
    </resultMap>
    <sql id="selectCostPriceTacticsVo">
        select id, type, create_time, create_by, update_time, update_by, remark, tactics_number, tactics_name, energy_type from cost_price_tactics
    </sql>
    <select id="selectCostPriceTacticsList" parameterType="CostPriceTactics" resultMap="CostPriceTacticsResult">
        <include refid="selectCostPriceTacticsVo"/>
        <where>
            <if test="type != null  and type != ''"> and type = #{type}</if>
            <if test="tacticsNumber != null  and tacticsNumber != ''"> and tactics_number = #{tacticsNumber}</if>
            <if test="tacticsName != null  and tacticsName != ''"> and tactics_name like concat('%', #{tacticsName}, '%')</if>
            <if test="energyType != null  and energyType != ''"> and energy_type = #{energyType}</if>
        </where>
    </select>
    <select id="selectCostPriceTacticsById" parameterType="String" resultMap="CostPriceTacticsResult">
        <include refid="selectCostPriceTacticsVo"/>
        where id = #{id}
    </select>
    <insert id="insertCostPriceTactics" parameterType="CostPriceTactics">
        insert into cost_price_tactics
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null and id != ''">id,</if>
            <if test="type != null">type,</if>
            <if test="createTime != null">create_time,</if>
            <if test="createBy != null">create_by,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="updateBy != null">update_by,</if>
            <if test="remark != null">remark,</if>
            <if test="tacticsNumber != null">tactics_number,</if>
            <if test="tacticsName != null">tactics_name,</if>
            <if test="energyType != null">energy_type,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null and id != ''">#{id},</if>
            <if test="type != null">#{type},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
            <if test="remark != null">#{remark},</if>
            <if test="tacticsNumber != null">#{tacticsNumber},</if>
            <if test="tacticsName != null">#{tacticsName},</if>
            <if test="energyType != null">#{energyType},</if>
         </trim>
    </insert>
    <update id="updateCostPriceTactics" parameterType="CostPriceTactics">
        update cost_price_tactics
        <trim prefix="SET" suffixOverrides=",">
            <if test="type != null">type = #{type},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="remark != null">remark = #{remark},</if>
            <if test="tacticsNumber != null">tactics_number = #{tacticsNumber},</if>
            <if test="tacticsName != null">tactics_name = #{tacticsName},</if>
            <if test="energyType != null">energy_type = #{energyType},</if>
        </trim>
        where id = #{id}
    </update>
    <delete id="deleteCostPriceTacticsById" parameterType="String">
        delete from cost_price_tactics where id = #{id}
    </delete>
    <delete id="deleteCostPriceTacticsByIds" parameterType="String">
        delete from cost_price_tactics where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
    <select id="selectCostPriceTacticsListAll"  resultMap="CostPriceTacticsResult">
        <include refid="selectCostPriceTacticsVo"/>
        <where>
            <if test="type != null  and type != ''"> and type = #{type}</if>
            <if test="tacticsNumber != null  and tacticsNumber != ''"> and tactics_number = #{tacticsNumber}</if>
            <if test="tacticsName != null  and tacticsName != ''"> and tactics_name like concat('%', #{tacticsName}, '%')</if>
            <if test="energyType != null  and energyType != ''"> and energy_type = #{energyType}</if>
        </where>
    </select>
</mapper>
zhitan-system/src/main/resources/mapper/dataitem/DataItemMapper.xml
@@ -136,4 +136,67 @@
            </foreach>
            AND time_code = #{timeCode}
    </select>
    <select id="getUpCarbonEmission" resultType="com.zhitan.carbonemission.domain.CarbonEmission">
        SELECT
            di.index_id,
            di.data_time,
            di.value,
            ei.energy_id
        FROM
            data_item  di
                JOIN energy_index ei  ON di.index_id = ei.index_id
        WHERE
            ei.energy_id != '' and
            di.index_id IN ( SELECT index_id FROM node_index WHERE node_id = #{indexId})
          AND di.data_time BETWEEN   #{beginTime}  AND  #{endTime}
          AND di.time_type = #{timeType}
    </select>
    <select id="getMiddleCarbonEmission" resultType="com.zhitan.carbonemission.domain.CarbonEmission">
        SELECT
            di.index_id,
            di.data_time,
        CASE
        WHEN di.time_type = 'MONTH' THEN
        TO_CHAR( di.create_time, 'MM' )
        WHEN di.time_type = 'DAY' THEN
        TO_CHAR( di.create_time, 'DD' )
        WHEN di.time_type = 'HOUR' THEN
        TO_CHAR( di.data_time, 'HH' )
        ELSE TO_CHAR( di.data_time, 'YYMMDD' )
        END AS dataTimeStr,
            di.value,
            ei.energy_id,
            di.time_type
        FROM
            data_item  di
                JOIN energy_index ei  ON di.index_id = ei.index_id
        WHERE
            di.index_id IN ( SELECT index_id FROM node_index WHERE node_id = #{indexId})
        <if test="emissionType !='' and emissionType !=null  and emissionType =='allType'">
            AND ei.energy_id != ''
        </if>
        <if test="emissionType !='' and emissionType !=null  and emissionType !='allType'">
            AND  ei.energy_id = #{emissionType}
        </if>
          AND di.data_time BETWEEN   #{beginTime}  AND  #{endTime}
          AND di.time_type = #{timeType}
    </select>
    <select id="getDownCarbonEmission" resultType="com.zhitan.carbonemission.domain.CarbonEmission">
        SELECT
            di.index_id,
            di.data_time,
            di.value,
            ei.energy_id,
            mn.name as nodeName
        FROM
        model_node mn
        LEFT JOIN node_index ni ON mn.node_id = ni.node_id
        LEFT JOIN data_item di ON di.index_id = ni.index_id
        LEFT JOIN energy_index ei ON di.index_id = ei.index_id
        WHERE
        ei.energy_id != ''
        AND mn.parent_id = #{indexId}
        AND di.data_time BETWEEN   #{beginTime}  AND  #{endTime}
        AND di.time_type =  #{timeType}
    </select>
</mapper>
zhitan-system/src/main/resources/mapper/energyData/EnergyDataMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhitan.energydata.mapper.EnergyDataStatisticMapper">
    <select id="getModelNodeIndexIdByFixedNodeIds" resultType="com.zhitan.model.domain.vo.ModelNodeIndexInfor">
        SELECT mn.node_id  nodeId,
               mn."name"   "name",
               ni.index_id indexId,
               ei.energy_id
        FROM "model_node" mn
                 LEFT JOIN "node_index" ni ON mn.node_id = ni.node_id
                 left join energy_index ei on ni.index_id = ei.index_id
        WHERE mn.model_code = #{modelCode}  and ei.index_type = 'STATISTIC'
        and mn.node_id in
        <foreach collection="fixedNodeIds" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
    </select>
</mapper>
zhitan-system/src/main/resources/mapper/energydatastatistics/EnergyDataStatisticMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhitan.model.mapper.EnergyDataStatisticMapper">
    <resultMap type="com.zhitan.model.domain.CalcFunction" id="CalcFunctionResult">
        <result property="id" column="id"/>
        <result property="info" column="info"/>
        <result property="funcName" column="func_name"/>
        <result property="funcText" column="func_text"/>
    </resultMap>
    <sql id="selectCalcFunctionVo">
        select id, func_name, func_text, info
        from calc_function
    </sql>
    <select id="selectCalcFunctionList" parameterType="com.zhitan.model.domain.CalcFunction" resultMap="CalcFunctionResult">
        <include refid="selectCalcFunctionVo"/>
        <where>
            <if test="funcName != null  and funcName != ''">and func_name like concat('%', #{funcName}, '%')</if>
        </where>
    </select>
    <select id="selectCalcFunctionById" parameterType="String" resultMap="CalcFunctionResult">
        <include refid="selectCalcFunctionVo"/>
        where id = #{id}
    </select>
    <insert id="insertCalcFunction" parameterType="com.zhitan.model.domain.CalcFunction">
        insert into calc_function
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null  and id != ''">id,</if>
            <if test="funcName != null  and funcName != ''">func_name,</if>
            <if test="funcText != null  and funcText != ''">func_text,</if>
            <if test="info != null  and info != ''">info,</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null  and id != ''">#{id},</if>
            <if test="funcName != null  and funcName != ''">#{funcName},</if>
            <if test="funcText != null  and funcText != ''">#{funcText},</if>
            <if test="info != null  and info != ''">#{info},</if>
        </trim>
    </insert>
    <update id="updateCalcFunction" parameterType="com.zhitan.model.domain.CalcFunction">
        update calc_function
        <trim prefix="SET" suffixOverrides=",">
            <if test="info != null  and info != ''">info = #{info},</if>
            <if test="funcName != null  and funcName != ''">func_name = #{funcName},</if>
            <if test="funcText != null  and funcText != ''">func_text = #{funcText},</if>
        </trim>
        where id = #{id}
    </update>
    <delete id="deleteCalcFunctionById" parameterType="String">
        delete
        from calc_function
        where id = #{id}
    </delete>
    <delete id="deleteCalcFunctionByIds" parameterType="String">
        delete from calc_function where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
</mapper>
zhitan-system/src/main/resources/mapper/model/EnergyIndexMapper.xml
@@ -376,5 +376,19 @@
  <select id="getiEnergyIndexByCode" resultType="com.zhitan.model.domain.EnergyIndex">
    <include refid="selectEnergyIndexVo"/>
    where code = #{cdoe}
  </select>
  <select id="getIndexByCode" resultType="com.zhitan.model.domain.EnergyIndex">
    SELECT ei.code,mi.meter_name||'_'||ei.name as name from energy_index ei
    LEFT JOIN node_device nd on ei.meter_id =  nd.device_id
    LEFT JOIN meter_implement  mi on mi."id" = nd.device_id
    <where>
        <if test="nodeId != null  and nodeId != ''">and nd.node_id  = #{nodeId}</if>
        <if test="code != null  and code != ''">
          and (mi.meter_name like concat('%', #{code}, '%')
          or ei.code like concat('%', #{code}, '%')
          or ei.name like concat('%', #{code}, '%')
          )
        </if>
    </where>
  </select>
</mapper>
zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml
@@ -414,10 +414,17 @@
        FROM "model_node" mn
        LEFT JOIN "node_index" ni ON mn.node_id = ni.node_id
        left join energy_index ei on ni.index_id = ei.index_id
        WHERE mn.model_code = #{modelCode}
        <where>
            mn.model_code = #{modelCode}
          AND mn.node_id in
        <foreach collection="nodeIds" index="index" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
        <if test="modelCode!=null and modelCode!='' and nodeIds.size>0">
            and ei.index_type='STATISTIC'
        </if>
        </where>
    </select>
</mapper>
zhitan-system/src/main/resources/mapper/peakvalley/ElectricityDataItemMapper.xml
@@ -27,5 +27,26 @@
        AND (data_time BETWEEN #{startTime} AND #{endTime})
        AND time_type = #{timeType}
    </select>
    <select id="getDataStatisticsDeviationAnalysis"
            resultType="com.zhitan.peakvalley.domain.ElectricityDataItem">
        SELECT
        index_code indexCode,
        time_code timeCode,
        electricity_type electricityType,
        data_time dataTime,
        electricity,
        "cost",
        time_type timeType,
        price,
        remark
        FROM
        "electricity_data_item"
        WHERE
        index_id IN
        <foreach collection="indexIdSet" item="indexId" open="(" separator="," close=")">
            #{indexId}
        </foreach>
        AND time_type = #{timeType}
    </select>
</mapper>
zhitan-system/src/main/resources/mapper/peakvalley/ElectricityPriceDateMapper.xml
@@ -80,4 +80,10 @@
            #{id}
        </foreach>
    </delete>
    <select id="selectElectricityPriceDatePageTacticsAll"  resultMap="ElectricityPriceDateResult">
        <include refid="selectElectricityPriceDateVo"/>
        WHERE begin_date &lt; CURRENT_TIMESTAMP
        AND end_date &gt; CURRENT_TIMESTAMP
    </select>
</mapper>
zhitan-system/src/main/resources/mapper/powerDistribution/powerDistributionMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhitan.powerDistribution.mapper.PowerDistributionMapper">
    <delete id="deletePowerDistributionByIds" parameterType="String">
        delete from power_distribution
        <where>
            id in
            <foreach collection="ids" item="id" open="(" separator="," close=")">
                #{id}
            </foreach>
        </where>
    </delete>
</mapper>
zhitan-system/src/main/resources/mapper/spikesandvalleys/SpikesAndValleysItemMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,98 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhitan.spikesandvalleys.mapper.SpikesAndValleysItemMapper">
    <resultMap type="SpikesAndValleysItem" id="SpikesAndValleysItemResult">
        <result property="id"    column="id"    />
        <result property="time"    column="time"    />
        <result property="createTime"    column="create_time"    />
        <result property="createBy"    column="create_by"    />
        <result property="updateTime"    column="update_time"    />
        <result property="updateBy"    column="update_by"    />
        <result property="remark"    column="remark"    />
        <result property="electrovalency"    column="electrovalency"    />
        <result property="startTime"    column="start_time"    />
        <result property="endTime"    column="end_time"    />
        <result property="schemeId"    column="scheme_id"    />
    </resultMap>
    <sql id="selectSpikesAndValleysItemVo">
        select id, time, create_time, create_by, update_time, update_by, remark, electrovalency, start_time, end_time, scheme_id from spikes_and_valleys_item
    </sql>
    <select id="selectSpikesAndValleysItemList" parameterType="SpikesAndValleysItem" resultMap="SpikesAndValleysItemResult">
        <include refid="selectSpikesAndValleysItemVo"/>
        <where>
            <if test="time != null  and time != ''"> and time = #{time}</if>
            <if test="electrovalency != null  and electrovalency != ''"> and electrovalency = #{electrovalency}</if>
            <if test="startTime != null  and startTime != ''"> and start_time = #{startTime}</if>
            <if test="endTime != null  and endTime != ''"> and end_time = #{endTime}</if>
            <if test="schemeId != null  and schemeId != ''"> and scheme_id = #{schemeId}</if>
        </where>
    </select>
    <select id="selectSpikesAndValleysItemById" parameterType="String" resultMap="SpikesAndValleysItemResult">
        <include refid="selectSpikesAndValleysItemVo"/>
        where id = #{id}
    </select>
    <insert id="insertSpikesAndValleysItem" parameterType="SpikesAndValleysItem">
        insert into spikes_and_valleys_item
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null and id != ''">id,</if>
            <if test="time != null">time,</if>
            <if test="createTime != null">create_time,</if>
            <if test="createBy != null">create_by,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="updateBy != null">update_by,</if>
            <if test="remark != null">remark,</if>
            <if test="electrovalency != null">electrovalency,</if>
            <if test="startTime != null">start_time,</if>
            <if test="endTime != null">end_time,</if>
            <if test="schemeId != null">scheme_id,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null and id != ''">#{id},</if>
            <if test="time != null">#{time},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
            <if test="remark != null">#{remark},</if>
            <if test="electrovalency != null">#{electrovalency},</if>
            <if test="startTime != null">#{startTime},</if>
            <if test="endTime != null">#{endTime},</if>
            <if test="schemeId != null">#{schemeId},</if>
         </trim>
    </insert>
    <update id="updateSpikesAndValleysItem" parameterType="SpikesAndValleysItem">
        update spikes_and_valleys_item
        <trim prefix="SET" suffixOverrides=",">
            <if test="time != null">time = #{time},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="remark != null">remark = #{remark},</if>
            <if test="electrovalency != null">electrovalency = #{electrovalency},</if>
            <if test="startTime != null">start_time = #{startTime},</if>
            <if test="endTime != null">end_time = #{endTime},</if>
            <if test="schemeId != null">scheme_id = #{schemeId},</if>
        </trim>
        where id = #{id}
    </update>
    <delete id="deleteSpikesAndValleysItemById" parameterType="String">
        delete from spikes_and_valleys_item where id = #{id}
    </delete>
    <delete id="deleteSpikesAndValleysItemByIds" parameterType="String">
        delete from spikes_and_valleys_item where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
</mapper>
zhitan-system/src/main/resources/mapper/spikesandvalleys/SpikesAndValleysSchemeMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,88 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhitan.spikesandvalleys.mapper.SpikesAndValleysSchemeMapper">
    <resultMap type="SpikesAndValleysScheme" id="SpikesAndValleysSchemeResult">
        <result property="id"    column="id"    />
        <result property="createTime"    column="create_time"    />
        <result property="createBy"    column="create_by"    />
        <result property="updateTime"    column="update_time"    />
        <result property="updateBy"    column="update_by"    />
        <result property="remark"    column="remark"    />
        <result property="schemeName"    column="scheme_name"    />
        <result property="executeTime"    column="execute_time"    />
        <result property="type"    column="type"    />
    </resultMap>
    <sql id="selectSpikesAndValleysSchemeVo">
        select id, create_time, create_by, update_time, update_by, remark, scheme_name, execute_time, type from spikes_and_valleys_scheme
    </sql>
    <select id="selectSpikesAndValleysSchemeList" parameterType="SpikesAndValleysScheme" resultMap="SpikesAndValleysSchemeResult">
        <include refid="selectSpikesAndValleysSchemeVo"/>
        <where>
            <if test="schemeName != null  and schemeName != ''"> and scheme_name like concat('%', #{schemeName}, '%')</if>
            <if test="executeTime != null "> and execute_time = #{executeTime}</if>
            <if test="type != null  and type != ''"> and type = #{type}</if>
        </where>
    </select>
    <select id="selectSpikesAndValleysSchemeById" parameterType="String" resultMap="SpikesAndValleysSchemeResult">
        <include refid="selectSpikesAndValleysSchemeVo"/>
        where id = #{id}
    </select>
    <insert id="insertSpikesAndValleysScheme" parameterType="SpikesAndValleysScheme">
        insert into spikes_and_valleys_scheme
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null and id != ''">id,</if>
            <if test="createTime != null">create_time,</if>
            <if test="createBy != null">create_by,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="updateBy != null">update_by,</if>
            <if test="remark != null">remark,</if>
            <if test="schemeName != null">scheme_name,</if>
            <if test="executeTime != null">execute_time,</if>
            <if test="type != null">type,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null and id != ''">#{id},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
            <if test="remark != null">#{remark},</if>
            <if test="schemeName != null">#{schemeName},</if>
            <if test="executeTime != null">#{executeTime},</if>
            <if test="type != null">#{type},</if>
         </trim>
    </insert>
    <update id="updateSpikesAndValleysScheme" parameterType="SpikesAndValleysScheme">
        update spikes_and_valleys_scheme
        <trim prefix="SET" suffixOverrides=",">
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="remark != null">remark = #{remark},</if>
            <if test="schemeName != null">scheme_name = #{schemeName},</if>
            <if test="executeTime != null">execute_time = #{executeTime},</if>
            <if test="type != null">type = #{type},</if>
        </trim>
        where id = #{id}
    </update>
    <delete id="deleteSpikesAndValleysSchemeById" parameterType="String">
        delete from spikes_and_valleys_scheme where id = #{id}
    </delete>
    <delete id="deleteSpikesAndValleysSchemeByIds" parameterType="String">
        delete from spikes_and_valleys_scheme where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
</mapper>
zhitan-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -23,6 +23,7 @@
        <result property="updateBy" column="update_by"/>
        <result property="updateTime" column="update_time"/>
        <result property="remark" column="remark"/>
        <result property="singleUser" column="single_user"/>
        <association property="dept"    javaType="SysDept"         resultMap="deptResult" />
        <collection property="roles" javaType="java.util.List" resultMap="RoleResult"/>
    </resultMap>
@@ -63,6 +64,7 @@
               u.create_by,
               u.create_time,
               u.remark,
               u.single_user,
               d.dept_id,
               d.parent_id,
               d.ancestors,
@@ -84,7 +86,7 @@
    <select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
        select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phone_number, u.password, u.sex,
        u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from
        u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,u.single_user, d.dept_name, d.leader from
        sys_user u
        left join sys_dept d on u.dept_id = d.dept_id
        where u.del_flag = '0'
@@ -147,6 +149,7 @@
        <if test="status != null and status != ''">status,</if>
        <if test="createBy != null and createBy != ''">create_by,</if>
        <if test="remark != null and remark != ''">remark,</if>
        <if test="singleUser != null and singleUser != ''">single_user,</if>
        create_time
        )values(
        <if test="userId != null and userId != ''">#{userId},</if>
@@ -161,6 +164,7 @@
        <if test="status != null and status != ''">#{status},</if>
        <if test="createBy != null and createBy != ''">#{createBy},</if>
        <if test="remark != null and remark != ''">#{remark},</if>
        <if test="singleUser != null and singleUser != ''">#{singleUser},</if>
        now()
        )
    </insert>
@@ -181,6 +185,7 @@
            <if test="loginDate != null">login_date = #{loginDate},</if>
            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
            <if test="remark != null">remark = #{remark},</if>
            <if test="singleUser != null and singleUser != ''">single_user = #{singleUser},</if>
            update_time = now()
        </set>
        where user_id = #{userId}