jinpengyong
2024-03-07 36844dfeea0914de1138be9ebdf27c92d745d73a
fix:断线统计补充提交
1 files added
12 files modified
226 ■■■■■ changed files
screen-api/src/main/java/com/moral/api/controller/DeviceOnlineRateController.java 12 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/controller/OrganizationController.java 8 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/dto/OnlineRatePageCond.java 5 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/entity/Organization.java 11 ●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/mapper/DeviceMapper.java 5 ●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/mapper/MonitorPointMapper.java 2 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/pojo/vo/monitorPoint/MonitorPointVos.java 40 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/service/DeviceService.java 8 ●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/service/OrganizationService.java 1 ●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java 59 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java 58 ●●●● patch | view | raw | blame | history
screen-api/src/main/resources/mapper/DeviceMapper.xml 12 ●●●●● patch | view | raw | blame | history
screen-api/src/main/resources/mapper/MonitorPointMapper.xml 5 ●●●●● patch | view | raw | blame | history
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>