‘liusuyi’
2023-08-22 77337135d875cf3ee046e7ca2e3992924d3b6e79
ard-work/src/main/java/com/ruoyi/app/position/service/impl/ArdAppPositionServiceImpl.java
@@ -18,6 +18,7 @@
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.awt.geom.Point2D;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -172,5 +173,48 @@
        }
        return filteredList;
    }
    /**
     * 获取封控圈内所有在线app用户(多边形)
     * 刘苏义
     * 2023/8/17 13:56:36
     */
    @Override
    public List<SysUser> getNearAppUsersWithPolygon(SchedulingParam param) {
        List<SysUser> filteredList = new ArrayList<>();
        try {
            Long deptId = SecurityUtils.getLoginUser().getUser().getDeptId();
            List<Point2D> partitionLocation = param.getPartitionLocation();
            SysUser user = new SysUser();
            user.setDeptId(deptId);
            List<SysUser> appUserList = iSysUserService.selectAllAppUserList(user);
            //过滤在线
            List<SysUser> onLineList = appUserList.stream()
                    .filter(sysUser -> (sysUser.getAppOnlineState().equals("1")))
                    .collect(Collectors.toList());
            //过滤范围
            for (SysUser sysUser : onLineList) {
                ArdAppPosition ardAppPosition = ardAppPositionMapper.selectLastArdAppPositionByUserId(sysUser.getUserId());
                if (ardAppPosition != null) {
                    Double lon = ardAppPosition.getLongitude();
                    Double lat = ardAppPosition.getLatitude();
                    if (lon == null || lat == null) {
                        continue;
                    }
                    Point2D point2D=new Point2D.Double(lon,lat);
                    boolean inPolygon = GisTool.isInPolygon(point2D, partitionLocation);
                    if (inPolygon) {
                        Map<String, Object> params = new HashMap<>();
                        params.put("longitude", lon);
                        params.put("latitude", lat);
                        sysUser.setParams(params);
                        filteredList.add(sysUser); // 将满足条件的用户添加到筛选列表中
                    }
                }
            }
        } catch (Exception ex) {
            log.error("获取封控圈内所有在线app用户异常" + ex.getMessage());
        }
        return filteredList;
    }
}