diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/cron/JobCron.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/cron/JobCron.java index b13e171..47893c5 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/cron/JobCron.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/cron/JobCron.java @@ -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();} } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserMapper.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserMapper.java index fc57822..eb05089 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserMapper.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserMapper.java @@ -44,4 +44,14 @@ public interface AppUserMapper extends BaseMapper List getSysUserListEncrypt(); void batchUpdateSysUserEncrypt(List list); + + List selectAddUserSjdz(); + + List selectDifferUserSjdz(); + + void retract(); + + void batchUpdateDifferUser(List list); + + void batchAddUser(List list); } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserService.java index 06ba9a6..b110987 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserService.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserService.java @@ -95,4 +95,6 @@ public interface IAppUserService public void updateSysUserEncrypt(); public AppUser selectAppuserByIdcard(String idCard,String userType); + + public void updateAppUserWgyEncrypt(); } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserServiceImpl.java index 91c45ea..dc758f1 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserServiceImpl.java @@ -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 imple } } + /** + * 批量处理app用户身份证和手机号加密问题 + */ @Transactional(rollbackFor = Exception.class) public void updateAppUserEncrypt(){ List userList=appUserMapper.selectAppUserList(new AppUser()); @@ -1023,6 +1027,9 @@ public class AppUserServiceImpl extends ServiceImpl imple } } + /** + * 批量处理sys_user用户身份证和手机号加密问题 + */ @Transactional(rollbackFor = Exception.class) public void updateSysUserEncrypt(){ List sysUserList=appUserMapper.getSysUserListEncrypt(); @@ -1034,4 +1041,62 @@ public class AppUserServiceImpl extends ServiceImpl imple } } } + + /** + * 批量处理数据底座同步网格员用户 + */ + @Transactional(rollbackFor = Exception.class) + public void updateAppUserWgyEncrypt(){ + //1.处理用户手机号不一样的用户 + List differUser=appUserMapper.selectDifferUserSjdz(); + if(CollUtil.isNotEmpty(differUser)){ + decryptAndRemoveFailed(differUser); + //分批次处理 + List> differBatches = StringUtil.splitList(differUser, StringUtil.BATCH_SIZE); + for (List batch : differBatches) { + appUserMapper.batchUpdateDifferUser(batch); + } + } + //2.处理新增用户 + List addUser=appUserMapper.selectAddUserSjdz(); + if(CollUtil.isNotEmpty(addUser)){ + decryptAndRemoveFailed(addUser); + List> addBatches = StringUtil.splitList(addUser, StringUtil.BATCH_SIZE); + for (List batch : addBatches) { + appUserMapper.batchAddUser(batch); + } + } + //3.处理不存在的用户,收回权限 + appUserMapper.retract(); + } + + /** + * 移除手机号为空或者解密失败的数据 + * @param userList + */ + private void decryptAndRemoveFailed(List userList) { + Iterator 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(); + } + } + } } diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml index 959540a..1bee3f3 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml @@ -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) + + + + + + + + + UPDATE app_user + SET id_card = CASE + + WHEN user_id = #{item.userId} THEN #{item.idCard} + + END, + id_card_cipher = CASE + + WHEN user_id = #{item.userId} THEN #{item.idCardCipher} + + END, + id_card_encrypt = CASE + + WHEN user_id = #{item.userId} THEN #{item.idCardEncrypt} + + END, + phone = CASE + + WHEN user_id = #{item.userId} THEN #{item.phone} + + END, + phone_cipher = CASE + + WHEN user_id = #{item.userId} THEN #{item.phoneCipher} + + END, + phone_encrypt = CASE + + WHEN user_id = #{item.userId} THEN #{item.phoneEncrypt} + + END, + update_by = 'jbd_user', + update_time = CURRENT_TIMESTAMP + WHERE user_id IN + + #{item.userId} + + + + + + + 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 + + ( + #{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} + ) + + + + \ No newline at end of file