diff --git a/src/main/java/com/zhgd/xmgl/device/ammeter/controller/AmmeterCallBackController.java b/src/main/java/com/zhgd/xmgl/device/ammeter/controller/AmmeterCallBackController.java index 6a5e75929..c4837d441 100644 --- a/src/main/java/com/zhgd/xmgl/device/ammeter/controller/AmmeterCallBackController.java +++ b/src/main/java/com/zhgd/xmgl/device/ammeter/controller/AmmeterCallBackController.java @@ -13,7 +13,6 @@ import com.zhgd.xmgl.modules.ammeter.entity.*; import com.zhgd.xmgl.modules.ammeter.mapper.AmmeterRecordDetailMapper; import com.zhgd.xmgl.modules.ammeter.mapper.AmmeterSupplierRecordMapper; import com.zhgd.xmgl.modules.ammeter.service.*; -import com.zhgd.xmgl.util.DateUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.slf4j.Logger; @@ -172,7 +171,8 @@ public class AmmeterCallBackController { .eq(AmmeterThreshold::getAmmeterNo, ammeterNo) .eq(AmmeterThreshold::getMonthNum, monthNum)); if (threshold != null && threshold.getThresholdValue() != null) { - Double currentDegreeCurrentMonth = ammeterRecordDetailMapper.queryUseDegreeOnCurrentMonth(ammeterRecordDetail); + AmmeterMonthRecord currentMonth = ammeterMonthRecordService.getCurrentMonthAmmeterMonthRecord(new Ammeter().setAmmeterNo(ammeterNo).setProjectSn(projectSn)); + Double currentDegreeCurrentMonth = currentMonth != null ? currentMonth.getUseDegree().doubleValue() : 0D; if (currentDegreeCurrentMonth != null && !currentDegreeCurrentMonth.equals(0D) && threshold.getThresholdValue().compareTo(new BigDecimal(currentDegreeCurrentMonth)) <= 0) { AmmeterAlarm meterAlarm = new AmmeterAlarm(); diff --git a/src/main/java/com/zhgd/xmgl/device/ammeter/task/AmmeterTask.java b/src/main/java/com/zhgd/xmgl/device/ammeter/task/AmmeterTask.java index e8c0930c4..0447ee9c1 100644 --- a/src/main/java/com/zhgd/xmgl/device/ammeter/task/AmmeterTask.java +++ b/src/main/java/com/zhgd/xmgl/device/ammeter/task/AmmeterTask.java @@ -33,9 +33,6 @@ public class AmmeterTask { @Autowired private IAmmeterMonthRecordService ammeterMonthRecordService; - /** - * 统计前一月的用电 - */ @Scheduled(cron = "0 0 2 * * ?") public void getMonthAmmeterTask() { try { @@ -47,7 +44,7 @@ public class AmmeterTask { } } } catch (Exception e) { - log.error("定时任务计算前一月的用电", e); + log.error("定时任务计算用电", e); } } } diff --git a/src/main/java/com/zhgd/xmgl/modules/ammeter/entity/Ammeter.java b/src/main/java/com/zhgd/xmgl/modules/ammeter/entity/Ammeter.java index e2b205d6c..534f05351 100644 --- a/src/main/java/com/zhgd/xmgl/modules/ammeter/entity/Ammeter.java +++ b/src/main/java/com/zhgd/xmgl/modules/ammeter/entity/Ammeter.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; +import lombok.experimental.Accessors; import org.jeecgframework.poi.excel.annotation.Excel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -19,10 +20,11 @@ import io.swagger.annotations.ApiModelProperty; */ @Data @TableName("ammeter") -@ApiModel(value="Ammeter实体类",description="Ammeter") +@ApiModel(value = "Ammeter实体类", description = "Ammeter") +@Accessors(chain = true) public class Ammeter implements Serializable { private static final long serialVersionUID = 1L; - + /**电表设备*/ @TableId(type = IdType.ASSIGN_ID) @ApiModelProperty(value="电表设备") diff --git a/src/main/java/com/zhgd/xmgl/modules/ammeter/mapper/AmmeterMonthRecordMapper.java b/src/main/java/com/zhgd/xmgl/modules/ammeter/mapper/AmmeterMonthRecordMapper.java index 4d5771fdf..93b326109 100644 --- a/src/main/java/com/zhgd/xmgl/modules/ammeter/mapper/AmmeterMonthRecordMapper.java +++ b/src/main/java/com/zhgd/xmgl/modules/ammeter/mapper/AmmeterMonthRecordMapper.java @@ -24,5 +24,4 @@ public interface AmmeterMonthRecordMapper extends BaseMapper Map selectCurrentAmmeterMontRecord(Map map); - Map selectAmmeterMonthRecordByMeterNo(@Param("ammeterNo") String ammeterNo); } diff --git a/src/main/java/com/zhgd/xmgl/modules/ammeter/mapper/AmmeterRecordDetailMapper.java b/src/main/java/com/zhgd/xmgl/modules/ammeter/mapper/AmmeterRecordDetailMapper.java index 4c5168ceb..786889179 100644 --- a/src/main/java/com/zhgd/xmgl/modules/ammeter/mapper/AmmeterRecordDetailMapper.java +++ b/src/main/java/com/zhgd/xmgl/modules/ammeter/mapper/AmmeterRecordDetailMapper.java @@ -53,13 +53,20 @@ public interface AmmeterRecordDetailMapper extends BaseMapper queryNewestRecord(Map map); + /** + * 列表查询电表当前读数 + * + * @param map + * @return + */ + List queryNewestRecordList(Map map); /** - * 查询用电量 + * 查询用电量(不是读数),算法:今日最大减去昨日最大 * * @param map * @return diff --git a/src/main/java/com/zhgd/xmgl/modules/ammeter/mapper/xml/AmmeterMonthRecordMapper.xml b/src/main/java/com/zhgd/xmgl/modules/ammeter/mapper/xml/AmmeterMonthRecordMapper.xml index 5ee386cd2..bec9482b7 100644 --- a/src/main/java/com/zhgd/xmgl/modules/ammeter/mapper/xml/AmmeterMonthRecordMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/ammeter/mapper/xml/AmmeterMonthRecordMapper.xml @@ -36,39 +36,4 @@ where month_time=DATE_FORMAT(DATE_ADD(NOW(),INTERVAL -1 MONTH), "%Y-%m") and ammeter_no=#{ammeterNo}) c ON a.ammeter_no=c.ammeter_no WHERE a.ammeter_no=#{waterMeterNo} and a.project_sn=#{projectSn} - diff --git a/src/main/java/com/zhgd/xmgl/modules/ammeter/mapper/xml/AmmeterRecordDetailMapper.xml b/src/main/java/com/zhgd/xmgl/modules/ammeter/mapper/xml/AmmeterRecordDetailMapper.xml index 28d075983..f4b8bbd9d 100644 --- a/src/main/java/com/zhgd/xmgl/modules/ammeter/mapper/xml/AmmeterRecordDetailMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/ammeter/mapper/xml/AmmeterRecordDetailMapper.xml @@ -105,7 +105,7 @@ WHERE a.ammeter_no = #{ammeterNo} - select * from ammeter b left join (select * @@ -113,6 +113,9 @@ where id in (select max(id) from ammeter_record_detail group by ammeter_no)) a ON (a.ammeter_no = b.ammeter_no and a.project_sn = b.project_sn) WHERE b.project_sn = #{projectSn} + + and b.ammeter_no = #{ammeterNo} + group by b.ammeter_no @@ -124,16 +127,16 @@ WHERE id IN ( SELECT max(id) FROM `ammeter_record_detail` - GROUP BY DATE_FORMAT(add_time, '%Y-%m-%d'))) t1 - INNER JOIN( + GROUP BY ammeter_no, DATE_FORMAT(add_time, '%Y-%m-%d'))) t1 + INNER JOIN ( SELECT * FROM ammeter_record_detail WHERE id IN ( - SELECT MIN(id) + SELECT max(id) FROM `ammeter_record_detail` - GROUP BY DATE_FORMAT(add_time, '%Y-%m-%d'))) t2 - ON datediff(t1.add_time, t2.add_time) = -1 and t1.ammeter_no = t2.ammeter_no and - t1.project_sn = t2.project_sn + GROUP BY ammeter_no, DATE_FORMAT(add_time, '%Y-%m-%d'))) t2 ON datediff(t1.add_time, t2.add_time) = - 1 + AND t1.ammeter_no = t2.ammeter_no + AND t1.project_sn = t2.project_sn where 1 = 1 and DATE_FORMAT(t2.add_time, '%Y-%m-%d') = #{day} @@ -144,5 +147,8 @@ and t2.project_sn = #{projectSn} + + and t2.add_time >= #{addTime_begin} + diff --git a/src/main/java/com/zhgd/xmgl/modules/ammeter/service/IAmmeterMonthRecordService.java b/src/main/java/com/zhgd/xmgl/modules/ammeter/service/IAmmeterMonthRecordService.java index a579b2921..fcdbfd043 100644 --- a/src/main/java/com/zhgd/xmgl/modules/ammeter/service/IAmmeterMonthRecordService.java +++ b/src/main/java/com/zhgd/xmgl/modules/ammeter/service/IAmmeterMonthRecordService.java @@ -21,4 +21,6 @@ public interface IAmmeterMonthRecordService extends IService Map selectAmmeterStatisticsListByYear(Map map); public void updateCurrentAmmeterMonthRecord(Ammeter ammeter); + + AmmeterMonthRecord getCurrentMonthAmmeterMonthRecord(Ammeter ammeter); } diff --git a/src/main/java/com/zhgd/xmgl/modules/ammeter/service/impl/AmmeterMonthRecordServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/ammeter/service/impl/AmmeterMonthRecordServiceImpl.java index 3f21d4586..b87cf95e3 100644 --- a/src/main/java/com/zhgd/xmgl/modules/ammeter/service/impl/AmmeterMonthRecordServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/ammeter/service/impl/AmmeterMonthRecordServiceImpl.java @@ -1,5 +1,6 @@ package com.zhgd.xmgl.modules.ammeter.service.impl; +import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.zhgd.jeecg.common.mybatis.EntityMap; @@ -45,14 +46,16 @@ public class AmmeterMonthRecordServiceImpl extends ServiceImpl data = new HashMap<>(); QueryWrapper queryWrapper = new QueryWrapper<>(); String ammeterNo = MapUtils.getString(map, "ammeterNo"); - queryWrapper.lambda().eq(Ammeter::getProjectSn, MapUtils.getString(map, "projectSn")) + String projectSn = MapUtils.getString(map, "projectSn"); + queryWrapper.lambda().eq(Ammeter::getProjectSn, projectSn) .eq(Ammeter::getAmmeterNo, ammeterNo); Ammeter ammeter = ammeterMapper.selectOne(queryWrapper); data.put("ammeter", ammeter); EntityMap count = ammeterMonthRecordMapper.getCurrentMonthMeterRecord(map); AmmeterRecordDetail ad = new AmmeterRecordDetail(); ad.setAmmeterNo(ammeterNo); - Double use = ammeterRecordDetailMapper.queryUseDegreeOnCurrentMonth(ad); + AmmeterMonthRecord currentMonth = getCurrentMonthAmmeterMonthRecord(new Ammeter().setAmmeterNo(ammeterNo).setProjectSn(projectSn)); + Double use = currentMonth != null ? currentMonth.getUseDegree().doubleValue() : 0D; Double thresholdValue = MapUtils.getDouble(count, "thresholdValue"); count.put("month_user_water", use); count.put("exceed_quota_num", use.compareTo(thresholdValue) > 0 ? use - thresholdValue : 0); @@ -144,26 +147,59 @@ public class AmmeterMonthRecordServiceImpl extends ServiceImpl data = ammeterMonthRecordMapper.selectAmmeterMonthRecordByMeterNo(ammeter.getAmmeterNo()); - AmmeterMonthRecord ammeterMonthRecord = new AmmeterMonthRecord(); - ammeterMonthRecord.setMonthTime(MapUtils.getString(data, "monthTime")); - ammeterMonthRecord.setProjectSn(ammeter.getProjectSn()); - ammeterMonthRecord.setAmmeterNo(ammeter.getAmmeterNo()); - ammeterMonthRecord.setUseDegree(new BigDecimal(MapUtils.getString(data, "useDegree"))); - ammeterMonthRecord.setStartDegree(new BigDecimal(MapUtils.getString(data, "startDegree"))); - ammeterMonthRecord.setEndDegree(new BigDecimal(MapUtils.getString(data, "endDegree"))); - QueryWrapper qw = new QueryWrapper<>(); - qw.lambda().eq(AmmeterMonthRecord::getProjectSn, ammeter.getProjectSn()) - .eq(AmmeterMonthRecord::getMonthTime, MapUtils.getString(data, "monthTime")) + //2023-11的end取最大,start取2023-10的end,use=end-start + HashMap m = new HashMap<>(); + m.put("projectSn", ammeter.getProjectSn()); + m.put("ammeterNo", ammeter.getAmmeterNo()); + List recordDetails = ammeterRecordDetailMapper.queryNewestRecordList(m); + AmmeterRecordDetail d = recordDetails.get(recordDetails.size() - 1); + if (d.getDegree() == null) { + return; + } + String monthTime = DateUtil.format(new Date(), "yyyy-MM"); + String lastMonthTime = DateUtil.format(DateUtil.offsetMonth(new Date(), -1), "yyyy-MM"); + QueryWrapper lastQw = new QueryWrapper<>(); + lastQw.lambda().eq(AmmeterMonthRecord::getProjectSn, ammeter.getProjectSn()) + .eq(AmmeterMonthRecord::getMonthTime, lastMonthTime) .eq(AmmeterMonthRecord::getAmmeterNo, ammeter.getAmmeterNo()); - AmmeterMonthRecord oldAmmeterMonthRecord = ammeterMonthRecordMapper.selectOne(qw); - if (oldAmmeterMonthRecord != null) { - ammeterMonthRecord.setId(oldAmmeterMonthRecord.getId()); - ammeterMonthRecordMapper.updateById(ammeterMonthRecord); + AmmeterMonthRecord lastRecord = ammeterMonthRecordMapper.selectOne(lastQw); + AmmeterMonthRecord old = getCurrentMonthAmmeterMonthRecord(ammeter); + if (old != null) { + old.setEndDegree(d.getDegree()); + old.setUseDegree(old.getEndDegree().subtract(old.getStartDegree())); + ammeterMonthRecordMapper.updateById(old); } else { - ammeterMonthRecord.setAddTime(new Date()); - ammeterMonthRecordMapper.insert(ammeterMonthRecord); + old = new AmmeterMonthRecord(); + old.setEndDegree(d.getDegree()); + old.setMonthTime(monthTime); + old.setProjectSn(ammeter.getProjectSn()); + old.setAmmeterNo(ammeter.getAmmeterNo()); + old.setStartDegree(lastRecord != null ? lastRecord.getEndDegree() : BigDecimal.ZERO); + old.setAddTime(new Date()); + old.setUseDegree(old.getEndDegree().subtract(old.getStartDegree())); + ammeterMonthRecordMapper.insert(old); } } + + /** + * 获取当月电表 + * + * @param ammeter + * @return + */ + public AmmeterMonthRecord getCurrentMonthAmmeterMonthRecord(Ammeter ammeter) { + String monthTime = DateUtil.format(new Date(), "yyyy-MM"); + QueryWrapper qw = new QueryWrapper<>(); + qw.lambda().eq(AmmeterMonthRecord::getProjectSn, ammeter.getProjectSn()) + .eq(AmmeterMonthRecord::getMonthTime, monthTime) + .eq(AmmeterMonthRecord::getAmmeterNo, ammeter.getAmmeterNo()); + return ammeterMonthRecordMapper.selectOne(qw); + } + } diff --git a/src/main/java/com/zhgd/xmgl/modules/ammeter/service/impl/AmmeterRecordDetailServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/ammeter/service/impl/AmmeterRecordDetailServiceImpl.java index 8003b866b..1c3f824fc 100644 --- a/src/main/java/com/zhgd/xmgl/modules/ammeter/service/impl/AmmeterRecordDetailServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/ammeter/service/impl/AmmeterRecordDetailServiceImpl.java @@ -85,7 +85,7 @@ public class AmmeterRecordDetailServiceImpl extends ServiceImpl queryNewestRecord(Map map) { - return baseMapper.queryNewestRecord(map); + return baseMapper.queryNewestRecordList(map); } @Override @@ -103,8 +103,8 @@ public class AmmeterRecordDetailServiceImpl extends ServiceImpl().eq(AmmeterRecordDetail::getAmmeterNo, ammeterNo).orderByDesc(AmmeterRecordDetail::getId).last("limit 1")); vo.setDegree(ard != null ? ard.getDegree().doubleValue() : 0.0); return vo; diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/ProjectWorkerTypeTotalVo.java b/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/ProjectWorkerTypeTotalVo.java index e57be6641..d41cb6f00 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/ProjectWorkerTypeTotalVo.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/ProjectWorkerTypeTotalVo.java @@ -1,5 +1,6 @@ package com.zhgd.xmgl.modules.worker.entity.vo; +import com.zhgd.xmgl.util.DateUtils; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/src/main/java/com/zhgd/xmgl/util/DateUtils.java b/src/main/java/com/zhgd/xmgl/util/DateUtils.java index 88e0ee662..e3e96bb61 100644 --- a/src/main/java/com/zhgd/xmgl/util/DateUtils.java +++ b/src/main/java/com/zhgd/xmgl/util/DateUtils.java @@ -548,14 +548,18 @@ public class DateUtils { } /** - * 偏移日期str + * 偏移日期str,传入2023-11-02返回2023-11-02,传入2023-11-02 00:00:00返回2023-11-02 00:00:00 * * @param dayStr * @param offset * @return */ public static String offsetDayStr(String dayStr, int offset) { - return DateUtil.formatDate(DateUtil.offsetDay(DateUtil.parseDate(dayStr), offset)); + if (dayStr.length() == 10) { + return DateUtil.formatDate(DateUtil.offsetDay(DateUtil.parse(dayStr), offset)); + } else { + return DateUtil.format(DateUtil.offsetDay(DateUtil.parse(dayStr), offset), "yyyy-MM-dd HH:mm:ss"); + } } /** @@ -593,6 +597,6 @@ public class DateUtils { } public static void main(String[] args) { - System.out.println(getDateStrList(93, "yyyy-MM")); + System.out.println("2023-11-02".length()); } }