From 70b2096e8a5013b75942f82811acb6d150cf8032 Mon Sep 17 00:00:00 2001 From: weicw1996 Date: Fri, 23 Oct 2026 20:03:56 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E7=99=BB=E5=BD=95=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=BB=BA=E6=A1=A3=E5=86=99=E5=85=A5=E5=B2=97=E4=BD=8D?= =?UTF-8?q?=E5=B9=B6=E8=AE=A2=E6=AD=A3=E5=AD=98=E9=87=8F=E7=A9=BA=E5=B2=97?= =?UTF-8?q?=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - createPlaceholderProfile 写 posts='司机':岗位为空的档案会被派单候选筛掉 - 新增幂等订正脚本,只补 profile_source='login_auto' 且岗位为空的档案 - update_time 不覆盖,脚本内附校验与回退段 --- .../service/impl/DriverServiceImpl.java | 6 ++ .../service/impl/DriverEnsureProfileTest.java | 1 + ...ansport_driver_posts_backfill_20261023.sql | 58 +++++++++++++++++++ 3 files changed, 65 insertions(+) create mode 100644 doc/sql/transport/blade_transport_driver_posts_backfill_20261023.sql diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/DriverServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/DriverServiceImpl.java index 2ca4447d..41964813 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/DriverServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/DriverServiceImpl.java @@ -86,6 +86,11 @@ public class DriverServiceImpl extends BaseServiceImpl imp * 档案来源:绑定到已有档案 */ private static final String PROFILE_SOURCE_LOGIN_BOUND = "login_bound"; + /** + * 自动建档的默认岗位:从小程序司机端登录即视为司机。 + * 岗位为空会让档案被派单候选筛掉。 + */ + private static final String PROFILE_DEFAULT_POST = "司机"; private static final String CONFLICT_MOBILE_OCCUPIED = "该手机号已被其他账号占用,请联系管理员"; private static final String CONFLICT_MOBILE_MULTIPLE = "该手机号存在多条司机档案,请联系管理员核对"; @@ -187,6 +192,7 @@ public class DriverServiceImpl extends BaseServiceImpl imp driver.setMobile(mobile); driver.setDrivingType(""); driver.setDriverType(""); + driver.setPosts(PROFILE_DEFAULT_POST); driver.setOrganizationName(""); driver.setEmergencyContactName(""); driver.setEmergencyContactMobile(""); diff --git a/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/DriverEnsureProfileTest.java b/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/DriverEnsureProfileTest.java index d029c31b..e7180cdc 100644 --- a/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/DriverEnsureProfileTest.java +++ b/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/DriverEnsureProfileTest.java @@ -106,6 +106,7 @@ class DriverEnsureProfileTest { assertEquals("", saved.getDrivingType()); assertEquals("", saved.getDriverType()); assertEquals("", saved.getOrganizationName()); + assertEquals("司机", saved.getPosts(), "岗位为空会被派单候选的 posts 过滤筛掉,新注册司机就选不到"); assertEquals("", saved.getEmergencyContactName()); assertEquals("", saved.getEmergencyContactMobile()); assertEquals(1, saved.getStatus()); diff --git a/doc/sql/transport/blade_transport_driver_posts_backfill_20261023.sql b/doc/sql/transport/blade_transport_driver_posts_backfill_20261023.sql new file mode 100644 index 00000000..3127569c --- /dev/null +++ b/doc/sql/transport/blade_transport_driver_posts_backfill_20261023.sql @@ -0,0 +1,58 @@ +-- ---------------------------- +-- 登录自动建档的司机档案补岗位 +-- 写业务数据。执行前先做第 0 节备份,执行后跑第 3 节校验。可重复执行。 +-- ---------------------------- +-- +-- 为什么要订正: +-- 派单候选司机按岗位过滤(posts LIKE '%司机%'),岗位为空的档案选不到。 +-- 小程序登录自动建档原先只写了手机号、租户、user_id,posts 留空, +-- 于是新注册的司机在运单派单里搜不到。建档逻辑已同步改为写岗位(PROFILE_DEFAULT_POST)。 +-- +-- 处置口径:只补「登录自动建档」的档案,条件是 profile_source = 'login_auto' 且岗位为空。 +-- 手工建档的档案岗位由管理端必填,为空说明被人主动清空过,不在本次订正范围。 +-- update_time 不在 SET 里,保留原值。 +-- ---------------------------- +-- 0. 备份(必须在订正之前执行,仅首次需要) +-- ---------------------------- +-- CREATE TABLE blade_transport_driver_posts_bak AS +-- SELECT id, tenant_id, driver_name, mobile, posts, profile_source, update_time +-- FROM blade_transport_driver +-- WHERE is_deleted = 0 +-- AND profile_source = 'login_auto' +-- AND (posts IS NULL OR posts = ''); + +START TRANSACTION; + +-- ---------------------------- +-- 1. 订正岗位 +-- ---------------------------- +UPDATE `blade_transport_driver` +SET `posts` = '司机' +WHERE `is_deleted` = 0 + AND `profile_source` = 'login_auto' + AND (`posts` IS NULL OR `posts` = ''); + +-- ---------------------------- +-- 2. 提交 +-- ---------------------------- +COMMIT; + +-- ---------------------------- +-- 3. 校验(两行都应为 0) +-- ---------------------------- +-- SELECT COUNT(1) AS remaining_empty +-- FROM blade_transport_driver +-- WHERE is_deleted = 0 AND profile_source = 'login_auto' AND (posts IS NULL OR posts = ''); +-- +-- SELECT COUNT(1) AS touched_overlap +-- FROM blade_transport_driver +-- WHERE is_deleted = 0 AND profile_source = 'login_auto' AND posts IS NOT NULL AND posts <> '司机'; + +-- ---------------------------- +-- 4. 回退(仅在需要撤销本次订正时手工执行;执行前确认这些行确实是本次改的) +-- ---------------------------- +-- UPDATE `blade_transport_driver` +-- SET `posts` = NULL +-- WHERE `is_deleted` = 0 +-- AND `profile_source` = 'login_auto' +-- AND `posts` = '司机';