From 20051550f01227ecebbe0bf064e188dd242f58f2 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期一, 21 九月 2026 11:55:02 +0800
Subject: [PATCH] update

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysEmployeeServiceImpl.java |   65 ++++++++++++++++++++++++++++++--
 1 files changed, 61 insertions(+), 4 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysEmployeeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysEmployeeServiceImpl.java
index 6e39eea..cf2f15d 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysEmployeeServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysEmployeeServiceImpl.java
@@ -5,6 +5,7 @@
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.system.domain.SysEmployee;
+import com.ruoyi.system.domain.SysCard;
 import com.ruoyi.system.dto.SysEmployeeAddRequest;
 import com.ruoyi.system.dto.SysEmployeeDeleteRequest;
 import com.ruoyi.system.dto.SysEmployeeDetailRequest;
@@ -14,6 +15,7 @@
 import com.ruoyi.system.dto.SysEmployeeUnbindRequest;
 import com.ruoyi.system.mapper.SysDeptMapper;
 import com.ruoyi.system.mapper.SysEmployeeMapper;
+import com.ruoyi.system.mapper.SysCardMapper;
 import com.ruoyi.system.service.ISysEmployeeService;
 import com.ruoyi.system.utils.EmployeePhoneCrypto;
 import com.ruoyi.system.vo.SysEmployeeVO;
@@ -24,6 +26,7 @@
 import org.apache.poi.ss.usermodel.WorkbookFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import java.io.InputStream;
@@ -45,6 +48,9 @@
 
     @Autowired
     private SysEmployeeMapper employeeMapper;
+
+    @Autowired
+    private SysCardMapper cardMapper;
 
     @Autowired
     private SysDeptMapper deptMapper;
@@ -83,6 +89,7 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public int add(SysEmployeeAddRequest request, String username)
     {
         if (request == null)
@@ -93,10 +100,13 @@
                 request.getContactPhone(), request.getPosition(), request.getCardNo(), request.getFaceImage(),
                 request.getEnabled(), null);
         employee.setCreateBy(username);
-        return employeeMapper.insertEmployee(employee);
+        int rows = employeeMapper.insertEmployee(employee);
+        syncCard(employee.getEmployeeId(), null, employee.getCardNo(), username);
+        return rows;
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public int edit(SysEmployeeEditRequest request, String username)
     {
         if (request == null)
@@ -108,12 +118,15 @@
         {
             throw new ServiceException("员工不存在");
         }
+        SysEmployee oldEmployee = employeeMapper.selectById(employeeId);
         SysEmployee employee = buildEmployee(request.getDeptId(), request.getEmployeeName(), request.getEmployeeNo(),
                 request.getContactPhone(), request.getPosition(), request.getCardNo(), request.getFaceImage(),
                 request.getEnabled(), employeeId);
         employee.setEmployeeId(employeeId);
         employee.setUpdateBy(username);
-        return employeeMapper.updateEmployee(employee);
+        int rows = employeeMapper.updateEmployee(employee);
+        syncCard(employeeId, oldEmployee.getCardNo(), employee.getCardNo(), username);
+        return rows;
     }
 
     @Override
@@ -128,9 +141,16 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public int unbindCard(SysEmployeeUnbindRequest request, String username)
     {
-        return employeeMapper.clearCard(getRequiredEmployeeIds(request == null ? null : request.getEmployeeIds()), username);
+        List<Long> employeeIds = getRequiredEmployeeIds(request == null ? null : request.getEmployeeIds());
+        int rows = employeeMapper.clearCard(employeeIds, username);
+        for (Long employeeId : employeeIds)
+        {
+            cardMapper.unbindByEmployeeId(employeeId, username);
+        }
+        return rows;
     }
 
     @Override
@@ -140,9 +160,16 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public int delete(SysEmployeeDeleteRequest request, String username)
     {
-        return employeeMapper.deleteByIds(getRequiredEmployeeIds(request == null ? null : request.getEmployeeIds()), username);
+        List<Long> employeeIds = getRequiredEmployeeIds(request == null ? null : request.getEmployeeIds());
+        int rows = employeeMapper.deleteByIds(employeeIds, username);
+        for (Long employeeId : employeeIds)
+        {
+            cardMapper.unbindByEmployeeId(employeeId, username);
+        }
+        return rows;
     }
 
     @Override
@@ -369,6 +396,36 @@
         return StringUtils.trim(value);
     }
 
+    /**
+     * 员工模块直接维护卡号时同步卡片关系,保证两个管理入口的数据一致。
+     */
+    private void syncCard(Long employeeId, String oldCardNo, String newCardNo, String username)
+    {
+        if (oldCardNo != null && !oldCardNo.equals(newCardNo))
+        {
+            cardMapper.unbindByEmployeeId(employeeId, username);
+        }
+        if (newCardNo == null || newCardNo.length() == 0)
+        {
+            return;
+        }
+        SysCard card = cardMapper.selectByCardNo(newCardNo);
+        if (card == null)
+        {
+            card = new SysCard();
+            card.setCardNo(newCardNo);
+            card.setEmployeeId(employeeId);
+            card.setCreateBy(username);
+            cardMapper.insertCard(card);
+            return;
+        }
+        if (card.getEmployeeId() != null && !employeeId.equals(card.getEmployeeId()))
+        {
+            throw new ServiceException("卡号已绑定其他员工");
+        }
+        cardMapper.bindCard(card.getCardId(), employeeId, username);
+    }
+
     private void fillDisplayFields(SysEmployeeVO employee, boolean fullPhone)
     {
         String phone = EmployeePhoneCrypto.decrypt(employee.getContactPhone());

--
Gitblit v1.7.1