Commit 1606feb14d752412ee8f859e162f9f664d6f14f8
1 parent
fe91978f
feat(garden): 新增任务距离排序和智能排序功能
- 实现任务按距离排序和班组进度统计功能 - 添加任务智能排序(距离+个人效率加权)功能 - 新增GPS距离计算工具类和相关数据传输对象 - 添加出行速度配置和智能排序权重配置字典类型 - 实现用户任务效率预计算定时任务 - 优化API签名切面注解使用方式 - 添加微信公众号开放平台回调接口免登录配置
Showing
2 changed files
with
35 additions
and
1 deletions
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/homepage/HomepageSummaryServiceImpl.java
| ... | ... | @@ -449,6 +449,13 @@ public class HomepageSummaryServiceImpl implements HomepageSummaryService{ |
| 449 | 449 | |
| 450 | 450 | // 4. 组装返回结果 |
| 451 | 451 | TaskDistanceSortResultVO result = new TaskDistanceSortResultVO(); |
| 452 | + sortedTasks.sort((a, b) -> { | |
| 453 | + Integer da = a.getDistance(), db = b.getDistance(); | |
| 454 | + if (da == null && db == null) return 0; | |
| 455 | + if (da == null) return 1; | |
| 456 | + if (db == null) return -1; | |
| 457 | + return da.compareTo(db); | |
| 458 | + }); | |
| 452 | 459 | result.setSortedTasks(sortedTasks); |
| 453 | 460 | result.setTeamProgress(teamProgress); |
| 454 | 461 | result.setTotalPendingTasks(sortedTasks.size()); |
| ... | ... | @@ -585,6 +592,17 @@ public class HomepageSummaryServiceImpl implements HomepageSummaryService{ |
| 585 | 592 | remaining.remove(nearestIndex); |
| 586 | 593 | } |
| 587 | 594 | |
| 595 | + // 重算 distance 为到用户当前位置的直线距离(非 NN 路径距离) | |
| 596 | + double userLat = req.getCurrentLat().doubleValue(); | |
| 597 | + double userLon = req.getCurrentLon().doubleValue(); | |
| 598 | + for (TaskDistanceSortRespVO t : sortedTasks) { | |
| 599 | + int d = (int) Math.round(GpsDistanceUtil.haversineDistance(userLat, userLon, | |
| 600 | + t.getTaskLat().doubleValue(), t.getTaskLon().doubleValue())); | |
| 601 | + t.setDistance(d); | |
| 602 | + t.setEstimatedWalkingMinutes((int) Math.ceil(d / walkingSpeedMperMin)); | |
| 603 | + t.setEstimatedTricycleMinutes((int) Math.ceil(d / tricycleSpeedMperMin)); | |
| 604 | + } | |
| 605 | + | |
| 588 | 606 | // 无 GPS 任务追加到末尾 |
| 589 | 607 | if (CollectionUtils.isNotEmpty(tasksWithoutGps)) { |
| 590 | 608 | for (TaskDistanceSortRespVO task : tasksWithoutGps) { |
| ... | ... | @@ -649,7 +667,14 @@ public class HomepageSummaryServiceImpl implements HomepageSummaryService{ |
| 649 | 667 | List<TaskDistanceSortRespVO> sortedTasks = queryCompletedTasksWithoutGps(userId); |
| 650 | 668 | TeamProgressVO teamProgress = buildTeamProgress(userId, deptId); |
| 651 | 669 | TaskDistanceSortResultVO result = new TaskDistanceSortResultVO(); |
| 652 | - result.setSortedTasks(sortedTasks); | |
| 670 | + sortedTasks.sort((a, b) -> { | |
| 671 | + Integer da = a.getDistance(), db = b.getDistance(); | |
| 672 | + if (da == null && db == null) return 0; | |
| 673 | + if (da == null) return 1; | |
| 674 | + if (db == null) return -1; | |
| 675 | + return da.compareTo(db); | |
| 676 | + }); | |
| 677 | + result.setSortedTasks(sortedTasks); | |
| 653 | 678 | result.setTeamProgress(teamProgress); |
| 654 | 679 | result.setTotalPendingTasks(sortedTasks.size()); |
| 655 | 680 | Log.info("返回App参数: " + JSON.toJSONString(result)); |
| ... | ... | @@ -749,6 +774,13 @@ public class HomepageSummaryServiceImpl implements HomepageSummaryService{ |
| 749 | 774 | |
| 750 | 775 | // 7. 组装结果 |
| 751 | 776 | TaskDistanceSortResultVO result = new TaskDistanceSortResultVO(); |
| 777 | + sortedTasks.sort((a, b) -> { | |
| 778 | + Integer da = a.getDistance(), db = b.getDistance(); | |
| 779 | + if (da == null && db == null) return 0; | |
| 780 | + if (da == null) return 1; | |
| 781 | + if (db == null) return -1; | |
| 782 | + return da.compareTo(db); | |
| 783 | + }); | |
| 752 | 784 | result.setSortedTasks(sortedTasks); |
| 753 | 785 | result.setTeamProgress(teamProgress); |
| 754 | 786 | result.setTotalPendingTasks(sortedTasks.size()); | ... | ... |
urbanops-module-garden/src/main/resources/mapper/homepage/HomepageSummaryMapper.xml
| ... | ... | @@ -647,6 +647,7 @@ |
| 647 | 647 | <foreach collection='roleIds' item='roleId' open='(' close=')' separator=','> |
| 648 | 648 | #{roleId} |
| 649 | 649 | </foreach> |
| 650 | + AND NOT EXISTS (SELECT 1 FROM garden_inspection_plan_commit ic WHERE ic.batch_no = a.batch_no AND ic.user_id = #{userId}) | |
| 650 | 651 | AND r.starting_latitude IS NOT NULL AND r.starting_latitude != '' |
| 651 | 652 | |
| 652 | 653 | UNION ALL |
| ... | ... | @@ -676,6 +677,7 @@ |
| 676 | 677 | <foreach collection='roleIds' item='roleId' open='(' close=')' separator=','> |
| 677 | 678 | #{roleId} |
| 678 | 679 | </foreach> |
| 680 | + AND NOT EXISTS (SELECT 1 FROM garden_maintain_plan_commit mc WHERE mc.batch_no = a.batch_no AND mc.user_id = #{userId}) | |
| 679 | 681 | AND r.starting_latitude IS NOT NULL AND r.starting_latitude != '' |
| 680 | 682 | ) t |
| 681 | 683 | </select> | ... | ... |