19 changed files with 2022 additions and 1 deletions
			
			
		
									
										Binary file not shown.
									
								
							
						@ -0,0 +1,141 @@ | 
				
			|||||||
 | 
					package com.mh.web.controller.report; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.alibaba.excel.EasyExcel; | 
				
			||||||
 | 
					import com.mh.common.core.controller.BaseController; | 
				
			||||||
 | 
					import com.mh.common.core.domain.AjaxResult; | 
				
			||||||
 | 
					import com.mh.common.core.domain.dto.BFloorReportHotWaterDTO; | 
				
			||||||
 | 
					import com.mh.common.core.domain.dto.ThreeFloorReportHotWaterDTO; | 
				
			||||||
 | 
					import com.mh.common.core.domain.entity.ReportHotWaterParamHis; | 
				
			||||||
 | 
					import com.mh.common.core.domain.entity.ReportSysRunParamHis; | 
				
			||||||
 | 
					import com.mh.common.core.page.TableDataInfo; | 
				
			||||||
 | 
					import com.mh.common.utils.StringUtils; | 
				
			||||||
 | 
					import com.mh.common.utils.file.handle.ExcelFillCellMergeHandler; | 
				
			||||||
 | 
					import com.mh.common.utils.file.handle.ReportSysParamHandler; | 
				
			||||||
 | 
					import com.mh.common.utils.file.handle.RowHeightStyleHandler; | 
				
			||||||
 | 
					import com.mh.system.service.report.IReportHotWaterService; | 
				
			||||||
 | 
					import jakarta.servlet.http.HttpServletResponse; | 
				
			||||||
 | 
					import lombok.extern.slf4j.Slf4j; | 
				
			||||||
 | 
					import org.springframework.beans.BeanUtils; | 
				
			||||||
 | 
					import org.springframework.web.bind.annotation.*; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.IOException; | 
				
			||||||
 | 
					import java.net.URLEncoder; | 
				
			||||||
 | 
					import java.util.List; | 
				
			||||||
 | 
					import java.util.stream.Collectors; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @author LJF | 
				
			||||||
 | 
					 * @version 1.0 | 
				
			||||||
 | 
					 * @project NewZhujiang_Server | 
				
			||||||
 | 
					 * @description 热泵系统运行参数报表 | 
				
			||||||
 | 
					 * @date 2024-05-30 08:45:57 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@RestController | 
				
			||||||
 | 
					@RequestMapping("/reportHotWater") | 
				
			||||||
 | 
					@Slf4j | 
				
			||||||
 | 
					public class ReportHotWaterController extends BaseController { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private final IReportHotWaterService reportHotWaterService; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private ReportHotWaterController(IReportHotWaterService reportHotWaterService) { | 
				
			||||||
 | 
					        this.reportHotWaterService = reportHotWaterService; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @PostMapping("/list") | 
				
			||||||
 | 
					    public TableDataInfo list(@RequestBody ReportHotWaterParamHis reportHotWaterParamHis) | 
				
			||||||
 | 
					    { | 
				
			||||||
 | 
					        startPage(); | 
				
			||||||
 | 
					        List<ReportHotWaterParamHis> list = reportHotWaterService.selectList(reportHotWaterParamHis); | 
				
			||||||
 | 
					        return getDataTable(list); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @PutMapping("/edit") | 
				
			||||||
 | 
					    public AjaxResult edit(@RequestBody ReportHotWaterParamHis reportHotWaterParamHis) | 
				
			||||||
 | 
					    { | 
				
			||||||
 | 
					        return toAjax(reportHotWaterService.updateRunParams(reportHotWaterParamHis)); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @PostMapping("/export") | 
				
			||||||
 | 
					    public void exportExcel(@RequestBody ReportHotWaterParamHis reportHotWaterParamHis, HttpServletResponse response) { | 
				
			||||||
 | 
					        // 文件名
 | 
				
			||||||
 | 
					        try { | 
				
			||||||
 | 
					            String fileName =  "热水热泵运行记录表.xlsx"; | 
				
			||||||
 | 
					            String floorId = reportHotWaterParamHis.getFloorId(); | 
				
			||||||
 | 
					            String headTitle = "热水热泵运行记录表"; | 
				
			||||||
 | 
					            if (!StringUtils.isBlank(floorId)) { | 
				
			||||||
 | 
					                if (floorId.contains("-1楼")) { | 
				
			||||||
 | 
					                    fileName = "-1楼热水热泵运行记录表.xlsx"; | 
				
			||||||
 | 
					                    headTitle = "-1楼热水热泵运行记录表"; | 
				
			||||||
 | 
					                } else { | 
				
			||||||
 | 
					                    fileName = "3楼热水热泵运行记录表.xlsx"; | 
				
			||||||
 | 
					                    headTitle = "3楼热水热泵运行记录表"; | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					            // 从数据库获取数据
 | 
				
			||||||
 | 
					            List<ReportHotWaterParamHis> list = reportHotWaterService.selectList(reportHotWaterParamHis); | 
				
			||||||
 | 
					            if (list != null) { | 
				
			||||||
 | 
					                // 设置响应格式
 | 
				
			||||||
 | 
					                response.setContentType("application/vdn.ms-excel;charset=utf-8"); | 
				
			||||||
 | 
					                response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(fileName, "UTF-8") + "\""); | 
				
			||||||
 | 
					                response.setCharacterEncoding("UTF-8"); | 
				
			||||||
 | 
					                ExcelFillCellMergeHandler mergePrevCol = new ExcelFillCellMergeHandler(); | 
				
			||||||
 | 
					                int headSize = 3; | 
				
			||||||
 | 
					                if (floorId.contains("-1楼")) { | 
				
			||||||
 | 
					                    List<BFloorReportHotWaterDTO> infoDTOS = list.stream().map(info -> { | 
				
			||||||
 | 
					                        BFloorReportHotWaterDTO deviceInfoDTO = new BFloorReportHotWaterDTO(); | 
				
			||||||
 | 
					                        BeanUtils.copyProperties(info, deviceInfoDTO); | 
				
			||||||
 | 
					                        // 单独处理启停和运行状态
 | 
				
			||||||
 | 
					                        deviceInfoDTO.setStatusRunHotPumpOneStr(info.getStatusRunHotPumpOne() == 1 ? "运行" : "不运行"); | 
				
			||||||
 | 
					                        deviceInfoDTO.setStatusSwitchHotPumpOneStr(info.getStatusSwitchHotPumpOne() == 1 ? "开机" : "关机"); | 
				
			||||||
 | 
					                        deviceInfoDTO.setStatusRunHotPumpTwoStr(info.getStatusRunHotPumpTwo() == 1 ? "运行" : "不运行"); | 
				
			||||||
 | 
					                        deviceInfoDTO.setStatusSwitchHotPumpTwoStr(info.getStatusSwitchHotPumpTwo() == 1 ? "开机" : "关机"); | 
				
			||||||
 | 
					                        deviceInfoDTO.setStatusRunSupplyPumpOneStr(info.getStatusRunSupplyPumpOne() == 1 ? "运行" : "不运行"); | 
				
			||||||
 | 
					                        deviceInfoDTO.setStatusRunSupplyPumpTwoStr(info.getStatusRunSupplyPumpTwo() == 1 ? "运行" : "不运行"); | 
				
			||||||
 | 
					                        deviceInfoDTO.setStatusRunSupplyPumpThreeStr(info.getStatusRunSupplyPumpThree() == 1 ? "运行" : "不运行"); | 
				
			||||||
 | 
					                        deviceInfoDTO.setStatusRunSupplyPumpFourStr(info.getStatusRunSupplyPumpFour() == 1 ? "运行" : "不运行"); | 
				
			||||||
 | 
					                        return deviceInfoDTO; | 
				
			||||||
 | 
					                    }).collect(Collectors.toList()); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    // 内容格式
 | 
				
			||||||
 | 
					                    EasyExcel.write(response.getOutputStream(), BFloorReportHotWaterDTO.class) | 
				
			||||||
 | 
					                            .registerWriteHandler(new ReportSysParamHandler(headTitle)) | 
				
			||||||
 | 
					                            .registerWriteHandler(mergePrevCol) | 
				
			||||||
 | 
					                            .registerWriteHandler(new RowHeightStyleHandler()) | 
				
			||||||
 | 
					                            .sheet(fileName.replace(".xlsx", "")) | 
				
			||||||
 | 
					                            .doWrite(infoDTOS); | 
				
			||||||
 | 
					                } else { | 
				
			||||||
 | 
					                    List<ThreeFloorReportHotWaterDTO> infoDTOS = list.stream().map(info -> { | 
				
			||||||
 | 
					                        ThreeFloorReportHotWaterDTO deviceInfoDTO = new ThreeFloorReportHotWaterDTO(); | 
				
			||||||
 | 
					                        BeanUtils.copyProperties(info, deviceInfoDTO); | 
				
			||||||
 | 
					                        // 单独处理启停和运行状态
 | 
				
			||||||
 | 
					                        deviceInfoDTO.setStatusRunHotPumpOneStr(info.getStatusRunHotPumpOne() == 1 ? "运行" : "不运行"); | 
				
			||||||
 | 
					                        deviceInfoDTO.setStatusSwitchHotPumpOneStr(info.getStatusSwitchHotPumpOne() == 1 ? "开机" : "关机"); | 
				
			||||||
 | 
					                        deviceInfoDTO.setStatusRunHotPumpTwoStr(info.getStatusRunHotPumpTwo() == 1 ? "运行" : "不运行"); | 
				
			||||||
 | 
					                        deviceInfoDTO.setStatusSwitchHotPumpTwoStr(info.getStatusSwitchHotPumpTwo() == 1 ? "开机" : "关机"); | 
				
			||||||
 | 
					                        deviceInfoDTO.setStatusRunHotPumpThreeStr(info.getStatusRunHotPumpThree() == 1 ? "运行" : "不运行"); | 
				
			||||||
 | 
					                        deviceInfoDTO.setStatusSwitchHotPumpThreeStr(info.getStatusSwitchHotPumpThree() == 1 ? "开机" : "关机"); | 
				
			||||||
 | 
					                        deviceInfoDTO.setStatusRunHotPumpFourStr(info.getStatusRunHotPumpFour() == 1 ? "运行" : "不运行"); | 
				
			||||||
 | 
					                        deviceInfoDTO.setStatusSwitchHotPumpFourStr(info.getStatusSwitchHotPumpFour() == 1 ? "开机" : "关机"); | 
				
			||||||
 | 
					                        deviceInfoDTO.setStatusRunSupplyPumpOneStr(info.getStatusRunSupplyPumpOne() == 1 ? "运行" : "不运行"); | 
				
			||||||
 | 
					                        deviceInfoDTO.setStatusRunSupplyPumpTwoStr(info.getStatusRunSupplyPumpTwo() == 1 ? "运行" : "不运行"); | 
				
			||||||
 | 
					                        deviceInfoDTO.setStatusRunSupplyPumpThreeStr(info.getStatusRunSupplyPumpThree() == 1 ? "运行" : "不运行"); | 
				
			||||||
 | 
					                        deviceInfoDTO.setStatusRunSupplyPumpFourStr(info.getStatusRunSupplyPumpFour() == 1 ? "运行" : "不运行"); | 
				
			||||||
 | 
					                        return deviceInfoDTO; | 
				
			||||||
 | 
					                    }).collect(Collectors.toList()); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    // 内容格式
 | 
				
			||||||
 | 
					                    EasyExcel.write(response.getOutputStream(), ThreeFloorReportHotWaterDTO.class) | 
				
			||||||
 | 
					                            .registerWriteHandler(new ReportSysParamHandler(headTitle)) | 
				
			||||||
 | 
					                            .registerWriteHandler(mergePrevCol) | 
				
			||||||
 | 
					                            .registerWriteHandler(new RowHeightStyleHandler()) | 
				
			||||||
 | 
					                            .sheet(fileName.replace(".xlsx", "")) | 
				
			||||||
 | 
					                            .doWrite(infoDTOS); | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					        } catch (IOException e) { | 
				
			||||||
 | 
					            throw new RuntimeException("下载报表异常"); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,131 @@ | 
				
			|||||||
 | 
					package com.mh.web.controller.report; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.alibaba.excel.EasyExcel; | 
				
			||||||
 | 
					import com.alibaba.excel.ExcelWriter; | 
				
			||||||
 | 
					import com.alibaba.excel.write.metadata.WriteSheet; | 
				
			||||||
 | 
					import com.alibaba.excel.write.metadata.fill.FillWrapper; | 
				
			||||||
 | 
					import com.mh.common.core.controller.BaseController; | 
				
			||||||
 | 
					import com.mh.common.core.domain.dto.WeatherDataDTO; | 
				
			||||||
 | 
					import com.mh.common.core.domain.entity.ReportMeterReadingsHis; | 
				
			||||||
 | 
					import com.mh.common.core.page.TableDataInfo; | 
				
			||||||
 | 
					import com.mh.common.utils.DateUtils; | 
				
			||||||
 | 
					import com.mh.system.service.device.ICoolingSystemMonitorService; | 
				
			||||||
 | 
					import com.mh.system.service.report.IMeterReadingsHisService; | 
				
			||||||
 | 
					import jakarta.servlet.http.HttpServletResponse; | 
				
			||||||
 | 
					import org.apache.poi.ss.usermodel.*; | 
				
			||||||
 | 
					import org.springframework.core.io.ClassPathResource; | 
				
			||||||
 | 
					import org.springframework.web.bind.annotation.*; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.ByteArrayOutputStream; | 
				
			||||||
 | 
					import java.io.File; | 
				
			||||||
 | 
					import java.io.IOException; | 
				
			||||||
 | 
					import java.io.InputStream; | 
				
			||||||
 | 
					import java.net.URLEncoder; | 
				
			||||||
 | 
					import java.util.Date; | 
				
			||||||
 | 
					import java.util.HashMap; | 
				
			||||||
 | 
					import java.util.List; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @author LJF | 
				
			||||||
 | 
					 * @version 1.0 | 
				
			||||||
 | 
					 * @project EEMCS | 
				
			||||||
 | 
					 * @description 每日抄表记录查询 | 
				
			||||||
 | 
					 * @date 2025-10-21 16:04:09 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@RestController | 
				
			||||||
 | 
					@RequestMapping("/reportMeterReadings") | 
				
			||||||
 | 
					public class ReportMeterReadingsController extends BaseController { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private final IMeterReadingsHisService meterReadingsHisService; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private final ICoolingSystemMonitorService coolingSystemMonitorService; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public ReportMeterReadingsController(IMeterReadingsHisService meterReadingsHisService, ICoolingSystemMonitorService coolingSystemMonitorService) { | 
				
			||||||
 | 
					        this.meterReadingsHisService = meterReadingsHisService; | 
				
			||||||
 | 
					        this.coolingSystemMonitorService = coolingSystemMonitorService; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @PostMapping("/list") | 
				
			||||||
 | 
					    public TableDataInfo list(@RequestBody ReportMeterReadingsHis todayTimestamp) | 
				
			||||||
 | 
					    { | 
				
			||||||
 | 
					        List<ReportMeterReadingsHis> list = meterReadingsHisService.selectList(todayTimestamp); | 
				
			||||||
 | 
					        return getDataTable(list); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @PostMapping("/export") | 
				
			||||||
 | 
					    public void exportExcel(@RequestBody ReportMeterReadingsHis reportMeterReadingsHis, HttpServletResponse response) { | 
				
			||||||
 | 
					        // 文件名
 | 
				
			||||||
 | 
					        try { | 
				
			||||||
 | 
					            String fileName =  "节能岛改造每日能耗统计表"+ DateUtils.dateToString(reportMeterReadingsHis.getTodayTimestamp(), "yyyyMMdd")+".xlsx"; | 
				
			||||||
 | 
					            // 读取资源文件
 | 
				
			||||||
 | 
					            ClassPathResource classPathResource = new ClassPathResource(File.separator + "节能岛改造每日能耗统计表.xlsx"); | 
				
			||||||
 | 
					            // 获取数据
 | 
				
			||||||
 | 
					            List<ReportMeterReadingsHis> list = meterReadingsHisService.selectList(reportMeterReadingsHis); | 
				
			||||||
 | 
					            // 组织并填充模板数据
 | 
				
			||||||
 | 
					            ByteArrayOutputStream byteArrayOutputStream = compositeFill(classPathResource.getInputStream(), reportMeterReadingsHis.getTodayTimestamp(), list); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // 设置响应格式
 | 
				
			||||||
 | 
					            response.setContentType("application/vdn.ms-excel;charset=utf-8"); | 
				
			||||||
 | 
					            response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(fileName, "UTF-8") + "\""); | 
				
			||||||
 | 
					            response.setCharacterEncoding("UTF-8"); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // 将文件内容写入响应输出流,浏览器可以直接触发下载
 | 
				
			||||||
 | 
					            response.getOutputStream().write(byteArrayOutputStream.toByteArray()); | 
				
			||||||
 | 
					            response.getOutputStream().flush(); | 
				
			||||||
 | 
					        } catch (IOException e) { | 
				
			||||||
 | 
					            throw new RuntimeException("下载报表异常"); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private ByteArrayOutputStream compositeFill(InputStream templateInputStream, Date todayTimestamp, List<ReportMeterReadingsHis> list) throws IOException { | 
				
			||||||
 | 
					        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); | 
				
			||||||
 | 
					        // 使用EasyExcel的模板填充功能,在这里指定合并单元格,这里应该是easyExcel的bug,第一列无法合并,其他列都可以,所以第一列单独用原生poi进行合并
 | 
				
			||||||
 | 
					        try (ExcelWriter excelWriter = EasyExcel.write(byteArrayOutputStream).withTemplate(templateInputStream) | 
				
			||||||
 | 
					                .build()) { | 
				
			||||||
 | 
					            WriteSheet writeSheet = EasyExcel.writerSheet().build(); | 
				
			||||||
 | 
					            // 防止上面两个表格覆盖下面两个表格,每一行都采用新增一行的方式
 | 
				
			||||||
 | 
					//            FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
 | 
				
			||||||
 | 
					            // 使用模板填充,必须使用FillWrapper,这是官方要求,并且每行两个表格只能有一个表格设置增行,否则会存在一个表格有空行,这里是造的测试数据
 | 
				
			||||||
 | 
					            for (int i = 0; i < list.size(); i++) { | 
				
			||||||
 | 
					                excelWriter.fill(new FillWrapper("data"+(i+1), List.of(list.get(i))), writeSheet); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // 设置表格外的填充数据,例如总计、日期等数据
 | 
				
			||||||
 | 
					            HashMap<String, Object> map = new HashMap<>(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            List<WeatherDataDTO> weatherTemp = (List<WeatherDataDTO>) coolingSystemMonitorService.getWeatherTemp(DateUtils.dateToString(todayTimestamp, "yyyy-MM-dd"), DateUtils.dateToString(todayTimestamp, "yyyy-MM-dd")); | 
				
			||||||
 | 
					            if (!weatherTemp.isEmpty()) { | 
				
			||||||
 | 
					                String maxTemp = weatherTemp.getFirst().getMaxTemp(); | 
				
			||||||
 | 
					                map.put("maxTemp", maxTemp); | 
				
			||||||
 | 
					                String minTemp = weatherTemp.getFirst().getMinTemp(); | 
				
			||||||
 | 
					                map.put("minTemp", minTemp); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            map.put("date", DateUtils.dateToString(todayTimestamp, "yyyy年MM月dd日")); | 
				
			||||||
 | 
					            excelWriter.fill(map, writeSheet); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // 2. 获取 Workbook 并计算公式
 | 
				
			||||||
 | 
					            Workbook workbook = excelWriter.writeContext() | 
				
			||||||
 | 
					                    .writeWorkbookHolder() | 
				
			||||||
 | 
					                    .getWorkbook(); | 
				
			||||||
 | 
					            FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); | 
				
			||||||
 | 
					            for (Row row : workbook.getSheetAt(0)) { | 
				
			||||||
 | 
					                for (Cell cell : row) { | 
				
			||||||
 | 
					                    if (cell.getCellType() == CellType.FORMULA) { | 
				
			||||||
 | 
					                        evaluator.evaluateFormulaCell(cell); // 单元格级计算
 | 
				
			||||||
 | 
					                        // evaluator.evaluateAll(); // 全工作簿计算(推荐)
 | 
				
			||||||
 | 
					                    } | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // 3. 强制刷新计算结果
 | 
				
			||||||
 | 
					            workbook.setForceFormulaRecalculation(true); | 
				
			||||||
 | 
					            excelWriter.finish(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 合并单元格,由于easyExcel自带的OnceAbsoluteMergeStrategy合并策略bug,这里需要用poi合并一下
 | 
				
			||||||
 | 
					        return byteArrayOutputStream; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} | 
				
			||||||
									
										Binary file not shown.
									
								
							
						@ -0,0 +1,170 @@ | 
				
			|||||||
 | 
					package com.mh.common.core.domain.dto; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.alibaba.excel.annotation.ExcelProperty; | 
				
			||||||
 | 
					import com.alibaba.excel.annotation.write.style.*; | 
				
			||||||
 | 
					import com.alibaba.excel.enums.poi.BorderStyleEnum; | 
				
			||||||
 | 
					import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum; | 
				
			||||||
 | 
					import lombok.Data; | 
				
			||||||
 | 
					import lombok.NoArgsConstructor; | 
				
			||||||
 | 
					import lombok.experimental.Accessors; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.math.BigDecimal; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//import java.math.String;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @author LJF | 
				
			||||||
 | 
					 * @version 1.0 | 
				
			||||||
 | 
					 * @project NewZhujiang_Server | 
				
			||||||
 | 
					 * @description 三楼热水系统参数报表 | 
				
			||||||
 | 
					 * @date 2024-05-30 11:00:12 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Data | 
				
			||||||
 | 
					@NoArgsConstructor | 
				
			||||||
 | 
					@Accessors(chain = true) | 
				
			||||||
 | 
					@HeadRowHeight(25) | 
				
			||||||
 | 
					@HeadFontStyle(fontHeightInPoints = 14) | 
				
			||||||
 | 
					@ContentFontStyle(fontHeightInPoints = 13) | 
				
			||||||
 | 
					@ContentRowHeight(25) | 
				
			||||||
 | 
					@ContentStyle( | 
				
			||||||
 | 
					        horizontalAlignment = HorizontalAlignmentEnum.CENTER, | 
				
			||||||
 | 
					        borderBottom = BorderStyleEnum.THIN, | 
				
			||||||
 | 
					        borderLeft = BorderStyleEnum.THIN, | 
				
			||||||
 | 
					        borderRight = BorderStyleEnum.THIN, | 
				
			||||||
 | 
					        borderTop = BorderStyleEnum.THIN | 
				
			||||||
 | 
					) | 
				
			||||||
 | 
					@ColumnWidth(10) | 
				
			||||||
 | 
					public class BFloorReportHotWaterDTO { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 当前时间 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @ColumnWidth(17) | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "时间", "时间"}, index = 0) | 
				
			||||||
 | 
					    private String curTime; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//    /**
 | 
				
			||||||
 | 
					//     * 班次
 | 
				
			||||||
 | 
					//     */
 | 
				
			||||||
 | 
					//    @ColumnWidth(10)
 | 
				
			||||||
 | 
					//    @ExcelProperty(value = {"${deviceType}", "班次", "班次"}, index = 1)
 | 
				
			||||||
 | 
					//    private String classes;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 设定温度℃ | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "1号热泵", "设定温度℃"}, index = 1) | 
				
			||||||
 | 
					    private BigDecimal tempSetHotPumpOne; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 实际温度℃ | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "1号热泵", "实际温度℃"}, index = 2) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private BigDecimal tempRealHotPumpOne; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 设备开关机 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "1号热泵", "设备开关机"}, index = 3) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private String statusSwitchHotPumpOneStr; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 设备运行状态 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "1号热泵", "设备运行状态"}, index = 4) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private String statusRunHotPumpOneStr; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 设定温度℃ | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "2号热泵", "设定温度℃"}, index = 5) | 
				
			||||||
 | 
					    private BigDecimal tempSetHotPumpTwo; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 实际温度℃ | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "2号热泵", "实际温度℃"}, index = 6) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private BigDecimal tempRealHotPumpTwo; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 设备开关机 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "2号热泵", "设备开关机"}, index = 7) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private String statusSwitchHotPumpTwoStr; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 设备运行状态 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "2号热泵", "设备运行状态"}, index = 8) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private String statusRunHotPumpTwoStr; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 高区/裙楼设定压力(bar)
 | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "裙楼变频泵", "设定压力bar"}, index = 9) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private BigDecimal presSetSupplyPumpAreaOne; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 高区/裙楼实际压力(bar)
 | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "裙楼变频泵", "实际压力bar"}, index = 10) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private BigDecimal presRealSupplyPumpAreaOne; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 高区/裙楼1号泵运行状态
 | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "裙楼变频泵", "1号泵运行状态"}, index = 11) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private String statusRunSupplyPumpOneStr; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 高区/裙楼2号泵运行状态
 | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "裙楼变频泵", "2号泵运行状态"}, index = 12) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private String statusRunSupplyPumpTwoStr; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 中区/中厨设定压力(bar)
 | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "中厨变频泵", "设定压力bar"}, index = 13) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private BigDecimal presSetSupplyPumpAreaTwo; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 中区/中厨实际压力(bar)
 | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "中厨变频泵", "实际压力bar"}, index = 14) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private BigDecimal presRealSupplyPumpAreaTwo; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 中区/中厨1号泵运行状态
 | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "中厨变频泵", "1号泵运行状态"}, index = 15) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private String statusRunSupplyPumpThreeStr; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 中区/中厨2号泵运行状态
 | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "中厨变频泵", "2号泵运行状态"}, index = 16) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private String statusRunSupplyPumpFourStr; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 高区/裙楼液位(米)
 | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "水箱液位", "裙楼液位%"}, index = 17) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private BigDecimal levelWaterTankOne; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 中区/中厨液位(米)
 | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "水箱液位", "中厨液位%"}, index = 18) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private BigDecimal levelWaterTankTwo; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 巡查记录人
 | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "巡查记录人", "巡查记录人"}, index = 19) | 
				
			||||||
 | 
					    @ColumnWidth(20) | 
				
			||||||
 | 
					    private String recorder; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 备注信息
 | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "备注", "备注"}, index = 20) | 
				
			||||||
 | 
					    @ColumnWidth(20) | 
				
			||||||
 | 
					    private String remark; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,210 @@ | 
				
			|||||||
 | 
					package com.mh.common.core.domain.dto; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.alibaba.excel.annotation.ExcelProperty; | 
				
			||||||
 | 
					import com.alibaba.excel.annotation.write.style.*; | 
				
			||||||
 | 
					import com.alibaba.excel.enums.poi.BorderStyleEnum; | 
				
			||||||
 | 
					import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum; | 
				
			||||||
 | 
					import lombok.Data; | 
				
			||||||
 | 
					import lombok.NoArgsConstructor; | 
				
			||||||
 | 
					import lombok.experimental.Accessors; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.math.BigDecimal; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//import java.math.String;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @author LJF | 
				
			||||||
 | 
					 * @version 1.0 | 
				
			||||||
 | 
					 * @project NewZhujiang_Server | 
				
			||||||
 | 
					 * @description 三楼热水系统参数报表 | 
				
			||||||
 | 
					 * @date 2024-05-30 11:00:12 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Data | 
				
			||||||
 | 
					@NoArgsConstructor | 
				
			||||||
 | 
					@Accessors(chain = true) | 
				
			||||||
 | 
					@HeadRowHeight(25) | 
				
			||||||
 | 
					@HeadFontStyle(fontHeightInPoints = 14) | 
				
			||||||
 | 
					@ContentFontStyle(fontHeightInPoints = 13) | 
				
			||||||
 | 
					@ContentRowHeight(25) | 
				
			||||||
 | 
					@ContentStyle( | 
				
			||||||
 | 
					        horizontalAlignment = HorizontalAlignmentEnum.CENTER, | 
				
			||||||
 | 
					        borderBottom = BorderStyleEnum.THIN, | 
				
			||||||
 | 
					        borderLeft = BorderStyleEnum.THIN, | 
				
			||||||
 | 
					        borderRight = BorderStyleEnum.THIN, | 
				
			||||||
 | 
					        borderTop = BorderStyleEnum.THIN | 
				
			||||||
 | 
					) | 
				
			||||||
 | 
					@ColumnWidth(10) | 
				
			||||||
 | 
					public class ThreeFloorReportHotWaterDTO { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 当前时间 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @ColumnWidth(17) | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "时间", "时间"}, index = 0) | 
				
			||||||
 | 
					    private String curTime; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//    /**
 | 
				
			||||||
 | 
					//     * 班次
 | 
				
			||||||
 | 
					//     */
 | 
				
			||||||
 | 
					//    @ColumnWidth(10)
 | 
				
			||||||
 | 
					//    @ExcelProperty(value = {"${deviceType}", "班次", "班次"}, index = 1)
 | 
				
			||||||
 | 
					//    private String classes;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 设定温度℃ | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "1号热泵", "设定温度℃"}, index = 1) | 
				
			||||||
 | 
					    private BigDecimal tempSetHotPumpOne; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 实际温度℃ | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "1号热泵", "实际温度℃"}, index = 2) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private BigDecimal tempRealHotPumpOne; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 设备开关机 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "1号热泵", "设备开关机"}, index = 3) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private String statusSwitchHotPumpOneStr; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 设备运行状态 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "1号热泵", "设备运行状态"}, index = 4) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private String statusRunHotPumpOneStr; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 设定温度℃ | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "2号热泵", "设定温度℃"}, index = 5) | 
				
			||||||
 | 
					    private BigDecimal tempSetHotPumpTwo; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 实际温度℃ | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "2号热泵", "实际温度℃"}, index = 6) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private BigDecimal tempRealHotPumpTwo; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 设备开关机 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "2号热泵", "设备开关机"}, index = 7) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private String statusSwitchHotPumpTwoStr; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 设备运行状态 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "2号热泵", "设备运行状态"}, index = 8) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private String statusRunHotPumpTwoStr; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 3号热泵设定温度(℃)
 | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "3号热泵", "设定温度℃"}, index = 9) | 
				
			||||||
 | 
					    private BigDecimal tempSetHotPumpThree; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 3号热泵实际温度(℃)
 | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "3号热泵", "实际温度℃"}, index = 10) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private BigDecimal tempRealHotPumpThree; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 3号热泵启停状态
 | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "3号热泵", "设备开关机"}, index = 11) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private String statusSwitchHotPumpThreeStr; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 3号热泵运行状态
 | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "3号热泵", "设备运行状态"}, index = 12) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private String statusRunHotPumpThreeStr; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 4号热泵设定温度(℃)
 | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "4号热泵", "设定温度℃"}, index = 13) | 
				
			||||||
 | 
					    private BigDecimal tempSetHotPumpFour; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 4号热泵实际温度(℃)
 | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "4号热泵", "实际温度℃"}, index = 14) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private BigDecimal tempRealHotPumpFour; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 4号热泵启停状态
 | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "4号热泵", "设备开关机"}, index = 15) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private String statusSwitchHotPumpFourStr; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 4号热泵运行状态
 | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "4号热泵", "设备运行状态"}, index = 16) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private String statusRunHotPumpFourStr; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 高区/高区设定压力(bar)
 | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "高区变频泵", "设定压力bar"}, index = 17) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private BigDecimal presSetSupplyPumpAreaOne; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 高区/高区实际压力(bar)
 | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "高区变频泵", "实际压力bar"}, index = 18) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private BigDecimal presRealSupplyPumpAreaOne; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 高区/高区1号泵运行状态
 | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "高区变频泵", "1号泵运行状态"}, index = 19) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private String statusRunSupplyPumpOneStr; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 高区/高区2号泵运行状态
 | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "高区变频泵", "2号泵运行状态"}, index = 20) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private String statusRunSupplyPumpTwoStr; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 中区/中区设定压力(bar)
 | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "中区变频泵", "设定压力bar"}, index = 21) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private BigDecimal presSetSupplyPumpAreaTwo; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 中区/中区实际压力(bar)
 | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "中区变频泵", "实际压力bar"}, index = 22) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private BigDecimal presRealSupplyPumpAreaTwo; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 中区/中区1号泵运行状态
 | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "中区变频泵", "1号泵运行状态"}, index = 23) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private String statusRunSupplyPumpThreeStr; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 中区/中区2号泵运行状态
 | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "中区变频泵", "2号泵运行状态"}, index = 24) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private String statusRunSupplyPumpFourStr; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 高区/高区液位(米)
 | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "水箱液位", "高区液位%"}, index = 25) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private BigDecimal levelWaterTankOne; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 中区/中区液位(米)
 | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "水箱液位", "中区液位%"}, index = 26) | 
				
			||||||
 | 
					    @ColumnWidth(10) | 
				
			||||||
 | 
					    private BigDecimal levelWaterTankTwo; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 巡查记录人
 | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "巡查记录人", "巡查记录人"}, index = 27) | 
				
			||||||
 | 
					    @ColumnWidth(20) | 
				
			||||||
 | 
					    private String recorder; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 备注信息
 | 
				
			||||||
 | 
					    @ExcelProperty(value = {"${deviceType}", "备注", "备注"}, index = 28) | 
				
			||||||
 | 
					    @ColumnWidth(20) | 
				
			||||||
 | 
					    private String remark; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,224 @@ | 
				
			|||||||
 | 
					package com.mh.common.core.domain.entity; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.baomidou.mybatisplus.annotation.IdType; | 
				
			||||||
 | 
					import com.baomidou.mybatisplus.annotation.TableField; | 
				
			||||||
 | 
					import com.baomidou.mybatisplus.annotation.TableId; | 
				
			||||||
 | 
					import com.baomidou.mybatisplus.annotation.TableName; | 
				
			||||||
 | 
					import com.fasterxml.jackson.annotation.JsonFormat; | 
				
			||||||
 | 
					import com.fasterxml.jackson.annotation.JsonIgnore; | 
				
			||||||
 | 
					import com.fasterxml.jackson.annotation.JsonInclude; | 
				
			||||||
 | 
					import com.mh.common.core.domain.BaseEntity; | 
				
			||||||
 | 
					import lombok.Getter; | 
				
			||||||
 | 
					import lombok.Setter; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.Serial; | 
				
			||||||
 | 
					import java.io.Serializable; | 
				
			||||||
 | 
					import java.math.BigDecimal; | 
				
			||||||
 | 
					import java.time.LocalDate; | 
				
			||||||
 | 
					import java.time.LocalDateTime; | 
				
			||||||
 | 
					import java.util.Date; | 
				
			||||||
 | 
					import java.util.Map; | 
				
			||||||
 | 
					import java.util.StringJoiner; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @author LJF | 
				
			||||||
 | 
					 * @version 1.0 | 
				
			||||||
 | 
					 * @project EEMCS | 
				
			||||||
 | 
					 * @description 生活热水供水热泵运行情况 | 
				
			||||||
 | 
					 * @date 2025-10-22 17:40:03 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Setter | 
				
			||||||
 | 
					@Getter | 
				
			||||||
 | 
					@TableName("report_hot_water_param_his") | 
				
			||||||
 | 
					public class ReportHotWaterParamHis extends BaseEntity implements Serializable { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 主键
 | 
				
			||||||
 | 
					    @Serial | 
				
			||||||
 | 
					    private static final long serialVersionUID = 1L; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @TableId(value = "id", type = IdType.ASSIGN_UUID) | 
				
			||||||
 | 
					    private String id; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 楼层ID
 | 
				
			||||||
 | 
					    private String floorId; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 记录日期
 | 
				
			||||||
 | 
					    private LocalDate curDate; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 记录时间(varchar格式)
 | 
				
			||||||
 | 
					    private String curTime; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 班次
 | 
				
			||||||
 | 
					    private String classes; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 1号热泵设定温度(℃)
 | 
				
			||||||
 | 
					    private BigDecimal tempSetHotPumpOne; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 1号热泵实际温度(℃)
 | 
				
			||||||
 | 
					    private BigDecimal tempRealHotPumpOne; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 1号热泵启停状态(0-关闭,1-开启)
 | 
				
			||||||
 | 
					    private Integer statusSwitchHotPumpOne; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 1号热泵运行状态(0-故障,1-正常)
 | 
				
			||||||
 | 
					    private Integer statusRunHotPumpOne; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 2号热泵设定温度(℃)
 | 
				
			||||||
 | 
					    private BigDecimal tempSetHotPumpTwo; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 2号热泵实际温度(℃)
 | 
				
			||||||
 | 
					    private BigDecimal tempRealHotPumpTwo; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 2号热泵启停状态
 | 
				
			||||||
 | 
					    private Integer statusSwitchHotPumpTwo; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 2号热泵运行状态
 | 
				
			||||||
 | 
					    private Integer statusRunHotPumpTwo; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 3号热泵设定温度(℃)
 | 
				
			||||||
 | 
					    private BigDecimal tempSetHotPumpThree; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 3号热泵实际温度(℃)
 | 
				
			||||||
 | 
					    private BigDecimal tempRealHotPumpThree; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 3号热泵启停状态
 | 
				
			||||||
 | 
					    private Integer statusSwitchHotPumpThree; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 3号热泵运行状态
 | 
				
			||||||
 | 
					    private Integer statusRunHotPumpThree; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 4号热泵设定温度(℃)
 | 
				
			||||||
 | 
					    private BigDecimal tempSetHotPumpFour; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 4号热泵实际温度(℃)
 | 
				
			||||||
 | 
					    private BigDecimal tempRealHotPumpFour; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 4号热泵启停状态
 | 
				
			||||||
 | 
					    private Integer statusSwitchHotPumpFour; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 4号热泵运行状态
 | 
				
			||||||
 | 
					    private Integer statusRunHotPumpFour; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 高区/裙楼设定压力(MPa)
 | 
				
			||||||
 | 
					    private BigDecimal presSetSupplyPumpAreaOne; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 高区/裙楼实际压力(MPa)
 | 
				
			||||||
 | 
					    private BigDecimal presRealSupplyPumpAreaOne; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 高区/裙楼1号泵运行状态
 | 
				
			||||||
 | 
					    private Integer statusRunSupplyPumpOne; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 高区/裙楼2号泵运行状态
 | 
				
			||||||
 | 
					    private Integer statusRunSupplyPumpTwo; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 中区/中厨设定压力(MPa)
 | 
				
			||||||
 | 
					    private BigDecimal presSetSupplyPumpAreaTwo; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 中区/中厨实际压力(MPa)
 | 
				
			||||||
 | 
					    private BigDecimal presRealSupplyPumpAreaTwo; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 中区/中厨1号泵运行状态
 | 
				
			||||||
 | 
					    private Integer statusRunSupplyPumpThree; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 中区/中厨2号泵运行状态
 | 
				
			||||||
 | 
					    private Integer statusRunSupplyPumpFour; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 高区/裙楼液位(米)
 | 
				
			||||||
 | 
					    private BigDecimal levelWaterTankOne; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 中区/中厨液位(米)
 | 
				
			||||||
 | 
					    private BigDecimal levelWaterTankTwo; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 巡查记录人
 | 
				
			||||||
 | 
					    private String recorder; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 备注信息
 | 
				
			||||||
 | 
					    private String remark; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @JsonIgnore | 
				
			||||||
 | 
					    @TableField(exist = false) | 
				
			||||||
 | 
					    private String searchValue; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 请求参数 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @TableField(exist = false) | 
				
			||||||
 | 
					    @JsonInclude(JsonInclude.Include.NON_EMPTY) | 
				
			||||||
 | 
					    private Map<String, Object> params; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** 创建者 */ | 
				
			||||||
 | 
					    @JsonIgnore | 
				
			||||||
 | 
					    @TableField(exist = false) | 
				
			||||||
 | 
					    private String createBy; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** 创建时间 */ | 
				
			||||||
 | 
					    @TableField(exist = false) | 
				
			||||||
 | 
					    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") | 
				
			||||||
 | 
					    private Date createTime; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** 更新者 */ | 
				
			||||||
 | 
					    @JsonIgnore | 
				
			||||||
 | 
					    @TableField(exist = false) | 
				
			||||||
 | 
					    private String updateBy; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** 更新时间 */ | 
				
			||||||
 | 
					    @JsonIgnore | 
				
			||||||
 | 
					    @TableField(exist = false) | 
				
			||||||
 | 
					    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") | 
				
			||||||
 | 
					    private Date updateTime; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 无参构造
 | 
				
			||||||
 | 
					    public ReportHotWaterParamHis() { | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Getter/Setter 方法(此处省略,实际开发中建议使用 Lombok @Data)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 业务方法示例:判断热泵1是否正常运行
 | 
				
			||||||
 | 
					    public boolean isHotPump1Normal() { | 
				
			||||||
 | 
					        return statusRunHotPumpOne != null && statusRunHotPumpOne == 1; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 业务方法示例:获取当前压力差值(高区)
 | 
				
			||||||
 | 
					    public BigDecimal getHighAreaPressureDiff() { | 
				
			||||||
 | 
					        return presRealSupplyPumpAreaOne.subtract(presSetSupplyPumpAreaOne); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public String toString() { | 
				
			||||||
 | 
					        return new StringJoiner(", ", ReportHotWaterParamHis.class.getSimpleName() + "[", "]") | 
				
			||||||
 | 
					                .add("id='" + id + "'") | 
				
			||||||
 | 
					                .add("floorId='" + floorId + "'") | 
				
			||||||
 | 
					                .add("curDate=" + curDate) | 
				
			||||||
 | 
					                .add("curTime='" + curTime + "'") | 
				
			||||||
 | 
					                .add("classes='" + classes + "'") | 
				
			||||||
 | 
					                .add("tempSetHotPumpOne=" + tempSetHotPumpOne) | 
				
			||||||
 | 
					                .add("tempRealHotPumpOne=" + tempRealHotPumpOne) | 
				
			||||||
 | 
					                .add("statusSwitchHotPumpOne=" + statusSwitchHotPumpOne) | 
				
			||||||
 | 
					                .add("statusRunHotPumpOne=" + statusRunHotPumpOne) | 
				
			||||||
 | 
					                .add("tempSetHotPumpTwo=" + tempSetHotPumpTwo) | 
				
			||||||
 | 
					                .add("tempRealHotPumpTwo=" + tempRealHotPumpTwo) | 
				
			||||||
 | 
					                .add("statusSwitchHotPumpTwo=" + statusSwitchHotPumpTwo) | 
				
			||||||
 | 
					                .add("statusRunHotPumpTwo=" + statusRunHotPumpTwo) | 
				
			||||||
 | 
					                .add("tempSetHotPumpThree=" + tempSetHotPumpThree) | 
				
			||||||
 | 
					                .add("tempRealHotPumpThree=" + tempRealHotPumpThree) | 
				
			||||||
 | 
					                .add("statusSwitchHotPumpThree=" + statusSwitchHotPumpThree) | 
				
			||||||
 | 
					                .add("statusRunHotPumpThree=" + statusRunHotPumpThree) | 
				
			||||||
 | 
					                .add("tempSetHotPumpFour=" + tempSetHotPumpFour) | 
				
			||||||
 | 
					                .add("tempRealHotPumpFour=" + tempRealHotPumpFour) | 
				
			||||||
 | 
					                .add("statusSwitchHotPumpFour=" + statusSwitchHotPumpFour) | 
				
			||||||
 | 
					                .add("statusRunHotPumpFour=" + statusRunHotPumpFour) | 
				
			||||||
 | 
					                .add("presSetSupplyPumpAreaOne=" + presSetSupplyPumpAreaOne) | 
				
			||||||
 | 
					                .add("presRealSupplyPumpAreaOne=" + presRealSupplyPumpAreaOne) | 
				
			||||||
 | 
					                .add("statusRunSupplyPumpOne=" + statusRunSupplyPumpOne) | 
				
			||||||
 | 
					                .add("statusRunSupplyPumpTwo=" + statusRunSupplyPumpTwo) | 
				
			||||||
 | 
					                .add("presSetSupplyPumpAreaTwo=" + presSetSupplyPumpAreaTwo) | 
				
			||||||
 | 
					                .add("presRealSupplyPumpAreaTwo=" + presRealSupplyPumpAreaTwo) | 
				
			||||||
 | 
					                .add("statusRunSupplyPumpThree=" + statusRunSupplyPumpThree) | 
				
			||||||
 | 
					                .add("statusRunSupplyPumpFour=" + statusRunSupplyPumpFour) | 
				
			||||||
 | 
					                .add("levelWaterTankOne=" + levelWaterTankOne) | 
				
			||||||
 | 
					                .add("levelWaterTankTwo=" + levelWaterTankTwo) | 
				
			||||||
 | 
					                .add("recorder='" + recorder + "'") | 
				
			||||||
 | 
					                .add("remark='" + remark + "'") | 
				
			||||||
 | 
					                .toString(); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,114 @@ | 
				
			|||||||
 | 
					package com.mh.common.core.domain.entity; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.baomidou.mybatisplus.annotation.IdType; | 
				
			||||||
 | 
					import com.baomidou.mybatisplus.annotation.TableId; | 
				
			||||||
 | 
					import com.fasterxml.jackson.annotation.JsonFormat; | 
				
			||||||
 | 
					import lombok.Getter; | 
				
			||||||
 | 
					import lombok.Setter; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.math.BigDecimal; | 
				
			||||||
 | 
					import java.util.Date; | 
				
			||||||
 | 
					import java.util.StringJoiner; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @author LJF | 
				
			||||||
 | 
					 * @version 1.0 | 
				
			||||||
 | 
					 * @project EEMCS | 
				
			||||||
 | 
					 * @description 设备抄表记录表 | 
				
			||||||
 | 
					 * @date 2025-10-21 10:26:12 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Setter | 
				
			||||||
 | 
					@Getter | 
				
			||||||
 | 
					public class ReportMeterReadingsHis { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @TableId(value = "id", type = IdType.ASSIGN_UUID) | 
				
			||||||
 | 
					    private String id; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 设备类型 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    private String mtType; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 设备位置 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    private String location; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 设备编号 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    private String mtNum; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 昨日抄表读数 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    private BigDecimal yesterdayReading; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 昨日抄表时间 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") | 
				
			||||||
 | 
					    private Date yesterdayTimestamp; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 当日抄表读数 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    private BigDecimal todayReading; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 当日抄表时间 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") | 
				
			||||||
 | 
					    private Date todayTimestamp; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 设备倍率 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    private int mtRatio; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 当日总读数*设备倍率 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    private BigDecimal total; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 当日单价 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    private BigDecimal unitPrice; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 当日金额 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    private BigDecimal cost; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 记录创建时间 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") | 
				
			||||||
 | 
					    private Date createTime; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 排序序号 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    private int sortOrder; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public String toString() { | 
				
			||||||
 | 
					        return new StringJoiner(", ", ReportMeterReadingsHis.class.getSimpleName() + "[", "]") | 
				
			||||||
 | 
					                .add("id='" + id + "'") | 
				
			||||||
 | 
					                .add("mtType='" + mtType + "'") | 
				
			||||||
 | 
					                .add("location='" + location + "'") | 
				
			||||||
 | 
					                .add("mtNum='" + mtNum + "'") | 
				
			||||||
 | 
					                .add("yesterdayReading=" + yesterdayReading) | 
				
			||||||
 | 
					                .add("yesterdayTimestamp=" + yesterdayTimestamp) | 
				
			||||||
 | 
					                .add("todayReading=" + todayReading) | 
				
			||||||
 | 
					                .add("todayTimestamp=" + todayTimestamp) | 
				
			||||||
 | 
					                .add("mtRatio=" + mtRatio) | 
				
			||||||
 | 
					                .add("total=" + total) | 
				
			||||||
 | 
					                .add("unitPrice=" + unitPrice) | 
				
			||||||
 | 
					                .add("cost=" + cost) | 
				
			||||||
 | 
					                .add("createTime=" + createTime) | 
				
			||||||
 | 
					                .add("sortOrder=" + sortOrder) | 
				
			||||||
 | 
					                .toString(); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,52 @@ | 
				
			|||||||
 | 
					package com.mh.quartz.task; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.mh.common.utils.DateUtils; | 
				
			||||||
 | 
					import com.mh.common.utils.StringUtils; | 
				
			||||||
 | 
					import com.mh.system.service.report.IMeterReadingsHisService; | 
				
			||||||
 | 
					import com.mh.system.service.report.IReportHotWaterService; | 
				
			||||||
 | 
					import lombok.extern.slf4j.Slf4j; | 
				
			||||||
 | 
					import org.springframework.beans.factory.annotation.Autowired; | 
				
			||||||
 | 
					import org.springframework.stereotype.Component; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Calendar; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @author LJF | 
				
			||||||
 | 
					 * @version 1.0 | 
				
			||||||
 | 
					 * @project EEMCS | 
				
			||||||
 | 
					 * @description 报表定时记录生成 | 
				
			||||||
 | 
					 * @date 2025-10-22 10:39:00 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Slf4j | 
				
			||||||
 | 
					@Component("reportTask") | 
				
			||||||
 | 
					public class ReportTask { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Autowired | 
				
			||||||
 | 
					    private IMeterReadingsHisService meterReadingsHisService; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Autowired | 
				
			||||||
 | 
					    private IReportHotWaterService reportHotWaterService; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 创建抄表记录查询 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    public void createMeterReadingHis(String curDate) { | 
				
			||||||
 | 
					        // 获取当前时间的前一天
 | 
				
			||||||
 | 
					        if (StringUtils.isEmpty(curDate)) { | 
				
			||||||
 | 
					            Calendar calendar = Calendar.getInstance(); | 
				
			||||||
 | 
					            calendar.add(Calendar.DAY_OF_YEAR, -1); | 
				
			||||||
 | 
					            curDate = DateUtils.dateToString(calendar.getTime(), DateUtils.YYYY_MM_DD); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        // 定时执行运行脚本
 | 
				
			||||||
 | 
					        meterReadingsHisService.execProMeterReadingsHis(curDate); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 创建热水热泵运行参数 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    public void createHotWaterRunParam() { | 
				
			||||||
 | 
					        // 定时执行运行脚本
 | 
				
			||||||
 | 
					        reportHotWaterService.execProRunParamHis(); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,35 @@ | 
				
			|||||||
 | 
					package com.mh.system.mapper.report; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.baomidou.mybatisplus.core.mapper.BaseMapper; | 
				
			||||||
 | 
					import com.mh.common.core.domain.entity.ReportHotWaterParamHis; | 
				
			||||||
 | 
					import org.apache.ibatis.annotations.Mapper; | 
				
			||||||
 | 
					import org.apache.ibatis.annotations.Options; | 
				
			||||||
 | 
					import org.apache.ibatis.annotations.Param; | 
				
			||||||
 | 
					import org.apache.ibatis.annotations.Select; | 
				
			||||||
 | 
					import org.apache.ibatis.mapping.StatementType; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.List; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @author LJF | 
				
			||||||
 | 
					 * @version 1.0 | 
				
			||||||
 | 
					 * @project NewZhujiang_Server | 
				
			||||||
 | 
					 * @description 热水运行参数服务类 | 
				
			||||||
 | 
					 * @date 2024-05-29 11:23:32 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Mapper | 
				
			||||||
 | 
					public interface ReportHotWaterParamHisMapper extends BaseMapper<ReportHotWaterParamHis> { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Select("call pro_hot_water_run_param(#{floorId,jdbcType=VARCHAR,mode=IN}, #{floorId1,jdbcType=VARCHAR,mode=IN}, #{floorId2,jdbcType=VARCHAR,mode=IN}, #{curTime,jdbcType=VARCHAR,mode=IN})") | 
				
			||||||
 | 
					    @Options(statementType = StatementType.CALLABLE) | 
				
			||||||
 | 
					    void execProHotWaterRunParam(@Param("floorId") String floorId, | 
				
			||||||
 | 
					                                 @Param("floorId1") String floorId1, | 
				
			||||||
 | 
					                                 @Param("floorId2") String floorId2, | 
				
			||||||
 | 
					                                 @Param("curTime") String curTime); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Select("select * from report_hot_water_param_his where floor_id = #{floorId} " + | 
				
			||||||
 | 
					            " and cur_time >= #{beginDate} and cur_time <= #{endDate} order by cur_time desc ") | 
				
			||||||
 | 
					    List<ReportHotWaterParamHis> findPage(@Param("floorId") String floorId, | 
				
			||||||
 | 
					                                              @Param("beginDate") String beginDate, | 
				
			||||||
 | 
					                                              @Param("endDate") String endDate); | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,49 @@ | 
				
			|||||||
 | 
					package com.mh.system.mapper.report; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.baomidou.mybatisplus.core.mapper.BaseMapper; | 
				
			||||||
 | 
					import com.mh.common.core.domain.entity.ReportMeterReadingsHis; | 
				
			||||||
 | 
					import org.apache.ibatis.annotations.Delete; | 
				
			||||||
 | 
					import org.apache.ibatis.annotations.Mapper; | 
				
			||||||
 | 
					import org.apache.ibatis.annotations.Param; | 
				
			||||||
 | 
					import org.apache.ibatis.annotations.Select; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.List; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @author LJF | 
				
			||||||
 | 
					 * @version 1.0 | 
				
			||||||
 | 
					 * @project EEMCS | 
				
			||||||
 | 
					 * @description 抄表记录mapper类 | 
				
			||||||
 | 
					 * @date 2025-10-21 16:15:45 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Mapper | 
				
			||||||
 | 
					public interface ReportMeterReadingsHisMapper extends BaseMapper<ReportMeterReadingsHis> { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Select("select * from  report_meter_readings_his where today_timestamp = #{curDate}::timestamp order by sort_order ") | 
				
			||||||
 | 
					    List<ReportMeterReadingsHis> selectListByDate(@Param("curDate") String curDate); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Select("select " + | 
				
			||||||
 | 
					            "  sdd.dict_label as mt_type,  " + | 
				
			||||||
 | 
					            "  cpm.remark as location, " + | 
				
			||||||
 | 
					            "  cpm.mt_num, " + | 
				
			||||||
 | 
					            "  dd.\"last_value\" as yesterday_reading, " + | 
				
			||||||
 | 
					            "  dd.last_time as yesterday_timestamp, " + | 
				
			||||||
 | 
					            "  dd.cur_value as today_reading, " + | 
				
			||||||
 | 
					            "  dd.cur_time as today_timestamp, " + | 
				
			||||||
 | 
					            "  dd.ratio as mt_ratio, " + | 
				
			||||||
 | 
					            "  cpm.price as unit_price " + | 
				
			||||||
 | 
					            "from " + | 
				
			||||||
 | 
					            "  collection_params_manage cpm " + | 
				
			||||||
 | 
					            "join ${tableName} dd on " + | 
				
			||||||
 | 
					            "  cpm.mt_num = dd.device_num " + | 
				
			||||||
 | 
					            "join sys_dict_data sdd on  " + | 
				
			||||||
 | 
					            "  cpm.mt_type = sdd.dict_value  " + | 
				
			||||||
 | 
					            "where " + | 
				
			||||||
 | 
					            "  sdd.dict_type = 'sys_mt_type' " + | 
				
			||||||
 | 
					            "  and cpm.grade = '40' " + | 
				
			||||||
 | 
					            "  and dd.cur_time = #{curDate}::timestamp ") | 
				
			||||||
 | 
					    List<ReportMeterReadingsHis> selectRecordListByDate(String tableName, String curDate); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Delete("delete from  report_meter_readings_his where today_timestamp = #{curDate}::timestamp") | 
				
			||||||
 | 
					    void deleteByDate(@ Param("curDate") String curDate); | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,20 @@ | 
				
			|||||||
 | 
					package com.mh.system.service.report; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.mh.common.core.domain.entity.ReportMeterReadingsHis; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.List; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @author LJF | 
				
			||||||
 | 
					 * @version 1.0 | 
				
			||||||
 | 
					 * @project EEMCS | 
				
			||||||
 | 
					 * @description 设备抄表服务类 | 
				
			||||||
 | 
					 * @date 2025-10-21 16:07:35 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					public interface IMeterReadingsHisService { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void execProMeterReadingsHis(String curDate); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    List<ReportMeterReadingsHis> selectList(ReportMeterReadingsHis todayTimestamp); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,22 @@ | 
				
			|||||||
 | 
					package com.mh.system.service.report; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.mh.common.core.domain.entity.ReportHotWaterParamHis; | 
				
			||||||
 | 
					import com.mh.common.core.domain.entity.ReportSysRunParamHis; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.List; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @author LJF | 
				
			||||||
 | 
					 * @version 1.0 | 
				
			||||||
 | 
					 * @project NewZhujiang_Server | 
				
			||||||
 | 
					 * @description 报表服务类 | 
				
			||||||
 | 
					 * @date 2024-05-29 11:20:30 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					public interface IReportHotWaterService { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void execProRunParamHis(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    List<ReportHotWaterParamHis> selectList(ReportHotWaterParamHis reportHotWaterParamHis); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    int updateRunParams(ReportHotWaterParamHis reportHotWaterParamHis); | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,300 @@ | 
				
			|||||||
 | 
					package com.mh.system.service.report.impl; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.mh.common.core.domain.entity.ReportMeterReadingsHis; | 
				
			||||||
 | 
					import com.mh.common.utils.DateUtils; | 
				
			||||||
 | 
					import com.mh.common.utils.StringUtils; | 
				
			||||||
 | 
					import com.mh.system.mapper.report.ReportMeterReadingsHisMapper; | 
				
			||||||
 | 
					import com.mh.system.service.report.IMeterReadingsHisService; | 
				
			||||||
 | 
					import jakarta.annotation.Resource; | 
				
			||||||
 | 
					import lombok.extern.slf4j.Slf4j; | 
				
			||||||
 | 
					import org.springframework.stereotype.Service; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.math.BigDecimal; | 
				
			||||||
 | 
					import java.util.*; | 
				
			||||||
 | 
					import java.util.function.Function; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @author LJF | 
				
			||||||
 | 
					 * @version 1.0 | 
				
			||||||
 | 
					 * @project EEMCS | 
				
			||||||
 | 
					 * @description 设备抄表服务类 | 
				
			||||||
 | 
					 * @date 2025-10-21 16:09:08 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Slf4j | 
				
			||||||
 | 
					@Service | 
				
			||||||
 | 
					public class MeterReadingsHisServiceImpl implements IMeterReadingsHisService { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Resource | 
				
			||||||
 | 
					    private ReportMeterReadingsHisMapper reportMeterReadingsHisMapper; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private final List<String> locationList = List.of( | 
				
			||||||
 | 
					            "磁悬浮3号空调主机", | 
				
			||||||
 | 
					            "变频5号冷冻泵", | 
				
			||||||
 | 
					            "4号冷冻泵", | 
				
			||||||
 | 
					            "变频5号冷却泵", | 
				
			||||||
 | 
					            "4号冷却泵", | 
				
			||||||
 | 
					            "变频1号冷却塔", | 
				
			||||||
 | 
					            "变频2号冷却塔", | 
				
			||||||
 | 
					            "变频3号冷却塔", | 
				
			||||||
 | 
					            "空调系统用电总合计:", | 
				
			||||||
 | 
					            "三楼热泵控制柜", | 
				
			||||||
 | 
					            "三楼变频水泵控制柜", | 
				
			||||||
 | 
					            "洗衣房热泵控制柜", | 
				
			||||||
 | 
					            "群楼中厨水泵控制柜", | 
				
			||||||
 | 
					            "热水热泵系统用电总合计:", | 
				
			||||||
 | 
					            "空调冷冻水", | 
				
			||||||
 | 
					            "空调冷却水", | 
				
			||||||
 | 
					            "三楼中、高区热水", | 
				
			||||||
 | 
					            "群楼、中厨房热水", | 
				
			||||||
 | 
					            "热水热泵系统用水总合计:", | 
				
			||||||
 | 
					            "蒸汽发生器+采暖", | 
				
			||||||
 | 
					            "蒸汽发生器+采暖", | 
				
			||||||
 | 
					            "蒸汽发生器+采暖用气总合计:", | 
				
			||||||
 | 
					            "蒸汽发生器+采暖", | 
				
			||||||
 | 
					            "蒸汽发生器+采暖用电总合计:", | 
				
			||||||
 | 
					            "蒸汽发生器+采暖", | 
				
			||||||
 | 
					            "蒸汽发生器用水总合计:", | 
				
			||||||
 | 
					            "水、电、气费用总合计(水/电/气价预估单价,单价需以实际缴费为准):", | 
				
			||||||
 | 
					            "中央空调冷冻流量", | 
				
			||||||
 | 
					            "中央空调冷却流量", | 
				
			||||||
 | 
					            "中央空调采暖流量", | 
				
			||||||
 | 
					            "蒸汽流量" | 
				
			||||||
 | 
					    ); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private final List<String> mtTypeList = List.of( | 
				
			||||||
 | 
					            "电表", | 
				
			||||||
 | 
					            "电表", | 
				
			||||||
 | 
					            "电表", | 
				
			||||||
 | 
					            "电表", | 
				
			||||||
 | 
					            "电表", | 
				
			||||||
 | 
					            "电表", | 
				
			||||||
 | 
					            "电表", | 
				
			||||||
 | 
					            "电表", | 
				
			||||||
 | 
					            "电表", | 
				
			||||||
 | 
					            "电表", | 
				
			||||||
 | 
					            "电表", | 
				
			||||||
 | 
					            "电表", | 
				
			||||||
 | 
					            "电表", | 
				
			||||||
 | 
					            "电表", | 
				
			||||||
 | 
					            "水表", | 
				
			||||||
 | 
					            "水表", | 
				
			||||||
 | 
					            "水表", | 
				
			||||||
 | 
					            "水表", | 
				
			||||||
 | 
					            "水表", | 
				
			||||||
 | 
					            "燃气表(常用)", | 
				
			||||||
 | 
					            "燃气表(备用)", | 
				
			||||||
 | 
					            "燃气表", | 
				
			||||||
 | 
					            "电表", | 
				
			||||||
 | 
					            "电表", | 
				
			||||||
 | 
					            "水表", | 
				
			||||||
 | 
					            "水表", | 
				
			||||||
 | 
					            "总合计", | 
				
			||||||
 | 
					            "流量计量表", | 
				
			||||||
 | 
					            "流量计量表", | 
				
			||||||
 | 
					            "流量计量表", | 
				
			||||||
 | 
					            "流量计量表" | 
				
			||||||
 | 
					    ); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public void execProMeterReadingsHis(String curDate) { | 
				
			||||||
 | 
					        // 根据时间查询对应的每日的采集抄表记录
 | 
				
			||||||
 | 
					        String tableName = "data_day" + StringUtils.substring(curDate, 0, 4); | 
				
			||||||
 | 
					        List<ReportMeterReadingsHis> list = reportMeterReadingsHisMapper.selectRecordListByDate(tableName, curDate); | 
				
			||||||
 | 
					        if (null == list) { | 
				
			||||||
 | 
					            return; | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        reportMeterReadingsHisMapper.deleteByDate(curDate + " 00:00:00"); | 
				
			||||||
 | 
					        // 循环处理数据
 | 
				
			||||||
 | 
					        List<ReportMeterReadingsHis> filteredList = processLocationMatching(list, curDate); | 
				
			||||||
 | 
					        list = filteredList; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 对list进行排序
 | 
				
			||||||
 | 
					        list.sort(Comparator.comparingInt(ReportMeterReadingsHis::getSortOrder)); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 处理数据库操作
 | 
				
			||||||
 | 
					        list = handleDatabaseOperations(list, curDate); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 创建合计对象
 | 
				
			||||||
 | 
					        createAggregateObjects(list, curDate); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 最终插入操作
 | 
				
			||||||
 | 
					        performFinalInsert(list, curDate); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private List<ReportMeterReadingsHis> processLocationMatching(List<ReportMeterReadingsHis> originalList, String curDate) { | 
				
			||||||
 | 
					        List<ReportMeterReadingsHis> filteredList = new ArrayList<>(); | 
				
			||||||
 | 
					        for (int i = 0; i < locationList.size(); i++) { | 
				
			||||||
 | 
					            int finalI = i; | 
				
			||||||
 | 
					            Optional<ReportMeterReadingsHis> matchedRecord = originalList.stream() | 
				
			||||||
 | 
					                    .filter(meterReadingsHis -> meterReadingsHis != null | 
				
			||||||
 | 
					                            && meterReadingsHis.getLocation() != null | 
				
			||||||
 | 
					                            && meterReadingsHis.getLocation().equals(locationList.get(finalI))) | 
				
			||||||
 | 
					                    .findFirst(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (matchedRecord.isPresent()) { | 
				
			||||||
 | 
					                ReportMeterReadingsHis reportMeterReadingsHis = matchedRecord.get(); | 
				
			||||||
 | 
					                normalizeMtType(reportMeterReadingsHis); | 
				
			||||||
 | 
					                reportMeterReadingsHis.setSortOrder(i + 1); | 
				
			||||||
 | 
					                filteredList.add(reportMeterReadingsHis); | 
				
			||||||
 | 
					            } else if (!locationList.get(i).contains("合计")) { | 
				
			||||||
 | 
					                // 没有对应的数据就生成对象
 | 
				
			||||||
 | 
					                ReportMeterReadingsHis reportMeterReadingsHis = new ReportMeterReadingsHis(); | 
				
			||||||
 | 
					                reportMeterReadingsHis.setMtType(mtTypeList.get(i)); | 
				
			||||||
 | 
					                reportMeterReadingsHis.setLocation(locationList.get(i)); | 
				
			||||||
 | 
					                reportMeterReadingsHis.setYesterdayReading(new BigDecimal("0")); | 
				
			||||||
 | 
					                reportMeterReadingsHis.setTodayReading(new BigDecimal("0")); | 
				
			||||||
 | 
					                reportMeterReadingsHis.setTodayTimestamp(DateUtils.parseDate(curDate + " 00:00:00")); | 
				
			||||||
 | 
					                reportMeterReadingsHis.setUnitPrice(new BigDecimal("1")); | 
				
			||||||
 | 
					                reportMeterReadingsHis.setSortOrder(i + 1); | 
				
			||||||
 | 
					                filteredList.add(reportMeterReadingsHis); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        return filteredList; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private void normalizeMtType(ReportMeterReadingsHis reportMeterReadingsHis) { | 
				
			||||||
 | 
					        if (reportMeterReadingsHis.getMtType() != null) { | 
				
			||||||
 | 
					            if (reportMeterReadingsHis.getMtType().contains("电表")) { | 
				
			||||||
 | 
					                reportMeterReadingsHis.setMtType("电表"); | 
				
			||||||
 | 
					            } else if (reportMeterReadingsHis.getMtType().contains("水表")) { | 
				
			||||||
 | 
					                reportMeterReadingsHis.setMtType("水表"); | 
				
			||||||
 | 
					            } else if (reportMeterReadingsHis.getMtType().contains("冷量计")) { | 
				
			||||||
 | 
					                reportMeterReadingsHis.setMtType("流量计量表"); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private List<ReportMeterReadingsHis> handleDatabaseOperations(List<ReportMeterReadingsHis> list, String curDate) { | 
				
			||||||
 | 
					        List<ReportMeterReadingsHis> oldList = reportMeterReadingsHisMapper.selectListByDate(curDate + " 00:00:00"); | 
				
			||||||
 | 
					        if (oldList == null || oldList.isEmpty()) { | 
				
			||||||
 | 
					            reportMeterReadingsHisMapper.insert(list); | 
				
			||||||
 | 
					            list = reportMeterReadingsHisMapper.selectListByDate(curDate + " 00:00:00"); | 
				
			||||||
 | 
					        } else { | 
				
			||||||
 | 
					            list = oldList; | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        return list; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private void createAggregateObjects(List<ReportMeterReadingsHis> list, String curDate) { | 
				
			||||||
 | 
					        Map<Integer, Function<List<ReportMeterReadingsHis>, ReportMeterReadingsHis>> aggregateCreators = Map.of( | 
				
			||||||
 | 
					                8, l -> createAggregateObject("电表", "空调系统用电总合计:", | 
				
			||||||
 | 
					                        calculateTotalByRange(l, 0, 9), Objects.requireNonNull(list.stream().filter(v -> v.getSortOrder() == 8).findFirst().orElse(null))), | 
				
			||||||
 | 
					                13, l -> createAggregateObject("电表", "热水热泵系统用电总合计:", | 
				
			||||||
 | 
					                        calculateTotalByRange(l, 9, 14), Objects.requireNonNull(list.stream().filter(v -> v.getSortOrder() == 13).findFirst().orElse(null))), | 
				
			||||||
 | 
					                18, l -> createAggregateObject("水表", "热水热泵系统用水总合计:", | 
				
			||||||
 | 
					                        calculateTotalByRange(l, 14, 19), Objects.requireNonNull(list.stream().filter(v -> v.getSortOrder() == 18).findFirst().orElse(null))), | 
				
			||||||
 | 
					                21, l -> createAggregateObject("燃气表", "蒸汽发生器+采暖用气总合计:", | 
				
			||||||
 | 
					                        calculateTotalByRange(l, 19, 22), Objects.requireNonNull(list.stream().filter(v -> v.getSortOrder() == 21).findFirst().orElse(null))), | 
				
			||||||
 | 
					                23, l -> createAggregateObject("电表", "蒸汽发生器+采暖用电总合计:", | 
				
			||||||
 | 
					                        calculateTotalByRange(l, 22, 24), Objects.requireNonNull(list.stream().filter(v -> v.getSortOrder() == 23).findFirst().orElse(null))), | 
				
			||||||
 | 
					                25, l -> createAggregateObject("水表", "蒸汽发生器用水总合计:", | 
				
			||||||
 | 
					                        calculateTotalByRange(l, 24, 26), Objects.requireNonNull(list.stream().filter(v -> v.getSortOrder() == 25).findFirst().orElse(null))) | 
				
			||||||
 | 
					        ); | 
				
			||||||
 | 
					        for (int i = 0; i < locationList.size(); i++) { | 
				
			||||||
 | 
					            if (aggregateCreators.containsKey(i)) { | 
				
			||||||
 | 
					                ReportMeterReadingsHis reportMeterReadingsHis = aggregateCreators.get(i).apply(list); | 
				
			||||||
 | 
					                reportMeterReadingsHis.setMtRatio(1); | 
				
			||||||
 | 
					                reportMeterReadingsHis.setSortOrder(i + 1); | 
				
			||||||
 | 
					                reportMeterReadingsHis.setTodayTimestamp(DateUtils.stringToDate(curDate + " 00:00:00", DateUtils.YYYY_MM_DD_HH_MM_SS)); | 
				
			||||||
 | 
					                list.add(reportMeterReadingsHis); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private ReportMeterReadingsHis createAggregateObject(String mtType, String location, BigDecimal total, ReportMeterReadingsHis meterReadingsHis) { | 
				
			||||||
 | 
					        ReportMeterReadingsHis reportMeterReadingsHis = new ReportMeterReadingsHis(); | 
				
			||||||
 | 
					        reportMeterReadingsHis.setMtType(mtType); | 
				
			||||||
 | 
					        reportMeterReadingsHis.setLocation(location); | 
				
			||||||
 | 
					        reportMeterReadingsHis.setYesterdayReading(new BigDecimal("0")); | 
				
			||||||
 | 
					        reportMeterReadingsHis.setTodayReading(total); | 
				
			||||||
 | 
					        if (meterReadingsHis != null) { | 
				
			||||||
 | 
					            reportMeterReadingsHis.setUnitPrice(meterReadingsHis.getUnitPrice()); | 
				
			||||||
 | 
					        } else { | 
				
			||||||
 | 
					            reportMeterReadingsHis.setUnitPrice(new BigDecimal("1")); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        return reportMeterReadingsHis; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private BigDecimal calculateTotalByRange(List<ReportMeterReadingsHis> list, int start, int end) { | 
				
			||||||
 | 
					        if (list == null || list.isEmpty()) { | 
				
			||||||
 | 
					            return BigDecimal.ZERO; | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        return list.stream() | 
				
			||||||
 | 
					                .filter(meterReadingsHis -> meterReadingsHis != null | 
				
			||||||
 | 
					                        && meterReadingsHis.getSortOrder() > start | 
				
			||||||
 | 
					                        && meterReadingsHis.getSortOrder() < end | 
				
			||||||
 | 
					                        && meterReadingsHis.getTotal() != null) | 
				
			||||||
 | 
					                .map(ReportMeterReadingsHis::getTotal) | 
				
			||||||
 | 
					                .reduce(BigDecimal.ZERO, BigDecimal::add); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private void performFinalInsert(List<ReportMeterReadingsHis> list, String curDate) { | 
				
			||||||
 | 
					        reportMeterReadingsHisMapper.deleteByDate(curDate + " 00:00:00"); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (list != null) { | 
				
			||||||
 | 
					            for (ReportMeterReadingsHis reportMeterReadingsHis : list) { | 
				
			||||||
 | 
					                reportMeterReadingsHis.setTotal(null); | 
				
			||||||
 | 
					                reportMeterReadingsHis.setCost(null); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        reportMeterReadingsHisMapper.insert(list); | 
				
			||||||
 | 
					        list = reportMeterReadingsHisMapper.selectListByDate(curDate + " 00:00:00"); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 添加水表、电表、燃气表、水、电、气费用总合计
 | 
				
			||||||
 | 
					        ReportMeterReadingsHis totalReportMeterReadingsHis = new ReportMeterReadingsHis(); | 
				
			||||||
 | 
					        totalReportMeterReadingsHis.setMtType("总合计"); | 
				
			||||||
 | 
					        totalReportMeterReadingsHis.setLocation("水、电、气费用总合计(水/电/气价预估单价,单价需以实际缴费为准):"); | 
				
			||||||
 | 
					        totalReportMeterReadingsHis.setYesterdayReading(new BigDecimal("0")); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Set<Integer> sortOrderSet = Set.of(9, 14, 19, 22, 24, 26); | 
				
			||||||
 | 
					        BigDecimal grandTotal = calculateTotalBySpecificValues(list, sortOrderSet); | 
				
			||||||
 | 
					        totalReportMeterReadingsHis.setTodayReading(grandTotal); | 
				
			||||||
 | 
					        totalReportMeterReadingsHis.setMtRatio(1); | 
				
			||||||
 | 
					        totalReportMeterReadingsHis.setSortOrder(27); | 
				
			||||||
 | 
					        totalReportMeterReadingsHis.setUnitPrice(new BigDecimal("1")); | 
				
			||||||
 | 
					        totalReportMeterReadingsHis.setTodayTimestamp(DateUtils.stringToDate(curDate + " 00:00:00", DateUtils.YYYY_MM_DD_HH_MM_SS)); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (list != null) { | 
				
			||||||
 | 
					            list.add(totalReportMeterReadingsHis); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        reportMeterReadingsHisMapper.deleteByDate(curDate + " 00:00:00"); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (list != null) { | 
				
			||||||
 | 
					            for (ReportMeterReadingsHis reportMeterReadingsHis : list) { | 
				
			||||||
 | 
					                reportMeterReadingsHis.setTotal(null); | 
				
			||||||
 | 
					                reportMeterReadingsHis.setCost(null); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        reportMeterReadingsHisMapper.insert(list); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private BigDecimal calculateTotalBySpecificValues(List<ReportMeterReadingsHis> list, Set<Integer> sortOrderSet) { | 
				
			||||||
 | 
					        if (list == null || list.isEmpty()) { | 
				
			||||||
 | 
					            return BigDecimal.ZERO; | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        return list.stream() | 
				
			||||||
 | 
					                .filter(meterReadingsHis -> meterReadingsHis != null | 
				
			||||||
 | 
					                        && sortOrderSet.contains(meterReadingsHis.getSortOrder()) | 
				
			||||||
 | 
					                        && meterReadingsHis.getCost() != null) | 
				
			||||||
 | 
					                .map(ReportMeterReadingsHis::getCost) | 
				
			||||||
 | 
					                .reduce(BigDecimal.ZERO, BigDecimal::add); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public List<ReportMeterReadingsHis> selectList(ReportMeterReadingsHis todayTimestamp) { | 
				
			||||||
 | 
					        List<ReportMeterReadingsHis> list = null; | 
				
			||||||
 | 
					        if (todayTimestamp == null) { | 
				
			||||||
 | 
					            return null; | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        if (todayTimestamp.getTodayTimestamp() == null) { | 
				
			||||||
 | 
					            list = reportMeterReadingsHisMapper.selectListByDate(DateUtils.parseDateToStr("yyyy-MM-dd 00:00:00", DateUtils.getNowDate())); | 
				
			||||||
 | 
					        } else { | 
				
			||||||
 | 
					            list = reportMeterReadingsHisMapper.selectListByDate(DateUtils.parseDateToStr("yyyy-MM-dd 00:00:00", todayTimestamp.getTodayTimestamp())); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        // 开始格式化抄表记录
 | 
				
			||||||
 | 
					        return list; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,121 @@ | 
				
			|||||||
 | 
					package com.mh.system.service.report.impl; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 
				
			||||||
 | 
					import com.mh.common.core.domain.entity.ReportHotWaterParamHis; | 
				
			||||||
 | 
					import com.mh.common.core.domain.entity.ReportSysRunParamHis; | 
				
			||||||
 | 
					import com.mh.common.utils.StringUtils; | 
				
			||||||
 | 
					import com.mh.system.mapper.report.ReportHotWaterParamHisMapper; | 
				
			||||||
 | 
					import com.mh.system.mapper.report.ReportSysRunParamHisMapper; | 
				
			||||||
 | 
					import com.mh.system.service.report.IReportHotWaterService; | 
				
			||||||
 | 
					import jakarta.annotation.Resource; | 
				
			||||||
 | 
					import lombok.extern.slf4j.Slf4j; | 
				
			||||||
 | 
					import org.springframework.stereotype.Service; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.time.LocalDateTime; | 
				
			||||||
 | 
					import java.time.format.DateTimeFormatter; | 
				
			||||||
 | 
					import java.util.List; | 
				
			||||||
 | 
					import java.util.concurrent.ExecutionException; | 
				
			||||||
 | 
					import java.util.concurrent.ExecutorService; | 
				
			||||||
 | 
					import java.util.concurrent.Executors; | 
				
			||||||
 | 
					import java.util.concurrent.Future; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @author LJF | 
				
			||||||
 | 
					 * @version 1.0 | 
				
			||||||
 | 
					 * @project NewZhujiang_Server | 
				
			||||||
 | 
					 * @description 报表服务类 | 
				
			||||||
 | 
					 * @date 2024-05-29 11:20:30 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Slf4j | 
				
			||||||
 | 
					@Service | 
				
			||||||
 | 
					public class ReportHotWaterServiceImpl implements IReportHotWaterService { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Resource | 
				
			||||||
 | 
					    ReportHotWaterParamHisMapper reportHotWaterParamHisMapper; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public int updateRunParams(ReportHotWaterParamHis reportHotWaterParamHis) { | 
				
			||||||
 | 
					        return reportHotWaterParamHisMapper.updateById(reportHotWaterParamHis); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public void execProRunParamHis() { | 
				
			||||||
 | 
					        try { | 
				
			||||||
 | 
					            log.info("执行计算系统参数存储过程"); | 
				
			||||||
 | 
					            // 获取当前日期和时间
 | 
				
			||||||
 | 
					            LocalDateTime now = LocalDateTime.now(); | 
				
			||||||
 | 
					            // 格式化日期和时间
 | 
				
			||||||
 | 
					            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); | 
				
			||||||
 | 
					            String formattedOneHourAgo = now.format(formatter); | 
				
			||||||
 | 
					            String timeParam = formattedOneHourAgo.substring(0, 13); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // 创建线程池
 | 
				
			||||||
 | 
					            ExecutorService executorService = Executors.newFixedThreadPool(2); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // 提交任务
 | 
				
			||||||
 | 
					            Future<?> future1 = executorService.submit(() -> { | 
				
			||||||
 | 
					                reportHotWaterParamHisMapper.execProHotWaterRunParam( | 
				
			||||||
 | 
					                        "73138702b71e16d200b458185bb07e59_-1楼", | 
				
			||||||
 | 
					                        "e3dc9e3d0aa7c07d3b6db9ce8c119f3d", | 
				
			||||||
 | 
					                        "d6c381f7baa02bbca25fcdbbe367390d", | 
				
			||||||
 | 
					                        timeParam | 
				
			||||||
 | 
					                ); | 
				
			||||||
 | 
					                log.info("执行计算系统参数存储过程完成: -1楼"); | 
				
			||||||
 | 
					            }); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Future<?> future2 = executorService.submit(() -> { | 
				
			||||||
 | 
					                reportHotWaterParamHisMapper.execProHotWaterRunParam( | 
				
			||||||
 | 
					                        "73138702b71e16d200b458185bb07e59_3楼", | 
				
			||||||
 | 
					                        "24c7538214b5f6e707e27095b37aee46", | 
				
			||||||
 | 
					                        "5c21b9acf8cd8e049278f39c8d61b16d", | 
				
			||||||
 | 
					                        timeParam | 
				
			||||||
 | 
					                ); | 
				
			||||||
 | 
					                log.info("执行计算系统参数存储过程完成: 3楼"); | 
				
			||||||
 | 
					            }); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // 等待任务完成
 | 
				
			||||||
 | 
					            try { | 
				
			||||||
 | 
					                future1.get(); | 
				
			||||||
 | 
					                future2.get(); | 
				
			||||||
 | 
					            } catch (InterruptedException | ExecutionException e) { | 
				
			||||||
 | 
					                throw new RuntimeException("存储过程执行失败", e); | 
				
			||||||
 | 
					            } finally { | 
				
			||||||
 | 
					                executorService.shutdown(); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            log.info("执行计算系统参数执行完成"); | 
				
			||||||
 | 
					        } catch (Exception e) { | 
				
			||||||
 | 
					            log.error("执行计算系统参数存储过程执行失败", e); | 
				
			||||||
 | 
					            throw new RuntimeException(e); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public List<ReportHotWaterParamHis> selectList(ReportHotWaterParamHis reportSysRunParamHis) { | 
				
			||||||
 | 
					        String floorId = reportSysRunParamHis.getFloorId(); | 
				
			||||||
 | 
					        if (StringUtils.isEmpty(floorId)) { | 
				
			||||||
 | 
					            // 默认3楼,实际上是buildingId
 | 
				
			||||||
 | 
					            floorId = "73138702b71e16d200b458185bb07e59_3楼"; | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        if (reportSysRunParamHis.getParams() == null) { | 
				
			||||||
 | 
					            reportSysRunParamHis.setParams(new java.util.HashMap<>()); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        String startTime = (String) reportSysRunParamHis.getParams().get("startTime"); | 
				
			||||||
 | 
					        String endTime = (String) reportSysRunParamHis.getParams().get("endTime"); | 
				
			||||||
 | 
					        if (StringUtils.isBlank(startTime)) { | 
				
			||||||
 | 
					            LocalDateTime now = LocalDateTime.now(); | 
				
			||||||
 | 
					            startTime = now.format(dateTimeFormatter).substring(0, 10); | 
				
			||||||
 | 
					            endTime = now.format(dateTimeFormatter).substring(0, 10); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        startTime = startTime + " 00"; | 
				
			||||||
 | 
					        endTime = endTime + " 23"; | 
				
			||||||
 | 
					        return reportHotWaterParamHisMapper.selectList( | 
				
			||||||
 | 
					                new QueryWrapper<ReportHotWaterParamHis>() | 
				
			||||||
 | 
					                        .between("cur_time", startTime, endTime) | 
				
			||||||
 | 
					                        .eq("floor_id", floorId) | 
				
			||||||
 | 
					                        .orderByDesc("cur_time")); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,281 @@ | 
				
			|||||||
 | 
					CREATE OR REPLACE PROCEDURE "public"."pro_hot_water_run_param"("floor_id_in" varchar, "floor_id_1_in" varchar, "floor_id_2_in" varchar, "cur_time_in" varchar) | 
				
			||||||
 | 
					 AS $BODY$ | 
				
			||||||
 | 
					DECLARE | 
				
			||||||
 | 
					    -- 变量声明(保持原有结构,默认值优化) | 
				
			||||||
 | 
					temp_set_hot_pump_one NUMERIC(24,2) := 0; | 
				
			||||||
 | 
						temp_real_hot_pump_one NUMERIC(24,2) := 0; | 
				
			||||||
 | 
						status_switch_hot_pump_one INT := 0;  | 
				
			||||||
 | 
						status_run_hot_pump_one INT := 0;  | 
				
			||||||
 | 
						temp_set_hot_pump_two NUMERIC(24,2) := 0; | 
				
			||||||
 | 
						temp_real_hot_pump_two NUMERIC(24,2) := 0; | 
				
			||||||
 | 
						status_switch_hot_pump_two INT := 0; | 
				
			||||||
 | 
						status_run_hot_pump_two INT := 0; | 
				
			||||||
 | 
						temp_set_hot_pump_three NUMERIC(24,2) := 0; | 
				
			||||||
 | 
						temp_real_hot_pump_three NUMERIC(24,2) := 0; | 
				
			||||||
 | 
						status_switch_hot_pump_three INT := 0; | 
				
			||||||
 | 
						status_run_hot_pump_three INT := 0; | 
				
			||||||
 | 
						temp_set_hot_pump_four NUMERIC(24,2) := 0; | 
				
			||||||
 | 
						temp_real_hot_pump_four NUMERIC(24,2) := 0; | 
				
			||||||
 | 
						status_switch_hot_pump_four INT := 0; | 
				
			||||||
 | 
						status_run_hot_pump_four INT := 0; | 
				
			||||||
 | 
						pres_set_supply_pump_area_one NUMERIC(24,2) := 0; | 
				
			||||||
 | 
						pres_real_supply_pump_area_one NUMERIC(24,2) := 0; | 
				
			||||||
 | 
						status_run_supply_pump_one INT := 0; | 
				
			||||||
 | 
						status_run_supply_pump_two INT := 0; | 
				
			||||||
 | 
						pres_set_supply_pump_area_two NUMERIC(24,2) := 0; | 
				
			||||||
 | 
						pres_real_supply_pump_area_two NUMERIC(24,2) := 0; | 
				
			||||||
 | 
						status_run_supply_pump_three INT := 0; | 
				
			||||||
 | 
						status_run_supply_pump_four INT := 0; | 
				
			||||||
 | 
						level_water_tank_one NUMERIC(24,2) := 0; | 
				
			||||||
 | 
						level_water_tank_two NUMERIC(24,2) := 0; | 
				
			||||||
 | 
					         | 
				
			||||||
 | 
					    is_exits INT := 0;                                      | 
				
			||||||
 | 
					    register_address VARCHAR(50);    | 
				
			||||||
 | 
					 	other_name VARCHAR(50); | 
				
			||||||
 | 
					value NUMERIC(24,2); | 
				
			||||||
 | 
					    mt_num varchar(20);                           | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    -- 游标1:中区/中厨 | 
				
			||||||
 | 
					    base_param_1 CURSOR FOR | 
				
			||||||
 | 
					select | 
				
			||||||
 | 
					    cpm.mt_num::VARCHAR, | 
				
			||||||
 | 
					        COALESCE(MAX(cpm.cur_value), 0)::NUMERIC(24,2) | 
				
			||||||
 | 
					from | 
				
			||||||
 | 
					    collection_params_manage cpm | 
				
			||||||
 | 
					        left join device_ledger dl on | 
				
			||||||
 | 
					        cpm.device_ledger_id = dl.id | 
				
			||||||
 | 
					        left join cpm_space_relation csr on | 
				
			||||||
 | 
					        cpm.id = csr.cpm_id | 
				
			||||||
 | 
					        left join house_info hi on | 
				
			||||||
 | 
					        csr.house_id = hi.id | 
				
			||||||
 | 
					where | 
				
			||||||
 | 
					    csr.floor_id = floor_id_2_in | 
				
			||||||
 | 
					  and cpm.system_type = '1' | 
				
			||||||
 | 
					  and cpm.is_use = 0 | 
				
			||||||
 | 
					  and hi.house_name is not null | 
				
			||||||
 | 
					  AND TO_CHAR(cpm.cur_time, 'YYYY-MM-DD HH24') = cur_time_in | 
				
			||||||
 | 
					GROUP BY | 
				
			||||||
 | 
					    cpm.cur_time::DATE, | 
				
			||||||
 | 
							    cpm.mt_num; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- 游标2:高区/裙楼 | 
				
			||||||
 | 
					base_param_2 CURSOR FOR | 
				
			||||||
 | 
					select | 
				
			||||||
 | 
					    cpm.other_name::VARCHAR, | 
				
			||||||
 | 
					        cpm.mt_num::VARCHAR, | 
				
			||||||
 | 
					        COALESCE(MAX(cpm.cur_value), 0)::NUMERIC(24,2) | 
				
			||||||
 | 
					from | 
				
			||||||
 | 
					    collection_params_manage cpm | 
				
			||||||
 | 
					        left join device_ledger dl on | 
				
			||||||
 | 
					        cpm.device_ledger_id = dl.id | 
				
			||||||
 | 
					        left join cpm_space_relation csr on | 
				
			||||||
 | 
					        cpm.id = csr.cpm_id | 
				
			||||||
 | 
					        left join house_info hi on | 
				
			||||||
 | 
					        csr.house_id = hi.id | 
				
			||||||
 | 
					where | 
				
			||||||
 | 
					    csr.floor_id = floor_id_1_in | 
				
			||||||
 | 
					  and cpm.system_type = '1' | 
				
			||||||
 | 
					  and cpm.is_use = 0 | 
				
			||||||
 | 
					  and hi.house_name is not null | 
				
			||||||
 | 
					  AND TO_CHAR(cpm.cur_time, 'YYYY-MM-DD HH24') = cur_time_in | 
				
			||||||
 | 
					GROUP BY | 
				
			||||||
 | 
					    cpm.other_name::VARCHAR, | 
				
			||||||
 | 
							    cpm.cur_time::DATE, | 
				
			||||||
 | 
							    cpm.mt_num; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BEGIN | 
				
			||||||
 | 
					    -- ------------------------------ | 
				
			||||||
 | 
					    -- 4. 遍历游标获取寄存器参数(严格关闭游标)高区/裙楼 | 
				
			||||||
 | 
					    -- ------------------------------ | 
				
			||||||
 | 
					OPEN base_param_1; | 
				
			||||||
 | 
					BEGIN  -- 游标操作的异常处理块 | 
				
			||||||
 | 
					        LOOP | 
				
			||||||
 | 
					FETCH NEXT FROM base_param_1 INTO register_address, value; | 
				
			||||||
 | 
					            EXIT WHEN NOT FOUND; | 
				
			||||||
 | 
					            -- 根据寄存器地址映射参数值 | 
				
			||||||
 | 
					case | 
				
			||||||
 | 
					                WHEN register_address in ('1VD04000','2VD04000') THEN pres_set_supply_pump_area_two := value; | 
				
			||||||
 | 
					WHEN register_address in ('1VD01500','2VD01500') THEN pres_real_supply_pump_area_two := value; | 
				
			||||||
 | 
					WHEN register_address in ('1I00007','2I00007') THEN status_run_supply_pump_three := value; | 
				
			||||||
 | 
					WHEN register_address in ('1I00012','2I00012') THEN status_run_supply_pump_four := value; | 
				
			||||||
 | 
					WHEN register_address in ('1VD09200','2VD09200') THEN level_water_tank_two := value; | 
				
			||||||
 | 
					ELSE | 
				
			||||||
 | 
					              -- 记录未匹配的寄存器地址(新增) | 
				
			||||||
 | 
					              RAISE NOTICE '未匹配的寄存器地址(设备:%): %', floor_id_1_in, register_address; | 
				
			||||||
 | 
					END CASE; | 
				
			||||||
 | 
					END LOOP; | 
				
			||||||
 | 
					EXCEPTION | 
				
			||||||
 | 
					        WHEN OTHERS THEN | 
				
			||||||
 | 
					            -- 游标异常时记录错误 | 
				
			||||||
 | 
					            RAISE NOTICE '游标遍历失败(设备:%): %', floor_id_1_in, SQLERRM; | 
				
			||||||
 | 
					END; | 
				
			||||||
 | 
					CLOSE base_param_1;  -- 确保游标最终关闭 | 
				
			||||||
 | 
					RAISE NOTICE '关闭游标'; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- ------------------------------ | 
				
			||||||
 | 
					    -- 4. 遍历游标获取寄存器参数(严格关闭游标)中区/中厨 | 
				
			||||||
 | 
					    -- ------------------------------ | 
				
			||||||
 | 
					OPEN base_param_2; | 
				
			||||||
 | 
					BEGIN | 
				
			||||||
 | 
					    LOOP | 
				
			||||||
 | 
					FETCH NEXT FROM base_param_2 INTO other_name, register_address, value; | 
				
			||||||
 | 
					        EXIT WHEN NOT FOUND; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CASE | 
				
			||||||
 | 
					            -- 合并判断条件(推荐写法) | 
				
			||||||
 | 
								WHEN other_name in ('3号热泵温度设置','1号热泵温度设置') and register_address IN ('1', '3') THEN  | 
				
			||||||
 | 
					                temp_set_hot_pump_one := value; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WHEN other_name in ('3号热泵实际温度','1号热泵实际温度') and register_address IN ('1', '3') THEN | 
				
			||||||
 | 
					                temp_real_hot_pump_one := value; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WHEN other_name in ('3号热泵启停控制','1号热泵启停控制') and register_address IN ('1', '3') THEN | 
				
			||||||
 | 
					                status_switch_hot_pump_one := CASE WHEN value > 1 THEN 1 ELSE 0 END; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WHEN other_name in ('3号热泵电流1','1号热泵电流1') and register_address IN ('1', '3') THEN | 
				
			||||||
 | 
					                temp_real_hot_pump_one := CASE WHEN value > 1 THEN 1 ELSE 0 END; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WHEN other_name in ('4号热泵温度设置','2号热泵温度设置') and register_address IN ('2', '4') THEN | 
				
			||||||
 | 
					                temp_set_hot_pump_two := value; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WHEN other_name in ('4号热泵实际温度','2号热泵实际温度') and register_address IN ('2', '4') THEN | 
				
			||||||
 | 
					                temp_real_hot_pump_two := value; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WHEN other_name in ('4号热泵启停控制','2号热泵启停控制') and register_address IN ('2', '4') THEN | 
				
			||||||
 | 
					                status_switch_hot_pump_two := CASE WHEN value > 1 THEN 1 ELSE 0 END; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WHEN other_name in ('4号热泵电流1','2号热泵电流1') and register_address IN ('2', '4') THEN | 
				
			||||||
 | 
					                temp_real_hot_pump_two := CASE WHEN value > 1 THEN 1 ELSE 0 END; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WHEN other_name in ('5号热泵温度设置') and register_address IN ('5') THEN | 
				
			||||||
 | 
					                temp_set_hot_pump_three := value; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WHEN other_name in ('5号热泵实际温度') and register_address IN ('5') THEN | 
				
			||||||
 | 
					                temp_real_hot_pump_three := value; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WHEN other_name in ('5号热泵启停控制') and register_address IN ('5') THEN | 
				
			||||||
 | 
					                status_switch_hot_pump_three := CASE WHEN value > 1 THEN 1 ELSE 0 END; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WHEN other_name in ('5号热泵电流1') and register_address IN ('5') THEN | 
				
			||||||
 | 
					                temp_real_hot_pump_three := CASE WHEN value > 1 THEN 1 ELSE 0 END; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WHEN other_name in ('6号热泵温度设置') and register_address IN ('6') THEN | 
				
			||||||
 | 
					                temp_set_hot_pump_four := value; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WHEN other_name in ('6号热泵实际温度') and register_address IN ('6') THEN | 
				
			||||||
 | 
					                temp_real_hot_pump_four := value; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WHEN other_name in ('6号热泵启停控制') and register_address IN ('6') THEN | 
				
			||||||
 | 
					                status_switch_hot_pump_four := CASE WHEN value > 1 THEN 1 ELSE 0 END; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WHEN other_name in ('6号热泵电流1') and register_address IN ('6') THEN | 
				
			||||||
 | 
					                temp_real_hot_pump_four := CASE WHEN value > 1 THEN 1 ELSE 0 END; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WHEN register_address IN ('1VD07000', '2VD07000') THEN | 
				
			||||||
 | 
					                pres_set_supply_pump_area_one := value; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WHEN register_address IN ('1VD01800', '2VD01800') THEN | 
				
			||||||
 | 
					                pres_real_supply_pump_area_one := value; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WHEN register_address IN ('1I00001', '2I00001') THEN | 
				
			||||||
 | 
					                status_run_supply_pump_one := value; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WHEN register_address IN ('1I00004', '2I00004') THEN | 
				
			||||||
 | 
					                status_run_supply_pump_two := value; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WHEN register_address IN ('2VD06100', '1VD06100') THEN | 
				
			||||||
 | 
					                level_water_tank_one := value; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ELSE | 
				
			||||||
 | 
					                RAISE NOTICE '设备类型或寄存器地址不匹配(设备:%): %', floor_id_2_in, register_address; | 
				
			||||||
 | 
					END CASE; | 
				
			||||||
 | 
					END LOOP; | 
				
			||||||
 | 
					EXCEPTION | 
				
			||||||
 | 
						    WHEN OTHERS THEN | 
				
			||||||
 | 
						        RAISE NOTICE '游标遍历失败(设备:%): %', floor_id_2_in, SQLERRM; | 
				
			||||||
 | 
					END; | 
				
			||||||
 | 
					CLOSE base_param_2;  -- 确保游标最终关闭 | 
				
			||||||
 | 
					RAISE NOTICE '关闭游标'; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    -- ------------------------------ | 
				
			||||||
 | 
					    -- 5. 插入历史数据(处理唯一约束冲突) | 
				
			||||||
 | 
					    -- ------------------------------ | 
				
			||||||
 | 
					SELECT COUNT(1) INTO is_exits | 
				
			||||||
 | 
					FROM report_hot_water_param_his | 
				
			||||||
 | 
					WHERE cur_time = cur_time_in | 
				
			||||||
 | 
					  AND floor_id = floor_id_in; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IF is_exits = 0 THEN | 
				
			||||||
 | 
					        INSERT INTO public.report_hot_water_param_his ( | 
				
			||||||
 | 
								id, | 
				
			||||||
 | 
					            floor_id, | 
				
			||||||
 | 
					            cur_date, | 
				
			||||||
 | 
					            cur_time, | 
				
			||||||
 | 
					            temp_set_hot_pump_one, | 
				
			||||||
 | 
					            temp_real_hot_pump_one, | 
				
			||||||
 | 
					            status_switch_hot_pump_one, | 
				
			||||||
 | 
					            status_run_hot_pump_one, | 
				
			||||||
 | 
					            temp_set_hot_pump_two, | 
				
			||||||
 | 
					            temp_real_hot_pump_two, | 
				
			||||||
 | 
					            status_switch_hot_pump_two, | 
				
			||||||
 | 
					            status_run_hot_pump_two, | 
				
			||||||
 | 
					            temp_set_hot_pump_three, | 
				
			||||||
 | 
					            temp_real_hot_pump_three, | 
				
			||||||
 | 
					            status_switch_hot_pump_three, | 
				
			||||||
 | 
					            status_run_hot_pump_three, | 
				
			||||||
 | 
					            temp_set_hot_pump_four, | 
				
			||||||
 | 
					            temp_real_hot_pump_four, | 
				
			||||||
 | 
					            status_switch_hot_pump_four, | 
				
			||||||
 | 
					            status_run_hot_pump_four, | 
				
			||||||
 | 
					            pres_set_supply_pump_area_one, | 
				
			||||||
 | 
					            pres_real_supply_pump_area_one, | 
				
			||||||
 | 
					            status_run_supply_pump_one, | 
				
			||||||
 | 
					            status_run_supply_pump_two, | 
				
			||||||
 | 
					            pres_set_supply_pump_area_two, | 
				
			||||||
 | 
					            pres_real_supply_pump_area_two, | 
				
			||||||
 | 
					            status_run_supply_pump_three, | 
				
			||||||
 | 
					            status_run_supply_pump_four, | 
				
			||||||
 | 
					            level_water_tank_one, | 
				
			||||||
 | 
					            level_water_tank_two   | 
				
			||||||
 | 
					        ) VALUES ( | 
				
			||||||
 | 
								uuid_generate_v1mc(), | 
				
			||||||
 | 
					            floor_id_in, | 
				
			||||||
 | 
					            LEFT(cur_time_in, 10)::DATE, | 
				
			||||||
 | 
					            cur_time_in, | 
				
			||||||
 | 
					            temp_set_hot_pump_one, | 
				
			||||||
 | 
					            temp_real_hot_pump_one, | 
				
			||||||
 | 
					            status_switch_hot_pump_one, | 
				
			||||||
 | 
					            status_run_hot_pump_one, | 
				
			||||||
 | 
					            temp_set_hot_pump_two, | 
				
			||||||
 | 
					            temp_real_hot_pump_two, | 
				
			||||||
 | 
					            status_switch_hot_pump_two, | 
				
			||||||
 | 
					            status_run_hot_pump_two, | 
				
			||||||
 | 
					            temp_set_hot_pump_three, | 
				
			||||||
 | 
					            temp_real_hot_pump_three, | 
				
			||||||
 | 
					            status_switch_hot_pump_three, | 
				
			||||||
 | 
					            status_run_hot_pump_three, | 
				
			||||||
 | 
					            temp_set_hot_pump_four, | 
				
			||||||
 | 
					            temp_real_hot_pump_four, | 
				
			||||||
 | 
					            status_switch_hot_pump_four, | 
				
			||||||
 | 
					            status_run_hot_pump_four, | 
				
			||||||
 | 
					            pres_set_supply_pump_area_one, | 
				
			||||||
 | 
					            pres_real_supply_pump_area_one, | 
				
			||||||
 | 
					            status_run_supply_pump_one, | 
				
			||||||
 | 
					            status_run_supply_pump_two, | 
				
			||||||
 | 
					            pres_set_supply_pump_area_two, | 
				
			||||||
 | 
					            pres_real_supply_pump_area_two, | 
				
			||||||
 | 
					            status_run_supply_pump_three, | 
				
			||||||
 | 
					            status_run_supply_pump_four, | 
				
			||||||
 | 
					            level_water_tank_one, | 
				
			||||||
 | 
					            level_water_tank_two  | 
				
			||||||
 | 
					        ); | 
				
			||||||
 | 
					END IF; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXCEPTION | 
				
			||||||
 | 
					    WHEN OTHERS THEN | 
				
			||||||
 | 
					        -- 主事务异常时,记录错误 | 
				
			||||||
 | 
					        RAISE NOTICE '存储过程执行失败(设备:%,时间:%): %',  | 
				
			||||||
 | 
					                     floor_id_in, cur_time_in, SQLERRM; | 
				
			||||||
 | 
					END; | 
				
			||||||
 | 
					$BODY$ | 
				
			||||||
 | 
					LANGUAGE plpgsql | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue