zhuo
2025-03-06 5a4ce1d3f7d37d01c5a55cbf0006af6344bbe889
添加温度数采
已修改2个文件
已添加5个文件
366 ■■■■■ 文件已修改
cnas-require/src/main/java/com/ruoyi/require/mapper/CollectLaboratoryMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/CollectTemperatureHumidityMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/CollectLaboratory.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/CollectTemperatureHumidity.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/task/FeTempHumDateSchedule.java 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-druid.yml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-prod.yml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/CollectLaboratoryMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.require.pojo.CollectLaboratory;
/**
 * æ¸©æ¹¿åº¦é‡‡é›†å®žéªŒå®¤ç»‘定
 *
 * @author zhuo
 * @since 2024-12-18
 */
public interface CollectLaboratoryMapper extends BaseMapper<CollectLaboratory> {
}
cnas-require/src/main/java/com/ruoyi/require/mapper/CollectTemperatureHumidityMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.require.pojo.CollectTemperatureHumidity;
/**
 * æ¸©æ¹¿åº¦é‡‡é›†ä¿¡æ¯
 *
 * @author zhuo
 * @since 2024-12-18
 */
public interface CollectTemperatureHumidityMapper extends BaseMapper<CollectTemperatureHumidity> {
}
cnas-require/src/main/java/com/ruoyi/require/pojo/CollectLaboratory.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * æ¸©æ¹¿åº¦é‡‡é›†å®žéªŒå®¤ç»‘定
 *
 * @author zhuo
 * @since 2024-12-18
 */
@Data
@TableName("collect_laboratory")
public class CollectLaboratory {
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("实验室")
    private String laboratory;
    @ApiModelProperty("温湿度设备编号")
    private String deviceCode;
    @ApiModelProperty("最高温度")
    private Double temperatureHighest;
    @ApiModelProperty("最低温度")
    private Double temperatureLowest;
    @ApiModelProperty("最高湿度")
    private Double humidityHighest;
    @ApiModelProperty("最低湿度")
    private Double humidityLowest;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/CollectTemperatureHumidity.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,66 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;
/**
 * æ¸©æ¹¿åº¦é‡‡é›†ä¿¡æ¯
 *
 * @author zhuo
 * @since 2024-12-18
 */
@Data
@TableName("collect_temperature_humidity")
public class CollectTemperatureHumidity {
    @TableId(type = IdType.AUTO)
    private Integer superviseId;
    //7801温度
    private Double code7801Temperature;
    //7801湿度
    private Double code7801Humidity;
    //7802温度
    private Double code7802Temperature;
    //7802湿度
    private Double code7802Humidity;
    //7803温度
    private Double code7803Temperature;
    //7803湿度
    private Double code7803Humidity;
    //7804温度
    private Double code7804Temperature;
    //7804湿度
    private Double code7804Humidity;
    //7805温度
    private Double code7805Temperature;
    //7805湿度
    private Double code7805Humidity;
    //7806温度
    private Double code7806Temperature;
    //7806湿度
    private Double code7806Humidity;
    //7807温度
    private Double code7807Temperature;
    //7807湿度
    private Double code7807Humidity;
    //7808温度
    private Double code7808Temperature;
    //7808湿度
    private Double code7808Humidity;
    //7809温度
    private Double code7809Temperature;
    //7809湿度
    private Double code7809Humidity;
    //7810温度
    private Double code7810Temperature;
    //7810湿度
    private Double code7810Humidity;
    //采集时间
    private Date collectTime;
}
cnas-require/src/main/java/com/ruoyi/require/task/FeTempHumDateSchedule.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,219 @@
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;
        }
    }
}
ruoyi-admin/src/main/resources/application-druid.yml
@@ -98,6 +98,11 @@
    cache-enabled: false
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# Swagger配置
swagger:
  # æ˜¯å¦å¼€å¯swagger
  enabled: true
minio:
  endpoint: http://114.132.189.42/
  port: 7019
ruoyi-admin/src/main/resources/application-prod.yml
@@ -98,6 +98,11 @@
    cache-enabled: false
    log-impl: # org.apache.ibatis.logging.stdout.StdOutImpl
# Swagger配置
swagger:
  # æ˜¯å¦å¼€å¯swagger
  enabled: true
minio:
  endpoint: http://114.132.189.42/
  port: 7019