diff --git a/src/main/java/com/xujie/sys/common/utils/TaskUtils.java b/src/main/java/com/xujie/sys/common/utils/TaskUtils.java index c81d1504..699cd92b 100644 --- a/src/main/java/com/xujie/sys/common/utils/TaskUtils.java +++ b/src/main/java/com/xujie/sys/common/utils/TaskUtils.java @@ -30,15 +30,17 @@ public class TaskUtils { eamService.eamWorkPlanTask(); } - //添加定時任務 +// 添加定時任務 @Scheduled(cron = "${task.data.getExcelInformation}" ) //每五秒执行 读取文件数据 public void getExcel(){ getInformationForExcelService.saveByExcel(); } //添加定時任務 -// @Scheduled(cron = "${task.data.modbusCommunicate}" ) //每五秒执行 读取文件数据 -// public void getModbus(){ -// modbusCommunicateService.getInfoByModbus(); -// } + @Scheduled(cron = "${task.data.modbusCommunicate}" ) //每五秒执行 读取文件数据 + public void getModbus(){ + modbusCommunicateService.getInfoByModbus(); + } + + } diff --git a/src/main/java/com/xujie/sys/modules/reader/entity/EquipmentDataDetail.java b/src/main/java/com/xujie/sys/modules/reader/entity/EquipmentDataDetail.java index 208582a1..ae0696fd 100644 --- a/src/main/java/com/xujie/sys/modules/reader/entity/EquipmentDataDetail.java +++ b/src/main/java/com/xujie/sys/modules/reader/entity/EquipmentDataDetail.java @@ -40,4 +40,6 @@ public class EquipmentDataDetail { private String fileValue1; //第几住数据 private int groupValue; + + private String inspectionNo; } diff --git a/src/main/java/com/xujie/sys/modules/reader/service/impl/GetInformationForExcelServiceImpl.java b/src/main/java/com/xujie/sys/modules/reader/service/impl/GetInformationForExcelServiceImpl.java index 1b634789..973325d6 100644 --- a/src/main/java/com/xujie/sys/modules/reader/service/impl/GetInformationForExcelServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/reader/service/impl/GetInformationForExcelServiceImpl.java @@ -525,7 +525,7 @@ public class GetInformationForExcelServiceImpl extends ServiceImpl equipmentDataDetails) { //如果需要新增的数量小于一百就直接新增,大于一百就做线程池新增 - if (equipmentDataDetails.size() < 100) { + if (equipmentDataDetails.size() < 80) { //批量新增 getInformationForExcelMapper.saveByExcels(equipmentDataDetails); } else { diff --git a/src/main/java/com/xujie/sys/modules/reader/service/impl/ModbusCommunicateServiceImpl.java b/src/main/java/com/xujie/sys/modules/reader/service/impl/ModbusCommunicateServiceImpl.java index 07e2290f..0d590bcf 100644 --- a/src/main/java/com/xujie/sys/modules/reader/service/impl/ModbusCommunicateServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/reader/service/impl/ModbusCommunicateServiceImpl.java @@ -5,30 +5,45 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ghgande.j2mod.modbus.io.ModbusTCPTransaction; import com.ghgande.j2mod.modbus.msg.ReadMultipleRegistersRequest; import com.ghgande.j2mod.modbus.msg.ReadMultipleRegistersResponse; +import com.ghgande.j2mod.modbus.msg.WriteMultipleRegistersRequest; import com.ghgande.j2mod.modbus.net.TCPMasterConnection; import com.ghgande.j2mod.modbus.procimg.InputRegister; +import com.ghgande.j2mod.modbus.procimg.Register; +import com.ghgande.j2mod.modbus.procimg.SimpleRegister; +import com.xujie.sys.modules.reader.dao.GetInformationForExcelMapper; import com.xujie.sys.modules.reader.dao.ModbusCommunicateMapper; +import com.xujie.sys.modules.reader.entity.EquipmentDataDetail; import com.xujie.sys.modules.reader.entity.EquipmentFolderLocation; import com.xujie.sys.modules.reader.entity.ModbusCommunicateEntity; import com.xujie.sys.modules.reader.service.EquipmentFolderLocationService; +import com.xujie.sys.modules.reader.service.GetInformationForExcelService; import com.xujie.sys.modules.reader.service.ModbusCommunicateService; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.net.InetAddress; import java.nio.charset.StandardCharsets; import java.util.ArrayList; +import java.util.Date; import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; @Service @Slf4j public class ModbusCommunicateServiceImpl extends ServiceImpl implements ModbusCommunicateService { @Autowired - private ModbusCommunicateMapper modbusCommunicateMapper; + private GetInformationForExcelMapper getInformationForExcelMapper; @Autowired private EquipmentFolderLocationService equipmentFolderLocationService; + @Autowired + private GetInformationForExcelService getInformationForExcelService; @Override @@ -37,7 +52,6 @@ public class ModbusCommunicateServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(EquipmentFolderLocation::getSuffix, "PLC"); EquipmentFolderLocation folderLocation = equipmentFolderLocationService.getOne(queryWrapper); - ModbusCommunicateEntity one = this.getOne(new LambdaQueryWrapper<>()); if (one == null) { log.info("设备信息未填"); @@ -55,12 +69,54 @@ public class ModbusCommunicateServiceImpl extends ServiceImpl floatValue = getValue(modbusIp, modbusPort, registerAddress, registerNum, unitId); + log.info("最终获取的数据是: {}" ,floatValue); + //判断这个批次号应该是多少 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(EquipmentDataDetail::getBuNo, folderLocation.getBuNo()); + query.eq(EquipmentDataDetail::getSite, folderLocation.getSite()); + query.eq(EquipmentDataDetail::getFileNo, folderLocation.getEquipmentNo()) + .orderByAsc(EquipmentDataDetail::getBatchNo); + List equipments = getInformationForExcelService.list(query); + Integer batchNo; + if (CollectionUtils.isEmpty(equipments)) { + batchNo = 1; + } else { + Date createDate = equipments.get(equipments.size() - 1).getCreateDate();//获取最近新增一条信息的时间 + Date date = new Date(); + if (StringUtils.isEmpty(folderLocation.getBatchDate())) { + folderLocation.setBatchDate("1"); + } + int time = Integer.parseInt(folderLocation.getBatchDate()); + Long finalTime = date.getTime() - createDate.getTime(); + if (finalTime / 1000 > time) { + batchNo = equipments.get(equipments.size() - 1).getBatchNo() + 1; + } else { + batchNo = equipments.get(equipments.size() - 1).getBatchNo(); + } + } - List value = getValue(modbusIp, modbusPort, registerAddress, registerNum, unitId); - log.info("最终获取的数据是: {}" ,value); + List detailList = new ArrayList<>(); + for (Float aFloat : floatValue) { + EquipmentDataDetail equipmentDataDetail = new EquipmentDataDetail(); + equipmentDataDetail.setInspectionNo(inspectionOrderNumber); + equipmentDataDetail.setValue0(aFloat.toString()); + equipmentDataDetail.setCreateDate(new Date()); + equipmentDataDetail.setSite(folderLocation.getSite()); + equipmentDataDetail.setEquipmentNo(folderLocation.getEquipmentNo()); + equipmentDataDetail.setBuNo(folderLocation.getBuNo()); + equipmentDataDetail.setBatchNo(batchNo); + detailList.add(equipmentDataDetail); + } + saveInformation(detailList); } //获取具体值 + @Transactional public List getValue(String modbusIp, int modbusPort, int registerAddress, int registerNum, int unitId) { log.info("modbus请求开始解析"); // String modbusIp = "172.26.58.222"; @@ -110,6 +166,17 @@ public class ModbusCommunicateServiceImpl extends ServiceImpl equipmentDataDetails) { + //如果需要新增的数量小于一百就直接新增,大于一百就做线程池新增 + if (equipmentDataDetails.size() < 80) { + //批量新增 + getInformationForExcelMapper.saveByExcels(equipmentDataDetails); + } else { + + // 创建一个固定大小的线程池,这里假设有10个线程 + ExecutorService executor = Executors.newFixedThreadPool(equipmentDataDetails.size() / 80); + int startList = 0; + int endList = 80; + + for (int i = startList; i < equipmentDataDetails.size(); i = startList) { + if (endList > equipmentDataDetails.size()) { + endList = equipmentDataDetails.size(); + } + List details = equipmentDataDetails.subList(startList, endList); + executor.execute(() -> { + //批量新增 + getInformationForExcelMapper.saveByExcels(details); + }); + startList = startList + 80; + endList = endList + 80; + } + executor.shutdown(); + try { + executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS); // 等待所有任务完成 + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + // 处理中断异常 + } + } + } + + } \ No newline at end of file diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index ddbfb8e7..b9d55451 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -47,7 +47,7 @@ task: site: 2,3 #事业部 eamWorkPlanTime: 0 0 0 * * ? #点检、维保计划自动生成,每天0点执行 getExcelInformation: 0/30 * * * * ? #每三十秒读取一次文件 - modbusCommunicate: 0/10 * * * * ? #获取modbus数据 + modbusCommunicate: 0/30 * * * * ? #获取modbus数据 #--------------------------------------------接口地址和开关控制------------------------------------------------- diff --git a/src/main/resources/mapper/reader/GetInformationForExcelMapper.xml b/src/main/resources/mapper/reader/GetInformationForExcelMapper.xml index 2c764172..7409f5e4 100644 --- a/src/main/resources/mapper/reader/GetInformationForExcelMapper.xml +++ b/src/main/resources/mapper/reader/GetInformationForExcelMapper.xml @@ -24,12 +24,13 @@ + - insert into Equipment_data_detail(site,bu_no,equipment_no,item_no,value0,value1,value2,value3,value4,value5,value6,value7,value8,value9,create_date,create_by,batch_no,file_no,photo_value1,num,file_value1,group_value) + insert into Equipment_data_detail(site,bu_no,equipment_no,item_no,value0,value1,value2,value3,value4,value5,value6,value7,value8,value9,create_date,create_by,batch_no,file_no,photo_value1,num,file_value1,group_value,inspection_no) values - (#{item.site},#{item.buNo},#{item.equipmentNo},#{item.itemNo},#{item.value0},#{item.value1},#{item.value2},#{item.value3},#{item.value4},#{item.value5},#{item.value6},#{item.value7},#{item.value8},#{item.value9},#{item.createDate},#{item.createBy},#{item.batchNo},#{item.fileNo},#{item.photoValue1},#{item.num},#{item.fileValue1},#{item.groupValue}) + (#{item.site},#{item.buNo},#{item.equipmentNo},#{item.itemNo},#{item.value0},#{item.value1},#{item.value2},#{item.value3},#{item.value4},#{item.value5},#{item.value6},#{item.value7},#{item.value8},#{item.value9},#{item.createDate},#{item.createBy},#{item.batchNo},#{item.fileNo},#{item.photoValue1},#{item.num},#{item.fileValue1},#{item.groupValue},#{item.inspectionNo})