package com.ruoyi.app.position.service.impl; import com.ruoyi.app.position.domain.ArdAppPosition; import com.ruoyi.app.position.mapper.ArdAppPositionMapper; import com.ruoyi.app.position.service.IArdAppPositionService; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.common.utils.uuid.IdUtils; import com.ruoyi.scheduling.domian.SchedulingParam; import com.ruoyi.system.service.ISysUserService; import com.ruoyi.utils.tools.GisTool; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; import javax.annotation.Resource; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * app位置Service业务层处理 * * @author ard * @date 2023-07-18 */ @Service @Slf4j public class ArdAppPositionServiceImpl implements IArdAppPositionService { @Resource private ArdAppPositionMapper ardAppPositionMapper; @Resource private ISysUserService iSysUserService; /** * 查询app位置 * * @param id app位置主键 * @return app位置 */ @Override public ArdAppPosition selectArdAppPositionById(String id) { return ardAppPositionMapper.selectArdAppPositionById(id); } /** * 按用户id查询最后的位置信息 * * @param userId app用户主键 * @return app位置 */ @Override public ArdAppPosition selectLastArdAppPositionByUserId(String userId) { return ardAppPositionMapper.selectLastArdAppPositionByUserId(userId); } /** * 查询app位置列表 * * @param ardAppPosition app位置 * @return app位置 */ @Override public List selectArdAppPositionList(ArdAppPosition ardAppPosition) { return ardAppPositionMapper.selectArdAppPositionList(ardAppPosition); } /** * 新增app位置 * * @param ardAppPosition app位置 * @return 结果 */ @Override public int insertArdAppPosition(ArdAppPosition ardAppPosition) { ardAppPosition.setId(IdUtils.simpleUUID()); ardAppPosition.setCreateTime(DateUtils.getNowDate()); return ardAppPositionMapper.insertArdAppPosition(ardAppPosition); } /** * 修改app位置 * * @param ardAppPosition app位置 * @return 结果 */ @Override public int updateArdAppPosition(ArdAppPosition ardAppPosition) { return ardAppPositionMapper.updateArdAppPosition(ardAppPosition); } /** * 批量删除app位置 * * @param ids 需要删除的app位置主键 * @return 结果 */ @Override public int deleteArdAppPositionByIds(String[] ids) { return ardAppPositionMapper.deleteArdAppPositionByIds(ids); } /** * 删除app位置信息 * * @param id app位置主键 * @return 结果 */ @Override public int deleteArdAppPositionById(String id) { return ardAppPositionMapper.deleteArdAppPositionById(id); } /** * 获取封控圈内所有在线app用户 * 刘苏义 * 2023/8/17 13:56:36 */ @Override public List getNearAppUsers(SchedulingParam param) { Double longitude = param.getLongitude(); Double latitude = param.getLatitude(); if (longitude == null && latitude == null) { log.debug("原点坐标为空"); return null; } Integer radius = param.getSealingRadius(); if (radius == null) { log.debug("半径距离为空"); return null; } SysUser user = new SysUser(); List appUserList = iSysUserService.selectAllAppUserList(user); //过滤在线 List onLineList = appUserList.stream() .filter(sysUser -> (sysUser.getAppOnlineState().equals("1"))) .collect(Collectors.toList()); //过滤范围 List filteredList = new ArrayList<>(); for(SysUser sysUser:onLineList) { ArdAppPosition ardAppPosition = ardAppPositionMapper.selectLastArdAppPositionByUserId(sysUser.getUserId()); if (ardAppPosition != null) { Double lon = ardAppPosition.getLongitude(); Double lat = ardAppPosition.getLatitude(); if(longitude==null||latitude==null) { continue; } double distance = GisTool.getDistance(new double[]{ longitude, latitude}, new double[]{ lon, lat}); if (distance <= radius) { Map params=new HashMap<>(); params.put("longitude",lon); params.put("latitude",lat); sysUser.setParams(params); filteredList.add(sysUser); // 将满足条件的用户添加到筛选列表中 } } } return filteredList; } }