水表bug修复

This commit is contained in:
Administrator 2023-06-29 09:42:21 +08:00
parent 0f6b12cde2
commit a053a1c928
2 changed files with 102 additions and 72 deletions

View File

@ -1,7 +1,6 @@
package com.zhgd.xmgl.device.water.task;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zhgd.jeecg.common.api.vo.Result;
import com.zhgd.xmgl.modules.water.entity.WaterMeter;
import com.zhgd.xmgl.modules.water.entity.WaterMeterMonthRecord;
import com.zhgd.xmgl.modules.water.mapper.WaterMeterMapper;
@ -11,7 +10,6 @@ import org.apache.commons.collections.MapUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
@ -38,33 +36,34 @@ public class WaterMeterTask {
* 统计前一月的用水
*/
@Scheduled(cron = "0 0 2 * * ?")
public void getMonthWaterMeterTask(){
public void getMonthWaterMeterTask() {
try {
QueryWrapper<WaterMeter> queryWrapper=new QueryWrapper<>();
List<WaterMeter> list=waterMeterMapper.selectList(queryWrapper);
if(list!=null&&list.size()>0){
for (WaterMeter waterMeter:list){
Map<String, Object> data=waterMeterMonthRecordMapper.selectWaterMeterMonthRecordByMeterNo(waterMeter.getWaterMeterNo());
WaterMeterMonthRecord waterMeterMonthRecord=new WaterMeterMonthRecord();
waterMeterMonthRecord.setMonthTime(MapUtils.getString(data,"monthTime"));
waterMeterMonthRecord.setProjectSn(waterMeter.getProjectSn());
waterMeterMonthRecord.setWaterMeterNo(waterMeter.getWaterMeterNo());
waterMeterMonthRecord.setWaterTonnage(new BigDecimal(MapUtils.getString(data,"useWater")));
waterMeterMonthRecord.setStartWaterVolume(new BigDecimal(MapUtils.getString(data,"startWaterVolume")));
waterMeterMonthRecord.setEndWaterVolume(new BigDecimal(MapUtils.getString(data,"endWaterVolume")));
QueryWrapper<WaterMeterMonthRecord> qw=new QueryWrapper<>();
qw.lambda().eq(WaterMeterMonthRecord::getProjectSn,waterMeter.getProjectSn())
.eq(WaterMeterMonthRecord::getMonthTime,MapUtils.getString(data,"monthTime"))
.eq(WaterMeterMonthRecord::getWaterMeterNo,waterMeter.getWaterMeterNo());
WaterMeterMonthRecord oldWaterMeterMonthRecord=waterMeterMonthRecordMapper.selectOne(qw);
if(oldWaterMeterMonthRecord!=null){
waterMeterMonthRecord.setId(oldWaterMeterMonthRecord.getId());
}else{
waterMeterMonthRecord.setAddTime(new Date());
waterMeterMonthRecordMapper.insert(waterMeterMonthRecord);
}
}
}
QueryWrapper<WaterMeter> queryWrapper = new QueryWrapper<>();
List<WaterMeter> list = waterMeterMapper.selectList(queryWrapper);
if (list != null && list.size() > 0) {
for (WaterMeter waterMeter : list) {
Map<String, Object> data = waterMeterMonthRecordMapper.selectWaterMeterMonthRecordByMeterNo(waterMeter.getWaterMeterNo());
WaterMeterMonthRecord waterMeterMonthRecord = new WaterMeterMonthRecord();
waterMeterMonthRecord.setMonthTime(MapUtils.getString(data, "monthTime"));
waterMeterMonthRecord.setProjectSn(waterMeter.getProjectSn());
waterMeterMonthRecord.setWaterMeterNo(waterMeter.getWaterMeterNo());
waterMeterMonthRecord.setWaterTonnage(new BigDecimal(MapUtils.getString(data, "useWater")));
waterMeterMonthRecord.setStartWaterVolume(new BigDecimal(MapUtils.getString(data, "startWaterVolume")));
waterMeterMonthRecord.setEndWaterVolume(new BigDecimal(MapUtils.getString(data, "endWaterVolume")));
QueryWrapper<WaterMeterMonthRecord> qw = new QueryWrapper<>();
qw.lambda().eq(WaterMeterMonthRecord::getProjectSn, waterMeter.getProjectSn())
.eq(WaterMeterMonthRecord::getMonthTime, MapUtils.getString(data, "monthTime"))
.eq(WaterMeterMonthRecord::getWaterMeterNo, waterMeter.getWaterMeterNo());
WaterMeterMonthRecord oldWaterMeterMonthRecord = waterMeterMonthRecordMapper.selectOne(qw);
if (oldWaterMeterMonthRecord != null) {
waterMeterMonthRecord.setId(oldWaterMeterMonthRecord.getId());
waterMeterMonthRecordMapper.updateById(waterMeterMonthRecord);
} else {
waterMeterMonthRecord.setAddTime(new Date());
waterMeterMonthRecordMapper.insert(waterMeterMonthRecord);
}
}
}
} catch (Exception e) {
log.error("定时任务计算前一月的用水", e);
}

View File

@ -1,60 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhgd.xmgl.modules.water.mapper.WaterMeterMonthRecordMapper">
<select id="getCurrentMonthMeterRecord" resultType="com.zhgd.jeecg.common.mybatis.EntityMap">
SELECT a.water_meter_no,IFNULL(b.water_tonnage,0) current_water_tonnage,IFNULL(b.water_tonnage,0)-IFNULL(c.end_water_volume,0) month_user_water,
(CASE WHEN (IFNULL(b.water_tonnage,0)-IFNULL(c.end_water_volume,0))>IFNULL(d.threshold_value,0)
THEN IFNULL(b.water_tonnage,0)-IFNULL(c.end_water_volume,0)-IFNULL(d.threshold_value,0) ELSE 0 END) exceed_quota_num,
IFNULL(d.threshold_value,0) threshold_value,IFNULL(e.alarm_num,0) alarm_num
from water_meter a LEFT JOIN
(SELECT water_meter_no,project_sn,water_tonnage from water_meter_record_detail
WHERE water_meter_no=#{waterMeterNo} ORDER BY add_time DESC LIMIT 1) b ON a.water_meter_no=b.water_meter_no
LEFT JOIN (SELECT end_water_volume,water_meter_no FROM water_meter_month_record
where month_time=DATE_FORMAT(DATE_ADD(NOW(),INTERVAL -1 MONTH), "%Y-%m") and water_meter_no=#{waterMeterNo}) c ON a.water_meter_no=c.water_meter_no
LEFT JOIN (SELECT water_meter_no,threshold_value FROM water_meter_threshold
WHERE month_num=DATE_FORMAT(now(), "%c") and water_meter_no=#{waterMeterNo}) d ON a.water_meter_no=d.water_meter_no
LEFT JOIN (SELECT water_meter_no,COUNT(1) alarm_num FROM water_meter_alarm
WHERE DATE_FORMAT(alarm_time, "%Y-%m")=DATE_FORMAT(NOW(), "%Y-%m") and water_meter_no=#{waterMeterNo}) e ON a.water_meter_no=e.water_meter_no
WHERE a.water_meter_no=#{waterMeterNo} and a.project_sn=#{projectSn}
</select>
<select id="selectWaterMeterMonthList" resultType="java.util.Map" parameterType="java.util.Map">
SELECT month_time monthTime, water_tonnage waterTonnage
FROM water_meter_month_record
WHERE water_meter_no=#{waterMeterNo} and project_sn=#{projectSn}
AND DATE_FORMAT(CONCAT(month_time,'-01'),'%Y')=#{yearTime}
ORDER BY month_time
</select>
<select id="selectCurrentWaterMeterMontRecord" resultType="java.util.Map" parameterType="java.util.Map">
SELECT DATE_FORMAT(NOW(), "%Y-%m") monthTime,IFNULL(b.water_tonnage,0)-IFNULL(c.end_water_volume,0) waterTonnage
from water_meter a LEFT JOIN
(SELECT water_meter_no,project_sn,water_tonnage from water_meter_record_detail
WHERE water_meter_no=#{waterMeterNo} ORDER BY add_time DESC LIMIT 1) b ON a.water_meter_no=b.water_meter_no
LEFT JOIN (SELECT end_water_volume,water_meter_no FROM water_meter_month_record
where month_time=DATE_FORMAT(DATE_ADD(NOW(),INTERVAL -1 MONTH), "%Y-%m") and water_meter_no=#{waterMeterNo}) c ON a.water_meter_no=c.water_meter_no
WHERE a.water_meter_no=#{waterMeterNo} and a.project_sn=#{projectSn}
</select>
<select id="selectWaterMeterMonthRecordByMeterNo" resultType="java.util.Map">
SELECT a.water_meter_no waterMeterNo,
IFNULL(b.water_tonnage, 0) endWaterVolume,
IFNULL(b.water_tonnage, 0) - IFNULL(c.end_water_volume, 0) useWater,
DATE_FORMAT(NOW(), "%Y-%m") monthTime,
a.project_sn projectSn,
IFNULL(c.end_water_volume, 0) startWaterVolume
SELECT a.water_meter_no,
IFNULL(b.water_tonnage, 0) current_water_tonnage,
IFNULL(b.water_tonnage, 0) - IFNULL(c.end_water_volume, 0) month_user_water,
(CASE
WHEN (IFNULL(b.water_tonnage, 0) - IFNULL(c.end_water_volume, 0)) > IFNULL(d.threshold_value, 0)
THEN IFNULL(b.water_tonnage, 0) - IFNULL(c.end_water_volume, 0) - IFNULL(d.threshold_value, 0)
ELSE 0 END) exceed_quota_num,
IFNULL(d.threshold_value, 0) threshold_value,
IFNULL(e.alarm_num, 0) alarm_num
from water_meter a
LEFT JOIN
(SELECT water_meter_no, project_sn, water_tonnage
from water_meter_record_detail
WHERE water_meter_no = #{waterMeterNo}
AND DATE_FORMAT(add_time, "%Y-%m") = DATE_FORMAT(NOW(), "%Y-%m")
ORDER BY add_time desc LIMIT 1) b ON a.water_meter_no = b.water_meter_no
ORDER BY add_time DESC
LIMIT 1) b ON a.water_meter_no = b.water_meter_no
LEFT JOIN (SELECT end_water_volume, water_meter_no
FROM water_meter_month_record
where month_time = DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -1 MONTH), "%Y-%m")
and water_meter_no = #{waterMeterNo}) c ON a.water_meter_no = c.water_meter_no
LEFT JOIN (SELECT water_meter_no, threshold_value
FROM water_meter_threshold
WHERE month_num = DATE_FORMAT(now(), "%c")
and water_meter_no = #{waterMeterNo}) d ON a.water_meter_no = d.water_meter_no
LEFT JOIN (SELECT water_meter_no, COUNT(1) alarm_num
FROM water_meter_alarm
WHERE DATE_FORMAT(alarm_time, "%Y-%m") = DATE_FORMAT(NOW(), "%Y-%m")
and water_meter_no = #{waterMeterNo}) e ON a.water_meter_no = e.water_meter_no
WHERE a.water_meter_no = #{waterMeterNo}
and a.project_sn = #{projectSn}
</select>
<select id="selectWaterMeterMonthList" resultType="java.util.Map" parameterType="java.util.Map">
SELECT month_time monthTime, water_tonnage waterTonnage
FROM water_meter_month_record
WHERE water_meter_no = #{waterMeterNo}
and project_sn = #{projectSn}
AND DATE_FORMAT(CONCAT(month_time, '-01'), '%Y') = #{yearTime}
ORDER BY month_time
</select>
<select id="selectCurrentWaterMeterMontRecord" resultType="java.util.Map" parameterType="java.util.Map">
SELECT DATE_FORMAT(NOW(), "%Y-%m") monthTime,
IFNULL(b.water_tonnage, 0) - IFNULL(c.end_water_volume, 0) waterTonnage
from water_meter a
LEFT JOIN
(SELECT water_meter_no, project_sn, water_tonnage
from water_meter_record_detail
WHERE water_meter_no = #{waterMeterNo}
ORDER BY add_time DESC
LIMIT 1) b ON a.water_meter_no = b.water_meter_no
LEFT JOIN (SELECT end_water_volume, water_meter_no
FROM water_meter_month_record
where month_time = DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -1 MONTH), "%Y-%m")
and water_meter_no = #{waterMeterNo}) c ON a.water_meter_no = c.water_meter_no
WHERE a.water_meter_no = #{waterMeterNo}
and a.project_sn = #{projectSn}
</select>
<select id="selectWaterMeterMonthRecordByMeterNo" resultType="java.util.Map">
SELECT a.water_meter_no waterMeterNo,
a.project_sn projectSn,
DATE_FORMAT(NOW(), "%Y-%m") monthTime,
IFNULL(c.water_tonnage, 0) startWaterVolume,
IFNULL(b.water_tonnage, IFNULL(c.water_tonnage, 0)) endWaterVolume,
IFNULL(b.water_tonnage, IFNULL(c.water_tonnage, 0)) - IFNULL(c.water_tonnage, 0) useWater
FROM water_meter a
LEFT JOIN (
SELECT water_meter_no,
project_sn,
water_tonnage
FROM water_meter_record_detail
WHERE water_meter_no = #{waterMeterNo}
AND DATE_FORMAT(add_time, "%Y-%m") = DATE_FORMAT(NOW(), "%Y-%m")
ORDER BY add_time DESC
LIMIT 1
) b ON a.water_meter_no = b.water_meter_no
LEFT JOIN (
SELECT water_meter_no,
project_sn,
water_tonnage
FROM water_meter_record_detail
WHERE water_meter_no = #{waterMeterNo}
AND DATE_FORMAT(add_time, "%Y-%m") = DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -1 MONTH), "%Y-%m")
ORDER BY add_time DESC
LIMIT 1
) c ON a.water_meter_no = c.water_meter_no
WHERE a.water_meter_no = #{waterMeterNo}
</select>
</mapper>