From 698ae84adaf1b8d0e8dd61d7279863fe17c1e81d Mon Sep 17 00:00:00 2001
From: luodangjia <luodangjia>
Date: 星期四, 23 一月 2025 14:20:39 +0800
Subject: [PATCH] 1

---
 ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/service/impl/CompanyServiceImpl.java |   75 +++++++++++++++++++++++++++++--------
 1 files changed, 58 insertions(+), 17 deletions(-)

diff --git a/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/service/impl/CompanyServiceImpl.java b/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/service/impl/CompanyServiceImpl.java
index 471b014..6b4da84 100644
--- a/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/service/impl/CompanyServiceImpl.java
+++ b/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/service/impl/CompanyServiceImpl.java
@@ -3,21 +3,25 @@
 import cn.idev.excel.FastExcel;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.constant.CacheConstants;
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.page.BeanUtils;
 import com.ruoyi.common.core.page.PageDTO;
 import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.common.redis.service.RedisService;
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.company.api.domain.Company;
 import com.ruoyi.company.api.domain.User;
 import com.ruoyi.company.api.domain.dto.MgtCompanyDTO;
 import com.ruoyi.company.api.domain.excel.MgtCompanyExcel;
 import com.ruoyi.company.api.domain.query.MgtCompanyQuery;
-import com.ruoyi.company.api.domain.vo.MgtCompanyVO;
+import com.ruoyi.company.domain.vo.MgtCompanyDetailVO;
+import com.ruoyi.company.domain.vo.MgtCompanyVO;
 import com.ruoyi.company.mapper.CompanyMapper;
 import com.ruoyi.company.service.CompanyService;
 import com.ruoyi.company.service.UserService;
 import com.ruoyi.company.utils.AliyunCloudAuthUtil;
+import com.ruoyi.system.api.model.AppUser;
 import lombok.RequiredArgsConstructor;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
@@ -26,6 +30,7 @@
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.net.URLEncoder;
+import java.util.Collection;
 import java.util.List;
 import java.util.Objects;
 
@@ -36,6 +41,8 @@
     private final HttpServletResponse response;
 
     private final AliyunCloudAuthUtil aliyunCloudAuthUtil;
+
+    private final RedisService redisService;
     /**
      * 获取企业列表
      *
@@ -72,11 +79,11 @@
      * @return
      */
     @Override
-    public MgtCompanyVO queryCompanyDetail(Long id) {
+    public MgtCompanyDetailVO queryCompanyDetail(Long id) {
         Company company = this.getById(id);
-        MgtCompanyVO mgtCompanyVO = BeanUtils.copyBean(company, MgtCompanyVO.class);
+        MgtCompanyDetailVO mgtCompanyVO = BeanUtils.copyBean(company, MgtCompanyDetailVO.class);
         if (Objects.isNull(mgtCompanyVO)) {
-            mgtCompanyVO = new MgtCompanyVO();
+            mgtCompanyVO = new MgtCompanyDetailVO();
             return mgtCompanyVO;
         }
         User user = userService.getById(company.getUserId());
@@ -109,15 +116,12 @@
         Company company = BeanUtils.copyBean(dto, Company.class);
         company.setUserId(user.getUserId());
         //根据公司名称查询数据库
-        Long count = this.lambdaQuery().eq(Company::getCompanyName, company.getCompanyName()).count();
+        Long count = this.lambdaQuery().eq(Company::getCompanyName, company.getCompanyName()).eq(Company::getSocialCode, dto.getSocialCode()).count();
         if (count > 0) {
-            throw new ServiceException("该公司账号已存在");
+            throw new ServiceException("该企业已存在");
         }
         //身份证二要素校验
-        Boolean res = aliyunCloudAuthUtil.verifyIdCard(dto.getLegalPersonName(), dto.getIdCardNumber());
-        if (!res) {
-            throw new ServiceException("身份证信息不匹配");
-        }
+        identityVerification(dto, user);
         this.save(company);
     }
 
@@ -141,7 +145,10 @@
         if (Objects.isNull(user)) {
             throw new ServiceException("该企业账号不存在");
         }
-        Long accountCount = userService.lambdaQuery().ne(User::getUserId, user.getUserId()).eq(User::getAccountName, dto.getAccountName()).count();
+        Long accountCount = userService.lambdaQuery()
+                .ne(User::getUserId, user.getUserId())
+                .eq(User::getAccountName, dto.getAccountName())
+                .count();
         if (accountCount > 0) {
             throw new ServiceException("账户名重复");
         }
@@ -154,18 +161,36 @@
         userUpd.setUpdateBy(SecurityUtils.getUserId());
         userService.updateById(userUpd);
         //根据公司名称查询数据库
-        Long count = this.lambdaQuery().ne(Company::getId, dto.getId()).eq(Company::getCompanyName, company.getCompanyName()).count();
-        if (count > 0) {
-            throw new ServiceException("该公司账号已存在");
+        if (StringUtils.isNotBlank(company.getCompanyName())){
+            Long count = this.lambdaQuery()
+                    .ne(Company::getId, dto.getId())
+                    .and(i -> {
+                    i.eq(Company::getSocialCode, dto.getSocialCode());
+                    i.or();
+                    i.eq(Company::getCompanyName, dto.getCompanyName());
+                    })
+                    .count();
+            if (count > 0) {
+                throw new ServiceException("该企业已存在");
+            }
         }
+        identityVerification(dto, user);
+        Company companyUpd = BeanUtils.copyBean(dto, Company.class);
+        companyUpd.setId(company.getId());
+        this.updateById(companyUpd);
+    }
+
+    private void identityVerification(MgtCompanyDTO dto, User user) {
         //身份证二要素校验
         Boolean res = aliyunCloudAuthUtil.verifyIdCard(dto.getLegalPersonName(), dto.getIdCardNumber());
         if (!res) {
             throw new ServiceException("身份证信息不匹配");
         }
-        Company companyUpd = BeanUtils.copyBean(dto, Company.class);
-        companyUpd.setId(company.getId());
-        this.updateById(companyUpd);
+        //营业执照二要素校验
+        res = aliyunCloudAuthUtil.verifyBusinessLicense(dto.getSocialCode(), dto.getCompanyName(), user.getUserId());
+        if (!res) {
+            throw new ServiceException("营业执照信息不匹配");
+        }
     }
 
     /**
@@ -186,6 +211,22 @@
         //删除企业信息
         this.removeById(id);
 
+        //强退用户
+        forceLogout(company.getUserId());
+
+    }
+
+    public void forceLogout(Long userId) {
+        Collection<String> keys = redisService.keys(CacheConstants.LOGIN_TOKEN_KEY + "*");
+        for (String key : keys) {
+            Object user = redisService.getCacheObject(key);
+            if (user instanceof AppUser) {
+                AppUser appUser = (AppUser) user;
+                if (appUser.getUserId().equals(userId)) {
+                    redisService.deleteObject(key);
+                }
+            }
+        }
     }
 
     @Override

--
Gitblit v1.7.1