From 4f3a98f19143865cdc1de4791e8a95d96bd40c65 Mon Sep 17 00:00:00 2001 From: maven <2163098428@qq.com> Date: 星期五, 01 八月 2025 13:27:59 +0800 Subject: [PATCH] yys 密码已重置 --- cnas-require/src/main/java/com/ruoyi/require/task/FeTempHumDateSchedule.java | 387 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 387 insertions(+), 0 deletions(-) diff --git a/cnas-require/src/main/java/com/ruoyi/require/task/FeTempHumDateSchedule.java b/cnas-require/src/main/java/com/ruoyi/require/task/FeTempHumDateSchedule.java new file mode 100644 index 0000000..b721c1d --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/require/task/FeTempHumDateSchedule.java @@ -0,0 +1,387 @@ +package com.ruoyi.require.task; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.common.core.domain.entity.User; +import com.ruoyi.common.utils.WxCpUtils; +import com.ruoyi.require.dto.FeTempHumRecordDto; +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 com.ruoyi.system.mapper.UserMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +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; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 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; + @Autowired + private ThreadPoolTaskExecutor threadPoolTaskExecutor; + @Resource + private UserMapper userMapper; + + // 鑾峰彇褰撳墠骞翠唤鍜屾湀浠� 濡傦細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()); + if (collectLaboratory.getLaboratory().equals("鎭掓俯浜�")) { + feTempHumDate.setSubjoin("娉�: 璇ュ疄楠屽鐜鏉′欢娓╁害娉㈠姩涓嶅ぇ浜幝�1鈩冭姹�"); + } + 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()) + .orderByDesc(FeTempHumDate::getCreateTime) + .last("limit 1")); + 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); + + // 鍒ゆ柇娓╂箍搴︽槸鍚﹁秴杩�, 瓒呰繃鎻愰啋 + if (feTempHumDate.getRegistrarUserId() != null) { + if (temperature < collectLaboratory.getTemperatureLowest() || temperature > collectLaboratory.getTemperatureHighest() || + humidity< collectLaboratory.getHumidityLowest() || humidity > collectLaboratory.getHumidityHighest()) { + // 鍙戦�佷紒涓氬井淇¢�氱煡 + threadPoolTaskExecutor.execute(() -> { + // 鏌ヨ鎺ユ敹浜� + User personnel = userMapper.selectById(feTempHumDate.getRegistrarUserId()); + + String message = ""; + message += "涓婂崍瀹為獙瀹ゆ俯搴︽垨婀垮害瓒呰繃鎸囧畾鍖洪棿, 璇峰幓鏌ョ湅"; + message += "\n璇峰幓璧勬簮绠$悊-璁炬柦鍜岀幆澧冩俯搴︿竴娓╂箍搴﹁褰�"; + message += StrUtil.format("\n瀹為獙瀹ゅ尯鍩�: {}", feTempHumDate.getTestAreaName()); + //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡 + try { + WxCpUtils.inform(personnel.getAccount(), message, null); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + } + } + + } + } + + /** + * 鍒ゆ柇浠婂ぉ鏄惁鏈夋俯婀垮害璁板綍 + */ + 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) + .orderByDesc(FeTempHumRecord::getTempHumId) + .last("limit 1")); + } + + /** + * 姣忓ぉ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()) + .orderByDesc(FeTempHumDate::getCreateTime) + .last("limit 1")); + 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); + + // 鍒ゆ柇娓╂箍搴︽槸鍚﹁秴杩�, 瓒呰繃鎻愰啋 + if (feTempHumDate.getRegistrarUserId() != null) { + if (temperature < collectLaboratory.getTemperatureLowest() || temperature > collectLaboratory.getTemperatureHighest() || + humidity< collectLaboratory.getHumidityLowest() || humidity > collectLaboratory.getHumidityHighest()) { + // 鍙戦�佷紒涓氬井淇¢�氱煡 + threadPoolTaskExecutor.execute(() -> { + // 鏌ヨ鎺ユ敹浜� + User personnel = userMapper.selectById(feTempHumDate.getRegistrarUserId()); + + String message = ""; + message += "涓嬪崍瀹為獙瀹ゆ俯搴︽垨婀垮害瓒呰繃鎸囧畾鍖洪棿, 璇峰幓鏌ョ湅"; + message += "\n璇峰幓璧勬簮绠$悊-璁炬柦鍜岀幆澧冩俯搴︿竴娓╂箍搴﹁褰�"; + message += StrUtil.format("\n瀹為獙瀹ゅ尯鍩�: {}", feTempHumDate.getTestAreaName()); + //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡 + try { + WxCpUtils.inform(personnel.getAccount(), message, null); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + } + + if (feTempHumDate.getTestAreaName().equals("鎭掓俯浜�")) { + // 鍒ゆ柇涓婁笅鍗堟俯宸槸鍚﹁秴杩�1 + if (temperature - Double.valueOf(feTempHumRecord.getMorningTemp()) > 1) { + // 鍙戦�佷紒涓氬井淇¢�氱煡 + threadPoolTaskExecutor.execute(() -> { + // 鏌ヨ鎺ユ敹浜� + User personnel = userMapper.selectById(feTempHumDate.getRegistrarUserId()); + + String message = ""; + message += "鎭掓俯浜屽疄楠屽涓婁笅娓╁樊瓒呰繃 1鈩�, 璇峰幓鏌ョ湅"; + message += "\n璇峰幓璧勬簮绠$悊-璁炬柦鍜岀幆澧冩俯搴︿竴娓╂箍搴﹁褰�"; + message += StrUtil.format("\n瀹為獙瀹ゅ尯鍩�: {}", feTempHumDate.getTestAreaName()); + //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡 + try { + WxCpUtils.inform(personnel.getAccount(), message, null); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + } + } + } + } + } + + /** + * 鏄熸湡澶╂墽琛屾坊鍔犵┖鐧芥暟鎹� + * 鑾峰彇娓╁害婀垮害 + */ +// @Scheduled(cron = "0/5 * * * * *") + @Scheduled(cron = "0 0 9 * * 7") // + public void task3() { + checkLaboratoriesSchedule(); + + // 鑾峰彇鎵�鏈夌殑瀹為獙瀹� + List<CollectLaboratory> collectLaboratories = collectLaboratoryMapper.selectList(null); + // 閬嶅巻鑾峰彇瀹為獙瀹ょ紪鍙� 鑾峰彇娓╂箍搴� 淇濆瓨鍦ㄥ搴旂殑 + for (CollectLaboratory collectLaboratory : collectLaboratories) { + // 鏌ヨ璇曢獙鍖哄煙 + FeTempHumDate feTempHumDate = feTempHumDateMapper.selectOne(Wrappers.<FeTempHumDate>lambdaQuery() + .eq(FeTempHumDate::getMonthDate, formattedDate) + .eq(FeTempHumDate::getTestAreaName, collectLaboratory.getLaboratory()) + .orderByDesc(FeTempHumDate::getCreateTime) + .last("limit 1")); + Integer dateId = feTempHumDate.getDateId(); + // 鍒ゆ柇浠婂ぉ鏄惁鏈夋俯婀垮害璁板綍 + // 鑾峰彇浠婂ぉ鐨勬棩鏈� + LocalDate today = LocalDate.now(); + // 鏌ヨ浠婂ぉ鏄惁鏈夋俯婀垮害璁板綍 + Long count = feTempHumRecordMapper.selectCount(Wrappers.<FeTempHumRecord>lambdaQuery() + // 鍝釜瀹為獙瀹� + .eq(FeTempHumRecord::getDateId, dateId) + // 璁板綍鏃堕棿鍦ㄤ粖澶╀箣鍐� + .eq(FeTempHumRecord::getRecordDate, today)); + // 鏌ヨ鍑烘潵灏变唬琛ㄤ粖澶╄褰曡繃浜嗗氨涓嶈褰� + if (!count.equals(0L)) { + // 鏈夋俯搴︽箍搴﹁褰曞氨涓嶈褰� + continue; + } + + // 鍒涘缓浠婂ぉ娓╂箍搴﹁褰曞璞� 璁板綍涓婂崍娓╁害婀垮害 + FeTempHumRecord newFeTempHumRecord = new FeTempHumRecord(); + newFeTempHumRecord.setRecordDate(LocalDate.now()); + newFeTempHumRecord.setDateId(dateId); + feTempHumRecordMapper.insert(newFeTempHumRecord); + } + } + + /** + * 鎵弿瀹為獙瀹ゆ俯搴﹁褰曞垽鏂槸鍚︽湁娌℃湁纭鐨勬俯搴︿俊鎭� + * + */ +// @Scheduled(cron = "0/5 * * * * *") + @Scheduled(cron = "0 0 16 * * 1-6") // 姣忓ぉ15鐐规墽琛屼竴娆� 闄や簡鏄熸湡澶� + public void affirmTempHum() { + // 鏌ヨ鏈夋棩鏈熶絾鏄湭濉啓鍚嶅瓧鐨� + List<FeTempHumRecordDto> feTempHumRecordList = feTempHumRecordMapper.selectNoaffirm(LocalDate.now()); + + for (FeTempHumRecordDto feTempHumRecord : feTempHumRecordList) { + + // 鍙戦�佷紒涓氬井淇¢�氱煡 + threadPoolTaskExecutor.execute(() -> { + // 鏌ヨ鎺ユ敹浜� + User personnel = userMapper.selectById(feTempHumRecord.getRegistrarUserId()); + + String message = ""; + message += "娓╂箍搴﹁褰曠‘璁ら�氱煡"; + message += "\n璇峰幓璧勬簮绠$悊-璁炬柦鍜岀幆澧冩俯搴︿竴娓╂箍搴﹁褰�"; + message += StrUtil.format("\n瀹為獙瀹ゅ尯鍩�: {}", feTempHumRecord.getTestAreaName()); + //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡 + try { + WxCpUtils.inform(personnel.getAccount(), message, null); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + + } + + } + + + /** + * 鏍规嵁瀹為獙瀹ょ紪鍙疯幏鍙栨俯搴︽箍搴� + * + * @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; + } + } +} -- Gitblit v1.9.3