package com.dy.pipIrrStatistics.intake; import com.dy.common.aop.SsoAop; import com.dy.common.util.DateTime; import com.dy.common.util.IDLongGenerator; import com.dy.common.webUtil.BaseResponse; import com.dy.common.webUtil.BaseResponseUtils; import com.dy.common.webUtil.QueryResultVo; import com.dy.pipIrrGlobal.voSt.*; import com.dy.pipIrrStatistics.intake.qo.*; import com.dy.pipIrrStatistics.result.StatisticlResultCode; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.util.Date; import java.util.List; import java.util.Objects; /** * @author ZhuBaoMin * @date 2024-08-01 13:57 * @LastEditTime 2024-08-01 13:57 * @Description */ @Slf4j @RestController @RequestMapping(path="statistics") @RequiredArgsConstructor public class IntkeCtrl { private final IntakeSv intakeSv; /** ok 111 * 获取指定时间段内未上线的取水口 * @param qo * @return */ @GetMapping(path = "/getNotOnlineIntakes") @SsoAop() public BaseResponse>> getNotOnlineIntakes(@Valid CommonQO qo, BindingResult bindingResult) { if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } String timeStart = qo.getTimeStart(); String timeStop = qo.getTimeStop(); Long startId = null ; Long endId = null ; if(timeStart != null && !timeStart.trim().equals("")){ int[] ymdStart = DateTime.yyyy_MM_dd_2_ymdGroup(timeStart) ; startId = IDLongGenerator.generateOneDayStartId(ymdStart[0], ymdStart[1], ymdStart[2]) ; } if(timeStop != null && !timeStop.trim().equals("")){ int[] ymdEnd = DateTime.yyyy_MM_dd_2_ymdGroup(timeStop) ; endId = IDLongGenerator.generateOneDayStartId(ymdEnd[0], ymdEnd[1], ymdEnd[2]) ; } if(startId != null && endId != null){ if(endId < startId){ return BaseResponseUtils.buildErrorMsg("截止时间不能早于开始时间"); } } try { return BaseResponseUtils.buildSuccess(intakeSv.getNotOnlineIntakes(qo, startId, endId)); } catch (Exception e) { log.error("获取记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; } } /** ok 112 * 最近未报数的取水口 * @param * @return */ @GetMapping(path = "/getUnReportedIntakes") @SsoAop() public BaseResponse>> getUnReportedIntakes(@Valid CommonQO qo, BindingResult bindingResult) { if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } String timeStart = qo.getTimeStart(); if(timeStart != null && !timeStart.trim().equals("")) { qo.setTimeStart(timeStart + " 00:00:00") ; } try { QueryResultVo> res = intakeSv.getUnReportedIntakes(qo); return BaseResponseUtils.buildSuccess(res); } catch (Exception e) { log.error("获取记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; } } /** ok 1 * 获取累计流量超过指定值的取水口 * @param qo * @return */ @GetMapping(path = "/getLargeFlowIntakes") @SsoAop() public BaseResponse>> getLargeFlowIntakes(@Valid CumulativeFlowQO qo, BindingResult bindingResult) { if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } try { return BaseResponseUtils.buildSuccess(intakeSv.getLargeFlowIntakes(qo)); } catch (Exception e) { log.error("获取记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; } } /** ok 2 * 获取累计流量低于指定值的取水口 * @param qo * @return */ @GetMapping(path = "/getSmallFlowIntakes") @SsoAop() public BaseResponse>> getSmallFlowIntakes(@Valid CumulativeFlowQO qo, BindingResult bindingResult) { if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } try { return BaseResponseUtils.buildSuccess(intakeSv.getSmallFlowIntakes(qo)); } catch (Exception e) { log.error("获取记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; } } /** * 获取欠压取水口 * @param qo * @return */ @GetMapping(path = "/getUnderVoltIntakes") @SsoAop() public BaseResponse>> getUnderVoltIntakes(@Valid BatteryVoltQO qo, BindingResult bindingResult) { if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } try { return BaseResponseUtils.buildSuccess(intakeSv.getUnderVoltIntakes(qo)); } catch (Exception e) { log.error("获取记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; } } /** * 获取指定信号强度的取水口 * @param qo * @return */ @GetMapping(path = "/getSpecifiedSignalIntakes") @SsoAop() public BaseResponse>> getSpecifiedSignalIntakes(@Valid SignalIntensityQO qo, BindingResult bindingResult) { if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } try { return BaseResponseUtils.buildSuccess(intakeSv.getSpecifiedSignalIntakes(qo)); } catch (Exception e) { log.error("获取记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; } } /** ok 11 * 根据开阀类型获取操作次数 * @param qo * @return */ @GetMapping(path = "/getCountByOpenType") @SsoAop() public BaseResponse> getCountByOpenType(@Valid OpenTypeQO qo, BindingResult bindingResult) throws Exception{ if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } String timeStart = qo.getTimeStart(); String timeStop = qo.getTimeStop(); if(timeStart == null || timeStart.trim().equals("")){ return BaseResponseUtils.buildErrorMsg("请设置查询开始时间"); } if(timeStop == null || timeStop.trim().equals("")){ return BaseResponseUtils.buildErrorMsg("请设置查询截止时间"); } long dur = DateTime.daysBetweenyyyy_MM_dd(timeStop, timeStart) ; if(dur < 0){ return BaseResponseUtils.buildErrorMsg("截止时间不能早于开始时间"); } if(dur > 366){ return BaseResponseUtils.buildErrorMsg("时间跨度不能超过一年"); } int[] ymdStart = DateTime.yyyy_MM_dd_2_ymdGroup(timeStart) ; int[] ymdEnd = DateTime.yyyy_MM_dd_2_ymdGroup(timeStop) ; long startId = IDLongGenerator.generateOneDayStartId(ymdStart[0], ymdStart[1], ymdStart[2]) ; long endId = IDLongGenerator.generateOneDayStartId(ymdEnd[0], ymdEnd[1], ymdEnd[2]) ; try { return BaseResponseUtils.buildSuccess(intakeSv.getCountByOpenType(startId, endId, qo.getOpenType())); } catch (Exception e) { log.error("获取记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; } } /** ok 12 * 根据关阀类型获取操作次数 * @param qo * @return */ @GetMapping(path = "/getCountByCloseType") @SsoAop() public BaseResponse> getCountByCloseType(@Valid CloseTypeQo qo, BindingResult bindingResult) throws Exception{ if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } String timeStart = qo.getTimeStart(); String timeStop = qo.getTimeStop(); if(timeStart == null || timeStart.trim().equals("")){ return BaseResponseUtils.buildErrorMsg("请设置查询开始时间"); } if(timeStop == null || timeStop.trim().equals("")){ return BaseResponseUtils.buildErrorMsg("请设置查询截止时间"); } long dur = DateTime.daysBetweenyyyy_MM_dd(timeStop, timeStart) ; if(dur < 0){ return BaseResponseUtils.buildErrorMsg("截止时间不能早于开始时间"); } if(dur > 366){ return BaseResponseUtils.buildErrorMsg("时间跨度不能超过一年"); } int[] ymdStart = DateTime.yyyy_MM_dd_2_ymdGroup(timeStart) ; int[] ymdEnd = DateTime.yyyy_MM_dd_2_ymdGroup(timeStop) ; long startId = IDLongGenerator.generateOneDayStartId(ymdStart[0], ymdStart[1], ymdStart[2]) ; long endId = IDLongGenerator.generateOneDayStartId(ymdEnd[0], ymdEnd[1], ymdEnd[2]) ; try { return BaseResponseUtils.buildSuccess(intakeSv.getCountByCloseType(startId, endId, qo.getCloseType())); } catch (Exception e) { log.error("获取记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; } } /** ok 13 * 获取指定时间段内开阀次数超过指定值的取水口 * @param * @return */ @GetMapping(path = "/getOpenValveGtIntakes") @SsoAop() public BaseResponse>> getOpenValveGtIntakes(@Valid IntakeCountValueQO qo, BindingResult bindingResult) throws Exception { if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } String timeStart = qo.getTimeStart(); String timeStop = qo.getTimeStop(); if(timeStart == null || timeStart.trim().equals("")){ return BaseResponseUtils.buildErrorMsg("请设置查询开始时间"); } if(timeStop == null || timeStop.trim().equals("")){ return BaseResponseUtils.buildErrorMsg("请设置查询截止时间"); } long dur = DateTime.daysBetweenyyyy_MM_dd(timeStop, timeStart) ; if(dur < 0){ return BaseResponseUtils.buildErrorMsg("截止时间不能早于开始时间"); } if(dur > 366){ return BaseResponseUtils.buildErrorMsg("时间跨度不能超过一年"); } int[] ymdStart = DateTime.yyyy_MM_dd_2_ymdGroup(timeStart) ; int[] ymdEnd = DateTime.yyyy_MM_dd_2_ymdGroup(timeStop) ; qo.idStart = IDLongGenerator.generateOneDayStartId(ymdStart[0], ymdStart[1], ymdStart[2]) ; qo.idEnd = IDLongGenerator.generateOneDayStartId(ymdEnd[0], ymdEnd[1], ymdEnd[2]) ; try { QueryResultVo> res = intakeSv.getOpenValveGtIntakes(qo); return BaseResponseUtils.buildSuccess(res); } catch (Exception e) { log.error("获取记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; } } /** ok 14 * 获取指定时间段内开阀次数低于指定值的取水口 * @param * @return */ @GetMapping(path = "/getOpenValveLtIntakes") @SsoAop() public BaseResponse>> getOpenValveLtIntakes(@Valid IntakeCountValueQO qo, BindingResult bindingResult) throws Exception { if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } String timeStart = qo.getTimeStart(); String timeStop = qo.getTimeStop(); if(timeStart == null || timeStart.trim().equals("")){ return BaseResponseUtils.buildErrorMsg("请设置查询开始时间"); } if(timeStop == null || timeStop.trim().equals("")){ return BaseResponseUtils.buildErrorMsg("请设置查询截止时间"); } long dur = DateTime.daysBetweenyyyy_MM_dd(timeStop, timeStart) ; if(dur < 0){ return BaseResponseUtils.buildErrorMsg("截止时间不能早于开始时间"); } if(dur > 366){ return BaseResponseUtils.buildErrorMsg("时间跨度不能超过一年"); } int[] ymdStart = DateTime.yyyy_MM_dd_2_ymdGroup(timeStart) ; int[] ymdEnd = DateTime.yyyy_MM_dd_2_ymdGroup(timeStop) ; qo.idStart = IDLongGenerator.generateOneDayStartId(ymdStart[0], ymdStart[1], ymdStart[2]) ; qo.idEnd = IDLongGenerator.generateOneDayStartId(ymdEnd[0], ymdEnd[1], ymdEnd[2]) ; try { QueryResultVo> res = intakeSv.getOpenValveLtIntakes(qo); return BaseResponseUtils.buildSuccess(res); } catch (Exception e) { log.error("获取记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; } } /** * 获取从未开过阀的取水口 * @param * @return */ @GetMapping(path = "/getNeverOpenValveIntakes") @SsoAop() public BaseResponse>> getNeverOpenValveIntakes(CommonQO qo) { try { QueryResultVo> res = intakeSv.getNeverOpenValveIntakes(qo); return BaseResponseUtils.buildSuccess(res); } catch (Exception e) { log.error("获取记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; } } /** * 指定时间段内累积流量(定时报里的累积流量)超过指定值的取水口 * @param * @return */ @GetMapping(path = "/getTotalFlowGtValueIntakes") @SsoAop() public BaseResponse>> getTotalFlowGtValueIntakes(IntakeAmountValueQO qo) { try { QueryResultVo> res = intakeSv.getTotalFlowGtValueIntakes(qo); return BaseResponseUtils.buildSuccess(res); } catch (Exception e) { log.error("获取记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; } } /** ok 3 * 指定时间段内用水量超过指定值的取水口 * @param * @return */ @GetMapping(path = "/getUseWaterGtValueIntakes") @SsoAop() public BaseResponse>> getUseWaterGtValueIntakes(IntakeAmountValueQO qo) { try { QueryResultVo> res = intakeSv.getUseWaterGtValueIntakes(qo); return BaseResponseUtils.buildSuccess(res); } catch (Exception e) { log.error("获取记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; } } /** ok 4 * 指定时间段内消费金额超过指定值的取水口 * @param * @return */ @GetMapping(path = "/getExpenseGtValueIntakes") @SsoAop() public BaseResponse>> getExpenseGtValueIntakes(IntakeAmountValueQO qo) { try { QueryResultVo> res = intakeSv.getExpenseGtValueIntakes(qo); return BaseResponseUtils.buildSuccess(res); } catch (Exception e) { log.error("获取记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; } } /** * 指定时间段内用水次数超过指定值的取水口 * @param * @return */ @GetMapping(path = "/getUseWaterTimesGtValueIntakes") @SsoAop() public BaseResponse>> getUseWaterTimesGtValueIntakes(IntakeCountValueQO qo) { try { QueryResultVo> res = intakeSv.getUseWaterTimesGtValueIntakes(qo); return BaseResponseUtils.buildSuccess(res); } catch (Exception e) { log.error("获取记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; } } /** * 指定时间段内用水时长超过指定值的取水口 * @param * @return */ @GetMapping(path = "/getUseWaterDurationGtValueIntakes") @SsoAop() public BaseResponse>> getUseWaterDurationGtValueIntakes(IntakeCountValueQO qo) { try { QueryResultVo> res = intakeSv.getUseWaterDurationGtValueIntakes(qo); return BaseResponseUtils.buildSuccess(res); } catch (Exception e) { log.error("获取记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; } } /** ok 15 * 指定时间段 有开阀 无关阀的取水口 * @param * @return */ @GetMapping(path = "/getHaveOpenNoCloseIntakes") @SsoAop() public BaseResponse>> getHaveOpenNoCloseIntakes(IntakeCountValueQO qo) throws Exception { String timeStart = qo.getTimeStart(); String timeStop = qo.getTimeStop(); if(timeStart == null || timeStart.trim().equals("")){ return BaseResponseUtils.buildErrorMsg("请设置查询开始时间"); } if(timeStop == null || timeStop.trim().equals("")){ return BaseResponseUtils.buildErrorMsg("请设置查询截止时间"); } long dur = DateTime.daysBetweenyyyy_MM_dd(timeStop, timeStart) ; if(dur < 0){ return BaseResponseUtils.buildErrorMsg("截止时间不能早于开始时间"); } if(dur > 366){ return BaseResponseUtils.buildErrorMsg("时间跨度不能超过一年"); } int[] ymdStart = DateTime.yyyy_MM_dd_2_ymdGroup(timeStart) ; int[] ymdEnd = DateTime.yyyy_MM_dd_2_ymdGroup(timeStop) ; qo.idStart = IDLongGenerator.generateOneDayStartId(ymdStart[0], ymdStart[1], ymdStart[2]) ; qo.idEnd = IDLongGenerator.generateOneDayStartId(ymdEnd[0], ymdEnd[1], ymdEnd[2]) ; try { QueryResultVo> res = intakeSv.getHaveOpenNoCloseIntakes(qo); return BaseResponseUtils.buildSuccess(res); } catch (Exception e) { log.error("获取记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; } } /** ok 16 * 指定时间段 无开阀 有关阀的取水口 * @param * @return */ @GetMapping(path = "/getNoOpenHaveCloseIntakes") @SsoAop() public BaseResponse>> getNoOpenHaveCloseIntakes(IntakeCountValueQO qo) throws Exception { String timeStart = qo.getTimeStart(); String timeStop = qo.getTimeStop(); if(timeStart == null || timeStart.trim().equals("")){ return BaseResponseUtils.buildErrorMsg("请设置查询开始时间"); } if(timeStop == null || timeStop.trim().equals("")){ return BaseResponseUtils.buildErrorMsg("请设置查询截止时间"); } long dur = DateTime.daysBetweenyyyy_MM_dd(timeStop, timeStart) ; if(dur < 0){ return BaseResponseUtils.buildErrorMsg("截止时间不能早于开始时间"); } if(dur > 366){ return BaseResponseUtils.buildErrorMsg("时间跨度不能超过一年"); } int[] ymdStart = DateTime.yyyy_MM_dd_2_ymdGroup(timeStart) ; int[] ymdEnd = DateTime.yyyy_MM_dd_2_ymdGroup(timeStop) ; qo.idStart = IDLongGenerator.generateOneDayStartId(ymdStart[0], ymdStart[1], ymdStart[2]) ; qo.idEnd = IDLongGenerator.generateOneDayStartId(ymdEnd[0], ymdEnd[1], ymdEnd[2]) ; try { QueryResultVo> res = intakeSv.getNoOpenHaveCloseIntakes(qo); return BaseResponseUtils.buildSuccess(res); } catch (Exception e) { log.error("获取记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; } } /** * 统计指定月份各天用水量 * @param qo * @return */ @GetMapping(path = "/getDayIntakeAmount") @SsoAop() public BaseResponse>> getDayIntakeAmount(@NotNull IntakeAmountQO qo) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); String yearMonth = qo.getYearMonth(); if(yearMonth == null) { return BaseResponseUtils.buildErrorMsg(StatisticlResultCode.YEAR_AND_MONTH_CANNOT_BE_NULL.getMessage()); }else { yearMonth = yearMonth + "-01"; try { Date date = dateFormat.parse(yearMonth); } catch (Exception e) { return BaseResponseUtils.buildErrorMsg(StatisticlResultCode.YEAR_OR_MONTH_IS_ERROR.getMessage()); } } try { return BaseResponseUtils.buildSuccess(intakeSv.getDayIntakeAmount(qo)); } catch (Exception e) { log.error("获取记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; } } /** * 统计指定年份各月用水量 * @param qo * @return */ @GetMapping(path = "/getMonthIntakeAmount") @SsoAop() public BaseResponse>> getMonthIntakeAmount(IntakeAmountQO qo) { if(qo.getYear() == null) { return BaseResponseUtils.buildErrorMsg(StatisticlResultCode.YEAR_CANNOT_BE_NULL.getMessage()); } try { return BaseResponseUtils.buildSuccess(intakeSv.getMonthIntakeAmount(qo)); } catch (Exception e) { log.error("获取记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; } } /** * 统计指定月份各天漏损量 * @param qo * @return */ @GetMapping(path = "/getDayLossAmount") @SsoAop() public BaseResponse>> getDayLossAmount(IntakeAmountQO qo) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); String yearMonth = qo.getYearMonth(); if(yearMonth == null) { return BaseResponseUtils.buildErrorMsg(StatisticlResultCode.YEAR_AND_MONTH_CANNOT_BE_NULL.getMessage()); }else { yearMonth = yearMonth + "-01"; try { Date date = dateFormat.parse(yearMonth); } catch (Exception e) { return BaseResponseUtils.buildErrorMsg(StatisticlResultCode.YEAR_OR_MONTH_IS_ERROR.getMessage()); } } try { return BaseResponseUtils.buildSuccess(intakeSv.getDayLossAmount(qo)); } catch (Exception e) { log.error("获取记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; } } /** * 统计指定年份各月漏损量 * @param qo * @return */ @GetMapping(path = "/getMonthLossAmount") @SsoAop() public BaseResponse>> getMonthLossAmount(IntakeAmountQO qo) { if(qo.getYear() == null) { return BaseResponseUtils.buildErrorMsg(StatisticlResultCode.YEAR_CANNOT_BE_NULL.getMessage()); } try { return BaseResponseUtils.buildSuccess(intakeSv.getMonthLossAmount(qo)); } catch (Exception e) { log.error("获取记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; } } }