screen-api/src/main/java/com/moral/api/controller/DeviceOnlineRateController.java
@@ -13,10 +13,10 @@ import java.util.List; import java.util.Map; import javax.validation.Valid; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.moral.api.dto.OnlineRatePageCond; import com.moral.api.service.DeviceService; import com.moral.api.vo.OnlineRateVo; import com.moral.constant.ResponseCodeEnum; import com.moral.constant.ResultMessage; /** @@ -55,10 +55,14 @@ @GetMapping("state") @PostMapping("state") @ApiOperation("当前在线率") public ResultMessage state(Integer organizationId){ Map<String, Object> start = deviceService.getStart(organizationId); public ResultMessage state(@RequestBody Map<String, Object> params){ if (!params.containsKey("macs")) { return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); } List<String> macs = (List<String>) params.get("macs"); Map<String, Object> start = deviceService.getStart(macs); return ResultMessage.ok(start); } } screen-api/src/main/java/com/moral/api/controller/OrganizationController.java
@@ -86,4 +86,12 @@ List<Organization> organizations = organizationService.getOrganizationId(); return ResultMessage.ok(ObjectUtils.isEmpty(organizations)?"0":organizations); } @GetMapping("queryDevices") @ApiOperation("查询组织信息") public ResultMessage queryDevices(){ List<Organization> organizations = organizationService.queryDevices(); return ResultMessage.ok(organizations); } } screen-api/src/main/java/com/moral/api/dto/OnlineRatePageCond.java
@@ -7,6 +7,7 @@ import lombok.experimental.Accessors; import java.io.Serializable; import java.util.List; import com.moral.api.pojo.query.PageCond; @@ -25,8 +26,8 @@ public class OnlineRatePageCond implements Serializable { @ApiModelProperty(value = "组织id") private Integer organizationId; @ApiModelProperty(value = "设备集合") private List<String> macs; // @ApiModelProperty(value = "分页参数") // private PageCond page; screen-api/src/main/java/com/moral/api/entity/Organization.java
@@ -1,10 +1,13 @@ package com.moral.api.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.extension.activerecord.Model; import com.baomidou.mybatisplus.annotation.TableId; import java.io.Serializable; import com.moral.api.pojo.vo.monitorPoint.MonitorPointVos; import java.util.Date; import java.util.List; import lombok.Data; import lombok.EqualsAndHashCode; @@ -124,5 +127,9 @@ */ private String isDelete; /** * 站点设备 */ @TableField(exist = false) private List<MonitorPointVos> monitorPoint; } screen-api/src/main/java/com/moral/api/mapper/DeviceMapper.java
@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.moral.api.pojo.dto.dataDisplay.HeatMapDTO; import com.moral.api.pojo.vo.device.AppDeviceVo; import com.moral.api.pojo.vo.device.DeviceVO; import com.moral.api.vo.OnlineRateVo; import io.lettuce.core.dynamic.annotation.Param; @@ -52,6 +53,8 @@ Page<OnlineRateVo> getPage(Page page, @Param("organizationId")Integer organizationId); //设备在线率不分页 List<OnlineRateVo> getLists(@Param("organizationId")Integer organizationId,@Param("state")Integer state); List<OnlineRateVo> getLists(List<String> macs,@Param("state")Integer state); List<DeviceVO> getListVo(Integer monitorPointId); } screen-api/src/main/java/com/moral/api/mapper/MonitorPointMapper.java
@@ -4,6 +4,7 @@ import com.moral.api.entity.MonitorPoint; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.moral.api.pojo.vo.monitorPoint.MonitorPointVos; /** * <p> @@ -17,4 +18,5 @@ List<Integer> getMonitorPointiId(Integer id); List<MonitorPointVos> getMonitorPoint(Integer id); } screen-api/src/main/java/com/moral/api/pojo/vo/monitorPoint/MonitorPointVos.java
New file @@ -0,0 +1,40 @@ package com.moral.api.pojo.vo.monitorPoint; import lombok.Data; import java.util.List; import com.moral.api.pojo.vo.device.DeviceVO; /** * Description //todo * * @author swb * @ClassName MonitorPointVos * @date 2024.03.07 14:23 */ @Data public class MonitorPointVos { private Integer id; private Integer organizationId; private String name; private Double longitude; private Double latitude; private String state; private Integer provinceCode; private Integer cityCode; private Integer areaCode; private String address; private List<DeviceVO> monitorPoint; } screen-api/src/main/java/com/moral/api/service/DeviceService.java
@@ -87,8 +87,12 @@ Map<String,Object> detail(String mac,String startTime,String endTime, String type); Map<String,Object> getStart(Integer organizationId); /** * 设备在线率 * @param macs * @return */ Map<String,Object> getStart(List<String> macs); Map<String,Object> detailV1(String mac,String startTime,String endTime, String type); screen-api/src/main/java/com/moral/api/service/OrganizationService.java
@@ -51,4 +51,5 @@ List<Organization> getOrganizationId(); List<Organization> queryDevices(); } screen-api/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java
@@ -350,7 +350,7 @@ Date startDate = DateUtils.getDate(startTime,DateUtils.yyyy_MM_dd_HH_mm_ss_EN); Date endDate = DateUtils.getDate(endTime,DateUtils.yyyy_MM_dd_HH_mm_ss_EN); List<String> tableNames = MybatisPLUSUtils.getTableNamesByWrapper(startDate, endDate, SeparateTableType.MONTH); for (String mac:macs) { /* for (String mac:macs) { Map<String, Object> mapParams = new HashMap<>(); mapParams.put("startDate",startDate); mapParams.put("endDate",endDate); @@ -384,6 +384,56 @@ historyHourlyMap.put("time",timeStr); list.add(historyHourlyMap); } }*/ for (String mac:macs) { Map<String, Object> mapParams = new HashMap<>(); mapParams.put("startDate",startDate); mapParams.put("endDate",endDate); mapParams.put("mac",mac); List<HistoryFiveMinutely> HistoryFiveMinutelys = FiveMinuteTableQuery(mapParams, tableNames); HistoryFiveMinutelys = HistoryFiveMinutelys.stream().distinct().collect(Collectors.toList()); List<HistoryFiveMinutely> distinctHistoryHourlies = new ArrayList<>(); Map<String, Object> disMap = new HashMap<>(); for (HistoryFiveMinutely historyFiveMinutely:HistoryFiveMinutelys) { Date time = historyFiveMinutely.getTime(); String timeStr = DateUtils.dateToDateString(time,DateUtils.yyyy_MM_dd_HH_mm_EN); if (!disMap.containsKey(timeStr)){ distinctHistoryHourlies.add(historyFiveMinutely); disMap.put(timeStr,true); } } for (HistoryFiveMinutely historyFiveMinutely:distinctHistoryHourlies) { Map<String,Object> historyHourlyMap = new HashMap<>(); historyHourlyMap.put("mac",mac); JSONObject value= JSONObject.parseObject(historyFiveMinutely.getValue()); Double sensorValue = Objects.nonNull(value)&&Objects.nonNull(value.get(sensorCode))?Double.parseDouble(value.get(sensorCode).toString()):0d; historyHourlyMap.put(sensorCode,sensorValue); Date time = historyFiveMinutely.getTime(); String timeStr = DateUtils.dateToDateString(time, DateUtils.yyyy_MM_dd_HH_mm_EN); historyHourlyMap.put("time",timeStr); list.add(historyHourlyMap); } } Date middleDate = DateUtils.getDate(startTime,DateUtils.yyyy_MM_dd_HH_mm_EN); while (DateUtils.compareDateStr(endTime,DateUtils.dateToDateString(middleDate,DateUtils.yyyy_MM_dd_HH_mm_EN),DateUtils.yyyy_MM_dd_HH_mm_EN)<=0){ for (String mac:macs) { boolean flag = true; for (Map map:list) { if (map.get("time").equals(DateUtils.dateToDateString(middleDate, DateUtils.yyyy_MM_dd_HH_mm_EN)) && map.get("mac").toString().equals(mac.toString())){ flag = false; } } if (flag){ Map<String,Object> historyHourlyMap = new HashMap<>(); historyHourlyMap.put("mac",mac); historyHourlyMap.put(sensorCode,"0.0"); historyHourlyMap.put("time",DateUtils.dateToDateString(middleDate,DateUtils.yyyy_MM_dd_HH_mm_EN)); list.add(historyHourlyMap); } } middleDate = DateUtils.getDateOfMin(middleDate,5); } } for (Map map:list) { @@ -558,7 +608,8 @@ long hour = (diff / nh)+1; //获取间隔几个小时 Map<String, List<OnlineRateVo>> collectList=new HashMap<>(); List<OnlineRateVo> OnlineRateVoList = deviceMapper.getLists(onlineRatePageCond.getOrganizationId(),onlineRatePageCond.getState()); // List<OnlineRateVo> OnlineRateVoList = deviceMapper.getLists(onlineRatePageCond.getOrganizationId(),onlineRatePageCond.getState()); List<OnlineRateVo> OnlineRateVoList = deviceMapper.getLists(onlineRatePageCond.getMacs(),onlineRatePageCond.getState()); if (!ObjectUtils.isEmpty(OnlineRateVoList)){ for (OnlineRateVo onlineRateVo : OnlineRateVoList) { @@ -972,9 +1023,9 @@ } @Override public Map<String,Object> getStart(Integer organizationId) { public Map<String,Object> getStart(List<String> macs) { HashMap<String, Object> map = new HashMap<>(); List<OnlineRateVo> lists = deviceMapper.getLists(organizationId, null); List<OnlineRateVo> lists = deviceMapper.getLists(macs, null); if (!ObjectUtils.isEmpty(lists)){ Map<String, List<OnlineRateVo>> collect = lists.stream().collect(Collectors.groupingBy(OnlineRateVo::getState)); int size1 = lists.size(); screen-api/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java
@@ -2,23 +2,21 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.moral.api.config.Interceptor.UserHelper; import com.moral.api.entity.MonitorPoint; import com.moral.api.entity.Organization; import com.moral.api.mapper.DeviceMapper; import com.moral.api.mapper.MonitorPointMapper; import com.moral.api.mapper.OrganizationMapper; import com.moral.api.pojo.vo.user.QxUser; import com.moral.api.pojo.vo.device.DeviceVO; import com.moral.api.pojo.vo.monitorPoint.MonitorPointVos; import com.moral.api.service.DeviceService; import com.moral.api.service.MonitorPointService; import com.moral.api.service.OrganizationService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.moral.constant.Constants; import com.moral.util.TokenUtils; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -36,6 +34,13 @@ @Autowired OrganizationMapper organizationMapper; @Autowired MonitorPointMapper monitorPointMapper; @Autowired DeviceMapper deviceMapper; @@ -107,4 +112,45 @@ } return rsList; } /** * 查询组织信息 * @return */ @Override public List<Organization> queryDevices() { Map<String, Object> userInfo = (Map<String, Object>) TokenUtils.getUserInfo(); Map<String, Object> orgInfo = (Map<String, Object>) userInfo.get("organization"); Integer organizationId = (Integer) orgInfo.get("id"); LambdaQueryWrapper<Organization> wrapper = new LambdaQueryWrapper<>(); wrapper.select(Organization::getId,Organization::getAddress,Organization::getAreaName,Organization::getName); wrapper.eq(Organization::getIsDelete,Constants.NOT_DELETE); wrapper.orderByDesc(Organization::getCreateTime); List<Organization> organizations; if (organizationId==24){ wrapper.eq(Organization::getParentId,organizationId); organizations = organizationMapper.selectList(wrapper); }else { wrapper.eq(Organization::getId,organizationId); organizations = organizationMapper.selectList(wrapper); } if (CollectionUtils.isNotEmpty(organizations)){ organizations.forEach(it ->{ //查询站点 // QueryWrapper<MonitorPoint> queryMonitorPointsWrapper = new QueryWrapper<>(); // queryMonitorPointsWrapper.eq("organization_id", it.getId()); // queryMonitorPointsWrapper.eq("is_delete", Constants.NOT_DELETE); // List<MonitorPoint> monitorPoints = monitorPointMapper.selectList(queryMonitorPointsWrapper); List<MonitorPointVos> monitorPoints = monitorPointMapper.getMonitorPoint(it.getId()); //查询站点对应的设备 for (MonitorPointVos monitorPoint : monitorPoints) { // List<Device> devices = deviceService.getDevicesByMonitorPointId(monitorPoint.getId()); List<DeviceVO> listVo = deviceMapper.getListVo(monitorPoint.getId()); monitorPoint.setMonitorPoint(listVo); } it.setMonitorPoint(monitorPoints); } ); } return organizations; } } screen-api/src/main/resources/mapper/DeviceMapper.xml
@@ -276,7 +276,13 @@ <select id="getLists" resultType="com.moral.api.vo.OnlineRateVo"> select d.name,d.state,d.mac from device as d where organization_id=#{organizationId} and is_delete=0 select d.name,d.state,d.mac from device as d where is_delete=0 <if test="macs != null and macs.size !=0"> and mac in <foreach collection="macs" item="mac" index="index" open="(" close=")" separator=","> #{mac} </foreach> </if> <if test="state !=null and state == 0" > and state=#{state} </if> @@ -284,4 +290,8 @@ and state<![CDATA[>=]]>#{state} </if> </select> <select id="getListVo" resultType="com.moral.api.pojo.vo.device.DeviceVO"> select * from device where monitor_point_id=#{monitorPointId} and is_delete=0 </select> </mapper> screen-api/src/main/resources/mapper/MonitorPointMapper.xml
@@ -25,4 +25,9 @@ select id from monitor_point where organization_id=#{id} and is_delete=0 </select> <select id="getMonitorPoint" resultType="com.moral.api.pojo.vo.monitorPoint.MonitorPointVos"> select * from monitor_point where organization_id=#{id} and is_delete=0 </select> </mapper>