|
|
@@ -0,0 +1,186 @@
|
|
|
+package vip.xiaonuo.coldchain.modular.bi.service;
|
|
|
+
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
+import cn.hutool.core.collection.CollectionUtil;
|
|
|
+import cn.hutool.core.convert.Convert;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import jakarta.annotation.Resource;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import vip.xiaonuo.auth.core.pojo.SaBaseLoginUser;
|
|
|
+import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
|
|
|
+import vip.xiaonuo.coldchain.modular.bi.dto.MonitorTargetBiDTO;
|
|
|
+import vip.xiaonuo.coldchain.modular.bi.dto.MonitorTargetRegionBiDTO;
|
|
|
+import vip.xiaonuo.coldchain.modular.bi.dto.TargetRoomBiDTO;
|
|
|
+import vip.xiaonuo.coldchain.modular.monitordevice.service.MonitorDeviceService;
|
|
|
+import vip.xiaonuo.coldchain.modular.monitornotice.entity.Realtime;
|
|
|
+import vip.xiaonuo.coldchain.modular.monitornotice.param.RealtimeParam;
|
|
|
+import vip.xiaonuo.coldchain.modular.monitornotice.service.MonitorNoticeService;
|
|
|
+import vip.xiaonuo.coldchain.modular.monitortarget.entity.MonitorTarget;
|
|
|
+import vip.xiaonuo.coldchain.modular.monitortarget.enums.MonitorStatusEnum;
|
|
|
+import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetPageParam;
|
|
|
+import vip.xiaonuo.coldchain.modular.monitortarget.service.MonitorTargetService;
|
|
|
+import vip.xiaonuo.coldchain.modular.monitortargetregion.entity.MonitorTargetRegion;
|
|
|
+import vip.xiaonuo.coldchain.modular.monitortargetregion.service.MonitorTargetRegionService;
|
|
|
+import vip.xiaonuo.coldchain.modular.targetroom.entity.TargetRoom;
|
|
|
+import vip.xiaonuo.coldchain.modular.targetroom.service.TargetRoomService;
|
|
|
+import vip.xiaonuo.common.enums.CommonDeleteFlagEnum;
|
|
|
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
|
|
|
+import vip.xiaonuo.common.page.CommonPageRequest;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Objects;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+@Service
|
|
|
+public class BiService {
|
|
|
+ @Resource
|
|
|
+ private TargetRoomService targetRoomService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private MonitorTargetService monitorTargetService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private MonitorTargetRegionService monitorTargetRegionService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private MonitorNoticeService monitorNoticeService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private MonitorDeviceService monitorDeviceService;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ public List<TargetRoomBiDTO> listTargetRoom() {
|
|
|
+ SaBaseLoginUser loginUser = StpLoginUserUtil.getLoginUser();
|
|
|
+ QueryWrapper<TargetRoom> queryWrapper = new QueryWrapper<TargetRoom>().checkSqlInjection();
|
|
|
+ queryWrapper.lambda().eq(TargetRoom::getCreateOrg, loginUser.getOrgId()).eq(TargetRoom::getDeleteFlag, CommonDeleteFlagEnum.NOT_DELETE);
|
|
|
+ queryWrapper.lambda().orderByAsc(TargetRoom::getSortCode).orderByAsc(TargetRoom::getId);
|
|
|
+ List<TargetRoom> targetRooms = targetRoomService.list(CommonPageRequest.defaultPage(), queryWrapper);
|
|
|
+ List<TargetRoomBiDTO> targetRoomBiDTOS = BeanUtil.copyToList(targetRooms, TargetRoomBiDTO.class);
|
|
|
+ targetRoomBiDTOS.stream().parallel().forEach(r->{
|
|
|
+ //统计在线 离线 总数
|
|
|
+ List<MonitorTarget> monitorTargets = monitorTargetService.getTargetListByRoom(r.getId());
|
|
|
+ long count = monitorTargets.stream().filter(t -> t.getStatus().equals(MonitorStatusEnum.ONLINE.getCode())).count();
|
|
|
+ r.setOnlineNum(Convert.toInt(count));
|
|
|
+ r.setOfflineNum(monitorTargets.size()-r.getOnlineNum());
|
|
|
+ r.setAllNum(monitorTargets.size());
|
|
|
+ });
|
|
|
+ return targetRoomBiDTOS;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public Page<MonitorTargetBiDTO> pageMonitorTarget(MonitorTargetPageParam monitorTargetPageParam) {
|
|
|
+ SaBaseLoginUser loginUser = StpLoginUserUtil.getLoginUser();
|
|
|
+ QueryWrapper<MonitorTarget> queryWrapper = new QueryWrapper<MonitorTarget>().checkSqlInjection();
|
|
|
+ if (StrUtil.isNotBlank(monitorTargetPageParam.getName())) {
|
|
|
+ queryWrapper.lambda().like(MonitorTarget::getName, monitorTargetPageParam.getName());
|
|
|
+ }
|
|
|
+ if (StrUtil.isNotBlank(monitorTargetPageParam.getRoomId())) {
|
|
|
+ queryWrapper.lambda().eq(MonitorTarget::getRoomId, monitorTargetPageParam.getRoomId());
|
|
|
+ }
|
|
|
+ if (ObjectUtil.isAllNotEmpty(monitorTargetPageParam.getSortField(), monitorTargetPageParam.getSortOrder())) {
|
|
|
+ CommonSortOrderEnum.validate(monitorTargetPageParam.getSortOrder());
|
|
|
+ queryWrapper.orderBy(true, monitorTargetPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()), StrUtil.toUnderlineCase(monitorTargetPageParam.getSortField()));
|
|
|
+ } else {
|
|
|
+ queryWrapper.lambda().orderByAsc(MonitorTarget::getId);
|
|
|
+ }
|
|
|
+ queryWrapper.lambda().eq(MonitorTarget::getCreateOrg, loginUser.getOrgId()).eq(MonitorTarget::getDeleteFlag, CommonDeleteFlagEnum.NOT_DELETE);
|
|
|
+ Page<MonitorTarget> monitorTargets = monitorTargetService.page(CommonPageRequest.defaultPage(), queryWrapper);
|
|
|
+ List<MonitorTargetBiDTO> monitorTargetBiDTOS = BeanUtil.copyToList(monitorTargets.getRecords(), MonitorTargetBiDTO.class);
|
|
|
+
|
|
|
+ monitorTargetBiDTOS.stream().parallel().forEach(monitorTarget -> {
|
|
|
+ //获取设备区域列表并赋值返回
|
|
|
+ List<MonitorTargetRegion> regions = monitorTargetRegionService.getRegionListByTargetId(monitorTarget.getId().toString());
|
|
|
+ //对区域设备进行按名称分组
|
|
|
+ Map<String, List<MonitorTargetRegion>> regionMap =
|
|
|
+ regions.stream().collect(Collectors.groupingBy(MonitorTargetRegion::getName));
|
|
|
+ List<MonitorTargetRegionBiDTO> regionBiDTOS = new ArrayList<>(regionMap.size());
|
|
|
+ int onlineNum = 0;
|
|
|
+ //查询寻分组区域设备监控数据
|
|
|
+ for (Map.Entry<String, List<MonitorTargetRegion>> entry : regionMap.entrySet()) {
|
|
|
+ List<Realtime> realtimes = entry.getValue().stream().parallel().map(r -> {
|
|
|
+ Realtime realtime = monitorNoticeService.getRealtime(new RealtimeParam(r.getMonitorDeviceId(), r.getSensorRoute()));
|
|
|
+ realtime.setTemperatureUp(r.getTemperatureUp());
|
|
|
+ realtime.setTemperatureDown(r.getTemperatureDown());
|
|
|
+ realtime.setHumidityUp(r.getHumidityUp());
|
|
|
+ realtime.setHumidityDown(r.getHumidityDown());
|
|
|
+ realtime.setCo2Up(r.getCo2Up());
|
|
|
+ realtime.setCo2Down(r.getCo2Down());
|
|
|
+ realtime.setSensorRoute(r.getSensorRoute());
|
|
|
+ realtime.setSensorType(r.getSensorType());
|
|
|
+ realtime.setDeviceCode(r.getDeviceCode());
|
|
|
+ return realtime;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ MonitorTargetRegionBiDTO targetRegionBiDTO = new MonitorTargetRegionBiDTO();
|
|
|
+ targetRegionBiDTO.setName(entry.getKey());
|
|
|
+ targetRegionBiDTO.setRealtimes(realtimes);
|
|
|
+ targetRegionBiDTO.setUpdateTime(CollectionUtil.isNotEmpty(realtimes)?realtimes.get(0).getUpdateTime():"");
|
|
|
+ regionBiDTOS.add(targetRegionBiDTO);
|
|
|
+ onlineNum += realtimes.stream().filter(r->r!=null && r.getSensorData()!=null).count();
|
|
|
+ }
|
|
|
+ //查询冰箱所在房间
|
|
|
+ TargetRoom targetRoom = targetRoomService.getById(monitorTarget.getRoomId());
|
|
|
+ monitorTarget.setRoomName(targetRoom.getName());
|
|
|
+ monitorTarget.setRegions(regionBiDTOS);
|
|
|
+ monitorTarget.setLastHeartbeatTime(monitorTarget.getLastHeartbeatTime());
|
|
|
+ //统计在线 离线 总数
|
|
|
+ monitorTarget.setAllNum(regions.size());
|
|
|
+ monitorTarget.setOnlineNum(onlineNum);
|
|
|
+ monitorTarget.setOfflineNum(monitorTarget.getAllNum()-monitorTarget.getOnlineNum());
|
|
|
+ });
|
|
|
+ Page<MonitorTargetBiDTO> monitorTargetBiDTOPage = new Page<>(monitorTargets.getCurrent(), monitorTargets.getSize(), monitorTargets.getTotal());
|
|
|
+ monitorTargetBiDTOPage.setRecords(monitorTargetBiDTOS);
|
|
|
+ return monitorTargetBiDTOPage;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+// public Page<MonitorTargetBiDTO> pageMonitorTargetSensor(MonitorTargetPageParam monitorTargetPageParam) {
|
|
|
+// SaBaseLoginUser loginUser = StpLoginUserUtil.getLoginUser();
|
|
|
+// QueryWrapper<MonitorTarget> queryWrapper = new QueryWrapper<MonitorTarget>().checkSqlInjection();
|
|
|
+// if (StrUtil.isNotBlank(monitorTargetPageParam.getName())) {
|
|
|
+// queryWrapper.lambda().like(MonitorTarget::getName, monitorTargetPageParam.getName());
|
|
|
+// }
|
|
|
+// if (StrUtil.isNotBlank(monitorTargetPageParam.getRoomId())) {
|
|
|
+// queryWrapper.lambda().eq(MonitorTarget::getRoomId, monitorTargetPageParam.getRoomId());
|
|
|
+// }
|
|
|
+// if (ObjectUtil.isAllNotEmpty(monitorTargetPageParam.getSortField(), monitorTargetPageParam.getSortOrder())) {
|
|
|
+// CommonSortOrderEnum.validate(monitorTargetPageParam.getSortOrder());
|
|
|
+// queryWrapper.orderBy(true, monitorTargetPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()), StrUtil.toUnderlineCase(monitorTargetPageParam.getSortField()));
|
|
|
+// } else {
|
|
|
+// queryWrapper.lambda().orderByAsc(MonitorTarget::getId);
|
|
|
+// }
|
|
|
+// queryWrapper.lambda().eq(MonitorTarget::getCreateOrg, loginUser.getOrgId()).eq(MonitorTarget::getDeleteFlag, CommonDeleteFlagEnum.NOT_DELETE);
|
|
|
+// Page<MonitorTarget> monitorTargets = monitorTargetService.page(CommonPageRequest.defaultPage(), queryWrapper);
|
|
|
+// List<MonitorTargetBiDTO> monitorTargetBiDTOS = BeanUtil.copyToList(monitorTargets.getRecords(), MonitorTargetBiDTO.class);
|
|
|
+// //获取设备区域列表并赋值返回
|
|
|
+// monitorTargetBiDTOS.stream().parallel().forEach(monitorTarget -> {
|
|
|
+// List<MonitorTargetRegion> regions = monitorTargetRegionService.getRegionListByTargetId(monitorTarget.getId().toString());
|
|
|
+// Map<String, List<MonitorTargetRegion>> collect =
|
|
|
+// regions.stream().collect(Collectors.groupingBy(MonitorTargetRegion::getName));
|
|
|
+// List<MonitorTargetRegionBiDTO> regionBiDTOS = new ArrayList<>(collect.size());
|
|
|
+// for (Map.Entry<String, List<MonitorTargetRegion>> entry : collect.entrySet()) {
|
|
|
+// MonitorTargetRegionBiDTO targetRegionBiDTO = new MonitorTargetRegionBiDTO();
|
|
|
+// List<Realtime> realtimes = entry.getValue().stream().parallel().map(r -> {
|
|
|
+// Realtime realtime = monitorNoticeService.getRealtime(new RealtimeParam(r.getMonitorDeviceId(), r.getSensorRoute()));
|
|
|
+// return realtime;
|
|
|
+// }).collect(Collectors.toList());
|
|
|
+// targetRegionBiDTO.setName(entry.getKey());
|
|
|
+// targetRegionBiDTO.setRealtimes(realtimes);
|
|
|
+// regionBiDTOS.add(targetRegionBiDTO);
|
|
|
+// }
|
|
|
+// TargetRoom targetRoom = targetRoomService.getById(monitorTarget.getRoomId());
|
|
|
+// monitorTarget.setRoomName(targetRoom.getName());
|
|
|
+// monitorTarget.setRegions(regionBiDTOS);
|
|
|
+// });
|
|
|
+// Page<MonitorTargetBiDTO> monitorTargetBiDTOPage = new Page<>(monitorTargets.getCurrent(), monitorTargets.getSize(), monitorTargets.getTotal());
|
|
|
+// monitorTargetBiDTOPage.setRecords(monitorTargetBiDTOS);
|
|
|
+// return monitorTargetBiDTOPage;
|
|
|
+// }
|
|
|
+
|
|
|
+}
|