fix: 导入excel扩展到103表数据

haikang
huangfeng 1 year ago
parent 0b7f6ad62e
commit b4842b444a

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

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

@ -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<CacLine> {
NSensorService nSensorService;
N103SensorService n103SensorService;
int base = 16385;
int type;
LinkedHashMap<String, NSensor> sensorList = new LinkedHashMap<>();
LinkedHashMap<String, N103Sensor> sensorList = new LinkedHashMap<>();
List<String> 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<CacLine> {
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<CacLine> {
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<CacLine> {
}
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<CacLine> {
.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<CacLine> {
String msg = errorList.stream().collect(Collectors.joining(","));
throw new RuntimeException(msg);
} else {
nSensorService.importFrom(sensorList.values());
n103SensorService.importFrom(sensorList.values());
}
}
}

@ -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<N103Point, Integer>, JpaSpecificationExecutor<N103Point> {
List<N103Point> findBySensor103Id(Integer sensor103Id);
void deleteBySensor103Id(Integer sensor103Id);
}

@ -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<N103Sensor, Integer>, JpaSpecificationExecutor<N103Sensor> {
List<N103Sensor> findByNsensorId(Integer nsensorId);
}

@ -14,4 +14,6 @@ public interface NPointRepository extends JpaRepository<NPoint, Integer>, JpaSpe
List<NPoint> findBySensorIdAndField(Integer sensorId, String field);
List<NPoint> findBySensorIdAndType(Integer sensorId, Integer type);
void deleteBySensorId(Integer sensorId);
}

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

@ -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<N103Sensor> collection);
void importOne(N103Sensor item);
}

@ -26,4 +26,6 @@ public interface NSensorService {
void importFrom(Collection<NSensor> collection);
void importOne(NSensor sensor);
}

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

@ -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<N103Sensor> 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<N103Sensor> 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<N103Point> 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);
}
}
}
}

@ -128,17 +128,14 @@ public class NSensorServiceImpl implements NSensorService {
@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);
this.importOne(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)) {
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<NSensor> list = repository.findBySensorCode(item.getSensorCode());
if (!CollectionUtils.isEmpty(list)) {
item.setId(list.get(0).getId());
}
repository.save(item);
}
}

@ -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<Map<String, Object>> 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();
}
}

Loading…
Cancel
Save