package com.zcxk.scheduled; import com.zcxk.dao.MeterReadRecordMapper; import com.zcxk.dao.WarningLogMapper; import com.zcxk.dao.WarningMessageMapper; import com.zcxk.dao.WarningRuleMapper; import com.zcxk.entity.WarningLog; import com.zcxk.entity.WarningMessage; import com.zcxk.entity.WarningRule; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.List; @Slf4j @Component @Configuration @EnableScheduling public class WarningMessageJob { @Autowired private MeterReadRecordMapper meterReadRecordMapper; @Resource private WarningRuleMapper warningRuleMapper; @Resource private WarningLogMapper warningLogMapper; @Resource private WarningMessageMapper warningMessageMapper; /** * 每天预警消息 */ @Scheduled(cron = "0 0 10 * * ?") public void warningMessage() { log.info("begin warningMessage job"); List list = warningRuleMapper.getList(null); if (list != null && list.size() > 0) { for (WarningRule warningRule : list) { if(warningRule.getWarningType() == 1){ Integer date = Integer.valueOf(LocalDateTime.now().plusDays(-1).format(DateTimeFormatter.ofPattern("yyyyMMdd"))); Boolean b = meterReadRecordMapper.exceedConsumption(warningRule.getDeviceId(),date); if (b !=null && b) { WarningLog warningLogNew = new WarningLog(); //warningLogNew.setClientUserId(clientUserDevice.getClientUserId()); warningLogNew.setDeviceId(warningRule.getDeviceId()); warningLogNew.setWarningType(warningRule.getWarningType()); warningLogNew.setFeedbackStatus(0); warningLogNew.setFeedbackContent(""); warningLogNew.setLastDate(LocalDateTime.now()); warningLogNew.setStatus(1); warningLogNew.setCreateBy("system"); warningLogNew.setDateCreate(LocalDateTime.now()); warningLogNew.setUpdateBy("system"); warningLogNew.setDateUpdate(LocalDateTime.now()); warningLogMapper.insertSelective(warningLogNew); WarningMessage warningMessageNew = new WarningMessage(); warningMessageNew.setWarningLogId(warningLogNew.getId()); warningMessageNew.setContent("较上日用水量激增30%"); warningMessageNew.setStatus(1); warningMessageNew.setCreateBy("system"); warningMessageNew.setDateCreate(new Date()); warningMessageNew.setUpdateBy("system"); warningMessageNew.setDateUpdate(new Date()); warningMessageMapper.insertSelective(warningMessageNew); } } if(warningRule.getWarningType() == 2){ Integer days = meterReadRecordMapper.queryNotWaterConsumptionDays(warningRule.getDeviceId(),warningRule.getDateCreate()); if(days != null && days > 7){ WarningLog warningLog = warningLogMapper.findByDeviceId(warningRule.getDeviceId(),warningRule.getWarningType()); if (warningLog != null) { long differDays = LocalDateTime.now().toLocalDate().toEpochDay() - warningLog.getLastDate().toLocalDate().toEpochDay(); if(differDays == 1){ //无反馈继续预警 if(warningLog.getFeedbackStatus()==0){ WarningMessage warningMessageNew = new WarningMessage(); warningMessageNew.setWarningLogId(warningLog.getId()); warningMessageNew.setContent("连续无用水量超"+days+"天"); warningMessageNew.setStatus(1); warningMessageNew.setCreateBy("system"); warningMessageNew.setDateCreate(new Date()); warningMessageNew.setUpdateBy("system"); warningMessageNew.setDateUpdate(new Date()); warningMessageMapper.insertSelective(warningMessageNew); WarningLog warningLogNew = new WarningLog(); warningLogNew.setId(warningLog.getId()); warningLogNew.setLastDate(LocalDateTime.now()); warningLogNew.setDateUpdate(LocalDateTime.now()); warningLogMapper.updateByPrimaryKeySelective(warningLogNew); } }else { WarningLog warningLogNew = new WarningLog(); //warningLogNew.setClientUserId(clientUserDevice.getClientUserId()); warningLogNew.setDeviceId(warningRule.getDeviceId()); warningLogNew.setWarningType(warningRule.getWarningType()); warningLogNew.setFeedbackStatus(0); warningLogNew.setFeedbackContent(""); warningLogNew.setLastDate(LocalDateTime.now()); warningLogNew.setStatus(1); warningLogNew.setCreateBy("system"); warningLogNew.setDateCreate(LocalDateTime.now()); warningLogNew.setUpdateBy("system"); warningLogNew.setDateUpdate(LocalDateTime.now()); warningLogMapper.insertSelective(warningLogNew); WarningMessage warningMessageNew = new WarningMessage(); warningMessageNew.setWarningLogId(warningLogNew.getId()); warningMessageNew.setContent("连续无用水量超"+days+"天"); warningMessageNew.setStatus(1); warningMessageNew.setCreateBy("system"); warningMessageNew.setDateCreate(new Date()); warningMessageNew.setUpdateBy("system"); warningMessageNew.setDateUpdate(new Date()); warningMessageMapper.insertSelective(warningMessageNew); } }else { WarningLog warningLogNew = new WarningLog(); //warningLogNew.setClientUserId(clientUserDevice.getClientUserId()); warningLogNew.setDeviceId(warningRule.getDeviceId()); warningLogNew.setWarningType(warningRule.getWarningType()); warningLogNew.setFeedbackStatus(0); warningLogNew.setFeedbackContent(""); warningLogNew.setLastDate(LocalDateTime.now()); warningLogNew.setStatus(1); warningLogNew.setCreateBy("system"); warningLogNew.setDateCreate(LocalDateTime.now()); warningLogNew.setUpdateBy("system"); warningLogNew.setDateUpdate(LocalDateTime.now()); warningLogMapper.insertSelective(warningLogNew); WarningMessage warningMessageNew = new WarningMessage(); warningMessageNew.setWarningLogId(warningLogNew.getId()); warningMessageNew.setContent("连续无用水量超"+days+"天"); warningMessageNew.setStatus(1); warningMessageNew.setCreateBy("system"); warningMessageNew.setDateCreate(new Date()); warningMessageNew.setUpdateBy("system"); warningMessageNew.setDateUpdate(new Date()); warningMessageMapper.insertSelective(warningMessageNew); } } } } } log.info("end warningMessage job"); } }