From 577e98b7b392a8af6569384deb68cf34fb772b06 Mon Sep 17 00:00:00 2001 From: 25604 Date: Wed, 3 Dec 2025 17:45:13 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E9=87=87=E6=9A=96=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E8=BF=90=E8=A1=8C=E6=8A=A5=E8=A1=A8=EF=BC=8Cexcel=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=EF=BC=8C=E7=BC=96=E8=BE=91=EF=BC=9B=202=E3=80=81?= =?UTF-8?q?=E6=B0=B4=E7=94=B5=E8=A1=A8=E6=8A=84=E8=A1=A8=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E8=BF=90=E8=A1=8C=E6=8A=A5=E8=A1=A8=E4=BB=A5=E5=8F=8Aexcel?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E7=95=8C=E9=9D=A2=E4=BC=98=E5=8C=96=EF=BC=9B?= =?UTF-8?q?=203=E3=80=81=E8=BF=90=E8=A1=8C=E6=8A=A5=E8=A1=A8=E5=88=86?= =?UTF-8?q?=E9=A1=B5bug=E4=BF=AE=E6=94=B9=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report/ReportHeatingController.java | 90 ++++++++ .../节能岛改造每日能耗统计表.xlsx | Bin 14351 -> 13685 bytes .../domain/dto/ReportHeatingRunParamDTO.java | 166 +++++++++++++++ .../entity/ReportHeatingRunParamHis.java | 201 ++++++++++++++++++ .../java/com/mh/quartz/task/ReportTask.java | 12 ++ .../ReportHeatingRunParamHisMapper.java | 32 +++ .../service/report/IReportHeatingService.java | 21 ++ .../impl/MeterReadingsHisServiceImpl.java | 65 +++--- .../report/impl/ReportHeatingServiceImpl.java | 87 ++++++++ sql/2025新增.sql | 57 +++++ ...建采暖系统参数表存储过程.sql | 145 +++++++++++++ 11 files changed, 835 insertions(+), 41 deletions(-) create mode 100644 mh-admin/src/main/java/com/mh/web/controller/report/ReportHeatingController.java create mode 100644 mh-common/src/main/java/com/mh/common/core/domain/dto/ReportHeatingRunParamDTO.java create mode 100644 mh-common/src/main/java/com/mh/common/core/domain/entity/ReportHeatingRunParamHis.java create mode 100644 mh-system/src/main/java/com/mh/system/mapper/report/ReportHeatingRunParamHisMapper.java create mode 100644 mh-system/src/main/java/com/mh/system/service/report/IReportHeatingService.java create mode 100644 mh-system/src/main/java/com/mh/system/service/report/impl/ReportHeatingServiceImpl.java create mode 100644 sql/创建采暖系统参数表存储过程.sql diff --git a/mh-admin/src/main/java/com/mh/web/controller/report/ReportHeatingController.java b/mh-admin/src/main/java/com/mh/web/controller/report/ReportHeatingController.java new file mode 100644 index 0000000..fafce32 --- /dev/null +++ b/mh-admin/src/main/java/com/mh/web/controller/report/ReportHeatingController.java @@ -0,0 +1,90 @@ +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.ReportHeatingRunParamDTO; +import com.mh.common.core.domain.dto.ReportSteamRunParamDTO; +import com.mh.common.core.domain.entity.ReportHeatingRunParamHis; +import com.mh.common.core.domain.entity.ReportSteamRunParamHis; +import com.mh.common.core.page.TableDataInfo; +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.IReportHeatingService; +import com.mh.system.service.report.IReportSteamService; +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.nio.charset.StandardCharsets; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author LJF + * @version 1.0 + * @project eemcs + * @description 采暖系统运行参数报表 + * @date 2024-05-30 08:45:57 + */ +@RestController +@RequestMapping("/reportHeating") +@Slf4j +public class ReportHeatingController extends BaseController { + + private final IReportHeatingService reportHeatingService; + + private ReportHeatingController(IReportHeatingService reportHeatingService) { + this.reportHeatingService = reportHeatingService; + } + + @PostMapping("/list") + public TableDataInfo list(@RequestBody ReportHeatingRunParamHis reportHeatingRunParamHis) { + startPage(); + List list = reportHeatingService.selectHeatingList(reportHeatingRunParamHis); + return getDataTable(list); + } + + @PutMapping("/edit") + public AjaxResult edit(@RequestBody ReportHeatingRunParamHis reportHeatingRunParamHis) { + return toAjax(reportHeatingService.updateRunParams(reportHeatingRunParamHis)); + } + + @PostMapping("/export") + public void exportExcel(@RequestBody ReportHeatingRunParamHis reportSteamRunParamHis, HttpServletResponse response) { + // 文件名 + try { + String fileName = "采暖系统运行记录表.xlsx"; + String headTitle = "采暖系统运行记录表"; + // 从数据库获取数据 + List list = reportHeatingService.selectHeatingList(reportSteamRunParamHis); + if (list != null) { + // 设置响应格式 + response.setContentType("application/vdn.ms-excel;charset=utf-8"); + response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(fileName, StandardCharsets.UTF_8) + "\""); + response.setCharacterEncoding(String.valueOf(StandardCharsets.UTF_8)); + ExcelFillCellMergeHandler mergePrevCol = new ExcelFillCellMergeHandler(); + List infoDTOS = list.stream().map(info -> { + ReportHeatingRunParamDTO deviceInfoDTO = new ReportHeatingRunParamDTO(); + BeanUtils.copyProperties(info, deviceInfoDTO); + return deviceInfoDTO; + }).collect(Collectors.toList()); + + // 内容格式 + EasyExcel.write(response.getOutputStream(), ReportHeatingRunParamDTO.class) + .registerWriteHandler(new ReportSysParamHandler(headTitle)) + .registerWriteHandler(mergePrevCol) + .registerWriteHandler(new RowHeightStyleHandler()) + .sheet(fileName.replace(".xlsx", "")) + .doWrite(infoDTOS); + } + } catch (IOException e) { + throw new RuntimeException("下载报表异常"); + } + } + +} diff --git a/mh-admin/src/main/resources/节能岛改造每日能耗统计表.xlsx b/mh-admin/src/main/resources/节能岛改造每日能耗统计表.xlsx index 0faaa0280eb501a250f6aa06551df2d523ccffda..a22cf2a15f5d6b7334a7d5b02db591c54eccaf8c 100644 GIT binary patch delta 8120 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 delta 8824 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 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; + + @Override + public String toString() { + return new StringJoiner(", ", ReportHeatingRunParamHis.class.getSimpleName() + "[", "]") + .add("id='" + id + "'") + .add("curDate=" + curDate) + .add("curTime='" + curTime + "'") + .add("classes='" + classes + "'") + .add("curStatusBoilerOne=" + curStatusBoilerOne) + .add("tempOutBoilerOne=" + tempOutBoilerOne) + .add("tempInBoilerOne=" + tempInBoilerOne) + .add("tempWaterBoilerOne=" + tempWaterBoilerOne) + .add("tempFlueGasBoilerOne=" + tempFlueGasBoilerOne) + .add("curStatusBoilerTwo=" + curStatusBoilerTwo) + .add("tempOutBoilerTwo=" + tempOutBoilerTwo) + .add("tempInBoilerTwo=" + tempInBoilerTwo) + .add("tempWaterBoilerTwo=" + tempWaterBoilerTwo) + .add("tempFlueGasBoilerTwo=" + tempFlueGasBoilerTwo) + .add("curStatusPumpOne=" + curStatusPumpOne) + .add("frequencyPumpOne=" + frequencyPumpOne) + .add("curStatusPumpTwo=" + curStatusPumpTwo) + .add("frequencyPumpTwo=" + frequencyPumpTwo) + .add("curStatusPumpThree=" + curStatusPumpThree) + .add("frequencyPumpThree=" + frequencyPumpThree) + .add("recorder='" + recorder + "'") + .add("remark='" + remark + "'") + .add("createDate=" + createDate) + .toString(); + } +} diff --git a/mh-quartz/src/main/java/com/mh/quartz/task/ReportTask.java b/mh-quartz/src/main/java/com/mh/quartz/task/ReportTask.java index ae7f439..4c19db8 100644 --- a/mh-quartz/src/main/java/com/mh/quartz/task/ReportTask.java +++ b/mh-quartz/src/main/java/com/mh/quartz/task/ReportTask.java @@ -3,6 +3,7 @@ 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.IReportHeatingService; import com.mh.system.service.report.IReportHotWaterService; import com.mh.system.service.report.IReportSteamService; import lombok.extern.slf4j.Slf4j; @@ -31,6 +32,9 @@ public class ReportTask { @Autowired private IReportSteamService reportSteamService; + @Autowired + private IReportHeatingService reportHeatingService; + /** * 创建抄表记录查询 */ @@ -61,4 +65,12 @@ public class ReportTask { reportSteamService.execProRunParamHis(); } + /** + * 创建采暖系统运行参数 + */ + public void createHeatingRunParam() { + // 定时执行运行脚本 + reportHeatingService.execProRunParamHis(); + } + } diff --git a/mh-system/src/main/java/com/mh/system/mapper/report/ReportHeatingRunParamHisMapper.java b/mh-system/src/main/java/com/mh/system/mapper/report/ReportHeatingRunParamHisMapper.java new file mode 100644 index 0000000..b6fafcb --- /dev/null +++ b/mh-system/src/main/java/com/mh/system/mapper/report/ReportHeatingRunParamHisMapper.java @@ -0,0 +1,32 @@ +package com.mh.system.mapper.report; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.mh.common.core.domain.entity.ReportHeatingRunParamHis; +import com.mh.common.core.domain.entity.ReportHotWaterParamHis; +import com.mh.common.core.domain.entity.ReportSteamRunParamHis; +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 ReportHeatingRunParamHisMapper extends BaseMapper { + + @Select("call pro_heating_run_param(#{curTime,jdbcType=VARCHAR,mode=IN})") + @Options(statementType = StatementType.CALLABLE) + void execProHeatingRunParam(@Param("curTime") String curTime); + + @Select("select * from report_heating_run_param_his where cur_time >= #{beginDate} and cur_time <= #{endDate} order by cur_time desc ") + List findPage(@Param("beginDate") String beginDate, + @Param("endDate") String endDate); +} diff --git a/mh-system/src/main/java/com/mh/system/service/report/IReportHeatingService.java b/mh-system/src/main/java/com/mh/system/service/report/IReportHeatingService.java new file mode 100644 index 0000000..f7ee1ff --- /dev/null +++ b/mh-system/src/main/java/com/mh/system/service/report/IReportHeatingService.java @@ -0,0 +1,21 @@ +package com.mh.system.service.report; + +import com.mh.common.core.domain.entity.ReportHeatingRunParamHis; + +import java.util.List; + +/** + * @author LJF + * @version 1.0 + * @project NewZhujiang_Server + * @description 采暖泵服务类 + * @date 2024-05-29 11:20:30 + */ +public interface IReportHeatingService { + + void execProRunParamHis(); + + List selectHeatingList(ReportHeatingRunParamHis reportHeatingRunParamHis); + + int updateRunParams(ReportHeatingRunParamHis reportHeatingRunParamHis); +} diff --git a/mh-system/src/main/java/com/mh/system/service/report/impl/MeterReadingsHisServiceImpl.java b/mh-system/src/main/java/com/mh/system/service/report/impl/MeterReadingsHisServiceImpl.java index cc173e6..ab36229 100644 --- a/mh-system/src/main/java/com/mh/system/service/report/impl/MeterReadingsHisServiceImpl.java +++ b/mh-system/src/main/java/com/mh/system/service/report/impl/MeterReadingsHisServiceImpl.java @@ -28,11 +28,18 @@ public class MeterReadingsHisServiceImpl implements IMeterReadingsHisService { private ReportMeterReadingsHisMapper reportMeterReadingsHisMapper; private final List locationList = List.of( + "离心机2号空调主机", "磁悬浮3号空调主机", - "变频5号冷冻泵", + "1号冷冻泵", + "2号冷冻泵", + "3号冷冻泵", "4号冷冻泵", - "变频5号冷却泵", + "变频5号冷冻泵", + "1号冷却泵", + "2号冷却泵", + "3号冷却泵", "4号冷却泵", + "变频5号冷却泵", "变频1号冷却塔", "变频2号冷却塔", "变频3号冷却塔", @@ -42,23 +49,12 @@ public class MeterReadingsHisServiceImpl implements IMeterReadingsHisService { "洗衣房热泵控制柜", "群楼中厨水泵控制柜", "热水热泵系统用电总合计:", - "空调冷冻水", - "空调冷却水", "三楼中、高区热水", "群楼、中厨房热水", "热水热泵系统用水总合计:", - "蒸汽发生器+采暖", - "蒸汽发生器+采暖", - "蒸汽发生器+采暖用气总合计:", - "蒸汽发生器+采暖", - "蒸汽发生器+采暖用电总合计:", - "蒸汽发生器+采暖", - "蒸汽发生器用水总合计:", - "水、电、气费用总合计(水/电/气价预估单价,单价需以实际缴费为准):", - "中央空调冷冻流量", - "中央空调冷却流量", - "中央空调采暖流量", - "蒸汽流量" + "水、电费用总合计(水/电价预估单价,单价需以实际缴费为准):", + "中央空调制冷量(kw)", + "蒸汽流量(吨)" ); private final List mtTypeList = List.of( @@ -76,22 +72,15 @@ public class MeterReadingsHisServiceImpl implements IMeterReadingsHisService { "电表", "电表", "电表", - "水表", - "水表", - "水表", - "水表", - "水表", - "燃气表(常用)", - "燃气表(备用)", - "燃气表", + "电表", + "电表", + "电表", "电表", "电表", "水表", "水表", "总合计", "流量计量表", - "流量计量表", - "流量计量表", "流量计量表" ); @@ -177,18 +166,12 @@ public class MeterReadingsHisServiceImpl implements IMeterReadingsHisService { private void createAggregateObjects(List list, String curDate) { Map, 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))) + 15, l -> createAggregateObject("电表", "空调系统用电总合计:", + calculateTotalByRange(l, 0, 16), Objects.requireNonNull(list.stream().filter(v -> v.getSortOrder() == 15).findFirst().orElse(null))), + 20, l -> createAggregateObject("电表", "热水热泵系统用电总合计:", + calculateTotalByRange(l, 16, 21), Objects.requireNonNull(list.stream().filter(v -> v.getSortOrder() == 20).findFirst().orElse(null))), + 23, l -> createAggregateObject("水表", "热水热泵系统用水总合计:", + calculateTotalByRange(l, 21, 24), Objects.requireNonNull(list.stream().filter(v -> v.getSortOrder() == 23).findFirst().orElse(null))) ); for (int i = 0; i < locationList.size(); i++) { if (aggregateCreators.containsKey(i)) { @@ -244,14 +227,14 @@ public class MeterReadingsHisServiceImpl implements IMeterReadingsHisService { // 添加水表、电表、燃气表、水、电、气费用总合计 ReportMeterReadingsHis totalReportMeterReadingsHis = new ReportMeterReadingsHis(); totalReportMeterReadingsHis.setMtType("总合计"); - totalReportMeterReadingsHis.setLocation("水、电、气费用总合计(水/电/气价预估单价,单价需以实际缴费为准):"); + totalReportMeterReadingsHis.setLocation("水、电费用总合计(水/电价预估单价,单价需以实际缴费为准):"); totalReportMeterReadingsHis.setYesterdayReading(new BigDecimal("0")); - Set sortOrderSet = Set.of(9, 14, 19, 22, 24, 26); + Set sortOrderSet = Set.of(16, 21, 24); BigDecimal grandTotal = calculateTotalBySpecificValues(list, sortOrderSet); totalReportMeterReadingsHis.setTodayReading(grandTotal); totalReportMeterReadingsHis.setMtRatio(1); - totalReportMeterReadingsHis.setSortOrder(27); + totalReportMeterReadingsHis.setSortOrder(25); totalReportMeterReadingsHis.setUnitPrice(new BigDecimal("1")); totalReportMeterReadingsHis.setTodayTimestamp(DateUtils.stringToDate(curDate + " 00:00:00", DateUtils.YYYY_MM_DD_HH_MM_SS)); diff --git a/mh-system/src/main/java/com/mh/system/service/report/impl/ReportHeatingServiceImpl.java b/mh-system/src/main/java/com/mh/system/service/report/impl/ReportHeatingServiceImpl.java new file mode 100644 index 0000000..2cc8045 --- /dev/null +++ b/mh-system/src/main/java/com/mh/system/service/report/impl/ReportHeatingServiceImpl.java @@ -0,0 +1,87 @@ +package com.mh.system.service.report.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.mh.common.core.domain.entity.ReportHeatingRunParamHis; +import com.mh.common.core.domain.entity.ReportSteamRunParamHis; +import com.mh.common.utils.StringUtils; +import com.mh.system.mapper.report.ReportHeatingRunParamHisMapper; +import com.mh.system.mapper.report.ReportSteamRunParamHisMapper; +import com.mh.system.service.report.IReportHeatingService; +import com.mh.system.service.report.IReportSteamService; +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; + +/** + * @author LJF + * @version 1.0 + * @project NewZhujiang_Server + * @description 采暖系统服务类 + * @date 2024-05-29 11:20:30 + */ +@Slf4j +@Service +public class ReportHeatingServiceImpl implements IReportHeatingService { + + @Resource + ReportHeatingRunParamHisMapper reportHeatingRunParamHisMapper; + + private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + @Override + public int updateRunParams(ReportHeatingRunParamHis reportHeatingRunParamHis) { + return reportHeatingRunParamHisMapper.updateById(reportHeatingRunParamHis); + } + + @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); + reportHeatingRunParamHisMapper.execProHeatingRunParam(timeParam); + log.info("执行计算采暖泵运行参数执行完成"); + } catch (Exception e) { + log.error("执行计算采暖泵参数存储过程执行失败", e); + throw new RuntimeException(e); + } + } + + + @Override + public List selectHeatingList(ReportHeatingRunParamHis reportHeatingRunParamHis) { + if (reportHeatingRunParamHis.getParams() == null) { + reportHeatingRunParamHis.setParams(new java.util.HashMap<>()); + } + String startTime = (String) reportHeatingRunParamHis.getParams().get("startTime"); + String endTime = (String) reportHeatingRunParamHis.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"; + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.between("cur_time", startTime, endTime); + queryWrapper.orderByDesc("cur_time"); + List reportHeatingRunParamHis1 = reportHeatingRunParamHisMapper.selectList(queryWrapper); + // 遍历数据,判断curStatus=1,运行,curStatus=0 停止,赋值给runStatus + for (ReportHeatingRunParamHis reportHeatingRunParamHis2 : reportHeatingRunParamHis1) { + reportHeatingRunParamHis2.setRunStatusBoilerOne(reportHeatingRunParamHis2.getCurStatusBoilerOne() == 1 ? "运行" : "停止"); + reportHeatingRunParamHis2.setRunStatusBoilerTwo(reportHeatingRunParamHis2.getCurStatusBoilerTwo() == 1 ? "运行" : "停止"); + reportHeatingRunParamHis2.setRunStatusPumpOne(reportHeatingRunParamHis2.getCurStatusPumpOne() == 1 ? "运行" : "停止"); + reportHeatingRunParamHis2.setRunStatusPumpTwo(reportHeatingRunParamHis2.getCurStatusPumpTwo() == 1 ? "运行" : "停止"); + reportHeatingRunParamHis2.setRunStatusPumpThree(reportHeatingRunParamHis2.getCurStatusPumpThree() == 1 ? "运行" : "停止"); + } + return reportHeatingRunParamHis1; + } +} diff --git a/sql/2025新增.sql b/sql/2025新增.sql index 5640192..a28df2f 100644 --- a/sql/2025新增.sql +++ b/sql/2025新增.sql @@ -401,3 +401,60 @@ COMMENT ON COLUMN public.report_hot_water_param_his.level_water_tank_two IS '中 COMMENT ON COLUMN public.report_hot_water_param_his.recorder IS '巡查记录人(工号/姓名)'; COMMENT ON COLUMN public.report_hot_water_param_his.remark IS '异常情况备注说明'; COMMENT ON COLUMN public.report_hot_water_param_his.create_time IS '记录生成时间(含时区信息)'; + +-- 采暖系统运行记录报表 +CREATE TABLE public.report_heating_run_param_his ( + id varchar(36) NOT NULL ,-- 自增主键 + cur_date date NULL ,-- 日期 + cur_time varchar(20) NULL ,-- 时间 + classes varchar(50) NULL ,-- 班次 + cur_status_boiler_one int NULL ,-- 当前状态℃ + temp_out_boiler_one numeric(24, 2) NULL ,-- 出水温度 + temp_in_boiler_one numeric(24, 2) NULL ,-- 回水温度 + temp_water_boiler_one numeric(24, 2) NULL ,-- 炉水温度 + temp_flue_gas_boiler_one numeric(24, 2) NULL ,-- 烟道温度℃ + cur_status_boiler_two int NULL ,-- 当前状态℃ + temp_out_boiler_two numeric(24, 2) NULL ,-- 出水温度 + temp_in_boiler_two numeric(24, 2) NULL ,-- 回水温度 + temp_water_boiler_two numeric(24, 2) NULL ,-- 炉水温度 + temp_flue_gas_boiler_two numeric(24, 2) NULL ,-- 烟道温度℃ + cur_status_pump_one int null, -- 1号采暖泵运行状态 + frequency_pump_one numeric(24,2) null, -- 1号采暖泵当前频率 + cur_status_pump_two int null, -- 2号采暖泵运行状态 + frequency_pump_two numeric(24,2) null, -- 2号采暖泵当前频率 + cur_status_pump_three int null, -- 3号采暖泵运行状态 + frequency_pump_three numeric(24,2) null, -- 3号采暖泵当前频率 + recorder varchar(50) null, -- 巡查记录人 + remark varchar(200) null, -- 备注 + create_date timestamp default now(), -- 创建时间 + CONSTRAINT report_heating_run_param_his_pkey PRIMARY KEY (id) +); +CREATE INDEX idx_report_heating_run_param_his_cur_date ON public.report_heating_run_param_his USING btree (cur_date); +CREATE INDEX idx_report_heating_run_param_his_cur_time ON public.report_heating_run_param_his USING btree (cur_time); +CREATE INDEX idx_report_heating_run_param_his_recorder ON public.report_heating_run_param_his USING btree (recorder); + +-- Column comments + +COMMENT ON COLUMN public.report_heating_run_param_his.id IS '主键'; +COMMENT ON COLUMN public.report_heating_run_param_his.cur_date IS '日期(格式:YYYY-MM-DD)'; +COMMENT ON COLUMN public.report_heating_run_param_his.cur_time IS '时间(格式:HH24:MI:SS)'; +COMMENT ON COLUMN public.report_heating_run_param_his.classes IS '班次(如:早班、中班、夜班)'; +COMMENT ON COLUMN public.report_heating_run_param_his.cur_status_boiler_one IS '锅炉1当前状态(℃)'; +COMMENT ON COLUMN public.report_heating_run_param_his.temp_out_boiler_one IS '锅炉1出水温度(℃)'; +COMMENT ON COLUMN public.report_heating_run_param_his.temp_in_boiler_one IS '锅炉1回水温度(℃)'; +COMMENT ON COLUMN public.report_heating_run_param_his.temp_water_boiler_one IS '锅炉1炉水温度(℃)'; +COMMENT ON COLUMN public.report_heating_run_param_his.temp_flue_gas_boiler_one IS '锅炉1烟道温度(℃)'; +COMMENT ON COLUMN public.report_heating_run_param_his.cur_status_boiler_two IS '锅炉2当前状态(℃)'; +COMMENT ON COLUMN public.report_heating_run_param_his.temp_out_boiler_two IS '锅炉2出水温度(℃)'; +COMMENT ON COLUMN public.report_heating_run_param_his.temp_in_boiler_two IS '锅炉2回水温度(℃)'; +COMMENT ON COLUMN public.report_heating_run_param_his.temp_water_boiler_two IS '锅炉2炉水温度(℃)'; +COMMENT ON COLUMN public.report_heating_run_param_his.temp_flue_gas_boiler_two IS '锅炉2烟道温度(℃)'; +COMMENT ON COLUMN public.report_heating_run_param_his.cur_status_pump_one IS '1号采暖泵运行状态(0-停止,1-运行)'; +COMMENT ON COLUMN public.report_heating_run_param_his.frequency_pump_one IS '1号采暖泵当前频率(Hz)'; +COMMENT ON COLUMN public.report_heating_run_param_his.cur_status_pump_two IS '2号采暖泵运行状态(0-停止,1-运行)'; +COMMENT ON COLUMN public.report_heating_run_param_his.frequency_pump_two IS '2号采暖泵当前频率(Hz)'; +COMMENT ON COLUMN public.report_heating_run_param_his.cur_status_pump_three IS '3号采暖泵运行状态(0-停止,1-运行)'; +COMMENT ON COLUMN public.report_heating_run_param_his.frequency_pump_three IS '3号采暖泵当前频率(Hz)'; +COMMENT ON COLUMN public.report_heating_run_param_his.recorder IS '巡查记录人(操作员姓名)'; +COMMENT ON COLUMN public.report_heating_run_param_his.remark IS '备注(异常情况描述)'; +COMMENT ON COLUMN public.report_heating_run_param_his.create_date IS '记录创建时间(默认当前时间)'; \ No newline at end of file diff --git a/sql/创建采暖系统参数表存储过程.sql b/sql/创建采暖系统参数表存储过程.sql new file mode 100644 index 0000000..8b18d70 --- /dev/null +++ b/sql/创建采暖系统参数表存储过程.sql @@ -0,0 +1,145 @@ +-- DROP PROCEDURE public.pro_heating_run_param(varchar); + +CREATE OR REPLACE PROCEDURE public.pro_heating_run_param(IN cur_time_in character varying) + LANGUAGE plpgsql +AS $procedure$ +DECLARE + -- 变量声明(保持原有结构,默认值优化) +cur_status_boiler_one numeric(24, 2) := 0 ; + temp_out_boiler_one numeric(24,2) :=0; + temp_in_boiler_one numeric(24,2) :=0; + temp_water_boiler_one numeric(24,2) := 0; + temp_flue_gas_boiler_one numeric(24,2) := 0; + cur_status_boiler_two numeric(24, 2) := 0 ; + temp_out_boiler_two numeric(24,2) :=0; + temp_in_boiler_two numeric(24,2) :=0; + temp_water_boiler_two numeric(24,2) := 0; + temp_flue_gas_boiler_two numeric(24,2) := 0; + cur_status_pump_one numeric(24,2) := 0; + frequency_pump_one numeric(24,2) := 0; + cur_status_pump_two numeric(24,2) := 0; + frequency_pump_two numeric(24,2) := 0; + cur_status_pump_three numeric(24,2) := 0; + frequency_pump_three numeric(24,2) := 0; + is_exits INT := 0; + register_address VARCHAR(50); +value NUMERIC(24,2); + mt_num varchar(20); + + -- 游标:简化为普通游标(无需 REF CURSOR) + base_param CURSOR FOR +SELECT + cra.mt_num::VARCHAR, + COALESCE(MAX(cra.cur_value), 0)::NUMERIC(24,2) +FROM + collection_params_manage cra +WHERE + cra.mt_num IS NOT NULL + and cra.system_type = '3' and cra.device_ledger_id != '0243b3a898d85f3a1205a2d8cainuan01' and cra.device_ledger_id != '0243b3a898d85f3a1205a2d8cainuan100' + and TO_CHAR(cra.cur_time, 'YYYY-MM-DD HH24') = cur_time_in +GROUP BY + cra.cur_time::DATE, + cra.mt_num; + +BEGIN + + -- ------------------------------ + -- 4. 遍历游标获取寄存器参数(严格关闭游标) + -- ------------------------------ +OPEN base_param; +BEGIN -- 游标操作的异常处理块 + LOOP +FETCH NEXT FROM base_param INTO register_address, value; + EXIT WHEN NOT FOUND; + RAISE NOTICE 'Processing: % = %', register_address, value; -- 调试信息 + -- 根据寄存器地址映射参数值 + -- 根据寄存器地址映射参数值 +CASE + WHEN register_address IN ('PLC1500_DB611704', 'PLC1500_DB611694') THEN + cur_status_boiler_one := CASE WHEN value > 0 THEN 1 ELSE 0 END; +WHEN register_address = 'PLC1500_DB611686' THEN temp_out_boiler_one := value; +WHEN register_address = 'PLC1500_DB611684' THEN temp_in_boiler_one := value; +WHEN register_address = 'PLC1500_DB611688' THEN temp_water_boiler_one := value; +WHEN register_address = 'PLC1500_DB611690' THEN temp_flue_gas_boiler_one := value; +WHEN register_address IN ('PLC1500_DB611692', 'PLC1500_DB611706') THEN + cur_status_boiler_two := CASE WHEN value > 0 THEN 1 ELSE 0 END; +WHEN register_address = 'PLC1500_DB611698' THEN temp_out_boiler_two := value; +WHEN register_address = 'PLC1500_DB611696' THEN temp_in_boiler_two := value; +WHEN register_address = 'PLC1500_DB611700' THEN temp_water_boiler_two := value; +WHEN register_address = 'PLC1500_DB611702' THEN temp_flue_gas_boiler_two := value; +WHEN register_address = 'DBX83624' THEN cur_status_pump_one := value; +WHEN register_address = 'DB612034' THEN frequency_pump_one := value; +WHEN register_address = 'DBX83620' THEN cur_status_pump_two := value; +WHEN register_address = 'DB612050' THEN frequency_pump_two := value; +WHEN register_address = 'DBX83630' THEN cur_status_pump_three := value; +WHEN register_address = 'DB612066' THEN frequency_pump_three := value; +ELSE +END CASE; +END LOOP; +EXCEPTION + WHEN OTHERS THEN + -- 游标异常时记录错误 + RAISE NOTICE '游标遍历失败(设备:蒸汽机): %', SQLERRM; +END; +CLOSE base_param; -- 确保游标最终关闭 +RAISE NOTICE '关闭游标'; + + -- ------------------------------ + -- 5. 插入历史数据(处理唯一约束冲突) + -- ------------------------------ +SELECT COUNT(1) INTO is_exits +FROM report_heating_run_param_his +WHERE cur_time = cur_time_in; + +IF is_exits = 0 THEN + INSERT INTO public.report_heating_run_param_his ( + id, + cur_date, + cur_time, + cur_status_boiler_one , + temp_out_boiler_one , + temp_in_boiler_one , + temp_water_boiler_one , + temp_flue_gas_boiler_one , + cur_status_boiler_two , + temp_out_boiler_two , + temp_in_boiler_two , + temp_water_boiler_two , + temp_flue_gas_boiler_two , + cur_status_pump_one , + frequency_pump_one , + cur_status_pump_two , + frequency_pump_two , + cur_status_pump_three , + frequency_pump_three + ) VALUES ( + REPLACE(uuid_generate_v1mc()::TEXT, '-', ''), + LEFT(cur_time_in, 10)::DATE, + cur_time_in, + cur_status_boiler_one , + temp_out_boiler_one , + temp_in_boiler_one , + temp_water_boiler_one , + temp_flue_gas_boiler_one , + cur_status_boiler_two , + temp_out_boiler_two , + temp_in_boiler_two , + temp_water_boiler_two , + temp_flue_gas_boiler_two , + cur_status_pump_one , + frequency_pump_one , + cur_status_pump_two , + frequency_pump_two , + cur_status_pump_three , + frequency_pump_three + ); +END IF; + +EXCEPTION + WHEN OTHERS THEN + -- 主事务异常时,记录错误 + RAISE NOTICE '存储过程执行失败(设备:采暖系统,时间:%): %', + cur_time_in, SQLERRM; +END; +$procedure$ +;