package com.ruoyi.system.service.impl; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.domain.SysDoorDevice; import com.ruoyi.system.domain.SysVisitArea; import com.ruoyi.system.domain.SysVisitorMachine; import com.ruoyi.system.dto.SysVisitorMachineAddRequest; import com.ruoyi.system.dto.SysVisitorMachineDeleteRequest; import com.ruoyi.system.dto.SysVisitorMachineDetailRequest; import com.ruoyi.system.dto.SysVisitorMachineEditRequest; import com.ruoyi.system.dto.SysVisitorMachineLogoutRequest; import com.ruoyi.system.dto.SysVisitorMachinePageRequest; import com.ruoyi.system.dto.SysVisitorMachineStatusRequest; import com.ruoyi.system.mapper.SysVisitAreaMapper; import com.ruoyi.system.mapper.SysVisitorMachineMapper; import com.ruoyi.system.service.ISysVisitorMachineService; import com.ruoyi.system.vo.SysVisitorMachineVO; 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.util.Date; import java.util.List; /** * 访客机服务实现 * * @author ruoyi */ @Service public class SysVisitorMachineServiceImpl implements ISysVisitorMachineService { private static final String ONLINE_STATUS_UNACTIVATED = "UNACTIVATED"; @Autowired private SysVisitorMachineMapper visitorMachineMapper; @Autowired private SysVisitAreaMapper visitAreaMapper; @Override public PageInfo pageList(SysVisitorMachinePageRequest request) { SysVisitorMachinePageRequest query = request == null ? new SysVisitorMachinePageRequest() : request; query.setDeviceName(StringUtils.trim(query.getDeviceName())); query.setDeviceId(StringUtils.trim(query.getDeviceId())); query.setOnlineStatus(StringUtils.trim(query.getOnlineStatus())); PageInfo pageInfo = new PageInfo(query.getPageNum(), query.getPageSize()); List list = visitorMachineMapper.pageList(query, pageInfo); pageInfo.setRecords(list); return pageInfo; } @Override public SysVisitorMachineVO detail(SysVisitorMachineDetailRequest request) { Long machineId = getRequiredMachineId(request == null ? null : request.getMachineId()); SysVisitorMachineVO detail = visitorMachineMapper.selectVoById(machineId); if (detail == null) { throw new ServiceException("访客机不存在"); } return detail; } @Override public int add(SysVisitorMachineAddRequest request, String username) { if (request == null) { throw new ServiceException("访客机内容不能为空"); } SysVisitorMachine machine = buildMachine(request.getAreaId(), request.getDeviceName(), request.getBrand(), request.getDeviceId(), request.getRemark(), request.getEnabled(), null); machine.setOnlineStatus(ONLINE_STATUS_UNACTIVATED); machine.setCreateBy(username); return visitorMachineMapper.insertMachine(machine); } @Override public int edit(SysVisitorMachineEditRequest request, String username) { if (request == null) { throw new ServiceException("访客机内容不能为空"); } Long machineId = getRequiredMachineId(request.getMachineId()); if (visitorMachineMapper.selectById(machineId) == null) { throw new ServiceException("访客机不存在"); } SysVisitorMachine machine = buildMachine(request.getAreaId(), request.getDeviceName(), request.getBrand(), request.getDeviceId(), request.getRemark(), request.getEnabled(), machineId); machine.setMachineId(machineId); machine.setUpdateBy(username); return visitorMachineMapper.updateMachine(machine); } @Override public int changeStatus(SysVisitorMachineStatusRequest request, String username) { List machineIds = getRequiredMachineIds(request == null ? null : request.getMachineIds()); if (request.getEnabled() == null) { throw new ServiceException("启用状态不能为空"); } return visitorMachineMapper.updateEnabled(machineIds, request.getEnabled(), username); } @Override public int logout(SysVisitorMachineLogoutRequest request, String username) { List machineIds = getRequiredMachineIds(request == null ? null : request.getMachineIds()); return visitorMachineMapper.updateOnlineStatus(machineIds, ONLINE_STATUS_UNACTIVATED, username); } @Override public int delete(SysVisitorMachineDeleteRequest request, String username) { List machineIds = getRequiredMachineIds(request == null ? null : request.getMachineIds()); return visitorMachineMapper.deleteByIds(machineIds, username); } private SysVisitorMachine buildMachine(Long areaId, String deviceName, String brand, String deviceId, String remark, Boolean enabled, Long excludeMachineId) { Long requiredAreaId = getRequiredAreaId(areaId); SysVisitArea area = visitAreaMapper.selectById(requiredAreaId); if (area == null) { throw new ServiceException("所属区域不存在"); } String requiredDeviceName = getRequiredText(deviceName, "设备名称不能为空"); String requiredBrand = getRequiredText(brand, "品牌不能为空"); String requiredDeviceId = getRequiredText(deviceId, "设备ID不能为空"); if (visitorMachineMapper.checkDeviceIdUnique(requiredDeviceId, excludeMachineId) != null) { throw new ServiceException("设备ID已存在"); } SysVisitorMachine machine = new SysVisitorMachine(); machine.setAreaId(requiredAreaId); machine.setDeviceName(requiredDeviceName); machine.setBrand(requiredBrand); machine.setDeviceId(requiredDeviceId); machine.setRemark(StringUtils.trim(remark)); machine.setEnabled(enabled == null ? Boolean.TRUE : enabled); return machine; } @Override @Transactional(rollbackFor = Exception.class) public int activateDevice(Long deviceId) { // 1. 根据deviceId查询设备 SysVisitorMachine device = visitorMachineMapper.selectById(deviceId); if (device == null || device.getDelFlag().equals("1")) { throw new ServiceException("设备不存在,请先添加设备"); } // 2. 检查是否已激活 if ("ONLINE".equals(device.getOnlineStatus()) || "ACTIVATED".equals(device.getOnlineStatus())) { throw new ServiceException("设备已激活,无需重复操作"); } // 3. 检查设备是否启用 if (device.getEnabled() == null || !device.getEnabled()) { throw new ServiceException("设备未启用,请先在后台启用设备"); } // 4. 更新状态为激活/在线 SysVisitorMachine update = new SysVisitorMachine(); update.setMachineId(device.getMachineId()); update.setOnlineStatus("ONLINE"); // 或 "ACTIVATED",根据你的枚举定义 update.setUpdateTime(new Date()); return visitorMachineMapper.updateMachine(update); } @Override @Transactional(rollbackFor = Exception.class) public int deactivateDevice(Long deviceId) { // 1. 根据deviceId查询设备 SysVisitorMachine device = visitorMachineMapper.selectById(deviceId); if (device == null || device.getDelFlag().equals("1")) { throw new ServiceException("设备不存在"); } // 2. 检查是否已注销 if ("OFFLINE".equals(device.getOnlineStatus()) || "UNACTIVATED".equals(device.getOnlineStatus())) { throw new ServiceException("设备已注销,无需重复操作"); } // 3. 更新状态为离线/未激活 SysVisitorMachine update = new SysVisitorMachine(); update.setMachineId(deviceId); update.setOnlineStatus("OFFLINE"); // 或 "UNACTIVATED" update.setUpdateTime(new Date()); return visitorMachineMapper.updateMachine(update); } private Long getRequiredAreaId(Long areaId) { if (areaId == null || areaId <= 0) { throw new ServiceException("所属区域不能为空"); } return areaId; } private Long getRequiredMachineId(Long machineId) { if (machineId == null || machineId <= 0) { throw new ServiceException("访客机主键不能为空"); } return machineId; } private List getRequiredMachineIds(List machineIds) { if (CollectionUtils.isEmpty(machineIds)) { throw new ServiceException("访客机主键集合不能为空"); } for (Long machineId : machineIds) { getRequiredMachineId(machineId); } return machineIds; } private String getRequiredText(String value, String message) { String result = StringUtils.trim(value); if (StringUtils.isEmpty(result)) { throw new ServiceException(message); } return result; } }