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

haikang
huangfeng 1 year ago
parent b454bd67eb
commit 3e7feed921

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

@ -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<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.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<CacLine> {
List<CacLine> list = new ArrayList<>();
NSensorService nSensorService;
int base = 16385;
int type;
LinkedHashMap<String, NiecSensor> sensorList = new LinkedHashMap<>();
LinkedHashMap<String, NSensor> 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<CacLine> {
} 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());
}
}

@ -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<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.stereotype.Repository;
import java.util.Optional;
import java.util.List;
@Repository
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 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<NSensor> collection);
}

@ -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<NSensor> listAll() {
@ -58,4 +64,26 @@ public class NSensorServiceImpl implements NSensorService {
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.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<Map<String, Object>> detail, OutputStream output) throws Exception {
List<List<String>> 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();

Loading…
Cancel
Save