| | |
| | | |
| | | import cn.afterturn.easypoi.excel.ExcelExportUtil; |
| | | import cn.afterturn.easypoi.excel.entity.ExportParams; |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import com.alibaba.fastjson2.JSONArray; |
| | | import com.alibaba.fastjson2.JSONObject; |
| | | import com.xiaopeng.api.dto.account.XpOperationsUserPositionDTO; |
| | |
| | | import com.xiaopeng.api.model.maintenance.XpErrorType; |
| | | import com.xiaopeng.api.model.maintenance.XpTask; |
| | | import com.xiaopeng.api.model.maintenance.XpTaskRule; |
| | | import com.xiaopeng.api.model.vehicleConvoy.XpFleet; |
| | | import com.xiaopeng.api.model.vehicleConvoy.XpFleetOperations; |
| | | import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; |
| | | import com.xiaopeng.api.query.account.OptionalUsersPageListQuery; |
| | | import com.xiaopeng.api.vo.XpTaskVO; |
| | |
| | | import com.xiaopeng.api.vo.account.XpOperationsUserWithRoleVO; |
| | | import com.xiaopeng.api.vo.automaticPilot.VehiclePosition; |
| | | import com.xiaopeng.common.core.domain.R; |
| | | import com.xiaopeng.common.core.exception.ServiceException; |
| | | import com.xiaopeng.common.core.web.page.PageInfo; |
| | | import com.xiaopeng.common.security.service.TokenService; |
| | | import com.xiaopeng.evi.oss.service.AliOssService; |
| | |
| | | import java.io.UnsupportedEncodingException; |
| | | import java.net.URLEncoder; |
| | | import java.util.*; |
| | | import java.util.function.Function; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | |
| | | Query query = Query.query(new Criteria().andOperator( |
| | | Criteria.where("location").withinSphere(circle) |
| | | )); |
| | | // 增加时间查询条件:最近1分钟更新的数据 |
| | | int time = 10*60*1000; |
| | | Long oneMinuteAgo = System.currentTimeMillis() - time; |
| | | query.addCriteria(Criteria.where("updateTime").gte(oneMinuteAgo)); |
| | | |
| | | List<XpOperationsUserPositionDTO> vehiclePositions = mongoTemplate.find(query, XpOperationsUserPositionDTO.class); |
| | | Map<Long, Double> disMap = vehiclePositions.stream().collect(Collectors.toMap(XpOperationsUserPositionDTO::getId, XpOperationsUserPositionDTO::getDistance)); |
| | | |
| | | if(CollUtil.isEmpty(vehiclePositions)){ |
| | | throw new ServiceException("未查询到运维人员"); |
| | | } |
| | | List<Long> data = null ; |
| | | if(StrUtil.isNotBlank(query1.getFleet())){ |
| | | // 查询车队下面面所有人员id和up求交集 |
| | | List<Long> data = xpFleetClient.idsByFleetName(query1.getFleet()).getData(); |
| | | |
| | | List<Long> ids = vehiclePositions.stream().map(XpOperationsUserPositionDTO::getId) |
| | | .filter(e -> data == null || data.isEmpty() || data.contains(e)) |
| | | .collect(Collectors.toList()); |
| | | |
| | | data = xpFleetClient.idsByFleetName(query1.getFleet()).getData(); |
| | | } |
| | | //vehiclePositions根据距离升序排序 |
| | | vehiclePositions.sort(Comparator.comparing(XpOperationsUserPositionDTO::getDistance)); |
| | | //获取运维人员id |
| | | List<Long> ids = new ArrayList<>(); |
| | | Map<Long, Double> disMap = new HashMap<>(); |
| | | if ( CollUtil.isNotEmpty(data) ) { |
| | | for (XpOperationsUserPositionDTO vehiclePosition : vehiclePositions) { |
| | | if(data.contains(vehiclePosition.getId())){ |
| | | ids.add(vehiclePosition.getId()); |
| | | disMap.put(vehiclePosition.getId(), vehiclePosition.getDistance()); |
| | | } |
| | | } |
| | | }else{ |
| | | for (XpOperationsUserPositionDTO vehiclePosition : vehiclePositions) { |
| | | ids.add(vehiclePosition.getId()); |
| | | disMap.put(vehiclePosition.getId(), vehiclePosition.getDistance()); |
| | | } |
| | | } |
| | | query1.setIds(ids); |
| | | query1.setOrderByField(1); |
| | | PageInfo<XpOperationsUserWithRoleVO> ret = operationUserClient.listByQueryIds(query1).getData(); |
| | | |
| | | // 设置距离,然后排序 |
| | | |
| | | if (ret == null || ret.getRecords() == null || ret.getRecords().isEmpty()) { |
| | | return R.ok(); |
| | | } |
| | | if(CollUtil.isNotEmpty(ids)){ |
| | | R<List<XpFleetOperations>> findListByUserIdsR = xpFleetOperationsClient.findListByUserIds(ids); |
| | | if(findListByUserIdsR.getCode() != R.SUCCESS || findListByUserIdsR.getData().isEmpty()){ |
| | | throw new ServiceException("未查询该车队"); |
| | | } |
| | | // 将查询结果转换为 Map,key 为 userId,value 为 XpFleetOperations 对象 |
| | | Map<Long, XpFleetOperations> fleetOperationsMap = findListByUserIdsR.getData().stream() |
| | | .collect(Collectors.toMap(XpFleetOperations::getOperationsUserId, Function.identity())); |
| | | |
| | | for (XpOperationsUserWithRoleVO record : ret.getRecords()) { |
| | | if(fleetOperationsMap.containsKey(record.getId())){ |
| | | record.setFleetName(fleetOperationsMap.get(record.getId()).getFleetName()); |
| | | } |
| | | } |
| | | } |
| | | ret.getRecords().forEach(e -> e.setDis(disMap.get(e.getId()))); |
| | | List<XpOperationsUserWithRoleVO> sorted = ret.getRecords().stream().sorted(Comparator.comparing(XpOperationsUserWithRoleVO::getDis)).collect(Collectors.toList()); |
| | | ret.setRecords(sorted); |
| | | // List<XpOperationsUserWithRoleVO> sorted = ret.getRecords().stream().sorted(Comparator.comparing(XpOperationsUserWithRoleVO::getDis)).collect(Collectors.toList()); |
| | | // ret.setRecords(sorted); |
| | | return R.ok(ret); |
| | | } |
| | | |