‘liusuyi’
2023-08-17 929c5384397b981d427c83e1e4c13ed62b0bda10
ard-work/src/main/java/com/ruoyi/app/position/service/impl/ArdAppPositionServiceImpl.java
@@ -3,12 +3,26 @@
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;
/**
@@ -18,9 +32,12 @@
 * @date 2023-07-18
 */
@Service
@Slf4j
public class ArdAppPositionServiceImpl implements IArdAppPositionService {
    @Resource
    private ArdAppPositionMapper ardAppPositionMapper;
    @Resource
    private ISysUserService iSysUserService;
    /**
     * 查询app位置
@@ -31,6 +48,17 @@
    @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);
    }
    /**
@@ -89,4 +117,51 @@
    public int deleteArdAppPositionById(String id) {
        return ardAppPositionMapper.deleteArdAppPositionById(id);
    }
    /**
     * 获取封控圈内所有在线app用户
     * 刘苏义
     * 2023/8/17 13:56:36
     */
    @Override
    public List<SysUser> 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<SysUser> appUserList = iSysUserService.selectAllAppUserList(user);
        //过滤在线
        List<SysUser> onLineList = appUserList.stream()
                .filter(sysUser -> (sysUser.getAppOnlineState().equals("1")))
                .collect(Collectors.toList());
        //过滤范围
        List<SysUser> 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) {
                    filteredList.add(sysUser); // 将满足条件的用户添加到筛选列表中
                }
            }
        }
        return filteredList;
    }
}