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

View File

@ -1,60 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?> <?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"> <!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"> <mapper namespace="com.zhgd.xmgl.modules.water.mapper.WaterMeterMonthRecordMapper">
<select id="getCurrentMonthMeterRecord" resultType="com.zhgd.jeecg.common.mybatis.EntityMap"> <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, SELECT a.water_meter_no,
(CASE WHEN (IFNULL(b.water_tonnage,0)-IFNULL(c.end_water_volume,0))>IFNULL(d.threshold_value,0) IFNULL(b.water_tonnage, 0) current_water_tonnage,
THEN IFNULL(b.water_tonnage,0)-IFNULL(c.end_water_volume,0)-IFNULL(d.threshold_value,0) ELSE 0 END) exceed_quota_num, IFNULL(b.water_tonnage, 0) - IFNULL(c.end_water_volume, 0) month_user_water,
IFNULL(d.threshold_value,0) threshold_value,IFNULL(e.alarm_num,0) alarm_num (CASE
from water_meter a LEFT JOIN WHEN (IFNULL(b.water_tonnage, 0) - IFNULL(c.end_water_volume, 0)) > IFNULL(d.threshold_value, 0)
(SELECT water_meter_no,project_sn,water_tonnage from water_meter_record_detail THEN IFNULL(b.water_tonnage, 0) - IFNULL(c.end_water_volume, 0) - IFNULL(d.threshold_value, 0)
WHERE water_meter_no=#{waterMeterNo} ORDER BY add_time DESC LIMIT 1) b ON a.water_meter_no=b.water_meter_no ELSE 0 END) exceed_quota_num,
LEFT JOIN (SELECT end_water_volume,water_meter_no FROM water_meter_month_record IFNULL(d.threshold_value, 0) threshold_value,
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 IFNULL(e.alarm_num, 0) alarm_num
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
from water_meter a from water_meter a
LEFT JOIN LEFT JOIN
(SELECT water_meter_no, project_sn, water_tonnage (SELECT water_meter_no, project_sn, water_tonnage
from water_meter_record_detail from water_meter_record_detail
WHERE water_meter_no = #{waterMeterNo} WHERE water_meter_no = #{waterMeterNo}
AND DATE_FORMAT(add_time, "%Y-%m") = DATE_FORMAT(NOW(), "%Y-%m") ORDER BY add_time DESC
ORDER BY add_time desc LIMIT 1) b ON a.water_meter_no = b.water_meter_no 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 LEFT JOIN (SELECT end_water_volume, water_meter_no
FROM water_meter_month_record FROM water_meter_month_record
where month_time = DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -1 MONTH), "%Y-%m") 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 and water_meter_no = #{waterMeterNo}) c ON a.water_meter_no = c.water_meter_no
WHERE a.water_meter_no = #{waterMeterNo} 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> </select>
</mapper> </mapper>