From 3e7feed921b49ea6aac468608cc808d0515853fa Mon Sep 17 00:00:00 2001 From: huangfeng Date: Thu, 1 Feb 2024 10:10:48 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A4=84=E7=90=86excel=E7=9A=84?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E4=BF=9D=E5=AD=98=E5=88=B0=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/xydl/cac/entity/NPoint.java | 5 ++- .../java/com/xydl/cac/entity/NSensor.java | 16 +++++++ .../xydl/cac/entity/constants/Constants.java | 6 +++ .../com/xydl/cac/excel/CacExcelListener.java | 45 ++++++++++++------- .../xydl/cac/repository/NPointRepository.java | 4 +- .../cac/repository/NSensorRepository.java | 5 ++- .../com/xydl/cac/service/NSensorService.java | 3 ++ .../cac/service/impl/NSensorServiceImpl.java | 28 ++++++++++++ .../cac/service/impl/ReportServiceImpl.java | 7 ++- 9 files changed, 98 insertions(+), 21 deletions(-) create mode 100644 src/main/java/com/xydl/cac/entity/constants/Constants.java diff --git a/src/main/java/com/xydl/cac/entity/NPoint.java b/src/main/java/com/xydl/cac/entity/NPoint.java index a3951c9..fd456bc 100644 --- a/src/main/java/com/xydl/cac/entity/NPoint.java +++ b/src/main/java/com/xydl/cac/entity/NPoint.java @@ -31,7 +31,7 @@ public class NPoint { @ApiModelProperty("sensor表的id") @Column(name = "sensor_id") - private String sensorId; + private Integer sensorId; @ApiModelProperty("对应tablename表的字段名") @Column(name = "field") @@ -49,5 +49,8 @@ public class NPoint { @Column(name = "type") private Integer type; + @Transient + private int row; + } \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/entity/NSensor.java b/src/main/java/com/xydl/cac/entity/NSensor.java index 534e234..bd6c0b6 100644 --- a/src/main/java/com/xydl/cac/entity/NSensor.java +++ b/src/main/java/com/xydl/cac/entity/NSensor.java @@ -8,6 +8,8 @@ import lombok.Data; import lombok.NoArgsConstructor; import javax.persistence.*; +import java.util.ArrayList; +import java.util.List; /** * @author jignjing @@ -51,4 +53,18 @@ public class NSensor { @Column(name = "status") private Integer status; + @Transient + private List points; + + public void addPoint(NPoint point) { + if (points == null) { + points = new ArrayList<>(); + } + for (NPoint item : points) { + if (item.getField().equalsIgnoreCase(point.getField())) { + throw new RuntimeException("第" + point.getRow() + "行和第" + item.getRow() + "行存在重复字段"); + } + } + points.add(point); + } } \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/entity/constants/Constants.java b/src/main/java/com/xydl/cac/entity/constants/Constants.java new file mode 100644 index 0000000..2812a0b --- /dev/null +++ b/src/main/java/com/xydl/cac/entity/constants/Constants.java @@ -0,0 +1,6 @@ +package com.xydl.cac.entity.constants; + +public class Constants { + public static final Integer NORMAL = 1; + public static final Integer DELETE = 0; +} diff --git a/src/main/java/com/xydl/cac/excel/CacExcelListener.java b/src/main/java/com/xydl/cac/excel/CacExcelListener.java index 498f6c9..2bbc92a 100644 --- a/src/main/java/com/xydl/cac/excel/CacExcelListener.java +++ b/src/main/java/com/xydl/cac/excel/CacExcelListener.java @@ -2,42 +2,47 @@ package com.xydl.cac.excel; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; -import com.xydl.cac.entity.NiecSensor; +import com.xydl.cac.entity.NPoint; +import com.xydl.cac.entity.NSensor; +import com.xydl.cac.entity.constants.Constants; +import com.xydl.cac.service.NSensorService; import org.apache.commons.lang3.StringUtils; -import java.util.ArrayList; import java.util.LinkedHashMap; -import java.util.List; public class CacExcelListener extends AnalysisEventListener { - List list = new ArrayList<>(); + NSensorService nSensorService; int base = 16385; int type; - LinkedHashMap sensorList = new LinkedHashMap<>(); + LinkedHashMap sensorList = new LinkedHashMap<>(); + + public CacExcelListener(NSensorService service) { + nSensorService = service; + } @Override public void invoke(CacLine line, AnalysisContext analysisContext) { - int row = analysisContext.readRowHolder().getRowIndex(); - if (row > 1) { + int rowidx = analysisContext.readRowHolder().getRowIndex(); + if (rowidx > 1) { if (line.getPointId().contains("遥测")) { type = 0; } else if (line.getPointId().contains("遥信")) { type = 1; } else { - processDate(line, row + 1); + processLine(line, rowidx + 1); } } } - private void processDate(CacLine line, int row) { - if (StringUtils.isNotBlank(line.getSensorCode())) { - NiecSensor sensor = sensorList.get(line.getSensorCode()); + private void processLine(CacLine line, int row) { + if (StringUtils.isNotBlank(line.getSensorCode()) && StringUtils.isNotBlank(line.getField())) { + NSensor sensor = sensorList.get(line.getSensorCode()); if (sensor == null) { - sensor = new NiecSensor(); + sensor = new NSensor(); sensor.setSensorCode(line.getSensorCode()); - Integer pointId = Integer.parseInt(line.getPointId()) + base; + if (StringUtils.isBlank(line.getEquipmentCode())) { throw new RuntimeException("第" + row + "行的被监测设备的唯一标识不能为空"); } @@ -51,19 +56,29 @@ public class CacExcelListener extends AnalysisEventListener { } else { sensor.setName(line.getLongName()); } + sensor.setPhase(line.getPhase()); + sensor.setStatus(Constants.NORMAL); sensorList.put(line.getSensorCode(), sensor); } + Integer pointId = Integer.parseInt(line.getPointId()) + base; if (StringUtils.isBlank(line.getField())) { throw new RuntimeException("第" + row + "行的字段名不能为空"); } - list.add(line); + NPoint point = NPoint.builder() + .pointId(pointId) + .field(line.getField()) + .fieldDesc(line.getFieldDesc()) + .type(type) + .row(row) + .build(); + sensor.addPoint(point); } } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { - + nSensorService.importFrom(sensorList.values()); } } diff --git a/src/main/java/com/xydl/cac/repository/NPointRepository.java b/src/main/java/com/xydl/cac/repository/NPointRepository.java index a896c05..95cf4fd 100644 --- a/src/main/java/com/xydl/cac/repository/NPointRepository.java +++ b/src/main/java/com/xydl/cac/repository/NPointRepository.java @@ -5,11 +5,11 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.stereotype.Repository; -import java.util.Optional; +import java.util.List; @Repository public interface NPointRepository extends JpaRepository, JpaSpecificationExecutor { - Optional findById(Integer id); + List findBySensorIdAndField(Integer sensorId, String field); } \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/repository/NSensorRepository.java b/src/main/java/com/xydl/cac/repository/NSensorRepository.java index 035226b..26892a7 100644 --- a/src/main/java/com/xydl/cac/repository/NSensorRepository.java +++ b/src/main/java/com/xydl/cac/repository/NSensorRepository.java @@ -5,11 +5,12 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.stereotype.Repository; -import java.util.Optional; +import java.util.List; @Repository public interface NSensorRepository extends JpaRepository, JpaSpecificationExecutor { - Optional findById(Integer id); + List findBySensorCode(String sensorCode); + } \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/service/NSensorService.java b/src/main/java/com/xydl/cac/service/NSensorService.java index 9d4c1f2..f5d2d0d 100644 --- a/src/main/java/com/xydl/cac/service/NSensorService.java +++ b/src/main/java/com/xydl/cac/service/NSensorService.java @@ -3,6 +3,7 @@ package com.xydl.cac.service; import com.xydl.cac.entity.NSensor; import org.springframework.data.domain.Page; +import java.util.Collection; import java.util.List; public interface NSensorService { @@ -18,4 +19,6 @@ public interface NSensorService { NSensor detail(Integer id) throws Exception; + void importFrom(Collection collection); + } diff --git a/src/main/java/com/xydl/cac/service/impl/NSensorServiceImpl.java b/src/main/java/com/xydl/cac/service/impl/NSensorServiceImpl.java index 7472f0d..7d6d36c 100644 --- a/src/main/java/com/xydl/cac/service/impl/NSensorServiceImpl.java +++ b/src/main/java/com/xydl/cac/service/impl/NSensorServiceImpl.java @@ -1,6 +1,8 @@ package com.xydl.cac.service.impl; +import com.xydl.cac.entity.NPoint; import com.xydl.cac.entity.NSensor; +import com.xydl.cac.repository.NPointRepository; import com.xydl.cac.repository.NSensorRepository; import com.xydl.cac.service.NSensorService; import lombok.extern.slf4j.Slf4j; @@ -8,8 +10,10 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import javax.annotation.Resource; +import java.util.Collection; import java.util.List; import java.util.Optional; @@ -19,6 +23,8 @@ import java.util.Optional; public class NSensorServiceImpl implements NSensorService { @Resource NSensorRepository repository; + @Resource + NPointRepository pointRepository; @Override public List listAll() { @@ -58,4 +64,26 @@ public class NSensorServiceImpl implements NSensorService { return optional.get(); } + @Override + public void importFrom(Collection collection) { + for (NSensor item : collection) { + List list = repository.findBySensorCode(item.getSensorCode()); + if (!CollectionUtils.isEmpty(list)) { + item.setId(list.get(0).getId()); + } + repository.save(item); + List points = item.getPoints(); + if (points != null) { + for (NPoint point : points) { + point.setSensorId(item.getId()); + List plist = pointRepository.findBySensorIdAndField(item.getId(), point.getField()); + if (!CollectionUtils.isEmpty(list)) { + point.setId(plist.get(0).getId()); + } + pointRepository.save(point); + } + } + } + } + } diff --git a/src/main/java/com/xydl/cac/service/impl/ReportServiceImpl.java b/src/main/java/com/xydl/cac/service/impl/ReportServiceImpl.java index 5500f8d..f8ae114 100644 --- a/src/main/java/com/xydl/cac/service/impl/ReportServiceImpl.java +++ b/src/main/java/com/xydl/cac/service/impl/ReportServiceImpl.java @@ -8,11 +8,13 @@ import com.xydl.cac.entity.NiecPoint; import com.xydl.cac.excel.CacExcelListener; import com.xydl.cac.excel.CacLine; import com.xydl.cac.model.SensorDetail; +import com.xydl.cac.service.NSensorService; import com.xydl.cac.service.ReportService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; @@ -24,6 +26,9 @@ import java.util.Map; @Transactional(rollbackFor = Exception.class) public class ReportServiceImpl implements ReportService { + @Resource + NSensorService nSensorService; + @Override public void exportSensor(SensorDetail> detail, OutputStream output) throws Exception { List> heads = new ArrayList<>(); @@ -65,7 +70,7 @@ public class ReportServiceImpl implements ReportService { @Override public void importCac(InputStream input) throws Exception { - CacExcelListener listener = new CacExcelListener(); + CacExcelListener listener = new CacExcelListener(nSensorService); EasyExcel.read(input, CacLine.class, listener) .sheet(0) .doRead();