Browse Source

1、测试备件出入库历史记录管理、网关参数管理、设备通信采集参数管理、维保管理接口;

2、添加定时任务统计维保信息记录;
dev
mh 2 months ago
parent
commit
5e3da57c8f
  1. 3
      mh-admin/src/main/java/com/mh/web/controller/device/CommunicationParamsController.java
  2. 2
      mh-admin/src/main/java/com/mh/web/controller/device/DeviceInOutManageController.java
  3. 3
      mh-admin/src/main/java/com/mh/web/controller/device/GatewayManageController.java
  4. 38
      mh-admin/src/main/java/com/mh/web/controller/device/MaintainInfoController.java
  5. 12
      mh-common/src/main/java/com/mh/common/core/domain/entity/DeviceInOutManage.java
  6. 27
      mh-common/src/main/java/com/mh/common/core/domain/entity/MaintainInfo.java
  7. 142
      mh-common/src/main/java/com/mh/common/core/domain/entity/MaintainSum.java
  8. 34
      mh-quartz/src/main/java/com/mh/quartz/task/CreateMaintainTask.java
  9. 24
      mh-system/src/main/java/com/mh/system/mapper/device/MaintainInfoMapper.java
  10. 5
      mh-system/src/main/java/com/mh/system/mapper/device/SparePartsManageMapper.java
  11. 5
      mh-system/src/main/java/com/mh/system/service/device/IMaintainInfoService.java
  12. 22
      mh-system/src/main/java/com/mh/system/service/device/impl/DeviceInOutManageServiceImpl.java
  13. 11
      mh-system/src/main/java/com/mh/system/service/device/impl/MaintainInfoServiceImpl.java
  14. 2
      sql/创建冷水机组参数表存储过程.sql
  15. 144
      sql/创建维保统计存储过程.sql
  16. 2
      sql/创建计量设备表存储过程.sql
  17. 34
      sql/维保信息统计表.sql

3
mh-admin/src/main/java/com/mh/web/controller/device/CommunicationParamsController.java

