feat: 处理excel的数据保存到数据库

haikang
huangfeng 1 year ago
parent b454bd67eb
commit 3e7feed921

@ -31,7 +31,7 @@ public class NPoint {
@ApiModelProperty("sensor表的id") @ApiModelProperty("sensor表的id")
@Column(name = "sensor_id") @Column(name = "sensor_id")
private String sensorId; private Integer sensorId;
@ApiModelProperty("对应tablename表的字段名") @ApiModelProperty("对应tablename表的字段名")
@Column(name = "field") @Column(name = "field")
@ -49,5 +49,8 @@ public class NPoint {
@Column(name = "type") @Column(name = "type")
private Integer type; private Integer type;
@Transient
private int row;
} }

@ -8,6 +8,8 @@ import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import javax.persistence.*; import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
/** /**
* @author jignjing * @author jignjing
@ -51,4 +53,18 @@ public class NSensor {
@Column(name = "status") @Column(name = "status")
private Integer status; private Integer status;
@Transient
private List<NPoint> 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);
}
} }

@ -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;
}

@ -2,42 +2,47 @@ package com.xydl.cac.excel;
import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener; 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 org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List;
public class CacExcelListener extends AnalysisEventListener<CacLine> { public class CacExcelListener extends AnalysisEventListener<CacLine> {
List<CacLine> list = new ArrayList<>(); NSensorService nSensorService;
int base = 16385; int base = 16385;
int type; int type;
LinkedHashMap<String, NiecSensor> sensorList = new LinkedHashMap<>(); LinkedHashMap<String, NSensor> sensorList = new LinkedHashMap<>();
public CacExcelListener(NSensorService service) {
nSensorService = service;
}
@Override @Override
public void invoke(CacLine line, AnalysisContext analysisContext) { public void invoke(CacLine line, AnalysisContext analysisContext) {
int row = analysisContext.readRowHolder().getRowIndex(); int rowidx = analysisContext.readRowHolder().getRowIndex();
if (row > 1) { if (rowidx > 1) {
if (line.getPointId().contains("遥测")) { if (line.getPointId().contains("遥测")) {
type = 0; type = 0;
} else if (line.getPointId().contains("遥信")) { } else if (line.getPointId().contains("遥信")) {
type = 1; type = 1;
} else { } else {
processDate(line, row + 1); processLine(line, rowidx + 1);
} }
} }
} }
private void processDate(CacLine line, int row) { private void processLine(CacLine line, int row) {
if (StringUtils.isNotBlank(line.getSensorCode())) { if (StringUtils.isNotBlank(line.getSensorCode()) && StringUtils.isNotBlank(line.getField())) {
NiecSensor sensor = sensorList.get(line.getSensorCode()); NSensor sensor = sensorList.get(line.getSensorCode());
if (sensor == null) { if (sensor == null) {
sensor = new NiecSensor(); sensor = new NSensor();
sensor.setSensorCode(line.getSensorCode()); sensor.setSensorCode(line.getSensorCode());
Integer pointId = Integer.parseInt(line.getPointId()) + base;
if (StringUtils.isBlank(line.getEquipmentCode())) { if (StringUtils.isBlank(line.getEquipmentCode())) {
throw new RuntimeException("第" + row + "行的被监测设备的唯一标识不能为空"); throw new RuntimeException("第" + row + "行的被监测设备的唯一标识不能为空");
} }
@ -51,19 +56,29 @@ public class CacExcelListener extends AnalysisEventListener<CacLine> {
} else { } else {
sensor.setName(line.getLongName()); sensor.setName(line.getLongName());
} }
sensor.setPhase(line.getPhase());
sensor.setStatus(Constants.NORMAL);
sensorList.put(line.getSensorCode(), sensor); sensorList.put(line.getSensorCode(), sensor);
} }
Integer pointId = Integer.parseInt(line.getPointId()) + base;
if (StringUtils.isBlank(line.getField())) { if (StringUtils.isBlank(line.getField())) {
throw new RuntimeException("第" + row + "行的字段名不能为空"); 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 @Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) { public void doAfterAllAnalysed(AnalysisContext analysisContext) {
nSensorService.importFrom(sensorList.values());
} }
} }

@ -5,11 +5,11 @@ import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.Optional; import java.util.List;
@Repository @Repository
public interface NPointRepository extends JpaRepository<NPoint, Integer>, JpaSpecificationExecutor<NPoint> { public interface NPointRepository extends JpaRepository<NPoint, Integer>, JpaSpecificationExecutor<NPoint> {
Optional<NPoint> findById(Integer id); List<NPoint> findBySensorIdAndField(Integer sensorId, String field);
} }

@ -5,11 +5,12 @@ import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.Optional; import java.util.List;
@Repository @Repository
public interface NSensorRepository extends JpaRepository<NSensor, Integer>, JpaSpecificationExecutor<NSensor> { public interface NSensorRepository extends JpaRepository<NSensor, Integer>, JpaSpecificationExecutor<NSensor> {
Optional<NSensor> findById(Integer id); List<NSensor> findBySensorCode(String sensorCode);
} }

@ -3,6 +3,7 @@ package com.xydl.cac.service;
import com.xydl.cac.entity.NSensor; import com.xydl.cac.entity.NSensor;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import java.util.Collection;
import java.util.List; import java.util.List;
public interface NSensorService { public interface NSensorService {
@ -18,4 +19,6 @@ public interface NSensorService {
NSensor detail(Integer id) throws Exception; NSensor detail(Integer id) throws Exception;
void importFrom(Collection<NSensor> collection);
} }

@ -1,6 +1,8 @@
package com.xydl.cac.service.impl; package com.xydl.cac.service.impl;
import com.xydl.cac.entity.NPoint;
import com.xydl.cac.entity.NSensor; import com.xydl.cac.entity.NSensor;
import com.xydl.cac.repository.NPointRepository;
import com.xydl.cac.repository.NSensorRepository; import com.xydl.cac.repository.NSensorRepository;
import com.xydl.cac.service.NSensorService; import com.xydl.cac.service.NSensorService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -8,8 +10,10 @@ import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
@ -19,6 +23,8 @@ import java.util.Optional;
public class NSensorServiceImpl implements NSensorService { public class NSensorServiceImpl implements NSensorService {
@Resource @Resource
NSensorRepository repository; NSensorRepository repository;
@Resource
NPointRepository pointRepository;
@Override @Override
public List<NSensor> listAll() { public List<NSensor> listAll() {
@ -58,4 +64,26 @@ public class NSensorServiceImpl implements NSensorService {
return optional.get(); return optional.get();
} }
@Override
public void importFrom(Collection<NSensor> collection) {
for (NSensor item : collection) {
List<NSensor> list = repository.findBySensorCode(item.getSensorCode());
if (!CollectionUtils.isEmpty(list)) {
item.setId(list.get(0).getId());
}
repository.save(item);
List<NPoint> points = item.getPoints();
if (points != null) {
for (NPoint point : points) {
point.setSensorId(item.getId());
List<NPoint> plist = pointRepository.findBySensorIdAndField(item.getId(), point.getField());
if (!CollectionUtils.isEmpty(list)) {
point.setId(plist.get(0).getId());
}
pointRepository.save(point);
}
}
}
}
} }

@ -8,11 +8,13 @@ import com.xydl.cac.entity.NiecPoint;
import com.xydl.cac.excel.CacExcelListener; import com.xydl.cac.excel.CacExcelListener;
import com.xydl.cac.excel.CacLine; import com.xydl.cac.excel.CacLine;
import com.xydl.cac.model.SensorDetail; import com.xydl.cac.model.SensorDetail;
import com.xydl.cac.service.NSensorService;
import com.xydl.cac.service.ReportService; import com.xydl.cac.service.ReportService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.util.ArrayList; import java.util.ArrayList;
@ -24,6 +26,9 @@ import java.util.Map;
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public class ReportServiceImpl implements ReportService { public class ReportServiceImpl implements ReportService {
@Resource
NSensorService nSensorService;
@Override @Override
public void exportSensor(SensorDetail<Map<String, Object>> detail, OutputStream output) throws Exception { public void exportSensor(SensorDetail<Map<String, Object>> detail, OutputStream output) throws Exception {
List<List<String>> heads = new ArrayList<>(); List<List<String>> heads = new ArrayList<>();
@ -65,7 +70,7 @@ public class ReportServiceImpl implements ReportService {
@Override @Override
public void importCac(InputStream input) throws Exception { public void importCac(InputStream input) throws Exception {
CacExcelListener listener = new CacExcelListener(); CacExcelListener listener = new CacExcelListener(nSensorService);
EasyExcel.read(input, CacLine.class, listener) EasyExcel.read(input, CacLine.class, listener)
.sheet(0) .sheet(0)
.doRead(); .doRead();

Loading…
Cancel
Save