liujie
2026-09-21 20051550f01227ecebbe0bf064e188dd242f58f2
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());