| | |
| | | import org.apache.shardingsphere.transaction.core.TransactionType; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.data.domain.Sort; |
| | | import org.springframework.data.geo.Circle; |
| | | import org.springframework.data.geo.Distance; |
| | | import org.springframework.data.geo.Metrics; |
| | | import org.springframework.data.mongodb.core.MongoTemplate; |
| | |
| | | |
| | | @ApiOperation(value = "可改派的运维人员列表", tags = {"管理后台-运维执行-任务工单-待改派工单"}) |
| | | @PostMapping("/api/v1/task/reassign/availableUsers") |
| | | public R<PageInfo<XpOperationsUserWithRoleVO>> availableReassignUsers(@RequestBody OptionalUsersPageListQuery query) { |
| | | public R<PageInfo<XpOperationsUserWithRoleVO>> availableReassignUsers(@RequestBody OptionalUsersPageListQuery query1) { |
| | | XpTask task = xpTaskService.getById(query1.getTaskId()); |
| | | // 找到中心点 |
| | | GeoJsonPoint geoJsonPoint = new GeoJsonPoint(task.getVehicleLon().doubleValue(), task.getVehicleLat().doubleValue()); |
| | | // 构造半径 |
| | | Distance distanceR = new Distance(10, Metrics.KILOMETERS); |
| | | // 画圆 |
| | | Circle circle = new Circle(geoJsonPoint, distanceR); |
| | | Query query = Query.query(new Criteria().andOperator( |
| | | Criteria.where("location").withinSphere(circle) |
| | | )); |
| | | List<XpOperationsUserPositionDTO> vehiclePositions = mongoTemplate.find(query, XpOperationsUserPositionDTO.class); |
| | | Map<Long, Double> disMap = vehiclePositions.stream().collect(Collectors.toMap(XpOperationsUserPositionDTO::getId, XpOperationsUserPositionDTO::getDistance)); |
| | | |
| | | XpTask task = xpTaskService.getById(query.getTaskId()); |
| | | GeoJsonPoint point = |
| | | new GeoJsonPoint( |
| | | task.getVehicleLon().doubleValue(), |
| | | task.getVehicleLat().doubleValue() |
| | | ); |
| | | Query q = new Query(Criteria.where("location").near(point) |
| | | .maxDistance(new Distance(10, Metrics.KILOMETERS).getNormalizedValue())); |
| | | q.with(Sort.by(Sort.Direction.ASC, "dis")); |
| | | |
| | | List<XpOperationsUserPositionDTO> up = mongoTemplate.find(q, XpOperationsUserPositionDTO.class); |
| | | |
| | | Map<Long, Double> disMap = up.stream().collect(Collectors.toMap(XpOperationsUserPositionDTO::getId, XpOperationsUserPositionDTO::getDistance)); |
| | | // 查询车队下面面所有人员id和up求交集 |
| | | List<Long> data = xpFleetClient.idsByFleetName(query.getFleet()).getData(); |
| | | List<Long> data = xpFleetClient.idsByFleetName(query1.getFleet()).getData(); |
| | | |
| | | List<Long> ids = up.stream().map(XpOperationsUserPositionDTO::getId) |
| | | List<Long> ids = vehiclePositions.stream().map(XpOperationsUserPositionDTO::getId) |
| | | .filter(e -> data == null || data.isEmpty() || data.contains(e)) |
| | | .collect(Collectors.toList()); |
| | | |
| | | query.setIds(ids); |
| | | PageInfo<XpOperationsUserWithRoleVO> ret = operationUserClient.listByQueryIds(query).getData(); |
| | | query1.setIds(ids); |
| | | PageInfo<XpOperationsUserWithRoleVO> ret = operationUserClient.listByQueryIds(query1).getData(); |
| | | |
| | | // 设置距离,然后排序 |
| | | |