diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/homepage/HomepageSummaryServiceImpl.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/homepage/HomepageSummaryServiceImpl.java index 5517afc..75a239b 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/homepage/HomepageSummaryServiceImpl.java +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/homepage/HomepageSummaryServiceImpl.java @@ -449,6 +449,13 @@ public class HomepageSummaryServiceImpl implements HomepageSummaryService{ // 4. 组装返回结果 TaskDistanceSortResultVO result = new TaskDistanceSortResultVO(); + sortedTasks.sort((a, b) -> { + Integer da = a.getDistance(), db = b.getDistance(); + if (da == null && db == null) return 0; + if (da == null) return 1; + if (db == null) return -1; + return da.compareTo(db); + }); result.setSortedTasks(sortedTasks); result.setTeamProgress(teamProgress); result.setTotalPendingTasks(sortedTasks.size()); @@ -585,6 +592,17 @@ public class HomepageSummaryServiceImpl implements HomepageSummaryService{ remaining.remove(nearestIndex); } + // 重算 distance 为到用户当前位置的直线距离(非 NN 路径距离) + double userLat = req.getCurrentLat().doubleValue(); + double userLon = req.getCurrentLon().doubleValue(); + for (TaskDistanceSortRespVO t : sortedTasks) { + int d = (int) Math.round(GpsDistanceUtil.haversineDistance(userLat, userLon, + t.getTaskLat().doubleValue(), t.getTaskLon().doubleValue())); + t.setDistance(d); + t.setEstimatedWalkingMinutes((int) Math.ceil(d / walkingSpeedMperMin)); + t.setEstimatedTricycleMinutes((int) Math.ceil(d / tricycleSpeedMperMin)); + } + // 无 GPS 任务追加到末尾 if (CollectionUtils.isNotEmpty(tasksWithoutGps)) { for (TaskDistanceSortRespVO task : tasksWithoutGps) { @@ -649,7 +667,14 @@ public class HomepageSummaryServiceImpl implements HomepageSummaryService{ List sortedTasks = queryCompletedTasksWithoutGps(userId); TeamProgressVO teamProgress = buildTeamProgress(userId, deptId); TaskDistanceSortResultVO result = new TaskDistanceSortResultVO(); - result.setSortedTasks(sortedTasks); + sortedTasks.sort((a, b) -> { + Integer da = a.getDistance(), db = b.getDistance(); + if (da == null && db == null) return 0; + if (da == null) return 1; + if (db == null) return -1; + return da.compareTo(db); + }); + result.setSortedTasks(sortedTasks); result.setTeamProgress(teamProgress); result.setTotalPendingTasks(sortedTasks.size()); Log.info("返回App参数: " + JSON.toJSONString(result)); @@ -749,6 +774,13 @@ public class HomepageSummaryServiceImpl implements HomepageSummaryService{ // 7. 组装结果 TaskDistanceSortResultVO result = new TaskDistanceSortResultVO(); + sortedTasks.sort((a, b) -> { + Integer da = a.getDistance(), db = b.getDistance(); + if (da == null && db == null) return 0; + if (da == null) return 1; + if (db == null) return -1; + return da.compareTo(db); + }); result.setSortedTasks(sortedTasks); result.setTeamProgress(teamProgress); result.setTotalPendingTasks(sortedTasks.size()); diff --git a/urbanops-module-garden/src/main/resources/mapper/homepage/HomepageSummaryMapper.xml b/urbanops-module-garden/src/main/resources/mapper/homepage/HomepageSummaryMapper.xml index f15b98b..c426137 100644 --- a/urbanops-module-garden/src/main/resources/mapper/homepage/HomepageSummaryMapper.xml +++ b/urbanops-module-garden/src/main/resources/mapper/homepage/HomepageSummaryMapper.xml @@ -647,6 +647,7 @@ #{roleId} + AND NOT EXISTS (SELECT 1 FROM garden_inspection_plan_commit ic WHERE ic.batch_no = a.batch_no AND ic.user_id = #{userId}) AND r.starting_latitude IS NOT NULL AND r.starting_latitude != '' UNION ALL @@ -676,6 +677,7 @@ #{roleId} + AND NOT EXISTS (SELECT 1 FROM garden_maintain_plan_commit mc WHERE mc.batch_no = a.batch_no AND mc.user_id = #{userId}) AND r.starting_latitude IS NOT NULL AND r.starting_latitude != '' ) t