From b4842b444a54400611468b144b3c2e284fb77f32 Mon Sep 17 00:00:00 2001 From: huangfeng Date: Tue, 20 Feb 2024 15:46:21 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=AF=BC=E5=85=A5excel=E6=89=A9?= =?UTF-8?q?=E5=B1=95=E5=88=B0103=E8=A1=A8=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/xydl/cac/entity/N103Point.java | 58 +++++++++++++++++ .../java/com/xydl/cac/entity/N103Sensor.java | 57 +++++++++++++++++ .../com/xydl/cac/excel/CacExcelListener.java | 49 ++++++++++---- .../cac/repository/N103PointRepository.java | 17 +++++ .../cac/repository/N103SensorRepository.java | 15 +++++ .../xydl/cac/repository/NPointRepository.java | 2 + .../xydl/cac/service/N103PointService.java | 10 +++ .../xydl/cac/service/N103SensorService.java | 12 ++++ .../com/xydl/cac/service/NSensorService.java | 2 + .../service/impl/N103PointServiceImpl.java | 37 +++++++++++ .../service/impl/N103SensorServiceImpl.java | 64 +++++++++++++++++++ .../cac/service/impl/NSensorServiceImpl.java | 18 ++++-- .../cac/service/impl/ReportServiceImpl.java | 8 +-- 13 files changed, 326 insertions(+), 23 deletions(-) create mode 100644 src/main/java/com/xydl/cac/entity/N103Point.java create mode 100644 src/main/java/com/xydl/cac/entity/N103Sensor.java create mode 100644 src/main/java/com/xydl/cac/repository/N103PointRepository.java create mode 100644 src/main/java/com/xydl/cac/repository/N103SensorRepository.java create mode 100644 src/main/java/com/xydl/cac/service/N103PointService.java create mode 100644 src/main/java/com/xydl/cac/service/N103SensorService.java create mode 100644 src/main/java/com/xydl/cac/service/impl/N103PointServiceImpl.java create mode 100644 src/main/java/com/xydl/cac/service/impl/N103SensorServiceImpl.java diff --git a/src/main/java/com/xydl/cac/entity/N103Point.java b/src/main/java/com/xydl/cac/entity/N103Point.java new file mode 100644 index 0000000..fab8183 --- /dev/null +++ b/src/main/java/com/xydl/cac/entity/N103Point.java @@ -0,0 +1,58 @@ +package com.xydl.cac.entity; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.util.List; + +/** + * @author jignjing + * @date 2024-01-31 + **/ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "n_point") +@ApiModel("装置点表") +public class N103Point { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Integer id; + + @ApiModelProperty("NPoint表的id") + @Column(name = "npoint_id") + private Integer npointId; + + @ApiModelProperty("N103Sensor表的id") + @Column(name = "sensor_103_id") + private Integer sensor103Id; + + @ApiModelProperty("信息体地址") + @Column(name = "sadr") + private String sadr; + + @ApiModelProperty("条目号") + @Column(name = "item_no") + private String itemNo; + + @ApiModelProperty("61850对象参引") + @Column(name = "paramindex") + private String paramindex; + + @ApiModelProperty("名称后半部分") + @Column(name = "part_name") + private String partName; + + @Transient + NPoint nPoint; + +} \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/entity/N103Sensor.java b/src/main/java/com/xydl/cac/entity/N103Sensor.java new file mode 100644 index 0000000..80518bb --- /dev/null +++ b/src/main/java/com/xydl/cac/entity/N103Sensor.java @@ -0,0 +1,57 @@ +package com.xydl.cac.entity; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.util.ArrayList; +import java.util.List; + + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "n_103_sensor") +@ApiModel("装置和103关联表") +public class N103Sensor { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Integer id; + + @ApiModelProperty("关联表ID") + @Column(name = "nsensor_id") + private Integer nsensorId; + + @ApiModelProperty("组号") + @Column(name = "grp_no") + private Integer grpNo; + + @Transient + NSensor nSensor; + + @Transient + private List points; + + public String addPoint(N103Point point) { + if (points == null) { + points = new ArrayList<>(); + } + for (N103Point item : points) { + if (item.getNPoint().getField().equalsIgnoreCase(point.getNPoint().getField())) { + return "第" + point.getNPoint().getRow() + "行和第" + item.getNPoint().getRow() + + "行存在同一标识(" + nSensor.getSensorCode() + ")的相同字段(" + point.getNPoint().getField() + ")"; + } + } + points.add(point); + return null; + } + +} \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/excel/CacExcelListener.java b/src/main/java/com/xydl/cac/excel/CacExcelListener.java index c7349b5..edeea83 100644 --- a/src/main/java/com/xydl/cac/excel/CacExcelListener.java +++ b/src/main/java/com/xydl/cac/excel/CacExcelListener.java @@ -2,10 +2,12 @@ package com.xydl.cac.excel; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; +import com.xydl.cac.entity.N103Point; +import com.xydl.cac.entity.N103Sensor; 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 com.xydl.cac.service.N103SensorService; import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; @@ -18,14 +20,14 @@ import static com.xydl.cac.entity.constants.Constants.YaoXin; public class CacExcelListener extends AnalysisEventListener { - NSensorService nSensorService; + N103SensorService n103SensorService; int base = 16385; int type; - LinkedHashMap sensorList = new LinkedHashMap<>(); + LinkedHashMap sensorList = new LinkedHashMap<>(); List errorList = new ArrayList<>(); - public CacExcelListener(NSensorService service) { - nSensorService = service; + public CacExcelListener(N103SensorService service) { + n103SensorService = service; } @Override @@ -45,9 +47,9 @@ public class CacExcelListener extends AnalysisEventListener { 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 NSensor(); + N103Sensor sensor103 = sensorList.get(line.getSensorCode()); + if (sensor103 == null) { + NSensor sensor = new NSensor(); sensor.setSensorCode(line.getSensorCode()); if (StringUtils.isBlank(line.getEquipmentCode())) { @@ -60,8 +62,14 @@ public class CacExcelListener extends AnalysisEventListener { sensor.setTableName(line.getTableName()); if (StringUtils.isBlank(line.getDevid())) { errorList.add("第" + row + "行的装置ID不能为空"); + } else { + try { + sensor.setDevId(Integer.parseInt(line.getDevid())); + } catch (Exception ignore) { + errorList.add("第" + row + "行的装置ID不是正确的数字类型"); + } } - sensor.setDevId(Integer.parseInt(line.getDevid())); + if (StringUtils.isNotBlank(line.getParentName()) && StringUtils.isNotBlank(line.getShortName())) { sensor.setName(line.getParentName() + line.getShortName()); } else { @@ -69,7 +77,17 @@ public class CacExcelListener extends AnalysisEventListener { } sensor.setPhase(line.getPhase()); sensor.setStatus(Constants.NORMAL); - sensorList.put(line.getSensorCode(), sensor); + + sensor103 = new N103Sensor(); + sensor103.setNSensor(sensor); + if (StringUtils.isNotBlank(line.getGrpNo())) { + try { + sensor103.setGrpNo(Integer.parseInt(line.getGrpNo())); + } catch (Exception ignore) { + errorList.add("第" + row + "行的组号不是正确的数字类型"); + } + } + sensorList.put(line.getSensorCode(), sensor103); } @@ -84,7 +102,14 @@ public class CacExcelListener extends AnalysisEventListener { .type(type) .row(row) .build(); - String err = sensor.addPoint(point); + N103Point n103Point = N103Point.builder() + .nPoint(point) + .sadr(line.getPointId()) + .itemNo(line.getItemNo()) + .paramindex(line.getParamindex()) + .partName(line.getShortName()) + .build(); + String err = sensor103.addPoint(n103Point); if (StringUtils.isNotBlank(err)) { errorList.add(err); } @@ -97,7 +122,7 @@ public class CacExcelListener extends AnalysisEventListener { String msg = errorList.stream().collect(Collectors.joining(",")); throw new RuntimeException(msg); } else { - nSensorService.importFrom(sensorList.values()); + n103SensorService.importFrom(sensorList.values()); } } } diff --git a/src/main/java/com/xydl/cac/repository/N103PointRepository.java b/src/main/java/com/xydl/cac/repository/N103PointRepository.java new file mode 100644 index 0000000..74c9ff1 --- /dev/null +++ b/src/main/java/com/xydl/cac/repository/N103PointRepository.java @@ -0,0 +1,17 @@ +package com.xydl.cac.repository; + +import com.xydl.cac.entity.N103Point; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.stereotype.Repository; + +import java.util.List; + + +@Repository +public interface N103PointRepository extends JpaRepository, JpaSpecificationExecutor { + + List findBySensor103Id(Integer sensor103Id); + + void deleteBySensor103Id(Integer sensor103Id); +} \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/repository/N103SensorRepository.java b/src/main/java/com/xydl/cac/repository/N103SensorRepository.java new file mode 100644 index 0000000..0f140de --- /dev/null +++ b/src/main/java/com/xydl/cac/repository/N103SensorRepository.java @@ -0,0 +1,15 @@ +package com.xydl.cac.repository; + +import com.xydl.cac.entity.N103Sensor; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.stereotype.Repository; + +import java.util.List; + + +@Repository +public interface N103SensorRepository extends JpaRepository, JpaSpecificationExecutor { + + List findByNsensorId(Integer nsensorId); +} \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/repository/NPointRepository.java b/src/main/java/com/xydl/cac/repository/NPointRepository.java index cf72f10..ea27ca3 100644 --- a/src/main/java/com/xydl/cac/repository/NPointRepository.java +++ b/src/main/java/com/xydl/cac/repository/NPointRepository.java @@ -14,4 +14,6 @@ public interface NPointRepository extends JpaRepository, JpaSpe List findBySensorIdAndField(Integer sensorId, String field); List findBySensorIdAndType(Integer sensorId, Integer type); + + void deleteBySensorId(Integer sensorId); } \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/service/N103PointService.java b/src/main/java/com/xydl/cac/service/N103PointService.java new file mode 100644 index 0000000..e0482fd --- /dev/null +++ b/src/main/java/com/xydl/cac/service/N103PointService.java @@ -0,0 +1,10 @@ +package com.xydl.cac.service; + +import com.xydl.cac.entity.N103Point; + +public interface N103PointService { + + void importOne(N103Point item); + + void clearAll(Integer sensor103Id, Integer sensorId); +} diff --git a/src/main/java/com/xydl/cac/service/N103SensorService.java b/src/main/java/com/xydl/cac/service/N103SensorService.java new file mode 100644 index 0000000..2b133ec --- /dev/null +++ b/src/main/java/com/xydl/cac/service/N103SensorService.java @@ -0,0 +1,12 @@ +package com.xydl.cac.service; + +import com.xydl.cac.entity.N103Sensor; + +import java.util.Collection; + +public interface N103SensorService { + + void importFrom(Collection collection); + + void importOne(N103Sensor item); +} diff --git a/src/main/java/com/xydl/cac/service/NSensorService.java b/src/main/java/com/xydl/cac/service/NSensorService.java index 9850643..a10aac0 100644 --- a/src/main/java/com/xydl/cac/service/NSensorService.java +++ b/src/main/java/com/xydl/cac/service/NSensorService.java @@ -26,4 +26,6 @@ public interface NSensorService { void importFrom(Collection collection); + void importOne(NSensor sensor); + } diff --git a/src/main/java/com/xydl/cac/service/impl/N103PointServiceImpl.java b/src/main/java/com/xydl/cac/service/impl/N103PointServiceImpl.java new file mode 100644 index 0000000..6858773 --- /dev/null +++ b/src/main/java/com/xydl/cac/service/impl/N103PointServiceImpl.java @@ -0,0 +1,37 @@ +package com.xydl.cac.service.impl; + +import com.xydl.cac.entity.N103Point; +import com.xydl.cac.entity.NPoint; +import com.xydl.cac.repository.N103PointRepository; +import com.xydl.cac.repository.NPointRepository; +import com.xydl.cac.service.N103PointService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; + +@Service +@Slf4j +@Transactional(rollbackFor = Exception.class) +public class N103PointServiceImpl implements N103PointService { + + @Resource + N103PointRepository repository; + @Resource + NPointRepository nPointRepository; + + @Override + public void importOne(N103Point item) { + NPoint nPoint = item.getNPoint(); + nPointRepository.save(nPoint); + item.setNpointId(nPoint.getId()); + repository.save(item); + } + + @Override + public void clearAll(Integer sensor103Id, Integer sensorId) { + repository.deleteBySensor103Id(sensor103Id); + nPointRepository.deleteBySensorId(sensorId); + } +} diff --git a/src/main/java/com/xydl/cac/service/impl/N103SensorServiceImpl.java b/src/main/java/com/xydl/cac/service/impl/N103SensorServiceImpl.java new file mode 100644 index 0000000..5a65688 --- /dev/null +++ b/src/main/java/com/xydl/cac/service/impl/N103SensorServiceImpl.java @@ -0,0 +1,64 @@ +package com.xydl.cac.service.impl; + +import com.xydl.cac.entity.N103Point; +import com.xydl.cac.entity.N103Sensor; +import com.xydl.cac.entity.NPoint; +import com.xydl.cac.entity.NSensor; +import com.xydl.cac.repository.N103SensorRepository; +import com.xydl.cac.service.N103PointService; +import com.xydl.cac.service.N103SensorService; +import com.xydl.cac.service.NSensorService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import javax.annotation.Resource; +import java.util.*; + +@Service +@Slf4j +@Transactional(rollbackFor = Exception.class) +public class N103SensorServiceImpl implements N103SensorService { + @Resource + N103SensorRepository repository; + @Resource + NSensorService nSensorService; + @Resource + N103PointService n103PointService; + + + @Override + public void importFrom(Collection collection) { + for (N103Sensor item : collection) { + this.importOne(item); + } + } + + @Override + public void importOne(N103Sensor item) { + NSensor nSensor = item.getNSensor(); + nSensorService.importOne(nSensor); + item.setNsensorId(nSensor.getId()); + + List list = repository.findByNsensorId(nSensor.getId()); + if (!CollectionUtils.isEmpty(list)) { + item.setId(list.get(0).getId()); + } + repository.save(item); + + // 清空旧的全部属性 + n103PointService.clearAll(item.getId(), nSensor.getId()); + + List points = item.getPoints(); + if (points != null) { + for (N103Point point : points) { + point.setSensor103Id(item.getId()); + NPoint nPoint = point.getNPoint(); + nPoint.setSensorId(nSensor.getId()); + + n103PointService.importOne(point); + } + } + } +} 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 1a0099b..0260d43 100644 --- a/src/main/java/com/xydl/cac/service/impl/NSensorServiceImpl.java +++ b/src/main/java/com/xydl/cac/service/impl/NSensorServiceImpl.java @@ -128,17 +128,14 @@ public class NSensorServiceImpl implements NSensorService { @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); + this.importOne(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)) { + if (!CollectionUtils.isEmpty(plist)) { point.setId(plist.get(0).getId()); } pointRepository.save(point); @@ -147,4 +144,13 @@ public class NSensorServiceImpl implements NSensorService { } } + @Override + public void importOne(NSensor item) { + List list = repository.findBySensorCode(item.getSensorCode()); + if (!CollectionUtils.isEmpty(list)) { + item.setId(list.get(0).getId()); + } + repository.save(item); + } + } 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 6e32605..e8b0b9f 100644 --- a/src/main/java/com/xydl/cac/service/impl/ReportServiceImpl.java +++ b/src/main/java/com/xydl/cac/service/impl/ReportServiceImpl.java @@ -5,11 +5,10 @@ import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; import com.xydl.cac.entity.NPoint; -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.N103SensorService; import com.xydl.cac.service.ReportService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -28,7 +27,7 @@ import java.util.Map; public class ReportServiceImpl implements ReportService { @Resource - NSensorService nSensorService; + N103SensorService n103SensorService; @Override public void exportSensor(SensorDetail> detail, OutputStream output) throws Exception { @@ -71,10 +70,9 @@ public class ReportServiceImpl implements ReportService { @Override public void importCac(InputStream input) throws Exception { - CacExcelListener listener = new CacExcelListener(nSensorService); + CacExcelListener listener = new CacExcelListener(n103SensorService); EasyExcel.read(input, CacLine.class, listener) .sheet(0) .doRead(); - } }