@ -12,6 +12,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.List;
/**
@ -59,6 +60,7 @@ public class CommunicationParamsController extends BaseController {
public AjaxResult add(@Validated @RequestBody CommunicationParams communicationParams)
{
communicationParams.setCreateBy(getUsername());
communicationParams.setCreateTime(new Date());
return toAjax(iCommunicationParamsService.insertCommunicationParams(communicationParams));
}
@ -71,6 +73,7 @@ public class CommunicationParamsController extends BaseController {
public AjaxResult edit(@Validated @RequestBody CommunicationParams communicationParams)
{
communicationParams.setUpdateBy(getUsername());
communicationParams.setUpdateTime(new Date());
return toAjax(iCommunicationParamsService.updateCommunicationParams(communicationParams));
}

2
mh-admin/src/main/java/com/mh/web/controller/device/DeviceInOutManageController.java

@ -12,6 +12,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.List;
/**
@ -58,6 +59,7 @@ public class DeviceInOutManageController extends BaseController {
public AjaxResult add(@Validated @RequestBody DeviceInOutManage deviceInOutManage)
{
deviceInOutManage.setCreateBy(getUsername());
deviceInOutManage.setCreateTime(new Date());
return toAjax(deviceInOutManageService.insertDeviceInOutManage(deviceInOutManage));
}

3
mh-admin/src/main/java/com/mh/web/controller/device/GatewayManageController.java

@ -14,6 +14,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.List;
/**
@ -61,6 +62,7 @@ public class GatewayManageController extends BaseController {
public AjaxResult add(@Validated @RequestBody GatewayManage gatewayManage)
{
gatewayManage.setCreateBy(getUsername());
gatewayManage.setCreateTime(new Date());
return toAjax(gatewayManageService.insertGatewayManage(gatewayManage));
}
@ -73,6 +75,7 @@ public class GatewayManageController extends BaseController {
public AjaxResult edit(@Validated @RequestBody GatewayManage gatewayManage)
{
gatewayManage.setUpdateBy(getUsername());
gatewayManage.setUpdateTime(new Date());
return toAjax(gatewayManageService.updateGateway(gatewayManage));
}

38
mh-admin/src/main/java/com/mh/web/controller/device/MaintainInfoController.java

@ -4,6 +4,7 @@ import com.mh.common.annotation.Log;
import com.mh.common.core.controller.BaseController;
import com.mh.common.core.domain.AjaxResult;
import com.mh.common.core.domain.entity.MaintainInfo;
import com.mh.common.core.domain.entity.MaintainSum;
import com.mh.common.core.page.TableDataInfo;
import com.mh.common.enums.BusinessType;
import com.mh.system.service.device.IMaintainInfoService;
@ -12,6 +13,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.List;
/**
@ -56,10 +58,10 @@ public class MaintainInfoController extends BaseController {
@PreAuthorize("@ss.hasPermi('system:maintain:add')")
@Log(title = "维护设备管理", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@Validated @RequestBody MaintainInfo gatewayManage)
public AjaxResult add(@Validated @RequestBody MaintainInfo maintainInfo)
{
gatewayManage.setCreateBy(getUsername());
return toAjax(maintainInfoService.insertMaintainInfo(gatewayManage));
maintainInfo.setCreateBy(getUsername());
return toAjax(maintainInfoService.insertMaintainInfo(maintainInfo));
}
/**
@ -68,10 +70,11 @@ public class MaintainInfoController extends BaseController {
@PreAuthorize("@ss.hasPermi('system:maintain:edit')")
@Log(title = "维护设备管理", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@Validated @RequestBody MaintainInfo gatewayManage)
public AjaxResult edit(@Validated @RequestBody MaintainInfo maintainInfo)
{
gatewayManage.setUpdateBy(getUsername());
return toAjax(maintainInfoService.updateMaintainInfo(gatewayManage));
maintainInfo.setUpdateBy(getUsername());
maintainInfo.setUpdateTime(new Date());
return toAjax(maintainInfoService.updateMaintainInfo(maintainInfo));
}
/**
@ -84,4 +87,27 @@ public class MaintainInfoController extends BaseController {
{
return toAjax(maintainInfoService.deleteMaintainInfoByIds(maintainIds));
}
/**
* 删除维护设备管理
*/
@PreAuthorize("@ss.hasPermi('system:maintain:remove')")
@Log(title = "维护设备管理", businessType = BusinessType.DELETE)
@GetMapping("/maintainSum")
public AjaxResult sumMaintain(@RequestParam(value= "buildingId", required=false)String buildingId,
@RequestParam(value= "curDate", required=false)String curDate) {
try {
MaintainSum record;
if (buildingId == null || buildingId.equals("")) {
record = maintainInfoService.queryMaintainSum("所有", curDate);
} else {
record = maintainInfoService.queryMaintainSum(buildingId, curDate);
}
return AjaxResult.success(record);
} catch (Exception e) {
return AjaxResult.error();
}
}
}

12
mh-common/src/main/java/com/mh/common/core/domain/entity/DeviceInOutManage.java

