Przeglądaj źródła

Merge remote-tracking branch 'origin/sit' into sit

liudongzhi 1 miesiąc temu
rodzic
commit
1af4a923fb

+ 125 - 54
alien-job/src/main/java/shop/alien/job/store/StoreMembershipCardJob.java

@@ -122,78 +122,149 @@ public class StoreMembershipCardJob {
     @XxlJob("cancellationOfBusinessJob")
     public void cancellationOfBusinessJob() {
         log.info("删除已申请注销超过7天的商家与用户: " + new Date());
+        int successCount = 0;
+        int failCount = 0;
 
-        // 获取全部申请注销的商家
+        // 获取全部申请注销的商家用户
         List<StoreUser> storeUsers = storeUserMapper.selectList(new LambdaQueryWrapper<StoreUser>().eq(StoreUser::getLogoutFlag, LOGOUT_FLAY));
         for (StoreUser storeUser : storeUsers) {
-            if (null != storeUser.getLogoutTime()) {
-                // 获取申请注销时间
-                Date logoutTime = storeUser.getLogoutTime();
-                // 获取申请注销 8 天后的时间
-                Calendar calendar = Calendar.getInstance();
-                calendar.setTime(logoutTime);
-                calendar.add(Calendar.DAY_OF_YEAR, 8);
-                Date sevenDay = calendar.getTime();
-                // 获取当前时间
-                Date date = new Date();
-                if (date.compareTo(sevenDay) >= 0) {
-                    // 删除已过注销时间的商家
-                    storeUserMapper.deleteById(storeUser.getId());
-                    alienStoreFeign.delMer(Boolean.TRUE, storeUser.getId().toString());
-                    //删除用户redis中的token
-                    baseRedisService.delete("store_" + storeUser.getPhone());
+            try {
+                if (null != storeUser.getLogoutTime()) {
+                    // 获取申请注销时间
+                    Date logoutTime = storeUser.getLogoutTime();
+                    // 获取申请注销 7 天后的时间(与通知一致)
+                    Calendar calendar = Calendar.getInstance();
+                    calendar.setTime(logoutTime);
+                    calendar.add(Calendar.DAY_OF_YEAR, 7);
+                    Date sevenDay = calendar.getTime();
+                    // 获取当前时间
+                    Date date = new Date();
+                    if (date.compareTo(sevenDay) >= 0) {
+                        // 删除已过注销时间的商家用户
+                        log.info("删除已注销超过7天的商家用户: userId={}, phone={}, logoutTime={}", 
+                                storeUser.getId(), storeUser.getPhone(), logoutTime);
+                        storeUserMapper.deleteById(storeUser.getId());
+                        alienStoreFeign.delMer(Boolean.TRUE, storeUser.getId().toString());
+                        //删除用户redis中的token
+                        baseRedisService.delete("store_" + storeUser.getPhone());
+                        successCount++;
+                    }
                 }
+            } catch (Exception e) {
+                failCount++;
+                log.error("删除商家用户失败: userId={}, phone={}, error={}", 
+                        storeUser.getId(), storeUser.getPhone(), e.getMessage(), e);
             }
         }
+        
+        // 获取全部申请注销的店铺
         List<StoreInfo> storeInfos = storeInfoMapper.selectList(new LambdaQueryWrapper<StoreInfo>().eq(StoreInfo::getLogoutFlag, LOGOUT_FLAY));
         for (StoreInfo storeInfo : storeInfos) {
-            if (null != storeInfo.getLogoutTime()) {
-                // 获取申请注销时间
-                Date logoutTime = storeInfo.getLogoutTime();
-                // 获取申请注销 8 天后的时间
-                Calendar calendar = Calendar.getInstance();
-                calendar.setTime(logoutTime);
-                calendar.add(Calendar.DAY_OF_YEAR, 8);
-                Date sevenDay = calendar.getTime();
-                // 获取当前时间
-                Date date = new Date();
-                if (date.compareTo(sevenDay) >= 0) {
-                    //删除该账号的店铺
-                    storeInfoMapper.deleteById(storeInfo.getId());
-                    StoreUser storeUser = storeUserMapper.selectOne(new LambdaQueryWrapper<StoreUser>().eq(StoreUser::getStoreId, storeInfo.getId()));
-                    if (storeUser != null) {
-                        storeUser.setStoreId(null);
-                        storeUserMapper.updateById(storeUser);
-                        LambdaQueryWrapper<LifeFans> queryWrapper = new LambdaQueryWrapper<LifeFans>().eq(LifeFans::getFollowedId, "store_" + storeUser.getPhone())
-                                .or().eq(LifeFans::getFansId, "store_" + storeUser.getPhone());
-                        lifeFansMapper.delete(queryWrapper);
+            try {
+                if (null != storeInfo.getLogoutTime()) {
+                    // 获取申请注销时间
+                    Date logoutTime = storeInfo.getLogoutTime();
+                    // 获取申请注销 7 天后的时间(与通知一致)
+                    Calendar calendar = Calendar.getInstance();
+                    calendar.setTime(logoutTime);
+                    calendar.add(Calendar.DAY_OF_YEAR, 7);
+                    Date sevenDay = calendar.getTime();
+                    // 获取当前时间
+                    Date date = new Date();
+                    if (date.compareTo(sevenDay) >= 0) {
+                        log.info("开始删除已注销超过7天的店铺: storeId={}, storeName={}, logoutTime={}", 
+                                storeInfo.getId(), storeInfo.getStoreName(), logoutTime);
+                        
+                        // 先清理关联的商户用户注销状态,确保可以重新入驻
+                        List<StoreUser> relatedStoreUsers = storeUserMapper.selectList(
+                                new LambdaQueryWrapper<StoreUser>().eq(StoreUser::getStoreId, storeInfo.getId()));
+                        int deletedUsers = 0;
+                        int deletedFans = 0;
+                        
+                        for (StoreUser storeUser : relatedStoreUsers) {
+                            try {
+                                // 清理注销标记和时间,允许重新入驻
+                                storeUser.setLogoutFlag(0);
+                                storeUser.setLogoutTime(null);
+                                storeUser.setStoreId(null);  // 解除店铺绑定
+                                storeUserMapper.updateById(storeUser);
+                                deletedUsers++;
+                                log.info("清理商户用户注销状态: userId={}, phone={}", storeUser.getId(), storeUser.getPhone());
+                            } catch (Exception e) {
+                                log.error("清理商户用户注销状态失败: userId={}, phone={}, error={}", 
+                                        storeUser.getId(), storeUser.getPhone(), e.getMessage(), e);
+                            }
+                        }
+                        
+                        // 清理粉丝关系
+                        for (StoreUser storeUser : relatedStoreUsers) {
+                            try {
+                                if (storeUser.getPhone() != null) {
+                                    LambdaQueryWrapper<LifeFans> queryWrapper = new LambdaQueryWrapper<LifeFans>()
+                                            .eq(LifeFans::getFollowedId, "store_" + storeUser.getPhone())
+                                            .or().eq(LifeFans::getFansId, "store_" + storeUser.getPhone());
+                                    int deleted = lifeFansMapper.delete(queryWrapper);
+                                    deletedFans += deleted;
+                                }
+                            } catch (Exception e) {
+                                log.error("清理粉丝关系失败: userId={}, phone={}, error={}", 
+                                        storeUser.getId(), storeUser.getPhone(), e.getMessage(), e);
+                            }
+                        }
+                        
+                        // 清理Redis地理位置(通过Feign调用)
+                        try {
+                            alienStoreFeign.delMer(Boolean.TRUE, storeInfo.getId().toString());
+                        } catch (Exception e) {
+                            log.warn("清理Redis地理位置失败: storeId={}, error={}", storeInfo.getId(), e.getMessage());
+                        }
+                        
+                        // 最后删除店铺记录
+                        storeInfoMapper.deleteById(storeInfo.getId());
+                        successCount++;
+                        log.info("店铺删除完成: storeId={}, deletedUsers={}, deletedFans={}", 
+                                storeInfo.getId(), deletedUsers, deletedFans);
                     }
                 }
+            } catch (Exception e) {
+                failCount++;
+                log.error("删除店铺失败: storeId={}, storeName={}, error={}", 
+                        storeInfo.getId(), storeInfo.getStoreName(), e.getMessage(), e);
             }
         }
 
         // 获取全部申请注销的用户
         List<LifeUser> lifeUsers = lifeUserMapper.selectList(new LambdaQueryWrapper<LifeUser>().eq(LifeUser::getLogoutFlag, LOGOUT_FLAY));
         for (LifeUser lifeUser : lifeUsers) {
-            if (null != lifeUser.getLogoutTime()) {
-                // 获取申请注销时间
-                Date logoutTime = lifeUser.getLogoutTime();
-                // 获取申请注销 7 天后的时间
-                Calendar calendar = Calendar.getInstance();
-                calendar.setTime(logoutTime);
-                calendar.add(Calendar.DAY_OF_YEAR, 7);
-                Date sevenDay = calendar.getTime();
-                // 获取当前时间
-                Date date = new Date();
-                if (date.compareTo(sevenDay) >= 0) {
-                    // 删除已过注销时间的用户
-                    lifeUserMapper.deleteById(lifeUser.getId());
-                    // 清理粉丝
-                    LambdaQueryWrapper<LifeFans> queryWrapper = new LambdaQueryWrapper<LifeFans>().eq(LifeFans::getFollowedId, "user_" + lifeUser.getUserPhone())
-                            .or().eq(LifeFans::getFansId, "user_" + lifeUser.getUserPhone());
-                    lifeFansMapper.delete(queryWrapper);
+            try {
+                if (null != lifeUser.getLogoutTime()) {
+                    // 获取申请注销时间
+                    Date logoutTime = lifeUser.getLogoutTime();
+                    // 获取申请注销 7 天后的时间
+                    Calendar calendar = Calendar.getInstance();
+                    calendar.setTime(logoutTime);
+                    calendar.add(Calendar.DAY_OF_YEAR, 7);
+                    Date sevenDay = calendar.getTime();
+                    // 获取当前时间
+                    Date date = new Date();
+                    if (date.compareTo(sevenDay) >= 0) {
+                        // 删除已过注销时间的用户
+                        lifeUserMapper.deleteById(lifeUser.getId());
+                        // 清理粉丝
+                        LambdaQueryWrapper<LifeFans> queryWrapper = new LambdaQueryWrapper<LifeFans>()
+                                .eq(LifeFans::getFollowedId, "user_" + lifeUser.getUserPhone())
+                                .or().eq(LifeFans::getFansId, "user_" + lifeUser.getUserPhone());
+                        lifeFansMapper.delete(queryWrapper);
+                        successCount++;
+                    }
                 }
+            } catch (Exception e) {
+                failCount++;
+                log.error("删除用户失败: userId={}, phone={}, error={}", 
+                        lifeUser.getId(), lifeUser.getUserPhone(), e.getMessage(), e);
             }
         }
+        
+        log.info("定时任务执行完成: 成功={}, 失败={}", successCount, failCount);
     }
 }

+ 8 - 5
alien-store-platform/src/main/java/shop/alien/storeplatform/service/impl/MerchantAuthServiceImpl.java

@@ -51,11 +51,12 @@ public class MerchantAuthServiceImpl implements MerchantAuthService {
                        .eq(LifeUser::getLogoutFlag, 0);  // 只查询未注销的用户
             size = lifeUserMapper.selectCount(userWrapper);
         } else {
-            // 商家端:查询已入驻或审核中的商家
-            // 1. 先根据身份证和姓名查询商户用户
+            // 商家端:查询已入驻或审核中的商家(排除已注销和审核失败的店铺)
+            // 1. 先根据身份证和姓名查询商户用户(排除已注销的用户)
             LambdaQueryWrapper<StoreUser> storeUserWrapper = new LambdaQueryWrapper<>();
             storeUserWrapper.eq(StoreUser::getIdCard, idCard)
-                           .eq(StoreUser::getName, name);
+                           .eq(StoreUser::getName, name)
+                           .eq(StoreUser::getLogoutFlag, 0);  // 排除已注销的商户用户
             List<StoreUser> storeUserList = storeUserMapper.selectList(storeUserWrapper);
             
             // 2. 获取这些商户用户绑定的店铺ID
@@ -64,11 +65,13 @@ public class MerchantAuthServiceImpl implements MerchantAuthService {
                     .filter(Objects::nonNull)  // 过滤掉空的店铺ID
                     .collect(Collectors.toList());
             
-            // 3. 如果有店铺ID,查询非审核失败状态的店铺
+            // 3. 如果有店铺ID,查询非审核失败且非注销状态的店铺
             if (!storeIds.isEmpty()) {
                 LambdaQueryWrapper<StoreInfo> storeInfoWrapper = new LambdaQueryWrapper<>();
                 storeInfoWrapper.in(StoreInfo::getId, storeIds)
-                               .notIn(StoreInfo::getStoreApplicationStatus, 2);  // 排除审核失败的店铺(状态2)
+                               .notIn(StoreInfo::getStoreApplicationStatus, 2)  // 排除审核失败的店铺(状态2)
+                               .eq(StoreInfo::getLogoutFlag, 0)  // 排除已注销的店铺(logoutFlag=0表示未注销)
+                               .ne(StoreInfo::getStoreStatus, -1);  // 排除注销中状态的店铺(storeStatus=-1表示注销中)
                 size = storeInfoMapper.selectCount(storeInfoWrapper);
             }
         }

+ 28 - 2
alien-store/src/main/java/shop/alien/store/service/impl/StoreInfoServiceImpl.java

@@ -393,13 +393,20 @@ public class StoreInfoServiceImpl extends ServiceImpl<StoreInfoMapper, StoreInfo
         if (storeMainInfoVo.getRenewContractStatus() == 1) {
             storeMainInfoVo.setRenewContractStatus(0);
         }
-        if (storeMainInfoVo.getStoreStatus() == -1) {
+        // 处理注销状态:如果已超过7天,店铺应该已被定时任务删除,这里只处理7天内的倒计时
+        if (storeMainInfoVo.getStoreStatus() == -1 && storeMainInfoVo.getLogoutTime() != null) {
             LocalDateTime localDateTime = storeMainInfoVo.getLogoutTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
             LocalDateTime future = localDateTime.plusDays(7);
             LocalDateTime now = LocalDateTime.now();
             Duration duration = Duration.between(now, future);
             long correct = duration.toMillis();
-            storeMainInfoVo.setCountdown(correct);
+            // 如果倒计时已过期(小于0),说明已超过7天,店铺应该已被删除,不设置倒计时
+            if (correct > 0) {
+                storeMainInfoVo.setCountdown(correct);
+            } else {
+                // 超过7天,倒计时设为0,前端应该提示店铺已注销
+                storeMainInfoVo.setCountdown(0);
+            }
         }
         //存入门店地址
         storeMainInfoVo.setStoreAddress(storeInfo.getStoreAddress());
@@ -2745,6 +2752,25 @@ public class StoreInfoServiceImpl extends ServiceImpl<StoreInfoMapper, StoreInfo
         LambdaQueryWrapper<StoreInfo> storeUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
         storeUserLambdaQueryWrapper.eq(StoreInfo::getId, storeInfo.getId());
         StoreInfo storeIn = storeInfoMapper.selectOne(storeUserLambdaQueryWrapper);
+        
+        // 检查店铺是否存在
+        if (storeIn == null) {
+            throw new IllegalArgumentException("店铺不存在或已被删除");
+        }
+        
+        // 检查是否超过7天冷静期
+        if (storeIn.getLogoutTime() != null) {
+            Date logoutTime = storeIn.getLogoutTime();
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(logoutTime);
+            calendar.add(Calendar.DAY_OF_YEAR, 7);
+            Date sevenDaysLater = calendar.getTime();
+            Date now = new Date();
+            if (now.after(sevenDaysLater)) {
+                throw new IllegalArgumentException("已超过7天冷静期,无法取消注销");
+            }
+        }
+        
         // 修改注销标记为0
         storeIn.setLogoutFlag(0);
         // 注销状态变为可用