添加批量更新网格员方法

This commit is contained in:
sh
2026-03-30 16:10:42 +08:00
parent 933fe9288e
commit a8a082ef9d
5 changed files with 160 additions and 0 deletions

View File

@@ -44,4 +44,6 @@ public class JobCron {
public void updateCronCompanyContactEncrypt(){SpringUtils.getBean(CompanyContactService.class).updateCronCompanyContactEncrypt();}
//批量更新岗位联系人
public void updateCronJobContactEncrypt(){SpringUtils.getBean(JobContactService.class).updateCronJobContactEncrypt();}
//批量处理网格员
public void updateAppUserWgyEncrypt(){SpringUtils.getBean(IAppUserService.class).updateAppUserWgyEncrypt();}
}

View File

@@ -44,4 +44,14 @@ public interface AppUserMapper extends BaseMapper<AppUser>
List<SysUser> getSysUserListEncrypt();
void batchUpdateSysUserEncrypt(List<SysUser> list);
List<AppUser> selectAddUserSjdz();
List<AppUser> selectDifferUserSjdz();
void retract();
void batchUpdateDifferUser(List<AppUser> list);
void batchAddUser(List<AppUser> list);
}

View File

@@ -95,4 +95,6 @@ public interface IAppUserService
public void updateSysUserEncrypt();
public AppUser selectAppuserByIdcard(String idCard,String userType);
public void updateAppUserWgyEncrypt();
}

View File

@@ -4,6 +4,7 @@ import java.util.*;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
@@ -1008,6 +1009,9 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper,AppUser> imple
}
}
/**
* 批量处理app用户身份证和手机号加密问题
*/
@Transactional(rollbackFor = Exception.class)
public void updateAppUserEncrypt(){
List<AppUser> userList=appUserMapper.selectAppUserList(new AppUser());
@@ -1023,6 +1027,9 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper,AppUser> imple
}
}
/**
* 批量处理sys_user用户身份证和手机号加密问题
*/
@Transactional(rollbackFor = Exception.class)
public void updateSysUserEncrypt(){
List<SysUser> sysUserList=appUserMapper.getSysUserListEncrypt();
@@ -1034,4 +1041,62 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper,AppUser> imple
}
}
}
/**
* 批量处理数据底座同步网格员用户
*/
@Transactional(rollbackFor = Exception.class)
public void updateAppUserWgyEncrypt(){
//1.处理用户手机号不一样的用户
List<AppUser> differUser=appUserMapper.selectDifferUserSjdz();
if(CollUtil.isNotEmpty(differUser)){
decryptAndRemoveFailed(differUser);
//分批次处理
List<List<AppUser>> differBatches = StringUtil.splitList(differUser, StringUtil.BATCH_SIZE);
for (List<AppUser> batch : differBatches) {
appUserMapper.batchUpdateDifferUser(batch);
}
}
//2.处理新增用户
List<AppUser> addUser=appUserMapper.selectAddUserSjdz();
if(CollUtil.isNotEmpty(addUser)){
decryptAndRemoveFailed(addUser);
List<List<AppUser>> addBatches = StringUtil.splitList(addUser, StringUtil.BATCH_SIZE);
for (List<AppUser> batch : addBatches) {
appUserMapper.batchAddUser(batch);
}
}
//3.处理不存在的用户,收回权限
appUserMapper.retract();
}
/**
* 移除手机号为空或者解密失败的数据
* @param userList
*/
private void decryptAndRemoveFailed(List<AppUser> userList) {
Iterator<AppUser> iterator = userList.iterator();
while (iterator.hasNext()) {
AppUser user = iterator.next();
try {
String encryptedPhone = user.getPhone();
String realPhone = null;
if (encryptedPhone != null) {
realPhone = QuickValidUtils.getSm4Decrypt(encryptedPhone);
}
String finalPhone = (realPhone == null) ? "" : realPhone.trim();
if (finalPhone.isEmpty() || finalPhone.length() > 11) {
log.warn("用户ID=" + user.getUserId() + "dw_userid=" + user.getDwUserid() + " 手机号解密后为空或超长,跳过");
iterator.remove();
continue;
}
user.setPhone(finalPhone);
//手机号身份证都加密
QuickValidUtils.savePhoneIdCardSm4(user);
} catch (Exception e) {
log.error("用户ID=" + user.getUserId() + " 手机号解密失败,已从更新列表移除", e);
iterator.remove();
}
}
}
}

