package com.dy.pipIrrStatistics.intake; import com.dy.common.util.DateTime; import com.dy.common.webUtil.QueryResultVo; import com.dy.pipIrrGlobal.daoRm.*; import com.dy.pipIrrGlobal.voSt.*; import com.dy.pipIrrStatistics.intake.qo.*; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.common.utils.PojoUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.text.DecimalFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.util.*; /** * @author ZhuBaoMin * @date 2024-08-01 13:58 * @LastEditTime 2024-08-01 13:58 * @Description */ @Slf4j @Service public class IntakeSv { @Autowired private RmOnHourReportHistoryMapper rmOnHourReportHistoryMapper; @Autowired private RmOpenCloseValveHistoryMapper rmOpenCloseValveHistoryMapper; @Autowired private RmOnHourReportLastMapper rmOnHourReportLastMapper; @Autowired private RmOpenCloseValveLastMapper rmOpenCloseValveLastMapper; @Autowired private RmIntakeAmountDayMapper rmIntakeAmountDayMapper; @Autowired private RmLossDayLastMapper rmLossDayLastMapper; @Value("${rtu.batteryVolt}") private Double batteryVolt; @Value("${rtu.signalIntensity.weak}") private Integer weak; @Value("${rtu.signalIntensity.ordinary}") private Integer ordinary; /** * 获取指定时间段内未上线的取水口 * @param qo * @return */ public QueryResultVo> getNotOnlineIntakes(CommonQO qo) { DecimalFormat df = new DecimalFormat("0.00"); /** * 补齐起止时间,如果开始时间为空,则默认为当前日期 */ String timeStart = qo.getTimeStart(); String timeStop = qo.getTimeStop(); if(timeStop != null) { timeStop = timeStop + " 23:59:59"; if(timeStart != null) { timeStart = timeStart + " 00:00:00"; }else { timeStart = LocalDate.now() + " 00:00:00"; } }else { timeStart = null; } qo.setTimeStart(timeStart); qo.setTimeStop(timeStop); // 生成查询参数 Map params = (Map) PojoUtils.generalize(qo) ; // 获取符合条件的记录数 Long itemTotal = Optional.ofNullable(rmOnHourReportHistoryMapper.getNotOnlineIntakesCount(params)).orElse(0L); QueryResultVo> rsVo = new QueryResultVo<>() ; rsVo.pageSize = qo.pageSize ; rsVo.pageCurr = qo.pageCurr ; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = rmOnHourReportHistoryMapper.getNotOnlineIntakes(params); return rsVo ; } /** ok 1 * 获取累计流量超过指定值的取水口 * @param qo * @return */ public QueryResultVo> getLargeFlowIntakes(CumulativeFlowQO qo) { // 生成查询参数 Map params = (Map) PojoUtils.generalize(qo) ; // 获取符合条件的记录数 Long itemTotal = Optional.ofNullable(rmOnHourReportLastMapper.getLargeFlowIntakesCount(params)).orElse(0L); QueryResultVo> rsVo = new QueryResultVo<>() ; rsVo.pageSize = qo.pageSize ; rsVo.pageCurr = qo.pageCurr ; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = rmOnHourReportLastMapper.getLargeFlowIntakes(params); return rsVo ; } /** ok 2 * 获取累计流量低于指定值的取水口 * @param qo * @return */ public QueryResultVo> getSmallFlowIntakes(CumulativeFlowQO qo) { // 生成查询参数 Map params = (Map) PojoUtils.generalize(qo) ; // 获取符合条件的记录数 Long itemTotal = Optional.ofNullable(rmOnHourReportLastMapper.getSmallFlowIntakesCount(params)).orElse(0L); QueryResultVo> rsVo = new QueryResultVo<>() ; rsVo.pageSize = qo.pageSize ; rsVo.pageCurr = qo.pageCurr ; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = rmOnHourReportLastMapper.getSmallFlowIntakes(params); return rsVo ; } /** * 获取欠压取水口 * @param qo * @return */ public QueryResultVo> getUnderVoltIntakes(BatteryVoltQO qo) { qo.setBatteryVolt(batteryVolt); // 生成查询参数 Map params = (Map) PojoUtils.generalize(qo) ; // 获取符合条件的记录数 Long itemTotal = Optional.ofNullable(rmOnHourReportLastMapper.getUnderVoltIntakesCount(params)).orElse(0L); QueryResultVo> rsVo = new QueryResultVo<>() ; rsVo.pageSize = qo.pageSize ; rsVo.pageCurr = qo.pageCurr ; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = rmOnHourReportLastMapper.getUnderVoltIntakes(params); return rsVo ; } /** * 获取指定信号强度的取水口 * @param qo * @return */ public QueryResultVo> getSpecifiedSignalIntakes(SignalIntensityQO qo) { qo.setWeak(weak); qo.setOrdinary(ordinary); // 生成查询参数 Map params = (Map) PojoUtils.generalize(qo) ; // 获取符合条件的记录数 Long itemTotal = Optional.ofNullable(rmOnHourReportLastMapper.getSpecifiedSignalIntakesCount(params)).orElse(0L); QueryResultVo> rsVo = new QueryResultVo<>() ; rsVo.pageSize = qo.pageSize ; rsVo.pageCurr = qo.pageCurr ; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = rmOnHourReportLastMapper.getSpecifiedSignalIntakes(params); return rsVo ; } /** * 获取从未开过阀的取水口 * @return */ public QueryResultVo> getNeverOpenValveIntakes(CommonQO qo) { String timeStart = qo.getTimeStart(); String timeStop = qo.getTimeStop(); if(timeStart != null && timeStart != "") { timeStart = timeStart + " 00:00:00"; } else { timeStart = LocalDate.now() + " 00:00:00"; } qo.setTimeStart(timeStart); if(timeStop != null && timeStop != "") { timeStop = timeStop + " 23:59:59"; }else { timeStop = LocalDate.now() + " 23:59:59"; } qo.setTimeStop(timeStop); // 生成查询参数 Map params = (Map) PojoUtils.generalize(qo) ; // 获取符合条件的记录数 Long itemTotal = Optional.ofNullable(rmOpenCloseValveHistoryMapper.getNeverOpenValveIntakesCount(params)).orElse(0L); QueryResultVo> rsVo = new QueryResultVo<>() ; rsVo.pageSize = qo.pageSize ; rsVo.pageCurr = qo.pageCurr ; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = rmOpenCloseValveHistoryMapper.getNeverOpenValveIntakes(params); return rsVo ; } /** * 获取指定时间段内开阀次数超过指定值的取水口 * @param qo * @return */ public QueryResultVo> getOpenValveGtIntakes(IntakeCountValueQO qo) { // 生成查询参数 Map params = (Map) PojoUtils.generalize(qo) ; // 获取符合条件的记录数 Long itemTotal = Optional.ofNullable(rmOpenCloseValveHistoryMapper.getOpenValveGtIntakesCount(params)).orElse(0L); QueryResultVo> rsVo = new QueryResultVo<>() ; rsVo.pageSize = qo.pageSize ; rsVo.pageCurr = qo.pageCurr ; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = rmOpenCloseValveHistoryMapper.getOpenValveGtIntakes(params); return rsVo ; } /** * 获取指定时间段内开阀次数低于指定值的取水口 * @param qo * @return */ public QueryResultVo> getOpenValveLtIntakes(IntakeCountValueQO qo) { // 生成查询参数 Map params = (Map) PojoUtils.generalize(qo); // 获取符合条件的记录数 Long itemTotal = Optional.ofNullable(rmOpenCloseValveHistoryMapper.getOpenValveLtIntakesCount(params)).orElse(0L); QueryResultVo> rsVo = new QueryResultVo<>() ; rsVo.pageSize = qo.pageSize ; rsVo.pageCurr = qo.pageCurr ; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = rmOpenCloseValveHistoryMapper.getOpenValveLtIntakes(params); return rsVo ; } /** * 根据开阀类型获取操作次数 * @param idStart * @param idEnd * @param openType * @return */ public List getCountByOpenType(Long idStart, Long idEnd, Integer openType) { // 生成查询参数 Map params = new HashMap<>() ; params.put("idStart", idStart); params.put("idEnd", idEnd); params.put("openType", openType); List list = rmOpenCloseValveLastMapper.getCountByOpenType(params) ; if(list != null){ for (VoCountOfOpenType vo : list) { if (vo.openType != null){ switch (vo.openType) { case 1: vo.openTypeName = "刷卡开阀"; break; case 3: vo.openTypeName = "中心站开阀"; break; case 8: vo.openTypeName = "用户远程开阀"; break; case 11: vo.openTypeName = "巡检卡开阀"; break; default: vo.openTypeName = "未知类型开阀"; } } } } return list ; } /** * 根据关阀类型获取操作次数 * @param idStart * @param idEnd * @param closeType * @return */ public List getCountByCloseType(Long idStart, Long idEnd, Integer closeType) { Map params = new HashMap<>() ; params.put("idStart", idStart); params.put("idEnd", idEnd); params.put("closeType", closeType); List list = rmOpenCloseValveLastMapper.getCountByCloseType(params) ; if(list != null) { for (VoCountOfCloseType vo : list) { if (vo.closeType != null) { switch (vo.closeType) { case 2: vo.closeTypeName = "刷卡关阀"; break; case 4: vo.closeTypeName = "中心站关阀"; break; case 5: vo.closeTypeName = "欠费关阀"; break; case 6: vo.closeTypeName = "流量计故障关阀"; break; case 7: vo.closeTypeName = "紧急关阀"; break; case 9: vo.closeTypeName = "用户远程关阀"; break; case 10: vo.closeTypeName = "巡检卡关阀"; break; case 12: vo.closeTypeName = "黑名单命令关阀"; break; case 13: vo.closeTypeName = "远程定时关阀"; break; case 14: vo.closeTypeName = "远程定量关阀"; break; default: vo.closeTypeName = "未知关阀类型"; } } } } return list ; } /** * 指定时间段内累积流量超过指定值的取水口 * @param qo * @return */ public QueryResultVo> getTotalFlowGtValueIntakes(IntakeAmountValueQO qo) { String timeStart = qo.getTimeStart(); String timeStop = qo.getTimeStop(); if(timeStart != null && timeStart != "") { timeStart = timeStart + " 00:00:00"; } else { timeStart = LocalDate.now() + " 00:00:00"; } qo.setTimeStart(timeStart); if(timeStop != null && timeStop != "") { timeStop = timeStop + " 23:59:59"; }else { timeStop = LocalDate.now() + " 23:59:59"; } qo.setTimeStop(timeStop); if (qo.getValue() == null){ qo.setValue(0.0); } Map params = (Map) PojoUtils.generalize(qo); Long itemTotal = rmOnHourReportHistoryMapper.getTotalFlowGtValueIntakesCount(params); QueryResultVo> rsVo = new QueryResultVo<>() ; rsVo.pageSize = qo.pageSize ; rsVo.pageCurr = qo.pageCurr ; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = rmOnHourReportHistoryMapper.getTotalFlowGtValueIntakes(params); return rsVo ; } /** ok 3 * 指定时间段内用水量超过指定值的取水口 * @param qo * @return */ public QueryResultVo> getUseWaterGtValueIntakes(IntakeAmountValueQO qo) { String timeStart = qo.getTimeStart(); String timeStop = qo.getTimeStop(); if(timeStart == null || timeStart.trim().equals("")) { timeStart = DateTime.yyyy_MM_dd() ; qo.setTimeStart(timeStart); } if(timeStop == null || timeStop.trim().equals("")) { timeStop = DateTime.yyyy_MM_dd() ; qo.setTimeStop(timeStop); } if (qo.getValue() == null){ qo.setValue(0.0); } Map params = (Map) PojoUtils.generalize(qo); Long itemTotal = rmIntakeAmountDayMapper.getUseWaterGtValueIntakesCount(params); QueryResultVo> rsVo = new QueryResultVo<>() ; rsVo.pageSize = qo.pageSize ; rsVo.pageCurr = qo.pageCurr ; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = rmIntakeAmountDayMapper.getUseWaterGtValueIntakes(params); return rsVo ; } /** ok 4 * 指定时间段内消费金额超过指定值的取水口 * @param qo * @return */ public QueryResultVo> getExpenseGtValueIntakes(IntakeAmountValueQO qo) { String timeStart = qo.getTimeStart(); String timeStop = qo.getTimeStop(); if(timeStart == null || timeStart.trim().equals("")) { timeStart = DateTime.yyyy_MM_dd() ; qo.setTimeStart(timeStart); } if(timeStop == null || timeStop.trim().equals("")) { timeStop = DateTime.yyyy_MM_dd() ; qo.setTimeStop(timeStop); } if (qo.getValue() == null){ qo.setValue(0.0); } Map params = (Map) PojoUtils.generalize(qo); Long itemTotal = rmIntakeAmountDayMapper.getExpenseGtValueIntakesCount(params); QueryResultVo> rsVo = new QueryResultVo<>() ; rsVo.pageSize = qo.pageSize ; rsVo.pageCurr = qo.pageCurr ; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = rmIntakeAmountDayMapper.getExpenseGtValueIntakes(params); return rsVo ; } /** ok 4 * 指定时间段内消费金额超过指定值的取水口 * @param qo * @return */ public QueryResultVo> getUseWaterTimesGtValueIntakes(IntakeCountValueQO qo) { String timeStart = qo.getTimeStart(); String timeStop = qo.getTimeStop(); if(timeStart == null || timeStart.trim().equals("")) { timeStart = DateTime.yyyy_MM_dd() ; qo.setTimeStart(timeStart); } if(timeStop == null || timeStop.trim().equals("")) { timeStop = DateTime.yyyy_MM_dd() ; qo.setTimeStop(timeStop); } if (qo.getValue() == null){ qo.setValue(0); } Map params = (Map) PojoUtils.generalize(qo); Long itemTotal = rmIntakeAmountDayMapper.getUseWaterTimesGtValueIntakesCount(params); QueryResultVo> rsVo = new QueryResultVo<>() ; rsVo.pageSize = qo.pageSize ; rsVo.pageCurr = qo.pageCurr ; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = rmIntakeAmountDayMapper.getUseWaterTimesGtValueIntakes(params); return rsVo ; } /** * 指定时间段内用水时长超过指定值的取水口 * @param qo * @return */ public QueryResultVo> getUseWaterDurationGtValueIntakes(IntakeCountValueQO qo) { String timeStart = qo.getTimeStart(); String timeStop = qo.getTimeStop(); if(timeStart != null && timeStart != "") { timeStart = timeStart + " 00:00:00"; } else { timeStart = LocalDate.now() + " 00:00:00"; } qo.setTimeStart(timeStart); if(timeStop != null && timeStop != "") { timeStop = timeStop + " 23:59:59"; }else { timeStop = LocalDate.now() + " 23:59:59"; } qo.setTimeStop(timeStop); Map params = (Map) PojoUtils.generalize(qo); Long itemTotal = rmOpenCloseValveHistoryMapper.getUseWaterDurationGtValueIntakesCount(params); QueryResultVo> rsVo = new QueryResultVo<>() ; rsVo.pageSize = qo.pageSize ; rsVo.pageCurr = qo.pageCurr ; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = rmOpenCloseValveHistoryMapper.getUseWaterDurationGtValueIntakes(params); return rsVo ; } /** * 指定时间段 有开阀 无关阀的取水口 * @param qo * @return */ public QueryResultVo> getHaveOpenNoCloseIntakes(IntakeCountValueQO qo) { Map params = (Map) PojoUtils.generalize(qo); Long itemTotal = rmOpenCloseValveHistoryMapper.getHaveOpenNoCloseIntakesCount(params); QueryResultVo> rsVo = new QueryResultVo<>() ; rsVo.pageSize = qo.pageSize ; rsVo.pageCurr = qo.pageCurr ; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = rmOpenCloseValveHistoryMapper.getHaveOpenNoCloseIntakes(params); return rsVo ; } /** * 指定时间段 无开阀 有关阀的取水口 * @param qo * @return */ public QueryResultVo> getNoOpenHaveCloseIntakes(IntakeCountValueQO qo) { Map params = (Map) PojoUtils.generalize(qo); Long itemTotal = rmOpenCloseValveHistoryMapper.getNoOpenHaveCloseIntakesCount(params); QueryResultVo> rsVo = new QueryResultVo<>() ; rsVo.pageSize = qo.pageSize ; rsVo.pageCurr = qo.pageCurr ; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = rmOpenCloseValveHistoryMapper.getNoOpenHaveCloseIntakes(params); return rsVo ; } /** * 统计指定月份各天用水量 * @param qo * @return */ public QueryResultVo> getDayIntakeAmount(IntakeAmountQO qo) throws ParseException { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); String yearMonth = qo.getYearMonth(); yearMonth = yearMonth + "-01"; yearMonth = dateFormat.format(dateFormat.parse(yearMonth)); Integer year = Integer.parseInt(yearMonth.substring(0,4)); Integer month = Integer.parseInt(yearMonth.substring(5,7)); qo.setYear(year); qo.setMonth(month); // 生成查询参数 Map params = (Map) PojoUtils.generalize(qo) ; // 获取符合条件的记录数 Long itemTotal = Optional.ofNullable(rmIntakeAmountDayMapper.getDayIntakeAmountCount(params)).orElse(0L); QueryResultVo> rsVo = new QueryResultVo<>() ; rsVo.pageSize = qo.pageSize ; rsVo.pageCurr = qo.pageCurr ; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = rmIntakeAmountDayMapper.getDayIntakeAmount(params); return rsVo ; } /** * 统计指定年份各月用水量 * @param qo * @return */ public QueryResultVo> getMonthIntakeAmount(IntakeAmountQO qo) { Calendar calendar = Calendar.getInstance(); Integer year = Optional.ofNullable(qo.getYear()).orElse(calendar.get(Calendar.YEAR)); qo.setYear(year); // 生成查询参数 Map params = (Map) PojoUtils.generalize(qo) ; // 获取符合条件的记录数 Long itemTotal = Optional.ofNullable(rmIntakeAmountDayMapper.getMonthIntakeAmountCount(params)).orElse(0L); QueryResultVo> rsVo = new QueryResultVo<>() ; rsVo.pageSize = qo.pageSize ; rsVo.pageCurr = qo.pageCurr ; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = rmIntakeAmountDayMapper.getMonthIntakeAmount(params); return rsVo ; } /** * 统计指定月份各天漏损量 * @param qo * @return */ public QueryResultVo> getDayLossAmount(IntakeAmountQO qo) throws ParseException { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); String yearMonth = qo.getYearMonth(); yearMonth = yearMonth + "-01"; yearMonth = dateFormat.format(dateFormat.parse(yearMonth)); Integer year = Integer.parseInt(yearMonth.substring(0,4)); Integer month = Integer.parseInt(yearMonth.substring(5,7)); qo.setYear(year); qo.setMonth(month); // 生成查询参数 Map params = (Map) PojoUtils.generalize(qo) ; // 获取符合条件的记录数 Long itemTotal = Optional.ofNullable(rmLossDayLastMapper.getDayLossAmountCount(params)).orElse(0L); QueryResultVo> rsVo = new QueryResultVo<>() ; rsVo.pageSize = qo.pageSize ; rsVo.pageCurr = qo.pageCurr ; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = rmLossDayLastMapper.getDayLossAmount(params); return rsVo ; } /** * 统计指定年份各月漏损量 * @param qo * @return */ public QueryResultVo> getMonthLossAmount(IntakeAmountQO qo) { Calendar calendar = Calendar.getInstance(); Integer year = Optional.ofNullable(qo.getYear()).orElse(calendar.get(Calendar.YEAR)); qo.setYear(year); // 生成查询参数 Map params = (Map) PojoUtils.generalize(qo) ; // 获取符合条件的记录数 Long itemTotal = Optional.ofNullable(rmLossDayLastMapper.getMonthLossAmountCount(params)).orElse(0L); QueryResultVo> rsVo = new QueryResultVo<>() ; rsVo.pageSize = qo.pageSize ; rsVo.pageCurr = qo.pageCurr ; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = rmLossDayLastMapper.getMonthLossAmount(params); return rsVo ; } /** * 最近未报数的取水口 * @param qo * @return */ public QueryResultVo> getUnReportedIntakes(CommonQO qo) { String timeStart = qo.getTimeStart(); String timeStop = qo.getTimeStop(); if(timeStart == "") { timeStart = null; } if(timeStop == "") { timeStop = null; } if(timeStart != null && timeStart != "") { timeStart = timeStart + " 00:00:00"; } qo.setTimeStart(timeStart); if(timeStop != null && timeStop != "") { timeStop = timeStop + " 23:59:59"; } qo.setTimeStop(timeStop); Map params = (Map) PojoUtils.generalize(qo); Long itemTotal = rmOnHourReportLastMapper.getUnReportedIntakesCount(params); QueryResultVo> rsVo = new QueryResultVo<>() ; rsVo.pageSize = qo.pageSize ; rsVo.pageCurr = qo.pageCurr ; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = rmOnHourReportLastMapper.getUnReportedIntakes(params); return rsVo ; } }