/* * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the dreamlu.net developer nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * Author: Chill 庄骞 (smallchill@163.com) */ package org.springblade.jfpt.equipment.service.impl; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springblade.core.tool.node.ForestNodeMerger; import org.springblade.core.tool.utils.Func; import org.springblade.jfpt.alarm.vo.AlarmVO; import org.springblade.jfpt.equipment.entity.Equipment; import org.springblade.jfpt.equipment.mapper.EquipmentMapper; import org.springblade.jfpt.equipment.service.IEquipmentService; import org.springblade.jfpt.equipment.vo.EquipmentVO; import org.springblade.jfpt.equipment.vo.EquipmentVOS; import org.springblade.jfpt.parcel.vo.ConditionVo; import org.springblade.system.cache.SysCache; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; /** * 服务实现类 * * @author BladeX * @since 2020-07-01 */ @Service public class EquipmentServiceImpl extends ServiceImpl implements IEquipmentService { private static final String PARENT_ID = "parentId"; //时间差 private long TIME_DIFFERENCE = 24*3600*1000; @Override public IPage selectEquipmentPage(IPage page, EquipmentVO equipment,List childList) { return page.setRecords(baseMapper.selectEquipmentPage(page,equipment,childList)); } @Override public IPage selectPage(IPage page, EquipmentVO equipment,String pid) { return page.setRecords(baseMapper.selectEquipmentPage(page,equipment,null)); } @Override public IPage selectDeptPages(IPage page, EquipmentVO equipment,String pid,String dxdype) { // List deptIdList; // if (pid != null && !pid.equals("")){ // deptIdList = SysCache.getDeptChildIds(Long.valueOf(pid)); // }else{ // deptIdList = SysCache.getDeptChildIds(null); // } return page.setRecords(baseMapper.selectDeptPages(page,equipment,pid,dxdype)); } @Override public List tree() { return ForestNodeMerger.merge(baseMapper.tree()); } @Override public List listAll(EquipmentVO equipment) { return baseMapper.listAll(equipment); } @Override public void updateOne(Equipment equipment) { baseMapper.updateOne(equipment); } @Override public void saveImg(EquipmentVO equipment) { baseMapper.saveImg(equipment); } @Override public void s(Equipment equipment) { baseMapper.s(equipment); } @Override public void updataType(String arr) { baseMapper.updataType(arr); } @Override public void updataTypeC(String arr) { baseMapper.updataTypeC(arr); } @Override public List lazyList(Long parentId, Map param) { // 判断点击搜索但是没有查询条件的情况 if (Func.isEmpty(param.get(PARENT_ID)) && param.size() == 1) { parentId = 0L; } // 判断点击搜索带有查询条件的情况 if (Func.isEmpty(param.get(PARENT_ID)) && param.size() > 1 && Func.toLong(parentId) == 0L) { parentId = null; } return baseMapper.lazyList(parentId, param); } @Override public EquipmentVOS selectInfo(Equipment equipment) { return baseMapper.selectInfo(equipment); } @Override public List> selectInfos(String deviceNumber) { return baseMapper.selectInfos(deviceNumber); } @Override public List selectList(String deviceType) { return baseMapper.selectList(deviceType); } @Override public void updateChannel(String heartbeat, String deviceNumber) { baseMapper.updateChannel(heartbeat, deviceNumber); } /** * 查询在线设备总数 * @param conditionVo status 状态码 0:本日 1:本周 2:本月 * @return */ @Override public Integer selectEquipmentCount(ConditionVo conditionVo) { //更新设备状态 updateEquipmentDtype(); //先查询所有的设备 Integer equipmentCount = baseMapper.selectEqCz(); System.out.println("equipmentCount = " + equipmentCount); // long time = new Date().getTime(); // long hearbeat = 0; // //遍历集合数据,对比心跳时间,得出在线的设备数量 // int status =0; // if (status==0 && equipmentVOS.size()>0){ // for (EquipmentVO e:equipmentVOS) { // try { // if(null!=e.getHeartbeat()) { // hearbeat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(e.getHeartbeat()).getTime(); // } // } catch (ParseException parseException) { // parseException.printStackTrace(); // } // //对比心跳时间 // if (null!=e.getDtype()) { // if (time - hearbeat < TIME_DIFFERENCE && e.getDtype()!="2" && e.getDtype()!="3") { // equipmentCount += 1; // } // } // } // } //返回数据 return equipmentCount; } @Override public void updateexpireTime(String expireTime, String deviceNumber) { baseMapper.updateexpireTime(expireTime,deviceNumber); } /** * 修改设备状态 2021-5-6 arsn修改 * @param state 设备状态 * @param reason 原因 * @param deviceNumber 设备编号 */ @Override @Transactional(rollbackFor = Exception.class) public void updateExstate(String state, String reason, String deviceNumber) { if(state.equals("系统故障")){ String dType = "3"; baseMapper.updateExstate(dType, reason, deviceNumber); } if(state.equals("一键报警")){ String dType = "2"; baseMapper.updateExstate(dType, reason, deviceNumber); } if(state.equals("处理完成")){ String dType = "1"; baseMapper.updateExstate(dType, reason, deviceNumber); } } @Override public Integer selectEqCz() { return baseMapper.selectEqCz(); } @Override public Integer selectEqCd() { return baseMapper.selectEqCd(); } @Override public List> selectEqCy(String time) { return baseMapper.selectEqCy(time); } @Override public Integer selectEqCg() { return baseMapper.selectEqCg(); } /** * 获取各个设备状态统计数量 * @return */ @Override public Map selEqTypeSum() { //设备在线数量 Integer integerz = baseMapper.selectEqCz(); //设备掉线数量 Integer integerd = baseMapper.selectEqCd(); //设备预警数量 Integer alarmSum = baseMapper.selectEqCys(); //设备故障数量 Integer integerg = baseMapper.selectEqCg(); //封装数据 Map map = new HashMap(); map.put("zx", integerz); map.put("dx", integerd); map.put("yj", alarmSum); map.put("gz", integerg); //返回数据 return map; } /** * 更新设备状态 */ @Override public void updateEquipmentDtype() { //查询所有的设备,不包含故障和警情状态 List equipment = baseMapper.selAllEq(); long time = new Date().getTime(); long hearbeat = 0; List equipmentListz = new ArrayList<>(); List equipmentListl = new ArrayList<>(); for (Equipment e:equipment) { try { if(null!=e.getHeartbeat()) { hearbeat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(e.getHeartbeat()).getTime(); } } catch (ParseException parseException) { parseException.printStackTrace(); } //对比心跳时间,在线 if (time-hearbeat=TIME_DIFFERENCE){ if (null==e.getDtype() || e.getDtype()!="0"){ equipmentListl.add(e.getId()); } } } //批量更新数据 if (equipmentListz.size()>0){ baseMapper.updateEqListz(equipmentListz); } if (equipmentListl.size()>0){ baseMapper.updateEqListl(equipmentListl); } } }