From aaf92e5b1b1d4f6def45fc77e4cf82ee7cfd2bb1 Mon Sep 17 00:00:00 2001 From: qiezi <15576055375@163.com> Date: Fri, 19 Jul 2024 13:08:55 +0800 Subject: [PATCH] 2024-06-21 --- .../impl/CollectDetailServiceImpl.java | 1 + .../impl/CollectRecordServiceImpl.java | 87 ++++++++++++++++--- .../modules/cdc/task/GatherDataTask.java | 31 +------ .../modules/cdc/utils/CollectUtils.java | 2 + 4 files changed, 80 insertions(+), 41 deletions(-) diff --git a/src/main/java/com/spring/modules/cdc/service/impl/CollectDetailServiceImpl.java b/src/main/java/com/spring/modules/cdc/service/impl/CollectDetailServiceImpl.java index 66957d2e..79f38c6a 100644 --- a/src/main/java/com/spring/modules/cdc/service/impl/CollectDetailServiceImpl.java +++ b/src/main/java/com/spring/modules/cdc/service/impl/CollectDetailServiceImpl.java @@ -35,6 +35,7 @@ public class CollectDetailServiceImpl extends ServiceImpl implements ICollectRecordService { @Autowired private ICollectService collectService; + @Autowired + private ICDCBaseDataService baseDataService; + @Autowired + private ICollectDetailService collectDetailService; + + @Autowired + private IMailConfigService mailConfigService; + @Autowired + private IMobileService mobileService; @Override public List selectCollectRecordList(CollectRecord collectRecord) { @@ -77,20 +85,73 @@ public class CollectRecordServiceImpl extends ServiceImpl> map = deviceVoList.stream().collect(Collectors.groupingBy(DeviceVo::getCollectId)); Map> collect = collectService.lambdaQuery().in(Collect::getCollectId, map.keySet()).list().stream().collect(Collectors.groupingBy(Collect::getCollectId)); + // 获取base日期 + CdcBaseData baseData = baseDataService.lambdaQuery().eq(CdcBaseData::getBaseNo, "last_send_time").one(); + BigDecimal time = baseData.getNumValue();// 默认为秒 for (String collectId : map.keySet()) { List deviceVos = map.get(collectId); List collects = collect.get(collectId); // 设备信息集合 - List list = new ArrayList<>(); + List list = new ArrayList<>(); + Date lastSendTime = collects.get(0).getLastSendTime(); for (DeviceVo deviceVo : deviceVos) { CollectRecordVo collectRecord = getCollectRecord(deviceVo, collects, deviceVo.getValue()); - list.add(collectRecord); updateCollectCurrentValue(collectRecord); save(collectRecord); + // 如果没有发送过数据 或者 距离上次发送时间大于设定的时间间隔 + if (Objects.isNull(lastSendTime) || lastSendTime.before(new Date(System.currentTimeMillis() - time.multiply(new BigDecimal(1000)).longValue()))){ + // 可以发送短信 + // 数据校验 需要发送短信的设备 +// if (deviceVo.getValue().compareTo(collectRecord.getMaxValue()) >= 0 || deviceVo.getValue().compareTo(collectRecord.getMinValue()) <= 0){ + if (deviceVo.getValue().compareTo(collectRecord.getMaxValue()) >= 0){ + list.add(deviceVo); + } + } } - // 处理 短信 + sendMessage(list, collects.get(0)); + } + } - // 处理 邮件 + private void sendMessage(List list, Collect collects) { + if (!list.isEmpty()){ + // 发送短信和邮件 + StringBuilder mobileStr = new StringBuilder("【数据采集】"); + StringBuilder mailStr = new StringBuilder(); + mobileStr.append("\n"); + List detailList = collectDetailService.lambdaQuery().eq(CollectDetail::getCollectId, collects.getCollectId()).eq(CollectDetail::getSite, collects.getSite()).eq(CollectDetail::getActive, "Y").list(); + DecimalFormat df = new DecimalFormat("#.######"); + mobileStr.append(collects.getCollectDesc()).append(":").append("上限:").append(df.format(collects.getMaxValue().doubleValue())).append("\n"); + mailStr.append(collects.getCollectDesc()).append(":").append("上限:").append(df.format(collects.getMaxValue().doubleValue())).append("\n"); + for (int i = 0; i < list.size(); i++) { + DeviceVo deviceVo = list.get(i); + mobileStr.append(i+1).append("、").append(deviceVo.getDeviceDesc()).append("当前采集值为:").append(deviceVo.getValue()).append("\n"); + mailStr.append(i+1).append("、").append(deviceVo.getDeviceDesc()).append("当前采集值为:").append(deviceVo.getValue()).append("\n"); + } + Map> listMap = detailList.stream().collect(Collectors.groupingBy(CollectDetail::getType)); + List mobileList = listMap.get("phone"); + List mailList = listMap.get("mail"); + if (Objects.nonNull(mailList) && !mailList.isEmpty() && "Y".equals(collects.getMailInfoFlag())){ + Set mail = mailList.stream().map(CollectDetail::getItemValue).collect(Collectors.toSet()); + try { + mailConfigService.send(mail.toArray(new String[mail.size()]),"数据采集",mailStr.toString(),1); + } catch (MessagingException | UnsupportedEncodingException e) { + log.info("发送短信错误!"+e.getMessage()); +// throw new RuntimeException(e); + } + } + if (Objects.nonNull(mobileList) && !mobileList.isEmpty() && "Y".equals(collects.getPhoneInfoFlag())){ + Set mobile = mobileList.stream().map(CollectDetail::getItemValue).collect(Collectors.toSet()); + for (String s : mobile) { + mobileService.send(s,mobileStr.toString()); + } + } + if (!detailList.isEmpty()){ + collectService.lambdaUpdate() + .set(Collect::getLastSendTime, new Date()) + .eq(Collect::getCollectId, collects.getCollectId()) + .eq(Collect::getSite, collects.getSite()) + .update(); + } } } diff --git a/src/main/java/com/spring/modules/cdc/task/GatherDataTask.java b/src/main/java/com/spring/modules/cdc/task/GatherDataTask.java index 32572b92..24fd532a 100644 --- a/src/main/java/com/spring/modules/cdc/task/GatherDataTask.java +++ b/src/main/java/com/spring/modules/cdc/task/GatherDataTask.java @@ -56,14 +56,6 @@ public class GatherDataTask { private IDeviceService deviceService; @Autowired private ICollectRecordService collectRecordService; - @Autowired - private ICollectService collectService; - @Autowired - private ICDCBaseDataService baseDataService; - @Autowired - private IMailConfigService mailConfigService; - @Autowired - private IMobileService mobileService; @Scheduled(cron = "${task.data.initGather}") @@ -85,7 +77,7 @@ public class GatherDataTask { for (String ip : map.keySet()) { List deviceList = map.get(ip); if (ip.equals(line1IP)){ - List readXMZValueList = CollectUtils.getReadXMZValueList(deviceList, ip, new BigDecimal(line1Value)); + List readXMZValueList = CollectUtils.getReadS7XMZValueList(deviceList, ip, new BigDecimal(line1Value)); deviceVos.addAll(readXMZValueList); log.info("大线:{}",readXMZValueList.stream().map(DeviceVo::getValue).collect(Collectors.toList())); }else if (ip.equals(line2IP)){ @@ -100,26 +92,9 @@ public class GatherDataTask { log.info("数据有误!!!"); } } - log.info("数据采集完成:总条数{}",deviceVos.size()); collectRecordService.batchUpdateCollectRecord(deviceVos); -// // 获取 所有 Collect 记录 -// List collectList = collectService.lambdaQuery().list(); -// // 获取base日期 -// CdcBaseData baseData = baseDataService.lambdaQuery().eq(CdcBaseData::getBaseNo, "last_send_time").one(); -// BigDecimal time = baseData.getNumValue();// 默认为秒 -// -// Map> collectMap = deviceVos.stream().collect(Collectors.groupingBy(DeviceVo::getCollectId)); -// for (String s : collectMap.keySet()) { -// List deviceVoList = collectMap.get(s); -// Optional optional = collectList.stream().filter(c -> c.getCollectId().equals(s)).findFirst(); -// Collect collect = optional.get(); -// Date lastSendTime = collect.getLastSendTime(); -// // 如果没有发送过数据 或者 距离上次发送时间大于设定的时间间隔 -// if (Objects.isNull(lastSendTime) || lastSendTime.before(new Date(System.currentTimeMillis() - time.multiply(new BigDecimal(1000)).longValue()))){ -// // 可以发送短信 -// // 数据校验 需要发送短信的设备 -// } -// } + log.info("数据采集完成:总条数{}",deviceVos.size()); + } // public void execute() { diff --git a/src/main/java/com/spring/modules/cdc/utils/CollectUtils.java b/src/main/java/com/spring/modules/cdc/utils/CollectUtils.java index 1b7b744f..ac1dd933 100644 --- a/src/main/java/com/spring/modules/cdc/utils/CollectUtils.java +++ b/src/main/java/com/spring/modules/cdc/utils/CollectUtils.java @@ -102,6 +102,7 @@ public class CollectUtils { S7Connector s7Connector = S7ConnectorFactory .buildTCPConnector() .withHost(IP) + .withPort(102) .withRack(0) .withSlot(1) .build(); @@ -113,6 +114,7 @@ public class CollectUtils { deviceVoList.add(new DeviceVo(device, new BigDecimal(i),device.getCollectId())); log.info("设备:{} 读取值:{}", device.getDeviceDesc(), i); } + s7Connector.close(); }catch (Exception e){ log.info("IP:{} 连接失败!!!", IP); log.info("设置默认值:{}",defaultValue);