Browse Source

2024-06-14

master
zelian_wu 2 years ago
parent
commit
4cb222a312
  1. 5
      pom.xml
  2. 3
      src/main/java/com/spring/modules/cdc/controller/CollectRecordController.java
  3. 2
      src/main/java/com/spring/modules/cdc/mapper/CollectRecordMapper.java
  4. 2
      src/main/java/com/spring/modules/cdc/service/ICollectRecordService.java
  5. 5
      src/main/java/com/spring/modules/cdc/service/impl/CollectRecordServiceImpl.java
  6. 243
      src/main/java/com/spring/modules/cdc/task/GatherDataTask.java
  7. 33
      src/main/java/com/spring/modules/cdc/utils/CollectUtils.java
  8. 15
      src/main/resources/application-dev.yml
  9. 23
      src/main/resources/mapper/cdc/collectRecordMapper.xml

5
pom.xml

@ -322,6 +322,11 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>com.github.dathlin</groupId>
<artifactId>HslCommunication</artifactId>
<version>3.7.0</version>
</dependency>
</dependencies>
<build>

3
src/main/java/com/spring/modules/cdc/controller/CollectRecordController.java

@ -10,6 +10,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
import java.util.List;
@RestController
@ -29,7 +30,7 @@ public class CollectRecordController {
@PostMapping("/list/item")
public R listItem(@RequestBody CollectRecord collectRecord){
List<CollectRecord> list = collectRecordService.selectCollectRecordListByItemNo(collectRecord);
return R.ok().put("rows", list);
return R.ok().put("rows", list).put("time",new Date().getTime());
}
@PostMapping("/save")

2
src/main/java/com/spring/modules/cdc/mapper/CollectRecordMapper.java

@ -12,4 +12,6 @@ public interface CollectRecordMapper extends BaseMapper<CollectRecord> {
List<CollectRecord> selectCollectRecordList(CollectRecord collectRecord);
List<CollectRecord> selectCollectRecordListByItemNo(CollectRecord collectRecord);
void updateCollectCurrentValue(CollectRecord collectRecord);
}

2
src/main/java/com/spring/modules/cdc/service/ICollectRecordService.java

@ -15,4 +15,6 @@ public interface ICollectRecordService extends IService<CollectRecord> {
void updateCollectRecord(CollectRecord collectRecord);
void deleteCollectRecord(CollectRecord collectRecord);
void updateCollectCurrentValue(CollectRecord collectRecord);
}

5
src/main/java/com/spring/modules/cdc/service/impl/CollectRecordServiceImpl.java

@ -56,6 +56,11 @@ public class CollectRecordServiceImpl extends ServiceImpl<CollectRecordMapper,Co
.remove();
}
@Override
public void updateCollectCurrentValue(CollectRecord collectRecord) {
baseMapper.updateCollectCurrentValue(collectRecord);
}
private void checkCollectRecord(CollectRecord collectRecord) {
if (StringUtils.isEmpty(collectRecord.getCollectId())){
throw new RuntimeException("数据标识ID不能为空");

243
src/main/java/com/spring/modules/cdc/task/GatherDataTask.java

@ -1,11 +1,18 @@
package com.spring.modules.cdc.task;
import HslCommunication.Core.Types.OperateResult;
import HslCommunication.Profinet.Melsec.MelsecMcNet;
import HslCommunication.Profinet.Siemens.SiemensPLCS;
import HslCommunication.Profinet.Siemens.SiemensS7Net;
import com.spring.modules.cdc.entity.Collect;
import com.spring.modules.cdc.entity.CollectDetail;
import com.spring.modules.cdc.entity.CollectRecord;
import com.spring.modules.cdc.entity.Device;
import com.spring.modules.cdc.service.*;
import com.spring.modules.cdc.utils.CollectUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
@ -13,6 +20,7 @@ import org.springframework.stereotype.Component;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
@ -27,6 +35,23 @@ import java.util.stream.Collectors;
@EnableScheduling
@Slf4j
public class GatherDataTask {
@Value("${collect.data.line1}")
private String line1IP;
@Value("${collect.data.line2}")
private String line2IP;
@Value("${collect.data.line3}")
private String line3IP;
@Value("${collect.data.line1Value}")
private int line1Value;
@Value("${collect.data.line2Value}")
private int line2Value;
@Value("${collect.data.line3Value}")
private int line3Value;
@Value("${task.flag}")
private boolean flag;
private static final String BASE_NO = "last_send_time";
@Autowired
private ICDCBaseDataService cdcBaseDataService;
@ -35,96 +60,184 @@ public class GatherDataTask {
@Autowired
private IDeviceService deviceService;
@Autowired
private ICollectRecordService collectRecordService;
@Autowired
private ICollectDetailService collectDetailService;
@Autowired
private IMailConfigService mailConfigService;
@Autowired
private IMobileService mobileService;
private final static String Line1 = "涂布机器-大线";
private final static String LineGC1 = "涂布机器-浓度-大线";
private final static String Line2 = "涂布机器-小线";
private final static String LineGC2 = "涂布机器-浓度-小线";
private final static String Line3 = "配胶间设备";
@Scheduled(cron = "${task.data.initGather}")
public void execute() {
if (!flag){
return;
}
// TODO: 这里可以写数据采集的逻辑
log.info("数据采集接口");
// 获取三种类型设备
List<Device> lineDeviceList1 = deviceService.lambdaQuery().like(Device::getDeviceType, Line1).eq(Device::getActive, "Y").list();
List<Device> lineDeviceList2 = deviceService.lambdaQuery().like(Device::getDeviceType, Line2).eq(Device::getActive, "Y").list();
List<Device> lineDeviceList3 = deviceService.lambdaQuery().like(Device::getDeviceType, Line3).eq(Device::getActive, "Y").list();
// 获取设备数值 报警信息
List<Collect> lineCollectList1 = collectService.lambdaQuery().like(Collect::getCollectDesc, Line1).eq(Collect::getActive, "Y").list();
List<Collect> lineCollectGCList1 = collectService.lambdaQuery().like(Collect::getCollectDesc, LineGC1).eq(Collect::getActive, "Y").list();
List<Collect> lineCollectList2 = collectService.lambdaQuery().like(Collect::getCollectDesc, Line2).eq(Collect::getActive, "Y").list();
List<Collect> lineCollectGCList2 = collectService.lambdaQuery().like(Collect::getCollectDesc, LineGC2).eq(Collect::getActive, "Y").list();
List<Collect> lineCollectList3 = collectService.lambdaQuery().like(Collect::getCollectDesc, Line3).eq(Collect::getActive, "Y").list();
List<Device> list = deviceService.lambdaQuery().eq(Device::getActive, "Y").list();
// 读取信息 每条线调用方式不同
// 1涂布设备-大线
// 2涂布设备-小线
// 3配妆间设备
Map<String, List<Device>> map = list.stream().collect(Collectors.groupingBy(Device::getDeviceAddress));
for (String ip : map.keySet()) {
if (ip.equals(line1IP)){
List<Device> deviceList = map.get(ip);
SiemensS7Net siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200,ip);
OperateResult connect = siemensS7Net.ConnectServer();
if (connect.IsSuccess) {
log.info("IP:{} 连接成功!!!",ip);
for (Device device : deviceList) {
List<Collect> c1 = collectService.lambdaQuery().in(Collect::getCollectDesc, device.getDeviceType()).eq(Collect::getActive, "Y").list();
int i = CollectUtils.readXMZValue(siemensS7Net, device.getDeviceAddress());
log.info("设备:{} 读取值:{}",device.getDeviceDesc(),i);
CollectRecord collectRecord = getCollectRecord(device, c1, i);
collectRecordService.insertCollectRecord(collectRecord);
collectRecordService.updateCollectCurrentValue(collectRecord);
}
}else {
log.info("IP:{} 连接失败",ip);
for (Device device : deviceList) {
List<Collect> c1 = collectService.lambdaQuery().in(Collect::getCollectDesc, device.getDeviceType()).eq(Collect::getActive, "Y").list();
// int i = CollectUtils.readSLValue(melsecMcNet, device.getDeviceAddress());
log.info("设备:{} 读取值:{}",device.getDeviceDesc(),line1Value);
CollectRecord collectRecord = getCollectRecord(device, c1, line1Value);
collectRecordService.insertCollectRecord(collectRecord);
collectRecordService.updateCollectCurrentValue(collectRecord);
}
}
}else if (ip.equals(line2IP)){
List<Device> deviceList = map.get(ip);
MelsecMcNet melsecMcNet = new MelsecMcNet(ip, 1010);
OperateResult connect = melsecMcNet.ConnectServer();
if (connect.IsSuccess) {
log.info("IP:{} 连接成功!!!",ip);
for (Device device : deviceList) {
List<Collect> c1 = collectService.lambdaQuery().in(Collect::getCollectDesc, device.getDeviceType()).eq(Collect::getActive, "Y").list();
int i = CollectUtils.readSLValue(melsecMcNet, device.getDeviceAddress());
log.info("设备:{} 读取值:{}",device.getDeviceDesc(),i);
CollectRecord collectRecord = getCollectRecord(device, c1, i);
collectRecordService.insertCollectRecord(collectRecord);
collectRecordService.updateCollectCurrentValue(collectRecord);
}
}else {
log.info("IP:{} 连接失败",ip);
for (Device device : deviceList) {
List<Collect> c1 = collectService.lambdaQuery().in(Collect::getCollectDesc, device.getDeviceType()).eq(Collect::getActive, "Y").list();
// int i = CollectUtils.readSLValue(melsecMcNet, device.getDeviceAddress());
log.info("设备:{} 读取值:{}",device.getDeviceDesc(),line2Value);
CollectRecord collectRecord = getCollectRecord(device, c1, line2Value);
collectRecordService.insertCollectRecord(collectRecord);
collectRecordService.updateCollectCurrentValue(collectRecord);
}
}
}else if (ip.equals(line3IP)){
List<Device> deviceList = map.get(ip);
MelsecMcNet melsecMcNet = new MelsecMcNet(ip, 1010);
OperateResult connect = melsecMcNet.ConnectServer();
if (connect.IsSuccess) {
log.info("IP:{} 连接成功!!!",ip);
for (Device device : deviceList) {
List<Collect> c1 = collectService.lambdaQuery().in(Collect::getCollectDesc, device.getDeviceType()).eq(Collect::getActive, "Y").list();
int i = CollectUtils.readSLValue(melsecMcNet, device.getDeviceAddress());
log.info("设备:{} 读取值:{}",device.getDeviceDesc(),i);
CollectRecord collectRecord = getCollectRecord(device, c1, i);
collectRecordService.insertCollectRecord(collectRecord);
collectRecordService.updateCollectCurrentValue(collectRecord);
}
}else {
log.info("IP:{} 连接失败",ip);
for (Device device : deviceList) {
List<Collect> c1 = collectService.lambdaQuery().in(Collect::getCollectDesc, device.getDeviceType()).eq(Collect::getActive, "Y").list();
// int i = CollectUtils.readSLValue(melsecMcNet, device.getDeviceAddress());
log.info("设备:{} 读取值:{}",device.getDeviceDesc(),line3Value);
CollectRecord collectRecord = getCollectRecord(device, c1, line3Value);
collectRecordService.insertCollectRecord(collectRecord);
collectRecordService.updateCollectCurrentValue(collectRecord);
}
}
}else {
log.info("不存在IP");
}
}
// 存储采集的数据
// 采集数据与设置数据对比
Date lastSendTime = lineCollectList1.get(0).getLastSendTime();
if (Objects.nonNull(lastSendTime)){
log.info("最终时间:{}", lastSendTime.toLocaleString());
// 校验短时间内是否发送给 邮件/短信
int time = cdcBaseDataService.getLongCdcBaseData(BASE_NO);
lastSendTime.setTime(lastSendTime.getTime() + (long) time * 60 * 1000);
// 最后一次发送时间 当前时间比较 是否大于当前时间
if (new Date().before(lastSendTime)){
// 记录信息 距离最后一次发送时间 在规定范围内,不发送短信
return;
}
}
// 达到预警情况下发送预警邮件,短信等
List<CollectDetail> detailList = collectDetailService
.lambdaQuery()
.eq(CollectDetail::getCollectId, lineCollectList1.get(0).getCollectId())
.eq(CollectDetail::getSite, lineCollectList1.get(0).getSite())
.list();
log.info("设置的 电话/邮箱 详情:{}", detailList);
// 处理结果集
Map<String, List<CollectDetail>> map = detailList.stream().collect(Collectors.groupingBy(CollectDetail::getType));
// 发送预警邮件,短信等
for (String s : map.keySet()) {
if ("mail".equals(s)){
// 发送邮件
List<String> mailList = map.get(s).stream().map(CollectDetail::getItemValue).collect(Collectors.toList());
log.info("发送邮件:{}", mailList);
if (mailList.isEmpty()){
continue;
}
// try {
// mailConfigService.send(mailList.toArray(new String[0]), "数据采集预警", "数据采集预警",1);
// } catch (MessagingException | UnsupportedEncodingException e) {
// log.error("发送邮件失败:{}", e.getMessage());
// throw new RuntimeException(e);
// }
}
if ("phone".equals(s)){
// 发送短信
// List<String> phoneList = map.get(s).stream().map(CollectDetail::getItemValue).collect(Collectors.toList());
// log.info("发送短信:{}", phoneList);
// if (phoneList.isEmpty()){
// Date lastSendTime = lineCollectList1.get(0).getLastSendTime();
// if (Objects.nonNull(lastSendTime)){
// log.info("最终时间:{}", lastSendTime.toLocaleString());
// // 校验短时间内是否发送给 邮件/短信
// int time = cdcBaseDataService.getLongCdcBaseData(BASE_NO);
// lastSendTime.setTime(lastSendTime.getTime() + (long) time * 60 * 1000);
// // 最后一次发送时间 当前时间比较 是否大于当前时间
// if (new Date().before(lastSendTime)){
// // 记录信息 距离最后一次发送时间 在规定范围内,不发送短信
// return;
// }
// }
//
// // 达到预警情况下发送预警邮件,短信等
// List<CollectDetail> detailList = collectDetailService
// .lambdaQuery()
// .eq(CollectDetail::getCollectId, lineCollectList1.get(0).getCollectId())
// .eq(CollectDetail::getSite, lineCollectList1.get(0).getSite())
// .list();
// log.info("设置的 电话/邮箱 详情:{}", detailList);
// // 处理结果集
// Map<String, List<CollectDetail>> map = detailList.stream().collect(Collectors.groupingBy(CollectDetail::getType));
// // 发送预警邮件,短信等
// for (String s : map.keySet()) {
// if ("mail".equals(s)){
// // 发送邮件
// List<String> mailList = map.get(s).stream().map(CollectDetail::getItemValue).collect(Collectors.toList());
// log.info("发送邮件:{}", mailList);
// if (mailList.isEmpty()){
// continue;
// }
// String[] array = phoneList.toArray(new String[0]);
// mobileService.send(String.join(",", array), "【数据采集预警】数据采集预警");
//// try {
//// mailConfigService.send(mailList.toArray(new String[0]), "数据采集预警", "数据采集预警",1);
//// } catch (MessagingException | UnsupportedEncodingException e) {
//// log.error("发送邮件失败:{}", e.getMessage());
//// throw new RuntimeException(e);
//// }
// }
// if ("phone".equals(s)){
// // 发送短信
//// List<String> phoneList = map.get(s).stream().map(CollectDetail::getItemValue).collect(Collectors.toList());
//// log.info("发送短信:{}", phoneList);
//// if (phoneList.isEmpty()){
//// continue;
//// }
//// String[] array = phoneList.toArray(new String[0]);
//// mobileService.send(String.join(",", array), "【数据采集预警】数据采集预警");
// }
// }
}
private static CollectRecord getCollectRecord(Device device, List<Collect> c1, int i) {
CollectRecord collectRecord = new CollectRecord();
collectRecord.setDeviceNo(device.getDeviceNo());
collectRecord.setCollectId(c1.get(0).getCollectId());
collectRecord.setItemValue(new BigDecimal(i));
collectRecord.setSite(device.getSite());
if (device.getDeviceType().contains("浓度")){
if (new BigDecimal(i).compareTo(c1.get(0).getMinValue()) < 0){
collectRecord.setWarnFlag("Y");
}
if (c1.get(0).getMaxValue().compareTo(new BigDecimal(i)) < 0){
collectRecord.setWarnFlag("Y");
}
}else {
if (c1.get(0).getMaxValue().compareTo(new BigDecimal(i)) < 0){
collectRecord.setWarnFlag("Y");
}
}
return collectRecord;
}
}

33
src/main/java/com/spring/modules/cdc/utils/CollectUtils.java

@ -0,0 +1,33 @@
package com.spring.modules.cdc.utils;
import HslCommunication.Core.Types.OperateResultExOne;
import HslCommunication.Profinet.Melsec.MelsecMcNet;
import HslCommunication.Profinet.Siemens.SiemensS7Net;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class CollectUtils {
public static int readSLValue(MelsecMcNet melsecMcNet, String address) {
OperateResultExOne<Short> readResult = melsecMcNet.ReadInt16(address);
if (readResult.IsSuccess) {
int value = readResult.Content;
return value;
} else {
System.out.println("读取失败: " + readResult.ToMessageShowString());
return -1;
}
}
public static int readXMZValue(SiemensS7Net siemensS7Net, String address) {
OperateResultExOne<Short> readResult = siemensS7Net.ReadInt16(address);
if (readResult.IsSuccess) {
int value = readResult.Content;
return value;
} else {
System.out.println("读取失败: " + readResult.ToMessageShowString());
return -1;
}
}
}

15
src/main/resources/application-dev.yml

@ -75,7 +75,18 @@ ccl-sms:
# 定时任务
task:
data:
initGather: 0 * * * * ? # 每分钟执行
initGather: 0/10 * * * * ? # 每分钟执行
# initGather: * * * 31 2 ? # 每分钟执行
flag: false
# 单点登录
login-token-url: 'http://192.168.1.160:8881/#/login-token'
login-token-url: 'http://192.168.1.160:8881/#/login-token'
collect:
data:
line1: 192.168.3.2
line2: 192.168.3.39
line3: 1
line1Value: 0
line2Value: 0
line3Value: 0

23
src/main/resources/mapper/cdc/collectRecordMapper.xml

@ -24,6 +24,22 @@
left join cdc_device_info di on cr.device_no = di.device_no and di.site = cr.site
left join cdc_collect_data cd on cr.collect_id = cd.collect_id and cr.site = cd.site
</sql>
<sql id="CollectCurrentValueVo">
select
cr.device_no,
di.device_desc,
di.device_type,
cr.collect_id,
cd.collect_desc,
cr.item_value,
cr.create_time,
cr.site,
cd.max_value,
cd.min_value
from cdc_collect_current_value cr
left join cdc_device_info di on cr.device_no = di.device_no and di.site = cr.site
left join cdc_collect_data cd on cr.collect_id = cd.collect_id and cr.site = cd.site
</sql>
@ -52,9 +68,8 @@
</select>
<select id="selectCollectRecordListByItemNo" resultType="com.spring.modules.cdc.entity.CollectRecord">
<include refid="CollectRecordVo"/>
<include refid="CollectCurrentValueVo"/>
<where>
and item_no = (select max(item_no) from cdc_collect_record)
<if test="site != null and site != ''">
and cr.site = #{site}
</if>
@ -69,4 +84,8 @@
</if>
</where>
</select>
<update id="updateCollectCurrentValue">
update cdc_collect_current_value set item_value = #{itemValue}, create_time = #{createTime} where device_no = #{deviceNo} and collect_id = #{collectId} and site = #{site}
</update>
</mapper>
Loading…
Cancel
Save