From 323764c813a09cd56cdab780155ef659dbe0b364 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期二, 11 八月 2026 15:08:03 +0800
Subject: [PATCH] update

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDoorDeviceServiceImpl.java |   60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 58 insertions(+), 2 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDoorDeviceServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDoorDeviceServiceImpl.java
index d8d792d..a648a9d 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDoorDeviceServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDoorDeviceServiceImpl.java
@@ -15,6 +15,8 @@
 import com.ruoyi.system.mapper.SysDoorDeviceMapper;
 import com.ruoyi.system.mapper.SysVisitAreaMapper;
 import com.ruoyi.system.service.ISysDoorDeviceService;
+import com.ruoyi.system.utils.AreaIdUtils;
+import com.ruoyi.system.utils.DoorDeviceCredentialCrypto;
 import com.ruoyi.system.vo.SysDoorDeviceVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -23,6 +25,7 @@
 
 import java.util.Date;
 import java.util.List;
+import java.nio.charset.Charset;
 
 /**
  * 门禁设备服务实现
@@ -44,11 +47,13 @@
     public PageInfo<SysDoorDeviceVO> pageList(SysDoorDevicePageRequest request)
     {
         SysDoorDevicePageRequest query = request == null ? new SysDoorDevicePageRequest() : request;
+        query.setAreaId(StringUtils.trim(query.getAreaId()));
         query.setDeviceName(StringUtils.trim(query.getDeviceName()));
         query.setDeviceId(StringUtils.trim(query.getDeviceId()));
         query.setOnlineStatus(StringUtils.trim(query.getOnlineStatus()));
         PageInfo<SysDoorDeviceVO> pageInfo = new PageInfo<SysDoorDeviceVO>(query.getPageNum(), query.getPageSize());
-        List<SysDoorDeviceVO> list = doorDeviceMapper.pageList(query, pageInfo);
+        List<SysDoorDeviceVO> list = doorDeviceMapper.pageList(query,
+                AreaIdUtils.parseLocalAreaId(query.getAreaId()), pageInfo);
         pageInfo.setRecords(list);
         return pageInfo;
     }
@@ -74,6 +79,9 @@
         }
         SysDoorDevice doorDevice = buildDoorDevice(request.getAreaId(), request.getDeviceName(), request.getBrand(),
                 request.getDeviceId(), request.getRemark(), request.getEnabled(), null);
+        fillConnectionSettings(doorDevice, request.getDevicePort(), request.getLoginUsername(),
+                request.getLoginPassword(), request.getDoorNo(), request.getTimeSectionNo(), request.getCharset(),
+                null, true);
         doorDevice.setOnlineStatus(ONLINE_STATUS_UNACTIVATED);
         doorDevice.setCreateBy(username);
         return doorDeviceMapper.insertDoorDevice(doorDevice);
@@ -87,12 +95,16 @@
             throw new ServiceException("门禁设备内容不能为空");
         }
         Long doorId = getRequiredDoorId(request.getDoorId());
-        if (doorDeviceMapper.selectById(doorId) == null)
+        SysDoorDevice existing = doorDeviceMapper.selectById(doorId);
+        if (existing == null)
         {
             throw new ServiceException("门禁设备不存在");
         }
         SysDoorDevice doorDevice = buildDoorDevice(request.getAreaId(), request.getDeviceName(), request.getBrand(),
                 request.getDeviceId(), request.getRemark(), request.getEnabled(), doorId);
+        fillConnectionSettings(doorDevice, request.getDevicePort(), request.getLoginUsername(),
+                request.getLoginPassword(), request.getDoorNo(), request.getTimeSectionNo(), request.getCharset(),
+                existing.getLoginPasswordCipher(), StringUtils.isEmpty(existing.getLoginPasswordCipher()));
         doorDevice.setDoorId(doorId);
         doorDevice.setUpdateBy(username);
         return doorDeviceMapper.updateDoorDevice(doorDevice);
@@ -150,6 +162,50 @@
         return doorDevice;
     }
 
+    private void fillConnectionSettings(SysDoorDevice doorDevice, Integer devicePort, String loginUsername,
+                                        String loginPassword, Integer doorNo, Integer timeSectionNo, String charset,
+                                        String existingPasswordCipher, boolean requirePassword)
+    {
+        int resolvedPort = devicePort == null ? 37777 : devicePort;
+        if (resolvedPort <= 0 || resolvedPort > 65535)
+        {
+            throw new ServiceException("设备端口必须在1到65535之间");
+        }
+        int resolvedDoorNo = doorNo == null ? 0 : doorNo;
+        if (resolvedDoorNo < 0)
+        {
+            throw new ServiceException("门通道序号不能小于0");
+        }
+        int resolvedTimeSectionNo = timeSectionNo == null ? 255 : timeSectionNo;
+        if (resolvedTimeSectionNo < 0 || resolvedTimeSectionNo > 255)
+        {
+            throw new ServiceException("时间模板序号必须在0到255之间");
+        }
+        String resolvedCharset = StringUtils.isEmpty(StringUtils.trim(charset)) ? "GBK" : StringUtils.trim(charset);
+        try
+        {
+            Charset.forName(resolvedCharset);
+        }
+        catch (Exception e)
+        {
+            throw new ServiceException("设备姓名编码无效");
+        }
+
+        String password = StringUtils.trim(loginPassword);
+        if (requirePassword && StringUtils.isEmpty(password))
+        {
+            throw new ServiceException("设备登录密码不能为空");
+        }
+        doorDevice.setDevicePort(resolvedPort);
+        doorDevice.setLoginUsername(StringUtils.isEmpty(StringUtils.trim(loginUsername))
+                ? "admin" : StringUtils.trim(loginUsername));
+        doorDevice.setLoginPasswordCipher(StringUtils.isEmpty(password)
+                ? existingPasswordCipher : DoorDeviceCredentialCrypto.encrypt(password));
+        doorDevice.setDoorNo(resolvedDoorNo);
+        doorDevice.setTimeSectionNo(resolvedTimeSectionNo);
+        doorDevice.setCharset(resolvedCharset);
+    }
+
     private Long getRequiredAreaId(Long areaId)
     {
         if (areaId == null || areaId <= 0)

--
Gitblit v1.7.1