fix: 调整业务报表使用新表数据

haikang
huangfeng 1 year ago
parent 41b7400048
commit 0b7f6ad62e

@ -1,19 +1,28 @@
package com.xydl.cac.controller;
import com.xydl.cac.entity.Bdz;
import com.xydl.cac.entity.NSensor;
import com.xydl.cac.exception.BusinessException;
import com.xydl.cac.model.ConditionModel;
import com.xydl.cac.model.Response;
import com.xydl.cac.model.SensorDetail;
import com.xydl.cac.service.NSensorService;
import com.xydl.cac.service.ParamBindService;
import com.xydl.cac.service.ReportService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.repository.query.Param;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotNull;
import java.net.URLEncoder;
import java.util.List;
import java.util.Map;
@RestController
@Api(tags = {"监测设备相关接口"})
@ -23,6 +32,24 @@ public class NSensorController extends BasicController {
@Resource
NSensorService service;
@Resource
ReportService reportService;
@Resource
ParamBindService bindService;
@GetMapping("getTrunk")
@ApiOperation("查询树干")
public Response<List<Bdz>> getTrunk() throws Exception {
List<Bdz> result = bindService.getTrunk();
return Response.success(result);
}
@GetMapping("getTree")
@ApiOperation("查询树")
public Response<List<Bdz>> getTree() throws Exception {
List<Bdz> result = bindService.getTree();
return Response.success(result);
}
@GetMapping("listAll")
@ApiOperation("查询列表")
@ -55,11 +82,15 @@ public class NSensorController extends BasicController {
return Response.success("OK");
}
@PostMapping("detail")
@ApiOperation("详情")
public Response<NSensor> detail(@Validated @NotNull(message = "ID不能为空!") Integer id) throws Exception {
NSensor detail = service.detail(id);
return Response.success(detail);
@GetMapping("detail")
@ApiOperation("查询单个装置采集到的数据")
public Response<SensorDetail> getDetail(@Validated ConditionModel model) throws Exception {
if (model.getPageNum() != null || model.getPageSize() != null) {
model.setPageNum(this.initPageNum(model.getPageNum()));
model.setPageSize(this.initPageSize(model.getPageSize()));
}
SensorDetail result = service.getDetail(model);
return Response.success(result);
}
@PostMapping("bindicd")
@ -73,4 +104,30 @@ public class NSensorController extends BasicController {
}
}
@PostMapping("importCac")
@ApiOperation("导入CAC")
public Response<String> importCac(@RequestParam("file") MultipartFile file) throws Exception {
if (file != null && file.getInputStream() != null) {
reportService.importCac(file.getInputStream());
return Response.success("OK");
} else {
return Response.fail("缺少上传文件");
}
}
@GetMapping("export")
@ApiOperation("导出单个装置采集到的数据")
public void export(@Validated ConditionModel model, HttpServletResponse response) throws Exception {
if (model.getPageNum() != null || model.getPageSize() != null) {
model.setPageNum(this.initPageNum(model.getPageNum()));
model.setPageSize(this.initPageSize(model.getPageSize()));
}
SensorDetail<Map<String, Object>> detail = service.getDetail(model);
response.setHeader("Content-Disposition", "attachment; filename="
+ URLEncoder.encode(detail.getSensor().getName() + ".xlsx", "UTF-8"));
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
reportService.exportSensor(detail, response.getOutputStream());
}
}

@ -52,5 +52,7 @@ public class NPoint {
@Transient
private int row;
@Transient
private List<Object> data;
}

