✨ 登录自动建档写入岗位并订正存量空岗位
- createPlaceholderProfile 写 posts='司机':岗位为空的档案会被派单候选筛掉 - 新增幂等订正脚本,只补 profile_source='login_auto' 且岗位为空的档案 - update_time 不覆盖,脚本内附校验与回退段
This commit is contained in:
+6
@@ -86,6 +86,11 @@ public class DriverServiceImpl extends BaseServiceImpl<DriverMapper, Driver> 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<DriverMapper, Driver> imp
|
||||
driver.setMobile(mobile);
|
||||
driver.setDrivingType("");
|
||||
driver.setDriverType("");
|
||||
driver.setPosts(PROFILE_DEFAULT_POST);
|
||||
driver.setOrganizationName("");
|
||||
driver.setEmergencyContactName("");
|
||||
driver.setEmergencyContactMobile("");
|
||||
|
||||
+1
@@ -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());
|
||||
|
||||
@@ -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` = '司机';
|
||||
Reference in New Issue
Block a user