@ -31,7 +31,7 @@ public class DeviceInOutManage extends BaseEntity {
/**
* 备件的名称便于快速识别
*/
private String sparePartsName;
private String spareName;
/**
* 出入库操作类型0表示入库1表示出库
@ -106,12 +106,12 @@ public class DeviceInOutManage extends BaseEntity {
this.sparePartsId = sparePartsId;
}
public String getSparePartsName() {
return sparePartsName;
public String getSpareName() {
return spareName;
}
public void setSparePartsName(String sparePartsName) {
this.sparePartsName = sparePartsName;
public void setSpareName(String spareName) {
this.spareName = spareName;
}
public Integer getOperaType() {
@ -143,7 +143,7 @@ public class DeviceInOutManage extends BaseEntity {
return new ToStringBuilder(this)
.append("id", id)
.append("sparePartsId", sparePartsId)
.append("sparePartsName", sparePartsName)
.append("spareName", spareName)
.append("operaType", operaType)
.append("intOutNum", intOutNum)
.append("inventoryLevels", inventoryLevels)

27
mh-common/src/main/java/com/mh/common/core/domain/entity/MaintainInfo.java

@ -5,6 +5,7 @@ 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.JsonInclude;
import com.mh.common.core.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
@ -25,8 +26,10 @@ public class MaintainInfo extends BaseEntity {
private BigDecimal cost; // 费用
private String contents; // 维保内容
private String evaluate; // 评价分数
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date execTime; // 执行时间
private Integer spendTime; // 花费时间
private Integer spendTimes; // 花费时间
private String buildingId; // 楼栋id
@TableField(exist = false)
private String searchValue;
@ -142,12 +145,20 @@ public class MaintainInfo extends BaseEntity {
this.execTime = execTime;
}
public Integer getSpendTime() {
return spendTime;
public Integer getSpendTimes() {
return spendTimes;
}
public void setSpendTime(Integer spendTime) {
this.spendTime = spendTime;
public void setSpendTimes(Integer spendTimes) {
this.spendTimes = spendTimes;
}
public String getBuildingId() {
return buildingId;
}
public void setBuildingId(String buildingId) {
this.buildingId = buildingId;
}
@Override
@ -162,7 +173,11 @@ public class MaintainInfo extends BaseEntity {
.append("contents", contents)
.append("evaluate", evaluate)
.append("execTime", execTime)
.append("spendTime", spendTime)
.append("spendTimes", spendTimes)
.append("buildingId", buildingId)
.append("searchValue", searchValue)
.append("remark", remark)
.append("params", params)
.toString();
}
}

142
mh-common/src/main/java/com/mh/common/core/domain/entity/MaintainSum.java

@ -0,0 +1,142 @@
package com.mh.common.core.domain.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import org.apache.commons.lang3.builder.ToStringBuilder;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 维保统计
* @date 2025-02-26 16:47:18
*/
@TableName("maintain_sum")
public class MaintainSum {
private String id;
private String buildingId;
private String curDate;
private int dayNum;
private String dayP;
private int weekNum;
private String weekP;
private int monthNum;
private String monthP;
private int yearNum;
private String yearP;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getBuildingId() {
return buildingId;
}
public void setBuildingId(String buildingId) {
this.buildingId = buildingId;
}
public String getCurDate() {
return curDate;
}
public void setCurDate(String curDate) {
this.curDate = curDate;
}
public int getDayNum() {
return dayNum;
}
public void setDayNum(int dayNum) {
this.dayNum = dayNum;
}
public String getDayP() {
return dayP;
}
public void setDayP(String dayP) {
this.dayP = dayP;
}
public int getWeekNum() {
return weekNum;
}
public void setWeekNum(int weekNum) {
this.weekNum = weekNum;
}
public String getWeekP() {
return weekP;
}
public void setWeekP(String weekP) {
this.weekP = weekP;
}
public int getMonthNum() {
return monthNum;
}
public void setMonthNum(int monthNum) {
this.monthNum = monthNum;
}
public String getMonthP() {
return monthP;
}
public void setMonthP(String monthP) {
this.monthP = monthP;
}
public int getYearNum() {
return yearNum;
}
public void setYearNum(int yearNum) {
this.yearNum = yearNum;
}
public String getYearP() {
return yearP;
}
public void setYearP(String yearP) {
this.yearP = yearP;
}
@Override
public String toString() {
return new ToStringBuilder(this)
.append("id", id)
.append("buildingId", buildingId)
.append("curDate", curDate)
.append("dayNum", dayNum)
.append("dayP", dayP)
.append("weekNum", weekNum)
.append("weekP", weekP)
.append("monthNum", monthNum)
.append("monthP", monthP)
.append("yearNum", yearNum)
.append("yearP", yearP)
.toString();
}
}

34
mh-quartz/src/main/java/com/mh/quartz/task/CreateMaintainTask.java

@ -0,0 +1,34 @@
package com.mh.quartz.task;
import com.mh.system.service.device.IMaintainInfoService;
import com.mh.system.service.device.impl.MaintainInfoServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 定时处理维保统计
* @date 2025-02-26 18:09:32
*/
@Component("createMaintainTask")
public class CreateMaintainTask {
private final IMaintainInfoService maintainInfoService;
@Autowired
public CreateMaintainTask(IMaintainInfoService maintainInfoService) {
this.maintainInfoService = maintainInfoService;
}
public void createMaintainTask() {
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date();
String curDate = sdf1.format(date);
maintainInfoService.createMaintainTask(curDate);
}
}

24
mh-system/src/main/java/com/mh/system/mapper/device/MaintainInfoMapper.java

@ -2,7 +2,9 @@ package com.mh.system.mapper.device;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mh.common.core.domain.entity.MaintainInfo;
import org.apache.ibatis.annotations.Mapper;
import com.mh.common.core.domain.entity.MaintainSum;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.mapping.StatementType;
/**
* @author LJF
@ -13,4 +15,24 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public interface MaintainInfoMapper extends BaseMapper<MaintainInfo> {
@Results(value = {
@Result(property="curDate",column="cur_date"),
@Result(property="buildingId",column="building_id"),
@Result(property="dayNum",column="day_num"),
@Result(property="dayP",column="day_p"),
@Result(property ="weekNum",column ="week_num"),
@Result(property ="weekP",column ="week_p"),
@Result(property ="monthNum",column ="month_num"),
@Result(property="monthP",column="month_p"),
@Result(property="yearNum",column="year_num"),
@Result(property="yearP",column="year_p")
})
@Select("select * from maintain_sum where building_id=#{buildingId} and cur_date=#{curDate}")
MaintainSum queryMaintainSum(@Param("buildingId") String buildingId, @Param("curDate") String curDate);
//汇总维保量
@Select("exec pro_maintain_sum #{curDate,jdbcType=VARCHAR,mode=IN} ")
@Options(statementType = StatementType.CALLABLE)
void proMaintainSum(@Param("curDate") String curDate);
}

5
mh-system/src/main/java/com/mh/system/mapper/device/SparePartsManageMapper.java

@ -16,8 +16,9 @@ import org.apache.ibatis.annotations.Update;
@Mapper
public interface SparePartsManageMapper extends BaseMapper<SparePartsManage> {
@Update("update spare_parts_manage set inventory_levels = #{inventoryLevels} where id = #{sparePartsId}")
@Update("update spare_parts_manage set inventory_levels = #{inventoryLevels}, update_time = current_timestamp, update_by = #{updateBy} where id = #{sparePartsId}")
void updateInventoryLevels(@Param("sparePartsId") String sparePartsId,
@Param("inventoryLevels") int inventoryLevels);
@Param("inventoryLevels") int inventoryLevels,
@Param("updateBy") String updateBy);
}

5
mh-system/src/main/java/com/mh/system/service/device/IMaintainInfoService.java

@ -1,6 +1,7 @@
package com.mh.system.service.device;
import com.mh.common.core.domain.entity.MaintainInfo;
import com.mh.common.core.domain.entity.MaintainSum;
import java.util.List;
@ -21,4 +22,8 @@ public interface IMaintainInfoService {
int updateMaintainInfo(MaintainInfo maintainInfo);
int deleteMaintainInfoByIds(String[] maintainIds);
MaintainSum queryMaintainSum(String buildingId, String curDate);
void createMaintainTask(String curDate);
}

22
mh-system/src/main/java/com/mh/system/service/device/impl/DeviceInOutManageServiceImpl.java

@ -11,6 +11,8 @@ import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.List;
/**
@ -38,15 +40,25 @@ public class DeviceInOutManageServiceImpl implements IDeviceInOutManageService {
if (!StringUtils.isEmpty(deviceInOutManage.getSparePartsId())) {
queryWrapper.eq("spare_parts_id", deviceInOutManage.getSparePartsId());
}
if (!StringUtils.isEmpty(deviceInOutManage.getSparePartsName())) {
queryWrapper.like("spare_parts_name", deviceInOutManage.getSparePartsName());
if (!StringUtils.isEmpty(deviceInOutManage.getSpareName())) {
queryWrapper.like("spare_name", deviceInOutManage.getSpareName());
}
if (deviceInOutManage.getOperaType() != null) {
queryWrapper.eq("opera_type", deviceInOutManage.getOperaType());
}
// 出入库时间范围
// 添加时间范围
if (!deviceInOutManage.getParams().isEmpty()) {
queryWrapper.between("create_time", deviceInOutManage.getParams().get("beginTime"), deviceInOutManage.getParams().get("endTime"));
String beginTimeStr = (String) deviceInOutManage.getParams().get("beginTime");
String endTimeStr = (String) deviceInOutManage.getParams().get("endTime");
if (StringUtils.isNotEmpty(beginTimeStr) && StringUtils.isNotEmpty(endTimeStr)) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate beginTime = LocalDate.parse(beginTimeStr, formatter);
LocalDate endTime = LocalDate.parse(endTimeStr, formatter);
queryWrapper.between("create_time", java.sql.Date.valueOf(beginTime), java.sql.Date.valueOf(endTime));
}
}
queryWrapper.orderByDesc("create_time");
return deviceInOutManageMapper.selectList(queryWrapper);
@ -71,10 +83,10 @@ public class DeviceInOutManageServiceImpl implements IDeviceInOutManageService {
int intOutNum = deviceInOutManage.getIntOutNum();
if (deviceInOutManage.getOperaType() == 0) {
inventoryLevels = inventoryLevels + intOutNum;
sparePartsManageMapper.updateInventoryLevels(deviceInOutManage.getSparePartsId(), inventoryLevels);
sparePartsManageMapper.updateInventoryLevels(deviceInOutManage.getSparePartsId(), inventoryLevels, deviceInOutManage.getCreateBy());
} else if (deviceInOutManage.getOperaType() == 1) {
inventoryLevels = inventoryLevels - intOutNum;
sparePartsManageMapper.updateInventoryLevels(deviceInOutManage.getSparePartsId(), -intOutNum);
sparePartsManageMapper.updateInventoryLevels(deviceInOutManage.getSparePartsId(), -intOutNum, deviceInOutManage.getCreateBy());
}
deviceInOutManage.setInventoryLevels(inventoryLevels);
return deviceInOutManageMapper.insert(deviceInOutManage);

11
mh-system/src/main/java/com/mh/system/service/device/impl/MaintainInfoServiceImpl.java

@ -2,6 +2,7 @@ package com.mh.system.service.device.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mh.common.core.domain.entity.MaintainInfo;
import com.mh.common.core.domain.entity.MaintainSum;
import com.mh.common.utils.StringUtils;
import com.mh.system.mapper.device.MaintainInfoMapper;
import com.mh.system.service.device.IMaintainInfoService;
@ -70,4 +71,14 @@ public class MaintainInfoServiceImpl implements IMaintainInfoService {
}
return 0;
}
@Override
public MaintainSum queryMaintainSum(String buildingId, String curDate) {
return maintainInfoMapper.queryMaintainSum(buildingId, curDate);
}
@Override
public void createMaintainTask(String curDate) {
maintainInfoMapper.proMaintainSum(curDate);
}
}

2
sql/创建冷水机组参数表存储过程.sql

@ -1,4 +1,4 @@
CREATE OR REPLACE FUNCTION pro_create_chillers_table()
CREATE OR REPLACE PROCEDURE pro_create_chillers_table()
RETURNS VOID AS $$
DECLARE
year VARCHAR(4);

144
sql/创建维保统计存储过程.sql

@ -0,0 +1,144 @@
CREATE OR REPLACE PROCEDURE pro_maintain_sum(p_cur_date varchar(50))
LANGUAGE plpgsql
AS $$
DECLARE
v_cur_date date := to_date(p_cur_date, 'YYYY-MM-DD');
v_last_date date := v_cur_date - interval '1 day';
v_last_week_start date := v_cur_date - interval '14 days';
v_last_week_end date := v_cur_date - interval '8 days';
v_last_month date := v_cur_date - interval '1 month';
v_last_year date := v_cur_date - interval '1 year';
day_num int;
week_num int;
month_num int;
year_num int;
last_day_num int;
last_week_num int;
last_month_num int;
last_year_num int;
day_p varchar(50);
week_p varchar(50);
month_p varchar(50);
year_p varchar(50);
all_day_num int;
all_week_num int;
all_month_num int;
all_year_num int;
all_last_day_num int;
all_last_week_num int;
all_last_month_num int;
all_last_year_num int;
v_building_id varchar(50); -- 楼栋编号(添加前缀避免冲突)
BEGIN
-- 处理各楼栋数据
FOR v_building_id IN SELECT DISTINCT id FROM building LOOP
-- 历史数据查询
SELECT COUNT(*) INTO last_day_num
FROM maintain_info
WHERE building_id = building_id
AND cur_date::date = v_last_date;
SELECT COUNT(*) INTO last_week_num
FROM maintain_info
WHERE building_id = building_id
AND cur_date::date BETWEEN v_last_week_start AND v_last_week_end;
SELECT COUNT(*) INTO last_month_num
FROM maintain_info
WHERE building_id = building_id
AND date_trunc('month', cur_date) = date_trunc('month', v_last_month);
SELECT COUNT(*) INTO last_year_num
FROM maintain_info
WHERE building_id = building_id
AND date_trunc('year', cur_date) = date_trunc('year', v_last_year);
-- 当前数据查询
SELECT COUNT(*) INTO day_num
FROM maintain_info
WHERE building_id = building_id
AND cur_date::date = v_cur_date;
SELECT COUNT(*) INTO week_num
FROM maintain_info
WHERE building_id = building_id
AND cur_date::date BETWEEN (v_cur_date - interval '6 days') AND v_cur_date;
SELECT COUNT(*) INTO month_num
FROM maintain_info
WHERE building_id = building_id
AND date_trunc('month', cur_date) = date_trunc('month', v_cur_date);
SELECT COUNT(*) INTO year_num
FROM maintain_info
WHERE building_id = building_id
AND date_trunc('year', cur_date) = date_trunc('year', v_cur_date);
-- 计算百分比
day_p := calc_percentage(day_num, last_day_num);
week_p := calc_percentage(week_num, last_week_num);
month_p := calc_percentage(month_num, last_month_num);
year_p := calc_percentage(year_num, last_year_num);
-- 插入或更新(使用UPSERT)
INSERT INTO maintain_sum AS ms
(cur_date, building_id, day_num, day_p, week_num, week_p, month_num, month_p, year_num, year_p)
VALUES (v_cur_date, building_id, day_num, day_p, week_num, week_p, month_num, month_p, year_num, year_p)
ON CONFLICT (cur_date, building_id) DO UPDATE SET
day_num = EXCLUDED.day_num,
day_p = EXCLUDED.day_p,
week_num = EXCLUDED.week_num,
week_p = EXCLUDED.week_p,
month_num = EXCLUDED.month_num,
month_p = EXCLUDED.month_p,
year_num = EXCLUDED.year_num,
year_p = EXCLUDED.year_p;
END LOOP;
-- 处理所有楼栋汇总数据
SELECT COUNT(*) INTO all_last_day_num FROM maintain_info WHERE cur_date::date = v_last_date;
SELECT COUNT(*) INTO all_last_week_num FROM maintain_info WHERE cur_date::date BETWEEN v_last_week_start AND v_last_week_end;
SELECT COUNT(*) INTO all_last_month_num FROM maintain_info WHERE date_trunc('month', cur_date) = date_trunc('month', v_last_month);
SELECT COUNT(*) INTO all_last_year_num FROM maintain_info WHERE date_trunc('year', cur_date) = date_trunc('year', v_last_year);
SELECT COUNT(*) INTO all_day_num FROM maintain_info WHERE cur_date::date = v_cur_date;
SELECT COUNT(*) INTO all_week_num FROM maintain_info WHERE cur_date::date BETWEEN (v_cur_date - interval '6 days') AND v_cur_date;
SELECT COUNT(*) INTO all_month_num FROM maintain_info WHERE date_trunc('month', cur_date) = date_trunc('month', v_cur_date);
SELECT COUNT(*) INTO all_year_num FROM maintain_info WHERE date_trunc('year', cur_date) = date_trunc('year', v_cur_date);
-- 计算百分比(可复用函数)
day_p := calc_percentage(all_day_num, all_last_day_num);
week_p := calc_percentage(all_week_num, all_last_week_num);
month_p := calc_percentage(all_month_num, all_last_month_num);
year_p := calc_percentage(all_year_num, all_last_year_num);
-- 使用UPSERT处理汇总数据
INSERT INTO maintain_sum AS ms
(cur_date, building_id, day_num, day_p, week_num, week_p, month_num, month_p, year_num, year_p)
VALUES (v_cur_date, '所有', all_day_num, day_p, all_week_num, week_p, all_month_num, month_p, all_year_num, year_p)
ON CONFLICT (cur_date, building_id) DO UPDATE SET
day_num = EXCLUDED.day_num,
day_p = EXCLUDED.day_p,
week_num = EXCLUDED.week_num,
week_p = EXCLUDED.week_p,
month_num = EXCLUDED.month_num,
month_p = EXCLUDED.month_p,
year_num = EXCLUDED.year_num,
year_p = EXCLUDED.year_p;
END;
$$;
-- 创建百分比计算函数
CREATE OR REPLACE FUNCTION calc_percentage(current_val int, last_val int)
RETURNS varchar(50) AS $$
BEGIN
RETURN CASE
WHEN last_val > 0 THEN
ROUND(((current_val - last_val)::numeric / last_val * 100)::numeric, 2) || '%'
ELSE '0%'
END;
END;
$$ LANGUAGE plpgsql;

2
sql/创建计量设备表存储过程.sql

@ -1,4 +1,4 @@
CREATE OR REPLACE FUNCTION pro_create_table()
CREATE OR REPLACE PROCEDURE pro_create_table()
RETURNS VOID AS $$
DECLARE
year VARCHAR(4);

34
sql/维保信息统计表.sql

@ -0,0 +1,34 @@
-- 创建表
CREATE TABLE maintain_sum (
id varchar(36) not null PRIMARY KEY,
building_id varchar(50),
cur_date varchar(50),
day_num int,
day_p varchar(50),
week_num int,
week_p varchar(50),
month_num int,
month_p varchar(50),
year_num int,
year_p varchar(50)
);
-- 添加表注释(可选,原脚本未提供表注释)
COMMENT ON TABLE maintain_sum IS '维护汇总表';
-- 添加列注释
COMMENT ON COLUMN maintain_sum.id IS '序号';
COMMENT ON COLUMN maintain_sum.building_id IS '楼栋编号';
COMMENT ON COLUMN maintain_sum.cur_date IS '日期';
COMMENT ON COLUMN maintain_sum.day_num IS '当日维修量';
COMMENT ON COLUMN maintain_sum.day_p IS '当日维修与昨日比';
COMMENT ON COLUMN maintain_sum.week_num IS '最近七天维修量';
COMMENT ON COLUMN maintain_sum.week_p IS '与上周比';
COMMENT ON COLUMN maintain_sum.month_num IS '月维修量';
COMMENT ON COLUMN maintain_sum.month_p IS '与上月比';
COMMENT ON COLUMN maintain_sum.year_num IS '年维修量';
COMMENT ON COLUMN maintain_sum.year_p IS '与上年比';
-- 创建唯一约束
ALTER TABLE maintain_sum ADD CONSTRAINT uniq_maintain_sum
UNIQUE (cur_date, building_id);
Loading…
Cancel
Save