View File

@@ -236,4 +236,85 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
on a.user_id = b.user_id and (phonenumber is not null or id_card is not null)
</select>
<select id="selectAddUserSjdz" resultMap="AppUserResult">
SELECT name,sex ,phone,create_by,id_card,dw_userid,status,del_flag,is_recommend,is_company_user
FROM dwd_system_user WHERE id_card IS NOT NULL and phone!='vy4NnIAD3WKqsXM7zDDskg=='
AND NOT EXISTS ( SELECT 1 FROM ks_db4.app_user a WHERE trim(a.dw_userid) = trim(dwd_system_user.dw_userid))
</select>
<select id="selectDifferUserSjdz" resultMap="AppUserResult">
SELECT a.name,a.sex ,a.phone,a.create_by,a.id_card,a.dw_userid,a.status,a.del_flag,a.is_recommend,a.is_company_user,b.user_id
FROM dwd_system_user a inner join app_user b on a.dw_userid=b.dw_userid
WHERE b.del_flag='0' and a.phone!=b.phone_encrypt
and a.dw_userid!='1000000001' and b.dw_userid!='1000000001'
</select>
<select id="retract">
UPDATE app_user a SET is_company_user = '1',dw_userid = NULL,update_by = 'jbd_user',update_time = CURRENT_TIMESTAMP
WHERE a.del_flag = '0' AND a.dw_userid IS NOT NULL AND a.dw_userid != ''
AND a.dw_userid != '1000000001'
AND NOT EXISTS (
SELECT 1
FROM dwd_system_user b
WHERE a.dw_userid = b.dw_userid
);
</select>
<update id="batchUpdateDifferUser">
<if test="list != null and !list.isEmpty()">
UPDATE app_user
SET id_card = CASE
<foreach collection="list" item="item" separator="">
WHEN user_id = #{item.userId} THEN #{item.idCard}
</foreach>
END,
id_card_cipher = CASE
<foreach collection="list" item="item" separator="">
WHEN user_id = #{item.userId} THEN #{item.idCardCipher}
</foreach>
END,
id_card_encrypt = CASE
<foreach collection="list" item="item" separator="">
WHEN user_id = #{item.userId} THEN #{item.idCardEncrypt}
</foreach>
END,
phone = CASE
<foreach collection="list" item="item" separator="">
WHEN user_id = #{item.userId} THEN #{item.phone}
</foreach>
END,
phone_cipher = CASE
<foreach collection="list" item="item" separator="">
WHEN user_id = #{item.userId} THEN #{item.phoneCipher}
</foreach>
END,
phone_encrypt = CASE
<foreach collection="list" item="item" separator="">
WHEN user_id = #{item.userId} THEN #{item.phoneEncrypt}
</foreach>
END,
update_by = 'jbd_user',
update_time = CURRENT_TIMESTAMP
WHERE user_id IN
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item.userId}
</foreach>
</if>
</update>
<insert id="batchAddUser">
<if test="list != null and !list.isEmpty()">
INSERT INTO app_user (
name, sex, phone,phone_encrypt,phone_cipher,create_by,create_time,id_card,id_card_encrypt,id_card_cipher, dw_userid, status,del_flag,is_recommend,is_company_user
) VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.name}, #{item.sex}, #{item.phone},#{item.phoneEncrypt},#{item.phoneCipher},
#{item.createBy}, SYSDATE, #{item.idCard},#{item.idCardEncrypt},#{item.idCardCipher},
#{item.dwUserid},#{item.status},#{item.delFlag},#{item.isRecommend},#{item.isCompanyUser}
)
</foreach>
</if>
</insert>
</mapper>