@ -1,34 +1,28 @@
package com.jiagutech.ams.service ;
import cn.dev33.satoken.annotation.SaCheckLogin ;
import cn.dev33.satoken.annotation.SaCheckRole ;
import cn.dev33.satoken.stp.StpUtil ;
import com.alibaba.fastjson2.JSON ;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper ;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils ;
import com.baomidou.mybatisplus.core.toolkit.Wrappers ;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page ;
import com.google.gson.Gson ;
import com.google.gson.reflect.TypeToken ;
import com.jiagutech.ams.constant.UserConstants ;
import com.jiagutech.ams.mapper.DeviceMapper ;
import com.jiagutech.ams.model.DeviceMapping ;
import com.jiagutech.ams.model.LoginUser ;
import com.jiagutech.ams.model.TrackDataJG ;
import com.jiagutech.ams.model.common.PageRequest ;
import com.jiagutech.ams.model.common.PageResult ;
import com.jiagutech.ams.model.dto.DeviceDTO ;
import com.jiagutech.ams.model.dto.RoleDTO ;
import com.jiagutech.ams.model.response.DeviceInfo ;
import com.jiagutech.ams.model.response.JobItem ;
import com.jiagutech.ams.utils.LoginUtil ;
import lombok.RequiredArgsConstructor ;
import lombok.extern.slf4j.Slf4j ;
import org.springframework.data.redis.core.StringRedisTemplate ;
import org.springframework.stereotype.Service ;
import java.lang.reflect.Type ;
import java.util.* ;
import java.util.function.Consumer ;
import java.util.function.Predicate ;
import java.util.stream.Collectors ;
/ * *
* @ClassName DeviceServiceImpl
@ -49,23 +43,20 @@ public class DeviceServiceImpl implements DeviceService {
public List < DeviceInfo > onlineAndRound ( double maxLng , double maxLat , double minLng , double minLat ) {
Set < String > keys = stringRedisTemplate . keys ( TRACK_PREFIX_REDIS_KEY ) ;
List < DeviceInfo > deviceInfos = new ArrayList < > ( ) ;
DeviceInfo deviceInfo1 = new DeviceInfo ( ) . setBoxNum ( "0" ) . setStatus ( 2 ) . setDeviceId ( 321 ) . setBoxNum ( "5ds3a22w" ) . setLng ( 118 . 73929470486111 ) . setLat ( 31 . 9823046875 ) ;
deviceInfos . add ( deviceInfo1 ) ;
if ( CollectionUtils . isNotEmpty ( keys ) ) {
List < String > values = stringRedisTemplate . opsForValue ( ) . multiGet ( keys ) ;
if ( CollectionUtils . isEmpty ( values ) ) {
return deviceInfos ;
}
List < TrackDataJG > trackDataJGS = values . stream ( ) . map ( s - > JSON . parseObject ( s , TrackDataJG . class ) ) . collect ( Collectors . toList ( ) ) ;
List < TrackDataJG > trackDataJGS = values . stream ( ) . map ( s - > JSON . parseObject ( s , TrackDataJG . class ) ) . toList ( ) ;
Predicate < TrackDataJG > predicate = t - > t . getLat ( ) < = maxLat & & t . getLat ( ) > = minLat
& & ( ( t . getLng ( ) > = - 180 & & t . getLng ( ) < = maxLng ) | | ( t . getLng ( ) > = minLng & & t . getLng ( ) < = 180 ) ) ;
if ( maxLat = = 0 & & minLat = = 0 & & maxLng = = 0 & & minLng = = 0 ) {
predicate = t - > true ;
if ( maxLat = = 0 & & minLat = = 0 & & maxLng = = 0 & & minLng = = 0 ) {
predicate = t - > true ;
}
Consumer < TrackDataJG > consumer = t - > deviceInfos . add ( new DeviceInfo ( ) . setBoxNum ( t . getDroneId ( ) ) . setLng ( t . getLng ( ) ) . setLat ( t . getLat ( ) ) ) ;
trackDataJGS . stream ( ) . filter ( predicate ) . forEach ( consumer ) ;
LoginUser loginUser = StpUtil . getSession ( ) . get ( UserConstants . SYS_SESSION , new LoginUser ( ) ) ;
LoginUser loginUser = LoginUtil . getLoginUser ( ) ;
if ( loginUser ! = null & & loginUser . getDept ( ) ! = null ) {
long deptId = loginUser . getDept ( ) . getId ( ) ;
List < DeviceInfo > deviceInfos1 = deviceMapper . queryDeviceList ( deptId ) ;
@ -90,9 +81,43 @@ public class DeviceServiceImpl implements DeviceService {
public PageResult < DeviceDTO > page ( PageRequest < Void > pageRequest ) {
Page < DeviceDTO > page = new Page ( pageRequest . getPageNum ( ) , pageRequest . getPageSize ( ) ) ;
QueryWrapper < DeviceDTO > queryWrapper = Wrappers . query ( ) ;
LoginUser loginUser = StpUtil . getSession ( ) . get ( UserConstants . SYS_SESSION , new LoginUser ( ) ) ;
LoginUser loginUser = LoginUtil . getLoginUser ( ) ;
queryWrapper . eq ( "dept_id" , loginUser . getDept ( ) . getId ( ) ) ;
Page < DeviceDTO > result = deviceMapper . selectPage ( page , queryWrapper ) ;
return PageResult . of ( ( int ) result . getTotal ( ) , ( int ) pageRequest . getPageSize ( ) , ( int ) result . getCurrent ( ) , result . getRecords ( ) ) ;
}
@Override
public List < DeviceInfo > deviceList ( ) {
LoginUser loginUser = LoginUtil . getLoginUser ( ) ;
QueryWrapper < DeviceDTO > queryWrapper = Wrappers . query ( ) ;
Predicate < RoleDTO > predicate1 = r - > r . getKey ( ) . equals ( "manager" ) ;
boolean hasManager = loginUser . getRoles ( ) . stream ( ) . anyMatch ( predicate1 ) ;
if ( hasManager ) {
queryWrapper . eq ( "dept_id" , loginUser . getDept ( ) . getId ( ) ) ;
}
List < DeviceDTO > deviceDTOS = deviceMapper . selectList ( queryWrapper ) ;
Set < String > keys = stringRedisTemplate . keys ( TRACK_PREFIX_REDIS_KEY ) ;
List < DeviceInfo > deviceInfos = new ArrayList < > ( ) ;
deviceDTOS . forEach ( deviceDTO - > {
DeviceInfo deviceInfo = DeviceMapping . INSTANCE . convertDeviceInfo ( deviceDTO ) ;
Optional < String > isOnline = keys . stream ( ) . filter ( s - > s . contains ( deviceDTO . getBoxNum ( ) ) ) . findFirst ( ) ;
if ( isOnline . isPresent ( ) ) {
String s = stringRedisTemplate . opsForValue ( ) . get ( isOnline . get ( ) ) ;
TrackDataJG trackDataJG = JSON . parseObject ( s , TrackDataJG . class ) ;
deviceInfo . setStatus ( 1 ) ;
assert trackDataJG ! = null ;
deviceInfo . setLng ( trackDataJG . getLng ( ) ) ;
deviceInfo . setLat ( trackDataJG . getLat ( ) ) ;
} else {
deviceInfo . setStatus ( 2 ) ;
}
deviceInfos . add ( deviceInfo ) ;
} ) ;
return deviceInfos ;
}
}