¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.require.task; |
| | | |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.ruoyi.require.mapper.CollectLaboratoryMapper; |
| | | import com.ruoyi.require.mapper.CollectTemperatureHumidityMapper; |
| | | import com.ruoyi.require.mapper.FeTempHumDateMapper; |
| | | import com.ruoyi.require.mapper.FeTempHumRecordMapper; |
| | | import com.ruoyi.require.pojo.CollectLaboratory; |
| | | import com.ruoyi.require.pojo.CollectTemperatureHumidity; |
| | | import com.ruoyi.require.pojo.FeTempHumDate; |
| | | import com.ruoyi.require.pojo.FeTempHumRecord; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.scheduling.annotation.Scheduled; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.lang.reflect.Field; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.Calendar; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * Author: yuan |
| | | * Date: 2024-12-19 ææå 8:33:56 |
| | | * Description: |
| | | */ |
| | | @Component |
| | | public class FeTempHumDateSchedule { |
| | | |
| | | @Autowired |
| | | private CollectLaboratoryMapper collectLaboratoryMapper; |
| | | @Autowired |
| | | private FeTempHumDateMapper feTempHumDateMapper; |
| | | @Autowired |
| | | private CollectTemperatureHumidityMapper collectTemperatureHumidityMapper; |
| | | @Autowired |
| | | private FeTempHumRecordMapper feTempHumRecordMapper; |
| | | |
| | | // è·åå½å年份åæä»½ å¦ï¼2024-11 |
| | | private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); |
| | | private String formattedDate = sdf.format(Calendar.getInstance().getTime()); |
| | | |
| | | /** |
| | | * æ£æ¥å®éªå®¤æ¯å¦æä»»å¡ |
| | | */ |
| | | public synchronized void checkLaboratoriesSchedule() { |
| | | // è·åå½å年份åæä»½ å¦ï¼2024-11 |
| | | formattedDate = sdf.format(Calendar.getInstance().getTime()); |
| | | // æ¥è¯¢ææçå®éªå®¤ |
| | | List<CollectLaboratory> collectLaboratories = collectLaboratoryMapper.selectList(null); |
| | | // éåå®éªå®¤ï¼å¤æä»»å¡åè¡¨ä¸æ¯å¦å该å®éªå®¤çä»»å¡ |
| | | for (CollectLaboratory collectLaboratory : collectLaboratories) { |
| | | // æ¥è¯¢æ°æ®åºä¸æ¯å¦åå¨è¯¥å®éªå®¤çä»»å¡ |
| | | int count = feTempHumDateMapper.selectFeTempHumDateIncludeFormattedDate(collectLaboratory.getLaboratory(), formattedDate); |
| | | // æ¥è¯¢ç»æä¸º0ï¼è¯´ææ°æ®åºä¸ä¸åå¨è¯¥å®éªå®¤çä»»å¡ï¼éè¦æ°å¢ |
| | | if (count == 0) { |
| | | FeTempHumDate feTempHumDate = new FeTempHumDate(); |
| | | feTempHumDate.setMonthDate(formattedDate); |
| | | feTempHumDate.setTestAreaName(collectLaboratory.getLaboratory()); |
| | | feTempHumDateMapper.insert(feTempHumDate); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ¯å¤©9ç¹æ§è¡ä¸æ¬¡ é¤äºææå¤© |
| | | * è·å温度湿度 |
| | | */ |
| | | // @Scheduled(cron = "0/5 * * * * *") |
| | | @Scheduled(cron = "0 0 9 * * 1-6") // æ¯å¤©9ç¹æ§è¡ä¸æ¬¡ é¤äºææå¤© |
| | | public void task1() { |
| | | checkLaboratoriesSchedule(); |
| | | // æ ¹æ®æ¶é´éåºï¼è·åå°ææ°ç䏿¡æ°æ® |
| | | CollectTemperatureHumidity collectTemperatureHumidity = collectTemperatureHumidityMapper.selectOne(Wrappers.<CollectTemperatureHumidity>lambdaQuery() |
| | | .orderByDesc(CollectTemperatureHumidity::getCollectTime) |
| | | .last("limit 1")); |
| | | |
| | | // è·åææçå®éªå®¤ |
| | | List<CollectLaboratory> collectLaboratories = collectLaboratoryMapper.selectList(null); |
| | | // éåè·åå®éªå®¤ç¼å· è·å温湿度 ä¿åå¨å¯¹åºç |
| | | for (CollectLaboratory collectLaboratory : collectLaboratories) { |
| | | // å®éªå®¤ç¼å· |
| | | int labNumber = Integer.parseInt(collectLaboratory.getDeviceCode()); |
| | | // æ ¹æ®å®éªå®¤ç¼å·æ¼æ¥å¯¹åºçæ¹¿åº¦åæ¸©åº¦å段 |
| | | String temperatureField = "code" + labNumber + "Temperature"; |
| | | String humidityField = "code" + labNumber + "Humidity"; |
| | | // è·å温度 |
| | | Double temperature = getFieldValue(collectTemperatureHumidity, temperatureField) != null ? (Double) getFieldValue(collectTemperatureHumidity, temperatureField) : Double.valueOf(00.0); |
| | | // è·å湿度 |
| | | Double humidity = getFieldValue(collectTemperatureHumidity, humidityField) != null ? (Double) getFieldValue(collectTemperatureHumidity, humidityField) : Double.valueOf(00.0); |
| | | // æ¥è¯¢è¯éªåºå |
| | | FeTempHumDate feTempHumDate = feTempHumDateMapper.selectOne(Wrappers.<FeTempHumDate>lambdaQuery() |
| | | .eq(FeTempHumDate::getMonthDate, formattedDate) |
| | | .eq(FeTempHumDate::getTestAreaName, collectLaboratory.getLaboratory())); |
| | | Integer dateId = feTempHumDate.getDateId(); |
| | | // 夿ä»å¤©æ¯å¦ææ¸©æ¹¿åº¦è®°å½ |
| | | FeTempHumRecord feTempHumRecord = record(dateId); |
| | | // æ¥è¯¢åºæ¥å°±ä»£è¡¨ä»å¤©è®°å½è¿äºå°±ä¸è®°å½ |
| | | if (feTempHumRecord != null) { |
| | | // ææ¸©åº¦æ¹¿åº¦è®°å½å°±ä¸è®°å½ |
| | | continue; |
| | | } |
| | | |
| | | // å建ä»å¤©æ¸©æ¹¿åº¦è®°å½å¯¹è±¡ è®°å½ä¸å温度湿度 |
| | | FeTempHumRecord newFeTempHumRecord = new FeTempHumRecord(); |
| | | newFeTempHumRecord.setRecordDate(LocalDate.now()); |
| | | newFeTempHumRecord.setMorningTestTime(LocalTime.now()); |
| | | newFeTempHumRecord.setMorningTemp(temperature.toString()); |
| | | newFeTempHumRecord.setMorningHum(humidity.toString()); |
| | | newFeTempHumRecord.setDateId(dateId); |
| | | feTempHumRecordMapper.insert(newFeTempHumRecord); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 夿ä»å¤©æ¯å¦ææ¸©æ¹¿åº¦è®°å½ |
| | | */ |
| | | private FeTempHumRecord record(Integer dateId) { |
| | | // è·åä»å¤©çæ¥æ |
| | | LocalDate today = LocalDate.now(); |
| | | DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss"); |
| | | // è·åä»å¤©ç 00:00:00 å 23:59:59 |
| | | String start = today.atStartOfDay().format(dateTimeFormatter); // 00:00:00 |
| | | String end = today.atTime(LocalTime.MAX).format(dateTimeFormatter); // 23:59:59 |
| | | // æ¥è¯¢ä»å¤©æ¯å¦ææ¸©æ¹¿åº¦è®°å½ |
| | | return feTempHumRecordMapper.selectOne(Wrappers.<FeTempHumRecord>lambdaQuery() |
| | | // åªä¸ªå®éªå®¤ |
| | | .eq(FeTempHumRecord::getDateId, dateId) |
| | | // è®°å½æ¶é´å¨ä»å¤©ä¹å
|
| | | .eq(FeTempHumRecord::getRecordDate, today) |
| | | .between(FeTempHumRecord::getMorningTestTime, start, end)); |
| | | } |
| | | |
| | | /** |
| | | * æ¯å¤©14ç¹æ§è¡ä¸æ¬¡ é¤äºææå
忿天 |
| | | * è·å温度湿度 |
| | | */ |
| | | // @Scheduled(cron = "0/5 * * * * *") |
| | | @Scheduled(cron = "0 0 14 * * 1-5") // æ¯å¤©14ç¹æ§è¡ä¸æ¬¡ é¤äºææå
忿天 |
| | | public void task2() { |
| | | |
| | | // æ£æ¥å®éªå®¤æ¯å¦æä»»å¡ å¦ææ²¡ææ°å¢ä»»å¡ |
| | | checkLaboratoriesSchedule(); |
| | | // æ ¹æ®æ¶é´éåºï¼è·åå°ææ°ç䏿¡æ°æ® |
| | | CollectTemperatureHumidity collectTemperatureHumidity = collectTemperatureHumidityMapper.selectOne(Wrappers.<CollectTemperatureHumidity>lambdaQuery() |
| | | .orderByDesc(CollectTemperatureHumidity::getCollectTime) |
| | | .last("limit 1")); |
| | | // è·åææçå®éªå®¤ |
| | | List<CollectLaboratory> collectLaboratories = collectLaboratoryMapper.selectList(null); |
| | | // éåè·åå®éªå®¤ç¼å· è·å温湿度 ä¿åå¨å¯¹åºç |
| | | for (CollectLaboratory collectLaboratory : collectLaboratories) { |
| | | // å®éªå®¤ç¼å· |
| | | int labNumber = Integer.parseInt(collectLaboratory.getDeviceCode()); |
| | | // æ ¹æ®å®éªå®¤ç¼å·æ¼æ¥å¯¹åºçæ¹¿åº¦åæ¸©åº¦å段 |
| | | String temperatureField = "code" + labNumber + "Temperature"; |
| | | String humidityField = "code" + labNumber + "Humidity"; |
| | | // è·å温度 |
| | | Double temperature = getFieldValue(collectTemperatureHumidity, temperatureField) != null ? (Double) getFieldValue(collectTemperatureHumidity, temperatureField) : Double.valueOf(00.0); |
| | | // è·å湿度 |
| | | Double humidity = getFieldValue(collectTemperatureHumidity, humidityField) != null ? (Double) getFieldValue(collectTemperatureHumidity, humidityField) : Double.valueOf(00.0); |
| | | // æ¥è¯¢è¯éªåºå |
| | | FeTempHumDate feTempHumDate = feTempHumDateMapper.selectOne(Wrappers.<FeTempHumDate>lambdaQuery() |
| | | .eq(FeTempHumDate::getMonthDate, formattedDate) |
| | | .eq(FeTempHumDate::getTestAreaName, collectLaboratory.getLaboratory())); |
| | | Integer dateId = feTempHumDate.getDateId(); |
| | | // æ¥è¯¢ä»å¤©æ¯å¦ææ¸©æ¹¿åº¦è®°å½ |
| | | FeTempHumRecord feTempHumRecord = record(dateId); |
| | | // å¦ææ²¡ææ¥è¯¢ç»æå°±è¯´æä¸å没æè®°å½ |
| | | if (feTempHumRecord == null) { |
| | | // å建ä»å¤©æ¸©æ¹¿åº¦è®°å½å¯¹è±¡ è®°å½ä¸å温度湿度 |
| | | FeTempHumRecord newFeTempHumRecord = new FeTempHumRecord(); |
| | | newFeTempHumRecord.setAfternoonTime(LocalTime.now()); |
| | | newFeTempHumRecord.setAfternoonTemp(temperature.toString()); |
| | | newFeTempHumRecord.setAfternoonHum(humidity.toString()); |
| | | newFeTempHumRecord.setDateId(dateId); |
| | | feTempHumRecordMapper.insert(newFeTempHumRecord); |
| | | continue; |
| | | } |
| | | |
| | | // æ¥è¯¢åºæ¥å°±ä»£è¡¨ä»å¤©è®°å½è¿ å夿ä¸åæè®°å½è¿æ²¡æ |
| | | // 温度æ¯å¦è®°å½è¿ |
| | | if (feTempHumRecord.getAfternoonTemp() == null) { |
| | | // 没æå°±èªå¨è®°å½ |
| | | feTempHumRecord.setAfternoonTemp(temperature.toString()); |
| | | // ä¿®æ¹è®°å½æ¶é´ |
| | | feTempHumRecord.setAfternoonTime(LocalTime.now()); |
| | | } |
| | | // 湿度æ¯å¦è®°å½è¿ |
| | | if (feTempHumRecord.getAfternoonHum() == null) { |
| | | // 没æå°±èªå¨è®°å½ |
| | | feTempHumRecord.setAfternoonHum(humidity.toString()); |
| | | // ä¿®æ¹è®°å½æ¶é´ |
| | | feTempHumRecord.setAfternoonTime(LocalTime.now()); |
| | | } |
| | | feTempHumRecordMapper.updateById(feTempHumRecord); |
| | | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®å®éªå®¤ç¼å·è·å温度湿度 |
| | | * |
| | | * @param collectTemperatureHumidity æ¸©åº¦æ¹¿åº¦æ°æ® |
| | | * @param fieldName åæ®µå |
| | | * @return åæ®µå¼ |
| | | */ |
| | | public static Object getFieldValue(CollectTemperatureHumidity collectTemperatureHumidity, String fieldName) { |
| | | try { |
| | | Field field = collectTemperatureHumidity.getClass().getDeclaredField(fieldName); |
| | | field.setAccessible(true); // 设置å¯ä»¥è®¿é®ç§æå段 |
| | | return field.get(collectTemperatureHumidity); // è·ååæ®µçå¼ |
| | | } catch (NoSuchFieldException | IllegalAccessException e) { |
| | | e.printStackTrace(); |
| | | return null; |
| | | } |
| | | } |
| | | } |