|
|
@@ -41,7 +41,6 @@ import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.time.Duration;
|
|
|
-import java.time.Instant;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.ZoneId;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
@@ -403,7 +402,6 @@ public class StoreUserServiceImpl extends ServiceImpl<StoreUserMapper, StoreUser
|
|
|
return R.data(vo);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
@Override
|
|
|
public R<IPage<StoreUserVo>> getStoreUserList(int pageNum, int pageSize, String id, String phone, Integer status, Integer accountType, String mainAccountId, String mainAccountPhone) {
|
|
|
IPage<StoreUser> page = new Page<>(pageNum, pageSize);
|
|
|
@@ -455,17 +453,55 @@ public class StoreUserServiceImpl extends ServiceImpl<StoreUserMapper, StoreUser
|
|
|
return R.data(storeUserVoIPage);
|
|
|
}
|
|
|
|
|
|
+ // 按 (userId, role_id) 去重,同一用户同一角色只保留一条(保留 id 最小的一条)
|
|
|
+ userRoles = userRoles.stream()
|
|
|
+ .sorted(Comparator.comparing(StorePlatformUserRole::getId, Comparator.nullsLast(Comparator.naturalOrder())))
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ r -> (r.getUserId() != null ? r.getUserId() : 0) + "_" + (r.getRoleId() != null ? r.getRoleId() : ""),
|
|
|
+ r -> r,
|
|
|
+ (a, b) -> a
|
|
|
+ ))
|
|
|
+ .values().stream()
|
|
|
+ .sorted(Comparator.comparing(StorePlatformUserRole::getId, Comparator.nullsLast(Comparator.naturalOrder())))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
// 按子账号 id/phone/status 过滤:批量查 store_user,只保留对应子账号满足条件的 role
|
|
|
List<Integer> distinctUserIds = userRoles.stream().map(StorePlatformUserRole::getUserId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
|
|
|
List<StoreUser> subAccountList = distinctUserIds.isEmpty() ? Collections.emptyList() : storeUserMapper.selectBatchIds(distinctUserIds);
|
|
|
- Map<Integer, StoreUser> subAccountMap = subAccountList == null ? new HashMap<>() : subAccountList.stream().filter(u -> u.getDeleteFlag() != null && u.getDeleteFlag() == 0).collect(Collectors.toMap(StoreUser::getId, u -> u, (a, b) -> a));
|
|
|
+ // 根据 status 参数决定子账号池:选「注销中/已注销」时只保留对应状态;否则排除注销中、已注销
|
|
|
+ Map<Integer, StoreUser> subAccountMap;
|
|
|
+ if (status != null && (status == -1 || status == 2)) {
|
|
|
+ final int filterStatus = status;
|
|
|
+ subAccountMap = subAccountList == null ? new HashMap<>() : subAccountList.stream()
|
|
|
+ .filter(u -> u.getDeleteFlag() != null && u.getDeleteFlag() == 0)
|
|
|
+ .filter(u -> {
|
|
|
+ if (filterStatus == -1) return u.getStatus() != null && u.getStatus() == -1;
|
|
|
+ return (u.getStatus() != null && u.getStatus() == 2) || (u.getLogoutFlag() != null && u.getLogoutFlag() == 1);
|
|
|
+ })
|
|
|
+ .collect(Collectors.toMap(StoreUser::getId, u -> u, (a, b) -> a));
|
|
|
+ } else {
|
|
|
+ subAccountMap = subAccountList == null ? new HashMap<>() : subAccountList.stream()
|
|
|
+ .filter(u -> u.getDeleteFlag() != null && u.getDeleteFlag() == 0
|
|
|
+ && (u.getLogoutFlag() == null || u.getLogoutFlag() == 0)
|
|
|
+ && (u.getStatus() == null || (u.getStatus() != -1 && u.getStatus() != 2)))
|
|
|
+ .collect(Collectors.toMap(StoreUser::getId, u -> u, (a, b) -> a));
|
|
|
+ }
|
|
|
List<StorePlatformUserRole> filteredRoles = new ArrayList<>();
|
|
|
for (StorePlatformUserRole role : userRoles) {
|
|
|
StoreUser subAccount = subAccountMap.get(role.getUserId());
|
|
|
if (subAccount == null) continue;
|
|
|
if (StringUtils.isNotEmpty(id) && (subAccount.getId() == null || !String.valueOf(subAccount.getId()).contains(id))) continue;
|
|
|
if (StringUtils.isNotEmpty(phone) && (subAccount.getPhone() == null || !subAccount.getPhone().contains(phone))) continue;
|
|
|
- if (status != null && !status.equals(subAccount.getStatus())) continue;
|
|
|
+ // 状态筛选:选「注销中/已注销」时以 store_user 为准(已由 subAccountMap 限定);否则以 role.status 为准
|
|
|
+ int rowStatus;
|
|
|
+ if (status != null && (status == -1 || status == 2)) {
|
|
|
+ rowStatus = (subAccount.getStatus() != null && subAccount.getStatus() == -1) ? -1
|
|
|
+ : ((subAccount.getStatus() != null && subAccount.getStatus() == 2) || (subAccount.getLogoutFlag() != null && subAccount.getLogoutFlag() == 1)) ? 2
|
|
|
+ : (subAccount.getStatus() != null ? subAccount.getStatus() : 0);
|
|
|
+ } else {
|
|
|
+ rowStatus = role.getStatus() != null ? role.getStatus() : (subAccount.getStatus() != null ? subAccount.getStatus() : 0);
|
|
|
+ }
|
|
|
+ if (status != null && !status.equals(rowStatus)) continue;
|
|
|
filteredRoles.add(role);
|
|
|
}
|
|
|
filteredRoles.sort(Comparator.comparing(StorePlatformUserRole::getId, Comparator.nullsLast(Comparator.naturalOrder())));
|
|
|
@@ -514,13 +550,15 @@ public class StoreUserServiceImpl extends ServiceImpl<StoreUserMapper, StoreUser
|
|
|
return R.data(storeUserVoIPage);
|
|
|
}
|
|
|
|
|
|
- // 主账号分支:直接查库返回最新 status,主账号页面展示子账号数量(按 store_platform_user_role 统计)
|
|
|
+ // 主账号分支:直接查库返回最新 status,主账号页面展示子账号数量(按 store_platform_user_role 统计);排除注销中、已注销
|
|
|
LambdaQueryWrapper<StoreUser> storeUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
storeUserLambdaQueryWrapper.eq(StoreUser::getDeleteFlag, 0)
|
|
|
.like(StringUtils.isNotEmpty(id), StoreUser::getId, id)
|
|
|
.like(StringUtils.isNotEmpty(phone), StoreUser::getPhone, phone)
|
|
|
.eq(status != null, StoreUser::getStatus, status)
|
|
|
.eq(StoreUser::getAccountType, 1)
|
|
|
+ .and(w -> w.isNull(StoreUser::getLogoutFlag).or().eq(StoreUser::getLogoutFlag, 0))
|
|
|
+ .and(w -> w.isNull(StoreUser::getStatus).or().in(StoreUser::getStatus, 0, 1))
|
|
|
.orderByDesc(StoreUser::getCreatedTime);
|
|
|
|
|
|
IPage<StoreUser> storeUsers = storeUserMapper.selectPage(page, storeUserLambdaQueryWrapper);
|
|
|
@@ -580,6 +618,7 @@ public class StoreUserServiceImpl extends ServiceImpl<StoreUserMapper, StoreUser
|
|
|
}
|
|
|
|
|
|
|
|
|
+
|
|
|
/**
|
|
|
* web端切换商家端用户状态(主账号底下有子账号时禁止禁用;子账号无限制)
|
|
|
* @param storeUserParam
|
|
|
@@ -599,18 +638,34 @@ public class StoreUserServiceImpl extends ServiceImpl<StoreUserMapper, StoreUser
|
|
|
throw new RuntimeException("请先删除主账号下的子账号后再禁用");
|
|
|
}
|
|
|
}
|
|
|
- // 禁用时删除 token
|
|
|
- baseRedisService.delete("store_" + storeUser.getPhone());
|
|
|
}
|
|
|
- // 根据当前状态切另一个状态
|
|
|
int newStatus = storeUser.getStatus() == 0 ? 1 : 0;
|
|
|
+ // 是否既是主账号又在 store_platform_user_role 中有记录(即也是子账号)
|
|
|
+ long roleCount = storePlatformUserRoleMapper.selectCount(new LambdaQueryWrapper<StorePlatformUserRole>().eq(StorePlatformUserRole::getUserId, storeUser.getId()));
|
|
|
+ boolean isBothMainAndSub = (storeUser.getAccountType() != null && storeUser.getAccountType() == 1) && roleCount > 0;
|
|
|
+ if (isBothMainAndSub && newStatus == 1) {
|
|
|
+ // 既是主账号也是子账号且本次为禁用:只禁用子账号角色,不更新 store_user,主账号保持启用
|
|
|
+ LambdaUpdateWrapper<StorePlatformUserRole> roleUpdateWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ roleUpdateWrapper.eq(StorePlatformUserRole::getUserId, storeUser.getId()).set(StorePlatformUserRole::getStatus, 1);
|
|
|
+ storePlatformUserRoleMapper.update(null, roleUpdateWrapper);
|
|
|
+ StoreUserVo vo = new StoreUserVo();
|
|
|
+ vo.setId(storeUser.getId());
|
|
|
+ vo.setStatus(1);
|
|
|
+ vo.setSwitchStatus(false);
|
|
|
+ return R.data(vo);
|
|
|
+ }
|
|
|
+ if (newStatus == 1) {
|
|
|
+ baseRedisService.delete("store_" + storeUser.getPhone());
|
|
|
+ }
|
|
|
LambdaUpdateWrapper<StoreUser> queryWrapper = new LambdaUpdateWrapper<>();
|
|
|
- queryWrapper.eq(StoreUser::getId, storeUser.getId())
|
|
|
- .set(StoreUser::getStatus, newStatus);
|
|
|
+ queryWrapper.eq(StoreUser::getId, storeUser.getId()).set(StoreUser::getStatus, newStatus);
|
|
|
int updateCount = storeUserMapper.update(null, queryWrapper);
|
|
|
if (updateCount <= 0) {
|
|
|
throw new RuntimeException("更新失败");
|
|
|
}
|
|
|
+ LambdaUpdateWrapper<StorePlatformUserRole> roleUpdateWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ roleUpdateWrapper.eq(StorePlatformUserRole::getUserId, storeUser.getId()).set(StorePlatformUserRole::getStatus, newStatus);
|
|
|
+ storePlatformUserRoleMapper.update(null, roleUpdateWrapper);
|
|
|
// 返回更新后的状态,供前端及时展示
|
|
|
StoreUserVo vo = new StoreUserVo();
|
|
|
vo.setId(storeUser.getId());
|
|
|
@@ -621,8 +676,8 @@ public class StoreUserServiceImpl extends ServiceImpl<StoreUserMapper, StoreUser
|
|
|
|
|
|
/**
|
|
|
* 分页查询
|
|
|
- * @param pageNum
|
|
|
- * @param pageSize
|
|
|
+ * @param
|
|
|
+ * @param
|
|
|
* @param id
|
|
|
* @param phone
|
|
|
* @param status
|
|
|
@@ -632,7 +687,7 @@ public class StoreUserServiceImpl extends ServiceImpl<StoreUserMapper, StoreUser
|
|
|
@Override
|
|
|
public String exportExcel(String id, String phone, String status, Integer accountType) throws IOException {
|
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
- // 主账号导出:与 getStoreUserList 主账号分支一致,子账号数量按 store_platform_user_role 统计
|
|
|
+ // 主账号导出:与 getStoreUserList 主账号分支一致,子账号数量按 store_platform_user_role 统计;排除注销中、已注销
|
|
|
if (accountType == 1) {
|
|
|
LambdaQueryWrapper<StoreUser> wrapper = new LambdaQueryWrapper<>();
|
|
|
wrapper.eq(StoreUser::getDeleteFlag, 0)
|
|
|
@@ -640,6 +695,8 @@ public class StoreUserServiceImpl extends ServiceImpl<StoreUserMapper, StoreUser
|
|
|
.like(StringUtils.isNotEmpty(phone), StoreUser::getPhone, phone)
|
|
|
.eq(StringUtils.isNotEmpty(status), StoreUser::getStatus, status)
|
|
|
.eq(StoreUser::getAccountType, 1)
|
|
|
+ .and(w -> w.isNull(StoreUser::getLogoutFlag).or().eq(StoreUser::getLogoutFlag, 0))
|
|
|
+ .and(w -> w.isNull(StoreUser::getStatus).or().in(StoreUser::getStatus, 0, 1))
|
|
|
.orderByDesc(StoreUser::getCreatedTime);
|
|
|
List<StoreUser> storeUsers = storeUserMapper.selectList(wrapper);
|
|
|
List<StoreUserExcelVo> storeUserExcelVoList = new ArrayList<>();
|
|
|
@@ -666,16 +723,56 @@ public class StoreUserServiceImpl extends ServiceImpl<StoreUserMapper, StoreUser
|
|
|
String filePath = ExcelGenerator.generateExcel(excelPath + excelGeneratePath + fileName + ".xlsx", new ArrayList<StoreSubExcelVo>(), StoreSubExcelVo.class);
|
|
|
return aliOSSUtil.uploadFile(new File(filePath), "excel/" + fileName + ".xlsx");
|
|
|
}
|
|
|
+ // 按 (userId, role_id) 去重,与 getStoreUserList 子账号分页一致
|
|
|
+ userRoles = userRoles.stream()
|
|
|
+ .sorted(Comparator.comparing(StorePlatformUserRole::getId, Comparator.nullsLast(Comparator.naturalOrder())))
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ r -> (r.getUserId() != null ? r.getUserId() : 0) + "_" + (r.getRoleId() != null ? r.getRoleId() : ""),
|
|
|
+ r -> r,
|
|
|
+ (a, b) -> a
|
|
|
+ ))
|
|
|
+ .values().stream()
|
|
|
+ .sorted(Comparator.comparing(StorePlatformUserRole::getId, Comparator.nullsLast(Comparator.naturalOrder())))
|
|
|
+ .collect(Collectors.toList());
|
|
|
List<Integer> distinctUserIds = userRoles.stream().map(StorePlatformUserRole::getUserId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
|
|
|
List<StoreUser> subAccountList = distinctUserIds.isEmpty() ? Collections.emptyList() : storeUserMapper.selectBatchIds(distinctUserIds);
|
|
|
- Map<Integer, StoreUser> subAccountMap = subAccountList == null ? new HashMap<>() : subAccountList.stream().filter(u -> u.getDeleteFlag() != null && u.getDeleteFlag() == 0).collect(Collectors.toMap(StoreUser::getId, u -> u, (a, b) -> a));
|
|
|
+ Integer statusInt = null;
|
|
|
+ if (StringUtils.isNotEmpty(status)) {
|
|
|
+ try { statusInt = Integer.parseInt(status.trim()); } catch (NumberFormatException ignored) { }
|
|
|
+ }
|
|
|
+ // 与 getStoreUserList 一致:选「注销中/已注销」时只保留对应状态;否则排除注销中、已注销
|
|
|
+ Map<Integer, StoreUser> subAccountMap;
|
|
|
+ if (statusInt != null && (statusInt == -1 || statusInt == 2)) {
|
|
|
+ final int filterStatus = statusInt;
|
|
|
+ subAccountMap = subAccountList == null ? new HashMap<>() : subAccountList.stream()
|
|
|
+ .filter(u -> u.getDeleteFlag() != null && u.getDeleteFlag() == 0)
|
|
|
+ .filter(u -> {
|
|
|
+ if (filterStatus == -1) return u.getStatus() != null && u.getStatus() == -1;
|
|
|
+ return (u.getStatus() != null && u.getStatus() == 2) || (u.getLogoutFlag() != null && u.getLogoutFlag() == 1);
|
|
|
+ })
|
|
|
+ .collect(Collectors.toMap(StoreUser::getId, u -> u, (a, b) -> a));
|
|
|
+ } else {
|
|
|
+ subAccountMap = subAccountList == null ? new HashMap<>() : subAccountList.stream()
|
|
|
+ .filter(u -> u.getDeleteFlag() != null && u.getDeleteFlag() == 0
|
|
|
+ && (u.getLogoutFlag() == null || u.getLogoutFlag() == 0)
|
|
|
+ && (u.getStatus() == null || (u.getStatus() != -1 && u.getStatus() != 2)))
|
|
|
+ .collect(Collectors.toMap(StoreUser::getId, u -> u, (a, b) -> a));
|
|
|
+ }
|
|
|
List<StorePlatformUserRole> filteredRoles = new ArrayList<>();
|
|
|
for (StorePlatformUserRole role : userRoles) {
|
|
|
StoreUser subAccount = subAccountMap.get(role.getUserId());
|
|
|
if (subAccount == null) continue;
|
|
|
if (StringUtils.isNotEmpty(id) && (subAccount.getId() == null || !String.valueOf(subAccount.getId()).contains(id))) continue;
|
|
|
if (StringUtils.isNotEmpty(phone) && (subAccount.getPhone() == null || !subAccount.getPhone().contains(phone))) continue;
|
|
|
- if (status != null && !status.equals(subAccount.getStatus())) continue;
|
|
|
+ int rowStatus;
|
|
|
+ if (statusInt != null && (statusInt == -1 || statusInt == 2)) {
|
|
|
+ rowStatus = (subAccount.getStatus() != null && subAccount.getStatus() == -1) ? -1
|
|
|
+ : ((subAccount.getStatus() != null && subAccount.getStatus() == 2) || (subAccount.getLogoutFlag() != null && subAccount.getLogoutFlag() == 1)) ? 2
|
|
|
+ : (subAccount.getStatus() != null ? subAccount.getStatus() : 0);
|
|
|
+ } else {
|
|
|
+ rowStatus = role.getStatus() != null ? role.getStatus() : (subAccount.getStatus() != null ? subAccount.getStatus() : 0);
|
|
|
+ }
|
|
|
+ if (statusInt != null && !statusInt.equals(rowStatus)) continue;
|
|
|
filteredRoles.add(role);
|
|
|
}
|
|
|
filteredRoles.sort(Comparator.comparing(StorePlatformUserRole::getId, Comparator.nullsLast(Comparator.naturalOrder())));
|
|
|
@@ -697,7 +794,10 @@ public class StoreUserServiceImpl extends ServiceImpl<StoreUserMapper, StoreUser
|
|
|
vo.setId(subAccount.getId());
|
|
|
vo.setPhone(subAccount.getPhone());
|
|
|
vo.setCreatedTime(subAccount.getCreatedTime() != null ? subAccount.getCreatedTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().format(formatter) : null);
|
|
|
- vo.setStatus(subAccount.getStatus() == null ? "" : (subAccount.getStatus() == 0 ? "启用" : "禁用"));
|
|
|
+ int rowStatus = (subAccount.getStatus() != null && subAccount.getStatus() == -1) ? -1
|
|
|
+ : ((subAccount.getStatus() != null && subAccount.getStatus() == 2) || (subAccount.getLogoutFlag() != null && subAccount.getLogoutFlag() == 1)) ? 2
|
|
|
+ : (role.getStatus() != null ? role.getStatus() : (subAccount.getStatus() != null ? subAccount.getStatus() : 0));
|
|
|
+ vo.setStatus(rowStatus == -1 ? "注销中" : rowStatus == 2 ? "已注销" : (rowStatus == 0 ? "启用" : "禁用"));
|
|
|
StoreUser mainAccount = role.getStoreId() == null ? null : mainAccountMap.get(role.getStoreId());
|
|
|
if (mainAccount != null) {
|
|
|
vo.setParentAccountPhone(mainAccount.getPhone());
|
|
|
@@ -937,7 +1037,7 @@ public class StoreUserServiceImpl extends ServiceImpl<StoreUserMapper, StoreUser
|
|
|
*/
|
|
|
|
|
|
@Override
|
|
|
- public void deleteStoreAccountInfo(StoreUserVo storeUserVo) {
|
|
|
+ public boolean deleteStoreAccountInfo(StoreUserVo storeUserVo) {
|
|
|
LambdaQueryWrapper<StoreUser> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
queryWrapper.eq(StoreUser::getId, storeUserVo.getId());
|
|
|
queryWrapper.eq(StoreUser::getDeleteFlag, 0);
|
|
|
@@ -953,7 +1053,7 @@ public class StoreUserServiceImpl extends ServiceImpl<StoreUserMapper, StoreUser
|
|
|
}
|
|
|
}
|
|
|
if (storeUser == null) {
|
|
|
- return;
|
|
|
+ return false;
|
|
|
}
|
|
|
Integer userId = storeUser.getId();
|
|
|
String phone = storeUser.getPhone();
|
|
|
@@ -965,69 +1065,62 @@ public class StoreUserServiceImpl extends ServiceImpl<StoreUserMapper, StoreUser
|
|
|
long subAccountCount = storePlatformUserRoleMapper.selectCount(countWrapper);
|
|
|
log.info("用户在所有店铺下的子账号数量: userId={}, count={}", userId, subAccountCount);
|
|
|
|
|
|
- // 2. 逻辑删除 store_platform_user_role 表的记录
|
|
|
- LambdaUpdateWrapper<StorePlatformUserRole> updateWrapper = new LambdaUpdateWrapper<>();
|
|
|
- updateWrapper.eq(StorePlatformUserRole::getUserId, userId)
|
|
|
- .eq(StorePlatformUserRole::getDeleteFlag, 0)
|
|
|
- .set(StorePlatformUserRole::getDeleteFlag, 1);
|
|
|
- storePlatformUserRoleMapper.update(null, updateWrapper);
|
|
|
-
|
|
|
- // 删除 token
|
|
|
- String tokenKey = "store_" + phone;
|
|
|
- baseRedisService.delete(tokenKey);
|
|
|
-
|
|
|
- // 3. 如果只是一个账号的子账号(删除前只有1个),则需要进一步判断是否为主账号,再决定是否同时逻辑删除 store_user 表
|
|
|
- if (subAccountCount == 1) {
|
|
|
- boolean isMainAccount = storeUser.getStoreId() != null && storeUser.getStoreId() > 0
|
|
|
- || (storeUser.getAccountType() != null && storeUser.getAccountType() == 1);
|
|
|
- if (isMainAccount) {
|
|
|
- // 主账号:物理删除 store_user 及关联数据(主账号校验已通过,无店铺无子账号)
|
|
|
- nearMeService.removeGeolocation(Boolean.TRUE, userId.toString());
|
|
|
- storeUserMapper.deleteById(userId);
|
|
|
- LambdaQueryWrapper<LifeFans> lifeFansWrapper = new LambdaQueryWrapper<LifeFans>()
|
|
|
- .eq(LifeFans::getFollowedId, "store_" + phone)
|
|
|
- .or().eq(LifeFans::getFansId, "store_" + phone);
|
|
|
- lifeFansMapper.delete(lifeFansWrapper);
|
|
|
- if (storeUser.getStoreId() != null) {
|
|
|
- storeInfoMapper.deleteById(storeUser.getStoreId());
|
|
|
- }
|
|
|
- lifeUserDynamicsMapper.delete(new LambdaQueryWrapper<LifeUserDynamics>().eq(LifeUserDynamics::getPhoneId, "store_" + phone));
|
|
|
- lifeNoticeMapper.delete(new LambdaQueryWrapper<LifeNotice>().eq(LifeNotice::getReceiverId, "store_" + phone));
|
|
|
- lifeMessageMapper.delete(new LambdaQueryWrapper<LifeMessage>().eq(LifeMessage::getSenderId, "store_" + phone));
|
|
|
- lifeMessageMapper.delete(new LambdaQueryWrapper<LifeMessage>().eq(LifeMessage::getReceiverId, "store_" + phone));
|
|
|
- log.info("主账号仅1条 platform 记录,已物理删除 store_user 及关联数据: userId={}", userId);
|
|
|
- } else {
|
|
|
- // 不是主账号,逻辑删除 store_user
|
|
|
- LambdaUpdateWrapper<StoreUser> userUpdateWrapper = new LambdaUpdateWrapper<>();
|
|
|
- userUpdateWrapper.eq(StoreUser::getId, userId)
|
|
|
+ long roleCount = storePlatformUserRoleMapper.selectCount(new LambdaQueryWrapper<StorePlatformUserRole>().eq(StorePlatformUserRole::getUserId, storeUser.getId()));
|
|
|
+ if (roleCount != 0||subAccountCount>1){
|
|
|
+ // 2. 逻辑删除 store_platform_user_role 表的记录
|
|
|
+ LambdaUpdateWrapper<StorePlatformUserRole> wrapper = new LambdaUpdateWrapper<>();
|
|
|
+ wrapper.eq(StorePlatformUserRole::getUserId, userId)
|
|
|
+ .eq(StorePlatformUserRole::getDeleteFlag, 0)
|
|
|
+ .set(StorePlatformUserRole::getDeleteFlag, 1);
|
|
|
+ storePlatformUserRoleMapper.update(null,wrapper);
|
|
|
+ log.info("该账号有多个子账号,不删除 store_user 记录: userId={}, count={}", userId, subAccountCount);
|
|
|
+ String tokenKey = "store_" + phone;
|
|
|
+ baseRedisService.delete(tokenKey);
|
|
|
+ return true;
|
|
|
+ }else if (subAccountCount == 1){
|
|
|
+ // 2. 逻辑删除 store_platform_user_role 表的记录
|
|
|
+ LambdaUpdateWrapper<StorePlatformUserRole> updateWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ updateWrapper.eq(StorePlatformUserRole::getUserId, userId)
|
|
|
+ .eq(StorePlatformUserRole::getDeleteFlag, 0)
|
|
|
+ .set(StorePlatformUserRole::getDeleteFlag, 1);
|
|
|
+ storePlatformUserRoleMapper.update(null, updateWrapper);
|
|
|
+ // 删除 token
|
|
|
+ String tokenKey = "store_" + phone;
|
|
|
+ baseRedisService.delete(tokenKey);
|
|
|
+ // 3. 如果只是一个账号的子账号(删除前只有1个),则需要进一步判断是否为主账号,再决定是否同时逻辑删除 store_user 表
|
|
|
+
|
|
|
+ // 主账号:逻辑删除 store_user 及关联数据(入口已保证无店铺、无子账号)
|
|
|
+ LambdaUpdateWrapper<StoreUser> userUpdateWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ userUpdateWrapper.eq(StoreUser::getId, userId)
|
|
|
.eq(StoreUser::getDeleteFlag, 0)
|
|
|
.set(StoreUser::getDeleteFlag, 1);
|
|
|
- int userUpdateResult = storeUserMapper.update(null, userUpdateWrapper);
|
|
|
- if (userUpdateResult > 0) {
|
|
|
- log.info("用户只有一个子账号且不是主账号,已同时逻辑删除 store_user 记录: userId={}", userId);
|
|
|
- } else {
|
|
|
- log.warn("逻辑删除 store_user 记录失败或记录不存在: userId={}", userId);
|
|
|
- }
|
|
|
- }
|
|
|
- } else if (subAccountCount == 0) {
|
|
|
- // 无 platform 记录,全量物理删除
|
|
|
- nearMeService.removeGeolocation(Boolean.TRUE, userId.toString());
|
|
|
- storeUserMapper.deleteById(userId);
|
|
|
- LambdaQueryWrapper<LifeFans> lifeFansWrapper = new LambdaQueryWrapper<LifeFans>()
|
|
|
- .eq(LifeFans::getFollowedId, "store_" + phone)
|
|
|
- .or().eq(LifeFans::getFansId, "store_" + phone);
|
|
|
- lifeFansMapper.delete(lifeFansWrapper);
|
|
|
- if (storeUser.getStoreId() != null) {
|
|
|
- storeInfoMapper.deleteById(storeUser.getStoreId());
|
|
|
+ int userUpdateResult = storeUserMapper.update(null, userUpdateWrapper);
|
|
|
+ if (userUpdateResult > 0) {
|
|
|
+ log.info("主账号仅1条 platform 记录,已逻辑删除 store_user: userId={}", userId);
|
|
|
+ } else {
|
|
|
+ log.warn("逻辑删除 store_user 记录失败或记录不存在: userId={}", userId);
|
|
|
}
|
|
|
- lifeUserDynamicsMapper.delete(new LambdaQueryWrapper<LifeUserDynamics>().eq(LifeUserDynamics::getPhoneId, "store_" + phone));
|
|
|
- lifeNoticeMapper.delete(new LambdaQueryWrapper<LifeNotice>().eq(LifeNotice::getReceiverId, "store_" + phone));
|
|
|
- lifeMessageMapper.delete(new LambdaQueryWrapper<LifeMessage>().eq(LifeMessage::getSenderId, "store_" + phone));
|
|
|
- lifeMessageMapper.delete(new LambdaQueryWrapper<LifeMessage>().eq(LifeMessage::getReceiverId, "store_" + phone));
|
|
|
- log.info("用户无 platform 记录,已物理删除 store_user 及关联数据: userId={}", userId);
|
|
|
+ return true;
|
|
|
} else {
|
|
|
- log.info("用户有多个子账号(count={}),仅删除 store_platform_user_role 记录,不删除 store_user: userId={}", subAccountCount, userId);
|
|
|
+ // 删除 token
|
|
|
+ String tokenKey = "store_" + phone;
|
|
|
+ baseRedisService.delete(tokenKey);
|
|
|
+ LambdaUpdateWrapper<StoreUser> userUpdateWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ userUpdateWrapper.eq(StoreUser::getId, userId)
|
|
|
+ .eq(StoreUser::getDeleteFlag, 0)
|
|
|
+ .set(StoreUser::getDeleteFlag, 1);
|
|
|
+ int userUpdateResult = storeUserMapper.update(null, userUpdateWrapper);
|
|
|
+ if (userUpdateResult > 0) {
|
|
|
+ log.info("用户无 platform 记录且非主账号,已逻辑删除 store_user: userId={}", userId);
|
|
|
+ } else {
|
|
|
+ log.warn("逻辑删除 store_user 记录失败或记录不存在: userId={}", userId);
|
|
|
+ }
|
|
|
+ return true;
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|
|
|
@Override
|