@ -49,6 +49,10 @@ public class NSensor {
@Column(name = "equipment_code")
private String equipmentId;
@ApiModelProperty("装置ID")
@Column(name = "dev_id")
private Integer devId;
@ApiModelProperty("设备状态")
@Column(name = "status")
private Integer status;

@ -3,4 +3,7 @@ package com.xydl.cac.entity.constants;
public class Constants {
public static final Integer NORMAL = 1;
public static final Integer DELETE = 0;
public static final Integer YaoCe = 2;
public static final Integer YaoXin = 1;
}

@ -13,6 +13,9 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.stream.Collectors;
import static com.xydl.cac.entity.constants.Constants.YaoCe;
import static com.xydl.cac.entity.constants.Constants.YaoXin;
public class CacExcelListener extends AnalysisEventListener<CacLine> {
NSensorService nSensorService;
@ -30,9 +33,9 @@ public class CacExcelListener extends AnalysisEventListener<CacLine> {
int rowidx = analysisContext.readRowHolder().getRowIndex();
if (rowidx > 1) {
if (line.getPointId().contains("遥测")) {
type = 0;
type = YaoCe;
} else if (line.getPointId().contains("遥信")) {
type = 1;
type = YaoXin;
} else {
processLine(line, rowidx + 1);
}
@ -55,6 +58,10 @@ public class CacExcelListener extends AnalysisEventListener<CacLine> {
errorList.add("第" + row + "行的表名不能为空");
}
sensor.setTableName(line.getTableName());
if (StringUtils.isBlank(line.getDevid())) {
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 {

@ -1,7 +1,7 @@
package com.xydl.cac.model;
import com.xydl.cac.entity.NiecPoint;
import com.xydl.cac.entity.NiecSensor;
import com.xydl.cac.entity.NPoint;
import com.xydl.cac.entity.NSensor;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -10,9 +10,9 @@ import java.util.List;
@Data
public class SensorDetail<T> extends OnePage<T> {
@ApiModelProperty("装置信息")
private NiecSensor sensor;
private NSensor sensor;
@ApiModelProperty("点表配置")
private List<NiecPoint> points;
private List<NPoint> points;
public void initFrom(OnePage page) {
this.setContent(page.getContent());

@ -12,4 +12,6 @@ import java.util.List;
public interface NPointRepository extends JpaRepository<NPoint, Integer>, JpaSpecificationExecutor<NPoint> {
List<NPoint> findBySensorIdAndField(Integer sensorId, String field);
List<NPoint> findBySensorIdAndType(Integer sensorId, Integer type);
}

@ -15,5 +15,7 @@ public interface DataService {
OnePage<Map<String, Object>> getDate(NiecSensor sensor, List<NiecPoint> points, ConditionModel model);
OnePage<Map<String, Object>> getDate(NSensor sensor, List<NPoint> points, ConditionModel model);
void clearAllBind();
}

@ -1,10 +1,13 @@
package com.xydl.cac.service;
import com.xydl.cac.entity.NSensor;
import com.xydl.cac.model.ConditionModel;
import com.xydl.cac.model.SensorDetail;
import org.springframework.data.domain.Page;
import java.util.Collection;
import java.util.List;
import java.util.Map;
public interface NSensorService {
List<NSensor> listAll(Integer zsbid);
@ -17,7 +20,7 @@ public interface NSensorService {
void delete(Integer id);
NSensor detail(Integer id) throws Exception;
SensorDetail<Map<String, Object>> getDetail(ConditionModel model) throws Exception;
void bindicd(Integer id, Integer icdid) throws Exception;

@ -10,6 +10,8 @@ import java.util.List;
public interface ParamBindService {
List<Bdz> getTrunk() throws Exception;
List<Bdz> getTree() throws Exception;
List<IcdConfigTypeInst> instList(String iedName);

@ -1,13 +1,12 @@
package com.xydl.cac.service.impl;
import com.xydl.cac.entity.ModevType;
import com.xydl.cac.entity.NiecPoint;
import com.xydl.cac.entity.NiecSensor;
import com.xydl.cac.entity.*;
import com.xydl.cac.model.ColumnModel;
import com.xydl.cac.model.ConditionModel;
import com.xydl.cac.model.OnePage;
import com.xydl.cac.repository.ModevTypeRepository;
import com.xydl.cac.service.DataService;
import com.xydl.cac.util.DataTable;
import com.xydl.cac.util.DateUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@ -122,6 +121,47 @@ public class DataServiceImpl implements DataService {
return result;
}
@Override
public OnePage<Map<String, Object>> getDate(NSensor sensor, List<NPoint> points, ConditionModel model) {
String devField = DataTable.getDevidField(sensor.getTableName());
String timeField = DataTable.getTimeField(sensor.getTableName());
OnePage result = new OnePage();
String sqlFrom = " FROM " + sensor.getTableName();
String sqlWhere = " WHERE " + devField + "=" + sensor.getDevId();
if (model.getStartTime() != null) {
sqlWhere = sqlWhere + " AND " + timeField + " >= '" + DateUtil.format(model.getStartTime()) + "'";
}
if (model.getEndTime() != null) {
sqlWhere = sqlWhere + " AND " + timeField + " < '" + DateUtil.format(model.getEndTime()) + "'";
}
String sqlOrder = " ORDER BY " + timeField + " DESC";
String sqlLimit = "";
if (model.getPageNum() != null && model.getPageSize() != null) {
result.setPageNum(model.getPageNum());
result.setPageSize(model.getPageSize());
sqlLimit = String.format(" LIMIT %d,%d", (model.getPageNum() - 1) * model.getPageSize(), model.getPageSize());
}
String sqlSelect = "SELECT DATE_FORMAT(" + timeField + ", '%Y-%m-%d %H:%i:%s') as acquisitionTime";
for (NPoint point : points) {
if (StringUtils.isNotBlank(point.getField())) {
sqlSelect = sqlSelect + ", " + point.getField();
}
}
String sqlCount = "SELECT count(*)" + sqlFrom + sqlWhere;
String sql = sqlSelect + sqlFrom + sqlWhere + sqlOrder + sqlLimit;
log.info(sql);
Long count = jdbcTemplate.queryForObject(sqlCount, Long.class);
List<Map<String, Object>> content = jdbcTemplate.queryForList(sql);
result.setTotal(count);
result.setContent(content);
return result;
}
@Override
public void clearAllBind() {
String sql = "UPDATE n_sensor SET icd_id=null";

@ -1,13 +1,16 @@
package com.xydl.cac.service.impl;
import com.xydl.cac.entity.Modev;
import com.xydl.cac.entity.NPoint;
import com.xydl.cac.entity.NSensor;
import com.xydl.cac.entity.*;
import com.xydl.cac.exception.BusinessException;
import com.xydl.cac.model.ConditionModel;
import com.xydl.cac.model.OnePage;
import com.xydl.cac.model.SensorDetail;
import com.xydl.cac.repository.NPointRepository;
import com.xydl.cac.repository.NSensorRepository;
import com.xydl.cac.service.DataService;
import com.xydl.cac.service.NSensorService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
@ -15,9 +18,9 @@ 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;
import java.util.*;
import static com.xydl.cac.entity.constants.Constants.YaoCe;
@Service
@Slf4j
@ -27,6 +30,8 @@ public class NSensorServiceImpl implements NSensorService {
NSensorRepository repository;
@Resource
NPointRepository pointRepository;
@Resource
DataService dataService;
@Override
public List<NSensor> listAll(Integer zsbid) {
@ -63,12 +68,50 @@ public class NSensorServiceImpl implements NSensorService {
}
@Override
public NSensor detail(Integer id) throws Exception {
Optional<NSensor> optional = repository.findById(id);
public SensorDetail<Map<String, Object>> getDetail(ConditionModel model) throws Exception {
Optional<NSensor> optional = repository.findById(model.getId());
if (!optional.isPresent()) {
throw new Exception("未找到该记录");
throw new BusinessException("未找到该装置");
}
NSensor sensor = optional.get();
if (StringUtils.isBlank(sensor.getTableName())) {
throw new BusinessException("该装置缺少table_name信息");
}
if (sensor.getDevId() == null) {
throw new BusinessException("该装置缺少dev_id信息");
}
List<NPoint> points = pointRepository.findBySensorIdAndType(sensor.getId(), YaoCe);
if (CollectionUtils.isEmpty(points)) {
throw new BusinessException("该装置缺少属性点表信息");
}
SensorDetail<Map<String, Object>> result = this.getData(sensor, points, model);
return result;
}
public SensorDetail<Map<String, Object>> getData(NSensor sensor, List<NPoint> points, ConditionModel model) {
List<NPoint> pointList = new ArrayList<>();
for (NPoint point : points) {
if (StringUtils.isNotBlank(point.getField())) {
pointList.add(point);
}
}
SensorDetail<Map<String, Object>> result = new SensorDetail();
result.setSensor(sensor);
OnePage<Map<String, Object>> page = dataService.getDate(sensor, pointList, model);
result.initFrom(page);
for (NPoint point : pointList) {
List<Object> dataList = new ArrayList<>();
for (Map<String, Object> item : result.getContent()) {
Object value = item.get(point.getField());
dataList.add(value);
}
point.setData(dataList);
}
return optional.get();
result.setPoints(pointList);
return result;
}
@Override

@ -107,7 +107,7 @@ public class NiecSensorServiceImpl implements NiecSensorService {
}
SensorDetail<Map<String, Object>> result = new SensorDetail();
result.setSensor(sensor);
// result.setSensor(sensor);
OnePage<Map<String, Object>> page = dataService.getDate(sensor, pointList, model);
result.initFrom(page);
@ -119,7 +119,7 @@ public class NiecSensorServiceImpl implements NiecSensorService {
}
point.setData(dataList);
}
result.setPoints(pointList);
// result.setPoints(pointList);
return result;
}
}

@ -45,6 +45,21 @@ public class ParamBindServiceImpl implements ParamBindService {
@Resource
DataService dataService;
@Override
public List<Bdz> getTrunk() throws Exception {
List<Bdz> bdzList = bdzRepository.findAll();
for (Bdz bdz : bdzList) {
List<Jg> jgList = jgRepository.findByBdzid(bdz.getId());
bdz.setChildren(jgList);
for (Jg jg : jgList) {
jg.setBdzName(bdz.getMc());
List<Zsb> zsbList = zsbRepository.findByJgid(jg.getId());
jg.setChildren(zsbList);
}
}
return bdzList;
}
@Override
public List<Bdz> getTree() throws Exception {
List<Bdz> bdzList = bdzRepository.findAll();

@ -4,6 +4,7 @@ import com.alibaba.excel.EasyExcel;
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;
@ -35,9 +36,9 @@ public class ReportServiceImpl implements ReportService {
List<String> head = new ArrayList<>();
head.add("时间");
heads.add(head);
for (NiecPoint point : detail.getPoints()) {
for (NPoint point : detail.getPoints()) {
head = new ArrayList<>();
head.add(point.getName());
head.add(point.getFieldDesc());
heads.add(head);
}
@ -46,7 +47,7 @@ public class ReportServiceImpl implements ReportService {
List<String> line = new ArrayList<>();
Object data = map.get("acquisitionTime");
line.add(String.valueOf(data));
for (NiecPoint point : detail.getPoints()) {
for (NPoint point : detail.getPoints()) {
data = map.get(point.getField());
if (data == null) {
data = "";

@ -0,0 +1,15 @@
package com.xydl.cac.util;
public class DataTable {
public static String getTimeField(String tableName) {
if ("data_dlq_jbfd".equalsIgnoreCase(tableName))
return "acquisitionTime";
else
return "d_time";
}
public static String getDevidField(String tableName) {
return "eqmid";
}
}
Loading…
Cancel
Save