From 0b7f6ad62ebfc6e928452282166edb7ffa5685bb Mon Sep 17 00:00:00 2001 From: huangfeng Date: Tue, 20 Feb 2024 13:54:02 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=B0=83=E6=95=B4=E4=B8=9A=E5=8A=A1?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E4=BD=BF=E7=94=A8=E6=96=B0=E8=A1=A8=E6=95=B0?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cac/controller/NSensorController.java | 67 +++++++++++++++++-- src/main/java/com/xydl/cac/entity/NPoint.java | 2 + .../java/com/xydl/cac/entity/NSensor.java | 4 ++ .../xydl/cac/entity/constants/Constants.java | 3 + .../com/xydl/cac/excel/CacExcelListener.java | 11 ++- .../java/com/xydl/cac/model/SensorDetail.java | 8 +-- .../xydl/cac/repository/NPointRepository.java | 2 + .../com/xydl/cac/service/DataService.java | 2 + .../com/xydl/cac/service/NSensorService.java | 5 +- .../xydl/cac/service/ParamBindService.java | 2 + .../cac/service/impl/DataServiceImpl.java | 46 ++++++++++++- .../cac/service/impl/NSensorServiceImpl.java | 63 ++++++++++++++--- .../service/impl/NiecSensorServiceImpl.java | 4 +- .../service/impl/ParamBindServiceImpl.java | 15 +++++ .../cac/service/impl/ReportServiceImpl.java | 7 +- .../java/com/xydl/cac/util/DataTable.java | 15 +++++ 16 files changed, 226 insertions(+), 30 deletions(-) create mode 100644 src/main/java/com/xydl/cac/util/DataTable.java diff --git a/src/main/java/com/xydl/cac/controller/NSensorController.java b/src/main/java/com/xydl/cac/controller/NSensorController.java index c942960..e68ec61 100644 --- a/src/main/java/com/xydl/cac/controller/NSensorController.java +++ b/src/main/java/com/xydl/cac/controller/NSensorController.java @@ -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> getTrunk() throws Exception { + List result = bindService.getTrunk(); + return Response.success(result); + } + + @GetMapping("getTree") + @ApiOperation("查询树") + public Response> getTree() throws Exception { + List 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 detail(@Validated @NotNull(message = "ID不能为空!") Integer id) throws Exception { - NSensor detail = service.detail(id); - return Response.success(detail); + @GetMapping("detail") + @ApiOperation("查询单个装置采集到的数据") + public Response 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 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> 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()); + } + } diff --git a/src/main/java/com/xydl/cac/entity/NPoint.java b/src/main/java/com/xydl/cac/entity/NPoint.java index fd456bc..bf15779 100644 --- a/src/main/java/com/xydl/cac/entity/NPoint.java +++ b/src/main/java/com/xydl/cac/entity/NPoint.java @@ -52,5 +52,7 @@ public class NPoint { @Transient private int row; + @Transient + private List data; } \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/entity/NSensor.java b/src/main/java/com/xydl/cac/entity/NSensor.java index e931b0e..fce9772 100644 --- a/src/main/java/com/xydl/cac/entity/NSensor.java +++ b/src/main/java/com/xydl/cac/entity/NSensor.java @@ -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; diff --git a/src/main/java/com/xydl/cac/entity/constants/Constants.java b/src/main/java/com/xydl/cac/entity/constants/Constants.java index 2812a0b..32dad97 100644 --- a/src/main/java/com/xydl/cac/entity/constants/Constants.java +++ b/src/main/java/com/xydl/cac/entity/constants/Constants.java @@ -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; } diff --git a/src/main/java/com/xydl/cac/excel/CacExcelListener.java b/src/main/java/com/xydl/cac/excel/CacExcelListener.java index ce51b85..c7349b5 100644 --- a/src/main/java/com/xydl/cac/excel/CacExcelListener.java +++ b/src/main/java/com/xydl/cac/excel/CacExcelListener.java @@ -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 { NSensorService nSensorService; @@ -30,9 +33,9 @@ public class CacExcelListener extends AnalysisEventListener { 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 { 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 { diff --git a/src/main/java/com/xydl/cac/model/SensorDetail.java b/src/main/java/com/xydl/cac/model/SensorDetail.java index 9812e27..a2eeaf3 100644 --- a/src/main/java/com/xydl/cac/model/SensorDetail.java +++ b/src/main/java/com/xydl/cac/model/SensorDetail.java @@ -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 extends OnePage { @ApiModelProperty("装置信息") - private NiecSensor sensor; + private NSensor sensor; @ApiModelProperty("点表配置") - private List points; + private List points; public void initFrom(OnePage page) { this.setContent(page.getContent()); diff --git a/src/main/java/com/xydl/cac/repository/NPointRepository.java b/src/main/java/com/xydl/cac/repository/NPointRepository.java index 95cf4fd..cf72f10 100644 --- a/src/main/java/com/xydl/cac/repository/NPointRepository.java +++ b/src/main/java/com/xydl/cac/repository/NPointRepository.java @@ -12,4 +12,6 @@ import java.util.List; public interface NPointRepository extends JpaRepository, JpaSpecificationExecutor { List findBySensorIdAndField(Integer sensorId, String field); + + List findBySensorIdAndType(Integer sensorId, Integer type); } \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/service/DataService.java b/src/main/java/com/xydl/cac/service/DataService.java index d6899d6..6c2a339 100644 --- a/src/main/java/com/xydl/cac/service/DataService.java +++ b/src/main/java/com/xydl/cac/service/DataService.java @@ -15,5 +15,7 @@ public interface DataService { OnePage> getDate(NiecSensor sensor, List points, ConditionModel model); + OnePage> getDate(NSensor sensor, List points, ConditionModel model); + void clearAllBind(); } diff --git a/src/main/java/com/xydl/cac/service/NSensorService.java b/src/main/java/com/xydl/cac/service/NSensorService.java index 8939b8c..9850643 100644 --- a/src/main/java/com/xydl/cac/service/NSensorService.java +++ b/src/main/java/com/xydl/cac/service/NSensorService.java @@ -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 listAll(Integer zsbid); @@ -17,7 +20,7 @@ public interface NSensorService { void delete(Integer id); - NSensor detail(Integer id) throws Exception; + SensorDetail> getDetail(ConditionModel model) throws Exception; void bindicd(Integer id, Integer icdid) throws Exception; diff --git a/src/main/java/com/xydl/cac/service/ParamBindService.java b/src/main/java/com/xydl/cac/service/ParamBindService.java index a0dc234..2946cba 100644 --- a/src/main/java/com/xydl/cac/service/ParamBindService.java +++ b/src/main/java/com/xydl/cac/service/ParamBindService.java @@ -10,6 +10,8 @@ import java.util.List; public interface ParamBindService { + List getTrunk() throws Exception; + List getTree() throws Exception; List instList(String iedName); diff --git a/src/main/java/com/xydl/cac/service/impl/DataServiceImpl.java b/src/main/java/com/xydl/cac/service/impl/DataServiceImpl.java index 69d01cc..16f05d5 100644 --- a/src/main/java/com/xydl/cac/service/impl/DataServiceImpl.java +++ b/src/main/java/com/xydl/cac/service/impl/DataServiceImpl.java @@ -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> getDate(NSensor sensor, List 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> 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"; 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 f42126a..1a0099b 100644 --- a/src/main/java/com/xydl/cac/service/impl/NSensorServiceImpl.java +++ b/src/main/java/com/xydl/cac/service/impl/NSensorServiceImpl.java @@ -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 listAll(Integer zsbid) { @@ -63,12 +68,50 @@ public class NSensorServiceImpl implements NSensorService { } @Override - public NSensor detail(Integer id) throws Exception { - Optional optional = repository.findById(id); + public SensorDetail> getDetail(ConditionModel model) throws Exception { + Optional 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 points = pointRepository.findBySensorIdAndType(sensor.getId(), YaoCe); + if (CollectionUtils.isEmpty(points)) { + throw new BusinessException("该装置缺少属性点表信息"); + } + + SensorDetail> result = this.getData(sensor, points, model); + return result; + } + + public SensorDetail> getData(NSensor sensor, List points, ConditionModel model) { + List pointList = new ArrayList<>(); + for (NPoint point : points) { + if (StringUtils.isNotBlank(point.getField())) { + pointList.add(point); + } + } + + SensorDetail> result = new SensorDetail(); + result.setSensor(sensor); + OnePage> page = dataService.getDate(sensor, pointList, model); + result.initFrom(page); + + for (NPoint point : pointList) { + List dataList = new ArrayList<>(); + for (Map item : result.getContent()) { + Object value = item.get(point.getField()); + dataList.add(value); + } + point.setData(dataList); } - return optional.get(); + result.setPoints(pointList); + return result; } @Override diff --git a/src/main/java/com/xydl/cac/service/impl/NiecSensorServiceImpl.java b/src/main/java/com/xydl/cac/service/impl/NiecSensorServiceImpl.java index ee75c85..f000dc6 100644 --- a/src/main/java/com/xydl/cac/service/impl/NiecSensorServiceImpl.java +++ b/src/main/java/com/xydl/cac/service/impl/NiecSensorServiceImpl.java @@ -107,7 +107,7 @@ public class NiecSensorServiceImpl implements NiecSensorService { } SensorDetail> result = new SensorDetail(); - result.setSensor(sensor); +// result.setSensor(sensor); OnePage> 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; } } diff --git a/src/main/java/com/xydl/cac/service/impl/ParamBindServiceImpl.java b/src/main/java/com/xydl/cac/service/impl/ParamBindServiceImpl.java index 59b5d0c..8673698 100644 --- a/src/main/java/com/xydl/cac/service/impl/ParamBindServiceImpl.java +++ b/src/main/java/com/xydl/cac/service/impl/ParamBindServiceImpl.java @@ -45,6 +45,21 @@ public class ParamBindServiceImpl implements ParamBindService { @Resource DataService dataService; + @Override + public List getTrunk() throws Exception { + List bdzList = bdzRepository.findAll(); + for (Bdz bdz : bdzList) { + List jgList = jgRepository.findByBdzid(bdz.getId()); + bdz.setChildren(jgList); + for (Jg jg : jgList) { + jg.setBdzName(bdz.getMc()); + List zsbList = zsbRepository.findByJgid(jg.getId()); + jg.setChildren(zsbList); + } + } + return bdzList; + } + @Override public List getTree() throws Exception { List bdzList = bdzRepository.findAll(); 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 f8ae114..6e32605 100644 --- a/src/main/java/com/xydl/cac/service/impl/ReportServiceImpl.java +++ b/src/main/java/com/xydl/cac/service/impl/ReportServiceImpl.java @@ -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 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 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 = ""; diff --git a/src/main/java/com/xydl/cac/util/DataTable.java b/src/main/java/com/xydl/cac/util/DataTable.java new file mode 100644 index 0000000..0ad15a3 --- /dev/null +++ b/src/main/java/com/xydl/cac/util/DataTable.java @@ -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"; + } +}