package com.ruoyi.web.controller.manage; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.config.RuoYiConfig; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.entity.SysDictData; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.fuzhou.domain.DpEquipment; import com.ruoyi.fuzhou.domain.ReceiveElectricityValue; import com.ruoyi.fuzhou.domain.ReceiveOilValue; import com.ruoyi.fuzhou.domain.ReceiveWaterValue; import com.ruoyi.fuzhou.domain.vo.DpEquipmentVO; import com.ruoyi.fuzhou.domain.vo.QueryAnalysisVO; import com.ruoyi.fuzhou.domain.vo.ReceiveValueListVo; import com.ruoyi.fuzhou.enums.DataTypeEnum; import com.ruoyi.fuzhou.service.*; import com.ruoyi.manage.domain.DpEquipmentType; import com.ruoyi.manage.domain.DsTaskList; import com.ruoyi.manage.domain.SysFileManage; import com.ruoyi.manage.domain.vo.Tree; import com.ruoyi.manage.service.DpEquipmentTypeService; import com.ruoyi.manage.service.SysFileService; import com.ruoyi.system.service.ISysDictDataService; import com.ruoyi.web.controller.fuzhou.ReceiveInfoController; import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.nio.charset.StandardCharsets; import java.text.SimpleDateFormat; import java.time.*; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; /** *

* 前端控制器 *

* * @author zhangyy * @since 2025-03-11 */ @RestController @RequestMapping("/dp/dpEquipment") @Tag(name = "大屏--设备管理") public class DpEquipmentController extends BaseController { @Resource private EquipmentService dpEquipmentService; @Resource private ReceiveInfoController receiveInfoController; @Resource private ISysDictDataService iSysDictDataService; @Resource ReceiveModuleInfoService receiveModuleInfoService; @Resource DsTaskListController dsTaskListController; @Resource private ReceiveOilValueService receiveOilValueService; @Resource private ReceiveWaterValueService receiveWaterValueService; @Resource private ReceiveElectricityValueService receiveElectricityValueService; @Resource private HikService hikService; @Resource private DpEquipmentTypeService dpEquipmentTypeService; @Autowired SysFileService sysFileService; @Autowired RuoYiConfig ruoYiConfig; @GetMapping("/list") @Operation(summary = "设备列表") public AjaxResult getList(Integer beId) { List treeList = new ArrayList<>(); if (null != beId) { List list = dpEquipmentService.getListByBeId(beId); if (null != list) { Map> result = list.stream().collect(Collectors.groupingBy(DpEquipmentVO::getEqutype)); treeList = buildTree(result); } } return AjaxResult.success(treeList); } private List buildTree(Map> result) { // 构建树节点 List tree = new ArrayList<>(); for (Map.Entry> entry : result.entrySet()) { Tree typeNode = new Tree(); typeNode.setId(generateId()); typeNode.setLabel(entry.getKey()); typeNode.setChildren(entry.getValue().stream() .map(equipment -> { Tree equipmentNode = new Tree(); equipmentNode.setLabel(equipment.getEquName()); equipmentNode.setId(equipment.getId()); equipmentNode.setIntervalTime(equipment.getIntervalTime()); equipmentNode.setPeriodTime(equipment.getPeriodTime()); equipmentNode.setIcon(equipment.getIcon()); return equipmentNode; }) .collect(Collectors.toList())); typeNode.setDisabled(true); tree.add(typeNode); } return tree; } //生成不重复ID private int generateId() { UUID uuid = UUID.randomUUID(); long hash = uuid.hashCode(); return (int) (hash & Integer.MAX_VALUE); } @GetMapping("/pageList") @Operation(summary = "泊位设备分页列表") public TableDataInfo getPageList(DpEquipment dpEquipmentVO) { return dpEquipmentService.getPageList(dpEquipmentVO); } @Operation(summary = "设备详情") @GetMapping("/{id}") public AjaxResult getById(@PathVariable Integer id) { DpEquipmentVO dpEquipmentVO = dpEquipmentService.selectById(id); DpEquipment dpEquipment1 = receiveModuleInfoService.getIp(String.valueOf(dpEquipmentVO.getId()), dpEquipmentVO.getEquipmentTypeId()); dpEquipmentVO.setIp(dpEquipment1.getIp()); dpEquipmentVO.setPort(dpEquipment1.getPort()); dpEquipmentVO.setDeviceAddress(dpEquipment1.getDeviceAddress()); return AjaxResult.success(dpEquipmentVO); } @GetMapping("/getListByWhId") @Operation(summary = "根据码头ID获取设备树") public AjaxResult getListByWhId(Integer whId) { List treeList = new ArrayList<>(); List list = dpEquipmentService.getListByWhId(whId); if (null != list) { Map> result = list.stream().collect(Collectors.groupingBy(DpEquipmentVO::getEqutype)); treeList = buildTree(result); } //根据系统字典排序 SysDictData sysDictData = new SysDictData(); sysDictData.setDictType("dp_equipment_type"); List dictDataList = iSysDictDataService.selectDictDataList(sysDictData); Map dictSortMap = new HashMap<>(); for (SysDictData dictData : dictDataList) { dictSortMap.put(dictData.getDictLabel(), dictData.getDictSort().intValue()); } treeList.sort(Comparator.comparingInt(tree -> dictSortMap.getOrDefault(tree.getLabel(), Integer.MAX_VALUE))); return AjaxResult.success(treeList); } @GetMapping("/getEquipmentsByWhId") @Operation(summary = "根据码头ID获取设备详情列表") public AjaxResult getEquipmentsByWhId(Integer whId) { List list = dpEquipmentService.getListByWhId(whId); List resList = new ArrayList<>(); resList = equipmentStatusHandling(list); return AjaxResult.success(resList); } @GetMapping("/getEquipmentsCount") @Operation(summary = "设备状态数量统计") public AjaxResult getEquipmentsCount(Integer whId) { List list = dpEquipmentService.getListByWhId(whId); List resList = new ArrayList<>(); resList = equipmentStatusHandling(list); LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.orderByAsc(DpEquipmentType::getId); List typeList = dpEquipmentTypeService.list(lambdaQueryWrapper); Map> groupMap = resList.stream().collect(Collectors.groupingBy(DpEquipmentVO::getEquipmentTypeId)); JSONArray jsonArray = new JSONArray(); List typeIds = Arrays.asList(1, 2, 3, 4); for (Map.Entry> entry : groupMap.entrySet()) { JSONObject jsonObject = new JSONObject(); jsonObject.put("name", entry.getValue().get(0).getEqutype()); Long online = (long) entry.getValue().size(); if (typeIds.contains(entry.getKey())) { online = entry.getValue().stream().filter(e -> e.getStatus() == 1).count(); } jsonObject.put("online", online); jsonObject.put("total", entry.getValue().size()); jsonObject.put("typeId", entry.getKey()); jsonArray.add(jsonObject); } Set typeIDs = groupMap.keySet(); for (DpEquipmentType dpEquipmentType : typeList) { if (!typeIDs.contains(dpEquipmentType.getId())) { JSONObject jsonObject = new JSONObject(); jsonObject.put("name", dpEquipmentType.getTypeName()); jsonObject.put("online", 0); jsonObject.put("total", 0); jsonObject.put("typeId", dpEquipmentType.getId()); jsonArray.add(jsonObject); } } List objects = jsonArray.toList(JSONObject.class); objects.sort(Comparator.comparingInt(o -> o.getIntValue("typeId"))); jsonArray.clear(); jsonArray.addAll(objects); return AjaxResult.success(jsonArray); } @GetMapping("/getEquipmentsByBeId") @Operation(summary = "根据泊位ID获取设备工况信息") @Hidden public AjaxResult getEquipmentsByBeId(@RequestParam Integer beId, @RequestParam String startTime) { List list = dpEquipmentService.getListByBeId(beId); return AjaxResult.success(list); } @GetMapping("/getListByBeIdTypeId") @Operation(summary = "根据泊位ID和设备类型ID获取设备信息列表") public AjaxResult getListByBeIdTypeId(@RequestParam Integer beId, @RequestParam Integer typeId) { R res = dsTaskListController.getByBeId(beId); DsTaskList dsTaskList = res.getData(); Date psTime = dsTaskList.getPsTime(); List typeIds = new ArrayList<>(); if (typeId == 1) { typeIds.add(1); typeIds.add(12); typeIds.add(13); typeIds.add(14); } else { typeIds.add(typeId); } List equList = dpEquipmentService.getListByBeIdTypeId(beId, typeIds); List voList = new ArrayList<>(); for (DpEquipmentVO dpEquipmentVO : equList) { ReceiveValueListVo voEL = new ReceiveValueListVo(); voEL.setId(dpEquipmentVO.getId().longValue()); voEL.setEndTime(psTime); List dataList = receiveInfoController.dataList(voEL).getData(); if (!dataList.isEmpty()) { dpEquipmentVO.setDataHis(dataList.get(0)); } voList.add(dpEquipmentVO); } List resList = equipmentStatusHandling(voList); JSONObject object = new JSONObject(); if (!equList.isEmpty()) { ReceiveValueListVo vo = new ReceiveValueListVo(); ReceiveValueListVo voNew = new ReceiveValueListVo(); vo.setId(equList.get(0).getId().longValue()); vo.setEndTime(psTime); voNew.setId(equList.get(0).getId().longValue()); List dataList = receiveInfoController.dataList(vo).getData(); List dataListNew = receiveInfoController.dataList(voNew).getData(); List tableList = receiveInfoController.tableList(vo.getId()).getData(); object.put("equList", resList); if (!dataListNew.isEmpty()) { object.put("dataOne", dataListNew.get(0)); } else { object.put("dataOne", ""); } if (!dataList.isEmpty()) { object.put("dataHis", dataList.get(0)); } else { object.put("dataHis", ""); } object.put("tableList", tableList); } return AjaxResult.success(object); } @GetMapping("/getDataOneById") @Operation(summary = "根据ID获取最新一条数据") public AjaxResult getDataOneById(Integer id) { DpEquipmentVO dpEquipmentVO = dpEquipmentService.selectById(id); R res = dsTaskListController.getByBeId(dpEquipmentVO.getBeId()); DsTaskList dsTaskList = res.getData(); Date psTime = dsTaskList.getPsTime(); Date peTime = dsTaskList.getPeTime(); Integer equTypeId = dpEquipmentVO.getEquipmentTypeId(); ReceiveValueListVo vo = new ReceiveValueListVo(); vo.setId(id.longValue()); vo.setStartTime(psTime); vo.setEndTime(peTime); JSONObject object = new JSONObject(); List dataList = receiveInfoController.dataList(vo).getData(); List tableList = receiveInfoController.tableList(vo.getId()).getData(); if (dataList.size() > 0) { object.put("dataOne", dataList.get(0)); object.put("equUpTime", getEquUptime(dataList, equTypeId)); } else { object.put("dataOne", new JSONObject()); object.put("equUpTime", null); } object.put("tableList", tableList); return AjaxResult.success(object); } private List equipmentStatusHandling(List list) { List resList = new ArrayList<>(); Map onlineMap = new LinkedHashMap<>(); ArrayList arrayList = new ArrayList<>(); for (DpEquipmentVO equipmentVO : list) { Integer typeId = equipmentVO.getEquipmentTypeId(); if (typeId == 4 && equipmentVO.getFieldName() != null && !equipmentVO.getFieldName().isEmpty()) { arrayList.add(equipmentVO.getFieldName()); } } String[] indexCodes = arrayList.toArray(new String[arrayList.size()]); onlineMap = hikService.getCameraOnline(indexCodes); for (DpEquipmentVO dpEquipmentVO : list) { Integer typeId = dpEquipmentVO.getEquipmentTypeId(); Integer id = dpEquipmentVO.getId(); if (DataTypeEnum.LIJIUOIL.getCode().equals(typeId) || DataTypeEnum.OIL.getCode().equals(typeId) || DataTypeEnum.LIJIUJUN.getCode().equals(typeId)) { ReceiveOilValue receiveOilValue = receiveOilValueService.getOne(new LambdaQueryWrapper() {{ or().eq(ReceiveOilValue::getDeviceName, String.valueOf(id)) .orderByDesc(ReceiveOilValue::getCreateTime).last("LIMIT 1"); }}); if (receiveOilValue != null && receiveOilValue.getOilTimeFlow() != null) { if (Double.parseDouble(receiveOilValue.getOilTimeFlow()) != 0.0) { dpEquipmentVO.setStatus(1); } } } else if (DataTypeEnum.WATER_FLOW.getCode().equals(typeId) || DataTypeEnum.WATER_YA.getCode().equals(typeId) || DataTypeEnum.WATER_DEPT.getCode().equals(typeId)) { ReceiveWaterValue receiveWaterValue = receiveWaterValueService.getOne(new LambdaQueryWrapper() {{ or().eq(ReceiveWaterValue::getDeviceName, String.valueOf(id)) .orderByDesc(ReceiveWaterValue::getCreateTime).last("LIMIT 1"); }}); if (receiveWaterValue != null && receiveWaterValue.getTimeFlow() != null) { if (Double.parseDouble(receiveWaterValue.getTimeFlow()) != 0.0) { dpEquipmentVO.setStatus(1); } } } else if (DataTypeEnum.ELECTRICITY.getCode().equals(typeId)) { ReceiveElectricityValue receiveElectricityValue = receiveElectricityValueService.getOne(new LambdaQueryWrapper() {{ or().eq(ReceiveElectricityValue::getDeviceName, String.valueOf(id)) .orderByDesc(ReceiveElectricityValue::getCreateTime).last("LIMIT 1"); }}); if (receiveElectricityValue != null && receiveElectricityValue.getCurrentA() != null && receiveElectricityValue.getCurrentB() != null && receiveElectricityValue.getCurrentC() != null) { if (Double.parseDouble(receiveElectricityValue.getCurrentA()) != 0.0 || Double.parseDouble(receiveElectricityValue.getCurrentB()) != 0.0 || Double.parseDouble(receiveElectricityValue.getCurrentC()) != 0.0) { dpEquipmentVO.setStatus(1); } } } else if (typeId == 4) { Integer status = onlineMap.getOrDefault(dpEquipmentVO.getFieldName(), 0); dpEquipmentVO.setStatus(status); } resList.add(dpEquipmentVO); } return resList; } private String getEquUptime(List dataList, Integer equTypeId) { Integer size = dataList.size(); if (equTypeId == 1 || equTypeId == 12 || equTypeId == 13 || equTypeId == 14) { for (int i = size - 1; i >= 0; i--) { ReceiveOilValue receiveOilValue = (ReceiveOilValue) dataList.get(i); if (receiveOilValue.getOilTimeFlow() != null && Double.parseDouble(receiveOilValue.getOilTimeFlow()) != 0.0) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String timeStr = sdf.format(receiveOilValue.getCreateTime()); return timeCalculator(timeStr); } } } else if (equTypeId == 2) { for (int k = size - 1; k >= 0; k--) { ReceiveWaterValue receiveWaterValue = (ReceiveWaterValue) dataList.get(k); if (receiveWaterValue.getTimeFlow() != null && Double.parseDouble(receiveWaterValue.getTimeFlow()) != 0.0) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String timeStr = sdf.format(receiveWaterValue.getCreateTime()); return timeCalculator(timeStr); } } } return null; } private String timeCalculator(String timeStr) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime dateTime = LocalDateTime.parse(timeStr, formatter); LocalDateTime now = LocalDateTime.now(); Duration duration = Duration.between(dateTime, now); long total = Math.abs(duration.toMinutes()); long hour = total / 60; long minutes = total % 60; return hour + "小时" + minutes + "分钟"; } @GetMapping("/getXyzById") @Operation(summary = "根据ID获取设备详情") public AjaxResult getXyzById(Integer id) { DpEquipment dpEquipment = dpEquipmentService.getById(id); DpEquipment dpEquipment1 = receiveModuleInfoService.getIp(String.valueOf(dpEquipment.getId()), dpEquipment.getEquipmentTypeId()); dpEquipment.setIp(dpEquipment1.getIp()); dpEquipment.setPort(dpEquipment1.getPort()); dpEquipment.setDeviceAddress(dpEquipment1.getDeviceAddress()); return AjaxResult.success(dpEquipment); } //获取设备数据与表头 @PostMapping("/getDataById") @Operation(summary = "获取设备数据与表头") public AjaxResult getDataById(@Validated @RequestBody ReceiveValueListVo vo) { List dataList = receiveInfoController.dataList(vo).getData(); List tableList = receiveInfoController.tableList(vo.getId()).getData(); JSONObject object = new JSONObject(); object.put("dataList", dataList); object.put("tableList", tableList); return AjaxResult.success(object); } //获取设备数据与表头(分页) @PostMapping("/getPageListById") @Operation(summary = "获取设备数据与表头(分页)") public AjaxResult getPageListById(@Validated @RequestBody ReceiveValueListVo vo) { List dataList = receiveInfoController.dataList(vo).getData(); List tableList = receiveInfoController.tableList(vo.getId()).getData(); List sampledList = new ArrayList(); for (int i = 0; i < dataList.size(); i++) { if (i % 5 == 0) { sampledList.add(dataList.get(i)); } } TableDataInfo dataInfo = paginate(sampledList, vo.getPageNum(), vo.getPageSize()); // TableDataInfo dataInfo = paginate(dataList, vo.getPageNum(), vo.getPageSize()); JSONObject object = new JSONObject(); object.put("dataList", dataInfo); object.put("tableList", tableList); return AjaxResult.success(object); } //获取设备数据与表头(分页) @PostMapping("/getPageListByIdRuoyi") @Operation(summary = "获取设备数据与表头(分页)") public AjaxResult getPageListByIdRuoyi(@Validated @RequestBody ReceiveValueListVo vo) { List dataList = receiveInfoController.dataList(vo).getData(); List tableList = receiveInfoController.tableList(vo.getId()).getData(); TableDataInfo dataInfo = paginate(dataList, vo.getPageNum(), vo.getPageSize()); JSONObject object = new JSONObject(); object.put("dataList", dataInfo); object.put("tableList", tableList); return AjaxResult.success(object); } /** * 新增泊位--设备 */ @Operation(summary = "新增") @PostMapping @Transactional(rollbackFor = Exception.class) public AjaxResult add(@RequestBody DpEquipment dpEquipment) { dpEquipment.setEquSeType(dpEquipment.getEquipmentTypeId()); dpEquipmentService.save(dpEquipment); receiveModuleInfoService.saveByModule(String.valueOf(dpEquipment.getId()), dpEquipment.getIp(), dpEquipment.getPort(), dpEquipment.getDeviceAddress(), dpEquipment.getEquipmentTypeId()); return toAjax(true); } /** * 修改泊位--设备 */ @Operation(summary = "修改") @PutMapping @Transactional(rollbackFor = Exception.class) public AjaxResult edit(@RequestBody DpEquipment dpEquipment) { DpEquipment equipment = dpEquipmentService.getById(dpEquipment.getId()); if (equipment == null) { throw new ServiceException("设备不存在!"); } receiveModuleInfoService.removeByModule(String.valueOf(equipment.getId()), equipment.getEquipmentTypeId()); dpEquipment.setEquSeType(dpEquipment.getEquipmentTypeId()); dpEquipmentService.updateById(dpEquipment); receiveModuleInfoService.saveByModule(String.valueOf(dpEquipment.getId()), dpEquipment.getIp(), dpEquipment.getPort(), dpEquipment.getDeviceAddress(), dpEquipment.getEquipmentTypeId()); return toAjax(true); } /** * 删除泊位--设备 */ @Operation(summary = "删除") @Transactional(rollbackFor = Exception.class) @DeleteMapping("/{id}") public AjaxResult remove(@PathVariable Integer id) { DpEquipment equipment = dpEquipmentService.getById(id); if (equipment == null) { throw new ServiceException("设备不存在!"); } receiveModuleInfoService.removeByModule(String.valueOf(equipment), equipment.getEquipmentTypeId()); return toAjax(dpEquipmentService.removeById(id)); } //多条件查询设备列表 public List queryDpEquipmentList(Integer beId, Integer typeId) { List typeIds = new ArrayList<>(); if (typeId == 1) { typeIds.add(1); typeIds.add(12); typeIds.add(13); typeIds.add(14); } else { typeIds.add(typeId); } List equList = dpEquipmentService.getListByBeIdTypeId(beId, typeIds); return equList; } //多条件查询水深态势分析数据 @PostMapping("/queryWaterDeepAnalysis") @Operation(summary = "多条件查询水深态势分析数据") public AjaxResult queryWaterDeepAnalysis(@Validated @RequestBody QueryAnalysisVO queryAnalysisVO) { List ids = new ArrayList<>(); Integer beId = queryAnalysisVO.getBeId(); List equList = queryDpEquipmentList(beId, 7); JSONArray jsonArray = new JSONArray(); if (equList.size() > 0) { for (DpEquipmentVO dpEquipmentVO : equList) { ids.add(String.valueOf(dpEquipmentVO.getId())); } LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); Date startTime = queryAnalysisVO.getStartTime(); Date endTime = queryAnalysisVO.getEndTime(); Integer interval = queryAnalysisVO.getInterval(); Map timeMap = new LinkedHashMap<>(); LocalDate endDate = LocalDate.now(); LocalDate startDate = LocalDate.now().minusDays(interval); if (startTime != null && endTime != null) { timeMap = convertStartEndTime(startTime, endTime); startDate = convertDate(timeMap.get("start")).toLocalDate(); endDate = convertDate(timeMap.get("end")).toLocalDate(); } else { timeMap = getStartEndTime(interval); } lambdaQueryWrapper.in(ReceiveWaterValue::getDeviceName, ids) .ge(ReceiveWaterValue::getCreateTime, timeMap.get("start")) .lt(ReceiveWaterValue::getCreateTime, timeMap.get("end")) .orderByDesc(ReceiveWaterValue::getCreateTime); List waterValues = receiveWaterValueService.list(lambdaQueryWrapper); List dateRange = startDate.datesUntil(endDate.plusDays(1)).collect(Collectors.toList()); Map> groups = new LinkedHashMap<>(); for (LocalDate localDate : dateRange) { groups.put(localDate, new ArrayList<>()); } for (ReceiveWaterValue receiveWaterValue : waterValues) { LocalDateTime localDateTime = convertDate(receiveWaterValue.getCreateTime()); LocalDate localDate = localDateTime.toLocalDate(); groups.computeIfPresent(localDate, (key, list) -> { list.add(receiveWaterValue); return list; }); } for (Map.Entry> entry : groups.entrySet()) { JSONObject jsonObject = new JSONObject(); jsonObject.put("date", entry.getKey()); jsonObject.put("avg", "0.0"); jsonObject.put("dif", "0.0"); if (entry.getValue().size() > 0) { Map map = waterDeepMaxMin(entry.getValue()); Double max = map.get("max"); Double min = map.get("min"); jsonObject.put("avg", String.format("%.3f", (max + min) / 2)); jsonObject.put("dif", String.format("%.3f", (max - min))); } jsonArray.add(jsonObject); } } return AjaxResult.success(jsonArray); } private LocalDateTime convertDate(Date date) { return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); } private Map convertStartEndTime(Date startTime, Date endTime) { SimpleDateFormat timeSDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat dateSDF = new SimpleDateFormat("yyyy-MM-dd"); String dateStartStr = dateSDF.format(startTime); String dateEndStr = dateSDF.format(endTime); String startTimeStr = " 00:00:00"; String endTimeStr = " 23:59:59"; String newStartStr = dateStartStr + startTimeStr; String newEndStr = dateEndStr + endTimeStr; Map map = new LinkedHashMap<>(); try { Date start = timeSDF.parse(newStartStr); Date end = timeSDF.parse(newEndStr); map.put("start", start); map.put("end", end); } catch (Exception e) { System.out.println(e.getMessage()); } return map; } private Map getStartEndTime(Integer interval) { LocalDate endDate = LocalDate.now(); LocalDate startDate = LocalDate.now().minusDays(interval); String startTime = " 00:00:00"; String endTime = " 23:59:59"; DateTimeFormatter formatterDate = DateTimeFormatter.ofPattern("yyyy-MM-dd"); DateTimeFormatter formatterTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String startStr = startDate.format(formatterDate) + startTime; String endStr = endDate.format(formatterDate) + endTime; LocalDateTime localDateTimeStart = LocalDateTime.parse(startStr, formatterTime); LocalDateTime localDateTimeEnd = LocalDateTime.parse(endStr, formatterTime); Instant instantStart = localDateTimeStart.atZone(ZoneId.systemDefault()).toInstant(); Instant instantEnd = localDateTimeEnd.atZone(ZoneId.systemDefault()).toInstant(); Date start = Date.from(instantStart); Date end = Date.from(instantEnd); Map map = new HashMap<>(); map.put("start", start); map.put("end", end); return map; } private Map waterDeepMaxMin(List list) { OptionalDouble max = list.stream() .mapToDouble(e -> Double.parseDouble(e.getWaterDeep())) .max(); OptionalDouble min = list.stream() .mapToDouble(e -> Double.parseDouble(e.getWaterDeep())) .min(); Map map = new HashMap<>(); map.put("max", max.orElse(0.0)); map.put("min", min.orElse(0.0)); return map; } private Double convertString(String str) { if (str == null || str.trim().isEmpty()) { return 0.0; } if (str.matches(".*[eE].*")) { return 0.0; } try { double value = Double.parseDouble(str); return Math.abs(value); } catch (Exception e) { return 0.0; } } //多条件查询电表态势分析数据 @PostMapping("/queryElectricityAnalysis") @Operation(summary = "多条件查询电表态势分析数据") public AjaxResult queryElectricityAnalysis(@Validated @RequestBody QueryAnalysisVO queryAnalysisVO) { List ids = new ArrayList<>(); Integer beId = queryAnalysisVO.getBeId(); List equList = queryDpEquipmentList(beId, 3); JSONArray jsonArray = new JSONArray(); if (equList.size() > 0) { for (DpEquipmentVO dpEquipmentVO : equList) { ids.add(String.valueOf(dpEquipmentVO.getId())); } LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); Date startTime = queryAnalysisVO.getStartTime(); Date endTime = queryAnalysisVO.getEndTime(); Integer interval = queryAnalysisVO.getInterval(); Map timeMap = new LinkedHashMap<>(); LocalDate endDate = LocalDate.now(); LocalDate startDate = LocalDate.now().minusDays(interval); if (startTime != null && endTime != null) { timeMap = convertStartEndTime(startTime, endTime); startDate = convertDate(timeMap.get("start")).toLocalDate(); endDate = convertDate(timeMap.get("end")).toLocalDate(); } else { timeMap = getStartEndTime(interval); } lambdaQueryWrapper.in(ReceiveElectricityValue::getDeviceName, ids) .ge(ReceiveElectricityValue::getCreateTime, timeMap.get("start")) .lt(ReceiveElectricityValue::getCreateTime, timeMap.get("end")) .orderByDesc(ReceiveElectricityValue::getCreateTime); List electricityValues = receiveElectricityValueService.list(lambdaQueryWrapper); List dateRange = startDate.datesUntil(endDate.plusDays(1)).collect(Collectors.toList()); Map> groups = new LinkedHashMap<>(); for (LocalDate localDate : dateRange) { groups.put(localDate, new ArrayList<>()); } for (ReceiveElectricityValue receiveElectricityValue : electricityValues) { LocalDateTime localDateTime = convertDate(receiveElectricityValue.getCreateTime()); LocalDate localDate = localDateTime.toLocalDate(); groups.computeIfPresent(localDate, (key, list) -> { list.add(receiveElectricityValue); return list; }); } for (Map.Entry> entry : groups.entrySet()) { JSONObject jsonObject = new JSONObject(); jsonObject.put("date", entry.getKey()); jsonObject.put("avg", "0.0"); if (entry.getValue().size() > 0) { List valueList = entry.getValue(); Integer size = valueList.size(); Double total = 0.0; for (ReceiveElectricityValue receiveElectricityValue : valueList) { Double zhengValue = convertString(receiveElectricityValue.getZhengPower()); total = total + zhengValue; } jsonObject.put("avg", String.format("%.3f", total / size)); } jsonArray.add(jsonObject); } } return AjaxResult.success(jsonArray); } //多条件查询油表态势分析数据 @PostMapping("/queryOilAnalysis") @Operation(summary = "多条件查询油表态势分析数据") public AjaxResult queryOilAnalysis(@Validated @RequestBody QueryAnalysisVO queryAnalysisVO) { List ids = new ArrayList<>(); Integer beId = queryAnalysisVO.getBeId(); List equList = queryDpEquipmentList(beId, 1); JSONArray jsonArray = new JSONArray(); if (equList.size() > 0) { for (DpEquipmentVO dpEquipmentVO : equList) { ids.add(String.valueOf(dpEquipmentVO.getId())); } LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); Date startTime = queryAnalysisVO.getStartTime(); Date endTime = queryAnalysisVO.getEndTime(); Integer interval = queryAnalysisVO.getInterval(); Map timeMap = new LinkedHashMap<>(); LocalDate endDate = LocalDate.now(); LocalDate startDate = LocalDate.now().minusDays(interval); if (startTime != null && endTime != null) { timeMap = convertStartEndTime(startTime, endTime); startDate = convertDate(timeMap.get("start")).toLocalDate(); endDate = convertDate(timeMap.get("end")).toLocalDate(); } else { timeMap = getStartEndTime(interval); } lambdaQueryWrapper.in(ReceiveOilValue::getDeviceName, ids) .ge(ReceiveOilValue::getCreateTime, timeMap.get("start")) .lt(ReceiveOilValue::getCreateTime, timeMap.get("end")) .orderByDesc(ReceiveOilValue::getCreateTime); List oilValues = receiveOilValueService.list(lambdaQueryWrapper); List dateRange = startDate.datesUntil(endDate.plusDays(1)).collect(Collectors.toList()); Map> groups = new LinkedHashMap<>(); for (LocalDate localDate : dateRange) { groups.put(localDate, new ArrayList<>()); } for (ReceiveOilValue receiveOilValue : oilValues) { LocalDateTime localDateTime = convertDate(receiveOilValue.getCreateTime()); LocalDate localDate = localDateTime.toLocalDate(); groups.computeIfPresent(localDate, (key, list) -> { list.add(receiveOilValue); return list; }); } for (Map.Entry> entry : groups.entrySet()) { JSONObject jsonObject = new JSONObject(); jsonObject.put("date", entry.getKey()); jsonObject.put("avg", "0.0"); if (entry.getValue().size() > 0) { List valueList = entry.getValue(); Integer size = valueList.size(); Double total = 0.0; for (ReceiveOilValue receiveOilValue : valueList) { Double flowTotalValue = convertString(receiveOilValue.getFlowTotal()); total = total + flowTotalValue; } jsonObject.put("avg", String.format("%.3f", total / size)); } jsonArray.add(jsonObject); } } return AjaxResult.success(jsonArray); } //多条件查询水表态势分析数据 @PostMapping("/queryWaterAnalysis") @Operation(summary = "多条件查询水表态势分析数据") public AjaxResult queryWaterAnalysis(@Validated @RequestBody QueryAnalysisVO queryAnalysisVO) { List ids = new ArrayList<>(); Integer beId = queryAnalysisVO.getBeId(); List equList = queryDpEquipmentList(beId, 2); JSONArray jsonArray = new JSONArray(); if (equList.size() > 0) { for (DpEquipmentVO dpEquipmentVO : equList) { ids.add(String.valueOf(dpEquipmentVO.getId())); } LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); Date startTime = queryAnalysisVO.getStartTime(); Date endTime = queryAnalysisVO.getEndTime(); Integer interval = queryAnalysisVO.getInterval(); Map timeMap = new LinkedHashMap<>(); LocalDate endDate = LocalDate.now(); LocalDate startDate = LocalDate.now().minusDays(interval); if (startTime != null && endTime != null) { timeMap = convertStartEndTime(startTime, endTime); startDate = convertDate(timeMap.get("start")).toLocalDate(); endDate = convertDate(timeMap.get("end")).toLocalDate(); } else { timeMap = getStartEndTime(interval); } lambdaQueryWrapper.in(ReceiveWaterValue::getDeviceName, ids) .ge(ReceiveWaterValue::getCreateTime, timeMap.get("start")) .lt(ReceiveWaterValue::getCreateTime, timeMap.get("end")) .orderByDesc(ReceiveWaterValue::getCreateTime); List waterValues = receiveWaterValueService.list(lambdaQueryWrapper); List dateRange = startDate.datesUntil(endDate.plusDays(1)).collect(Collectors.toList()); Map> groups = new LinkedHashMap<>(); for (LocalDate localDate : dateRange) { groups.put(localDate, new ArrayList<>()); } for (ReceiveWaterValue receiveWaterValue : waterValues) { LocalDateTime localDateTime = convertDate(receiveWaterValue.getCreateTime()); LocalDate localDate = localDateTime.toLocalDate(); groups.computeIfPresent(localDate, (key, list) -> { list.add(receiveWaterValue); return list; }); } for (Map.Entry> entry : groups.entrySet()) { JSONObject jsonObject = new JSONObject(); jsonObject.put("date", entry.getKey()); jsonObject.put("avg", "0.0"); if (entry.getValue().size() > 0) { List valueList = entry.getValue(); Integer size = valueList.size(); Double total = 0.0; for (ReceiveWaterValue receiveWaterValue : valueList) { Double zhengTotalValue = convertString(receiveWaterValue.getZhengTotal()); total = total + zhengTotalValue; } jsonObject.put("avg", String.format("%.3f", total / size)); } jsonArray.add(jsonObject); } } return AjaxResult.success(jsonArray); } /** * 下发json文件 */ @PostMapping("/uploadFile") @Operation(summary = "下发json文件") public AjaxResult uploadFile(@RequestBody JSONArray json, @RequestParam(value = "name") String name) { SysFileManage sysFileManage = new SysFileManage(); sysFileManage.setName(name + "_" + System.currentTimeMillis()); sysFileManage.setType("json"); sysFileManage.setExt("json"); String filePath = ruoYiConfig.getJson() + "/" + sysFileManage.getName() + ".json"; String path = "/profile/" + sysFileManage.getName() + ".json"; sysFileManage.setFilePath(path); try { File file = new File(filePath); file.createNewFile(); String jsonStr = JSON.toJSONString(json); Writer writer = new OutputStreamWriter(new FileOutputStream(file), "UTF-8"); writer.write(jsonStr); writer.flush(); writer.close(); return AjaxResult.success(sysFileService.saveData(sysFileManage)); } catch (Exception e) { return AjaxResult.error(e.getMessage()); } } //对列表进行分页 private TableDataInfo paginate(List list, int pageNum, int pageSize) { if (list == null || list.isEmpty()) { return new TableDataInfo(new ArrayList<>(), 0); } int total = list.size(); int formIndex = (pageNum - 1) * pageSize; int toIndex = Math.min(formIndex + pageSize, total); if (formIndex >= total) { return new TableDataInfo(new ArrayList<>(), total); } List subList = list.subList(formIndex, toIndex); return new TableDataInfo(subList, total); } @GetMapping("/getYdkfm") @Operation(summary = "获取油电控阀门") public AjaxResult getYdkfm(Integer id) throws Exception { if (null == id || id < 0L) return AjaxResult.error("id为空"); DpEquipmentVO dpEquipmentVO = dpEquipmentService.selectById(id); DpEquipment dp = receiveModuleInfoService.getIp(String.valueOf(dpEquipmentVO.getId()), dpEquipmentVO.getEquipmentTypeId()); DpEquipment eq = dpEquipmentService.getEpByField(String.valueOf(dp.getPort())); if (null == eq || null == eq.getId()) return AjaxResult.error("找不到油电控阀门"); Map map = receiveModuleInfoService.getYdkfmStatus(String.valueOf(eq.getId())); return success(map); } @GetMapping("/ctrlYdkfm") @Operation(summary = "控制油电控阀门") public AjaxResult ctrlYdkfm(Integer id, Boolean flag) throws Exception { if (null == id || id < 0L) return AjaxResult.error("id为空"); if (null == flag) return AjaxResult.error("flag为空"); DpEquipmentVO dpEquipmentVO = dpEquipmentService.selectById(id); DpEquipment dp = receiveModuleInfoService.getIp(String.valueOf(dpEquipmentVO.getId()), dpEquipmentVO.getEquipmentTypeId()); DpEquipment eq = dpEquipmentService.getEpByField(String.valueOf(dp.getPort())); if (null == eq || null == eq.getId()) return AjaxResult.error("找不到油电控阀门"); Map map = receiveModuleInfoService.ctrlYdkfm(String.valueOf(eq.getId()), flag); return success(map); } }